1 /* 2 * This file and its contents are supplied under the terms of the 3 * Common Development and Distribution License ("CDDL"), version 1.0. 4 * You may only use this file in accordance with the terms of version 5 * 1.0 of the CDDL. 6 * 7 * A full copy of the text of the CDDL should have accompanied this 8 * source. A copy of the CDDL is also available via the Internet at 9 * http://www.illumos.org/license/CDDL. 10 */ 11 12 /* 13 * Copyright (c) 2019, Joyent, Inc. 14 */ 15 16 /* 17 * Extensible Host Controller Interface (xHCI) USB Driver 18 * 19 * The xhci driver is an HCI driver for USB that bridges the gap between client 20 * device drivers and implements the actual way that we talk to devices. The 21 * xhci specification provides access to USB 3.x capable devices, as well as all 22 * prior generations. Like other host controllers, it both provides the way to 23 * talk to devices and also is treated like a hub (often called the root hub). 24 * 25 * This driver is part of the USBA (USB Architecture). It implements the HCDI 26 * (host controller device interface) end of USBA. These entry points are used 27 * by the USBA on behalf of client device drivers to access their devices. The 28 * driver also provides notifications to deal with hot plug events, which are 29 * quite common in USB. 30 * 31 * ---------------- 32 * USB Introduction 33 * ---------------- 34 * 35 * To properly understand the xhci driver and the design of the USBA HCDI 36 * interfaces it implements, it helps to have a bit of background into how USB 37 * devices are structured and understand how they work at a high-level. 38 * 39 * USB devices, like PCI devices, are broken down into different classes of 40 * device. For example, with USB you have hubs, human-input devices (keyboards, 41 * mice, etc.), mass storage, etc. Every device also has a vendor and device ID. 42 * Many client drivers bind to an entire class of device, for example, the hubd 43 * driver (to hubs) or scsa2usb (USB storage). However, there are other drivers 44 * that bind to explicit IDs such as usbsprl (specific USB to Serial devices). 45 * 46 * USB SPEEDS AND VERSIONS 47 * 48 * USB devices are often referred to in two different ways. One way they're 49 * described is with the USB version that they conform to. In the wild, you're 50 * most likely going to see USB 1.1, 2.0, 2.1, and 3.0. However, you may also 51 * see devices referred to as 'full-', 'low-', 'high-', and 'super-' speed 52 * devices. 53 * 54 * The latter description describes the maximum theoretical speed of a given 55 * device. For example, a super-speed device theoretically caps out around 5 56 * Gbit/s, whereas a low-speed device caps out at 1.5 Mbit/s. 57 * 58 * In general, each speed usually corresponds to a specific USB protocol 59 * generation. For example, all USB 3.0 devices are super-speed devices. All 60 * 'high-speed' devices are USB 2.x devices. Full-speed devices are special in 61 * that they can either be USB 1.x or USB 2.x devices. Low-speed devices are 62 * only a USB 1.x thing, they did not jump the fire line to USB 2.x. 63 * 64 * USB 3.0 devices and ports generally have the wiring for both USB 2.0 and USB 65 * 3.0. When a USB 3.x device is plugged into a USB 2.0 port or hub, then it 66 * will report its version as USB 2.1, to indicate that it is actually a USB 3.x 67 * device. 68 * 69 * USB ENDPOINTS 70 * 71 * A given USB device is made up of endpoints. A request, or transfer, is made 72 * to a specific USB endpoint. These endpoints can provide different services 73 * and have different expectations around the size of the data that'll be used 74 * in a given request and the periodicity of requests. Endpoints themselves are 75 * either used to make one-shot requests, for example, making requests to a mass 76 * storage device for a given sector, or for making periodic requests where you 77 * end up polling on the endpoint, for example, polling on a USB keyboard for 78 * keystrokes. 79 * 80 * Each endpoint encodes two different pieces of information: a direction and a 81 * type. There are two different directions: IN and OUT. These refer to the 82 * general direction that data moves relative to the operating system. For 83 * example, an IN transfer transfers data in to the operating system, from the 84 * device. An OUT transfer transfers data from the operating system, out to the 85 * device. 86 * 87 * There are four different kinds of endpoints: 88 * 89 * BULK These transfers are large transfers of data to or from 90 * a device. The most common use for bulk transfers is for 91 * mass storage devices. Though they are often also used by 92 * network devices and more. Bulk endpoints do not have an 93 * explicit time component to them. They are always used 94 * for one-shot transfers. 95 * 96 * CONTROL These transfers are used to manipulate devices 97 * themselves and are used for USB protocol level 98 * operations (whether device-specific, class-specific, or 99 * generic across all of USB). Unlike other transfers, 100 * control transfers are always bi-directional and use 101 * different kinds of transfers. 102 * 103 * INTERRUPT Interrupt transfers are used for small transfers that 104 * happen infrequently, but need reasonable latency. A good 105 * example of interrupt transfers is to receive input from 106 * a USB keyboard. Interrupt-IN transfers are generally 107 * polled. Meaning that a client (device driver) opens up 108 * an interrupt-IN pipe to poll on it, and receives 109 * periodic updates whenever there is information 110 * available. However, Interrupt transfers can be used 111 * as one-shot transfers both going IN and OUT. 112 * 113 * ISOCHRONOUS These transfers are things that happen once per 114 * time-interval at a very regular rate. A good example of 115 * these transfers are for audio and video. A device may 116 * describe an interval as 10ms at which point it will read 117 * or write the next batch of data every 10ms and transform 118 * it for the user. There are no one-shot Isochronous-IN 119 * transfers. There are one-shot Isochronous-OUT transfers, 120 * but these are used by device drivers to always provide 121 * the system with sufficient data. 122 * 123 * To find out information about the endpoints, USB devices have a series of 124 * descriptors that cover different aspects of the device. For example, there 125 * are endpoint descriptors which cover the properties of endpoints such as the 126 * maximum packet size or polling interval. 127 * 128 * Descriptors exist at all levels of USB. For example, there are general 129 * descriptors for every device. The USB device descriptor is described in 130 * usb_dev_descr(9S). Host controllers will look at these descriptors to ensure 131 * that they program the device correctly; however, they are more often used by 132 * client device drivers. There are also descriptors that exist at a class 133 * level. For example, the hub class has a class-specific descriptor which 134 * describes properties of the hub. That information is requested for and used 135 * by the hub driver. 136 * 137 * All of the different descriptors are gathered by the system and placed into a 138 * tree which USBA sometimes calls the 'Configuration Cloud'. Client device 139 * drivers gain access to this cloud and then use them to open endpoints, which 140 * are called pipes in USBA (and some revisions of the USB specification). 141 * 142 * Each pipe gives access to a specific endpoint on the device which can be used 143 * to perform transfers of a specific type and direction. For example, a mass 144 * storage device often has three different endpoints, the default control 145 * endpoint (which every device has), a Bulk-IN endpoint, and a Bulk-OUT 146 * endpoint. The device driver ends up with three open pipes. One to the default 147 * control endpoint to configure the device, and then the other two are used to 148 * perform I/O. 149 * 150 * These routines translate more or less directly into calls to a host 151 * controller driver. A request to open a pipe takes an endpoint descriptor that 152 * describes the properties of the pipe, and the host controller driver (this 153 * driver) goes through and does any work necessary to allow the client device 154 * driver to access it. Once the pipe is open, it either makes one-shot 155 * transfers specific to the transfer type or it starts performing a periodic 156 * poll of an endpoint. 157 * 158 * All of these different actions translate into requests to the host 159 * controller. The host controller driver itself is in charge of making sure 160 * that all of the required resources for polling are allocated with a request 161 * and then proceed to give the driver's periodic callbacks. 162 * 163 * HUBS AND HOST CONTROLLERS 164 * 165 * Every device is always plugged into a hub, even if the device is itself a 166 * hub. This continues until we reach what we call the root-hub. The root-hub is 167 * special in that it is not an actual USB hub, but is integrated into the host 168 * controller and is manipulated in its own way. For example, the host 169 * controller is used to turn on and off a given port's power. This may happen 170 * over any interface, though the most common way is through PCI. 171 * 172 * In addition to the normal character device that exists for a host controller 173 * driver, as part of attaching, the host controller binds to an instance of the 174 * hubd driver. While the root-hub is a bit of a fiction, everyone models the 175 * root-hub as the same as any other hub that's plugged in. The hub kernel 176 * module doesn't know that the hub isn't a physical device that's been plugged 177 * in. The host controller driver simulates that view by taking hub requests 178 * that are made and translating them into corresponding requests that are 179 * understood by the host controller, for example, reading and writing to a 180 * memory mapped register. 181 * 182 * The hub driver polls for changes in device state using an Interrupt-IN 183 * request, which is the same as is done for the root-hub. This allows the host 184 * controller driver to not have to know about the implementation of device hot 185 * plug, merely react to requests from a hub, the same as if it were an external 186 * device. When the hub driver detects a change, it will go through the 187 * corresponding state machine and attach or detach the corresponding client 188 * device driver, depending if the device was inserted or removed. 189 * 190 * We detect the changes for the Interrupt-IN primarily based on the port state 191 * change events that are delivered to the event ring. Whenever any event is 192 * fired, we use this to update the hub driver about _all_ ports with 193 * outstanding events. This more closely matches how a hub is supposed to behave 194 * and leaves things less likely for the hub driver to end up without clearing a 195 * flag on a port. 196 * 197 * PACKET SIZES AND BURSTING 198 * 199 * A given USB endpoint has an explicit packet size and a number of packets that 200 * can be sent per time interval. These concepts are abstracted away from client 201 * device drives usually, though they sometimes inform the upper bounds of what 202 * a device can perform. 203 * 204 * The host controller uses this information to transform arbitrary transfer 205 * requests into USB protocol packets. One of the nice things about the host 206 * controllers is that they abstract away all of the signaling and semantics of 207 * the actual USB protocols, allowing for life to be slightly easier in the 208 * operating system. 209 * 210 * That said, if the host controller is not programmed correctly, these can end 211 * up causing transaction errors and other problems in response to the data that 212 * the host controller is trying to send or receive. 213 * 214 * ------------ 215 * Organization 216 * ------------ 217 * 218 * The driver is made up of the following files. Many of these have their own 219 * theory statements to describe what they do. Here, we touch on each of the 220 * purpose of each of these files. 221 * 222 * xhci_command.c: This file contains the logic to issue commands to the 223 * controller as well as the actual functions that the 224 * other parts of the driver use to cause those commands. 225 * 226 * xhci_context.c: This file manages various data structures used by the 227 * controller to manage the controller's and device's 228 * context data structures. See more in the xHCI Overview 229 * and General Design for more information. 230 * 231 * xhci_dma.c: This manages the allocation of DMA memory and DMA 232 * attributes for controller, whether memory is for a 233 * transfer or something else. This file also deals with 234 * all the logic of getting data in and out of DMA buffers. 235 * 236 * xhci_endpoint.c: This manages all of the logic of handling endpoints or 237 * pipes. It deals with endpoint configuration, I/O 238 * scheduling, timeouts, and callbacks to USBA. 239 * 240 * xhci_event.c: This manages callbacks from the hardware to the driver. 241 * This covers command completion notifications and I/O 242 * notifications. 243 * 244 * xhci_hub.c: This manages the virtual root-hub. It basically 245 * implements and translates all of the USB level requests 246 * into xhci specific implements. It also contains the 247 * functions to register this hub with USBA. 248 * 249 * xhci_intr.c: This manages the underlying interrupt allocation, 250 * interrupt moderation, and interrupt routines. 251 * 252 * xhci_quirks.c: This manages information about buggy hardware that's 253 * been collected and experienced primarily from other 254 * systems. 255 * 256 * xhci_ring.c: This manages the abstraction of a ring in xhci, which is 257 * the primary of communication between the driver and the 258 * hardware, whether for the controller or a device. 259 * 260 * xhci_usba.c: This implements all of the HCDI functions required by 261 * USBA. This is the main entry point that drivers and the 262 * kernel frameworks will reach to start any operation. 263 * Many functions here will end up in the command and 264 * endpoint code. 265 * 266 * xhci.c: This provides the main kernel DDI interfaces and 267 * performs device initialization. 268 * 269 * xhci_polled.c: This provides the polled I/O functions that the 270 * kernel debugger can use. 271 * 272 * xhci.h: This is the primary header file which defines 273 * illumos-specific data structures and constants to manage 274 * the system. 275 * 276 * xhcireg.h: This header file defines all of the register offsets, 277 * masks, and related macros. It also contains all of the 278 * constants that are used in various structures as defined 279 * by the specification, such as command offsets, etc. 280 * 281 * xhci_ioctl.h: This contains a few private ioctls that are used by a 282 * private debugging command. These are private. 283 * 284 * cmd/xhci/xhci_portsc: This is a private utility that can be useful for 285 * debugging xhci state. It is the only consumer of 286 * xhci_ioctl.h and the private ioctls. 287 * 288 * ---------------------------------- 289 * xHCI Overview and Structure Layout 290 * ---------------------------------- 291 * 292 * The design and structure of this driver follows from the way that the xHCI 293 * specification tells us that we have to work with hardware. First we'll give a 294 * rough summary of how that works, though the xHCI 1.1 specification should be 295 * referenced when going through this. 296 * 297 * There are three primary parts of the hardware -- registers, contexts, and 298 * rings. The registers are memory mapped registers that come in four sets, 299 * though all are found within the first BAR. These are used to program and 300 * control the hardware and aspects of the devices. Beyond more traditional 301 * device programming there are two primary sets of registers that are 302 * important: 303 * 304 * o Port Status and Control Registers (XHCI_PORTSC) 305 * o Doorbell Array (XHCI_DOORBELL) 306 * 307 * The port status and control registers are used to get and manipulate the 308 * status of a given device. For example, turning on and off the power to it. 309 * The Doorbell Array is used to kick off I/O operations and start the 310 * processing of an I/O ring. 311 * 312 * The contexts are data structures that represent various pieces of information 313 * in the controller. These contexts are generally filled out by the driver and 314 * then acknowledged and consumed by the hardware. There are controller-wide 315 * contexts (mostly managed in xhci_context.c) that are used to point to the 316 * contexts that exist for each device in the system. The primary context is 317 * called the Device Context Base Address Array (DCBAA). 318 * 319 * Each device in the system is allocated a 'slot', which is used to index into 320 * the DCBAA. Slots are assigned based on issuing commands to the controller. 321 * There are a fixed number of slots that determine the maximum number of 322 * devices that can end up being supported in the system. Note this includes all 323 * the devices plugged into the USB device tree, not just devices plugged into 324 * ports on the chassis. 325 * 326 * For each device, there is a context structure that describes properties of 327 * the device. For example, what speed is the device, is it a hub, etc. The 328 * context has slots for the device and for each endpoint on the device. As 329 * endpoints are enabled, their context information which describes things like 330 * the maximum packet size, is filled in and enabled. The mapping between these 331 * contexts look like: 332 * 333 * 334 * DCBAA 335 * +--------+ Device Context 336 * | Slot 0 |------------------>+--------------+ 337 * +--------+ | Slot Context | 338 * | ... | +--------------+ +----------+ 339 * +--------+ +------+ | Endpoint 0 |------>| I/O Ring | 340 * | Slot n |-->| NULL | | Context (Bi) | +----------+ 341 * +--------+ +------+ +--------------+ 342 * | Endpoint 1 | 343 * | Context (Out)| 344 * +--------------+ 345 * | Endpoint 1 | 346 * | Context (In) | 347 * +--------------+ 348 * | ... | 349 * +--------------+ 350 * | Endpoint 15 | 351 * | Context (In) | 352 * +--------------+ 353 * 354 * These contexts are always owned by the controller, though we can read them 355 * after various operations complete. Commands that toggle device state use a 356 * specific input context, which is a variant of the device context. The only 357 * difference is that it has an input context structure ahead of it to say which 358 * sections of the device context should be evaluated. 359 * 360 * Each active endpoint points us to an I/O ring, which leads us to the third 361 * main data structure that's used by the device: rings. Rings are made up of 362 * transfer request blocks (TRBs), which are joined together to form a given 363 * transfer description (TD) which represents a single I/O request. 364 * 365 * These rings are used to issue I/O to individual endpoints, to issue commands 366 * to the controller, and to receive notification of changes and completions. 367 * Issued commands go on the special ring called the command ring while the 368 * change and completion notifications go on the event ring. More details are 369 * available in xhci_ring.c. Each of these structures is represented by an 370 * xhci_ring_t. 371 * 372 * Each ring can be made up of one or more disjoint regions of DMA; however, we 373 * only use a single one. This also impacts some additional registers and 374 * structures that exist. The event ring has an indirection table called the 375 * Event Ring Segment Table (ERST). Each entry in the table (a segment) 376 * describes a chunk of the event ring. 377 * 378 * One other thing worth calling out is the scratchpad. The scratchpad is a way 379 * for the controller to be given arbitrary memory by the OS that it can use. 380 * There are two parts to the scratchpad. The first part is an array whose 381 * entries contain pointers to the actual addresses for the pages. The second 382 * part that we allocate are the actual pages themselves. 383 * 384 * ----------------------------- 385 * Endpoint State and Management 386 * ----------------------------- 387 * 388 * Endpoint management is one of the key parts to the xhci driver as every 389 * endpoint is a pipe that a device driver uses, so they are our primary 390 * currency. Endpoints are enabled and disabled when the client device drivers 391 * open and close a pipe. When an endpoint is enabled, we have to fill in an 392 * endpoint's context structure with information about the endpoint. These 393 * basically tell the controller important properties which it uses to ensure 394 * that there is adequate bandwidth for the device. 395 * 396 * Each endpoint has its own ring as described in the previous section. We place 397 * TRBs (transfer request blocks) onto a given ring to request I/O be performed. 398 * Responses are placed on the event ring, in other words, the rings associated 399 * with an endpoint are purely for producing I/O. 400 * 401 * Endpoints have a defined state machine as described in xHCI 1.1 / 4.8.3. 402 * These states generally correspond with the state of the endpoint to process 403 * I/O and handle timeouts. The driver basically follows a similar state machine 404 * as described there. There are some deviations. For example, what they 405 * describe as 'running' we break into both the Idle and Running states below. 406 * We also have a notion of timed out and quiescing. The following image 407 * summarizes the states and transitions: 408 * 409 * +------+ +-----------+ 410 * | Idle |---------*--------------------->| Running |<-+ 411 * +------+ . I/O queued on +-----------+ | 412 * ^ ring and timeout | | | | 413 * | scheduled. | | | | 414 * | | | | | 415 * +-----*---------------------------------+ | | | 416 * | . No I/Os remain | | | 417 * | | | | 418 * | +------*------------------+ | | 419 * | | . Timeout | | 420 * | | fires for | | 421 * | | I/O | | 422 * | v v | 423 * | +-----------+ +--------+ | 424 * | | Timed Out | | Halted | | 425 * | +-----------+ +--------+ | 426 * | | | | 427 * | | +-----------+ | | 428 * | +-->| Quiescing |<----------+ | 429 * | +-----------+ | 430 * | No TRBs. | . TRBs | 431 * | remain . | . Remain | 432 * +----------*----<------+-------->-------*-----------+ 433 * 434 * Normally, a given endpoint will oscillate between having TRBs scheduled and 435 * not. Every time a new I/O is added to the endpoint, we'll ring the doorbell, 436 * making sure that we're processing the ring, presuming that the endpoint isn't 437 * in one of the error states. 438 * 439 * To detect device hangs, we have an active timeout(9F) per active endpoint 440 * that ticks at a one second rate while we still have TRBs outstanding on an 441 * endpoint. Once all outstanding TRBs have been processed, the timeout will 442 * stop itself and there will be no active checking until the endpoint has I/O 443 * scheduled on it again. 444 * 445 * There are two primary ways that things can go wrong on the endpoint. We can 446 * either have a timeout or an event that transitions the endpoint to the Halted 447 * state. In the halted state, we need to issue explicit commands to reset the 448 * endpoint before removing the I/O. 449 * 450 * The way we handle both a timeout and a halted condition is similar, but the 451 * way they are triggered is different. When we detect a halted condition, we 452 * don't immediately clean it up, and wait for the client device driver (or USBA 453 * on its behalf) to issue a pipe reset. When we detect a timeout, we 454 * immediately take action (assuming no other action is ongoing). 455 * 456 * In both cases, we quiesce the device, which takes care of dealing with taking 457 * the endpoint from whatever state it may be in and taking the appropriate 458 * actions based on the state machine in xHCI 1.1 / 4.8.3. The end of quiescing 459 * leaves the device stopped, which allows us to update the ring's pointer and 460 * remove any TRBs that are causing problems. 461 * 462 * As part of all this, we ensure that we can only be quiescing the device from 463 * a given path at a time. Any requests to schedule I/O during this time will 464 * generally fail. 465 * 466 * The following image describes the state machine for the timeout logic. It 467 * ties into the image above. 468 * 469 * +----------+ +---------+ 470 * | Disabled |-----*--------------------->| Enabled |<--+ 471 * +----------+ . TRBs scheduled +---------+ *. 1 sec timer 472 * ^ and no active | | | | fires and 473 * | timer. | | | | another 474 * | | | +--+--+ quiesce, in 475 * | | | | a bad state, 476 * +------*------------------------------+ | ^ or decrement 477 * | . 1 sec timer | | I/O timeout 478 * | fires and | | 479 * | no TRBs or | +--------------+ 480 * | endpoint shutdown | | 481 * | *. . timer counter | 482 * ^ | reaches zero | 483 * | v | 484 * | +--------------+ | 485 * +-------------*---------------<--| Quiesce ring |->---*-------+ 486 * . No more | and fail I/O | . restart 487 * I/Os +--------------+ timer as 488 * more I/Os 489 * 490 * As we described above, when there are active TRBs and I/Os, a 1 second 491 * timeout(9F) will be active. Each second, we decrement a counter on the 492 * current, active I/O until either a new I/O takes the head, or the counter 493 * reaches zero. If the counter reaches zero, then we go through, quiesce the 494 * ring, and then clean things up. 495 * 496 * ------------------ 497 * Periodic Endpoints 498 * ------------------ 499 * 500 * It's worth calling out periodic endpoints explicitly, as they operate 501 * somewhat differently. Periodic endpoints are limited to Interrupt-IN and 502 * Isochronous-IN. The USBA often uses the term polling for these. That's 503 * because the client only needs to make a single API call; however, they'll 504 * receive multiple callbacks until either an error occurs or polling is 505 * requested to be terminated. 506 * 507 * When we have one of these periodic requests, we end up always rescheduling 508 * I/O requests, as well as, having a specific number of pre-existing I/O 509 * requests to cover the periodic needs, in case of latency spikes. Normally, 510 * when replying to a request, we use the request handle that we were given. 511 * However, when we have a periodic request, we're required to duplicate the 512 * handle before giving them data. 513 * 514 * However, the duplication is a bit tricky. For everything that was duplicated, 515 * the framework expects us to submit data. Because of that we, don't duplicate 516 * them until they are needed. This minimizes the likelihood that we have 517 * outstanding requests to deal with when we encounter a fatal polling failure. 518 * 519 * Most of the polling setup logic happens in xhci_usba.c in 520 * xhci_hcdi_periodic_init(). The consumption and duplication is handled in 521 * xhci_endpoint.c. 522 * 523 * ---------------- 524 * Structure Layout 525 * ---------------- 526 * 527 * The following images relate the core data structures. The primary structure 528 * in the system is the xhci_t. This is the per-controller data structure that 529 * exists for each instance of the driver. From there, each device in the system 530 * is represented by an xhci_device_t and each endpoint is represented by an 531 * xhci_endpoint_t. For each client that opens a given endpoint, there is an 532 * xhci_pipe_t. For each I/O related ring, there is an xhci_ring_t in the 533 * system. 534 * 535 * +------------------------+ 536 * | Per-Controller | 537 * | Structure | 538 * | xhci_t | 539 * | | 540 * | uint_t ---+--> Capability regs offset 541 * | uint_t ---+--> Operational regs offset 542 * | uint_t ---+--> Runtime regs offset 543 * | uint_t ---+--> Doorbell regs offset 544 * | xhci_state_flags_t ---+--> Device state flags 545 * | xhci_quirks_t ---+--> Device quirk flags 546 * | xhci_capability_t ---+--> Controller capability structure 547 * | xhci_dcbaa_t ---+----------------------------------+ 548 * | xhci_scratchpad_t ---+---------+ | 549 * | xhci_command_ing_t ---+------+ | v 550 * | xhci_event_ring_t ---+----+ | | +---------------------+ 551 * | xhci_usba_t ---+--+ | | | | Device Context | 552 * +------------------------+ | | | | | Base Address | 553 * | | | | | Array Structure | 554 * | | | | | xhci_dcbaa_t | 555 * +-------------------------------+ | | | | | 556 * | +-------------------------------+ | | DCBAA KVA <-+-- uint64_t * | 557 * | | +----------------------------+ | DMA Buffer <-+-- xhci_dma_buffer_t | 558 * | | v | +---------------------+ 559 * | | +--------------------------+ +-----------------------+ 560 * | | | Event Ring | | 561 * | | | Management | | 562 * | | | xhci_event_ring_t | v 563 * | | | | Event Ring +----------------------+ 564 * | | | xhci_event_segment_t * --|-> Segment VA | Scratchpad (Extra | 565 * | | | xhci_dma_buffer_t --|-> Segment DMA Buf. | Controller Memory) | 566 * | | | xhci_ring_t --|--+ | xhci_scratchpad_t | 567 * | | +--------------------------+ | Scratchpad | | 568 * | | | Base Array KVA <-+- uint64_t * | 569 * | +------------+ | Array DMA Buf. <-+- xhci_dma_buffer_t | 570 * | v | Scratchpad DMA <-+- xhci_dma_buffer_t * | 571 * | +---------------------------+ | Buffer per page +----------------------+ 572 * | | Command Ring | | 573 * | | xhci_command_ring_t | +------------------------------+ 574 * | | | | 575 * | | xhci_ring_t --+-> Command Ring --->------------+ 576 * | | list_t --+-> Command List v 577 * | | timeout_id_t --+-> Timeout State +---------------------+ 578 * | | xhci_command_ring_state_t +-> State Flags | I/O Ring | 579 * | +---------------------------+ | xhci_ring_t | 580 * | | | 581 * | Ring DMA Buf. <-+-- xhci_dma_buffer_t | 582 * | Ring Length <-+-- uint_t | 583 * | Ring Entry KVA <-+-- xhci_trb_t * | 584 * | +---------------------------+ Ring Head <-+-- uint_t | 585 * +--->| USBA State | Ring Tail <-+-- uint_t | 586 * | xhci_usba_t | Ring Cycle <-+-- uint_t | 587 * | | +---------------------+ 588 * | usba_hcdi_ops_t * -+-> USBA Ops Vector ^ 589 * | usb_dev_dscr_t -+-> USB Virtual Device Descriptor | 590 * | usb_ss_hub_descr_t -+-> USB Virtual Hub Descriptor | 591 * | usba_pipe_handle_data_t * +-> Interrupt polling client | 592 * | usb_intr_req_t -+-> Interrupt polling request | 593 * | uint32_t --+-> Interrupt polling device mask | 594 * | list_t --+-> Pipe List (Active Users) | 595 * | list_t --+-------------------+ | 596 * +---------------------------+ | ^ 597 * | | 598 * v | 599 * +-------------------------------+ +---------------+ | 600 * | USB Device |------------>| USB Device |--> ... | 601 * | xhci_device_t | | xhci_device_t | | 602 * | | +---------------+ | 603 * | usb_port_t --+-> USB Port plugged into | 604 * | uint8_t --+-> Slot Number | 605 * | boolean_t --+-> Address Assigned | 606 * | usba_device_t * --+-> USBA Device State | 607 * | xhci_dma_buffer_t --+-> Input Context DMA Buffer | 608 * | xhci_input_context_t * --+-> Input Context KVA | 609 * | xhci_slot_contex_t * --+-> Input Slot Context KVA | 610 * | xhci_endpoint_context_t *[] --+-> Input Endpoint Context KVA | 611 * | xhci_dma_buffer_t --+-> Output Context DMA Buffer | 612 * | xhci_slot_context_t * --+-> Output Slot Context KVA ^ 613 * | xhci_endpoint_context_t *[] --+-> Output Endpoint Context KVA | 614 * | xhci_endpoint_t *[] --+-> Endpoint Tracking ---+ | 615 * +-------------------------------+ | | 616 * | | 617 * v | 618 * +------------------------------+ +-----------------+ | 619 * | Endpoint Data |----------->| Endpoint Data |--> ... | 620 * | xhci_endpoint_t | | xhci_endpoint_t | | 621 * | | +-----------------+ | 622 * | int --+-> Endpoint Number | 623 * | int --+-> Endpoint Type | 624 * | xhci_endpoint_state_t --+-> Endpoint State | 625 * | timeout_id_t --+-> Endpoint Timeout State | 626 * | usba_pipe_handle_data_t * --+-> USBA Client Handle | 627 * | xhci_ring_t --+-> Endpoint I/O Ring -------->--------+ 628 * | list_t --+-> Transfer List --------+ 629 * +------------------------------+ | 630 * v 631 * +-------------------------+ +--------------------+ 632 * | Transfer Structure |----------------->| Transfer Structure |-> ... 633 * | xhci_transfer_t | | xhci_transfer_t | 634 * | | +--------------------+ 635 * | xhci_dma_buffer_t --+-> I/O DMA Buffer 636 * | uint_t --+-> Number of TRBs 637 * | uint_t --+-> Short transfer data 638 * | uint_t --+-> Timeout seconds remaining 639 * | usb_cr_t --+-> USB Transfer return value 640 * | boolean_t --+-> Data direction 641 * | xhci_trb_t * --+-> Host-order transfer requests for I/O 642 * | usb_isoc_pkt_descr_t * -+-> Isochronous only response data 643 * | usb_opaque_t --+-> USBA Request Handle 644 * +-------------------------+ 645 * 646 * ------------- 647 * Lock Ordering 648 * ------------- 649 * 650 * There are three different tiers of locks that exist in the driver. First, 651 * there is a lock for each controller: xhci_t`xhci_lock. This protects all the 652 * data for that instance of the controller. If there are multiple instances of 653 * the xHCI controller in the system, each one is independent and protected 654 * separately. The two do not share any data. 655 * 656 * From there, there are two other, specific locks in the system: 657 * 658 * o xhci_command_ring_t`xcr_lock 659 * o xhci_device_t`xd_imtx 660 * 661 * There is only one xcr_lock per controller, like the xhci_lock. It protects 662 * the state of the command ring. However, there is on xd_imtx per device. 663 * Recall that each device is scoped to a given controller. This protects the 664 * input slot context for a given device. 665 * 666 * There are a few important rules to keep in mind here that are true 667 * universally throughout the driver: 668 * 669 * 1) Always grab the xhci_t`xhci_lock, before grabbing any of the other locks. 670 * 2) A given xhci_device_t`xd_imtx, must be taken before grabbing the 671 * xhci_command_ring_t`xcr_lock. 672 * 3) A given thread can only hold one of the given xhci_device_t`xd_imtx locks 673 * at a given time. In other words, we should never be manipulating the input 674 * context of two different devices at once. 675 * 4) It is safe to hold the xhci_device_t`xd_imtx while tearing down the 676 * endpoint timer. Conversely, the endpoint specific logic should never enter 677 * this lock. 678 * 679 * ---------- 680 * Polled I/O 681 * ---------- 682 * 683 * There is limited support for polled I/O in this driver for use by 684 * the kernel debugger. The driver currently only supports input from 685 * interrupt endpoints which is good enough for USB HID keyboard devices. 686 * Input from bulk endpoints and output are not supported which prevents 687 * using a serial console over USB for kernel debugging. 688 * 689 * -------------------- 690 * Relationship to EHCI 691 * -------------------- 692 * 693 * On some Intel chipsets, a given physical port on the system may be routed to 694 * one of the EHCI or xHCI controllers. This association can be dynamically 695 * changed by writing to platform specific registers as handled by the quirk 696 * logic in xhci_quirk.c. 697 * 698 * As these ports may support USB 3.x speeds, we always route all such ports to 699 * the xHCI controller, when supported. In addition, to minimize disruptions 700 * from devices being enumerated and attached to the EHCI driver and then 701 * disappearing, we generally attempt to load the xHCI controller before the 702 * EHCI controller. This logic is not done in the driver; however, it is done in 703 * other parts of the kernel like in uts/common/io/consconfig_dacf.c in the 704 * function consconfig_load_drivres(). 705 * 706 * ----------- 707 * Future Work 708 * ----------- 709 * 710 * The primary future work in this driver spans two different, but related 711 * areas. The first area is around controller resets and how they tie into FM. 712 * Presently, we do not have a good way to handle controllers coming and going 713 * in the broader USB stack or properly reconfigure the device after a reset. 714 * Secondly, we don't handle the suspend and resume of devices and drivers. 715 */ 716 717 #include <sys/param.h> 718 #include <sys/modctl.h> 719 #include <sys/conf.h> 720 #include <sys/devops.h> 721 #include <sys/ddi.h> 722 #include <sys/sunddi.h> 723 #include <sys/cmn_err.h> 724 #include <sys/ddifm.h> 725 #include <sys/pci.h> 726 #include <sys/class.h> 727 #include <sys/policy.h> 728 729 #include <sys/usb/hcd/xhci/xhci.h> 730 #include <sys/usb/hcd/xhci/xhci_ioctl.h> 731 732 /* 733 * We want to use the first BAR to access its registers. The regs[] array is 734 * ordered based on the rules for the PCI supplement to IEEE 1275. So regs[1] 735 * will always be the first BAR. 736 */ 737 #define XHCI_REG_NUMBER 1 738 739 /* 740 * This task queue exists as a global taskq that is used for resetting the 741 * device in the face of FM or runtime errors. Each instance of the device 742 * (xhci_t) happens to have a single taskq_dispatch_ent already allocated so we 743 * know that we should always be able to dispatch such an event. 744 */ 745 static taskq_t *xhci_taskq; 746 747 /* 748 * Global soft state for per-instance data. Note that we must use the soft state 749 * routines and cannot use the ddi_set_driver_private() routines. The USB 750 * framework presumes that it can use the dip's private data. 751 */ 752 void *xhci_soft_state; 753 754 /* 755 * This is the time in us that we wait after a controller resets before we 756 * consider reading any register. There are some controllers that want at least 757 * 1 ms, therefore we default to 10 ms. 758 */ 759 clock_t xhci_reset_delay = 10000; 760 761 void 762 xhci_error(xhci_t *xhcip, const char *fmt, ...) 763 { 764 va_list ap; 765 766 va_start(ap, fmt); 767 if (xhcip != NULL && xhcip->xhci_dip != NULL) { 768 vdev_err(xhcip->xhci_dip, CE_WARN, fmt, ap); 769 } else { 770 vcmn_err(CE_WARN, fmt, ap); 771 } 772 va_end(ap); 773 } 774 775 void 776 xhci_log(xhci_t *xhcip, const char *fmt, ...) 777 { 778 va_list ap; 779 780 va_start(ap, fmt); 781 if (xhcip != NULL && xhcip->xhci_dip != NULL) { 782 vdev_err(xhcip->xhci_dip, CE_NOTE, fmt, ap); 783 } else { 784 vcmn_err(CE_NOTE, fmt, ap); 785 } 786 va_end(ap); 787 } 788 789 /* 790 * USBA is in charge of creating device nodes for us. USBA explicitly ORs in the 791 * constant HUBD_IS_ROOT_HUB, so we have to undo that when we're looking at 792 * things here. A simple bitwise-and will take care of this. And hey, it could 793 * always be more complex, USBA could clone! 794 */ 795 static dev_info_t * 796 xhci_get_dip(dev_t dev) 797 { 798 xhci_t *xhcip; 799 int instance = getminor(dev) & ~HUBD_IS_ROOT_HUB; 800 801 xhcip = ddi_get_soft_state(xhci_soft_state, instance); 802 if (xhcip != NULL) 803 return (xhcip->xhci_dip); 804 return (NULL); 805 } 806 807 uint8_t 808 xhci_get8(xhci_t *xhcip, xhci_reg_type_t rtt, uintptr_t off) 809 { 810 uintptr_t addr, roff; 811 812 switch (rtt) { 813 case XHCI_R_CAP: 814 roff = xhcip->xhci_regs_capoff; 815 break; 816 case XHCI_R_OPER: 817 roff = xhcip->xhci_regs_operoff; 818 break; 819 case XHCI_R_RUN: 820 roff = xhcip->xhci_regs_runoff; 821 break; 822 case XHCI_R_DOOR: 823 roff = xhcip->xhci_regs_dooroff; 824 break; 825 default: 826 panic("called %s with bad reg type: %d", __func__, rtt); 827 } 828 ASSERT(roff != PCI_EINVAL32); 829 addr = roff + off + (uintptr_t)xhcip->xhci_regs_base; 830 831 return (ddi_get8(xhcip->xhci_regs_handle, (void *)addr)); 832 } 833 834 uint16_t 835 xhci_get16(xhci_t *xhcip, xhci_reg_type_t rtt, uintptr_t off) 836 { 837 uintptr_t addr, roff; 838 839 switch (rtt) { 840 case XHCI_R_CAP: 841 roff = xhcip->xhci_regs_capoff; 842 break; 843 case XHCI_R_OPER: 844 roff = xhcip->xhci_regs_operoff; 845 break; 846 case XHCI_R_RUN: 847 roff = xhcip->xhci_regs_runoff; 848 break; 849 case XHCI_R_DOOR: 850 roff = xhcip->xhci_regs_dooroff; 851 break; 852 default: 853 panic("called %s with bad reg type: %d", __func__, rtt); 854 } 855 ASSERT(roff != PCI_EINVAL32); 856 addr = roff + off + (uintptr_t)xhcip->xhci_regs_base; 857 858 return (ddi_get16(xhcip->xhci_regs_handle, (void *)addr)); 859 } 860 861 uint32_t 862 xhci_get32(xhci_t *xhcip, xhci_reg_type_t rtt, uintptr_t off) 863 { 864 uintptr_t addr, roff; 865 866 switch (rtt) { 867 case XHCI_R_CAP: 868 roff = xhcip->xhci_regs_capoff; 869 break; 870 case XHCI_R_OPER: 871 roff = xhcip->xhci_regs_operoff; 872 break; 873 case XHCI_R_RUN: 874 roff = xhcip->xhci_regs_runoff; 875 break; 876 case XHCI_R_DOOR: 877 roff = xhcip->xhci_regs_dooroff; 878 break; 879 default: 880 panic("called %s with bad reg type: %d", __func__, rtt); 881 } 882 ASSERT(roff != PCI_EINVAL32); 883 addr = roff + off + (uintptr_t)xhcip->xhci_regs_base; 884 885 return (ddi_get32(xhcip->xhci_regs_handle, (void *)addr)); 886 } 887 888 uint64_t 889 xhci_get64(xhci_t *xhcip, xhci_reg_type_t rtt, uintptr_t off) 890 { 891 uintptr_t addr, roff; 892 893 switch (rtt) { 894 case XHCI_R_CAP: 895 roff = xhcip->xhci_regs_capoff; 896 break; 897 case XHCI_R_OPER: 898 roff = xhcip->xhci_regs_operoff; 899 break; 900 case XHCI_R_RUN: 901 roff = xhcip->xhci_regs_runoff; 902 break; 903 case XHCI_R_DOOR: 904 roff = xhcip->xhci_regs_dooroff; 905 break; 906 default: 907 panic("called %s with bad reg type: %d", __func__, rtt); 908 } 909 ASSERT(roff != PCI_EINVAL32); 910 addr = roff + off + (uintptr_t)xhcip->xhci_regs_base; 911 912 return (ddi_get64(xhcip->xhci_regs_handle, (void *)addr)); 913 } 914 915 void 916 xhci_put8(xhci_t *xhcip, xhci_reg_type_t rtt, uintptr_t off, uint8_t val) 917 { 918 uintptr_t addr, roff; 919 920 switch (rtt) { 921 case XHCI_R_CAP: 922 roff = xhcip->xhci_regs_capoff; 923 break; 924 case XHCI_R_OPER: 925 roff = xhcip->xhci_regs_operoff; 926 break; 927 case XHCI_R_RUN: 928 roff = xhcip->xhci_regs_runoff; 929 break; 930 case XHCI_R_DOOR: 931 roff = xhcip->xhci_regs_dooroff; 932 break; 933 default: 934 panic("called %s with bad reg type: %d", __func__, rtt); 935 } 936 ASSERT(roff != PCI_EINVAL32); 937 addr = roff + off + (uintptr_t)xhcip->xhci_regs_base; 938 939 ddi_put8(xhcip->xhci_regs_handle, (void *)addr, val); 940 } 941 942 void 943 xhci_put16(xhci_t *xhcip, xhci_reg_type_t rtt, uintptr_t off, uint16_t val) 944 { 945 uintptr_t addr, roff; 946 947 switch (rtt) { 948 case XHCI_R_CAP: 949 roff = xhcip->xhci_regs_capoff; 950 break; 951 case XHCI_R_OPER: 952 roff = xhcip->xhci_regs_operoff; 953 break; 954 case XHCI_R_RUN: 955 roff = xhcip->xhci_regs_runoff; 956 break; 957 case XHCI_R_DOOR: 958 roff = xhcip->xhci_regs_dooroff; 959 break; 960 default: 961 panic("called %s with bad reg type: %d", __func__, rtt); 962 } 963 ASSERT(roff != PCI_EINVAL32); 964 addr = roff + off + (uintptr_t)xhcip->xhci_regs_base; 965 966 ddi_put16(xhcip->xhci_regs_handle, (void *)addr, val); 967 } 968 969 void 970 xhci_put32(xhci_t *xhcip, xhci_reg_type_t rtt, uintptr_t off, uint32_t val) 971 { 972 uintptr_t addr, roff; 973 974 switch (rtt) { 975 case XHCI_R_CAP: 976 roff = xhcip->xhci_regs_capoff; 977 break; 978 case XHCI_R_OPER: 979 roff = xhcip->xhci_regs_operoff; 980 break; 981 case XHCI_R_RUN: 982 roff = xhcip->xhci_regs_runoff; 983 break; 984 case XHCI_R_DOOR: 985 roff = xhcip->xhci_regs_dooroff; 986 break; 987 default: 988 panic("called %s with bad reg type: %d", __func__, rtt); 989 } 990 ASSERT(roff != PCI_EINVAL32); 991 addr = roff + off + (uintptr_t)xhcip->xhci_regs_base; 992 993 ddi_put32(xhcip->xhci_regs_handle, (void *)addr, val); 994 } 995 996 void 997 xhci_put64(xhci_t *xhcip, xhci_reg_type_t rtt, uintptr_t off, uint64_t val) 998 { 999 uintptr_t addr, roff; 1000 1001 switch (rtt) { 1002 case XHCI_R_CAP: 1003 roff = xhcip->xhci_regs_capoff; 1004 break; 1005 case XHCI_R_OPER: 1006 roff = xhcip->xhci_regs_operoff; 1007 break; 1008 case XHCI_R_RUN: 1009 roff = xhcip->xhci_regs_runoff; 1010 break; 1011 case XHCI_R_DOOR: 1012 roff = xhcip->xhci_regs_dooroff; 1013 break; 1014 default: 1015 panic("called %s with bad reg type: %d", __func__, rtt); 1016 } 1017 ASSERT(roff != PCI_EINVAL32); 1018 addr = roff + off + (uintptr_t)xhcip->xhci_regs_base; 1019 1020 ddi_put64(xhcip->xhci_regs_handle, (void *)addr, val); 1021 } 1022 1023 int 1024 xhci_check_regs_acc(xhci_t *xhcip) 1025 { 1026 ddi_fm_error_t de; 1027 1028 /* 1029 * Treat the case where we can't check as fine so we can treat the code 1030 * more simply. 1031 */ 1032 if (!DDI_FM_ACC_ERR_CAP(xhcip->xhci_fm_caps)) 1033 return (DDI_FM_OK); 1034 1035 ddi_fm_acc_err_get(xhcip->xhci_regs_handle, &de, DDI_FME_VERSION); 1036 ddi_fm_acc_err_clear(xhcip->xhci_regs_handle, DDI_FME_VERSION); 1037 return (de.fme_status); 1038 } 1039 1040 /* 1041 * As a leaf PCIe driver, we just post the ereport and continue on. 1042 */ 1043 /* ARGSUSED */ 1044 static int 1045 xhci_fm_error_cb(dev_info_t *dip, ddi_fm_error_t *err, const void *impl_data) 1046 { 1047 pci_ereport_post(dip, err, NULL); 1048 return (err->fme_status); 1049 } 1050 1051 static void 1052 xhci_fm_fini(xhci_t *xhcip) 1053 { 1054 if (xhcip->xhci_fm_caps == 0) 1055 return; 1056 1057 if (DDI_FM_ERRCB_CAP(xhcip->xhci_fm_caps)) 1058 ddi_fm_handler_unregister(xhcip->xhci_dip); 1059 1060 if (DDI_FM_EREPORT_CAP(xhcip->xhci_fm_caps) || 1061 DDI_FM_ERRCB_CAP(xhcip->xhci_fm_caps)) 1062 pci_ereport_teardown(xhcip->xhci_dip); 1063 1064 ddi_fm_fini(xhcip->xhci_dip); 1065 } 1066 1067 static void 1068 xhci_fm_init(xhci_t *xhcip) 1069 { 1070 ddi_iblock_cookie_t iblk; 1071 int def = DDI_FM_EREPORT_CAPABLE | DDI_FM_ACCCHK_CAPABLE | 1072 DDI_FM_DMACHK_CAPABLE | DDI_FM_ERRCB_CAPABLE; 1073 1074 xhcip->xhci_fm_caps = ddi_prop_get_int(DDI_DEV_T_ANY, xhcip->xhci_dip, 1075 DDI_PROP_DONTPASS, "fm_capable", def); 1076 1077 if (xhcip->xhci_fm_caps < 0) { 1078 xhcip->xhci_fm_caps = 0; 1079 } else if (xhcip->xhci_fm_caps & ~def) { 1080 xhcip->xhci_fm_caps &= def; 1081 } 1082 1083 if (xhcip->xhci_fm_caps == 0) 1084 return; 1085 1086 ddi_fm_init(xhcip->xhci_dip, &xhcip->xhci_fm_caps, &iblk); 1087 if (DDI_FM_EREPORT_CAP(xhcip->xhci_fm_caps) || 1088 DDI_FM_ERRCB_CAP(xhcip->xhci_fm_caps)) { 1089 pci_ereport_setup(xhcip->xhci_dip); 1090 } 1091 1092 if (DDI_FM_ERRCB_CAP(xhcip->xhci_fm_caps)) { 1093 ddi_fm_handler_register(xhcip->xhci_dip, 1094 xhci_fm_error_cb, xhcip); 1095 } 1096 } 1097 1098 static int 1099 xhci_reg_poll(xhci_t *xhcip, xhci_reg_type_t rt, int reg, uint32_t mask, 1100 uint32_t targ, uint_t tries, int delay_ms) 1101 { 1102 uint_t i; 1103 1104 for (i = 0; i < tries; i++) { 1105 uint32_t val = xhci_get32(xhcip, rt, reg); 1106 if (xhci_check_regs_acc(xhcip) != DDI_FM_OK) { 1107 ddi_fm_service_impact(xhcip->xhci_dip, 1108 DDI_SERVICE_LOST); 1109 return (EIO); 1110 } 1111 1112 if ((val & mask) == targ) 1113 return (0); 1114 1115 delay(drv_usectohz(delay_ms * 1000)); 1116 } 1117 return (ETIMEDOUT); 1118 } 1119 1120 static boolean_t 1121 xhci_regs_map(xhci_t *xhcip) 1122 { 1123 off_t memsize; 1124 int ret; 1125 ddi_device_acc_attr_t da; 1126 1127 if (ddi_dev_regsize(xhcip->xhci_dip, XHCI_REG_NUMBER, &memsize) != 1128 DDI_SUCCESS) { 1129 xhci_error(xhcip, "failed to get register set size"); 1130 return (B_FALSE); 1131 } 1132 1133 bzero(&da, sizeof (ddi_device_acc_attr_t)); 1134 da.devacc_attr_version = DDI_DEVICE_ATTR_V0; 1135 da.devacc_attr_endian_flags = DDI_STRUCTURE_LE_ACC; 1136 da.devacc_attr_dataorder = DDI_STRICTORDER_ACC; 1137 if (DDI_FM_ACC_ERR_CAP(xhcip->xhci_fm_caps)) { 1138 da.devacc_attr_access = DDI_FLAGERR_ACC; 1139 } else { 1140 da.devacc_attr_access = DDI_DEFAULT_ACC; 1141 } 1142 1143 ret = ddi_regs_map_setup(xhcip->xhci_dip, XHCI_REG_NUMBER, 1144 &xhcip->xhci_regs_base, 0, memsize, &da, &xhcip->xhci_regs_handle); 1145 1146 if (ret != DDI_SUCCESS) { 1147 xhci_error(xhcip, "failed to map device registers: %d", ret); 1148 return (B_FALSE); 1149 } 1150 1151 return (B_TRUE); 1152 } 1153 1154 static boolean_t 1155 xhci_regs_init(xhci_t *xhcip) 1156 { 1157 /* 1158 * The capabilities always begin at offset zero. 1159 */ 1160 xhcip->xhci_regs_capoff = 0; 1161 xhcip->xhci_regs_operoff = xhci_get8(xhcip, XHCI_R_CAP, XHCI_CAPLENGTH); 1162 xhcip->xhci_regs_runoff = xhci_get32(xhcip, XHCI_R_CAP, XHCI_RTSOFF); 1163 xhcip->xhci_regs_runoff &= ~0x1f; 1164 xhcip->xhci_regs_dooroff = xhci_get32(xhcip, XHCI_R_CAP, XHCI_DBOFF); 1165 xhcip->xhci_regs_dooroff &= ~0x3; 1166 1167 if (xhci_check_regs_acc(xhcip) != DDI_FM_OK) { 1168 xhci_error(xhcip, "failed to initialize controller register " 1169 "offsets: encountered FM register error"); 1170 ddi_fm_service_impact(xhcip->xhci_dip, DDI_SERVICE_LOST); 1171 return (B_FALSE); 1172 } 1173 1174 return (B_TRUE); 1175 } 1176 1177 /* 1178 * Read various parameters from PCI configuration space and from the Capability 1179 * registers that we'll need to register the device. We cache all of the 1180 * Capability registers. 1181 */ 1182 static boolean_t 1183 xhci_read_params(xhci_t *xhcip) 1184 { 1185 uint8_t usb; 1186 uint16_t vers; 1187 uint32_t struc1, struc2, struc3, cap1, cap2, pgsz; 1188 uint32_t psize, pbit, capreg; 1189 xhci_capability_t *xcap; 1190 unsigned long ps; 1191 1192 /* 1193 * While it's tempting to do a 16-bit read at offset 0x2, unfortunately, 1194 * a few emulated systems don't support reading at offset 0x2 for the 1195 * version. Instead we need to read the caplength register and get the 1196 * upper two bytes. 1197 */ 1198 capreg = xhci_get32(xhcip, XHCI_R_CAP, XHCI_CAPLENGTH); 1199 vers = XHCI_VERSION_MASK(capreg); 1200 usb = pci_config_get8(xhcip->xhci_cfg_handle, PCI_XHCI_USBREV); 1201 struc1 = xhci_get32(xhcip, XHCI_R_CAP, XHCI_HCSPARAMS1); 1202 struc2 = xhci_get32(xhcip, XHCI_R_CAP, XHCI_HCSPARAMS2); 1203 struc3 = xhci_get32(xhcip, XHCI_R_CAP, XHCI_HCSPARAMS3); 1204 cap1 = xhci_get32(xhcip, XHCI_R_CAP, XHCI_HCCPARAMS1); 1205 cap2 = xhci_get32(xhcip, XHCI_R_CAP, XHCI_HCCPARAMS2); 1206 pgsz = xhci_get32(xhcip, XHCI_R_OPER, XHCI_PAGESIZE); 1207 if (xhci_check_regs_acc(xhcip) != DDI_FM_OK) { 1208 xhci_error(xhcip, "failed to read controller parameters: " 1209 "encountered FM register error"); 1210 ddi_fm_service_impact(xhcip->xhci_dip, DDI_SERVICE_LOST); 1211 return (B_FALSE); 1212 } 1213 1214 xcap = &xhcip->xhci_caps; 1215 xcap->xcap_usb_vers = usb; 1216 xcap->xcap_hci_vers = vers; 1217 xcap->xcap_max_slots = XHCI_HCS1_DEVSLOT_MAX(struc1); 1218 xcap->xcap_max_intrs = XHCI_HCS1_IRQ_MAX(struc1); 1219 xcap->xcap_max_ports = XHCI_HCS1_N_PORTS(struc1); 1220 if (xcap->xcap_max_ports > MAX_PORTS) { 1221 xhci_error(xhcip, "Root hub has %d ports, but system only " 1222 "supports %d, limiting to %d\n", xcap->xcap_max_ports, 1223 MAX_PORTS, MAX_PORTS); 1224 xcap->xcap_max_ports = MAX_PORTS; 1225 } 1226 1227 xcap->xcap_ist_micro = XHCI_HCS2_IST_MICRO(struc2); 1228 xcap->xcap_ist = XHCI_HCS2_IST(struc2); 1229 xcap->xcap_max_esrt = XHCI_HCS2_ERST_MAX(struc2); 1230 xcap->xcap_scratch_restore = XHCI_HCS2_SPR(struc2); 1231 xcap->xcap_max_scratch = XHCI_HCS2_SPB_MAX(struc2); 1232 1233 xcap->xcap_u1_lat = XHCI_HCS3_U1_DEL(struc3); 1234 xcap->xcap_u2_lat = XHCI_HCS3_U2_DEL(struc3); 1235 1236 xcap->xcap_flags = XHCI_HCC1_FLAGS_MASK(cap1); 1237 xcap->xcap_max_psa = XHCI_HCC1_PSA_SZ_MAX(cap1); 1238 xcap->xcap_xecp_off = XHCI_HCC1_XECP(cap1); 1239 xcap->xcap_flags2 = XHCI_HCC2_FLAGS_MASK(cap2); 1240 1241 /* 1242 * We don't have documentation for what changed from before xHCI 0.96, 1243 * so we just refuse to support versions before 0.96. We also will 1244 * ignore anything with a major version greater than 1. 1245 */ 1246 if (xcap->xcap_hci_vers < 0x96 || xcap->xcap_hci_vers >= 0x200) { 1247 xhci_error(xhcip, "Encountered unsupported xHCI version 0.%2x", 1248 xcap->xcap_hci_vers); 1249 return (B_FALSE); 1250 } 1251 1252 /* 1253 * Determine the smallest size page that the controller supports and 1254 * make sure that it matches our pagesize. We basically check here for 1255 * the presence of 4k and 8k pages. The basis of the pagesize is used 1256 * extensively throughout the code and specification. While we could 1257 * support other page sizes here, given that we don't support systems 1258 * with it at this time, it doesn't make much sense. 1259 */ 1260 ps = PAGESIZE; 1261 if (ps == 0x1000) { 1262 pbit = XHCI_PAGESIZE_4K; 1263 psize = 0x1000; 1264 } else if (ps == 0x2000) { 1265 pbit = XHCI_PAGESIZE_8K; 1266 psize = 0x2000; 1267 } else { 1268 xhci_error(xhcip, "Encountered host page size that the driver " 1269 "doesn't know how to handle: %lx\n", ps); 1270 return (B_FALSE); 1271 } 1272 1273 if (!(pgsz & pbit)) { 1274 xhci_error(xhcip, "Encountered controller that didn't support " 1275 "the host page size (%d), supports: %x", psize, pgsz); 1276 return (B_FALSE); 1277 } 1278 xcap->xcap_pagesize = psize; 1279 1280 return (B_TRUE); 1281 } 1282 1283 /* 1284 * Apply known workarounds and issues. These reports come from other 1285 * Operating Systems and have been collected over time. 1286 */ 1287 static boolean_t 1288 xhci_identify(xhci_t *xhcip) 1289 { 1290 xhci_quirks_populate(xhcip); 1291 1292 if (xhcip->xhci_quirks & XHCI_QUIRK_NO_MSI) { 1293 xhcip->xhci_caps.xcap_intr_types = DDI_INTR_TYPE_FIXED; 1294 } else { 1295 xhcip->xhci_caps.xcap_intr_types = DDI_INTR_TYPE_FIXED | 1296 DDI_INTR_TYPE_MSI | DDI_INTR_TYPE_MSIX; 1297 } 1298 1299 if (xhcip->xhci_quirks & XHCI_QUIRK_32_ONLY) { 1300 xhcip->xhci_caps.xcap_flags &= ~XCAP_AC64; 1301 } 1302 1303 return (B_TRUE); 1304 } 1305 1306 static boolean_t 1307 xhci_alloc_intr_handle(xhci_t *xhcip, int type) 1308 { 1309 int ret; 1310 1311 /* 1312 * Normally a well-behaving driver would more carefully request an 1313 * amount of interrupts based on the number available, etc. But since we 1314 * only actually want a single interrupt, we're just going to go ahead 1315 * and ask for a single interrupt. 1316 */ 1317 ret = ddi_intr_alloc(xhcip->xhci_dip, &xhcip->xhci_intr_hdl, type, 0, 1318 XHCI_NINTR, &xhcip->xhci_intr_num, DDI_INTR_ALLOC_NORMAL); 1319 if (ret != DDI_SUCCESS) { 1320 xhci_log(xhcip, "!failed to allocate interrupts of type %d: %d", 1321 type, ret); 1322 return (B_FALSE); 1323 } 1324 xhcip->xhci_intr_type = type; 1325 1326 return (B_TRUE); 1327 } 1328 1329 static boolean_t 1330 xhci_alloc_intrs(xhci_t *xhcip) 1331 { 1332 int intr_types, ret; 1333 1334 if (XHCI_NINTR > xhcip->xhci_caps.xcap_max_intrs) { 1335 xhci_error(xhcip, "controller does not support the minimum " 1336 "number of interrupts required (%d), supports %d", 1337 XHCI_NINTR, xhcip->xhci_caps.xcap_max_intrs); 1338 return (B_FALSE); 1339 } 1340 1341 if ((ret = ddi_intr_get_supported_types(xhcip->xhci_dip, 1342 &intr_types)) != DDI_SUCCESS) { 1343 xhci_error(xhcip, "failed to get supported interrupt types: " 1344 "%d", ret); 1345 return (B_FALSE); 1346 } 1347 1348 /* 1349 * Mask off interrupt types we've already ruled out due to quirks or 1350 * other reasons. 1351 */ 1352 intr_types &= xhcip->xhci_caps.xcap_intr_types; 1353 if (intr_types & DDI_INTR_TYPE_MSIX) { 1354 if (xhci_alloc_intr_handle(xhcip, DDI_INTR_TYPE_MSIX)) 1355 return (B_TRUE); 1356 } 1357 1358 if (intr_types & DDI_INTR_TYPE_MSI) { 1359 if (xhci_alloc_intr_handle(xhcip, DDI_INTR_TYPE_MSI)) 1360 return (B_TRUE); 1361 } 1362 1363 if (intr_types & DDI_INTR_TYPE_FIXED) { 1364 if (xhci_alloc_intr_handle(xhcip, DDI_INTR_TYPE_FIXED)) 1365 return (B_TRUE); 1366 } 1367 1368 xhci_error(xhcip, "failed to allocate an interrupt, supported types: " 1369 "0x%x", intr_types); 1370 return (B_FALSE); 1371 } 1372 1373 static boolean_t 1374 xhci_add_intr_handler(xhci_t *xhcip) 1375 { 1376 int ret; 1377 1378 if ((ret = ddi_intr_get_pri(xhcip->xhci_intr_hdl, 1379 &xhcip->xhci_intr_pri)) != DDI_SUCCESS) { 1380 xhci_error(xhcip, "failed to get interrupt priority: %d", ret); 1381 return (B_FALSE); 1382 } 1383 1384 if ((ret = ddi_intr_get_cap(xhcip->xhci_intr_hdl, 1385 &xhcip->xhci_intr_caps)) != DDI_SUCCESS) { 1386 xhci_error(xhcip, "failed to get interrupt capabilities: %d", 1387 ret); 1388 return (B_FALSE); 1389 } 1390 1391 if ((ret = ddi_intr_add_handler(xhcip->xhci_intr_hdl, xhci_intr, xhcip, 1392 (uintptr_t)0)) != DDI_SUCCESS) { 1393 xhci_error(xhcip, "failed to add interrupt handler: %d", ret); 1394 return (B_FALSE); 1395 } 1396 return (B_TRUE); 1397 } 1398 1399 /* 1400 * Find a capability with an identifier whose value is 'id'. The 'init' argument 1401 * gives us the offset to start searching at. See xHCI 1.1 / 7 for more 1402 * information. This is more or less exactly like PCI capabilities. 1403 */ 1404 static boolean_t 1405 xhci_find_ext_cap(xhci_t *xhcip, uint32_t id, uint32_t init, uint32_t *outp) 1406 { 1407 uint32_t off; 1408 uint8_t next = 0; 1409 1410 /* 1411 * If we have no offset, we're done. 1412 */ 1413 if (xhcip->xhci_caps.xcap_xecp_off == 0) 1414 return (B_FALSE); 1415 1416 off = xhcip->xhci_caps.xcap_xecp_off << 2; 1417 do { 1418 uint32_t cap_hdr; 1419 1420 off += next << 2; 1421 cap_hdr = xhci_get32(xhcip, XHCI_R_CAP, off); 1422 if (xhci_check_regs_acc(xhcip) != DDI_FM_OK) { 1423 xhci_error(xhcip, "failed to read xhci extended " 1424 "capabilities at offset 0x%x: encountered FM " 1425 "register error", off); 1426 ddi_fm_service_impact(xhcip->xhci_dip, 1427 DDI_SERVICE_LOST); 1428 break; 1429 } 1430 1431 if (cap_hdr == PCI_EINVAL32) 1432 break; 1433 if (XHCI_XECP_ID(cap_hdr) == id && 1434 (init == UINT32_MAX || off > init)) { 1435 *outp = off; 1436 return (B_TRUE); 1437 } 1438 next = XHCI_XECP_NEXT(cap_hdr); 1439 /* 1440 * Watch out for overflow if we somehow end up with a more than 1441 * 2 GiB space. 1442 */ 1443 if (next << 2 > (INT32_MAX - off)) 1444 return (B_FALSE); 1445 } while (next != 0); 1446 1447 return (B_FALSE); 1448 } 1449 1450 /* 1451 * For mostly information purposes, we'd like to walk to augment the devinfo 1452 * tree with the number of ports that support USB 2 and USB 3. Note though that 1453 * these ports may be overlapping. Many ports can support both USB 2 and USB 3 1454 * and are wired up to the same physical port, even though they show up as 1455 * separate 'ports' in the xhci sense. 1456 */ 1457 static boolean_t 1458 xhci_port_count(xhci_t *xhcip) 1459 { 1460 uint_t nusb2 = 0, fusb2 = 0; 1461 uint_t nusb30 = 0, fusb30 = 0; 1462 uint_t nusb31 = 0, fusb31 = 0; 1463 uint32_t off = UINT32_MAX; 1464 1465 while (xhci_find_ext_cap(xhcip, XHCI_ID_PROTOCOLS, off, &off) == 1466 B_TRUE) { 1467 uint32_t rvers, rport; 1468 uint8_t maj, min, count, first; 1469 1470 /* 1471 * See xHCI 1.1 / 7.2 for the format of this. The first uint32_t 1472 * has version information while the third uint32_t has the port 1473 * count. 1474 */ 1475 rvers = xhci_get32(xhcip, XHCI_R_CAP, off); 1476 rport = xhci_get32(xhcip, XHCI_R_CAP, off + 8); 1477 if (xhci_check_regs_acc(xhcip) != DDI_FM_OK) { 1478 xhci_error(xhcip, "failed to read xhci port counts: " 1479 "encountered fatal FM register error"); 1480 ddi_fm_service_impact(xhcip->xhci_dip, 1481 DDI_SERVICE_LOST); 1482 return (B_FALSE); 1483 } 1484 1485 maj = XHCI_XECP_PROT_MAJOR(rvers); 1486 min = XHCI_XECP_PROT_MINOR(rvers); 1487 count = XHCI_XECP_PROT_PCOUNT(rport); 1488 first = XHCI_XECP_PROT_FPORT(rport); 1489 1490 /* 1491 * In the wild, we've seen some systems that are using a minor 1492 * version of 0x10 and some that are using 0x01 in this field. 1493 * While the xhci spec says that we should expect it to be a 1494 * minor of 0x01 based on the xHCI 1.1 specification Table 155: 1495 * xHCI Supported Protocols. However, the USB 3.1 specification 1496 * defines the version to be 0x10 when encoded as a BCD style. 1497 * As such, handle both and hope we never get to revision 16 of 1498 * USB 3. 1499 */ 1500 if (maj == 3 && (min == 0x10 || min == 0x01)) { 1501 nusb31 = count; 1502 fusb31 = first; 1503 } else if (maj == 3 && min == 0) { 1504 nusb30 = count; 1505 fusb30 = first; 1506 } else if (maj <= 2) { 1507 nusb2 = count; 1508 fusb2 = first; 1509 } else { 1510 xhci_error(xhcip, "encountered port capabilities with " 1511 "unknown USB version: %x.%x\n", maj, min); 1512 } 1513 } 1514 1515 /* 1516 * These properties are used by FMA and the USB topo module. 1517 */ 1518 if (nusb2 > 0) { 1519 (void) ddi_prop_update_int(DDI_DEV_T_NONE, xhcip->xhci_dip, 1520 "usb2.0-port-count", nusb2); 1521 (void) ddi_prop_update_int(DDI_DEV_T_NONE, xhcip->xhci_dip, 1522 "usb2.0-first-port", fusb2); 1523 } 1524 if (nusb30 > 0) { 1525 (void) ddi_prop_update_int(DDI_DEV_T_NONE, xhcip->xhci_dip, 1526 "usb3.0-port-count", nusb30); 1527 (void) ddi_prop_update_int(DDI_DEV_T_NONE, xhcip->xhci_dip, 1528 "usb3.0-first-port", fusb30); 1529 } 1530 1531 if (nusb31 > 0) { 1532 (void) ddi_prop_update_int(DDI_DEV_T_NONE, xhcip->xhci_dip, 1533 "usb3.1-port-count", nusb31); 1534 (void) ddi_prop_update_int(DDI_DEV_T_NONE, xhcip->xhci_dip, 1535 "usb3.1-first-port", fusb31); 1536 } 1537 1538 return (B_TRUE); 1539 } 1540 1541 /* 1542 * Take over control from the BIOS or other firmware, if applicable. 1543 */ 1544 static boolean_t 1545 xhci_controller_takeover(xhci_t *xhcip) 1546 { 1547 int ret; 1548 uint32_t val, off; 1549 1550 /* 1551 * If we can't find the legacy capability, then there's nothing to do. 1552 */ 1553 if (xhci_find_ext_cap(xhcip, XHCI_ID_USB_LEGACY, UINT32_MAX, &off) == 1554 B_FALSE) 1555 return (B_TRUE); 1556 val = xhci_get32(xhcip, XHCI_R_CAP, off); 1557 if (xhci_check_regs_acc(xhcip) != DDI_FM_OK) { 1558 xhci_error(xhcip, "failed to read BIOS take over registers: " 1559 "encountered fatal FM register error"); 1560 ddi_fm_service_impact(xhcip->xhci_dip, DDI_SERVICE_LOST); 1561 return (B_FALSE); 1562 } 1563 1564 if (val & XHCI_BIOS_OWNED) { 1565 val |= XHCI_OS_OWNED; 1566 xhci_put32(xhcip, XHCI_R_CAP, off, val); 1567 if (xhci_check_regs_acc(xhcip) != DDI_FM_OK) { 1568 xhci_error(xhcip, "failed to write BIOS take over " 1569 "registers: encountered fatal FM register error"); 1570 ddi_fm_service_impact(xhcip->xhci_dip, 1571 DDI_SERVICE_LOST); 1572 return (B_FALSE); 1573 } 1574 1575 /* 1576 * Wait up to 5 seconds for things to change. While this number 1577 * isn't specified in the xHCI spec, it seems to be the de facto 1578 * value that various systems are using today. We'll use a 10ms 1579 * interval to check. 1580 */ 1581 ret = xhci_reg_poll(xhcip, XHCI_R_CAP, off, 1582 XHCI_BIOS_OWNED | XHCI_OS_OWNED, XHCI_OS_OWNED, 500, 10); 1583 if (ret == EIO) 1584 return (B_FALSE); 1585 if (ret == ETIMEDOUT) { 1586 xhci_log(xhcip, "!timed out waiting for firmware to " 1587 "hand off, taking over"); 1588 val &= ~XHCI_BIOS_OWNED; 1589 xhci_put32(xhcip, XHCI_R_CAP, off, val); 1590 if (xhci_check_regs_acc(xhcip) != DDI_FM_OK) { 1591 xhci_error(xhcip, "failed to write forced " 1592 "takeover: encountered fatal FM register " 1593 "error"); 1594 ddi_fm_service_impact(xhcip->xhci_dip, 1595 DDI_SERVICE_LOST); 1596 return (B_FALSE); 1597 } 1598 } 1599 } 1600 1601 val = xhci_get32(xhcip, XHCI_R_CAP, off + XHCI_XECP_LEGCTLSTS); 1602 if (xhci_check_regs_acc(xhcip) != DDI_FM_OK) { 1603 xhci_error(xhcip, "failed to read legacy control registers: " 1604 "encountered fatal FM register error"); 1605 ddi_fm_service_impact(xhcip->xhci_dip, DDI_SERVICE_LOST); 1606 return (B_FALSE); 1607 } 1608 val &= XHCI_XECP_SMI_MASK; 1609 val |= XHCI_XECP_CLEAR_SMI; 1610 xhci_put32(xhcip, XHCI_R_CAP, off + XHCI_XECP_LEGCTLSTS, val); 1611 if (xhci_check_regs_acc(xhcip) != DDI_FM_OK) { 1612 xhci_error(xhcip, "failed to write legacy control registers: " 1613 "encountered fatal FM register error"); 1614 ddi_fm_service_impact(xhcip->xhci_dip, DDI_SERVICE_LOST); 1615 return (B_FALSE); 1616 } 1617 1618 return (B_TRUE); 1619 } 1620 1621 static int 1622 xhci_controller_stop(xhci_t *xhcip) 1623 { 1624 uint32_t cmdreg; 1625 1626 cmdreg = xhci_get32(xhcip, XHCI_R_OPER, XHCI_USBCMD); 1627 if (xhci_check_regs_acc(xhcip) != DDI_FM_OK) { 1628 xhci_error(xhcip, "failed to read USB Command register: " 1629 "encountered fatal FM register error"); 1630 ddi_fm_service_impact(xhcip->xhci_dip, DDI_SERVICE_LOST); 1631 return (EIO); 1632 } 1633 1634 cmdreg &= ~(XHCI_CMD_RS | XHCI_CMD_INTE); 1635 xhci_put32(xhcip, XHCI_R_OPER, XHCI_USBCMD, cmdreg); 1636 if (xhci_check_regs_acc(xhcip) != DDI_FM_OK) { 1637 xhci_error(xhcip, "failed to write USB Command register: " 1638 "encountered fatal FM register error"); 1639 ddi_fm_service_impact(xhcip->xhci_dip, DDI_SERVICE_LOST); 1640 return (EIO); 1641 } 1642 1643 /* 1644 * Wait up to 50ms for this to occur. The specification says that this 1645 * should stop within 16ms, but we give ourselves a bit more time just 1646 * in case. 1647 */ 1648 return (xhci_reg_poll(xhcip, XHCI_R_OPER, XHCI_USBSTS, XHCI_STS_HCH, 1649 XHCI_STS_HCH, 50, 10)); 1650 } 1651 1652 static int 1653 xhci_controller_reset(xhci_t *xhcip) 1654 { 1655 int ret; 1656 uint32_t cmdreg; 1657 1658 cmdreg = xhci_get32(xhcip, XHCI_R_OPER, XHCI_USBCMD); 1659 if (xhci_check_regs_acc(xhcip) != DDI_FM_OK) { 1660 xhci_error(xhcip, "failed to read USB Command register for " 1661 "reset: encountered fatal FM register error"); 1662 ddi_fm_service_impact(xhcip->xhci_dip, DDI_SERVICE_LOST); 1663 return (EIO); 1664 } 1665 1666 cmdreg |= XHCI_CMD_HCRST; 1667 xhci_put32(xhcip, XHCI_R_OPER, XHCI_USBCMD, cmdreg); 1668 if (xhci_check_regs_acc(xhcip) != DDI_FM_OK) { 1669 xhci_error(xhcip, "failed to write USB Command register for " 1670 "reset: encountered fatal FM register error"); 1671 ddi_fm_service_impact(xhcip->xhci_dip, DDI_SERVICE_LOST); 1672 return (EIO); 1673 } 1674 1675 /* 1676 * Some controllers apparently don't want to be touched for at least 1ms 1677 * after we initiate the reset. Therefore give all controllers this 1678 * moment to breathe. 1679 */ 1680 delay(drv_usectohz(xhci_reset_delay)); 1681 1682 /* 1683 * To tell that the reset has completed we first verify that the reset 1684 * has finished and that the USBCMD register no longer has the reset bit 1685 * asserted. However, once that's done we have to go verify that CNR 1686 * (Controller Not Ready) is no longer asserted. 1687 */ 1688 if ((ret = xhci_reg_poll(xhcip, XHCI_R_OPER, XHCI_USBCMD, 1689 XHCI_CMD_HCRST, 0, 500, 10)) != 0) 1690 return (ret); 1691 1692 return (xhci_reg_poll(xhcip, XHCI_R_OPER, XHCI_USBSTS, 1693 XHCI_STS_CNR, 0, 500, 10)); 1694 } 1695 1696 /* 1697 * Take care of all the required initialization before we can actually enable 1698 * the controller. This means that we need to: 1699 * 1700 * o Program the maximum number of slots 1701 * o Program the DCBAAP and allocate the scratchpad 1702 * o Program the Command Ring 1703 * o Initialize the Event Ring 1704 * o Enable interrupts (set imod) 1705 */ 1706 static int 1707 xhci_controller_configure(xhci_t *xhcip) 1708 { 1709 int ret; 1710 uint32_t config; 1711 1712 config = xhci_get32(xhcip, XHCI_R_OPER, XHCI_CONFIG); 1713 config &= ~XHCI_CONFIG_SLOTS_MASK; 1714 config |= xhcip->xhci_caps.xcap_max_slots; 1715 xhci_put32(xhcip, XHCI_R_OPER, XHCI_CONFIG, config); 1716 if (xhci_check_regs_acc(xhcip) != DDI_FM_OK) { 1717 ddi_fm_service_impact(xhcip->xhci_dip, DDI_SERVICE_LOST); 1718 return (EIO); 1719 } 1720 1721 if ((ret = xhci_context_init(xhcip)) != 0) { 1722 const char *reason; 1723 if (ret == EIO) { 1724 reason = "fatal FM I/O error occurred"; 1725 } else if (ret == ENOMEM) { 1726 reason = "unable to allocate DMA memory"; 1727 } else { 1728 reason = "unexpected error occurred"; 1729 } 1730 1731 xhci_error(xhcip, "failed to initialize xhci context " 1732 "registers: %s (%d)", reason, ret); 1733 return (ret); 1734 } 1735 1736 if ((ret = xhci_command_ring_init(xhcip)) != 0) { 1737 xhci_error(xhcip, "failed to initialize commands: %d", ret); 1738 return (ret); 1739 } 1740 1741 if ((ret = xhci_event_init(xhcip)) != 0) { 1742 xhci_error(xhcip, "failed to initialize events: %d", ret); 1743 return (ret); 1744 } 1745 1746 if ((ret = xhci_intr_conf(xhcip)) != 0) { 1747 xhci_error(xhcip, "failed to configure interrupts: %d", ret); 1748 return (ret); 1749 } 1750 1751 return (0); 1752 } 1753 1754 static int 1755 xhci_controller_start(xhci_t *xhcip) 1756 { 1757 uint32_t reg; 1758 1759 reg = xhci_get32(xhcip, XHCI_R_OPER, XHCI_USBCMD); 1760 if (xhci_check_regs_acc(xhcip) != DDI_FM_OK) { 1761 xhci_error(xhcip, "failed to read USB Command register for " 1762 "start: encountered fatal FM register error"); 1763 ddi_fm_service_impact(xhcip->xhci_dip, DDI_SERVICE_LOST); 1764 return (EIO); 1765 } 1766 1767 reg |= XHCI_CMD_RS; 1768 xhci_put32(xhcip, XHCI_R_OPER, XHCI_USBCMD, reg); 1769 if (xhci_check_regs_acc(xhcip) != DDI_FM_OK) { 1770 xhci_error(xhcip, "failed to write USB Command register for " 1771 "start: encountered fatal FM register error"); 1772 ddi_fm_service_impact(xhcip->xhci_dip, DDI_SERVICE_LOST); 1773 return (EIO); 1774 } 1775 1776 return (xhci_reg_poll(xhcip, XHCI_R_OPER, XHCI_USBSTS, 1777 XHCI_STS_HCH, 0, 500, 10)); 1778 } 1779 1780 /* ARGSUSED */ 1781 static void 1782 xhci_reset_task(void *arg) 1783 { 1784 /* 1785 * Longer term, we'd like to properly perform a controller reset. 1786 * However, that requires a bit more assistance from USBA to work 1787 * properly and tear down devices. In the meantime, we panic. 1788 */ 1789 panic("XHCI runtime reset required"); 1790 } 1791 1792 /* 1793 * This function is called when we've detected a fatal FM condition that has 1794 * resulted in a loss of service and we need to force a reset of the controller 1795 * as a whole. Only one such reset may be ongoing at a time. 1796 */ 1797 void 1798 xhci_fm_runtime_reset(xhci_t *xhcip) 1799 { 1800 boolean_t locked = B_FALSE; 1801 1802 if (mutex_owned(&xhcip->xhci_lock)) { 1803 locked = B_TRUE; 1804 } else { 1805 mutex_enter(&xhcip->xhci_lock); 1806 } 1807 1808 /* 1809 * If we're already in the error state than a reset is already ongoing 1810 * and there is nothing for us to do here. 1811 */ 1812 if (xhcip->xhci_state & XHCI_S_ERROR) { 1813 goto out; 1814 } 1815 1816 xhcip->xhci_state |= XHCI_S_ERROR; 1817 ddi_fm_service_impact(xhcip->xhci_dip, DDI_SERVICE_LOST); 1818 taskq_dispatch_ent(xhci_taskq, xhci_reset_task, xhcip, 0, 1819 &xhcip->xhci_tqe); 1820 out: 1821 if (!locked) { 1822 mutex_exit(&xhcip->xhci_lock); 1823 } 1824 } 1825 1826 static int 1827 xhci_ioctl_portsc(xhci_t *xhcip, intptr_t arg) 1828 { 1829 int i; 1830 xhci_ioctl_portsc_t xhi; 1831 1832 bzero(&xhi, sizeof (xhci_ioctl_portsc_t)); 1833 xhi.xhi_nports = xhcip->xhci_caps.xcap_max_ports; 1834 for (i = 1; i <= xhcip->xhci_caps.xcap_max_ports; i++) { 1835 xhi.xhi_portsc[i] = xhci_get32(xhcip, XHCI_R_OPER, 1836 XHCI_PORTSC(i)); 1837 } 1838 1839 if (ddi_copyout(&xhi, (void *)(uintptr_t)arg, sizeof (xhi), 0) != 0) 1840 return (EFAULT); 1841 1842 return (0); 1843 } 1844 1845 static int 1846 xhci_ioctl_clear(xhci_t *xhcip, intptr_t arg) 1847 { 1848 uint32_t reg; 1849 xhci_ioctl_clear_t xic; 1850 1851 if (ddi_copyin((const void *)(uintptr_t)arg, &xic, sizeof (xic), 1852 0) != 0) 1853 return (EFAULT); 1854 1855 if (xic.xic_port == 0 || xic.xic_port > 1856 xhcip->xhci_caps.xcap_max_ports) 1857 return (EINVAL); 1858 1859 reg = xhci_get32(xhcip, XHCI_R_OPER, XHCI_PORTSC(xic.xic_port)); 1860 reg &= ~XHCI_PS_CLEAR; 1861 reg |= XHCI_PS_CSC | XHCI_PS_PEC | XHCI_PS_WRC | XHCI_PS_OCC | 1862 XHCI_PS_PRC | XHCI_PS_PLC | XHCI_PS_CEC; 1863 xhci_put32(xhcip, XHCI_R_OPER, XHCI_PORTSC(xic.xic_port), reg); 1864 1865 return (0); 1866 } 1867 1868 static int 1869 xhci_ioctl_setpls(xhci_t *xhcip, intptr_t arg) 1870 { 1871 uint32_t reg; 1872 xhci_ioctl_setpls_t xis; 1873 1874 if (ddi_copyin((const void *)(uintptr_t)arg, &xis, sizeof (xis), 1875 0) != 0) 1876 return (EFAULT); 1877 1878 if (xis.xis_port == 0 || xis.xis_port > 1879 xhcip->xhci_caps.xcap_max_ports) 1880 return (EINVAL); 1881 1882 if (xis.xis_pls & ~0xf) 1883 return (EINVAL); 1884 1885 reg = xhci_get32(xhcip, XHCI_R_OPER, XHCI_PORTSC(xis.xis_port)); 1886 reg &= ~XHCI_PS_CLEAR; 1887 reg |= XHCI_PS_PLS_SET(xis.xis_pls); 1888 reg |= XHCI_PS_LWS; 1889 xhci_put32(xhcip, XHCI_R_OPER, XHCI_PORTSC(xis.xis_port), reg); 1890 1891 return (0); 1892 } 1893 1894 static int 1895 xhci_open(dev_t *devp, int flags, int otyp, cred_t *credp) 1896 { 1897 dev_info_t *dip = xhci_get_dip(*devp); 1898 1899 return (usba_hubdi_open(dip, devp, flags, otyp, credp)); 1900 } 1901 1902 static int 1903 xhci_ioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp, 1904 int *rvalp) 1905 { 1906 dev_info_t *dip = xhci_get_dip(dev); 1907 1908 if (cmd == XHCI_IOCTL_PORTSC || 1909 cmd == XHCI_IOCTL_CLEAR || 1910 cmd == XHCI_IOCTL_SETPLS) { 1911 xhci_t *xhcip = ddi_get_soft_state(xhci_soft_state, 1912 getminor(dev) & ~HUBD_IS_ROOT_HUB); 1913 1914 if (secpolicy_hwmanip(credp) != 0 || 1915 crgetzoneid(credp) != GLOBAL_ZONEID) 1916 return (EPERM); 1917 1918 if (mode & FKIOCTL) 1919 return (ENOTSUP); 1920 1921 if (!(mode & FWRITE)) 1922 return (EBADF); 1923 1924 if (cmd == XHCI_IOCTL_PORTSC) 1925 return (xhci_ioctl_portsc(xhcip, arg)); 1926 else if (cmd == XHCI_IOCTL_CLEAR) 1927 return (xhci_ioctl_clear(xhcip, arg)); 1928 else 1929 return (xhci_ioctl_setpls(xhcip, arg)); 1930 } 1931 1932 return (usba_hubdi_ioctl(dip, dev, cmd, arg, mode, credp, rvalp)); 1933 } 1934 1935 static int 1936 xhci_close(dev_t dev, int flag, int otyp, cred_t *credp) 1937 { 1938 dev_info_t *dip = xhci_get_dip(dev); 1939 1940 return (usba_hubdi_close(dip, dev, flag, otyp, credp)); 1941 } 1942 1943 /* 1944 * We try to clean up everything that we can. The only thing that we let stop us 1945 * at this time is a failure to remove the root hub, which is realistically the 1946 * equivalent of our EBUSY case. 1947 */ 1948 static int 1949 xhci_cleanup(xhci_t *xhcip) 1950 { 1951 int ret, inst; 1952 1953 if (xhcip->xhci_seq & XHCI_ATTACH_ROOT_HUB) { 1954 if ((ret = xhci_root_hub_fini(xhcip)) != 0) 1955 return (ret); 1956 } 1957 1958 if (xhcip->xhci_seq & XHCI_ATTACH_USBA) { 1959 xhci_hcd_fini(xhcip); 1960 } 1961 1962 if (xhcip->xhci_seq & XHCI_ATTACH_STARTED) { 1963 mutex_enter(&xhcip->xhci_lock); 1964 while (xhcip->xhci_state & XHCI_S_ERROR) 1965 cv_wait(&xhcip->xhci_statecv, &xhcip->xhci_lock); 1966 mutex_exit(&xhcip->xhci_lock); 1967 1968 (void) xhci_controller_stop(xhcip); 1969 } 1970 1971 /* 1972 * Always release the context, command, and event data. They handle the 1973 * fact that they me be in an arbitrary state or unallocated. 1974 */ 1975 xhci_event_fini(xhcip); 1976 xhci_command_ring_fini(xhcip); 1977 xhci_context_fini(xhcip); 1978 1979 if (xhcip->xhci_seq & XHCI_ATTACH_INTR_ENABLE) { 1980 (void) xhci_ddi_intr_disable(xhcip); 1981 } 1982 1983 if (xhcip->xhci_seq & XHCI_ATTACH_SYNCH) { 1984 cv_destroy(&xhcip->xhci_statecv); 1985 mutex_destroy(&xhcip->xhci_lock); 1986 } 1987 1988 if (xhcip->xhci_seq & XHCI_ATTACH_INTR_ADD) { 1989 if ((ret = ddi_intr_remove_handler(xhcip->xhci_intr_hdl)) != 1990 DDI_SUCCESS) { 1991 xhci_error(xhcip, "failed to remove interrupt " 1992 "handler: %d", ret); 1993 } 1994 } 1995 1996 if (xhcip->xhci_seq & XHCI_ATTACH_INTR_ALLOC) { 1997 if ((ret = ddi_intr_free(xhcip->xhci_intr_hdl)) != 1998 DDI_SUCCESS) { 1999 xhci_error(xhcip, "failed to free interrupts: %d", ret); 2000 } 2001 } 2002 2003 if (xhcip->xhci_seq & XHCI_ATTACH_REGS_MAP) { 2004 ddi_regs_map_free(&xhcip->xhci_regs_handle); 2005 xhcip->xhci_regs_handle = NULL; 2006 } 2007 2008 if (xhcip->xhci_seq & XHCI_ATTACH_PCI_CONFIG) { 2009 pci_config_teardown(&xhcip->xhci_cfg_handle); 2010 xhcip->xhci_cfg_handle = NULL; 2011 } 2012 2013 if (xhcip->xhci_seq & XHCI_ATTACH_FM) { 2014 xhci_fm_fini(xhcip); 2015 xhcip->xhci_fm_caps = 0; 2016 } 2017 2018 inst = ddi_get_instance(xhcip->xhci_dip); 2019 xhcip->xhci_dip = NULL; 2020 ddi_soft_state_free(xhci_soft_state, inst); 2021 2022 return (DDI_SUCCESS); 2023 } 2024 2025 static int 2026 xhci_attach(dev_info_t *dip, ddi_attach_cmd_t cmd) 2027 { 2028 int ret, inst, route; 2029 xhci_t *xhcip; 2030 2031 if (cmd != DDI_ATTACH) 2032 return (DDI_FAILURE); 2033 2034 inst = ddi_get_instance(dip); 2035 if (ddi_soft_state_zalloc(xhci_soft_state, inst) != 0) 2036 return (DDI_FAILURE); 2037 xhcip = ddi_get_soft_state(xhci_soft_state, ddi_get_instance(dip)); 2038 xhcip->xhci_dip = dip; 2039 2040 xhcip->xhci_regs_capoff = PCI_EINVAL32; 2041 xhcip->xhci_regs_operoff = PCI_EINVAL32; 2042 xhcip->xhci_regs_runoff = PCI_EINVAL32; 2043 xhcip->xhci_regs_dooroff = PCI_EINVAL32; 2044 2045 xhci_fm_init(xhcip); 2046 xhcip->xhci_seq |= XHCI_ATTACH_FM; 2047 2048 if (pci_config_setup(xhcip->xhci_dip, &xhcip->xhci_cfg_handle) != 2049 DDI_SUCCESS) { 2050 goto err; 2051 } 2052 xhcip->xhci_seq |= XHCI_ATTACH_PCI_CONFIG; 2053 xhcip->xhci_vendor_id = pci_config_get16(xhcip->xhci_cfg_handle, 2054 PCI_CONF_VENID); 2055 xhcip->xhci_device_id = pci_config_get16(xhcip->xhci_cfg_handle, 2056 PCI_CONF_DEVID); 2057 2058 if (xhci_regs_map(xhcip) == B_FALSE) { 2059 goto err; 2060 } 2061 2062 xhcip->xhci_seq |= XHCI_ATTACH_REGS_MAP; 2063 2064 if (xhci_regs_init(xhcip) == B_FALSE) 2065 goto err; 2066 2067 if (xhci_read_params(xhcip) == B_FALSE) 2068 goto err; 2069 2070 if (xhci_identify(xhcip) == B_FALSE) 2071 goto err; 2072 2073 if (xhci_alloc_intrs(xhcip) == B_FALSE) 2074 goto err; 2075 xhcip->xhci_seq |= XHCI_ATTACH_INTR_ALLOC; 2076 2077 if (xhci_add_intr_handler(xhcip) == B_FALSE) 2078 goto err; 2079 xhcip->xhci_seq |= XHCI_ATTACH_INTR_ADD; 2080 2081 mutex_init(&xhcip->xhci_lock, NULL, MUTEX_DRIVER, 2082 (void *)(uintptr_t)xhcip->xhci_intr_pri); 2083 cv_init(&xhcip->xhci_statecv, NULL, CV_DRIVER, NULL); 2084 xhcip->xhci_seq |= XHCI_ATTACH_SYNCH; 2085 2086 if (xhci_port_count(xhcip) == B_FALSE) 2087 goto err; 2088 2089 if (xhci_controller_takeover(xhcip) == B_FALSE) 2090 goto err; 2091 2092 /* 2093 * We don't enable interrupts until after we take over the controller 2094 * from the BIOS. We've observed cases where this can cause spurious 2095 * interrupts. 2096 */ 2097 if (xhci_ddi_intr_enable(xhcip) == B_FALSE) 2098 goto err; 2099 xhcip->xhci_seq |= XHCI_ATTACH_INTR_ENABLE; 2100 2101 if ((ret = xhci_controller_stop(xhcip)) != 0) { 2102 xhci_error(xhcip, "failed to stop controller: %s", 2103 ret == EIO ? "encountered FM register error" : 2104 "timed out while waiting for controller"); 2105 goto err; 2106 } 2107 2108 if ((ret = xhci_controller_reset(xhcip)) != 0) { 2109 xhci_error(xhcip, "failed to reset controller: %s", 2110 ret == EIO ? "encountered FM register error" : 2111 "timed out while waiting for controller"); 2112 goto err; 2113 } 2114 2115 if ((ret = xhci_controller_configure(xhcip)) != 0) { 2116 xhci_error(xhcip, "failed to configure controller: %d", ret); 2117 goto err; 2118 } 2119 2120 /* 2121 * Some systems support having ports routed to both an ehci and xhci 2122 * controller. If we support it and the user hasn't requested otherwise 2123 * via a driver.conf tuning, we reroute it now. 2124 */ 2125 route = ddi_prop_get_int(DDI_DEV_T_ANY, xhcip->xhci_dip, 2126 DDI_PROP_DONTPASS, "xhci-reroute", XHCI_PROP_REROUTE_DEFAULT); 2127 if (route != XHCI_PROP_REROUTE_DISABLE && 2128 (xhcip->xhci_quirks & XHCI_QUIRK_INTC_EHCI)) 2129 (void) xhci_reroute_intel(xhcip); 2130 2131 if ((ret = xhci_controller_start(xhcip)) != 0) { 2132 xhci_log(xhcip, "failed to reset controller: %s", 2133 ret == EIO ? "encountered FM register error" : 2134 "timed out while waiting for controller"); 2135 goto err; 2136 } 2137 xhcip->xhci_seq |= XHCI_ATTACH_STARTED; 2138 2139 /* 2140 * Finally, register ourselves with the USB framework itself. 2141 */ 2142 if ((ret = xhci_hcd_init(xhcip)) != 0) { 2143 xhci_error(xhcip, "failed to register hcd with usba"); 2144 goto err; 2145 } 2146 xhcip->xhci_seq |= XHCI_ATTACH_USBA; 2147 2148 if ((ret = xhci_root_hub_init(xhcip)) != 0) { 2149 xhci_error(xhcip, "failed to load the root hub driver"); 2150 goto err; 2151 } 2152 xhcip->xhci_seq |= XHCI_ATTACH_ROOT_HUB; 2153 2154 return (DDI_SUCCESS); 2155 2156 err: 2157 (void) xhci_cleanup(xhcip); 2158 return (DDI_FAILURE); 2159 } 2160 2161 static int 2162 xhci_detach(dev_info_t *dip, ddi_detach_cmd_t cmd) 2163 { 2164 xhci_t *xhcip; 2165 2166 if (cmd != DDI_DETACH) 2167 return (DDI_FAILURE); 2168 2169 xhcip = ddi_get_soft_state(xhci_soft_state, ddi_get_instance(dip)); 2170 if (xhcip == NULL) { 2171 dev_err(dip, CE_WARN, "detach called without soft state!"); 2172 return (DDI_FAILURE); 2173 } 2174 2175 return (xhci_cleanup(xhcip)); 2176 } 2177 2178 /* ARGSUSED */ 2179 static int 2180 xhci_getinfo(dev_info_t *dip, ddi_info_cmd_t cmd, void *arg, void **outp) 2181 { 2182 dev_t dev; 2183 int inst; 2184 2185 switch (cmd) { 2186 case DDI_INFO_DEVT2DEVINFO: 2187 dev = (dev_t)arg; 2188 *outp = xhci_get_dip(dev); 2189 if (*outp == NULL) 2190 return (DDI_FAILURE); 2191 break; 2192 case DDI_INFO_DEVT2INSTANCE: 2193 dev = (dev_t)arg; 2194 inst = getminor(dev) & ~HUBD_IS_ROOT_HUB; 2195 *outp = (void *)(uintptr_t)inst; 2196 break; 2197 default: 2198 return (DDI_FAILURE); 2199 } 2200 2201 return (DDI_SUCCESS); 2202 } 2203 2204 static struct cb_ops xhci_cb_ops = { 2205 xhci_open, /* cb_open */ 2206 xhci_close, /* cb_close */ 2207 nodev, /* cb_strategy */ 2208 nodev, /* cb_print */ 2209 nodev, /* cb_dump */ 2210 nodev, /* cb_read */ 2211 nodev, /* cb_write */ 2212 xhci_ioctl, /* cb_ioctl */ 2213 nodev, /* cb_devmap */ 2214 nodev, /* cb_mmap */ 2215 nodev, /* cb_segmap */ 2216 nochpoll, /* cb_chpoll */ 2217 ddi_prop_op, /* cb_prop_op */ 2218 NULL, /* cb_stream */ 2219 D_MP | D_HOTPLUG, /* cb_flag */ 2220 CB_REV, /* cb_rev */ 2221 nodev, /* cb_aread */ 2222 nodev /* cb_awrite */ 2223 }; 2224 2225 static struct dev_ops xhci_dev_ops = { 2226 DEVO_REV, /* devo_rev */ 2227 0, /* devo_refcnt */ 2228 xhci_getinfo, /* devo_getinfo */ 2229 nulldev, /* devo_identify */ 2230 nulldev, /* devo_probe */ 2231 xhci_attach, /* devo_attach */ 2232 xhci_detach, /* devo_detach */ 2233 nodev, /* devo_reset */ 2234 &xhci_cb_ops, /* devo_cb_ops */ 2235 &usba_hubdi_busops, /* devo_bus_ops */ 2236 usba_hubdi_root_hub_power, /* devo_power */ 2237 ddi_quiesce_not_supported /* devo_quiesce */ 2238 }; 2239 2240 static struct modldrv xhci_modldrv = { 2241 &mod_driverops, 2242 "USB xHCI Driver", 2243 &xhci_dev_ops 2244 }; 2245 2246 static struct modlinkage xhci_modlinkage = { 2247 MODREV_1, 2248 &xhci_modldrv, 2249 NULL 2250 }; 2251 2252 int 2253 _init(void) 2254 { 2255 int ret; 2256 2257 if ((ret = ddi_soft_state_init(&xhci_soft_state, sizeof (xhci_t), 2258 0)) != 0) { 2259 return (ret); 2260 } 2261 2262 xhci_taskq = taskq_create("xhci_taskq", 1, minclsyspri, 0, 0, 0); 2263 if (xhci_taskq == NULL) { 2264 ddi_soft_state_fini(&xhci_soft_state); 2265 return (ENOMEM); 2266 } 2267 2268 if ((ret = mod_install(&xhci_modlinkage)) != 0) { 2269 taskq_destroy(xhci_taskq); 2270 xhci_taskq = NULL; 2271 } 2272 2273 return (ret); 2274 } 2275 2276 int 2277 _info(struct modinfo *modinfop) 2278 { 2279 return (mod_info(&xhci_modlinkage, modinfop)); 2280 } 2281 2282 int 2283 _fini(void) 2284 { 2285 int ret; 2286 2287 if ((ret = mod_remove(&xhci_modlinkage)) != 0) 2288 return (ret); 2289 2290 if (xhci_taskq != NULL) { 2291 taskq_destroy(xhci_taskq); 2292 xhci_taskq = NULL; 2293 } 2294 2295 ddi_soft_state_fini(&xhci_soft_state); 2296 2297 return (0); 2298 } 2299