1 /* 2 * libata-acpi.c 3 * Provides ACPI support for PATA/SATA. 4 * 5 * Copyright (C) 2006 Intel Corp. 6 * Copyright (C) 2006 Randy Dunlap 7 */ 8 9 #include <linux/module.h> 10 #include <linux/ata.h> 11 #include <linux/delay.h> 12 #include <linux/device.h> 13 #include <linux/errno.h> 14 #include <linux/kernel.h> 15 #include <linux/acpi.h> 16 #include <linux/libata.h> 17 #include <linux/pci.h> 18 #include <linux/slab.h> 19 #include <linux/pm_runtime.h> 20 #include <linux/pm_qos.h> 21 #include <scsi/scsi_device.h> 22 #include "libata.h" 23 24 #include <acpi/acpi_bus.h> 25 26 unsigned int ata_acpi_gtf_filter = ATA_ACPI_FILTER_DEFAULT; 27 module_param_named(acpi_gtf_filter, ata_acpi_gtf_filter, int, 0644); 28 MODULE_PARM_DESC(acpi_gtf_filter, "filter mask for ACPI _GTF commands, set to filter out (0x1=set xfermode, 0x2=lock/freeze lock, 0x4=DIPM, 0x8=FPDMA non-zero offset, 0x10=FPDMA DMA Setup FIS auto-activate)"); 29 30 #define NO_PORT_MULT 0xffff 31 #define SATA_ADR(root, pmp) (((root) << 16) | (pmp)) 32 33 #define REGS_PER_GTF 7 34 struct ata_acpi_gtf { 35 u8 tf[REGS_PER_GTF]; /* regs. 0x1f1 - 0x1f7 */ 36 } __packed; 37 38 /* 39 * Helper - belongs in the PCI layer somewhere eventually 40 */ 41 static int is_pci_dev(struct device *dev) 42 { 43 return (dev->bus == &pci_bus_type); 44 } 45 46 static void ata_acpi_clear_gtf(struct ata_device *dev) 47 { 48 kfree(dev->gtf_cache); 49 dev->gtf_cache = NULL; 50 } 51 52 /** 53 * ata_ap_acpi_handle - provide the acpi_handle for an ata_port 54 * @ap: the acpi_handle returned will correspond to this port 55 * 56 * Returns the acpi_handle for the ACPI namespace object corresponding to 57 * the ata_port passed into the function, or NULL if no such object exists 58 */ 59 acpi_handle ata_ap_acpi_handle(struct ata_port *ap) 60 { 61 if (ap->flags & ATA_FLAG_ACPI_SATA) 62 return NULL; 63 64 return acpi_get_child(DEVICE_ACPI_HANDLE(ap->host->dev), ap->port_no); 65 } 66 EXPORT_SYMBOL(ata_ap_acpi_handle); 67 68 /** 69 * ata_dev_acpi_handle - provide the acpi_handle for an ata_device 70 * @dev: the acpi_device returned will correspond to this port 71 * 72 * Returns the acpi_handle for the ACPI namespace object corresponding to 73 * the ata_device passed into the function, or NULL if no such object exists 74 */ 75 acpi_handle ata_dev_acpi_handle(struct ata_device *dev) 76 { 77 acpi_integer adr; 78 struct ata_port *ap = dev->link->ap; 79 80 if (dev->flags & ATA_DFLAG_ACPI_DISABLED) 81 return NULL; 82 83 if (ap->flags & ATA_FLAG_ACPI_SATA) { 84 if (!sata_pmp_attached(ap)) 85 adr = SATA_ADR(ap->port_no, NO_PORT_MULT); 86 else 87 adr = SATA_ADR(ap->port_no, dev->link->pmp); 88 return acpi_get_child(DEVICE_ACPI_HANDLE(ap->host->dev), adr); 89 } else 90 return acpi_get_child(ata_ap_acpi_handle(ap), dev->devno); 91 } 92 EXPORT_SYMBOL(ata_dev_acpi_handle); 93 94 /* @ap and @dev are the same as ata_acpi_handle_hotplug() */ 95 static void ata_acpi_detach_device(struct ata_port *ap, struct ata_device *dev) 96 { 97 if (dev) 98 dev->flags |= ATA_DFLAG_DETACH; 99 else { 100 struct ata_link *tlink; 101 struct ata_device *tdev; 102 103 ata_for_each_link(tlink, ap, EDGE) 104 ata_for_each_dev(tdev, tlink, ALL) 105 tdev->flags |= ATA_DFLAG_DETACH; 106 } 107 108 ata_port_schedule_eh(ap); 109 } 110 111 /** 112 * ata_acpi_handle_hotplug - ACPI event handler backend 113 * @ap: ATA port ACPI event occurred 114 * @dev: ATA device ACPI event occurred (can be NULL) 115 * @event: ACPI event which occurred 116 * 117 * All ACPI bay / device realted events end up in this function. If 118 * the event is port-wide @dev is NULL. If the event is specific to a 119 * device, @dev points to it. 120 * 121 * Hotplug (as opposed to unplug) notification is always handled as 122 * port-wide while unplug only kills the target device on device-wide 123 * event. 124 * 125 * LOCKING: 126 * ACPI notify handler context. May sleep. 127 */ 128 static void ata_acpi_handle_hotplug(struct ata_port *ap, struct ata_device *dev, 129 u32 event) 130 { 131 struct ata_eh_info *ehi = &ap->link.eh_info; 132 int wait = 0; 133 unsigned long flags; 134 135 spin_lock_irqsave(ap->lock, flags); 136 /* 137 * When dock driver calls into the routine, it will always use 138 * ACPI_NOTIFY_BUS_CHECK/ACPI_NOTIFY_DEVICE_CHECK for add and 139 * ACPI_NOTIFY_EJECT_REQUEST for remove 140 */ 141 switch (event) { 142 case ACPI_NOTIFY_BUS_CHECK: 143 case ACPI_NOTIFY_DEVICE_CHECK: 144 ata_ehi_push_desc(ehi, "ACPI event"); 145 146 ata_ehi_hotplugged(ehi); 147 ata_port_freeze(ap); 148 break; 149 case ACPI_NOTIFY_EJECT_REQUEST: 150 ata_ehi_push_desc(ehi, "ACPI event"); 151 152 ata_acpi_detach_device(ap, dev); 153 wait = 1; 154 break; 155 } 156 157 spin_unlock_irqrestore(ap->lock, flags); 158 159 if (wait) 160 ata_port_wait_eh(ap); 161 } 162 163 static void ata_acpi_dev_notify_dock(acpi_handle handle, u32 event, void *data) 164 { 165 struct ata_device *dev = data; 166 167 ata_acpi_handle_hotplug(dev->link->ap, dev, event); 168 } 169 170 static void ata_acpi_ap_notify_dock(acpi_handle handle, u32 event, void *data) 171 { 172 struct ata_port *ap = data; 173 174 ata_acpi_handle_hotplug(ap, NULL, event); 175 } 176 177 static void ata_acpi_uevent(struct ata_port *ap, struct ata_device *dev, 178 u32 event) 179 { 180 struct kobject *kobj = NULL; 181 char event_string[20]; 182 char *envp[] = { event_string, NULL }; 183 184 if (dev) { 185 if (dev->sdev) 186 kobj = &dev->sdev->sdev_gendev.kobj; 187 } else 188 kobj = &ap->dev->kobj; 189 190 if (kobj) { 191 snprintf(event_string, 20, "BAY_EVENT=%d", event); 192 kobject_uevent_env(kobj, KOBJ_CHANGE, envp); 193 } 194 } 195 196 static void ata_acpi_ap_uevent(acpi_handle handle, u32 event, void *data) 197 { 198 ata_acpi_uevent(data, NULL, event); 199 } 200 201 static void ata_acpi_dev_uevent(acpi_handle handle, u32 event, void *data) 202 { 203 struct ata_device *dev = data; 204 ata_acpi_uevent(dev->link->ap, dev, event); 205 } 206 207 static const struct acpi_dock_ops ata_acpi_dev_dock_ops = { 208 .handler = ata_acpi_dev_notify_dock, 209 .uevent = ata_acpi_dev_uevent, 210 }; 211 212 static const struct acpi_dock_ops ata_acpi_ap_dock_ops = { 213 .handler = ata_acpi_ap_notify_dock, 214 .uevent = ata_acpi_ap_uevent, 215 }; 216 217 /** 218 * ata_acpi_dissociate - dissociate ATA host from ACPI objects 219 * @host: target ATA host 220 * 221 * This function is called during driver detach after the whole host 222 * is shut down. 223 * 224 * LOCKING: 225 * EH context. 226 */ 227 void ata_acpi_dissociate(struct ata_host *host) 228 { 229 int i; 230 231 /* Restore initial _GTM values so that driver which attaches 232 * afterward can use them too. 233 */ 234 for (i = 0; i < host->n_ports; i++) { 235 struct ata_port *ap = host->ports[i]; 236 const struct ata_acpi_gtm *gtm = ata_acpi_init_gtm(ap); 237 238 if (ata_ap_acpi_handle(ap) && gtm) 239 ata_acpi_stm(ap, gtm); 240 } 241 } 242 243 /** 244 * ata_acpi_gtm - execute _GTM 245 * @ap: target ATA port 246 * @gtm: out parameter for _GTM result 247 * 248 * Evaluate _GTM and store the result in @gtm. 249 * 250 * LOCKING: 251 * EH context. 252 * 253 * RETURNS: 254 * 0 on success, -ENOENT if _GTM doesn't exist, -errno on failure. 255 */ 256 int ata_acpi_gtm(struct ata_port *ap, struct ata_acpi_gtm *gtm) 257 { 258 struct acpi_buffer output = { .length = ACPI_ALLOCATE_BUFFER }; 259 union acpi_object *out_obj; 260 acpi_status status; 261 int rc = 0; 262 263 status = acpi_evaluate_object(ata_ap_acpi_handle(ap), "_GTM", NULL, 264 &output); 265 266 rc = -ENOENT; 267 if (status == AE_NOT_FOUND) 268 goto out_free; 269 270 rc = -EINVAL; 271 if (ACPI_FAILURE(status)) { 272 ata_port_err(ap, "ACPI get timing mode failed (AE 0x%x)\n", 273 status); 274 goto out_free; 275 } 276 277 out_obj = output.pointer; 278 if (out_obj->type != ACPI_TYPE_BUFFER) { 279 ata_port_warn(ap, "_GTM returned unexpected object type 0x%x\n", 280 out_obj->type); 281 282 goto out_free; 283 } 284 285 if (out_obj->buffer.length != sizeof(struct ata_acpi_gtm)) { 286 ata_port_err(ap, "_GTM returned invalid length %d\n", 287 out_obj->buffer.length); 288 goto out_free; 289 } 290 291 memcpy(gtm, out_obj->buffer.pointer, sizeof(struct ata_acpi_gtm)); 292 rc = 0; 293 out_free: 294 kfree(output.pointer); 295 return rc; 296 } 297 298 EXPORT_SYMBOL_GPL(ata_acpi_gtm); 299 300 /** 301 * ata_acpi_stm - execute _STM 302 * @ap: target ATA port 303 * @stm: timing parameter to _STM 304 * 305 * Evaluate _STM with timing parameter @stm. 306 * 307 * LOCKING: 308 * EH context. 309 * 310 * RETURNS: 311 * 0 on success, -ENOENT if _STM doesn't exist, -errno on failure. 312 */ 313 int ata_acpi_stm(struct ata_port *ap, const struct ata_acpi_gtm *stm) 314 { 315 acpi_status status; 316 struct ata_acpi_gtm stm_buf = *stm; 317 struct acpi_object_list input; 318 union acpi_object in_params[3]; 319 320 in_params[0].type = ACPI_TYPE_BUFFER; 321 in_params[0].buffer.length = sizeof(struct ata_acpi_gtm); 322 in_params[0].buffer.pointer = (u8 *)&stm_buf; 323 /* Buffers for id may need byteswapping ? */ 324 in_params[1].type = ACPI_TYPE_BUFFER; 325 in_params[1].buffer.length = 512; 326 in_params[1].buffer.pointer = (u8 *)ap->link.device[0].id; 327 in_params[2].type = ACPI_TYPE_BUFFER; 328 in_params[2].buffer.length = 512; 329 in_params[2].buffer.pointer = (u8 *)ap->link.device[1].id; 330 331 input.count = 3; 332 input.pointer = in_params; 333 334 status = acpi_evaluate_object(ata_ap_acpi_handle(ap), "_STM", &input, 335 NULL); 336 337 if (status == AE_NOT_FOUND) 338 return -ENOENT; 339 if (ACPI_FAILURE(status)) { 340 ata_port_err(ap, "ACPI set timing mode failed (status=0x%x)\n", 341 status); 342 return -EINVAL; 343 } 344 return 0; 345 } 346 347 EXPORT_SYMBOL_GPL(ata_acpi_stm); 348 349 /** 350 * ata_dev_get_GTF - get the drive bootup default taskfile settings 351 * @dev: target ATA device 352 * @gtf: output parameter for buffer containing _GTF taskfile arrays 353 * 354 * This applies to both PATA and SATA drives. 355 * 356 * The _GTF method has no input parameters. 357 * It returns a variable number of register set values (registers 358 * hex 1F1..1F7, taskfiles). 359 * The <variable number> is not known in advance, so have ACPI-CA 360 * allocate the buffer as needed and return it, then free it later. 361 * 362 * LOCKING: 363 * EH context. 364 * 365 * RETURNS: 366 * Number of taskfiles on success, 0 if _GTF doesn't exist. -EINVAL 367 * if _GTF is invalid. 368 */ 369 static int ata_dev_get_GTF(struct ata_device *dev, struct ata_acpi_gtf **gtf) 370 { 371 struct ata_port *ap = dev->link->ap; 372 acpi_status status; 373 struct acpi_buffer output; 374 union acpi_object *out_obj; 375 int rc = 0; 376 377 /* if _GTF is cached, use the cached value */ 378 if (dev->gtf_cache) { 379 out_obj = dev->gtf_cache; 380 goto done; 381 } 382 383 /* set up output buffer */ 384 output.length = ACPI_ALLOCATE_BUFFER; 385 output.pointer = NULL; /* ACPI-CA sets this; save/free it later */ 386 387 if (ata_msg_probe(ap)) 388 ata_dev_dbg(dev, "%s: ENTER: port#: %d\n", 389 __func__, ap->port_no); 390 391 /* _GTF has no input parameters */ 392 status = acpi_evaluate_object(ata_dev_acpi_handle(dev), "_GTF", NULL, 393 &output); 394 out_obj = dev->gtf_cache = output.pointer; 395 396 if (ACPI_FAILURE(status)) { 397 if (status != AE_NOT_FOUND) { 398 ata_dev_warn(dev, "_GTF evaluation failed (AE 0x%x)\n", 399 status); 400 rc = -EINVAL; 401 } 402 goto out_free; 403 } 404 405 if (!output.length || !output.pointer) { 406 if (ata_msg_probe(ap)) 407 ata_dev_dbg(dev, "%s: Run _GTF: length or ptr is NULL (0x%llx, 0x%p)\n", 408 __func__, 409 (unsigned long long)output.length, 410 output.pointer); 411 rc = -EINVAL; 412 goto out_free; 413 } 414 415 if (out_obj->type != ACPI_TYPE_BUFFER) { 416 ata_dev_warn(dev, "_GTF unexpected object type 0x%x\n", 417 out_obj->type); 418 rc = -EINVAL; 419 goto out_free; 420 } 421 422 if (out_obj->buffer.length % REGS_PER_GTF) { 423 ata_dev_warn(dev, "unexpected _GTF length (%d)\n", 424 out_obj->buffer.length); 425 rc = -EINVAL; 426 goto out_free; 427 } 428 429 done: 430 rc = out_obj->buffer.length / REGS_PER_GTF; 431 if (gtf) { 432 *gtf = (void *)out_obj->buffer.pointer; 433 if (ata_msg_probe(ap)) 434 ata_dev_dbg(dev, "%s: returning gtf=%p, gtf_count=%d\n", 435 __func__, *gtf, rc); 436 } 437 return rc; 438 439 out_free: 440 ata_acpi_clear_gtf(dev); 441 return rc; 442 } 443 444 /** 445 * ata_acpi_gtm_xfermode - determine xfermode from GTM parameter 446 * @dev: target device 447 * @gtm: GTM parameter to use 448 * 449 * Determine xfermask for @dev from @gtm. 450 * 451 * LOCKING: 452 * None. 453 * 454 * RETURNS: 455 * Determined xfermask. 456 */ 457 unsigned long ata_acpi_gtm_xfermask(struct ata_device *dev, 458 const struct ata_acpi_gtm *gtm) 459 { 460 unsigned long xfer_mask = 0; 461 unsigned int type; 462 int unit; 463 u8 mode; 464 465 /* we always use the 0 slot for crap hardware */ 466 unit = dev->devno; 467 if (!(gtm->flags & 0x10)) 468 unit = 0; 469 470 /* PIO */ 471 mode = ata_timing_cycle2mode(ATA_SHIFT_PIO, gtm->drive[unit].pio); 472 xfer_mask |= ata_xfer_mode2mask(mode); 473 474 /* See if we have MWDMA or UDMA data. We don't bother with 475 * MWDMA if UDMA is available as this means the BIOS set UDMA 476 * and our error changedown if it works is UDMA to PIO anyway. 477 */ 478 if (!(gtm->flags & (1 << (2 * unit)))) 479 type = ATA_SHIFT_MWDMA; 480 else 481 type = ATA_SHIFT_UDMA; 482 483 mode = ata_timing_cycle2mode(type, gtm->drive[unit].dma); 484 xfer_mask |= ata_xfer_mode2mask(mode); 485 486 return xfer_mask; 487 } 488 EXPORT_SYMBOL_GPL(ata_acpi_gtm_xfermask); 489 490 /** 491 * ata_acpi_cbl_80wire - Check for 80 wire cable 492 * @ap: Port to check 493 * @gtm: GTM data to use 494 * 495 * Return 1 if the @gtm indicates the BIOS selected an 80wire mode. 496 */ 497 int ata_acpi_cbl_80wire(struct ata_port *ap, const struct ata_acpi_gtm *gtm) 498 { 499 struct ata_device *dev; 500 501 ata_for_each_dev(dev, &ap->link, ENABLED) { 502 unsigned long xfer_mask, udma_mask; 503 504 xfer_mask = ata_acpi_gtm_xfermask(dev, gtm); 505 ata_unpack_xfermask(xfer_mask, NULL, NULL, &udma_mask); 506 507 if (udma_mask & ~ATA_UDMA_MASK_40C) 508 return 1; 509 } 510 511 return 0; 512 } 513 EXPORT_SYMBOL_GPL(ata_acpi_cbl_80wire); 514 515 static void ata_acpi_gtf_to_tf(struct ata_device *dev, 516 const struct ata_acpi_gtf *gtf, 517 struct ata_taskfile *tf) 518 { 519 ata_tf_init(dev, tf); 520 521 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; 522 tf->protocol = ATA_PROT_NODATA; 523 tf->feature = gtf->tf[0]; /* 0x1f1 */ 524 tf->nsect = gtf->tf[1]; /* 0x1f2 */ 525 tf->lbal = gtf->tf[2]; /* 0x1f3 */ 526 tf->lbam = gtf->tf[3]; /* 0x1f4 */ 527 tf->lbah = gtf->tf[4]; /* 0x1f5 */ 528 tf->device = gtf->tf[5]; /* 0x1f6 */ 529 tf->command = gtf->tf[6]; /* 0x1f7 */ 530 } 531 532 static int ata_acpi_filter_tf(struct ata_device *dev, 533 const struct ata_taskfile *tf, 534 const struct ata_taskfile *ptf) 535 { 536 if (dev->gtf_filter & ATA_ACPI_FILTER_SETXFER) { 537 /* libata doesn't use ACPI to configure transfer mode. 538 * It will only confuse device configuration. Skip. 539 */ 540 if (tf->command == ATA_CMD_SET_FEATURES && 541 tf->feature == SETFEATURES_XFER) 542 return 1; 543 } 544 545 if (dev->gtf_filter & ATA_ACPI_FILTER_LOCK) { 546 /* BIOS writers, sorry but we don't wanna lock 547 * features unless the user explicitly said so. 548 */ 549 550 /* DEVICE CONFIGURATION FREEZE LOCK */ 551 if (tf->command == ATA_CMD_CONF_OVERLAY && 552 tf->feature == ATA_DCO_FREEZE_LOCK) 553 return 1; 554 555 /* SECURITY FREEZE LOCK */ 556 if (tf->command == ATA_CMD_SEC_FREEZE_LOCK) 557 return 1; 558 559 /* SET MAX LOCK and SET MAX FREEZE LOCK */ 560 if ((!ptf || ptf->command != ATA_CMD_READ_NATIVE_MAX) && 561 tf->command == ATA_CMD_SET_MAX && 562 (tf->feature == ATA_SET_MAX_LOCK || 563 tf->feature == ATA_SET_MAX_FREEZE_LOCK)) 564 return 1; 565 } 566 567 if (tf->command == ATA_CMD_SET_FEATURES && 568 tf->feature == SETFEATURES_SATA_ENABLE) { 569 /* inhibit enabling DIPM */ 570 if (dev->gtf_filter & ATA_ACPI_FILTER_DIPM && 571 tf->nsect == SATA_DIPM) 572 return 1; 573 574 /* inhibit FPDMA non-zero offset */ 575 if (dev->gtf_filter & ATA_ACPI_FILTER_FPDMA_OFFSET && 576 (tf->nsect == SATA_FPDMA_OFFSET || 577 tf->nsect == SATA_FPDMA_IN_ORDER)) 578 return 1; 579 580 /* inhibit FPDMA auto activation */ 581 if (dev->gtf_filter & ATA_ACPI_FILTER_FPDMA_AA && 582 tf->nsect == SATA_FPDMA_AA) 583 return 1; 584 } 585 586 return 0; 587 } 588 589 /** 590 * ata_acpi_run_tf - send taskfile registers to host controller 591 * @dev: target ATA device 592 * @gtf: raw ATA taskfile register set (0x1f1 - 0x1f7) 593 * 594 * Outputs ATA taskfile to standard ATA host controller. 595 * Writes the control, feature, nsect, lbal, lbam, and lbah registers. 596 * Optionally (ATA_TFLAG_LBA48) writes hob_feature, hob_nsect, 597 * hob_lbal, hob_lbam, and hob_lbah. 598 * 599 * This function waits for idle (!BUSY and !DRQ) after writing 600 * registers. If the control register has a new value, this 601 * function also waits for idle after writing control and before 602 * writing the remaining registers. 603 * 604 * LOCKING: 605 * EH context. 606 * 607 * RETURNS: 608 * 1 if command is executed successfully. 0 if ignored, rejected or 609 * filtered out, -errno on other errors. 610 */ 611 static int ata_acpi_run_tf(struct ata_device *dev, 612 const struct ata_acpi_gtf *gtf, 613 const struct ata_acpi_gtf *prev_gtf) 614 { 615 struct ata_taskfile *pptf = NULL; 616 struct ata_taskfile tf, ptf, rtf; 617 unsigned int err_mask; 618 const char *level; 619 const char *descr; 620 char msg[60]; 621 int rc; 622 623 if ((gtf->tf[0] == 0) && (gtf->tf[1] == 0) && (gtf->tf[2] == 0) 624 && (gtf->tf[3] == 0) && (gtf->tf[4] == 0) && (gtf->tf[5] == 0) 625 && (gtf->tf[6] == 0)) 626 return 0; 627 628 ata_acpi_gtf_to_tf(dev, gtf, &tf); 629 if (prev_gtf) { 630 ata_acpi_gtf_to_tf(dev, prev_gtf, &ptf); 631 pptf = &ptf; 632 } 633 634 if (!ata_acpi_filter_tf(dev, &tf, pptf)) { 635 rtf = tf; 636 err_mask = ata_exec_internal(dev, &rtf, NULL, 637 DMA_NONE, NULL, 0, 0); 638 639 switch (err_mask) { 640 case 0: 641 level = KERN_DEBUG; 642 snprintf(msg, sizeof(msg), "succeeded"); 643 rc = 1; 644 break; 645 646 case AC_ERR_DEV: 647 level = KERN_INFO; 648 snprintf(msg, sizeof(msg), 649 "rejected by device (Stat=0x%02x Err=0x%02x)", 650 rtf.command, rtf.feature); 651 rc = 0; 652 break; 653 654 default: 655 level = KERN_ERR; 656 snprintf(msg, sizeof(msg), 657 "failed (Emask=0x%x Stat=0x%02x Err=0x%02x)", 658 err_mask, rtf.command, rtf.feature); 659 rc = -EIO; 660 break; 661 } 662 } else { 663 level = KERN_INFO; 664 snprintf(msg, sizeof(msg), "filtered out"); 665 rc = 0; 666 } 667 descr = ata_get_cmd_descript(tf.command); 668 669 ata_dev_printk(dev, level, 670 "ACPI cmd %02x/%02x:%02x:%02x:%02x:%02x:%02x (%s) %s\n", 671 tf.command, tf.feature, tf.nsect, tf.lbal, 672 tf.lbam, tf.lbah, tf.device, 673 (descr ? descr : "unknown"), msg); 674 675 return rc; 676 } 677 678 /** 679 * ata_acpi_exec_tfs - get then write drive taskfile settings 680 * @dev: target ATA device 681 * @nr_executed: out parameter for the number of executed commands 682 * 683 * Evaluate _GTF and execute returned taskfiles. 684 * 685 * LOCKING: 686 * EH context. 687 * 688 * RETURNS: 689 * Number of executed taskfiles on success, 0 if _GTF doesn't exist. 690 * -errno on other errors. 691 */ 692 static int ata_acpi_exec_tfs(struct ata_device *dev, int *nr_executed) 693 { 694 struct ata_acpi_gtf *gtf = NULL, *pgtf = NULL; 695 int gtf_count, i, rc; 696 697 /* get taskfiles */ 698 rc = ata_dev_get_GTF(dev, >f); 699 if (rc < 0) 700 return rc; 701 gtf_count = rc; 702 703 /* execute them */ 704 for (i = 0; i < gtf_count; i++, gtf++) { 705 rc = ata_acpi_run_tf(dev, gtf, pgtf); 706 if (rc < 0) 707 break; 708 if (rc) { 709 (*nr_executed)++; 710 pgtf = gtf; 711 } 712 } 713 714 ata_acpi_clear_gtf(dev); 715 716 if (rc < 0) 717 return rc; 718 return 0; 719 } 720 721 /** 722 * ata_acpi_push_id - send Identify data to drive 723 * @dev: target ATA device 724 * 725 * _SDD ACPI object: for SATA mode only 726 * Must be after Identify (Packet) Device -- uses its data 727 * ATM this function never returns a failure. It is an optional 728 * method and if it fails for whatever reason, we should still 729 * just keep going. 730 * 731 * LOCKING: 732 * EH context. 733 * 734 * RETURNS: 735 * 0 on success, -ENOENT if _SDD doesn't exist, -errno on failure. 736 */ 737 static int ata_acpi_push_id(struct ata_device *dev) 738 { 739 struct ata_port *ap = dev->link->ap; 740 acpi_status status; 741 struct acpi_object_list input; 742 union acpi_object in_params[1]; 743 744 if (ata_msg_probe(ap)) 745 ata_dev_dbg(dev, "%s: ix = %d, port#: %d\n", 746 __func__, dev->devno, ap->port_no); 747 748 /* Give the drive Identify data to the drive via the _SDD method */ 749 /* _SDD: set up input parameters */ 750 input.count = 1; 751 input.pointer = in_params; 752 in_params[0].type = ACPI_TYPE_BUFFER; 753 in_params[0].buffer.length = sizeof(dev->id[0]) * ATA_ID_WORDS; 754 in_params[0].buffer.pointer = (u8 *)dev->id; 755 /* Output buffer: _SDD has no output */ 756 757 /* It's OK for _SDD to be missing too. */ 758 swap_buf_le16(dev->id, ATA_ID_WORDS); 759 status = acpi_evaluate_object(ata_dev_acpi_handle(dev), "_SDD", &input, 760 NULL); 761 swap_buf_le16(dev->id, ATA_ID_WORDS); 762 763 if (status == AE_NOT_FOUND) 764 return -ENOENT; 765 766 if (ACPI_FAILURE(status)) { 767 ata_dev_warn(dev, "ACPI _SDD failed (AE 0x%x)\n", status); 768 return -EIO; 769 } 770 771 return 0; 772 } 773 774 /** 775 * ata_acpi_on_suspend - ATA ACPI hook called on suspend 776 * @ap: target ATA port 777 * 778 * This function is called when @ap is about to be suspended. All 779 * devices are already put to sleep but the port_suspend() callback 780 * hasn't been executed yet. Error return from this function aborts 781 * suspend. 782 * 783 * LOCKING: 784 * EH context. 785 * 786 * RETURNS: 787 * 0 on success, -errno on failure. 788 */ 789 int ata_acpi_on_suspend(struct ata_port *ap) 790 { 791 /* nada */ 792 return 0; 793 } 794 795 /** 796 * ata_acpi_on_resume - ATA ACPI hook called on resume 797 * @ap: target ATA port 798 * 799 * This function is called when @ap is resumed - right after port 800 * itself is resumed but before any EH action is taken. 801 * 802 * LOCKING: 803 * EH context. 804 */ 805 void ata_acpi_on_resume(struct ata_port *ap) 806 { 807 const struct ata_acpi_gtm *gtm = ata_acpi_init_gtm(ap); 808 struct ata_device *dev; 809 810 if (ata_ap_acpi_handle(ap) && gtm) { 811 /* _GTM valid */ 812 813 /* restore timing parameters */ 814 ata_acpi_stm(ap, gtm); 815 816 /* _GTF should immediately follow _STM so that it can 817 * use values set by _STM. Cache _GTF result and 818 * schedule _GTF. 819 */ 820 ata_for_each_dev(dev, &ap->link, ALL) { 821 ata_acpi_clear_gtf(dev); 822 if (ata_dev_enabled(dev) && 823 ata_dev_get_GTF(dev, NULL) >= 0) 824 dev->flags |= ATA_DFLAG_ACPI_PENDING; 825 } 826 } else { 827 /* SATA _GTF needs to be evaulated after _SDD and 828 * there's no reason to evaluate IDE _GTF early 829 * without _STM. Clear cache and schedule _GTF. 830 */ 831 ata_for_each_dev(dev, &ap->link, ALL) { 832 ata_acpi_clear_gtf(dev); 833 if (ata_dev_enabled(dev)) 834 dev->flags |= ATA_DFLAG_ACPI_PENDING; 835 } 836 } 837 } 838 839 static int ata_acpi_choose_suspend_state(struct ata_device *dev, bool runtime) 840 { 841 int d_max_in = ACPI_STATE_D3_COLD; 842 if (!runtime) 843 goto out; 844 845 /* 846 * For ATAPI, runtime D3 cold is only allowed 847 * for ZPODD in zero power ready state 848 */ 849 if (dev->class == ATA_DEV_ATAPI && 850 !(zpodd_dev_enabled(dev) && zpodd_zpready(dev))) 851 d_max_in = ACPI_STATE_D3_HOT; 852 853 out: 854 return acpi_pm_device_sleep_state(&dev->sdev->sdev_gendev, 855 NULL, d_max_in); 856 } 857 858 static void sata_acpi_set_state(struct ata_port *ap, pm_message_t state) 859 { 860 bool runtime = PMSG_IS_AUTO(state); 861 struct ata_device *dev; 862 acpi_handle handle; 863 int acpi_state; 864 865 ata_for_each_dev(dev, &ap->link, ENABLED) { 866 handle = ata_dev_acpi_handle(dev); 867 if (!handle) 868 continue; 869 870 if (!(state.event & PM_EVENT_RESUME)) { 871 acpi_state = ata_acpi_choose_suspend_state(dev, runtime); 872 if (acpi_state == ACPI_STATE_D0) 873 continue; 874 if (runtime && zpodd_dev_enabled(dev) && 875 acpi_state == ACPI_STATE_D3_COLD) 876 zpodd_enable_run_wake(dev); 877 acpi_bus_set_power(handle, acpi_state); 878 } else { 879 if (runtime && zpodd_dev_enabled(dev)) 880 zpodd_disable_run_wake(dev); 881 acpi_bus_set_power(handle, ACPI_STATE_D0); 882 } 883 } 884 } 885 886 /* ACPI spec requires _PS0 when IDE power on and _PS3 when power off */ 887 static void pata_acpi_set_state(struct ata_port *ap, pm_message_t state) 888 { 889 struct ata_device *dev; 890 acpi_handle port_handle; 891 892 port_handle = ata_ap_acpi_handle(ap); 893 if (!port_handle) 894 return; 895 896 /* channel first and then drives for power on and vica versa 897 for power off */ 898 if (state.event & PM_EVENT_RESUME) 899 acpi_bus_set_power(port_handle, ACPI_STATE_D0); 900 901 ata_for_each_dev(dev, &ap->link, ENABLED) { 902 acpi_handle dev_handle = ata_dev_acpi_handle(dev); 903 if (!dev_handle) 904 continue; 905 906 acpi_bus_set_power(dev_handle, state.event & PM_EVENT_RESUME ? 907 ACPI_STATE_D0 : ACPI_STATE_D3); 908 } 909 910 if (!(state.event & PM_EVENT_RESUME)) 911 acpi_bus_set_power(port_handle, ACPI_STATE_D3); 912 } 913 914 /** 915 * ata_acpi_set_state - set the port power state 916 * @ap: target ATA port 917 * @state: state, on/off 918 * 919 * This function sets a proper ACPI D state for the device on 920 * system and runtime PM operations. 921 */ 922 void ata_acpi_set_state(struct ata_port *ap, pm_message_t state) 923 { 924 if (ap->flags & ATA_FLAG_ACPI_SATA) 925 sata_acpi_set_state(ap, state); 926 else 927 pata_acpi_set_state(ap, state); 928 } 929 930 /** 931 * ata_acpi_on_devcfg - ATA ACPI hook called on device donfiguration 932 * @dev: target ATA device 933 * 934 * This function is called when @dev is about to be configured. 935 * IDENTIFY data might have been modified after this hook is run. 936 * 937 * LOCKING: 938 * EH context. 939 * 940 * RETURNS: 941 * Positive number if IDENTIFY data needs to be refreshed, 0 if not, 942 * -errno on failure. 943 */ 944 int ata_acpi_on_devcfg(struct ata_device *dev) 945 { 946 struct ata_port *ap = dev->link->ap; 947 struct ata_eh_context *ehc = &ap->link.eh_context; 948 int acpi_sata = ap->flags & ATA_FLAG_ACPI_SATA; 949 int nr_executed = 0; 950 int rc; 951 952 if (!ata_dev_acpi_handle(dev)) 953 return 0; 954 955 /* do we need to do _GTF? */ 956 if (!(dev->flags & ATA_DFLAG_ACPI_PENDING) && 957 !(acpi_sata && (ehc->i.flags & ATA_EHI_DID_HARDRESET))) 958 return 0; 959 960 /* do _SDD if SATA */ 961 if (acpi_sata) { 962 rc = ata_acpi_push_id(dev); 963 if (rc && rc != -ENOENT) 964 goto acpi_err; 965 } 966 967 /* do _GTF */ 968 rc = ata_acpi_exec_tfs(dev, &nr_executed); 969 if (rc) 970 goto acpi_err; 971 972 dev->flags &= ~ATA_DFLAG_ACPI_PENDING; 973 974 /* refresh IDENTIFY page if any _GTF command has been executed */ 975 if (nr_executed) { 976 rc = ata_dev_reread_id(dev, 0); 977 if (rc < 0) { 978 ata_dev_err(dev, 979 "failed to IDENTIFY after ACPI commands\n"); 980 return rc; 981 } 982 } 983 984 return 0; 985 986 acpi_err: 987 /* ignore evaluation failure if we can continue safely */ 988 if (rc == -EINVAL && !nr_executed && !(ap->pflags & ATA_PFLAG_FROZEN)) 989 return 0; 990 991 /* fail and let EH retry once more for unknown IO errors */ 992 if (!(dev->flags & ATA_DFLAG_ACPI_FAILED)) { 993 dev->flags |= ATA_DFLAG_ACPI_FAILED; 994 return rc; 995 } 996 997 dev->flags |= ATA_DFLAG_ACPI_DISABLED; 998 ata_dev_warn(dev, "ACPI: failed the second time, disabled\n"); 999 1000 /* We can safely continue if no _GTF command has been executed 1001 * and port is not frozen. 1002 */ 1003 if (!nr_executed && !(ap->pflags & ATA_PFLAG_FROZEN)) 1004 return 0; 1005 1006 return rc; 1007 } 1008 1009 /** 1010 * ata_acpi_on_disable - ATA ACPI hook called when a device is disabled 1011 * @dev: target ATA device 1012 * 1013 * This function is called when @dev is about to be disabled. 1014 * 1015 * LOCKING: 1016 * EH context. 1017 */ 1018 void ata_acpi_on_disable(struct ata_device *dev) 1019 { 1020 ata_acpi_clear_gtf(dev); 1021 } 1022 1023 static void ata_acpi_register_power_resource(struct ata_device *dev) 1024 { 1025 struct scsi_device *sdev = dev->sdev; 1026 acpi_handle handle; 1027 1028 handle = ata_dev_acpi_handle(dev); 1029 if (handle) 1030 acpi_dev_pm_remove_dependent(handle, &sdev->sdev_gendev); 1031 } 1032 1033 static void ata_acpi_unregister_power_resource(struct ata_device *dev) 1034 { 1035 struct scsi_device *sdev = dev->sdev; 1036 acpi_handle handle; 1037 1038 handle = ata_dev_acpi_handle(dev); 1039 if (handle) 1040 acpi_dev_pm_remove_dependent(handle, &sdev->sdev_gendev); 1041 } 1042 1043 void ata_acpi_bind(struct ata_device *dev) 1044 { 1045 ata_acpi_register_power_resource(dev); 1046 if (zpodd_dev_enabled(dev)) 1047 dev_pm_qos_expose_flags(&dev->sdev->sdev_gendev, 0); 1048 } 1049 1050 void ata_acpi_unbind(struct ata_device *dev) 1051 { 1052 ata_acpi_unregister_power_resource(dev); 1053 } 1054 1055 static int compat_pci_ata(struct ata_port *ap) 1056 { 1057 struct device *dev = ap->tdev.parent; 1058 struct pci_dev *pdev; 1059 1060 if (!is_pci_dev(dev)) 1061 return 0; 1062 1063 pdev = to_pci_dev(dev); 1064 1065 if ((pdev->class >> 8) != PCI_CLASS_STORAGE_SATA && 1066 (pdev->class >> 8) != PCI_CLASS_STORAGE_IDE) 1067 return 0; 1068 1069 return 1; 1070 } 1071 1072 static int ata_acpi_bind_host(struct ata_port *ap, acpi_handle *handle) 1073 { 1074 if (ap->flags & ATA_FLAG_ACPI_SATA) 1075 return -ENODEV; 1076 1077 *handle = acpi_get_child(DEVICE_ACPI_HANDLE(ap->tdev.parent), 1078 ap->port_no); 1079 1080 if (!*handle) 1081 return -ENODEV; 1082 1083 if (ata_acpi_gtm(ap, &ap->__acpi_init_gtm) == 0) 1084 ap->pflags |= ATA_PFLAG_INIT_GTM_VALID; 1085 1086 return 0; 1087 } 1088 1089 static int ata_acpi_bind_device(struct ata_port *ap, struct scsi_device *sdev, 1090 acpi_handle *handle) 1091 { 1092 struct ata_device *ata_dev; 1093 1094 if (ap->flags & ATA_FLAG_ACPI_SATA) { 1095 if (!sata_pmp_attached(ap)) 1096 ata_dev = &ap->link.device[sdev->id]; 1097 else 1098 ata_dev = &ap->pmp_link[sdev->channel].device[sdev->id]; 1099 } 1100 else { 1101 ata_dev = &ap->link.device[sdev->id]; 1102 } 1103 1104 *handle = ata_dev_acpi_handle(ata_dev); 1105 1106 if (!*handle) 1107 return -ENODEV; 1108 1109 return 0; 1110 } 1111 1112 static int is_ata_port(const struct device *dev) 1113 { 1114 return dev->type == &ata_port_type; 1115 } 1116 1117 static struct ata_port *dev_to_ata_port(struct device *dev) 1118 { 1119 while (!is_ata_port(dev)) { 1120 if (!dev->parent) 1121 return NULL; 1122 dev = dev->parent; 1123 } 1124 return to_ata_port(dev); 1125 } 1126 1127 static int ata_acpi_find_device(struct device *dev, acpi_handle *handle) 1128 { 1129 struct ata_port *ap = dev_to_ata_port(dev); 1130 1131 if (!ap) 1132 return -ENODEV; 1133 1134 if (!compat_pci_ata(ap)) 1135 return -ENODEV; 1136 1137 if (scsi_is_host_device(dev)) 1138 return ata_acpi_bind_host(ap, handle); 1139 else if (scsi_is_sdev_device(dev)) { 1140 struct scsi_device *sdev = to_scsi_device(dev); 1141 1142 return ata_acpi_bind_device(ap, sdev, handle); 1143 } else 1144 return -ENODEV; 1145 } 1146 1147 static struct acpi_bus_type ata_acpi_bus = { 1148 .name = "ATA", 1149 .find_device = ata_acpi_find_device, 1150 }; 1151 1152 int ata_acpi_register(void) 1153 { 1154 return scsi_register_acpi_bus_type(&ata_acpi_bus); 1155 } 1156 1157 void ata_acpi_unregister(void) 1158 { 1159 scsi_unregister_acpi_bus_type(&ata_acpi_bus); 1160 } 1161