1 /* 2 * CXL Flash Device Driver 3 * 4 * Written by: Manoj N. Kumar <manoj@linux.vnet.ibm.com>, IBM Corporation 5 * Matthew R. Ochs <mrochs@linux.vnet.ibm.com>, IBM Corporation 6 * 7 * Copyright (C) 2015 IBM Corporation 8 * 9 * This program is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU General Public License 11 * as published by the Free Software Foundation; either version 12 * 2 of the License, or (at your option) any later version. 13 */ 14 15 #include <linux/delay.h> 16 #include <linux/list.h> 17 #include <linux/module.h> 18 #include <linux/pci.h> 19 20 #include <asm/unaligned.h> 21 22 #include <misc/cxl.h> 23 24 #include <scsi/scsi_cmnd.h> 25 #include <scsi/scsi_host.h> 26 #include <uapi/scsi/cxlflash_ioctl.h> 27 28 #include "main.h" 29 #include "sislite.h" 30 #include "common.h" 31 32 MODULE_DESCRIPTION(CXLFLASH_ADAPTER_NAME); 33 MODULE_AUTHOR("Manoj N. Kumar <manoj@linux.vnet.ibm.com>"); 34 MODULE_AUTHOR("Matthew R. Ochs <mrochs@linux.vnet.ibm.com>"); 35 MODULE_LICENSE("GPL"); 36 37 /** 38 * process_cmd_err() - command error handler 39 * @cmd: AFU command that experienced the error. 40 * @scp: SCSI command associated with the AFU command in error. 41 * 42 * Translates error bits from AFU command to SCSI command results. 43 */ 44 static void process_cmd_err(struct afu_cmd *cmd, struct scsi_cmnd *scp) 45 { 46 struct sisl_ioarcb *ioarcb; 47 struct sisl_ioasa *ioasa; 48 u32 resid; 49 50 if (unlikely(!cmd)) 51 return; 52 53 ioarcb = &(cmd->rcb); 54 ioasa = &(cmd->sa); 55 56 if (ioasa->rc.flags & SISL_RC_FLAGS_UNDERRUN) { 57 resid = ioasa->resid; 58 scsi_set_resid(scp, resid); 59 pr_debug("%s: cmd underrun cmd = %p scp = %p, resid = %d\n", 60 __func__, cmd, scp, resid); 61 } 62 63 if (ioasa->rc.flags & SISL_RC_FLAGS_OVERRUN) { 64 pr_debug("%s: cmd underrun cmd = %p scp = %p\n", 65 __func__, cmd, scp); 66 scp->result = (DID_ERROR << 16); 67 } 68 69 pr_debug("%s: cmd failed afu_rc=%d scsi_rc=%d fc_rc=%d " 70 "afu_extra=0x%X, scsi_extra=0x%X, fc_extra=0x%X\n", 71 __func__, ioasa->rc.afu_rc, ioasa->rc.scsi_rc, 72 ioasa->rc.fc_rc, ioasa->afu_extra, ioasa->scsi_extra, 73 ioasa->fc_extra); 74 75 if (ioasa->rc.scsi_rc) { 76 /* We have a SCSI status */ 77 if (ioasa->rc.flags & SISL_RC_FLAGS_SENSE_VALID) { 78 memcpy(scp->sense_buffer, ioasa->sense_data, 79 SISL_SENSE_DATA_LEN); 80 scp->result = ioasa->rc.scsi_rc; 81 } else 82 scp->result = ioasa->rc.scsi_rc | (DID_ERROR << 16); 83 } 84 85 /* 86 * We encountered an error. Set scp->result based on nature 87 * of error. 88 */ 89 if (ioasa->rc.fc_rc) { 90 /* We have an FC status */ 91 switch (ioasa->rc.fc_rc) { 92 case SISL_FC_RC_LINKDOWN: 93 scp->result = (DID_REQUEUE << 16); 94 break; 95 case SISL_FC_RC_RESID: 96 /* This indicates an FCP resid underrun */ 97 if (!(ioasa->rc.flags & SISL_RC_FLAGS_OVERRUN)) { 98 /* If the SISL_RC_FLAGS_OVERRUN flag was set, 99 * then we will handle this error else where. 100 * If not then we must handle it here. 101 * This is probably an AFU bug. 102 */ 103 scp->result = (DID_ERROR << 16); 104 } 105 break; 106 case SISL_FC_RC_RESIDERR: 107 /* Resid mismatch between adapter and device */ 108 case SISL_FC_RC_TGTABORT: 109 case SISL_FC_RC_ABORTOK: 110 case SISL_FC_RC_ABORTFAIL: 111 case SISL_FC_RC_NOLOGI: 112 case SISL_FC_RC_ABORTPEND: 113 case SISL_FC_RC_WRABORTPEND: 114 case SISL_FC_RC_NOEXP: 115 case SISL_FC_RC_INUSE: 116 scp->result = (DID_ERROR << 16); 117 break; 118 } 119 } 120 121 if (ioasa->rc.afu_rc) { 122 /* We have an AFU error */ 123 switch (ioasa->rc.afu_rc) { 124 case SISL_AFU_RC_NO_CHANNELS: 125 scp->result = (DID_NO_CONNECT << 16); 126 break; 127 case SISL_AFU_RC_DATA_DMA_ERR: 128 switch (ioasa->afu_extra) { 129 case SISL_AFU_DMA_ERR_PAGE_IN: 130 /* Retry */ 131 scp->result = (DID_IMM_RETRY << 16); 132 break; 133 case SISL_AFU_DMA_ERR_INVALID_EA: 134 default: 135 scp->result = (DID_ERROR << 16); 136 } 137 break; 138 case SISL_AFU_RC_OUT_OF_DATA_BUFS: 139 /* Retry */ 140 scp->result = (DID_ALLOC_FAILURE << 16); 141 break; 142 default: 143 scp->result = (DID_ERROR << 16); 144 } 145 } 146 } 147 148 /** 149 * cmd_complete() - command completion handler 150 * @cmd: AFU command that has completed. 151 * 152 * Prepares and submits command that has either completed or timed out to 153 * the SCSI stack. Checks AFU command back into command pool for non-internal 154 * (cmd->scp populated) commands. 155 */ 156 static void cmd_complete(struct afu_cmd *cmd) 157 { 158 struct scsi_cmnd *scp; 159 ulong lock_flags; 160 struct afu *afu = cmd->parent; 161 struct cxlflash_cfg *cfg = afu->parent; 162 bool cmd_is_tmf; 163 164 if (cmd->scp) { 165 scp = cmd->scp; 166 if (unlikely(cmd->sa.ioasc)) 167 process_cmd_err(cmd, scp); 168 else 169 scp->result = (DID_OK << 16); 170 171 cmd_is_tmf = cmd->cmd_tmf; 172 173 pr_debug_ratelimited("%s: calling scsi_done scp=%p result=%X " 174 "ioasc=%d\n", __func__, scp, scp->result, 175 cmd->sa.ioasc); 176 177 scsi_dma_unmap(scp); 178 scp->scsi_done(scp); 179 180 if (cmd_is_tmf) { 181 spin_lock_irqsave(&cfg->tmf_slock, lock_flags); 182 cfg->tmf_active = false; 183 wake_up_all_locked(&cfg->tmf_waitq); 184 spin_unlock_irqrestore(&cfg->tmf_slock, lock_flags); 185 } 186 } else 187 complete(&cmd->cevent); 188 } 189 190 /** 191 * context_reset_ioarrin() - reset command owner context via IOARRIN register 192 * @cmd: AFU command that timed out. 193 */ 194 static void context_reset_ioarrin(struct afu_cmd *cmd) 195 { 196 int nretry = 0; 197 u64 rrin = 0x1; 198 struct afu *afu = cmd->parent; 199 struct cxlflash_cfg *cfg = afu->parent; 200 struct device *dev = &cfg->dev->dev; 201 202 pr_debug("%s: cmd=%p\n", __func__, cmd); 203 204 writeq_be(rrin, &afu->host_map->ioarrin); 205 do { 206 rrin = readq_be(&afu->host_map->ioarrin); 207 if (rrin != 0x1) 208 break; 209 /* Double delay each time */ 210 udelay(1 << nretry); 211 } while (nretry++ < MC_ROOM_RETRY_CNT); 212 213 dev_dbg(dev, "%s: returning rrin=0x%016llX nretry=%d\n", 214 __func__, rrin, nretry); 215 } 216 217 /** 218 * send_cmd_ioarrin() - sends an AFU command via IOARRIN register 219 * @afu: AFU associated with the host. 220 * @cmd: AFU command to send. 221 * 222 * Return: 223 * 0 on success, SCSI_MLQUEUE_HOST_BUSY on failure 224 */ 225 static int send_cmd_ioarrin(struct afu *afu, struct afu_cmd *cmd) 226 { 227 struct cxlflash_cfg *cfg = afu->parent; 228 struct device *dev = &cfg->dev->dev; 229 int rc = 0; 230 s64 room; 231 ulong lock_flags; 232 233 /* 234 * To avoid the performance penalty of MMIO, spread the update of 235 * 'room' over multiple commands. 236 */ 237 spin_lock_irqsave(&afu->rrin_slock, lock_flags); 238 if (--afu->room < 0) { 239 room = readq_be(&afu->host_map->cmd_room); 240 if (room <= 0) { 241 dev_dbg_ratelimited(dev, "%s: no cmd_room to send " 242 "0x%02X, room=0x%016llX\n", 243 __func__, cmd->rcb.cdb[0], room); 244 afu->room = 0; 245 rc = SCSI_MLQUEUE_HOST_BUSY; 246 goto out; 247 } 248 afu->room = room - 1; 249 } 250 251 writeq_be((u64)&cmd->rcb, &afu->host_map->ioarrin); 252 out: 253 spin_unlock_irqrestore(&afu->rrin_slock, lock_flags); 254 pr_devel("%s: cmd=%p len=%d ea=%p rc=%d\n", __func__, cmd, 255 cmd->rcb.data_len, (void *)cmd->rcb.data_ea, rc); 256 return rc; 257 } 258 259 /** 260 * wait_resp() - polls for a response or timeout to a sent AFU command 261 * @afu: AFU associated with the host. 262 * @cmd: AFU command that was sent. 263 * 264 * Return: 265 * 0 on success, -1 on timeout/error 266 */ 267 static int wait_resp(struct afu *afu, struct afu_cmd *cmd) 268 { 269 int rc = 0; 270 ulong timeout = msecs_to_jiffies(cmd->rcb.timeout * 2 * 1000); 271 272 timeout = wait_for_completion_timeout(&cmd->cevent, timeout); 273 if (!timeout) { 274 afu->context_reset(cmd); 275 rc = -1; 276 } 277 278 if (unlikely(cmd->sa.ioasc != 0)) { 279 pr_err("%s: CMD 0x%X failed, IOASC: flags 0x%X, afu_rc 0x%X, " 280 "scsi_rc 0x%X, fc_rc 0x%X\n", __func__, cmd->rcb.cdb[0], 281 cmd->sa.rc.flags, cmd->sa.rc.afu_rc, cmd->sa.rc.scsi_rc, 282 cmd->sa.rc.fc_rc); 283 rc = -1; 284 } 285 286 return rc; 287 } 288 289 /** 290 * send_tmf() - sends a Task Management Function (TMF) 291 * @afu: AFU to checkout from. 292 * @scp: SCSI command from stack. 293 * @tmfcmd: TMF command to send. 294 * 295 * Return: 296 * 0 on success, SCSI_MLQUEUE_HOST_BUSY on failure 297 */ 298 static int send_tmf(struct afu *afu, struct scsi_cmnd *scp, u64 tmfcmd) 299 { 300 u32 port_sel = scp->device->channel + 1; 301 struct Scsi_Host *host = scp->device->host; 302 struct cxlflash_cfg *cfg = (struct cxlflash_cfg *)host->hostdata; 303 struct afu_cmd *cmd = sc_to_afucz(scp); 304 struct device *dev = &cfg->dev->dev; 305 ulong lock_flags; 306 int rc = 0; 307 ulong to; 308 309 /* When Task Management Function is active do not send another */ 310 spin_lock_irqsave(&cfg->tmf_slock, lock_flags); 311 if (cfg->tmf_active) 312 wait_event_interruptible_lock_irq(cfg->tmf_waitq, 313 !cfg->tmf_active, 314 cfg->tmf_slock); 315 cfg->tmf_active = true; 316 spin_unlock_irqrestore(&cfg->tmf_slock, lock_flags); 317 318 cmd->scp = scp; 319 cmd->parent = afu; 320 cmd->cmd_tmf = true; 321 322 cmd->rcb.ctx_id = afu->ctx_hndl; 323 cmd->rcb.msi = SISL_MSI_RRQ_UPDATED; 324 cmd->rcb.port_sel = port_sel; 325 cmd->rcb.lun_id = lun_to_lunid(scp->device->lun); 326 cmd->rcb.req_flags = (SISL_REQ_FLAGS_PORT_LUN_ID | 327 SISL_REQ_FLAGS_SUP_UNDERRUN | 328 SISL_REQ_FLAGS_TMF_CMD); 329 memcpy(cmd->rcb.cdb, &tmfcmd, sizeof(tmfcmd)); 330 331 rc = afu->send_cmd(afu, cmd); 332 if (unlikely(rc)) { 333 spin_lock_irqsave(&cfg->tmf_slock, lock_flags); 334 cfg->tmf_active = false; 335 spin_unlock_irqrestore(&cfg->tmf_slock, lock_flags); 336 goto out; 337 } 338 339 spin_lock_irqsave(&cfg->tmf_slock, lock_flags); 340 to = msecs_to_jiffies(5000); 341 to = wait_event_interruptible_lock_irq_timeout(cfg->tmf_waitq, 342 !cfg->tmf_active, 343 cfg->tmf_slock, 344 to); 345 if (!to) { 346 cfg->tmf_active = false; 347 dev_err(dev, "%s: TMF timed out!\n", __func__); 348 rc = -1; 349 } 350 spin_unlock_irqrestore(&cfg->tmf_slock, lock_flags); 351 out: 352 return rc; 353 } 354 355 static void afu_unmap(struct kref *ref) 356 { 357 struct afu *afu = container_of(ref, struct afu, mapcount); 358 359 if (likely(afu->afu_map)) { 360 cxl_psa_unmap((void __iomem *)afu->afu_map); 361 afu->afu_map = NULL; 362 } 363 } 364 365 /** 366 * cxlflash_driver_info() - information handler for this host driver 367 * @host: SCSI host associated with device. 368 * 369 * Return: A string describing the device. 370 */ 371 static const char *cxlflash_driver_info(struct Scsi_Host *host) 372 { 373 return CXLFLASH_ADAPTER_NAME; 374 } 375 376 /** 377 * cxlflash_queuecommand() - sends a mid-layer request 378 * @host: SCSI host associated with device. 379 * @scp: SCSI command to send. 380 * 381 * Return: 0 on success, SCSI_MLQUEUE_HOST_BUSY on failure 382 */ 383 static int cxlflash_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scp) 384 { 385 struct cxlflash_cfg *cfg = (struct cxlflash_cfg *)host->hostdata; 386 struct afu *afu = cfg->afu; 387 struct device *dev = &cfg->dev->dev; 388 struct afu_cmd *cmd = sc_to_afucz(scp); 389 struct scatterlist *sg = scsi_sglist(scp); 390 u32 port_sel = scp->device->channel + 1; 391 u16 req_flags = SISL_REQ_FLAGS_SUP_UNDERRUN; 392 ulong lock_flags; 393 int nseg = 0; 394 int rc = 0; 395 int kref_got = 0; 396 397 dev_dbg_ratelimited(dev, "%s: (scp=%p) %d/%d/%d/%llu " 398 "cdb=(%08X-%08X-%08X-%08X)\n", 399 __func__, scp, host->host_no, scp->device->channel, 400 scp->device->id, scp->device->lun, 401 get_unaligned_be32(&((u32 *)scp->cmnd)[0]), 402 get_unaligned_be32(&((u32 *)scp->cmnd)[1]), 403 get_unaligned_be32(&((u32 *)scp->cmnd)[2]), 404 get_unaligned_be32(&((u32 *)scp->cmnd)[3])); 405 406 /* 407 * If a Task Management Function is active, wait for it to complete 408 * before continuing with regular commands. 409 */ 410 spin_lock_irqsave(&cfg->tmf_slock, lock_flags); 411 if (cfg->tmf_active) { 412 spin_unlock_irqrestore(&cfg->tmf_slock, lock_flags); 413 rc = SCSI_MLQUEUE_HOST_BUSY; 414 goto out; 415 } 416 spin_unlock_irqrestore(&cfg->tmf_slock, lock_flags); 417 418 switch (cfg->state) { 419 case STATE_RESET: 420 dev_dbg_ratelimited(dev, "%s: device is in reset!\n", __func__); 421 rc = SCSI_MLQUEUE_HOST_BUSY; 422 goto out; 423 case STATE_FAILTERM: 424 dev_dbg_ratelimited(dev, "%s: device has failed!\n", __func__); 425 scp->result = (DID_NO_CONNECT << 16); 426 scp->scsi_done(scp); 427 rc = 0; 428 goto out; 429 default: 430 break; 431 } 432 433 kref_get(&cfg->afu->mapcount); 434 kref_got = 1; 435 436 if (likely(sg)) { 437 nseg = scsi_dma_map(scp); 438 if (unlikely(nseg < 0)) { 439 dev_err(dev, "%s: Fail DMA map!\n", __func__); 440 rc = SCSI_MLQUEUE_HOST_BUSY; 441 goto out; 442 } 443 444 cmd->rcb.data_len = sg_dma_len(sg); 445 cmd->rcb.data_ea = sg_dma_address(sg); 446 } 447 448 cmd->scp = scp; 449 cmd->parent = afu; 450 451 cmd->rcb.ctx_id = afu->ctx_hndl; 452 cmd->rcb.msi = SISL_MSI_RRQ_UPDATED; 453 cmd->rcb.port_sel = port_sel; 454 cmd->rcb.lun_id = lun_to_lunid(scp->device->lun); 455 456 if (scp->sc_data_direction == DMA_TO_DEVICE) 457 req_flags |= SISL_REQ_FLAGS_HOST_WRITE; 458 459 cmd->rcb.req_flags = req_flags; 460 memcpy(cmd->rcb.cdb, scp->cmnd, sizeof(cmd->rcb.cdb)); 461 462 rc = afu->send_cmd(afu, cmd); 463 if (unlikely(rc)) 464 scsi_dma_unmap(scp); 465 out: 466 if (kref_got) 467 kref_put(&afu->mapcount, afu_unmap); 468 pr_devel("%s: returning rc=%d\n", __func__, rc); 469 return rc; 470 } 471 472 /** 473 * cxlflash_wait_for_pci_err_recovery() - wait for error recovery during probe 474 * @cfg: Internal structure associated with the host. 475 */ 476 static void cxlflash_wait_for_pci_err_recovery(struct cxlflash_cfg *cfg) 477 { 478 struct pci_dev *pdev = cfg->dev; 479 480 if (pci_channel_offline(pdev)) 481 wait_event_timeout(cfg->reset_waitq, 482 !pci_channel_offline(pdev), 483 CXLFLASH_PCI_ERROR_RECOVERY_TIMEOUT); 484 } 485 486 /** 487 * free_mem() - free memory associated with the AFU 488 * @cfg: Internal structure associated with the host. 489 */ 490 static void free_mem(struct cxlflash_cfg *cfg) 491 { 492 struct afu *afu = cfg->afu; 493 494 if (cfg->afu) { 495 free_pages((ulong)afu, get_order(sizeof(struct afu))); 496 cfg->afu = NULL; 497 } 498 } 499 500 /** 501 * stop_afu() - stops the AFU command timers and unmaps the MMIO space 502 * @cfg: Internal structure associated with the host. 503 * 504 * Safe to call with AFU in a partially allocated/initialized state. 505 * 506 * Waits for any active internal AFU commands to timeout and then unmaps 507 * the MMIO space. 508 */ 509 static void stop_afu(struct cxlflash_cfg *cfg) 510 { 511 struct afu *afu = cfg->afu; 512 513 if (likely(afu)) { 514 while (atomic_read(&afu->cmds_active)) 515 ssleep(1); 516 if (likely(afu->afu_map)) { 517 cxl_psa_unmap((void __iomem *)afu->afu_map); 518 afu->afu_map = NULL; 519 } 520 kref_put(&afu->mapcount, afu_unmap); 521 } 522 } 523 524 /** 525 * term_intr() - disables all AFU interrupts 526 * @cfg: Internal structure associated with the host. 527 * @level: Depth of allocation, where to begin waterfall tear down. 528 * 529 * Safe to call with AFU/MC in partially allocated/initialized state. 530 */ 531 static void term_intr(struct cxlflash_cfg *cfg, enum undo_level level) 532 { 533 struct afu *afu = cfg->afu; 534 struct device *dev = &cfg->dev->dev; 535 536 if (!afu || !cfg->mcctx) { 537 dev_err(dev, "%s: returning with NULL afu or MC\n", __func__); 538 return; 539 } 540 541 switch (level) { 542 case UNMAP_THREE: 543 cxl_unmap_afu_irq(cfg->mcctx, 3, afu); 544 case UNMAP_TWO: 545 cxl_unmap_afu_irq(cfg->mcctx, 2, afu); 546 case UNMAP_ONE: 547 cxl_unmap_afu_irq(cfg->mcctx, 1, afu); 548 case FREE_IRQ: 549 cxl_free_afu_irqs(cfg->mcctx); 550 /* fall through */ 551 case UNDO_NOOP: 552 /* No action required */ 553 break; 554 } 555 } 556 557 /** 558 * term_mc() - terminates the master context 559 * @cfg: Internal structure associated with the host. 560 * @level: Depth of allocation, where to begin waterfall tear down. 561 * 562 * Safe to call with AFU/MC in partially allocated/initialized state. 563 */ 564 static void term_mc(struct cxlflash_cfg *cfg) 565 { 566 int rc = 0; 567 struct afu *afu = cfg->afu; 568 struct device *dev = &cfg->dev->dev; 569 570 if (!afu || !cfg->mcctx) { 571 dev_err(dev, "%s: returning with NULL afu or MC\n", __func__); 572 return; 573 } 574 575 rc = cxl_stop_context(cfg->mcctx); 576 WARN_ON(rc); 577 cfg->mcctx = NULL; 578 } 579 580 /** 581 * term_afu() - terminates the AFU 582 * @cfg: Internal structure associated with the host. 583 * 584 * Safe to call with AFU/MC in partially allocated/initialized state. 585 */ 586 static void term_afu(struct cxlflash_cfg *cfg) 587 { 588 /* 589 * Tear down is carefully orchestrated to ensure 590 * no interrupts can come in when the problem state 591 * area is unmapped. 592 * 593 * 1) Disable all AFU interrupts 594 * 2) Unmap the problem state area 595 * 3) Stop the master context 596 */ 597 term_intr(cfg, UNMAP_THREE); 598 if (cfg->afu) 599 stop_afu(cfg); 600 601 term_mc(cfg); 602 603 pr_debug("%s: returning\n", __func__); 604 } 605 606 /** 607 * notify_shutdown() - notifies device of pending shutdown 608 * @cfg: Internal structure associated with the host. 609 * @wait: Whether to wait for shutdown processing to complete. 610 * 611 * This function will notify the AFU that the adapter is being shutdown 612 * and will wait for shutdown processing to complete if wait is true. 613 * This notification should flush pending I/Os to the device and halt 614 * further I/Os until the next AFU reset is issued and device restarted. 615 */ 616 static void notify_shutdown(struct cxlflash_cfg *cfg, bool wait) 617 { 618 struct afu *afu = cfg->afu; 619 struct device *dev = &cfg->dev->dev; 620 struct sisl_global_map __iomem *global; 621 struct dev_dependent_vals *ddv; 622 u64 reg, status; 623 int i, retry_cnt = 0; 624 625 ddv = (struct dev_dependent_vals *)cfg->dev_id->driver_data; 626 if (!(ddv->flags & CXLFLASH_NOTIFY_SHUTDOWN)) 627 return; 628 629 if (!afu || !afu->afu_map) { 630 dev_dbg(dev, "%s: The problem state area is not mapped\n", 631 __func__); 632 return; 633 } 634 635 global = &afu->afu_map->global; 636 637 /* Notify AFU */ 638 for (i = 0; i < NUM_FC_PORTS; i++) { 639 reg = readq_be(&global->fc_regs[i][FC_CONFIG2 / 8]); 640 reg |= SISL_FC_SHUTDOWN_NORMAL; 641 writeq_be(reg, &global->fc_regs[i][FC_CONFIG2 / 8]); 642 } 643 644 if (!wait) 645 return; 646 647 /* Wait up to 1.5 seconds for shutdown processing to complete */ 648 for (i = 0; i < NUM_FC_PORTS; i++) { 649 retry_cnt = 0; 650 while (true) { 651 status = readq_be(&global->fc_regs[i][FC_STATUS / 8]); 652 if (status & SISL_STATUS_SHUTDOWN_COMPLETE) 653 break; 654 if (++retry_cnt >= MC_RETRY_CNT) { 655 dev_dbg(dev, "%s: port %d shutdown processing " 656 "not yet completed\n", __func__, i); 657 break; 658 } 659 msleep(100 * retry_cnt); 660 } 661 } 662 } 663 664 /** 665 * cxlflash_remove() - PCI entry point to tear down host 666 * @pdev: PCI device associated with the host. 667 * 668 * Safe to use as a cleanup in partially allocated/initialized state. 669 */ 670 static void cxlflash_remove(struct pci_dev *pdev) 671 { 672 struct cxlflash_cfg *cfg = pci_get_drvdata(pdev); 673 ulong lock_flags; 674 675 if (!pci_is_enabled(pdev)) { 676 pr_debug("%s: Device is disabled\n", __func__); 677 return; 678 } 679 680 /* If a Task Management Function is active, wait for it to complete 681 * before continuing with remove. 682 */ 683 spin_lock_irqsave(&cfg->tmf_slock, lock_flags); 684 if (cfg->tmf_active) 685 wait_event_interruptible_lock_irq(cfg->tmf_waitq, 686 !cfg->tmf_active, 687 cfg->tmf_slock); 688 spin_unlock_irqrestore(&cfg->tmf_slock, lock_flags); 689 690 /* Notify AFU and wait for shutdown processing to complete */ 691 notify_shutdown(cfg, true); 692 693 cfg->state = STATE_FAILTERM; 694 cxlflash_stop_term_user_contexts(cfg); 695 696 switch (cfg->init_state) { 697 case INIT_STATE_SCSI: 698 cxlflash_term_local_luns(cfg); 699 scsi_remove_host(cfg->host); 700 /* fall through */ 701 case INIT_STATE_AFU: 702 cancel_work_sync(&cfg->work_q); 703 term_afu(cfg); 704 case INIT_STATE_PCI: 705 pci_disable_device(pdev); 706 case INIT_STATE_NONE: 707 free_mem(cfg); 708 scsi_host_put(cfg->host); 709 break; 710 } 711 712 pr_debug("%s: returning\n", __func__); 713 } 714 715 /** 716 * alloc_mem() - allocates the AFU and its command pool 717 * @cfg: Internal structure associated with the host. 718 * 719 * A partially allocated state remains on failure. 720 * 721 * Return: 722 * 0 on success 723 * -ENOMEM on failure to allocate memory 724 */ 725 static int alloc_mem(struct cxlflash_cfg *cfg) 726 { 727 int rc = 0; 728 struct device *dev = &cfg->dev->dev; 729 730 /* AFU is ~12k, i.e. only one 64k page or up to four 4k pages */ 731 cfg->afu = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, 732 get_order(sizeof(struct afu))); 733 if (unlikely(!cfg->afu)) { 734 dev_err(dev, "%s: cannot get %d free pages\n", 735 __func__, get_order(sizeof(struct afu))); 736 rc = -ENOMEM; 737 goto out; 738 } 739 cfg->afu->parent = cfg; 740 cfg->afu->afu_map = NULL; 741 out: 742 return rc; 743 } 744 745 /** 746 * init_pci() - initializes the host as a PCI device 747 * @cfg: Internal structure associated with the host. 748 * 749 * Return: 0 on success, -errno on failure 750 */ 751 static int init_pci(struct cxlflash_cfg *cfg) 752 { 753 struct pci_dev *pdev = cfg->dev; 754 int rc = 0; 755 756 rc = pci_enable_device(pdev); 757 if (rc || pci_channel_offline(pdev)) { 758 if (pci_channel_offline(pdev)) { 759 cxlflash_wait_for_pci_err_recovery(cfg); 760 rc = pci_enable_device(pdev); 761 } 762 763 if (rc) { 764 dev_err(&pdev->dev, "%s: Cannot enable adapter\n", 765 __func__); 766 cxlflash_wait_for_pci_err_recovery(cfg); 767 goto out; 768 } 769 } 770 771 out: 772 pr_debug("%s: returning rc=%d\n", __func__, rc); 773 return rc; 774 } 775 776 /** 777 * init_scsi() - adds the host to the SCSI stack and kicks off host scan 778 * @cfg: Internal structure associated with the host. 779 * 780 * Return: 0 on success, -errno on failure 781 */ 782 static int init_scsi(struct cxlflash_cfg *cfg) 783 { 784 struct pci_dev *pdev = cfg->dev; 785 int rc = 0; 786 787 rc = scsi_add_host(cfg->host, &pdev->dev); 788 if (rc) { 789 dev_err(&pdev->dev, "%s: scsi_add_host failed (rc=%d)\n", 790 __func__, rc); 791 goto out; 792 } 793 794 scsi_scan_host(cfg->host); 795 796 out: 797 pr_debug("%s: returning rc=%d\n", __func__, rc); 798 return rc; 799 } 800 801 /** 802 * set_port_online() - transitions the specified host FC port to online state 803 * @fc_regs: Top of MMIO region defined for specified port. 804 * 805 * The provided MMIO region must be mapped prior to call. Online state means 806 * that the FC link layer has synced, completed the handshaking process, and 807 * is ready for login to start. 808 */ 809 static void set_port_online(__be64 __iomem *fc_regs) 810 { 811 u64 cmdcfg; 812 813 cmdcfg = readq_be(&fc_regs[FC_MTIP_CMDCONFIG / 8]); 814 cmdcfg &= (~FC_MTIP_CMDCONFIG_OFFLINE); /* clear OFF_LINE */ 815 cmdcfg |= (FC_MTIP_CMDCONFIG_ONLINE); /* set ON_LINE */ 816 writeq_be(cmdcfg, &fc_regs[FC_MTIP_CMDCONFIG / 8]); 817 } 818 819 /** 820 * set_port_offline() - transitions the specified host FC port to offline state 821 * @fc_regs: Top of MMIO region defined for specified port. 822 * 823 * The provided MMIO region must be mapped prior to call. 824 */ 825 static void set_port_offline(__be64 __iomem *fc_regs) 826 { 827 u64 cmdcfg; 828 829 cmdcfg = readq_be(&fc_regs[FC_MTIP_CMDCONFIG / 8]); 830 cmdcfg &= (~FC_MTIP_CMDCONFIG_ONLINE); /* clear ON_LINE */ 831 cmdcfg |= (FC_MTIP_CMDCONFIG_OFFLINE); /* set OFF_LINE */ 832 writeq_be(cmdcfg, &fc_regs[FC_MTIP_CMDCONFIG / 8]); 833 } 834 835 /** 836 * wait_port_online() - waits for the specified host FC port come online 837 * @fc_regs: Top of MMIO region defined for specified port. 838 * @delay_us: Number of microseconds to delay between reading port status. 839 * @nretry: Number of cycles to retry reading port status. 840 * 841 * The provided MMIO region must be mapped prior to call. This will timeout 842 * when the cable is not plugged in. 843 * 844 * Return: 845 * TRUE (1) when the specified port is online 846 * FALSE (0) when the specified port fails to come online after timeout 847 * -EINVAL when @delay_us is less than 1000 848 */ 849 static int wait_port_online(__be64 __iomem *fc_regs, u32 delay_us, u32 nretry) 850 { 851 u64 status; 852 853 if (delay_us < 1000) { 854 pr_err("%s: invalid delay specified %d\n", __func__, delay_us); 855 return -EINVAL; 856 } 857 858 do { 859 msleep(delay_us / 1000); 860 status = readq_be(&fc_regs[FC_MTIP_STATUS / 8]); 861 if (status == U64_MAX) 862 nretry /= 2; 863 } while ((status & FC_MTIP_STATUS_MASK) != FC_MTIP_STATUS_ONLINE && 864 nretry--); 865 866 return ((status & FC_MTIP_STATUS_MASK) == FC_MTIP_STATUS_ONLINE); 867 } 868 869 /** 870 * wait_port_offline() - waits for the specified host FC port go offline 871 * @fc_regs: Top of MMIO region defined for specified port. 872 * @delay_us: Number of microseconds to delay between reading port status. 873 * @nretry: Number of cycles to retry reading port status. 874 * 875 * The provided MMIO region must be mapped prior to call. 876 * 877 * Return: 878 * TRUE (1) when the specified port is offline 879 * FALSE (0) when the specified port fails to go offline after timeout 880 * -EINVAL when @delay_us is less than 1000 881 */ 882 static int wait_port_offline(__be64 __iomem *fc_regs, u32 delay_us, u32 nretry) 883 { 884 u64 status; 885 886 if (delay_us < 1000) { 887 pr_err("%s: invalid delay specified %d\n", __func__, delay_us); 888 return -EINVAL; 889 } 890 891 do { 892 msleep(delay_us / 1000); 893 status = readq_be(&fc_regs[FC_MTIP_STATUS / 8]); 894 if (status == U64_MAX) 895 nretry /= 2; 896 } while ((status & FC_MTIP_STATUS_MASK) != FC_MTIP_STATUS_OFFLINE && 897 nretry--); 898 899 return ((status & FC_MTIP_STATUS_MASK) == FC_MTIP_STATUS_OFFLINE); 900 } 901 902 /** 903 * afu_set_wwpn() - configures the WWPN for the specified host FC port 904 * @afu: AFU associated with the host that owns the specified FC port. 905 * @port: Port number being configured. 906 * @fc_regs: Top of MMIO region defined for specified port. 907 * @wwpn: The world-wide-port-number previously discovered for port. 908 * 909 * The provided MMIO region must be mapped prior to call. As part of the 910 * sequence to configure the WWPN, the port is toggled offline and then back 911 * online. This toggling action can cause this routine to delay up to a few 912 * seconds. When configured to use the internal LUN feature of the AFU, a 913 * failure to come online is overridden. 914 */ 915 static void afu_set_wwpn(struct afu *afu, int port, __be64 __iomem *fc_regs, 916 u64 wwpn) 917 { 918 set_port_offline(fc_regs); 919 if (!wait_port_offline(fc_regs, FC_PORT_STATUS_RETRY_INTERVAL_US, 920 FC_PORT_STATUS_RETRY_CNT)) { 921 pr_debug("%s: wait on port %d to go offline timed out\n", 922 __func__, port); 923 } 924 925 writeq_be(wwpn, &fc_regs[FC_PNAME / 8]); 926 927 set_port_online(fc_regs); 928 if (!wait_port_online(fc_regs, FC_PORT_STATUS_RETRY_INTERVAL_US, 929 FC_PORT_STATUS_RETRY_CNT)) { 930 pr_debug("%s: wait on port %d to go online timed out\n", 931 __func__, port); 932 } 933 } 934 935 /** 936 * afu_link_reset() - resets the specified host FC port 937 * @afu: AFU associated with the host that owns the specified FC port. 938 * @port: Port number being configured. 939 * @fc_regs: Top of MMIO region defined for specified port. 940 * 941 * The provided MMIO region must be mapped prior to call. The sequence to 942 * reset the port involves toggling it offline and then back online. This 943 * action can cause this routine to delay up to a few seconds. An effort 944 * is made to maintain link with the device by switching to host to use 945 * the alternate port exclusively while the reset takes place. 946 * failure to come online is overridden. 947 */ 948 static void afu_link_reset(struct afu *afu, int port, __be64 __iomem *fc_regs) 949 { 950 u64 port_sel; 951 952 /* first switch the AFU to the other links, if any */ 953 port_sel = readq_be(&afu->afu_map->global.regs.afu_port_sel); 954 port_sel &= ~(1ULL << port); 955 writeq_be(port_sel, &afu->afu_map->global.regs.afu_port_sel); 956 cxlflash_afu_sync(afu, 0, 0, AFU_GSYNC); 957 958 set_port_offline(fc_regs); 959 if (!wait_port_offline(fc_regs, FC_PORT_STATUS_RETRY_INTERVAL_US, 960 FC_PORT_STATUS_RETRY_CNT)) 961 pr_err("%s: wait on port %d to go offline timed out\n", 962 __func__, port); 963 964 set_port_online(fc_regs); 965 if (!wait_port_online(fc_regs, FC_PORT_STATUS_RETRY_INTERVAL_US, 966 FC_PORT_STATUS_RETRY_CNT)) 967 pr_err("%s: wait on port %d to go online timed out\n", 968 __func__, port); 969 970 /* switch back to include this port */ 971 port_sel |= (1ULL << port); 972 writeq_be(port_sel, &afu->afu_map->global.regs.afu_port_sel); 973 cxlflash_afu_sync(afu, 0, 0, AFU_GSYNC); 974 975 pr_debug("%s: returning port_sel=%lld\n", __func__, port_sel); 976 } 977 978 /* 979 * Asynchronous interrupt information table 980 */ 981 static const struct asyc_intr_info ainfo[] = { 982 {SISL_ASTATUS_FC0_OTHER, "other error", 0, CLR_FC_ERROR | LINK_RESET}, 983 {SISL_ASTATUS_FC0_LOGO, "target initiated LOGO", 0, 0}, 984 {SISL_ASTATUS_FC0_CRC_T, "CRC threshold exceeded", 0, LINK_RESET}, 985 {SISL_ASTATUS_FC0_LOGI_R, "login timed out, retrying", 0, LINK_RESET}, 986 {SISL_ASTATUS_FC0_LOGI_F, "login failed", 0, CLR_FC_ERROR}, 987 {SISL_ASTATUS_FC0_LOGI_S, "login succeeded", 0, SCAN_HOST}, 988 {SISL_ASTATUS_FC0_LINK_DN, "link down", 0, 0}, 989 {SISL_ASTATUS_FC0_LINK_UP, "link up", 0, 0}, 990 {SISL_ASTATUS_FC1_OTHER, "other error", 1, CLR_FC_ERROR | LINK_RESET}, 991 {SISL_ASTATUS_FC1_LOGO, "target initiated LOGO", 1, 0}, 992 {SISL_ASTATUS_FC1_CRC_T, "CRC threshold exceeded", 1, LINK_RESET}, 993 {SISL_ASTATUS_FC1_LOGI_R, "login timed out, retrying", 1, LINK_RESET}, 994 {SISL_ASTATUS_FC1_LOGI_F, "login failed", 1, CLR_FC_ERROR}, 995 {SISL_ASTATUS_FC1_LOGI_S, "login succeeded", 1, SCAN_HOST}, 996 {SISL_ASTATUS_FC1_LINK_DN, "link down", 1, 0}, 997 {SISL_ASTATUS_FC1_LINK_UP, "link up", 1, 0}, 998 {0x0, "", 0, 0} /* terminator */ 999 }; 1000 1001 /** 1002 * find_ainfo() - locates and returns asynchronous interrupt information 1003 * @status: Status code set by AFU on error. 1004 * 1005 * Return: The located information or NULL when the status code is invalid. 1006 */ 1007 static const struct asyc_intr_info *find_ainfo(u64 status) 1008 { 1009 const struct asyc_intr_info *info; 1010 1011 for (info = &ainfo[0]; info->status; info++) 1012 if (info->status == status) 1013 return info; 1014 1015 return NULL; 1016 } 1017 1018 /** 1019 * afu_err_intr_init() - clears and initializes the AFU for error interrupts 1020 * @afu: AFU associated with the host. 1021 */ 1022 static void afu_err_intr_init(struct afu *afu) 1023 { 1024 int i; 1025 u64 reg; 1026 1027 /* global async interrupts: AFU clears afu_ctrl on context exit 1028 * if async interrupts were sent to that context. This prevents 1029 * the AFU form sending further async interrupts when 1030 * there is 1031 * nobody to receive them. 1032 */ 1033 1034 /* mask all */ 1035 writeq_be(-1ULL, &afu->afu_map->global.regs.aintr_mask); 1036 /* set LISN# to send and point to master context */ 1037 reg = ((u64) (((afu->ctx_hndl << 8) | SISL_MSI_ASYNC_ERROR)) << 40); 1038 1039 if (afu->internal_lun) 1040 reg |= 1; /* Bit 63 indicates local lun */ 1041 writeq_be(reg, &afu->afu_map->global.regs.afu_ctrl); 1042 /* clear all */ 1043 writeq_be(-1ULL, &afu->afu_map->global.regs.aintr_clear); 1044 /* unmask bits that are of interest */ 1045 /* note: afu can send an interrupt after this step */ 1046 writeq_be(SISL_ASTATUS_MASK, &afu->afu_map->global.regs.aintr_mask); 1047 /* clear again in case a bit came on after previous clear but before */ 1048 /* unmask */ 1049 writeq_be(-1ULL, &afu->afu_map->global.regs.aintr_clear); 1050 1051 /* Clear/Set internal lun bits */ 1052 reg = readq_be(&afu->afu_map->global.fc_regs[0][FC_CONFIG2 / 8]); 1053 reg &= SISL_FC_INTERNAL_MASK; 1054 if (afu->internal_lun) 1055 reg |= ((u64)(afu->internal_lun - 1) << SISL_FC_INTERNAL_SHIFT); 1056 writeq_be(reg, &afu->afu_map->global.fc_regs[0][FC_CONFIG2 / 8]); 1057 1058 /* now clear FC errors */ 1059 for (i = 0; i < NUM_FC_PORTS; i++) { 1060 writeq_be(0xFFFFFFFFU, 1061 &afu->afu_map->global.fc_regs[i][FC_ERROR / 8]); 1062 writeq_be(0, &afu->afu_map->global.fc_regs[i][FC_ERRCAP / 8]); 1063 } 1064 1065 /* sync interrupts for master's IOARRIN write */ 1066 /* note that unlike asyncs, there can be no pending sync interrupts */ 1067 /* at this time (this is a fresh context and master has not written */ 1068 /* IOARRIN yet), so there is nothing to clear. */ 1069 1070 /* set LISN#, it is always sent to the context that wrote IOARRIN */ 1071 writeq_be(SISL_MSI_SYNC_ERROR, &afu->host_map->ctx_ctrl); 1072 writeq_be(SISL_ISTATUS_MASK, &afu->host_map->intr_mask); 1073 } 1074 1075 /** 1076 * cxlflash_sync_err_irq() - interrupt handler for synchronous errors 1077 * @irq: Interrupt number. 1078 * @data: Private data provided at interrupt registration, the AFU. 1079 * 1080 * Return: Always return IRQ_HANDLED. 1081 */ 1082 static irqreturn_t cxlflash_sync_err_irq(int irq, void *data) 1083 { 1084 struct afu *afu = (struct afu *)data; 1085 u64 reg; 1086 u64 reg_unmasked; 1087 1088 reg = readq_be(&afu->host_map->intr_status); 1089 reg_unmasked = (reg & SISL_ISTATUS_UNMASK); 1090 1091 if (reg_unmasked == 0UL) { 1092 pr_err("%s: %llX: spurious interrupt, intr_status %016llX\n", 1093 __func__, (u64)afu, reg); 1094 goto cxlflash_sync_err_irq_exit; 1095 } 1096 1097 pr_err("%s: %llX: unexpected interrupt, intr_status %016llX\n", 1098 __func__, (u64)afu, reg); 1099 1100 writeq_be(reg_unmasked, &afu->host_map->intr_clear); 1101 1102 cxlflash_sync_err_irq_exit: 1103 pr_debug("%s: returning rc=%d\n", __func__, IRQ_HANDLED); 1104 return IRQ_HANDLED; 1105 } 1106 1107 /** 1108 * cxlflash_rrq_irq() - interrupt handler for read-response queue (normal path) 1109 * @irq: Interrupt number. 1110 * @data: Private data provided at interrupt registration, the AFU. 1111 * 1112 * Return: Always return IRQ_HANDLED. 1113 */ 1114 static irqreturn_t cxlflash_rrq_irq(int irq, void *data) 1115 { 1116 struct afu *afu = (struct afu *)data; 1117 struct afu_cmd *cmd; 1118 bool toggle = afu->toggle; 1119 u64 entry, 1120 *hrrq_start = afu->hrrq_start, 1121 *hrrq_end = afu->hrrq_end, 1122 *hrrq_curr = afu->hrrq_curr; 1123 1124 /* Process however many RRQ entries that are ready */ 1125 while (true) { 1126 entry = *hrrq_curr; 1127 1128 if ((entry & SISL_RESP_HANDLE_T_BIT) != toggle) 1129 break; 1130 1131 cmd = (struct afu_cmd *)(entry & ~SISL_RESP_HANDLE_T_BIT); 1132 cmd_complete(cmd); 1133 1134 /* Advance to next entry or wrap and flip the toggle bit */ 1135 if (hrrq_curr < hrrq_end) 1136 hrrq_curr++; 1137 else { 1138 hrrq_curr = hrrq_start; 1139 toggle ^= SISL_RESP_HANDLE_T_BIT; 1140 } 1141 } 1142 1143 afu->hrrq_curr = hrrq_curr; 1144 afu->toggle = toggle; 1145 1146 return IRQ_HANDLED; 1147 } 1148 1149 /** 1150 * cxlflash_async_err_irq() - interrupt handler for asynchronous errors 1151 * @irq: Interrupt number. 1152 * @data: Private data provided at interrupt registration, the AFU. 1153 * 1154 * Return: Always return IRQ_HANDLED. 1155 */ 1156 static irqreturn_t cxlflash_async_err_irq(int irq, void *data) 1157 { 1158 struct afu *afu = (struct afu *)data; 1159 struct cxlflash_cfg *cfg = afu->parent; 1160 struct device *dev = &cfg->dev->dev; 1161 u64 reg_unmasked; 1162 const struct asyc_intr_info *info; 1163 struct sisl_global_map __iomem *global = &afu->afu_map->global; 1164 u64 reg; 1165 u8 port; 1166 int i; 1167 1168 reg = readq_be(&global->regs.aintr_status); 1169 reg_unmasked = (reg & SISL_ASTATUS_UNMASK); 1170 1171 if (reg_unmasked == 0) { 1172 dev_err(dev, "%s: spurious interrupt, aintr_status 0x%016llX\n", 1173 __func__, reg); 1174 goto out; 1175 } 1176 1177 /* FYI, it is 'okay' to clear AFU status before FC_ERROR */ 1178 writeq_be(reg_unmasked, &global->regs.aintr_clear); 1179 1180 /* Check each bit that is on */ 1181 for (i = 0; reg_unmasked; i++, reg_unmasked = (reg_unmasked >> 1)) { 1182 info = find_ainfo(1ULL << i); 1183 if (((reg_unmasked & 0x1) == 0) || !info) 1184 continue; 1185 1186 port = info->port; 1187 1188 dev_err(dev, "%s: FC Port %d -> %s, fc_status 0x%08llX\n", 1189 __func__, port, info->desc, 1190 readq_be(&global->fc_regs[port][FC_STATUS / 8])); 1191 1192 /* 1193 * Do link reset first, some OTHER errors will set FC_ERROR 1194 * again if cleared before or w/o a reset 1195 */ 1196 if (info->action & LINK_RESET) { 1197 dev_err(dev, "%s: FC Port %d: resetting link\n", 1198 __func__, port); 1199 cfg->lr_state = LINK_RESET_REQUIRED; 1200 cfg->lr_port = port; 1201 kref_get(&cfg->afu->mapcount); 1202 schedule_work(&cfg->work_q); 1203 } 1204 1205 if (info->action & CLR_FC_ERROR) { 1206 reg = readq_be(&global->fc_regs[port][FC_ERROR / 8]); 1207 1208 /* 1209 * Since all errors are unmasked, FC_ERROR and FC_ERRCAP 1210 * should be the same and tracing one is sufficient. 1211 */ 1212 1213 dev_err(dev, "%s: fc %d: clearing fc_error 0x%08llX\n", 1214 __func__, port, reg); 1215 1216 writeq_be(reg, &global->fc_regs[port][FC_ERROR / 8]); 1217 writeq_be(0, &global->fc_regs[port][FC_ERRCAP / 8]); 1218 } 1219 1220 if (info->action & SCAN_HOST) { 1221 atomic_inc(&cfg->scan_host_needed); 1222 kref_get(&cfg->afu->mapcount); 1223 schedule_work(&cfg->work_q); 1224 } 1225 } 1226 1227 out: 1228 dev_dbg(dev, "%s: returning IRQ_HANDLED, afu=%p\n", __func__, afu); 1229 return IRQ_HANDLED; 1230 } 1231 1232 /** 1233 * start_context() - starts the master context 1234 * @cfg: Internal structure associated with the host. 1235 * 1236 * Return: A success or failure value from CXL services. 1237 */ 1238 static int start_context(struct cxlflash_cfg *cfg) 1239 { 1240 int rc = 0; 1241 1242 rc = cxl_start_context(cfg->mcctx, 1243 cfg->afu->work.work_element_descriptor, 1244 NULL); 1245 1246 pr_debug("%s: returning rc=%d\n", __func__, rc); 1247 return rc; 1248 } 1249 1250 /** 1251 * read_vpd() - obtains the WWPNs from VPD 1252 * @cfg: Internal structure associated with the host. 1253 * @wwpn: Array of size NUM_FC_PORTS to pass back WWPNs 1254 * 1255 * Return: 0 on success, -errno on failure 1256 */ 1257 static int read_vpd(struct cxlflash_cfg *cfg, u64 wwpn[]) 1258 { 1259 struct pci_dev *dev = cfg->dev; 1260 int rc = 0; 1261 int ro_start, ro_size, i, j, k; 1262 ssize_t vpd_size; 1263 char vpd_data[CXLFLASH_VPD_LEN]; 1264 char tmp_buf[WWPN_BUF_LEN] = { 0 }; 1265 char *wwpn_vpd_tags[NUM_FC_PORTS] = { "V5", "V6" }; 1266 1267 /* Get the VPD data from the device */ 1268 vpd_size = cxl_read_adapter_vpd(dev, vpd_data, sizeof(vpd_data)); 1269 if (unlikely(vpd_size <= 0)) { 1270 dev_err(&dev->dev, "%s: Unable to read VPD (size = %ld)\n", 1271 __func__, vpd_size); 1272 rc = -ENODEV; 1273 goto out; 1274 } 1275 1276 /* Get the read only section offset */ 1277 ro_start = pci_vpd_find_tag(vpd_data, 0, vpd_size, 1278 PCI_VPD_LRDT_RO_DATA); 1279 if (unlikely(ro_start < 0)) { 1280 dev_err(&dev->dev, "%s: VPD Read-only data not found\n", 1281 __func__); 1282 rc = -ENODEV; 1283 goto out; 1284 } 1285 1286 /* Get the read only section size, cap when extends beyond read VPD */ 1287 ro_size = pci_vpd_lrdt_size(&vpd_data[ro_start]); 1288 j = ro_size; 1289 i = ro_start + PCI_VPD_LRDT_TAG_SIZE; 1290 if (unlikely((i + j) > vpd_size)) { 1291 pr_debug("%s: Might need to read more VPD (%d > %ld)\n", 1292 __func__, (i + j), vpd_size); 1293 ro_size = vpd_size - i; 1294 } 1295 1296 /* 1297 * Find the offset of the WWPN tag within the read only 1298 * VPD data and validate the found field (partials are 1299 * no good to us). Convert the ASCII data to an integer 1300 * value. Note that we must copy to a temporary buffer 1301 * because the conversion service requires that the ASCII 1302 * string be terminated. 1303 */ 1304 for (k = 0; k < NUM_FC_PORTS; k++) { 1305 j = ro_size; 1306 i = ro_start + PCI_VPD_LRDT_TAG_SIZE; 1307 1308 i = pci_vpd_find_info_keyword(vpd_data, i, j, wwpn_vpd_tags[k]); 1309 if (unlikely(i < 0)) { 1310 dev_err(&dev->dev, "%s: Port %d WWPN not found " 1311 "in VPD\n", __func__, k); 1312 rc = -ENODEV; 1313 goto out; 1314 } 1315 1316 j = pci_vpd_info_field_size(&vpd_data[i]); 1317 i += PCI_VPD_INFO_FLD_HDR_SIZE; 1318 if (unlikely((i + j > vpd_size) || (j != WWPN_LEN))) { 1319 dev_err(&dev->dev, "%s: Port %d WWPN incomplete or " 1320 "VPD corrupt\n", 1321 __func__, k); 1322 rc = -ENODEV; 1323 goto out; 1324 } 1325 1326 memcpy(tmp_buf, &vpd_data[i], WWPN_LEN); 1327 rc = kstrtoul(tmp_buf, WWPN_LEN, (ulong *)&wwpn[k]); 1328 if (unlikely(rc)) { 1329 dev_err(&dev->dev, "%s: Fail to convert port %d WWPN " 1330 "to integer\n", __func__, k); 1331 rc = -ENODEV; 1332 goto out; 1333 } 1334 } 1335 1336 out: 1337 pr_debug("%s: returning rc=%d\n", __func__, rc); 1338 return rc; 1339 } 1340 1341 /** 1342 * init_pcr() - initialize the provisioning and control registers 1343 * @cfg: Internal structure associated with the host. 1344 * 1345 * Also sets up fast access to the mapped registers and initializes AFU 1346 * command fields that never change. 1347 */ 1348 static void init_pcr(struct cxlflash_cfg *cfg) 1349 { 1350 struct afu *afu = cfg->afu; 1351 struct sisl_ctrl_map __iomem *ctrl_map; 1352 int i; 1353 1354 for (i = 0; i < MAX_CONTEXT; i++) { 1355 ctrl_map = &afu->afu_map->ctrls[i].ctrl; 1356 /* Disrupt any clients that could be running */ 1357 /* e.g. clients that survived a master restart */ 1358 writeq_be(0, &ctrl_map->rht_start); 1359 writeq_be(0, &ctrl_map->rht_cnt_id); 1360 writeq_be(0, &ctrl_map->ctx_cap); 1361 } 1362 1363 /* Copy frequently used fields into afu */ 1364 afu->ctx_hndl = (u16) cxl_process_element(cfg->mcctx); 1365 afu->host_map = &afu->afu_map->hosts[afu->ctx_hndl].host; 1366 afu->ctrl_map = &afu->afu_map->ctrls[afu->ctx_hndl].ctrl; 1367 1368 /* Program the Endian Control for the master context */ 1369 writeq_be(SISL_ENDIAN_CTRL, &afu->host_map->endian_ctrl); 1370 } 1371 1372 /** 1373 * init_global() - initialize AFU global registers 1374 * @cfg: Internal structure associated with the host. 1375 */ 1376 static int init_global(struct cxlflash_cfg *cfg) 1377 { 1378 struct afu *afu = cfg->afu; 1379 struct device *dev = &cfg->dev->dev; 1380 u64 wwpn[NUM_FC_PORTS]; /* wwpn of AFU ports */ 1381 int i = 0, num_ports = 0; 1382 int rc = 0; 1383 u64 reg; 1384 1385 rc = read_vpd(cfg, &wwpn[0]); 1386 if (rc) { 1387 dev_err(dev, "%s: could not read vpd rc=%d\n", __func__, rc); 1388 goto out; 1389 } 1390 1391 pr_debug("%s: wwpn0=0x%llX wwpn1=0x%llX\n", __func__, wwpn[0], wwpn[1]); 1392 1393 /* Set up RRQ in AFU for master issued cmds */ 1394 writeq_be((u64) afu->hrrq_start, &afu->host_map->rrq_start); 1395 writeq_be((u64) afu->hrrq_end, &afu->host_map->rrq_end); 1396 1397 /* AFU configuration */ 1398 reg = readq_be(&afu->afu_map->global.regs.afu_config); 1399 reg |= SISL_AFUCONF_AR_ALL|SISL_AFUCONF_ENDIAN; 1400 /* enable all auto retry options and control endianness */ 1401 /* leave others at default: */ 1402 /* CTX_CAP write protected, mbox_r does not clear on read and */ 1403 /* checker on if dual afu */ 1404 writeq_be(reg, &afu->afu_map->global.regs.afu_config); 1405 1406 /* Global port select: select either port */ 1407 if (afu->internal_lun) { 1408 /* Only use port 0 */ 1409 writeq_be(PORT0, &afu->afu_map->global.regs.afu_port_sel); 1410 num_ports = NUM_FC_PORTS - 1; 1411 } else { 1412 writeq_be(BOTH_PORTS, &afu->afu_map->global.regs.afu_port_sel); 1413 num_ports = NUM_FC_PORTS; 1414 } 1415 1416 for (i = 0; i < num_ports; i++) { 1417 /* Unmask all errors (but they are still masked at AFU) */ 1418 writeq_be(0, &afu->afu_map->global.fc_regs[i][FC_ERRMSK / 8]); 1419 /* Clear CRC error cnt & set a threshold */ 1420 (void)readq_be(&afu->afu_map->global. 1421 fc_regs[i][FC_CNT_CRCERR / 8]); 1422 writeq_be(MC_CRC_THRESH, &afu->afu_map->global.fc_regs[i] 1423 [FC_CRC_THRESH / 8]); 1424 1425 /* Set WWPNs. If already programmed, wwpn[i] is 0 */ 1426 if (wwpn[i] != 0) 1427 afu_set_wwpn(afu, i, 1428 &afu->afu_map->global.fc_regs[i][0], 1429 wwpn[i]); 1430 /* Programming WWPN back to back causes additional 1431 * offline/online transitions and a PLOGI 1432 */ 1433 msleep(100); 1434 } 1435 1436 /* Set up master's own CTX_CAP to allow real mode, host translation */ 1437 /* tables, afu cmds and read/write GSCSI cmds. */ 1438 /* First, unlock ctx_cap write by reading mbox */ 1439 (void)readq_be(&afu->ctrl_map->mbox_r); /* unlock ctx_cap */ 1440 writeq_be((SISL_CTX_CAP_REAL_MODE | SISL_CTX_CAP_HOST_XLATE | 1441 SISL_CTX_CAP_READ_CMD | SISL_CTX_CAP_WRITE_CMD | 1442 SISL_CTX_CAP_AFU_CMD | SISL_CTX_CAP_GSCSI_CMD), 1443 &afu->ctrl_map->ctx_cap); 1444 /* Initialize heartbeat */ 1445 afu->hb = readq_be(&afu->afu_map->global.regs.afu_hb); 1446 1447 out: 1448 return rc; 1449 } 1450 1451 /** 1452 * start_afu() - initializes and starts the AFU 1453 * @cfg: Internal structure associated with the host. 1454 */ 1455 static int start_afu(struct cxlflash_cfg *cfg) 1456 { 1457 struct afu *afu = cfg->afu; 1458 int rc = 0; 1459 1460 init_pcr(cfg); 1461 1462 /* After an AFU reset, RRQ entries are stale, clear them */ 1463 memset(&afu->rrq_entry, 0, sizeof(afu->rrq_entry)); 1464 1465 /* Initialize RRQ pointers */ 1466 afu->hrrq_start = &afu->rrq_entry[0]; 1467 afu->hrrq_end = &afu->rrq_entry[NUM_RRQ_ENTRY - 1]; 1468 afu->hrrq_curr = afu->hrrq_start; 1469 afu->toggle = 1; 1470 1471 rc = init_global(cfg); 1472 1473 pr_debug("%s: returning rc=%d\n", __func__, rc); 1474 return rc; 1475 } 1476 1477 /** 1478 * init_intr() - setup interrupt handlers for the master context 1479 * @cfg: Internal structure associated with the host. 1480 * 1481 * Return: 0 on success, -errno on failure 1482 */ 1483 static enum undo_level init_intr(struct cxlflash_cfg *cfg, 1484 struct cxl_context *ctx) 1485 { 1486 struct afu *afu = cfg->afu; 1487 struct device *dev = &cfg->dev->dev; 1488 int rc = 0; 1489 enum undo_level level = UNDO_NOOP; 1490 1491 rc = cxl_allocate_afu_irqs(ctx, 3); 1492 if (unlikely(rc)) { 1493 dev_err(dev, "%s: call to allocate_afu_irqs failed rc=%d!\n", 1494 __func__, rc); 1495 level = UNDO_NOOP; 1496 goto out; 1497 } 1498 1499 rc = cxl_map_afu_irq(ctx, 1, cxlflash_sync_err_irq, afu, 1500 "SISL_MSI_SYNC_ERROR"); 1501 if (unlikely(rc <= 0)) { 1502 dev_err(dev, "%s: IRQ 1 (SISL_MSI_SYNC_ERROR) map failed!\n", 1503 __func__); 1504 level = FREE_IRQ; 1505 goto out; 1506 } 1507 1508 rc = cxl_map_afu_irq(ctx, 2, cxlflash_rrq_irq, afu, 1509 "SISL_MSI_RRQ_UPDATED"); 1510 if (unlikely(rc <= 0)) { 1511 dev_err(dev, "%s: IRQ 2 (SISL_MSI_RRQ_UPDATED) map failed!\n", 1512 __func__); 1513 level = UNMAP_ONE; 1514 goto out; 1515 } 1516 1517 rc = cxl_map_afu_irq(ctx, 3, cxlflash_async_err_irq, afu, 1518 "SISL_MSI_ASYNC_ERROR"); 1519 if (unlikely(rc <= 0)) { 1520 dev_err(dev, "%s: IRQ 3 (SISL_MSI_ASYNC_ERROR) map failed!\n", 1521 __func__); 1522 level = UNMAP_TWO; 1523 goto out; 1524 } 1525 out: 1526 return level; 1527 } 1528 1529 /** 1530 * init_mc() - create and register as the master context 1531 * @cfg: Internal structure associated with the host. 1532 * 1533 * Return: 0 on success, -errno on failure 1534 */ 1535 static int init_mc(struct cxlflash_cfg *cfg) 1536 { 1537 struct cxl_context *ctx; 1538 struct device *dev = &cfg->dev->dev; 1539 int rc = 0; 1540 enum undo_level level; 1541 1542 ctx = cxl_get_context(cfg->dev); 1543 if (unlikely(!ctx)) { 1544 rc = -ENOMEM; 1545 goto ret; 1546 } 1547 cfg->mcctx = ctx; 1548 1549 /* Set it up as a master with the CXL */ 1550 cxl_set_master(ctx); 1551 1552 /* During initialization reset the AFU to start from a clean slate */ 1553 rc = cxl_afu_reset(cfg->mcctx); 1554 if (unlikely(rc)) { 1555 dev_err(dev, "%s: initial AFU reset failed rc=%d\n", 1556 __func__, rc); 1557 goto ret; 1558 } 1559 1560 level = init_intr(cfg, ctx); 1561 if (unlikely(level)) { 1562 dev_err(dev, "%s: setting up interrupts failed rc=%d\n", 1563 __func__, rc); 1564 goto out; 1565 } 1566 1567 /* This performs the equivalent of the CXL_IOCTL_START_WORK. 1568 * The CXL_IOCTL_GET_PROCESS_ELEMENT is implicit in the process 1569 * element (pe) that is embedded in the context (ctx) 1570 */ 1571 rc = start_context(cfg); 1572 if (unlikely(rc)) { 1573 dev_err(dev, "%s: start context failed rc=%d\n", __func__, rc); 1574 level = UNMAP_THREE; 1575 goto out; 1576 } 1577 ret: 1578 pr_debug("%s: returning rc=%d\n", __func__, rc); 1579 return rc; 1580 out: 1581 term_intr(cfg, level); 1582 goto ret; 1583 } 1584 1585 /** 1586 * init_afu() - setup as master context and start AFU 1587 * @cfg: Internal structure associated with the host. 1588 * 1589 * This routine is a higher level of control for configuring the 1590 * AFU on probe and reset paths. 1591 * 1592 * Return: 0 on success, -errno on failure 1593 */ 1594 static int init_afu(struct cxlflash_cfg *cfg) 1595 { 1596 u64 reg; 1597 int rc = 0; 1598 struct afu *afu = cfg->afu; 1599 struct device *dev = &cfg->dev->dev; 1600 1601 cxl_perst_reloads_same_image(cfg->cxl_afu, true); 1602 1603 rc = init_mc(cfg); 1604 if (rc) { 1605 dev_err(dev, "%s: call to init_mc failed, rc=%d!\n", 1606 __func__, rc); 1607 goto out; 1608 } 1609 1610 /* Map the entire MMIO space of the AFU */ 1611 afu->afu_map = cxl_psa_map(cfg->mcctx); 1612 if (!afu->afu_map) { 1613 dev_err(dev, "%s: call to cxl_psa_map failed!\n", __func__); 1614 rc = -ENOMEM; 1615 goto err1; 1616 } 1617 kref_init(&afu->mapcount); 1618 1619 /* No byte reverse on reading afu_version or string will be backwards */ 1620 reg = readq(&afu->afu_map->global.regs.afu_version); 1621 memcpy(afu->version, ®, sizeof(reg)); 1622 afu->interface_version = 1623 readq_be(&afu->afu_map->global.regs.interface_version); 1624 if ((afu->interface_version + 1) == 0) { 1625 pr_err("Back level AFU, please upgrade. AFU version %s " 1626 "interface version 0x%llx\n", afu->version, 1627 afu->interface_version); 1628 rc = -EINVAL; 1629 goto err2; 1630 } 1631 1632 afu->send_cmd = send_cmd_ioarrin; 1633 afu->context_reset = context_reset_ioarrin; 1634 1635 pr_debug("%s: afu version %s, interface version 0x%llX\n", __func__, 1636 afu->version, afu->interface_version); 1637 1638 rc = start_afu(cfg); 1639 if (rc) { 1640 dev_err(dev, "%s: call to start_afu failed, rc=%d!\n", 1641 __func__, rc); 1642 goto err2; 1643 } 1644 1645 afu_err_intr_init(cfg->afu); 1646 spin_lock_init(&afu->rrin_slock); 1647 afu->room = readq_be(&afu->host_map->cmd_room); 1648 1649 /* Restore the LUN mappings */ 1650 cxlflash_restore_luntable(cfg); 1651 out: 1652 pr_debug("%s: returning rc=%d\n", __func__, rc); 1653 return rc; 1654 1655 err2: 1656 kref_put(&afu->mapcount, afu_unmap); 1657 err1: 1658 term_intr(cfg, UNMAP_THREE); 1659 term_mc(cfg); 1660 goto out; 1661 } 1662 1663 /** 1664 * cxlflash_afu_sync() - builds and sends an AFU sync command 1665 * @afu: AFU associated with the host. 1666 * @ctx_hndl_u: Identifies context requesting sync. 1667 * @res_hndl_u: Identifies resource requesting sync. 1668 * @mode: Type of sync to issue (lightweight, heavyweight, global). 1669 * 1670 * The AFU can only take 1 sync command at a time. This routine enforces this 1671 * limitation by using a mutex to provide exclusive access to the AFU during 1672 * the sync. This design point requires calling threads to not be on interrupt 1673 * context due to the possibility of sleeping during concurrent sync operations. 1674 * 1675 * AFU sync operations are only necessary and allowed when the device is 1676 * operating normally. When not operating normally, sync requests can occur as 1677 * part of cleaning up resources associated with an adapter prior to removal. 1678 * In this scenario, these requests are simply ignored (safe due to the AFU 1679 * going away). 1680 * 1681 * Return: 1682 * 0 on success 1683 * -1 on failure 1684 */ 1685 int cxlflash_afu_sync(struct afu *afu, ctx_hndl_t ctx_hndl_u, 1686 res_hndl_t res_hndl_u, u8 mode) 1687 { 1688 struct cxlflash_cfg *cfg = afu->parent; 1689 struct device *dev = &cfg->dev->dev; 1690 struct afu_cmd *cmd = NULL; 1691 char *buf = NULL; 1692 int rc = 0; 1693 static DEFINE_MUTEX(sync_active); 1694 1695 if (cfg->state != STATE_NORMAL) { 1696 pr_debug("%s: Sync not required! (%u)\n", __func__, cfg->state); 1697 return 0; 1698 } 1699 1700 mutex_lock(&sync_active); 1701 atomic_inc(&afu->cmds_active); 1702 buf = kzalloc(sizeof(*cmd) + __alignof__(*cmd) - 1, GFP_KERNEL); 1703 if (unlikely(!buf)) { 1704 dev_err(dev, "%s: no memory for command\n", __func__); 1705 rc = -1; 1706 goto out; 1707 } 1708 1709 cmd = (struct afu_cmd *)PTR_ALIGN(buf, __alignof__(*cmd)); 1710 init_completion(&cmd->cevent); 1711 cmd->parent = afu; 1712 1713 pr_debug("%s: afu=%p cmd=%p %d\n", __func__, afu, cmd, ctx_hndl_u); 1714 1715 cmd->rcb.req_flags = SISL_REQ_FLAGS_AFU_CMD; 1716 cmd->rcb.ctx_id = afu->ctx_hndl; 1717 cmd->rcb.msi = SISL_MSI_RRQ_UPDATED; 1718 cmd->rcb.timeout = MC_AFU_SYNC_TIMEOUT; 1719 1720 cmd->rcb.cdb[0] = 0xC0; /* AFU Sync */ 1721 cmd->rcb.cdb[1] = mode; 1722 1723 /* The cdb is aligned, no unaligned accessors required */ 1724 *((__be16 *)&cmd->rcb.cdb[2]) = cpu_to_be16(ctx_hndl_u); 1725 *((__be32 *)&cmd->rcb.cdb[4]) = cpu_to_be32(res_hndl_u); 1726 1727 rc = afu->send_cmd(afu, cmd); 1728 if (unlikely(rc)) 1729 goto out; 1730 1731 rc = wait_resp(afu, cmd); 1732 if (unlikely(rc)) 1733 rc = -1; 1734 out: 1735 atomic_dec(&afu->cmds_active); 1736 mutex_unlock(&sync_active); 1737 kfree(buf); 1738 pr_debug("%s: returning rc=%d\n", __func__, rc); 1739 return rc; 1740 } 1741 1742 /** 1743 * afu_reset() - resets the AFU 1744 * @cfg: Internal structure associated with the host. 1745 * 1746 * Return: 0 on success, -errno on failure 1747 */ 1748 static int afu_reset(struct cxlflash_cfg *cfg) 1749 { 1750 int rc = 0; 1751 /* Stop the context before the reset. Since the context is 1752 * no longer available restart it after the reset is complete 1753 */ 1754 1755 term_afu(cfg); 1756 1757 rc = init_afu(cfg); 1758 1759 pr_debug("%s: returning rc=%d\n", __func__, rc); 1760 return rc; 1761 } 1762 1763 /** 1764 * drain_ioctls() - wait until all currently executing ioctls have completed 1765 * @cfg: Internal structure associated with the host. 1766 * 1767 * Obtain write access to read/write semaphore that wraps ioctl 1768 * handling to 'drain' ioctls currently executing. 1769 */ 1770 static void drain_ioctls(struct cxlflash_cfg *cfg) 1771 { 1772 down_write(&cfg->ioctl_rwsem); 1773 up_write(&cfg->ioctl_rwsem); 1774 } 1775 1776 /** 1777 * cxlflash_eh_device_reset_handler() - reset a single LUN 1778 * @scp: SCSI command to send. 1779 * 1780 * Return: 1781 * SUCCESS as defined in scsi/scsi.h 1782 * FAILED as defined in scsi/scsi.h 1783 */ 1784 static int cxlflash_eh_device_reset_handler(struct scsi_cmnd *scp) 1785 { 1786 int rc = SUCCESS; 1787 struct Scsi_Host *host = scp->device->host; 1788 struct cxlflash_cfg *cfg = (struct cxlflash_cfg *)host->hostdata; 1789 struct afu *afu = cfg->afu; 1790 int rcr = 0; 1791 1792 pr_debug("%s: (scp=%p) %d/%d/%d/%llu " 1793 "cdb=(%08X-%08X-%08X-%08X)\n", __func__, scp, 1794 host->host_no, scp->device->channel, 1795 scp->device->id, scp->device->lun, 1796 get_unaligned_be32(&((u32 *)scp->cmnd)[0]), 1797 get_unaligned_be32(&((u32 *)scp->cmnd)[1]), 1798 get_unaligned_be32(&((u32 *)scp->cmnd)[2]), 1799 get_unaligned_be32(&((u32 *)scp->cmnd)[3])); 1800 1801 retry: 1802 switch (cfg->state) { 1803 case STATE_NORMAL: 1804 rcr = send_tmf(afu, scp, TMF_LUN_RESET); 1805 if (unlikely(rcr)) 1806 rc = FAILED; 1807 break; 1808 case STATE_RESET: 1809 wait_event(cfg->reset_waitq, cfg->state != STATE_RESET); 1810 goto retry; 1811 default: 1812 rc = FAILED; 1813 break; 1814 } 1815 1816 pr_debug("%s: returning rc=%d\n", __func__, rc); 1817 return rc; 1818 } 1819 1820 /** 1821 * cxlflash_eh_host_reset_handler() - reset the host adapter 1822 * @scp: SCSI command from stack identifying host. 1823 * 1824 * Following a reset, the state is evaluated again in case an EEH occurred 1825 * during the reset. In such a scenario, the host reset will either yield 1826 * until the EEH recovery is complete or return success or failure based 1827 * upon the current device state. 1828 * 1829 * Return: 1830 * SUCCESS as defined in scsi/scsi.h 1831 * FAILED as defined in scsi/scsi.h 1832 */ 1833 static int cxlflash_eh_host_reset_handler(struct scsi_cmnd *scp) 1834 { 1835 int rc = SUCCESS; 1836 int rcr = 0; 1837 struct Scsi_Host *host = scp->device->host; 1838 struct cxlflash_cfg *cfg = (struct cxlflash_cfg *)host->hostdata; 1839 1840 pr_debug("%s: (scp=%p) %d/%d/%d/%llu " 1841 "cdb=(%08X-%08X-%08X-%08X)\n", __func__, scp, 1842 host->host_no, scp->device->channel, 1843 scp->device->id, scp->device->lun, 1844 get_unaligned_be32(&((u32 *)scp->cmnd)[0]), 1845 get_unaligned_be32(&((u32 *)scp->cmnd)[1]), 1846 get_unaligned_be32(&((u32 *)scp->cmnd)[2]), 1847 get_unaligned_be32(&((u32 *)scp->cmnd)[3])); 1848 1849 switch (cfg->state) { 1850 case STATE_NORMAL: 1851 cfg->state = STATE_RESET; 1852 drain_ioctls(cfg); 1853 cxlflash_mark_contexts_error(cfg); 1854 rcr = afu_reset(cfg); 1855 if (rcr) { 1856 rc = FAILED; 1857 cfg->state = STATE_FAILTERM; 1858 } else 1859 cfg->state = STATE_NORMAL; 1860 wake_up_all(&cfg->reset_waitq); 1861 ssleep(1); 1862 /* fall through */ 1863 case STATE_RESET: 1864 wait_event(cfg->reset_waitq, cfg->state != STATE_RESET); 1865 if (cfg->state == STATE_NORMAL) 1866 break; 1867 /* fall through */ 1868 default: 1869 rc = FAILED; 1870 break; 1871 } 1872 1873 pr_debug("%s: returning rc=%d\n", __func__, rc); 1874 return rc; 1875 } 1876 1877 /** 1878 * cxlflash_change_queue_depth() - change the queue depth for the device 1879 * @sdev: SCSI device destined for queue depth change. 1880 * @qdepth: Requested queue depth value to set. 1881 * 1882 * The requested queue depth is capped to the maximum supported value. 1883 * 1884 * Return: The actual queue depth set. 1885 */ 1886 static int cxlflash_change_queue_depth(struct scsi_device *sdev, int qdepth) 1887 { 1888 1889 if (qdepth > CXLFLASH_MAX_CMDS_PER_LUN) 1890 qdepth = CXLFLASH_MAX_CMDS_PER_LUN; 1891 1892 scsi_change_queue_depth(sdev, qdepth); 1893 return sdev->queue_depth; 1894 } 1895 1896 /** 1897 * cxlflash_show_port_status() - queries and presents the current port status 1898 * @port: Desired port for status reporting. 1899 * @afu: AFU owning the specified port. 1900 * @buf: Buffer of length PAGE_SIZE to report back port status in ASCII. 1901 * 1902 * Return: The size of the ASCII string returned in @buf. 1903 */ 1904 static ssize_t cxlflash_show_port_status(u32 port, struct afu *afu, char *buf) 1905 { 1906 char *disp_status; 1907 u64 status; 1908 __be64 __iomem *fc_regs; 1909 1910 if (port >= NUM_FC_PORTS) 1911 return 0; 1912 1913 fc_regs = &afu->afu_map->global.fc_regs[port][0]; 1914 status = readq_be(&fc_regs[FC_MTIP_STATUS / 8]); 1915 status &= FC_MTIP_STATUS_MASK; 1916 1917 if (status == FC_MTIP_STATUS_ONLINE) 1918 disp_status = "online"; 1919 else if (status == FC_MTIP_STATUS_OFFLINE) 1920 disp_status = "offline"; 1921 else 1922 disp_status = "unknown"; 1923 1924 return scnprintf(buf, PAGE_SIZE, "%s\n", disp_status); 1925 } 1926 1927 /** 1928 * port0_show() - queries and presents the current status of port 0 1929 * @dev: Generic device associated with the host owning the port. 1930 * @attr: Device attribute representing the port. 1931 * @buf: Buffer of length PAGE_SIZE to report back port status in ASCII. 1932 * 1933 * Return: The size of the ASCII string returned in @buf. 1934 */ 1935 static ssize_t port0_show(struct device *dev, 1936 struct device_attribute *attr, 1937 char *buf) 1938 { 1939 struct Scsi_Host *shost = class_to_shost(dev); 1940 struct cxlflash_cfg *cfg = (struct cxlflash_cfg *)shost->hostdata; 1941 struct afu *afu = cfg->afu; 1942 1943 return cxlflash_show_port_status(0, afu, buf); 1944 } 1945 1946 /** 1947 * port1_show() - queries and presents the current status of port 1 1948 * @dev: Generic device associated with the host owning the port. 1949 * @attr: Device attribute representing the port. 1950 * @buf: Buffer of length PAGE_SIZE to report back port status in ASCII. 1951 * 1952 * Return: The size of the ASCII string returned in @buf. 1953 */ 1954 static ssize_t port1_show(struct device *dev, 1955 struct device_attribute *attr, 1956 char *buf) 1957 { 1958 struct Scsi_Host *shost = class_to_shost(dev); 1959 struct cxlflash_cfg *cfg = (struct cxlflash_cfg *)shost->hostdata; 1960 struct afu *afu = cfg->afu; 1961 1962 return cxlflash_show_port_status(1, afu, buf); 1963 } 1964 1965 /** 1966 * lun_mode_show() - presents the current LUN mode of the host 1967 * @dev: Generic device associated with the host. 1968 * @attr: Device attribute representing the LUN mode. 1969 * @buf: Buffer of length PAGE_SIZE to report back the LUN mode in ASCII. 1970 * 1971 * Return: The size of the ASCII string returned in @buf. 1972 */ 1973 static ssize_t lun_mode_show(struct device *dev, 1974 struct device_attribute *attr, char *buf) 1975 { 1976 struct Scsi_Host *shost = class_to_shost(dev); 1977 struct cxlflash_cfg *cfg = (struct cxlflash_cfg *)shost->hostdata; 1978 struct afu *afu = cfg->afu; 1979 1980 return scnprintf(buf, PAGE_SIZE, "%u\n", afu->internal_lun); 1981 } 1982 1983 /** 1984 * lun_mode_store() - sets the LUN mode of the host 1985 * @dev: Generic device associated with the host. 1986 * @attr: Device attribute representing the LUN mode. 1987 * @buf: Buffer of length PAGE_SIZE containing the LUN mode in ASCII. 1988 * @count: Length of data resizing in @buf. 1989 * 1990 * The CXL Flash AFU supports a dummy LUN mode where the external 1991 * links and storage are not required. Space on the FPGA is used 1992 * to create 1 or 2 small LUNs which are presented to the system 1993 * as if they were a normal storage device. This feature is useful 1994 * during development and also provides manufacturing with a way 1995 * to test the AFU without an actual device. 1996 * 1997 * 0 = external LUN[s] (default) 1998 * 1 = internal LUN (1 x 64K, 512B blocks, id 0) 1999 * 2 = internal LUN (1 x 64K, 4K blocks, id 0) 2000 * 3 = internal LUN (2 x 32K, 512B blocks, ids 0,1) 2001 * 4 = internal LUN (2 x 32K, 4K blocks, ids 0,1) 2002 * 2003 * Return: The size of the ASCII string returned in @buf. 2004 */ 2005 static ssize_t lun_mode_store(struct device *dev, 2006 struct device_attribute *attr, 2007 const char *buf, size_t count) 2008 { 2009 struct Scsi_Host *shost = class_to_shost(dev); 2010 struct cxlflash_cfg *cfg = (struct cxlflash_cfg *)shost->hostdata; 2011 struct afu *afu = cfg->afu; 2012 int rc; 2013 u32 lun_mode; 2014 2015 rc = kstrtouint(buf, 10, &lun_mode); 2016 if (!rc && (lun_mode < 5) && (lun_mode != afu->internal_lun)) { 2017 afu->internal_lun = lun_mode; 2018 2019 /* 2020 * When configured for internal LUN, there is only one channel, 2021 * channel number 0, else there will be 2 (default). 2022 */ 2023 if (afu->internal_lun) 2024 shost->max_channel = 0; 2025 else 2026 shost->max_channel = NUM_FC_PORTS - 1; 2027 2028 afu_reset(cfg); 2029 scsi_scan_host(cfg->host); 2030 } 2031 2032 return count; 2033 } 2034 2035 /** 2036 * ioctl_version_show() - presents the current ioctl version of the host 2037 * @dev: Generic device associated with the host. 2038 * @attr: Device attribute representing the ioctl version. 2039 * @buf: Buffer of length PAGE_SIZE to report back the ioctl version. 2040 * 2041 * Return: The size of the ASCII string returned in @buf. 2042 */ 2043 static ssize_t ioctl_version_show(struct device *dev, 2044 struct device_attribute *attr, char *buf) 2045 { 2046 return scnprintf(buf, PAGE_SIZE, "%u\n", DK_CXLFLASH_VERSION_0); 2047 } 2048 2049 /** 2050 * cxlflash_show_port_lun_table() - queries and presents the port LUN table 2051 * @port: Desired port for status reporting. 2052 * @afu: AFU owning the specified port. 2053 * @buf: Buffer of length PAGE_SIZE to report back port status in ASCII. 2054 * 2055 * Return: The size of the ASCII string returned in @buf. 2056 */ 2057 static ssize_t cxlflash_show_port_lun_table(u32 port, 2058 struct afu *afu, 2059 char *buf) 2060 { 2061 int i; 2062 ssize_t bytes = 0; 2063 __be64 __iomem *fc_port; 2064 2065 if (port >= NUM_FC_PORTS) 2066 return 0; 2067 2068 fc_port = &afu->afu_map->global.fc_port[port][0]; 2069 2070 for (i = 0; i < CXLFLASH_NUM_VLUNS; i++) 2071 bytes += scnprintf(buf + bytes, PAGE_SIZE - bytes, 2072 "%03d: %016llX\n", i, readq_be(&fc_port[i])); 2073 return bytes; 2074 } 2075 2076 /** 2077 * port0_lun_table_show() - presents the current LUN table of port 0 2078 * @dev: Generic device associated with the host owning the port. 2079 * @attr: Device attribute representing the port. 2080 * @buf: Buffer of length PAGE_SIZE to report back port status in ASCII. 2081 * 2082 * Return: The size of the ASCII string returned in @buf. 2083 */ 2084 static ssize_t port0_lun_table_show(struct device *dev, 2085 struct device_attribute *attr, 2086 char *buf) 2087 { 2088 struct Scsi_Host *shost = class_to_shost(dev); 2089 struct cxlflash_cfg *cfg = (struct cxlflash_cfg *)shost->hostdata; 2090 struct afu *afu = cfg->afu; 2091 2092 return cxlflash_show_port_lun_table(0, afu, buf); 2093 } 2094 2095 /** 2096 * port1_lun_table_show() - presents the current LUN table of port 1 2097 * @dev: Generic device associated with the host owning the port. 2098 * @attr: Device attribute representing the port. 2099 * @buf: Buffer of length PAGE_SIZE to report back port status in ASCII. 2100 * 2101 * Return: The size of the ASCII string returned in @buf. 2102 */ 2103 static ssize_t port1_lun_table_show(struct device *dev, 2104 struct device_attribute *attr, 2105 char *buf) 2106 { 2107 struct Scsi_Host *shost = class_to_shost(dev); 2108 struct cxlflash_cfg *cfg = (struct cxlflash_cfg *)shost->hostdata; 2109 struct afu *afu = cfg->afu; 2110 2111 return cxlflash_show_port_lun_table(1, afu, buf); 2112 } 2113 2114 /** 2115 * mode_show() - presents the current mode of the device 2116 * @dev: Generic device associated with the device. 2117 * @attr: Device attribute representing the device mode. 2118 * @buf: Buffer of length PAGE_SIZE to report back the dev mode in ASCII. 2119 * 2120 * Return: The size of the ASCII string returned in @buf. 2121 */ 2122 static ssize_t mode_show(struct device *dev, 2123 struct device_attribute *attr, char *buf) 2124 { 2125 struct scsi_device *sdev = to_scsi_device(dev); 2126 2127 return scnprintf(buf, PAGE_SIZE, "%s\n", 2128 sdev->hostdata ? "superpipe" : "legacy"); 2129 } 2130 2131 /* 2132 * Host attributes 2133 */ 2134 static DEVICE_ATTR_RO(port0); 2135 static DEVICE_ATTR_RO(port1); 2136 static DEVICE_ATTR_RW(lun_mode); 2137 static DEVICE_ATTR_RO(ioctl_version); 2138 static DEVICE_ATTR_RO(port0_lun_table); 2139 static DEVICE_ATTR_RO(port1_lun_table); 2140 2141 static struct device_attribute *cxlflash_host_attrs[] = { 2142 &dev_attr_port0, 2143 &dev_attr_port1, 2144 &dev_attr_lun_mode, 2145 &dev_attr_ioctl_version, 2146 &dev_attr_port0_lun_table, 2147 &dev_attr_port1_lun_table, 2148 NULL 2149 }; 2150 2151 /* 2152 * Device attributes 2153 */ 2154 static DEVICE_ATTR_RO(mode); 2155 2156 static struct device_attribute *cxlflash_dev_attrs[] = { 2157 &dev_attr_mode, 2158 NULL 2159 }; 2160 2161 /* 2162 * Host template 2163 */ 2164 static struct scsi_host_template driver_template = { 2165 .module = THIS_MODULE, 2166 .name = CXLFLASH_ADAPTER_NAME, 2167 .info = cxlflash_driver_info, 2168 .ioctl = cxlflash_ioctl, 2169 .proc_name = CXLFLASH_NAME, 2170 .queuecommand = cxlflash_queuecommand, 2171 .eh_device_reset_handler = cxlflash_eh_device_reset_handler, 2172 .eh_host_reset_handler = cxlflash_eh_host_reset_handler, 2173 .change_queue_depth = cxlflash_change_queue_depth, 2174 .cmd_per_lun = CXLFLASH_MAX_CMDS_PER_LUN, 2175 .can_queue = CXLFLASH_MAX_CMDS, 2176 .cmd_size = sizeof(struct afu_cmd) + __alignof__(struct afu_cmd) - 1, 2177 .this_id = -1, 2178 .sg_tablesize = 1, /* No scatter gather support */ 2179 .max_sectors = CXLFLASH_MAX_SECTORS, 2180 .use_clustering = ENABLE_CLUSTERING, 2181 .shost_attrs = cxlflash_host_attrs, 2182 .sdev_attrs = cxlflash_dev_attrs, 2183 }; 2184 2185 /* 2186 * Device dependent values 2187 */ 2188 static struct dev_dependent_vals dev_corsa_vals = { CXLFLASH_MAX_SECTORS, 2189 0ULL }; 2190 static struct dev_dependent_vals dev_flash_gt_vals = { CXLFLASH_MAX_SECTORS, 2191 CXLFLASH_NOTIFY_SHUTDOWN }; 2192 2193 /* 2194 * PCI device binding table 2195 */ 2196 static struct pci_device_id cxlflash_pci_table[] = { 2197 {PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_CORSA, 2198 PCI_ANY_ID, PCI_ANY_ID, 0, 0, (kernel_ulong_t)&dev_corsa_vals}, 2199 {PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_FLASH_GT, 2200 PCI_ANY_ID, PCI_ANY_ID, 0, 0, (kernel_ulong_t)&dev_flash_gt_vals}, 2201 {} 2202 }; 2203 2204 MODULE_DEVICE_TABLE(pci, cxlflash_pci_table); 2205 2206 /** 2207 * cxlflash_worker_thread() - work thread handler for the AFU 2208 * @work: Work structure contained within cxlflash associated with host. 2209 * 2210 * Handles the following events: 2211 * - Link reset which cannot be performed on interrupt context due to 2212 * blocking up to a few seconds 2213 * - Rescan the host 2214 */ 2215 static void cxlflash_worker_thread(struct work_struct *work) 2216 { 2217 struct cxlflash_cfg *cfg = container_of(work, struct cxlflash_cfg, 2218 work_q); 2219 struct afu *afu = cfg->afu; 2220 struct device *dev = &cfg->dev->dev; 2221 int port; 2222 ulong lock_flags; 2223 2224 /* Avoid MMIO if the device has failed */ 2225 2226 if (cfg->state != STATE_NORMAL) 2227 return; 2228 2229 spin_lock_irqsave(cfg->host->host_lock, lock_flags); 2230 2231 if (cfg->lr_state == LINK_RESET_REQUIRED) { 2232 port = cfg->lr_port; 2233 if (port < 0) 2234 dev_err(dev, "%s: invalid port index %d\n", 2235 __func__, port); 2236 else { 2237 spin_unlock_irqrestore(cfg->host->host_lock, 2238 lock_flags); 2239 2240 /* The reset can block... */ 2241 afu_link_reset(afu, port, 2242 &afu->afu_map->global.fc_regs[port][0]); 2243 spin_lock_irqsave(cfg->host->host_lock, lock_flags); 2244 } 2245 2246 cfg->lr_state = LINK_RESET_COMPLETE; 2247 } 2248 2249 spin_unlock_irqrestore(cfg->host->host_lock, lock_flags); 2250 2251 if (atomic_dec_if_positive(&cfg->scan_host_needed) >= 0) 2252 scsi_scan_host(cfg->host); 2253 kref_put(&afu->mapcount, afu_unmap); 2254 } 2255 2256 /** 2257 * cxlflash_probe() - PCI entry point to add host 2258 * @pdev: PCI device associated with the host. 2259 * @dev_id: PCI device id associated with device. 2260 * 2261 * Return: 0 on success, -errno on failure 2262 */ 2263 static int cxlflash_probe(struct pci_dev *pdev, 2264 const struct pci_device_id *dev_id) 2265 { 2266 struct Scsi_Host *host; 2267 struct cxlflash_cfg *cfg = NULL; 2268 struct dev_dependent_vals *ddv; 2269 int rc = 0; 2270 2271 dev_dbg(&pdev->dev, "%s: Found CXLFLASH with IRQ: %d\n", 2272 __func__, pdev->irq); 2273 2274 ddv = (struct dev_dependent_vals *)dev_id->driver_data; 2275 driver_template.max_sectors = ddv->max_sectors; 2276 2277 host = scsi_host_alloc(&driver_template, sizeof(struct cxlflash_cfg)); 2278 if (!host) { 2279 dev_err(&pdev->dev, "%s: call to scsi_host_alloc failed!\n", 2280 __func__); 2281 rc = -ENOMEM; 2282 goto out; 2283 } 2284 2285 host->max_id = CXLFLASH_MAX_NUM_TARGETS_PER_BUS; 2286 host->max_lun = CXLFLASH_MAX_NUM_LUNS_PER_TARGET; 2287 host->max_channel = NUM_FC_PORTS - 1; 2288 host->unique_id = host->host_no; 2289 host->max_cmd_len = CXLFLASH_MAX_CDB_LEN; 2290 2291 cfg = (struct cxlflash_cfg *)host->hostdata; 2292 cfg->host = host; 2293 rc = alloc_mem(cfg); 2294 if (rc) { 2295 dev_err(&pdev->dev, "%s: call to alloc_mem failed!\n", 2296 __func__); 2297 rc = -ENOMEM; 2298 scsi_host_put(cfg->host); 2299 goto out; 2300 } 2301 2302 cfg->init_state = INIT_STATE_NONE; 2303 cfg->dev = pdev; 2304 cfg->cxl_fops = cxlflash_cxl_fops; 2305 2306 /* 2307 * The promoted LUNs move to the top of the LUN table. The rest stay 2308 * on the bottom half. The bottom half grows from the end 2309 * (index = 255), whereas the top half grows from the beginning 2310 * (index = 0). 2311 */ 2312 cfg->promote_lun_index = 0; 2313 cfg->last_lun_index[0] = CXLFLASH_NUM_VLUNS/2 - 1; 2314 cfg->last_lun_index[1] = CXLFLASH_NUM_VLUNS/2 - 1; 2315 2316 cfg->dev_id = (struct pci_device_id *)dev_id; 2317 2318 init_waitqueue_head(&cfg->tmf_waitq); 2319 init_waitqueue_head(&cfg->reset_waitq); 2320 2321 INIT_WORK(&cfg->work_q, cxlflash_worker_thread); 2322 cfg->lr_state = LINK_RESET_INVALID; 2323 cfg->lr_port = -1; 2324 spin_lock_init(&cfg->tmf_slock); 2325 mutex_init(&cfg->ctx_tbl_list_mutex); 2326 mutex_init(&cfg->ctx_recovery_mutex); 2327 init_rwsem(&cfg->ioctl_rwsem); 2328 INIT_LIST_HEAD(&cfg->ctx_err_recovery); 2329 INIT_LIST_HEAD(&cfg->lluns); 2330 2331 pci_set_drvdata(pdev, cfg); 2332 2333 cfg->cxl_afu = cxl_pci_to_afu(pdev); 2334 2335 rc = init_pci(cfg); 2336 if (rc) { 2337 dev_err(&pdev->dev, "%s: call to init_pci " 2338 "failed rc=%d!\n", __func__, rc); 2339 goto out_remove; 2340 } 2341 cfg->init_state = INIT_STATE_PCI; 2342 2343 rc = init_afu(cfg); 2344 if (rc) { 2345 dev_err(&pdev->dev, "%s: call to init_afu " 2346 "failed rc=%d!\n", __func__, rc); 2347 goto out_remove; 2348 } 2349 cfg->init_state = INIT_STATE_AFU; 2350 2351 rc = init_scsi(cfg); 2352 if (rc) { 2353 dev_err(&pdev->dev, "%s: call to init_scsi " 2354 "failed rc=%d!\n", __func__, rc); 2355 goto out_remove; 2356 } 2357 cfg->init_state = INIT_STATE_SCSI; 2358 2359 out: 2360 pr_debug("%s: returning rc=%d\n", __func__, rc); 2361 return rc; 2362 2363 out_remove: 2364 cxlflash_remove(pdev); 2365 goto out; 2366 } 2367 2368 /** 2369 * cxlflash_pci_error_detected() - called when a PCI error is detected 2370 * @pdev: PCI device struct. 2371 * @state: PCI channel state. 2372 * 2373 * When an EEH occurs during an active reset, wait until the reset is 2374 * complete and then take action based upon the device state. 2375 * 2376 * Return: PCI_ERS_RESULT_NEED_RESET or PCI_ERS_RESULT_DISCONNECT 2377 */ 2378 static pci_ers_result_t cxlflash_pci_error_detected(struct pci_dev *pdev, 2379 pci_channel_state_t state) 2380 { 2381 int rc = 0; 2382 struct cxlflash_cfg *cfg = pci_get_drvdata(pdev); 2383 struct device *dev = &cfg->dev->dev; 2384 2385 dev_dbg(dev, "%s: pdev=%p state=%u\n", __func__, pdev, state); 2386 2387 switch (state) { 2388 case pci_channel_io_frozen: 2389 wait_event(cfg->reset_waitq, cfg->state != STATE_RESET); 2390 if (cfg->state == STATE_FAILTERM) 2391 return PCI_ERS_RESULT_DISCONNECT; 2392 2393 cfg->state = STATE_RESET; 2394 scsi_block_requests(cfg->host); 2395 drain_ioctls(cfg); 2396 rc = cxlflash_mark_contexts_error(cfg); 2397 if (unlikely(rc)) 2398 dev_err(dev, "%s: Failed to mark user contexts!(%d)\n", 2399 __func__, rc); 2400 term_afu(cfg); 2401 return PCI_ERS_RESULT_NEED_RESET; 2402 case pci_channel_io_perm_failure: 2403 cfg->state = STATE_FAILTERM; 2404 wake_up_all(&cfg->reset_waitq); 2405 scsi_unblock_requests(cfg->host); 2406 return PCI_ERS_RESULT_DISCONNECT; 2407 default: 2408 break; 2409 } 2410 return PCI_ERS_RESULT_NEED_RESET; 2411 } 2412 2413 /** 2414 * cxlflash_pci_slot_reset() - called when PCI slot has been reset 2415 * @pdev: PCI device struct. 2416 * 2417 * This routine is called by the pci error recovery code after the PCI 2418 * slot has been reset, just before we should resume normal operations. 2419 * 2420 * Return: PCI_ERS_RESULT_RECOVERED or PCI_ERS_RESULT_DISCONNECT 2421 */ 2422 static pci_ers_result_t cxlflash_pci_slot_reset(struct pci_dev *pdev) 2423 { 2424 int rc = 0; 2425 struct cxlflash_cfg *cfg = pci_get_drvdata(pdev); 2426 struct device *dev = &cfg->dev->dev; 2427 2428 dev_dbg(dev, "%s: pdev=%p\n", __func__, pdev); 2429 2430 rc = init_afu(cfg); 2431 if (unlikely(rc)) { 2432 dev_err(dev, "%s: EEH recovery failed! (%d)\n", __func__, rc); 2433 return PCI_ERS_RESULT_DISCONNECT; 2434 } 2435 2436 return PCI_ERS_RESULT_RECOVERED; 2437 } 2438 2439 /** 2440 * cxlflash_pci_resume() - called when normal operation can resume 2441 * @pdev: PCI device struct 2442 */ 2443 static void cxlflash_pci_resume(struct pci_dev *pdev) 2444 { 2445 struct cxlflash_cfg *cfg = pci_get_drvdata(pdev); 2446 struct device *dev = &cfg->dev->dev; 2447 2448 dev_dbg(dev, "%s: pdev=%p\n", __func__, pdev); 2449 2450 cfg->state = STATE_NORMAL; 2451 wake_up_all(&cfg->reset_waitq); 2452 scsi_unblock_requests(cfg->host); 2453 } 2454 2455 static const struct pci_error_handlers cxlflash_err_handler = { 2456 .error_detected = cxlflash_pci_error_detected, 2457 .slot_reset = cxlflash_pci_slot_reset, 2458 .resume = cxlflash_pci_resume, 2459 }; 2460 2461 /* 2462 * PCI device structure 2463 */ 2464 static struct pci_driver cxlflash_driver = { 2465 .name = CXLFLASH_NAME, 2466 .id_table = cxlflash_pci_table, 2467 .probe = cxlflash_probe, 2468 .remove = cxlflash_remove, 2469 .shutdown = cxlflash_remove, 2470 .err_handler = &cxlflash_err_handler, 2471 }; 2472 2473 /** 2474 * init_cxlflash() - module entry point 2475 * 2476 * Return: 0 on success, -errno on failure 2477 */ 2478 static int __init init_cxlflash(void) 2479 { 2480 pr_info("%s: %s\n", __func__, CXLFLASH_ADAPTER_NAME); 2481 2482 cxlflash_list_init(); 2483 2484 return pci_register_driver(&cxlflash_driver); 2485 } 2486 2487 /** 2488 * exit_cxlflash() - module exit point 2489 */ 2490 static void __exit exit_cxlflash(void) 2491 { 2492 cxlflash_term_global_luns(); 2493 cxlflash_free_errpage(); 2494 2495 pci_unregister_driver(&cxlflash_driver); 2496 } 2497 2498 module_init(init_cxlflash); 2499 module_exit(exit_cxlflash); 2500