1 /* 2 * This file is provided under a dual BSD/GPLv2 license. When using or 3 * redistributing this file, you may do so under either license. 4 * 5 * GPL LICENSE SUMMARY 6 * 7 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of version 2 of the GNU General Public License as 11 * published by the Free Software Foundation. 12 * 13 * This program is distributed in the hope that it will be useful, but 14 * WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 21 * The full GNU General Public License is included in this distribution 22 * in the file called LICENSE.GPL. 23 * 24 * BSD LICENSE 25 * 26 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved. 27 * All rights reserved. 28 * 29 * Redistribution and use in source and binary forms, with or without 30 * modification, are permitted provided that the following conditions 31 * are met: 32 * 33 * * Redistributions of source code must retain the above copyright 34 * notice, this list of conditions and the following disclaimer. 35 * * Redistributions in binary form must reproduce the above copyright 36 * notice, this list of conditions and the following disclaimer in 37 * the documentation and/or other materials provided with the 38 * distribution. 39 * * Neither the name of Intel Corporation nor the names of its 40 * contributors may be used to endorse or promote products derived 41 * from this software without specific prior written permission. 42 * 43 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 44 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 45 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 46 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 47 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 48 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 49 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 50 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 51 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 52 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 53 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 54 */ 55 #include <scsi/sas.h> 56 #include "isci.h" 57 #include "port.h" 58 #include "remote_device.h" 59 #include "request.h" 60 #include "scic_phy.h" 61 #include "scic_port.h" 62 #include "scic_sds_phy.h" 63 #include "scic_sds_port.h" 64 #include "remote_node_context.h" 65 #include "scu_event_codes.h" 66 #include "task.h" 67 68 /** 69 * isci_remote_device_change_state() - This function gets the status of the 70 * remote_device object. 71 * @isci_device: This parameter points to the isci_remote_device object 72 * 73 * status of the object as a isci_status enum. 74 */ 75 void isci_remote_device_change_state( 76 struct isci_remote_device *isci_device, 77 enum isci_status status) 78 { 79 unsigned long flags; 80 81 spin_lock_irqsave(&isci_device->state_lock, flags); 82 isci_device->status = status; 83 spin_unlock_irqrestore(&isci_device->state_lock, flags); 84 } 85 86 /** 87 * isci_remote_device_not_ready() - This function is called by the scic when 88 * the remote device is not ready. We mark the isci device as ready (not 89 * "ready_for_io") and signal the waiting proccess. 90 * @isci_host: This parameter specifies the isci host object. 91 * @isci_device: This parameter specifies the remote device 92 * 93 */ 94 static void isci_remote_device_not_ready(struct isci_host *ihost, 95 struct isci_remote_device *idev, u32 reason) 96 { 97 dev_dbg(&ihost->pdev->dev, 98 "%s: isci_device = %p\n", __func__, idev); 99 100 if (reason == SCIC_REMOTE_DEVICE_NOT_READY_STOP_REQUESTED) 101 isci_remote_device_change_state(idev, isci_stopping); 102 else 103 /* device ready is actually a "not ready for io" state. */ 104 isci_remote_device_change_state(idev, isci_ready); 105 } 106 107 /** 108 * isci_remote_device_ready() - This function is called by the scic when the 109 * remote device is ready. We mark the isci device as ready and signal the 110 * waiting proccess. 111 * @ihost: our valid isci_host 112 * @idev: remote device 113 * 114 */ 115 static void isci_remote_device_ready(struct isci_host *ihost, struct isci_remote_device *idev) 116 { 117 dev_dbg(&ihost->pdev->dev, 118 "%s: idev = %p\n", __func__, idev); 119 120 isci_remote_device_change_state(idev, isci_ready_for_io); 121 if (test_and_clear_bit(IDEV_START_PENDING, &idev->flags)) 122 wake_up(&ihost->eventq); 123 } 124 125 /* called once the remote node context is ready to be freed. 126 * The remote device can now report that its stop operation is complete. none 127 */ 128 static void rnc_destruct_done(void *_dev) 129 { 130 struct scic_sds_remote_device *sci_dev = _dev; 131 132 BUG_ON(sci_dev->started_request_count != 0); 133 sci_base_state_machine_change_state(&sci_dev->state_machine, 134 SCI_BASE_REMOTE_DEVICE_STATE_STOPPED); 135 } 136 137 static enum sci_status scic_sds_remote_device_terminate_requests(struct scic_sds_remote_device *sci_dev) 138 { 139 struct scic_sds_controller *scic = sci_dev->owning_port->owning_controller; 140 u32 i, request_count = sci_dev->started_request_count; 141 enum sci_status status = SCI_SUCCESS; 142 143 for (i = 0; i < SCI_MAX_IO_REQUESTS && i < request_count; i++) { 144 struct scic_sds_request *sci_req; 145 enum sci_status s; 146 147 sci_req = scic->io_request_table[i]; 148 if (!sci_req || sci_req->target_device != sci_dev) 149 continue; 150 s = scic_controller_terminate_request(scic, sci_dev, sci_req); 151 if (s != SCI_SUCCESS) 152 status = s; 153 } 154 155 return status; 156 } 157 158 enum sci_status scic_remote_device_stop(struct scic_sds_remote_device *sci_dev, 159 u32 timeout) 160 { 161 struct sci_base_state_machine *sm = &sci_dev->state_machine; 162 enum scic_sds_remote_device_states state = sm->current_state_id; 163 164 switch (state) { 165 case SCI_BASE_REMOTE_DEVICE_STATE_INITIAL: 166 case SCI_BASE_REMOTE_DEVICE_STATE_FAILED: 167 case SCI_BASE_REMOTE_DEVICE_STATE_FINAL: 168 default: 169 dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n", 170 __func__, state); 171 return SCI_FAILURE_INVALID_STATE; 172 case SCI_BASE_REMOTE_DEVICE_STATE_STOPPED: 173 return SCI_SUCCESS; 174 case SCI_BASE_REMOTE_DEVICE_STATE_STARTING: 175 /* device not started so there had better be no requests */ 176 BUG_ON(sci_dev->started_request_count != 0); 177 scic_sds_remote_node_context_destruct(&sci_dev->rnc, 178 rnc_destruct_done, sci_dev); 179 /* Transition to the stopping state and wait for the 180 * remote node to complete being posted and invalidated. 181 */ 182 sci_base_state_machine_change_state(sm, SCI_BASE_REMOTE_DEVICE_STATE_STOPPING); 183 return SCI_SUCCESS; 184 case SCI_BASE_REMOTE_DEVICE_STATE_READY: 185 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE: 186 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD: 187 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ: 188 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR: 189 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET: 190 case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE: 191 case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD: 192 sci_base_state_machine_change_state(sm, SCI_BASE_REMOTE_DEVICE_STATE_STOPPING); 193 if (sci_dev->started_request_count == 0) { 194 scic_sds_remote_node_context_destruct(&sci_dev->rnc, 195 rnc_destruct_done, sci_dev); 196 return SCI_SUCCESS; 197 } else 198 return scic_sds_remote_device_terminate_requests(sci_dev); 199 break; 200 case SCI_BASE_REMOTE_DEVICE_STATE_STOPPING: 201 /* All requests should have been terminated, but if there is an 202 * attempt to stop a device already in the stopping state, then 203 * try again to terminate. 204 */ 205 return scic_sds_remote_device_terminate_requests(sci_dev); 206 case SCI_BASE_REMOTE_DEVICE_STATE_RESETTING: 207 sci_base_state_machine_change_state(sm, SCI_BASE_REMOTE_DEVICE_STATE_STOPPING); 208 return SCI_SUCCESS; 209 } 210 } 211 212 enum sci_status scic_remote_device_reset(struct scic_sds_remote_device *sci_dev) 213 { 214 struct sci_base_state_machine *sm = &sci_dev->state_machine; 215 enum scic_sds_remote_device_states state = sm->current_state_id; 216 217 switch (state) { 218 case SCI_BASE_REMOTE_DEVICE_STATE_INITIAL: 219 case SCI_BASE_REMOTE_DEVICE_STATE_STOPPED: 220 case SCI_BASE_REMOTE_DEVICE_STATE_STARTING: 221 case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE: 222 case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD: 223 case SCI_BASE_REMOTE_DEVICE_STATE_STOPPING: 224 case SCI_BASE_REMOTE_DEVICE_STATE_FAILED: 225 case SCI_BASE_REMOTE_DEVICE_STATE_RESETTING: 226 case SCI_BASE_REMOTE_DEVICE_STATE_FINAL: 227 default: 228 dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n", 229 __func__, state); 230 return SCI_FAILURE_INVALID_STATE; 231 case SCI_BASE_REMOTE_DEVICE_STATE_READY: 232 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE: 233 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD: 234 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ: 235 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR: 236 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET: 237 sci_base_state_machine_change_state(sm, SCI_BASE_REMOTE_DEVICE_STATE_RESETTING); 238 return SCI_SUCCESS; 239 } 240 } 241 242 enum sci_status scic_remote_device_reset_complete(struct scic_sds_remote_device *sci_dev) 243 { 244 struct sci_base_state_machine *sm = &sci_dev->state_machine; 245 enum scic_sds_remote_device_states state = sm->current_state_id; 246 247 if (state != SCI_BASE_REMOTE_DEVICE_STATE_RESETTING) { 248 dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n", 249 __func__, state); 250 return SCI_FAILURE_INVALID_STATE; 251 } 252 253 sci_base_state_machine_change_state(sm, SCI_BASE_REMOTE_DEVICE_STATE_READY); 254 return SCI_SUCCESS; 255 } 256 257 enum sci_status scic_sds_remote_device_suspend(struct scic_sds_remote_device *sci_dev, 258 u32 suspend_type) 259 { 260 struct sci_base_state_machine *sm = &sci_dev->state_machine; 261 enum scic_sds_remote_device_states state = sm->current_state_id; 262 263 if (state != SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD) { 264 dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n", 265 __func__, state); 266 return SCI_FAILURE_INVALID_STATE; 267 } 268 269 return scic_sds_remote_node_context_suspend(&sci_dev->rnc, 270 suspend_type, NULL, NULL); 271 } 272 273 enum sci_status scic_sds_remote_device_frame_handler(struct scic_sds_remote_device *sci_dev, 274 u32 frame_index) 275 { 276 struct sci_base_state_machine *sm = &sci_dev->state_machine; 277 enum scic_sds_remote_device_states state = sm->current_state_id; 278 struct scic_sds_controller *scic = sci_dev->owning_port->owning_controller; 279 enum sci_status status; 280 281 switch (state) { 282 case SCI_BASE_REMOTE_DEVICE_STATE_INITIAL: 283 case SCI_BASE_REMOTE_DEVICE_STATE_STOPPED: 284 case SCI_BASE_REMOTE_DEVICE_STATE_STARTING: 285 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE: 286 case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE: 287 case SCI_BASE_REMOTE_DEVICE_STATE_FINAL: 288 default: 289 dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n", 290 __func__, state); 291 /* Return the frame back to the controller */ 292 scic_sds_controller_release_frame(scic, frame_index); 293 return SCI_FAILURE_INVALID_STATE; 294 case SCI_BASE_REMOTE_DEVICE_STATE_READY: 295 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR: 296 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET: 297 case SCI_BASE_REMOTE_DEVICE_STATE_STOPPING: 298 case SCI_BASE_REMOTE_DEVICE_STATE_FAILED: 299 case SCI_BASE_REMOTE_DEVICE_STATE_RESETTING: { 300 struct scic_sds_request *sci_req; 301 struct ssp_frame_hdr hdr; 302 void *frame_header; 303 ssize_t word_cnt; 304 305 status = scic_sds_unsolicited_frame_control_get_header(&scic->uf_control, 306 frame_index, 307 &frame_header); 308 if (status != SCI_SUCCESS) 309 return status; 310 311 word_cnt = sizeof(hdr) / sizeof(u32); 312 sci_swab32_cpy(&hdr, frame_header, word_cnt); 313 314 sci_req = scic_request_by_tag(scic, be16_to_cpu(hdr.tag)); 315 if (sci_req && sci_req->target_device == sci_dev) { 316 /* The IO request is now in charge of releasing the frame */ 317 status = sci_req->state_handlers->frame_handler(sci_req, 318 frame_index); 319 } else { 320 /* We could not map this tag to a valid IO 321 * request Just toss the frame and continue 322 */ 323 scic_sds_controller_release_frame(scic, frame_index); 324 } 325 break; 326 } 327 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ: { 328 struct dev_to_host_fis *hdr; 329 330 status = scic_sds_unsolicited_frame_control_get_header(&scic->uf_control, 331 frame_index, 332 (void **)&hdr); 333 if (status != SCI_SUCCESS) 334 return status; 335 336 if (hdr->fis_type == FIS_SETDEVBITS && 337 (hdr->status & ATA_ERR)) { 338 sci_dev->not_ready_reason = SCIC_REMOTE_DEVICE_NOT_READY_SATA_SDB_ERROR_FIS_RECEIVED; 339 340 /* TODO Check sactive and complete associated IO if any. */ 341 sci_base_state_machine_change_state(sm, SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR); 342 } else if (hdr->fis_type == FIS_REGD2H && 343 (hdr->status & ATA_ERR)) { 344 /* 345 * Some devices return D2H FIS when an NCQ error is detected. 346 * Treat this like an SDB error FIS ready reason. 347 */ 348 sci_dev->not_ready_reason = SCIC_REMOTE_DEVICE_NOT_READY_SATA_SDB_ERROR_FIS_RECEIVED; 349 sci_base_state_machine_change_state(&sci_dev->state_machine, 350 SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR); 351 } else 352 status = SCI_FAILURE; 353 354 scic_sds_controller_release_frame(scic, frame_index); 355 break; 356 } 357 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD: 358 case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD: 359 /* The device does not process any UF received from the hardware while 360 * in this state. All unsolicited frames are forwarded to the io request 361 * object. 362 */ 363 status = scic_sds_io_request_frame_handler(sci_dev->working_request, frame_index); 364 break; 365 } 366 367 return status; 368 } 369 370 static bool is_remote_device_ready(struct scic_sds_remote_device *sci_dev) 371 { 372 373 struct sci_base_state_machine *sm = &sci_dev->state_machine; 374 enum scic_sds_remote_device_states state = sm->current_state_id; 375 376 switch (state) { 377 case SCI_BASE_REMOTE_DEVICE_STATE_READY: 378 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE: 379 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD: 380 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ: 381 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR: 382 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET: 383 case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE: 384 case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD: 385 return true; 386 default: 387 return false; 388 } 389 } 390 391 enum sci_status scic_sds_remote_device_event_handler(struct scic_sds_remote_device *sci_dev, 392 u32 event_code) 393 { 394 struct sci_base_state_machine *sm = &sci_dev->state_machine; 395 enum scic_sds_remote_device_states state = sm->current_state_id; 396 enum sci_status status; 397 398 switch (scu_get_event_type(event_code)) { 399 case SCU_EVENT_TYPE_RNC_OPS_MISC: 400 case SCU_EVENT_TYPE_RNC_SUSPEND_TX: 401 case SCU_EVENT_TYPE_RNC_SUSPEND_TX_RX: 402 status = scic_sds_remote_node_context_event_handler(&sci_dev->rnc, event_code); 403 break; 404 case SCU_EVENT_TYPE_PTX_SCHEDULE_EVENT: 405 if (scu_get_event_code(event_code) == SCU_EVENT_IT_NEXUS_TIMEOUT) { 406 status = SCI_SUCCESS; 407 408 /* Suspend the associated RNC */ 409 scic_sds_remote_node_context_suspend(&sci_dev->rnc, 410 SCI_SOFTWARE_SUSPENSION, 411 NULL, NULL); 412 413 dev_dbg(scirdev_to_dev(sci_dev), 414 "%s: device: %p event code: %x: %s\n", 415 __func__, sci_dev, event_code, 416 is_remote_device_ready(sci_dev) 417 ? "I_T_Nexus_Timeout event" 418 : "I_T_Nexus_Timeout event in wrong state"); 419 420 break; 421 } 422 /* Else, fall through and treat as unhandled... */ 423 default: 424 dev_dbg(scirdev_to_dev(sci_dev), 425 "%s: device: %p event code: %x: %s\n", 426 __func__, sci_dev, event_code, 427 is_remote_device_ready(sci_dev) 428 ? "unexpected event" 429 : "unexpected event in wrong state"); 430 status = SCI_FAILURE_INVALID_STATE; 431 break; 432 } 433 434 if (status != SCI_SUCCESS) 435 return status; 436 437 if (state == SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE) { 438 439 /* We pick up suspension events to handle specifically to this 440 * state. We resume the RNC right away. 441 */ 442 if (scu_get_event_type(event_code) == SCU_EVENT_TYPE_RNC_SUSPEND_TX || 443 scu_get_event_type(event_code) == SCU_EVENT_TYPE_RNC_SUSPEND_TX_RX) 444 status = scic_sds_remote_node_context_resume(&sci_dev->rnc, NULL, NULL); 445 } 446 447 return status; 448 } 449 450 static void scic_sds_remote_device_start_request(struct scic_sds_remote_device *sci_dev, 451 struct scic_sds_request *sci_req, 452 enum sci_status status) 453 { 454 struct scic_sds_port *sci_port = sci_dev->owning_port; 455 456 /* cleanup requests that failed after starting on the port */ 457 if (status != SCI_SUCCESS) 458 scic_sds_port_complete_io(sci_port, sci_dev, sci_req); 459 else 460 scic_sds_remote_device_increment_request_count(sci_dev); 461 } 462 463 enum sci_status scic_sds_remote_device_start_io(struct scic_sds_controller *scic, 464 struct scic_sds_remote_device *sci_dev, 465 struct scic_sds_request *sci_req) 466 { 467 struct sci_base_state_machine *sm = &sci_dev->state_machine; 468 enum scic_sds_remote_device_states state = sm->current_state_id; 469 struct scic_sds_port *sci_port = sci_dev->owning_port; 470 struct isci_request *ireq = sci_req_to_ireq(sci_req); 471 enum sci_status status; 472 473 switch (state) { 474 case SCI_BASE_REMOTE_DEVICE_STATE_INITIAL: 475 case SCI_BASE_REMOTE_DEVICE_STATE_STOPPED: 476 case SCI_BASE_REMOTE_DEVICE_STATE_STARTING: 477 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR: 478 case SCI_BASE_REMOTE_DEVICE_STATE_STOPPING: 479 case SCI_BASE_REMOTE_DEVICE_STATE_FAILED: 480 case SCI_BASE_REMOTE_DEVICE_STATE_RESETTING: 481 case SCI_BASE_REMOTE_DEVICE_STATE_FINAL: 482 default: 483 dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n", 484 __func__, state); 485 return SCI_FAILURE_INVALID_STATE; 486 case SCI_BASE_REMOTE_DEVICE_STATE_READY: 487 /* attempt to start an io request for this device object. The remote 488 * device object will issue the start request for the io and if 489 * successful it will start the request for the port object then 490 * increment its own request count. 491 */ 492 status = scic_sds_port_start_io(sci_port, sci_dev, sci_req); 493 if (status != SCI_SUCCESS) 494 return status; 495 496 status = scic_sds_remote_node_context_start_io(&sci_dev->rnc, sci_req); 497 if (status != SCI_SUCCESS) 498 break; 499 500 status = scic_sds_request_start(sci_req); 501 break; 502 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE: { 503 /* handle the start io operation for a sata device that is in 504 * the command idle state. - Evalute the type of IO request to 505 * be started - If its an NCQ request change to NCQ substate - 506 * If its any other command change to the CMD substate 507 * 508 * If this is a softreset we may want to have a different 509 * substate. 510 */ 511 enum scic_sds_remote_device_states new_state; 512 struct sas_task *task = isci_request_access_task(ireq); 513 514 status = scic_sds_port_start_io(sci_port, sci_dev, sci_req); 515 if (status != SCI_SUCCESS) 516 return status; 517 518 status = scic_sds_remote_node_context_start_io(&sci_dev->rnc, sci_req); 519 if (status != SCI_SUCCESS) 520 break; 521 522 status = sci_req->state_handlers->start_handler(sci_req); 523 if (status != SCI_SUCCESS) 524 break; 525 526 if (task->ata_task.use_ncq) 527 new_state = SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ; 528 else { 529 sci_dev->working_request = sci_req; 530 new_state = SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD; 531 } 532 sci_base_state_machine_change_state(sm, new_state); 533 break; 534 } 535 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ: { 536 struct sas_task *task = isci_request_access_task(ireq); 537 538 if (task->ata_task.use_ncq) { 539 status = scic_sds_port_start_io(sci_port, sci_dev, sci_req); 540 if (status != SCI_SUCCESS) 541 return status; 542 543 status = scic_sds_remote_node_context_start_io(&sci_dev->rnc, sci_req); 544 if (status != SCI_SUCCESS) 545 break; 546 547 status = sci_req->state_handlers->start_handler(sci_req); 548 } else 549 return SCI_FAILURE_INVALID_STATE; 550 break; 551 } 552 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET: 553 return SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED; 554 case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE: 555 status = scic_sds_port_start_io(sci_port, sci_dev, sci_req); 556 if (status != SCI_SUCCESS) 557 return status; 558 559 status = scic_sds_remote_node_context_start_io(&sci_dev->rnc, sci_req); 560 if (status != SCI_SUCCESS) 561 break; 562 563 status = scic_sds_request_start(sci_req); 564 if (status != SCI_SUCCESS) 565 break; 566 567 sci_dev->working_request = sci_req; 568 sci_base_state_machine_change_state(&sci_dev->state_machine, 569 SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD); 570 break; 571 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD: 572 case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD: 573 /* device is already handling a command it can not accept new commands 574 * until this one is complete. 575 */ 576 return SCI_FAILURE_INVALID_STATE; 577 } 578 579 scic_sds_remote_device_start_request(sci_dev, sci_req, status); 580 return status; 581 } 582 583 static enum sci_status common_complete_io(struct scic_sds_port *sci_port, 584 struct scic_sds_remote_device *sci_dev, 585 struct scic_sds_request *sci_req) 586 { 587 enum sci_status status; 588 589 status = scic_sds_request_complete(sci_req); 590 if (status != SCI_SUCCESS) 591 return status; 592 593 status = scic_sds_port_complete_io(sci_port, sci_dev, sci_req); 594 if (status != SCI_SUCCESS) 595 return status; 596 597 scic_sds_remote_device_decrement_request_count(sci_dev); 598 return status; 599 } 600 601 enum sci_status scic_sds_remote_device_complete_io(struct scic_sds_controller *scic, 602 struct scic_sds_remote_device *sci_dev, 603 struct scic_sds_request *sci_req) 604 { 605 struct sci_base_state_machine *sm = &sci_dev->state_machine; 606 enum scic_sds_remote_device_states state = sm->current_state_id; 607 struct scic_sds_port *sci_port = sci_dev->owning_port; 608 enum sci_status status; 609 610 switch (state) { 611 case SCI_BASE_REMOTE_DEVICE_STATE_INITIAL: 612 case SCI_BASE_REMOTE_DEVICE_STATE_STOPPED: 613 case SCI_BASE_REMOTE_DEVICE_STATE_STARTING: 614 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE: 615 case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE: 616 case SCI_BASE_REMOTE_DEVICE_STATE_FAILED: 617 case SCI_BASE_REMOTE_DEVICE_STATE_FINAL: 618 default: 619 dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n", 620 __func__, state); 621 return SCI_FAILURE_INVALID_STATE; 622 case SCI_BASE_REMOTE_DEVICE_STATE_READY: 623 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET: 624 case SCI_BASE_REMOTE_DEVICE_STATE_RESETTING: 625 status = common_complete_io(sci_port, sci_dev, sci_req); 626 break; 627 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD: 628 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ: 629 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR: 630 status = common_complete_io(sci_port, sci_dev, sci_req); 631 if (status != SCI_SUCCESS) 632 break; 633 634 if (sci_req->sci_status == SCI_FAILURE_REMOTE_DEVICE_RESET_REQUIRED) { 635 /* This request causes hardware error, device needs to be Lun Reset. 636 * So here we force the state machine to IDLE state so the rest IOs 637 * can reach RNC state handler, these IOs will be completed by RNC with 638 * status of "DEVICE_RESET_REQUIRED", instead of "INVALID STATE". 639 */ 640 sci_base_state_machine_change_state(sm, SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET); 641 } else if (scic_sds_remote_device_get_request_count(sci_dev) == 0) 642 sci_base_state_machine_change_state(sm, SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE); 643 break; 644 case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD: 645 status = common_complete_io(sci_port, sci_dev, sci_req); 646 if (status != SCI_SUCCESS) 647 break; 648 sci_base_state_machine_change_state(sm, SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE); 649 break; 650 case SCI_BASE_REMOTE_DEVICE_STATE_STOPPING: 651 status = common_complete_io(sci_port, sci_dev, sci_req); 652 if (status != SCI_SUCCESS) 653 break; 654 655 if (scic_sds_remote_device_get_request_count(sci_dev) == 0) 656 scic_sds_remote_node_context_destruct(&sci_dev->rnc, 657 rnc_destruct_done, 658 sci_dev); 659 break; 660 } 661 662 if (status != SCI_SUCCESS) 663 dev_err(scirdev_to_dev(sci_dev), 664 "%s: Port:0x%p Device:0x%p Request:0x%p Status:0x%x " 665 "could not complete\n", __func__, sci_port, 666 sci_dev, sci_req, status); 667 668 return status; 669 } 670 671 static void scic_sds_remote_device_continue_request(void *dev) 672 { 673 struct scic_sds_remote_device *sci_dev = dev; 674 675 /* we need to check if this request is still valid to continue. */ 676 if (sci_dev->working_request) 677 scic_controller_continue_io(sci_dev->working_request); 678 } 679 680 enum sci_status scic_sds_remote_device_start_task(struct scic_sds_controller *scic, 681 struct scic_sds_remote_device *sci_dev, 682 struct scic_sds_request *sci_req) 683 { 684 struct sci_base_state_machine *sm = &sci_dev->state_machine; 685 enum scic_sds_remote_device_states state = sm->current_state_id; 686 struct scic_sds_port *sci_port = sci_dev->owning_port; 687 enum sci_status status; 688 689 switch (state) { 690 case SCI_BASE_REMOTE_DEVICE_STATE_INITIAL: 691 case SCI_BASE_REMOTE_DEVICE_STATE_STOPPED: 692 case SCI_BASE_REMOTE_DEVICE_STATE_STARTING: 693 case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE: 694 case SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD: 695 case SCI_BASE_REMOTE_DEVICE_STATE_STOPPING: 696 case SCI_BASE_REMOTE_DEVICE_STATE_FAILED: 697 case SCI_BASE_REMOTE_DEVICE_STATE_RESETTING: 698 case SCI_BASE_REMOTE_DEVICE_STATE_FINAL: 699 default: 700 dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n", 701 __func__, state); 702 return SCI_FAILURE_INVALID_STATE; 703 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE: 704 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD: 705 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ: 706 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR: 707 case SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET: 708 status = scic_sds_port_start_io(sci_port, sci_dev, sci_req); 709 if (status != SCI_SUCCESS) 710 return status; 711 712 status = scic_sds_remote_node_context_start_task(&sci_dev->rnc, sci_req); 713 if (status != SCI_SUCCESS) 714 goto out; 715 716 status = sci_req->state_handlers->start_handler(sci_req); 717 if (status != SCI_SUCCESS) 718 goto out; 719 720 /* Note: If the remote device state is not IDLE this will 721 * replace the request that probably resulted in the task 722 * management request. 723 */ 724 sci_dev->working_request = sci_req; 725 sci_base_state_machine_change_state(sm, SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD); 726 727 /* The remote node context must cleanup the TCi to NCQ mapping 728 * table. The only way to do this correctly is to either write 729 * to the TLCR register or to invalidate and repost the RNC. In 730 * either case the remote node context state machine will take 731 * the correct action when the remote node context is suspended 732 * and later resumed. 733 */ 734 scic_sds_remote_node_context_suspend(&sci_dev->rnc, 735 SCI_SOFTWARE_SUSPENSION, NULL, NULL); 736 scic_sds_remote_node_context_resume(&sci_dev->rnc, 737 scic_sds_remote_device_continue_request, 738 sci_dev); 739 740 out: 741 scic_sds_remote_device_start_request(sci_dev, sci_req, status); 742 /* We need to let the controller start request handler know that 743 * it can't post TC yet. We will provide a callback function to 744 * post TC when RNC gets resumed. 745 */ 746 return SCI_FAILURE_RESET_DEVICE_PARTIAL_SUCCESS; 747 case SCI_BASE_REMOTE_DEVICE_STATE_READY: 748 status = scic_sds_port_start_io(sci_port, sci_dev, sci_req); 749 if (status != SCI_SUCCESS) 750 return status; 751 752 status = scic_sds_remote_node_context_start_task(&sci_dev->rnc, sci_req); 753 if (status != SCI_SUCCESS) 754 break; 755 756 status = scic_sds_request_start(sci_req); 757 break; 758 } 759 scic_sds_remote_device_start_request(sci_dev, sci_req, status); 760 761 return status; 762 } 763 764 /** 765 * 766 * @sci_dev: 767 * @request: 768 * 769 * This method takes the request and bulids an appropriate SCU context for the 770 * request and then requests the controller to post the request. none 771 */ 772 void scic_sds_remote_device_post_request( 773 struct scic_sds_remote_device *sci_dev, 774 u32 request) 775 { 776 u32 context; 777 778 context = scic_sds_remote_device_build_command_context(sci_dev, request); 779 780 scic_sds_controller_post_request( 781 scic_sds_remote_device_get_controller(sci_dev), 782 context 783 ); 784 } 785 786 /* called once the remote node context has transisitioned to a 787 * ready state. This is the indication that the remote device object can also 788 * transition to ready. 789 */ 790 static void remote_device_resume_done(void *_dev) 791 { 792 struct scic_sds_remote_device *sci_dev = _dev; 793 794 if (is_remote_device_ready(sci_dev)) 795 return; 796 797 /* go 'ready' if we are not already in a ready state */ 798 sci_base_state_machine_change_state(&sci_dev->state_machine, 799 SCI_BASE_REMOTE_DEVICE_STATE_READY); 800 } 801 802 static void scic_sds_stp_remote_device_ready_idle_substate_resume_complete_handler(void *_dev) 803 { 804 struct scic_sds_remote_device *sci_dev = _dev; 805 struct isci_remote_device *idev = sci_dev_to_idev(sci_dev); 806 struct scic_sds_controller *scic = sci_dev->owning_port->owning_controller; 807 808 /* For NCQ operation we do not issue a isci_remote_device_not_ready(). 809 * As a result, avoid sending the ready notification. 810 */ 811 if (sci_dev->state_machine.previous_state_id != SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ) 812 isci_remote_device_ready(scic_to_ihost(scic), idev); 813 } 814 815 static void scic_sds_remote_device_initial_state_enter(void *object) 816 { 817 struct scic_sds_remote_device *sci_dev = object; 818 819 /* Initial state is a transitional state to the stopped state */ 820 sci_base_state_machine_change_state(&sci_dev->state_machine, 821 SCI_BASE_REMOTE_DEVICE_STATE_STOPPED); 822 } 823 824 /** 825 * scic_remote_device_destruct() - free remote node context and destruct 826 * @remote_device: This parameter specifies the remote device to be destructed. 827 * 828 * Remote device objects are a limited resource. As such, they must be 829 * protected. Thus calls to construct and destruct are mutually exclusive and 830 * non-reentrant. The return value shall indicate if the device was 831 * successfully destructed or if some failure occurred. enum sci_status This value 832 * is returned if the device is successfully destructed. 833 * SCI_FAILURE_INVALID_REMOTE_DEVICE This value is returned if the supplied 834 * device isn't valid (e.g. it's already been destoryed, the handle isn't 835 * valid, etc.). 836 */ 837 static enum sci_status scic_remote_device_destruct(struct scic_sds_remote_device *sci_dev) 838 { 839 struct sci_base_state_machine *sm = &sci_dev->state_machine; 840 enum scic_sds_remote_device_states state = sm->current_state_id; 841 struct scic_sds_controller *scic; 842 843 if (state != SCI_BASE_REMOTE_DEVICE_STATE_STOPPED) { 844 dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n", 845 __func__, state); 846 return SCI_FAILURE_INVALID_STATE; 847 } 848 849 scic = sci_dev->owning_port->owning_controller; 850 scic_sds_controller_free_remote_node_context(scic, sci_dev, 851 sci_dev->rnc.remote_node_index); 852 sci_dev->rnc.remote_node_index = SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX; 853 sci_base_state_machine_change_state(sm, SCI_BASE_REMOTE_DEVICE_STATE_FINAL); 854 855 return SCI_SUCCESS; 856 } 857 858 /** 859 * isci_remote_device_deconstruct() - This function frees an isci_remote_device. 860 * @ihost: This parameter specifies the isci host object. 861 * @idev: This parameter specifies the remote device to be freed. 862 * 863 */ 864 static void isci_remote_device_deconstruct(struct isci_host *ihost, struct isci_remote_device *idev) 865 { 866 dev_dbg(&ihost->pdev->dev, 867 "%s: isci_device = %p\n", __func__, idev); 868 869 /* There should not be any outstanding io's. All paths to 870 * here should go through isci_remote_device_nuke_requests. 871 * If we hit this condition, we will need a way to complete 872 * io requests in process */ 873 while (!list_empty(&idev->reqs_in_process)) { 874 875 dev_err(&ihost->pdev->dev, 876 "%s: ** request list not empty! **\n", __func__); 877 BUG(); 878 } 879 880 scic_remote_device_destruct(&idev->sci); 881 idev->domain_dev->lldd_dev = NULL; 882 idev->domain_dev = NULL; 883 idev->isci_port = NULL; 884 list_del_init(&idev->node); 885 886 clear_bit(IDEV_START_PENDING, &idev->flags); 887 clear_bit(IDEV_STOP_PENDING, &idev->flags); 888 clear_bit(IDEV_EH, &idev->flags); 889 wake_up(&ihost->eventq); 890 } 891 892 /** 893 * isci_remote_device_stop_complete() - This function is called by the scic 894 * when the remote device stop has completed. We mark the isci device as not 895 * ready and remove the isci remote device. 896 * @ihost: This parameter specifies the isci host object. 897 * @idev: This parameter specifies the remote device. 898 * @status: This parameter specifies status of the completion. 899 * 900 */ 901 static void isci_remote_device_stop_complete(struct isci_host *ihost, 902 struct isci_remote_device *idev) 903 { 904 dev_dbg(&ihost->pdev->dev, "%s: complete idev = %p\n", __func__, idev); 905 906 isci_remote_device_change_state(idev, isci_stopped); 907 908 /* after stop, we can tear down resources. */ 909 isci_remote_device_deconstruct(ihost, idev); 910 } 911 912 static void scic_sds_remote_device_stopped_state_enter(void *object) 913 { 914 struct scic_sds_remote_device *sci_dev = object; 915 struct scic_sds_controller *scic = sci_dev->owning_port->owning_controller; 916 struct isci_remote_device *idev = sci_dev_to_idev(sci_dev); 917 u32 prev_state; 918 919 /* If we are entering from the stopping state let the SCI User know that 920 * the stop operation has completed. 921 */ 922 prev_state = sci_dev->state_machine.previous_state_id; 923 if (prev_state == SCI_BASE_REMOTE_DEVICE_STATE_STOPPING) 924 isci_remote_device_stop_complete(scic_to_ihost(scic), idev); 925 926 scic_sds_controller_remote_device_stopped(scic, sci_dev); 927 } 928 929 static void scic_sds_remote_device_starting_state_enter(void *object) 930 { 931 struct scic_sds_remote_device *sci_dev = object; 932 struct scic_sds_controller *scic = scic_sds_remote_device_get_controller(sci_dev); 933 struct isci_host *ihost = scic_to_ihost(scic); 934 struct isci_remote_device *idev = sci_dev_to_idev(sci_dev); 935 936 isci_remote_device_not_ready(ihost, idev, 937 SCIC_REMOTE_DEVICE_NOT_READY_START_REQUESTED); 938 } 939 940 static void scic_sds_remote_device_ready_state_enter(void *object) 941 { 942 struct scic_sds_remote_device *sci_dev = object; 943 struct scic_sds_controller *scic = sci_dev->owning_port->owning_controller; 944 struct isci_remote_device *idev = sci_dev_to_idev(sci_dev); 945 struct domain_device *dev = idev->domain_dev; 946 947 scic->remote_device_sequence[sci_dev->rnc.remote_node_index]++; 948 949 if (dev->dev_type == SATA_DEV || (dev->tproto & SAS_PROTOCOL_SATA)) { 950 sci_base_state_machine_change_state(&sci_dev->state_machine, 951 SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE); 952 } else if (dev_is_expander(dev)) { 953 sci_base_state_machine_change_state(&sci_dev->state_machine, 954 SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE); 955 } else 956 isci_remote_device_ready(scic_to_ihost(scic), idev); 957 } 958 959 static void scic_sds_remote_device_ready_state_exit(void *object) 960 { 961 struct scic_sds_remote_device *sci_dev = object; 962 struct domain_device *dev = sci_dev_to_domain(sci_dev); 963 964 if (dev->dev_type == SAS_END_DEV) { 965 struct scic_sds_controller *scic = sci_dev->owning_port->owning_controller; 966 struct isci_remote_device *idev = sci_dev_to_idev(sci_dev); 967 968 isci_remote_device_not_ready(scic_to_ihost(scic), idev, 969 SCIC_REMOTE_DEVICE_NOT_READY_STOP_REQUESTED); 970 } 971 } 972 973 static void scic_sds_remote_device_resetting_state_enter(void *object) 974 { 975 struct scic_sds_remote_device *sci_dev = object; 976 977 scic_sds_remote_node_context_suspend( 978 &sci_dev->rnc, SCI_SOFTWARE_SUSPENSION, NULL, NULL); 979 } 980 981 static void scic_sds_remote_device_resetting_state_exit(void *object) 982 { 983 struct scic_sds_remote_device *sci_dev = object; 984 985 scic_sds_remote_node_context_resume(&sci_dev->rnc, NULL, NULL); 986 } 987 988 static void scic_sds_stp_remote_device_ready_idle_substate_enter(void *object) 989 { 990 struct scic_sds_remote_device *sci_dev = object; 991 992 sci_dev->working_request = NULL; 993 if (scic_sds_remote_node_context_is_ready(&sci_dev->rnc)) { 994 /* 995 * Since the RNC is ready, it's alright to finish completion 996 * processing (e.g. signal the remote device is ready). */ 997 scic_sds_stp_remote_device_ready_idle_substate_resume_complete_handler(sci_dev); 998 } else { 999 scic_sds_remote_node_context_resume(&sci_dev->rnc, 1000 scic_sds_stp_remote_device_ready_idle_substate_resume_complete_handler, 1001 sci_dev); 1002 } 1003 } 1004 1005 static void scic_sds_stp_remote_device_ready_cmd_substate_enter(void *object) 1006 { 1007 struct scic_sds_remote_device *sci_dev = object; 1008 struct scic_sds_controller *scic = scic_sds_remote_device_get_controller(sci_dev); 1009 1010 BUG_ON(sci_dev->working_request == NULL); 1011 1012 isci_remote_device_not_ready(scic_to_ihost(scic), sci_dev_to_idev(sci_dev), 1013 SCIC_REMOTE_DEVICE_NOT_READY_SATA_REQUEST_STARTED); 1014 } 1015 1016 static void scic_sds_stp_remote_device_ready_ncq_error_substate_enter(void *object) 1017 { 1018 struct scic_sds_remote_device *sci_dev = object; 1019 struct scic_sds_controller *scic = scic_sds_remote_device_get_controller(sci_dev); 1020 struct isci_remote_device *idev = sci_dev_to_idev(sci_dev); 1021 1022 if (sci_dev->not_ready_reason == SCIC_REMOTE_DEVICE_NOT_READY_SATA_SDB_ERROR_FIS_RECEIVED) 1023 isci_remote_device_not_ready(scic_to_ihost(scic), idev, 1024 sci_dev->not_ready_reason); 1025 } 1026 1027 static void scic_sds_smp_remote_device_ready_idle_substate_enter(void *object) 1028 { 1029 struct scic_sds_remote_device *sci_dev = object; 1030 struct scic_sds_controller *scic = scic_sds_remote_device_get_controller(sci_dev); 1031 1032 isci_remote_device_ready(scic_to_ihost(scic), sci_dev_to_idev(sci_dev)); 1033 } 1034 1035 static void scic_sds_smp_remote_device_ready_cmd_substate_enter(void *object) 1036 { 1037 struct scic_sds_remote_device *sci_dev = object; 1038 struct scic_sds_controller *scic = scic_sds_remote_device_get_controller(sci_dev); 1039 1040 BUG_ON(sci_dev->working_request == NULL); 1041 1042 isci_remote_device_not_ready(scic_to_ihost(scic), sci_dev_to_idev(sci_dev), 1043 SCIC_REMOTE_DEVICE_NOT_READY_SMP_REQUEST_STARTED); 1044 } 1045 1046 static void scic_sds_smp_remote_device_ready_cmd_substate_exit(void *object) 1047 { 1048 struct scic_sds_remote_device *sci_dev = object; 1049 1050 sci_dev->working_request = NULL; 1051 } 1052 1053 static const struct sci_base_state scic_sds_remote_device_state_table[] = { 1054 [SCI_BASE_REMOTE_DEVICE_STATE_INITIAL] = { 1055 .enter_state = scic_sds_remote_device_initial_state_enter, 1056 }, 1057 [SCI_BASE_REMOTE_DEVICE_STATE_STOPPED] = { 1058 .enter_state = scic_sds_remote_device_stopped_state_enter, 1059 }, 1060 [SCI_BASE_REMOTE_DEVICE_STATE_STARTING] = { 1061 .enter_state = scic_sds_remote_device_starting_state_enter, 1062 }, 1063 [SCI_BASE_REMOTE_DEVICE_STATE_READY] = { 1064 .enter_state = scic_sds_remote_device_ready_state_enter, 1065 .exit_state = scic_sds_remote_device_ready_state_exit 1066 }, 1067 [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_IDLE] = { 1068 .enter_state = scic_sds_stp_remote_device_ready_idle_substate_enter, 1069 }, 1070 [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_CMD] = { 1071 .enter_state = scic_sds_stp_remote_device_ready_cmd_substate_enter, 1072 }, 1073 [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ] = { }, 1074 [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR] = { 1075 .enter_state = scic_sds_stp_remote_device_ready_ncq_error_substate_enter, 1076 }, 1077 [SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_AWAIT_RESET] = { }, 1078 [SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_IDLE] = { 1079 .enter_state = scic_sds_smp_remote_device_ready_idle_substate_enter, 1080 }, 1081 [SCIC_SDS_SMP_REMOTE_DEVICE_READY_SUBSTATE_CMD] = { 1082 .enter_state = scic_sds_smp_remote_device_ready_cmd_substate_enter, 1083 .exit_state = scic_sds_smp_remote_device_ready_cmd_substate_exit, 1084 }, 1085 [SCI_BASE_REMOTE_DEVICE_STATE_STOPPING] = { }, 1086 [SCI_BASE_REMOTE_DEVICE_STATE_FAILED] = { }, 1087 [SCI_BASE_REMOTE_DEVICE_STATE_RESETTING] = { 1088 .enter_state = scic_sds_remote_device_resetting_state_enter, 1089 .exit_state = scic_sds_remote_device_resetting_state_exit 1090 }, 1091 [SCI_BASE_REMOTE_DEVICE_STATE_FINAL] = { }, 1092 }; 1093 1094 /** 1095 * scic_remote_device_construct() - common construction 1096 * @sci_port: SAS/SATA port through which this device is accessed. 1097 * @sci_dev: remote device to construct 1098 * 1099 * This routine just performs benign initialization and does not 1100 * allocate the remote_node_context which is left to 1101 * scic_remote_device_[de]a_construct(). scic_remote_device_destruct() 1102 * frees the remote_node_context(s) for the device. 1103 */ 1104 static void scic_remote_device_construct(struct scic_sds_port *sci_port, 1105 struct scic_sds_remote_device *sci_dev) 1106 { 1107 sci_dev->owning_port = sci_port; 1108 sci_dev->started_request_count = 0; 1109 1110 sci_base_state_machine_construct( 1111 &sci_dev->state_machine, 1112 sci_dev, 1113 scic_sds_remote_device_state_table, 1114 SCI_BASE_REMOTE_DEVICE_STATE_INITIAL 1115 ); 1116 1117 sci_base_state_machine_start( 1118 &sci_dev->state_machine 1119 ); 1120 1121 scic_sds_remote_node_context_construct(&sci_dev->rnc, 1122 SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX); 1123 } 1124 1125 /** 1126 * scic_remote_device_da_construct() - construct direct attached device. 1127 * 1128 * The information (e.g. IAF, Signature FIS, etc.) necessary to build 1129 * the device is known to the SCI Core since it is contained in the 1130 * scic_phy object. Remote node context(s) is/are a global resource 1131 * allocated by this routine, freed by scic_remote_device_destruct(). 1132 * 1133 * Returns: 1134 * SCI_FAILURE_DEVICE_EXISTS - device has already been constructed. 1135 * SCI_FAILURE_UNSUPPORTED_PROTOCOL - e.g. sas device attached to 1136 * sata-only controller instance. 1137 * SCI_FAILURE_INSUFFICIENT_RESOURCES - remote node contexts exhausted. 1138 */ 1139 static enum sci_status scic_remote_device_da_construct(struct scic_sds_port *sci_port, 1140 struct scic_sds_remote_device *sci_dev) 1141 { 1142 enum sci_status status; 1143 struct domain_device *dev = sci_dev_to_domain(sci_dev); 1144 1145 scic_remote_device_construct(sci_port, sci_dev); 1146 1147 /* 1148 * This information is request to determine how many remote node context 1149 * entries will be needed to store the remote node. 1150 */ 1151 sci_dev->is_direct_attached = true; 1152 status = scic_sds_controller_allocate_remote_node_context(sci_port->owning_controller, 1153 sci_dev, 1154 &sci_dev->rnc.remote_node_index); 1155 1156 if (status != SCI_SUCCESS) 1157 return status; 1158 1159 if (dev->dev_type == SAS_END_DEV || dev->dev_type == SATA_DEV || 1160 (dev->tproto & SAS_PROTOCOL_STP) || dev_is_expander(dev)) 1161 /* pass */; 1162 else 1163 return SCI_FAILURE_UNSUPPORTED_PROTOCOL; 1164 1165 sci_dev->connection_rate = scic_sds_port_get_max_allowed_speed(sci_port); 1166 1167 /* / @todo Should I assign the port width by reading all of the phys on the port? */ 1168 sci_dev->device_port_width = 1; 1169 1170 return SCI_SUCCESS; 1171 } 1172 1173 /** 1174 * scic_remote_device_ea_construct() - construct expander attached device 1175 * 1176 * Remote node context(s) is/are a global resource allocated by this 1177 * routine, freed by scic_remote_device_destruct(). 1178 * 1179 * Returns: 1180 * SCI_FAILURE_DEVICE_EXISTS - device has already been constructed. 1181 * SCI_FAILURE_UNSUPPORTED_PROTOCOL - e.g. sas device attached to 1182 * sata-only controller instance. 1183 * SCI_FAILURE_INSUFFICIENT_RESOURCES - remote node contexts exhausted. 1184 */ 1185 static enum sci_status scic_remote_device_ea_construct(struct scic_sds_port *sci_port, 1186 struct scic_sds_remote_device *sci_dev) 1187 { 1188 struct domain_device *dev = sci_dev_to_domain(sci_dev); 1189 enum sci_status status; 1190 1191 scic_remote_device_construct(sci_port, sci_dev); 1192 1193 status = scic_sds_controller_allocate_remote_node_context(sci_port->owning_controller, 1194 sci_dev, 1195 &sci_dev->rnc.remote_node_index); 1196 if (status != SCI_SUCCESS) 1197 return status; 1198 1199 if (dev->dev_type == SAS_END_DEV || dev->dev_type == SATA_DEV || 1200 (dev->tproto & SAS_PROTOCOL_STP) || dev_is_expander(dev)) 1201 /* pass */; 1202 else 1203 return SCI_FAILURE_UNSUPPORTED_PROTOCOL; 1204 1205 /* 1206 * For SAS-2 the physical link rate is actually a logical link 1207 * rate that incorporates multiplexing. The SCU doesn't 1208 * incorporate multiplexing and for the purposes of the 1209 * connection the logical link rate is that same as the 1210 * physical. Furthermore, the SAS-2 and SAS-1.1 fields overlay 1211 * one another, so this code works for both situations. */ 1212 sci_dev->connection_rate = min_t(u16, scic_sds_port_get_max_allowed_speed(sci_port), 1213 dev->linkrate); 1214 1215 /* / @todo Should I assign the port width by reading all of the phys on the port? */ 1216 sci_dev->device_port_width = 1; 1217 1218 return SCI_SUCCESS; 1219 } 1220 1221 /** 1222 * scic_remote_device_start() - This method will start the supplied remote 1223 * device. This method enables normal IO requests to flow through to the 1224 * remote device. 1225 * @remote_device: This parameter specifies the device to be started. 1226 * @timeout: This parameter specifies the number of milliseconds in which the 1227 * start operation should complete. 1228 * 1229 * An indication of whether the device was successfully started. SCI_SUCCESS 1230 * This value is returned if the device was successfully started. 1231 * SCI_FAILURE_INVALID_PHY This value is returned if the user attempts to start 1232 * the device when there have been no phys added to it. 1233 */ 1234 static enum sci_status scic_remote_device_start(struct scic_sds_remote_device *sci_dev, 1235 u32 timeout) 1236 { 1237 struct sci_base_state_machine *sm = &sci_dev->state_machine; 1238 enum scic_sds_remote_device_states state = sm->current_state_id; 1239 enum sci_status status; 1240 1241 if (state != SCI_BASE_REMOTE_DEVICE_STATE_STOPPED) { 1242 dev_warn(scirdev_to_dev(sci_dev), "%s: in wrong state: %d\n", 1243 __func__, state); 1244 return SCI_FAILURE_INVALID_STATE; 1245 } 1246 1247 status = scic_sds_remote_node_context_resume(&sci_dev->rnc, 1248 remote_device_resume_done, 1249 sci_dev); 1250 if (status != SCI_SUCCESS) 1251 return status; 1252 1253 sci_base_state_machine_change_state(sm, SCI_BASE_REMOTE_DEVICE_STATE_STARTING); 1254 1255 return SCI_SUCCESS; 1256 } 1257 1258 static enum sci_status isci_remote_device_construct(struct isci_port *iport, 1259 struct isci_remote_device *idev) 1260 { 1261 struct scic_sds_port *sci_port = &iport->sci; 1262 struct isci_host *ihost = iport->isci_host; 1263 struct domain_device *dev = idev->domain_dev; 1264 enum sci_status status; 1265 1266 if (dev->parent && dev_is_expander(dev->parent)) 1267 status = scic_remote_device_ea_construct(sci_port, &idev->sci); 1268 else 1269 status = scic_remote_device_da_construct(sci_port, &idev->sci); 1270 1271 if (status != SCI_SUCCESS) { 1272 dev_dbg(&ihost->pdev->dev, "%s: construct failed: %d\n", 1273 __func__, status); 1274 1275 return status; 1276 } 1277 1278 /* start the device. */ 1279 status = scic_remote_device_start(&idev->sci, ISCI_REMOTE_DEVICE_START_TIMEOUT); 1280 1281 if (status != SCI_SUCCESS) 1282 dev_warn(&ihost->pdev->dev, "remote device start failed: %d\n", 1283 status); 1284 1285 return status; 1286 } 1287 1288 void isci_remote_device_nuke_requests(struct isci_host *ihost, struct isci_remote_device *idev) 1289 { 1290 DECLARE_COMPLETION_ONSTACK(aborted_task_completion); 1291 1292 dev_dbg(&ihost->pdev->dev, 1293 "%s: idev = %p\n", __func__, idev); 1294 1295 /* Cleanup all requests pending for this device. */ 1296 isci_terminate_pending_requests(ihost, idev, terminating); 1297 1298 dev_dbg(&ihost->pdev->dev, 1299 "%s: idev = %p, done\n", __func__, idev); 1300 } 1301 1302 /** 1303 * This function builds the isci_remote_device when a libsas dev_found message 1304 * is received. 1305 * @isci_host: This parameter specifies the isci host object. 1306 * @port: This parameter specifies the isci_port conected to this device. 1307 * 1308 * pointer to new isci_remote_device. 1309 */ 1310 static struct isci_remote_device * 1311 isci_remote_device_alloc(struct isci_host *ihost, struct isci_port *iport) 1312 { 1313 struct isci_remote_device *idev; 1314 int i; 1315 1316 for (i = 0; i < SCI_MAX_REMOTE_DEVICES; i++) { 1317 idev = &ihost->devices[i]; 1318 if (!test_and_set_bit(IDEV_ALLOCATED, &idev->flags)) 1319 break; 1320 } 1321 1322 if (i >= SCI_MAX_REMOTE_DEVICES) { 1323 dev_warn(&ihost->pdev->dev, "%s: failed\n", __func__); 1324 return NULL; 1325 } 1326 1327 if (WARN_ONCE(!list_empty(&idev->reqs_in_process), "found requests in process\n")) 1328 return NULL; 1329 1330 if (WARN_ONCE(!list_empty(&idev->node), "found non-idle remote device\n")) 1331 return NULL; 1332 1333 isci_remote_device_change_state(idev, isci_freed); 1334 1335 return idev; 1336 } 1337 1338 /** 1339 * isci_remote_device_stop() - This function is called internally to stop the 1340 * remote device. 1341 * @isci_host: This parameter specifies the isci host object. 1342 * @isci_device: This parameter specifies the remote device. 1343 * 1344 * The status of the scic request to stop. 1345 */ 1346 enum sci_status isci_remote_device_stop(struct isci_host *ihost, struct isci_remote_device *idev) 1347 { 1348 enum sci_status status; 1349 unsigned long flags; 1350 1351 dev_dbg(&ihost->pdev->dev, 1352 "%s: isci_device = %p\n", __func__, idev); 1353 1354 isci_remote_device_change_state(idev, isci_stopping); 1355 1356 /* Kill all outstanding requests. */ 1357 isci_remote_device_nuke_requests(ihost, idev); 1358 1359 set_bit(IDEV_STOP_PENDING, &idev->flags); 1360 1361 spin_lock_irqsave(&ihost->scic_lock, flags); 1362 status = scic_remote_device_stop(&idev->sci, 50); 1363 spin_unlock_irqrestore(&ihost->scic_lock, flags); 1364 1365 /* Wait for the stop complete callback. */ 1366 if (status == SCI_SUCCESS) { 1367 wait_for_device_stop(ihost, idev); 1368 clear_bit(IDEV_ALLOCATED, &idev->flags); 1369 } 1370 1371 dev_dbg(&ihost->pdev->dev, 1372 "%s: idev = %p - after completion wait\n", 1373 __func__, idev); 1374 1375 return status; 1376 } 1377 1378 /** 1379 * isci_remote_device_gone() - This function is called by libsas when a domain 1380 * device is removed. 1381 * @domain_device: This parameter specifies the libsas domain device. 1382 * 1383 */ 1384 void isci_remote_device_gone(struct domain_device *dev) 1385 { 1386 struct isci_host *ihost = dev_to_ihost(dev); 1387 struct isci_remote_device *idev = dev->lldd_dev; 1388 1389 dev_dbg(&ihost->pdev->dev, 1390 "%s: domain_device = %p, isci_device = %p, isci_port = %p\n", 1391 __func__, dev, idev, idev->isci_port); 1392 1393 isci_remote_device_stop(ihost, idev); 1394 } 1395 1396 1397 /** 1398 * isci_remote_device_found() - This function is called by libsas when a remote 1399 * device is discovered. A remote device object is created and started. the 1400 * function then sleeps until the sci core device started message is 1401 * received. 1402 * @domain_device: This parameter specifies the libsas domain device. 1403 * 1404 * status, zero indicates success. 1405 */ 1406 int isci_remote_device_found(struct domain_device *domain_dev) 1407 { 1408 struct isci_host *isci_host = dev_to_ihost(domain_dev); 1409 struct isci_port *isci_port; 1410 struct isci_phy *isci_phy; 1411 struct asd_sas_port *sas_port; 1412 struct asd_sas_phy *sas_phy; 1413 struct isci_remote_device *isci_device; 1414 enum sci_status status; 1415 1416 dev_dbg(&isci_host->pdev->dev, 1417 "%s: domain_device = %p\n", __func__, domain_dev); 1418 1419 wait_for_start(isci_host); 1420 1421 sas_port = domain_dev->port; 1422 sas_phy = list_first_entry(&sas_port->phy_list, struct asd_sas_phy, 1423 port_phy_el); 1424 isci_phy = to_isci_phy(sas_phy); 1425 isci_port = isci_phy->isci_port; 1426 1427 /* we are being called for a device on this port, 1428 * so it has to come up eventually 1429 */ 1430 wait_for_completion(&isci_port->start_complete); 1431 1432 if ((isci_stopping == isci_port_get_state(isci_port)) || 1433 (isci_stopped == isci_port_get_state(isci_port))) 1434 return -ENODEV; 1435 1436 isci_device = isci_remote_device_alloc(isci_host, isci_port); 1437 if (!isci_device) 1438 return -ENODEV; 1439 1440 INIT_LIST_HEAD(&isci_device->node); 1441 domain_dev->lldd_dev = isci_device; 1442 isci_device->domain_dev = domain_dev; 1443 isci_device->isci_port = isci_port; 1444 isci_remote_device_change_state(isci_device, isci_starting); 1445 1446 1447 spin_lock_irq(&isci_host->scic_lock); 1448 list_add_tail(&isci_device->node, &isci_port->remote_dev_list); 1449 1450 set_bit(IDEV_START_PENDING, &isci_device->flags); 1451 status = isci_remote_device_construct(isci_port, isci_device); 1452 spin_unlock_irq(&isci_host->scic_lock); 1453 1454 dev_dbg(&isci_host->pdev->dev, 1455 "%s: isci_device = %p\n", 1456 __func__, isci_device); 1457 1458 if (status != SCI_SUCCESS) { 1459 1460 spin_lock_irq(&isci_host->scic_lock); 1461 isci_remote_device_deconstruct( 1462 isci_host, 1463 isci_device 1464 ); 1465 spin_unlock_irq(&isci_host->scic_lock); 1466 return -ENODEV; 1467 } 1468 1469 /* wait for the device ready callback. */ 1470 wait_for_device_start(isci_host, isci_device); 1471 1472 return 0; 1473 } 1474 /** 1475 * isci_device_is_reset_pending() - This function will check if there is any 1476 * pending reset condition on the device. 1477 * @request: This parameter is the isci_device object. 1478 * 1479 * true if there is a reset pending for the device. 1480 */ 1481 bool isci_device_is_reset_pending( 1482 struct isci_host *isci_host, 1483 struct isci_remote_device *isci_device) 1484 { 1485 struct isci_request *isci_request; 1486 struct isci_request *tmp_req; 1487 bool reset_is_pending = false; 1488 unsigned long flags; 1489 1490 dev_dbg(&isci_host->pdev->dev, 1491 "%s: isci_device = %p\n", __func__, isci_device); 1492 1493 spin_lock_irqsave(&isci_host->scic_lock, flags); 1494 1495 /* Check for reset on all pending requests. */ 1496 list_for_each_entry_safe(isci_request, tmp_req, 1497 &isci_device->reqs_in_process, dev_node) { 1498 dev_dbg(&isci_host->pdev->dev, 1499 "%s: isci_device = %p request = %p\n", 1500 __func__, isci_device, isci_request); 1501 1502 if (isci_request->ttype == io_task) { 1503 struct sas_task *task = isci_request_access_task( 1504 isci_request); 1505 1506 spin_lock(&task->task_state_lock); 1507 if (task->task_state_flags & SAS_TASK_NEED_DEV_RESET) 1508 reset_is_pending = true; 1509 spin_unlock(&task->task_state_lock); 1510 } 1511 } 1512 1513 spin_unlock_irqrestore(&isci_host->scic_lock, flags); 1514 1515 dev_dbg(&isci_host->pdev->dev, 1516 "%s: isci_device = %p reset_is_pending = %d\n", 1517 __func__, isci_device, reset_is_pending); 1518 1519 return reset_is_pending; 1520 } 1521 1522 /** 1523 * isci_device_clear_reset_pending() - This function will clear if any pending 1524 * reset condition flags on the device. 1525 * @request: This parameter is the isci_device object. 1526 * 1527 * true if there is a reset pending for the device. 1528 */ 1529 void isci_device_clear_reset_pending(struct isci_host *ihost, struct isci_remote_device *idev) 1530 { 1531 struct isci_request *isci_request; 1532 struct isci_request *tmp_req; 1533 unsigned long flags = 0; 1534 1535 dev_dbg(&ihost->pdev->dev, "%s: idev=%p, ihost=%p\n", 1536 __func__, idev, ihost); 1537 1538 spin_lock_irqsave(&ihost->scic_lock, flags); 1539 1540 /* Clear reset pending on all pending requests. */ 1541 list_for_each_entry_safe(isci_request, tmp_req, 1542 &idev->reqs_in_process, dev_node) { 1543 dev_dbg(&ihost->pdev->dev, "%s: idev = %p request = %p\n", 1544 __func__, idev, isci_request); 1545 1546 if (isci_request->ttype == io_task) { 1547 1548 unsigned long flags2; 1549 struct sas_task *task = isci_request_access_task( 1550 isci_request); 1551 1552 spin_lock_irqsave(&task->task_state_lock, flags2); 1553 task->task_state_flags &= ~SAS_TASK_NEED_DEV_RESET; 1554 spin_unlock_irqrestore(&task->task_state_lock, flags2); 1555 } 1556 } 1557 spin_unlock_irqrestore(&ihost->scic_lock, flags); 1558 } 1559