1 /* SPDX-License-Identifier: BSD-3-Clause */ 2 /* Copyright (c) 2020, Intel Corporation 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, 9 * this list of conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * 3. Neither the name of the Intel Corporation nor the names of its 16 * contributors may be used to endorse or promote products derived from 17 * this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 */ 31 /*$FreeBSD$*/ 32 33 #include "ice_common.h" 34 35 #define ICE_CQ_INIT_REGS(qinfo, prefix) \ 36 do { \ 37 (qinfo)->sq.head = prefix##_ATQH; \ 38 (qinfo)->sq.tail = prefix##_ATQT; \ 39 (qinfo)->sq.len = prefix##_ATQLEN; \ 40 (qinfo)->sq.bah = prefix##_ATQBAH; \ 41 (qinfo)->sq.bal = prefix##_ATQBAL; \ 42 (qinfo)->sq.len_mask = prefix##_ATQLEN_ATQLEN_M; \ 43 (qinfo)->sq.len_ena_mask = prefix##_ATQLEN_ATQENABLE_M; \ 44 (qinfo)->sq.len_crit_mask = prefix##_ATQLEN_ATQCRIT_M; \ 45 (qinfo)->sq.head_mask = prefix##_ATQH_ATQH_M; \ 46 (qinfo)->rq.head = prefix##_ARQH; \ 47 (qinfo)->rq.tail = prefix##_ARQT; \ 48 (qinfo)->rq.len = prefix##_ARQLEN; \ 49 (qinfo)->rq.bah = prefix##_ARQBAH; \ 50 (qinfo)->rq.bal = prefix##_ARQBAL; \ 51 (qinfo)->rq.len_mask = prefix##_ARQLEN_ARQLEN_M; \ 52 (qinfo)->rq.len_ena_mask = prefix##_ARQLEN_ARQENABLE_M; \ 53 (qinfo)->rq.len_crit_mask = prefix##_ARQLEN_ARQCRIT_M; \ 54 (qinfo)->rq.head_mask = prefix##_ARQH_ARQH_M; \ 55 } while (0) 56 57 /** 58 * ice_adminq_init_regs - Initialize AdminQ registers 59 * @hw: pointer to the hardware structure 60 * 61 * This assumes the alloc_sq and alloc_rq functions have already been called 62 */ 63 static void ice_adminq_init_regs(struct ice_hw *hw) 64 { 65 struct ice_ctl_q_info *cq = &hw->adminq; 66 67 ice_debug(hw, ICE_DBG_TRACE, "%s\n", __func__); 68 69 ICE_CQ_INIT_REGS(cq, PF_FW); 70 } 71 72 /** 73 * ice_mailbox_init_regs - Initialize Mailbox registers 74 * @hw: pointer to the hardware structure 75 * 76 * This assumes the alloc_sq and alloc_rq functions have already been called 77 */ 78 static void ice_mailbox_init_regs(struct ice_hw *hw) 79 { 80 struct ice_ctl_q_info *cq = &hw->mailboxq; 81 82 ICE_CQ_INIT_REGS(cq, PF_MBX); 83 } 84 85 /** 86 * ice_check_sq_alive 87 * @hw: pointer to the HW struct 88 * @cq: pointer to the specific Control queue 89 * 90 * Returns true if Queue is enabled else false. 91 */ 92 bool ice_check_sq_alive(struct ice_hw *hw, struct ice_ctl_q_info *cq) 93 { 94 /* check both queue-length and queue-enable fields */ 95 if (cq->sq.len && cq->sq.len_mask && cq->sq.len_ena_mask) 96 return (rd32(hw, cq->sq.len) & (cq->sq.len_mask | 97 cq->sq.len_ena_mask)) == 98 (cq->num_sq_entries | cq->sq.len_ena_mask); 99 100 return false; 101 } 102 103 /** 104 * ice_alloc_ctrlq_sq_ring - Allocate Control Transmit Queue (ATQ) rings 105 * @hw: pointer to the hardware structure 106 * @cq: pointer to the specific Control queue 107 */ 108 static enum ice_status 109 ice_alloc_ctrlq_sq_ring(struct ice_hw *hw, struct ice_ctl_q_info *cq) 110 { 111 size_t size = cq->num_sq_entries * sizeof(struct ice_aq_desc); 112 113 cq->sq.desc_buf.va = ice_alloc_dma_mem(hw, &cq->sq.desc_buf, size); 114 if (!cq->sq.desc_buf.va) 115 return ICE_ERR_NO_MEMORY; 116 117 cq->sq.cmd_buf = ice_calloc(hw, cq->num_sq_entries, 118 sizeof(struct ice_sq_cd)); 119 if (!cq->sq.cmd_buf) { 120 ice_free_dma_mem(hw, &cq->sq.desc_buf); 121 return ICE_ERR_NO_MEMORY; 122 } 123 124 return ICE_SUCCESS; 125 } 126 127 /** 128 * ice_alloc_ctrlq_rq_ring - Allocate Control Receive Queue (ARQ) rings 129 * @hw: pointer to the hardware structure 130 * @cq: pointer to the specific Control queue 131 */ 132 static enum ice_status 133 ice_alloc_ctrlq_rq_ring(struct ice_hw *hw, struct ice_ctl_q_info *cq) 134 { 135 size_t size = cq->num_rq_entries * sizeof(struct ice_aq_desc); 136 137 cq->rq.desc_buf.va = ice_alloc_dma_mem(hw, &cq->rq.desc_buf, size); 138 if (!cq->rq.desc_buf.va) 139 return ICE_ERR_NO_MEMORY; 140 return ICE_SUCCESS; 141 } 142 143 /** 144 * ice_free_cq_ring - Free control queue ring 145 * @hw: pointer to the hardware structure 146 * @ring: pointer to the specific control queue ring 147 * 148 * This assumes the posted buffers have already been cleaned 149 * and de-allocated 150 */ 151 static void ice_free_cq_ring(struct ice_hw *hw, struct ice_ctl_q_ring *ring) 152 { 153 ice_free_dma_mem(hw, &ring->desc_buf); 154 } 155 156 /** 157 * ice_alloc_rq_bufs - Allocate pre-posted buffers for the ARQ 158 * @hw: pointer to the hardware structure 159 * @cq: pointer to the specific Control queue 160 */ 161 static enum ice_status 162 ice_alloc_rq_bufs(struct ice_hw *hw, struct ice_ctl_q_info *cq) 163 { 164 int i; 165 166 /* We'll be allocating the buffer info memory first, then we can 167 * allocate the mapped buffers for the event processing 168 */ 169 cq->rq.dma_head = ice_calloc(hw, cq->num_rq_entries, 170 sizeof(cq->rq.desc_buf)); 171 if (!cq->rq.dma_head) 172 return ICE_ERR_NO_MEMORY; 173 cq->rq.r.rq_bi = (struct ice_dma_mem *)cq->rq.dma_head; 174 175 /* allocate the mapped buffers */ 176 for (i = 0; i < cq->num_rq_entries; i++) { 177 struct ice_aq_desc *desc; 178 struct ice_dma_mem *bi; 179 180 bi = &cq->rq.r.rq_bi[i]; 181 bi->va = ice_alloc_dma_mem(hw, bi, cq->rq_buf_size); 182 if (!bi->va) 183 goto unwind_alloc_rq_bufs; 184 185 /* now configure the descriptors for use */ 186 desc = ICE_CTL_Q_DESC(cq->rq, i); 187 188 desc->flags = CPU_TO_LE16(ICE_AQ_FLAG_BUF); 189 if (cq->rq_buf_size > ICE_AQ_LG_BUF) 190 desc->flags |= CPU_TO_LE16(ICE_AQ_FLAG_LB); 191 desc->opcode = 0; 192 /* This is in accordance with Admin queue design, there is no 193 * register for buffer size configuration 194 */ 195 desc->datalen = CPU_TO_LE16(bi->size); 196 desc->retval = 0; 197 desc->cookie_high = 0; 198 desc->cookie_low = 0; 199 desc->params.generic.addr_high = 200 CPU_TO_LE32(ICE_HI_DWORD(bi->pa)); 201 desc->params.generic.addr_low = 202 CPU_TO_LE32(ICE_LO_DWORD(bi->pa)); 203 desc->params.generic.param0 = 0; 204 desc->params.generic.param1 = 0; 205 } 206 return ICE_SUCCESS; 207 208 unwind_alloc_rq_bufs: 209 /* don't try to free the one that failed... */ 210 i--; 211 for (; i >= 0; i--) 212 ice_free_dma_mem(hw, &cq->rq.r.rq_bi[i]); 213 cq->rq.r.rq_bi = NULL; 214 ice_free(hw, cq->rq.dma_head); 215 cq->rq.dma_head = NULL; 216 217 return ICE_ERR_NO_MEMORY; 218 } 219 220 /** 221 * ice_alloc_sq_bufs - Allocate empty buffer structs for the ATQ 222 * @hw: pointer to the hardware structure 223 * @cq: pointer to the specific Control queue 224 */ 225 static enum ice_status 226 ice_alloc_sq_bufs(struct ice_hw *hw, struct ice_ctl_q_info *cq) 227 { 228 int i; 229 230 /* No mapped memory needed yet, just the buffer info structures */ 231 cq->sq.dma_head = ice_calloc(hw, cq->num_sq_entries, 232 sizeof(cq->sq.desc_buf)); 233 if (!cq->sq.dma_head) 234 return ICE_ERR_NO_MEMORY; 235 cq->sq.r.sq_bi = (struct ice_dma_mem *)cq->sq.dma_head; 236 237 /* allocate the mapped buffers */ 238 for (i = 0; i < cq->num_sq_entries; i++) { 239 struct ice_dma_mem *bi; 240 241 bi = &cq->sq.r.sq_bi[i]; 242 bi->va = ice_alloc_dma_mem(hw, bi, cq->sq_buf_size); 243 if (!bi->va) 244 goto unwind_alloc_sq_bufs; 245 } 246 return ICE_SUCCESS; 247 248 unwind_alloc_sq_bufs: 249 /* don't try to free the one that failed... */ 250 i--; 251 for (; i >= 0; i--) 252 ice_free_dma_mem(hw, &cq->sq.r.sq_bi[i]); 253 cq->sq.r.sq_bi = NULL; 254 ice_free(hw, cq->sq.dma_head); 255 cq->sq.dma_head = NULL; 256 257 return ICE_ERR_NO_MEMORY; 258 } 259 260 static enum ice_status 261 ice_cfg_cq_regs(struct ice_hw *hw, struct ice_ctl_q_ring *ring, u16 num_entries) 262 { 263 /* Clear Head and Tail */ 264 wr32(hw, ring->head, 0); 265 wr32(hw, ring->tail, 0); 266 267 /* set starting point */ 268 wr32(hw, ring->len, (num_entries | ring->len_ena_mask)); 269 wr32(hw, ring->bal, ICE_LO_DWORD(ring->desc_buf.pa)); 270 wr32(hw, ring->bah, ICE_HI_DWORD(ring->desc_buf.pa)); 271 272 /* Check one register to verify that config was applied */ 273 if (rd32(hw, ring->bal) != ICE_LO_DWORD(ring->desc_buf.pa)) 274 return ICE_ERR_AQ_ERROR; 275 276 return ICE_SUCCESS; 277 } 278 279 /** 280 * ice_cfg_sq_regs - configure Control ATQ registers 281 * @hw: pointer to the hardware structure 282 * @cq: pointer to the specific Control queue 283 * 284 * Configure base address and length registers for the transmit queue 285 */ 286 static enum ice_status 287 ice_cfg_sq_regs(struct ice_hw *hw, struct ice_ctl_q_info *cq) 288 { 289 return ice_cfg_cq_regs(hw, &cq->sq, cq->num_sq_entries); 290 } 291 292 /** 293 * ice_cfg_rq_regs - configure Control ARQ register 294 * @hw: pointer to the hardware structure 295 * @cq: pointer to the specific Control queue 296 * 297 * Configure base address and length registers for the receive (event queue) 298 */ 299 static enum ice_status 300 ice_cfg_rq_regs(struct ice_hw *hw, struct ice_ctl_q_info *cq) 301 { 302 enum ice_status status; 303 304 status = ice_cfg_cq_regs(hw, &cq->rq, cq->num_rq_entries); 305 if (status) 306 return status; 307 308 /* Update tail in the HW to post pre-allocated buffers */ 309 wr32(hw, cq->rq.tail, (u32)(cq->num_rq_entries - 1)); 310 311 return ICE_SUCCESS; 312 } 313 314 #define ICE_FREE_CQ_BUFS(hw, qi, ring) \ 315 do { \ 316 /* free descriptors */ \ 317 if ((qi)->ring.r.ring##_bi) { \ 318 int i; \ 319 \ 320 for (i = 0; i < (qi)->num_##ring##_entries; i++) \ 321 if ((qi)->ring.r.ring##_bi[i].pa) \ 322 ice_free_dma_mem((hw), \ 323 &(qi)->ring.r.ring##_bi[i]); \ 324 } \ 325 /* free the buffer info list */ \ 326 if ((qi)->ring.cmd_buf) \ 327 ice_free(hw, (qi)->ring.cmd_buf); \ 328 /* free DMA head */ \ 329 ice_free(hw, (qi)->ring.dma_head); \ 330 } while (0) 331 332 /** 333 * ice_init_sq - main initialization routine for Control ATQ 334 * @hw: pointer to the hardware structure 335 * @cq: pointer to the specific Control queue 336 * 337 * This is the main initialization routine for the Control Send Queue 338 * Prior to calling this function, the driver *MUST* set the following fields 339 * in the cq->structure: 340 * - cq->num_sq_entries 341 * - cq->sq_buf_size 342 * 343 * Do *NOT* hold the lock when calling this as the memory allocation routines 344 * called are not going to be atomic context safe 345 */ 346 static enum ice_status ice_init_sq(struct ice_hw *hw, struct ice_ctl_q_info *cq) 347 { 348 enum ice_status ret_code; 349 350 ice_debug(hw, ICE_DBG_TRACE, "%s\n", __func__); 351 352 if (cq->sq.count > 0) { 353 /* queue already initialized */ 354 ret_code = ICE_ERR_NOT_READY; 355 goto init_ctrlq_exit; 356 } 357 358 /* verify input for valid configuration */ 359 if (!cq->num_sq_entries || !cq->sq_buf_size) { 360 ret_code = ICE_ERR_CFG; 361 goto init_ctrlq_exit; 362 } 363 364 cq->sq.next_to_use = 0; 365 cq->sq.next_to_clean = 0; 366 367 /* allocate the ring memory */ 368 ret_code = ice_alloc_ctrlq_sq_ring(hw, cq); 369 if (ret_code) 370 goto init_ctrlq_exit; 371 372 /* allocate buffers in the rings */ 373 ret_code = ice_alloc_sq_bufs(hw, cq); 374 if (ret_code) 375 goto init_ctrlq_free_rings; 376 377 /* initialize base registers */ 378 ret_code = ice_cfg_sq_regs(hw, cq); 379 if (ret_code) 380 goto init_ctrlq_free_rings; 381 382 /* success! */ 383 cq->sq.count = cq->num_sq_entries; 384 goto init_ctrlq_exit; 385 386 init_ctrlq_free_rings: 387 ICE_FREE_CQ_BUFS(hw, cq, sq); 388 ice_free_cq_ring(hw, &cq->sq); 389 390 init_ctrlq_exit: 391 return ret_code; 392 } 393 394 /** 395 * ice_init_rq - initialize ARQ 396 * @hw: pointer to the hardware structure 397 * @cq: pointer to the specific Control queue 398 * 399 * The main initialization routine for the Admin Receive (Event) Queue. 400 * Prior to calling this function, the driver *MUST* set the following fields 401 * in the cq->structure: 402 * - cq->num_rq_entries 403 * - cq->rq_buf_size 404 * 405 * Do *NOT* hold the lock when calling this as the memory allocation routines 406 * called are not going to be atomic context safe 407 */ 408 static enum ice_status ice_init_rq(struct ice_hw *hw, struct ice_ctl_q_info *cq) 409 { 410 enum ice_status ret_code; 411 412 ice_debug(hw, ICE_DBG_TRACE, "%s\n", __func__); 413 414 if (cq->rq.count > 0) { 415 /* queue already initialized */ 416 ret_code = ICE_ERR_NOT_READY; 417 goto init_ctrlq_exit; 418 } 419 420 /* verify input for valid configuration */ 421 if (!cq->num_rq_entries || !cq->rq_buf_size) { 422 ret_code = ICE_ERR_CFG; 423 goto init_ctrlq_exit; 424 } 425 426 cq->rq.next_to_use = 0; 427 cq->rq.next_to_clean = 0; 428 429 /* allocate the ring memory */ 430 ret_code = ice_alloc_ctrlq_rq_ring(hw, cq); 431 if (ret_code) 432 goto init_ctrlq_exit; 433 434 /* allocate buffers in the rings */ 435 ret_code = ice_alloc_rq_bufs(hw, cq); 436 if (ret_code) 437 goto init_ctrlq_free_rings; 438 439 /* initialize base registers */ 440 ret_code = ice_cfg_rq_regs(hw, cq); 441 if (ret_code) 442 goto init_ctrlq_free_rings; 443 444 /* success! */ 445 cq->rq.count = cq->num_rq_entries; 446 goto init_ctrlq_exit; 447 448 init_ctrlq_free_rings: 449 ICE_FREE_CQ_BUFS(hw, cq, rq); 450 ice_free_cq_ring(hw, &cq->rq); 451 452 init_ctrlq_exit: 453 return ret_code; 454 } 455 456 /** 457 * ice_shutdown_sq - shutdown the Control ATQ 458 * @hw: pointer to the hardware structure 459 * @cq: pointer to the specific Control queue 460 * 461 * The main shutdown routine for the Control Transmit Queue 462 */ 463 static enum ice_status 464 ice_shutdown_sq(struct ice_hw *hw, struct ice_ctl_q_info *cq) 465 { 466 enum ice_status ret_code = ICE_SUCCESS; 467 468 ice_debug(hw, ICE_DBG_TRACE, "%s\n", __func__); 469 470 ice_acquire_lock(&cq->sq_lock); 471 472 if (!cq->sq.count) { 473 ret_code = ICE_ERR_NOT_READY; 474 goto shutdown_sq_out; 475 } 476 477 /* Stop firmware AdminQ processing */ 478 wr32(hw, cq->sq.head, 0); 479 wr32(hw, cq->sq.tail, 0); 480 wr32(hw, cq->sq.len, 0); 481 wr32(hw, cq->sq.bal, 0); 482 wr32(hw, cq->sq.bah, 0); 483 484 cq->sq.count = 0; /* to indicate uninitialized queue */ 485 486 /* free ring buffers and the ring itself */ 487 ICE_FREE_CQ_BUFS(hw, cq, sq); 488 ice_free_cq_ring(hw, &cq->sq); 489 490 shutdown_sq_out: 491 ice_release_lock(&cq->sq_lock); 492 return ret_code; 493 } 494 495 /** 496 * ice_aq_ver_check - Check the reported AQ API version. 497 * @hw: pointer to the hardware structure 498 * 499 * Checks if the driver should load on a given AQ API version. 500 * 501 * Return: 'true' iff the driver should attempt to load. 'false' otherwise. 502 */ 503 static bool ice_aq_ver_check(struct ice_hw *hw) 504 { 505 if (hw->api_maj_ver > EXP_FW_API_VER_MAJOR) { 506 /* Major API version is newer than expected, don't load */ 507 ice_warn(hw, "The driver for the device stopped because the NVM image is newer than expected. You must install the most recent version of the network driver.\n"); 508 return false; 509 } else if (hw->api_maj_ver == EXP_FW_API_VER_MAJOR) { 510 if (hw->api_min_ver > (EXP_FW_API_VER_MINOR + 2)) 511 ice_info(hw, "The driver for the device detected a newer version of the NVM image than expected. Please install the most recent version of the network driver.\n"); 512 else if ((hw->api_min_ver + 2) < EXP_FW_API_VER_MINOR) 513 ice_info(hw, "The driver for the device detected an older version of the NVM image than expected. Please update the NVM image.\n"); 514 } else { 515 /* Major API version is older than expected, log a warning */ 516 ice_info(hw, "The driver for the device detected an older version of the NVM image than expected. Please update the NVM image.\n"); 517 } 518 return true; 519 } 520 521 /** 522 * ice_shutdown_rq - shutdown Control ARQ 523 * @hw: pointer to the hardware structure 524 * @cq: pointer to the specific Control queue 525 * 526 * The main shutdown routine for the Control Receive Queue 527 */ 528 static enum ice_status 529 ice_shutdown_rq(struct ice_hw *hw, struct ice_ctl_q_info *cq) 530 { 531 enum ice_status ret_code = ICE_SUCCESS; 532 533 ice_debug(hw, ICE_DBG_TRACE, "%s\n", __func__); 534 535 ice_acquire_lock(&cq->rq_lock); 536 537 if (!cq->rq.count) { 538 ret_code = ICE_ERR_NOT_READY; 539 goto shutdown_rq_out; 540 } 541 542 /* Stop Control Queue processing */ 543 wr32(hw, cq->rq.head, 0); 544 wr32(hw, cq->rq.tail, 0); 545 wr32(hw, cq->rq.len, 0); 546 wr32(hw, cq->rq.bal, 0); 547 wr32(hw, cq->rq.bah, 0); 548 549 /* set rq.count to 0 to indicate uninitialized queue */ 550 cq->rq.count = 0; 551 552 /* free ring buffers and the ring itself */ 553 ICE_FREE_CQ_BUFS(hw, cq, rq); 554 ice_free_cq_ring(hw, &cq->rq); 555 556 shutdown_rq_out: 557 ice_release_lock(&cq->rq_lock); 558 return ret_code; 559 } 560 561 /** 562 * ice_idle_aq - stop ARQ/ATQ processing momentarily 563 * @hw: pointer to the hardware structure 564 * @cq: pointer to the specific Control queue 565 */ 566 void ice_idle_aq(struct ice_hw *hw, struct ice_ctl_q_info *cq) 567 { 568 wr32(hw, cq->sq.len, 0); 569 wr32(hw, cq->rq.len, 0); 570 571 ice_msec_delay(2, false); 572 } 573 574 /** 575 * ice_init_check_adminq - Check version for Admin Queue to know if its alive 576 * @hw: pointer to the hardware structure 577 */ 578 static enum ice_status ice_init_check_adminq(struct ice_hw *hw) 579 { 580 struct ice_ctl_q_info *cq = &hw->adminq; 581 enum ice_status status; 582 583 ice_debug(hw, ICE_DBG_TRACE, "%s\n", __func__); 584 585 status = ice_aq_get_fw_ver(hw, NULL); 586 if (status) 587 goto init_ctrlq_free_rq; 588 589 if (!ice_aq_ver_check(hw)) { 590 status = ICE_ERR_FW_API_VER; 591 goto init_ctrlq_free_rq; 592 } 593 594 return ICE_SUCCESS; 595 596 init_ctrlq_free_rq: 597 ice_shutdown_rq(hw, cq); 598 ice_shutdown_sq(hw, cq); 599 return status; 600 } 601 602 /** 603 * ice_init_ctrlq - main initialization routine for any control Queue 604 * @hw: pointer to the hardware structure 605 * @q_type: specific Control queue type 606 * 607 * Prior to calling this function, the driver *MUST* set the following fields 608 * in the cq->structure: 609 * - cq->num_sq_entries 610 * - cq->num_rq_entries 611 * - cq->rq_buf_size 612 * - cq->sq_buf_size 613 * 614 * NOTE: this function does not initialize the controlq locks 615 */ 616 static enum ice_status ice_init_ctrlq(struct ice_hw *hw, enum ice_ctl_q q_type) 617 { 618 struct ice_ctl_q_info *cq; 619 enum ice_status ret_code; 620 621 ice_debug(hw, ICE_DBG_TRACE, "%s\n", __func__); 622 623 switch (q_type) { 624 case ICE_CTL_Q_ADMIN: 625 ice_adminq_init_regs(hw); 626 cq = &hw->adminq; 627 break; 628 case ICE_CTL_Q_MAILBOX: 629 ice_mailbox_init_regs(hw); 630 cq = &hw->mailboxq; 631 break; 632 default: 633 return ICE_ERR_PARAM; 634 } 635 cq->qtype = q_type; 636 637 /* verify input for valid configuration */ 638 if (!cq->num_rq_entries || !cq->num_sq_entries || 639 !cq->rq_buf_size || !cq->sq_buf_size) { 640 return ICE_ERR_CFG; 641 } 642 643 /* setup SQ command write back timeout */ 644 cq->sq_cmd_timeout = ICE_CTL_Q_SQ_CMD_TIMEOUT; 645 646 /* allocate the ATQ */ 647 ret_code = ice_init_sq(hw, cq); 648 if (ret_code) 649 return ret_code; 650 651 /* allocate the ARQ */ 652 ret_code = ice_init_rq(hw, cq); 653 if (ret_code) 654 goto init_ctrlq_free_sq; 655 656 /* success! */ 657 return ICE_SUCCESS; 658 659 init_ctrlq_free_sq: 660 ice_shutdown_sq(hw, cq); 661 return ret_code; 662 } 663 664 /** 665 * ice_shutdown_ctrlq - shutdown routine for any control queue 666 * @hw: pointer to the hardware structure 667 * @q_type: specific Control queue type 668 * 669 * NOTE: this function does not destroy the control queue locks. 670 */ 671 static void ice_shutdown_ctrlq(struct ice_hw *hw, enum ice_ctl_q q_type) 672 { 673 struct ice_ctl_q_info *cq; 674 675 ice_debug(hw, ICE_DBG_TRACE, "%s\n", __func__); 676 677 switch (q_type) { 678 case ICE_CTL_Q_ADMIN: 679 cq = &hw->adminq; 680 if (ice_check_sq_alive(hw, cq)) 681 ice_aq_q_shutdown(hw, true); 682 break; 683 case ICE_CTL_Q_MAILBOX: 684 cq = &hw->mailboxq; 685 break; 686 default: 687 return; 688 } 689 690 ice_shutdown_sq(hw, cq); 691 ice_shutdown_rq(hw, cq); 692 } 693 694 /** 695 * ice_shutdown_all_ctrlq - shutdown routine for all control queues 696 * @hw: pointer to the hardware structure 697 * 698 * NOTE: this function does not destroy the control queue locks. The driver 699 * may call this at runtime to shutdown and later restart control queues, such 700 * as in response to a reset event. 701 */ 702 void ice_shutdown_all_ctrlq(struct ice_hw *hw) 703 { 704 ice_debug(hw, ICE_DBG_TRACE, "%s\n", __func__); 705 /* Shutdown FW admin queue */ 706 ice_shutdown_ctrlq(hw, ICE_CTL_Q_ADMIN); 707 /* Shutdown PF-VF Mailbox */ 708 ice_shutdown_ctrlq(hw, ICE_CTL_Q_MAILBOX); 709 } 710 711 /** 712 * ice_init_all_ctrlq - main initialization routine for all control queues 713 * @hw: pointer to the hardware structure 714 * 715 * Prior to calling this function, the driver MUST* set the following fields 716 * in the cq->structure for all control queues: 717 * - cq->num_sq_entries 718 * - cq->num_rq_entries 719 * - cq->rq_buf_size 720 * - cq->sq_buf_size 721 * 722 * NOTE: this function does not initialize the controlq locks. 723 */ 724 enum ice_status ice_init_all_ctrlq(struct ice_hw *hw) 725 { 726 enum ice_status status; 727 u32 retry = 0; 728 729 ice_debug(hw, ICE_DBG_TRACE, "%s\n", __func__); 730 731 /* Init FW admin queue */ 732 do { 733 status = ice_init_ctrlq(hw, ICE_CTL_Q_ADMIN); 734 if (status) 735 return status; 736 737 status = ice_init_check_adminq(hw); 738 if (status != ICE_ERR_AQ_FW_CRITICAL) 739 break; 740 741 ice_debug(hw, ICE_DBG_AQ_MSG, "Retry Admin Queue init due to FW critical error\n"); 742 ice_shutdown_ctrlq(hw, ICE_CTL_Q_ADMIN); 743 ice_msec_delay(ICE_CTL_Q_ADMIN_INIT_MSEC, true); 744 } while (retry++ < ICE_CTL_Q_ADMIN_INIT_TIMEOUT); 745 746 if (status) 747 return status; 748 /* Init Mailbox queue */ 749 return ice_init_ctrlq(hw, ICE_CTL_Q_MAILBOX); 750 } 751 752 /** 753 * ice_init_ctrlq_locks - Initialize locks for a control queue 754 * @cq: pointer to the control queue 755 * 756 * Initializes the send and receive queue locks for a given control queue. 757 */ 758 static void ice_init_ctrlq_locks(struct ice_ctl_q_info *cq) 759 { 760 ice_init_lock(&cq->sq_lock); 761 ice_init_lock(&cq->rq_lock); 762 } 763 764 /** 765 * ice_create_all_ctrlq - main initialization routine for all control queues 766 * @hw: pointer to the hardware structure 767 * 768 * Prior to calling this function, the driver *MUST* set the following fields 769 * in the cq->structure for all control queues: 770 * - cq->num_sq_entries 771 * - cq->num_rq_entries 772 * - cq->rq_buf_size 773 * - cq->sq_buf_size 774 * 775 * This function creates all the control queue locks and then calls 776 * ice_init_all_ctrlq. It should be called once during driver load. If the 777 * driver needs to re-initialize control queues at run time it should call 778 * ice_init_all_ctrlq instead. 779 */ 780 enum ice_status ice_create_all_ctrlq(struct ice_hw *hw) 781 { 782 ice_init_ctrlq_locks(&hw->adminq); 783 ice_init_ctrlq_locks(&hw->mailboxq); 784 785 return ice_init_all_ctrlq(hw); 786 } 787 788 /** 789 * ice_destroy_ctrlq_locks - Destroy locks for a control queue 790 * @cq: pointer to the control queue 791 * 792 * Destroys the send and receive queue locks for a given control queue. 793 */ 794 static void ice_destroy_ctrlq_locks(struct ice_ctl_q_info *cq) 795 { 796 ice_destroy_lock(&cq->sq_lock); 797 ice_destroy_lock(&cq->rq_lock); 798 } 799 800 /** 801 * ice_destroy_all_ctrlq - exit routine for all control queues 802 * @hw: pointer to the hardware structure 803 * 804 * This function shuts down all the control queues and then destroys the 805 * control queue locks. It should be called once during driver unload. The 806 * driver should call ice_shutdown_all_ctrlq if it needs to shut down and 807 * reinitialize control queues, such as in response to a reset event. 808 */ 809 void ice_destroy_all_ctrlq(struct ice_hw *hw) 810 { 811 /* shut down all the control queues first */ 812 ice_shutdown_all_ctrlq(hw); 813 814 ice_destroy_ctrlq_locks(&hw->adminq); 815 ice_destroy_ctrlq_locks(&hw->mailboxq); 816 } 817 818 /** 819 * ice_clean_sq - cleans Admin send queue (ATQ) 820 * @hw: pointer to the hardware structure 821 * @cq: pointer to the specific Control queue 822 * 823 * returns the number of free desc 824 */ 825 static u16 ice_clean_sq(struct ice_hw *hw, struct ice_ctl_q_info *cq) 826 { 827 struct ice_ctl_q_ring *sq = &cq->sq; 828 u16 ntc = sq->next_to_clean; 829 struct ice_sq_cd *details; 830 struct ice_aq_desc *desc; 831 832 desc = ICE_CTL_Q_DESC(*sq, ntc); 833 details = ICE_CTL_Q_DETAILS(*sq, ntc); 834 835 while (rd32(hw, cq->sq.head) != ntc) { 836 ice_debug(hw, ICE_DBG_AQ_MSG, "ntc %d head %d.\n", ntc, rd32(hw, cq->sq.head)); 837 ice_memset(desc, 0, sizeof(*desc), ICE_DMA_MEM); 838 ice_memset(details, 0, sizeof(*details), ICE_NONDMA_MEM); 839 ntc++; 840 if (ntc == sq->count) 841 ntc = 0; 842 desc = ICE_CTL_Q_DESC(*sq, ntc); 843 details = ICE_CTL_Q_DETAILS(*sq, ntc); 844 } 845 846 sq->next_to_clean = ntc; 847 848 return ICE_CTL_Q_DESC_UNUSED(sq); 849 } 850 851 /** 852 * ice_debug_cq 853 * @hw: pointer to the hardware structure 854 * @desc: pointer to control queue descriptor 855 * @buf: pointer to command buffer 856 * @buf_len: max length of buf 857 * 858 * Dumps debug log about control command with descriptor contents. 859 */ 860 static void ice_debug_cq(struct ice_hw *hw, void *desc, void *buf, u16 buf_len) 861 { 862 struct ice_aq_desc *cq_desc = (struct ice_aq_desc *)desc; 863 u16 datalen, flags; 864 865 if (!((ICE_DBG_AQ_DESC | ICE_DBG_AQ_DESC_BUF) & hw->debug_mask)) 866 return; 867 868 if (!desc) 869 return; 870 871 datalen = LE16_TO_CPU(cq_desc->datalen); 872 flags = LE16_TO_CPU(cq_desc->flags); 873 874 ice_debug(hw, ICE_DBG_AQ_DESC, "CQ CMD: opcode 0x%04X, flags 0x%04X, datalen 0x%04X, retval 0x%04X\n", 875 LE16_TO_CPU(cq_desc->opcode), flags, datalen, 876 LE16_TO_CPU(cq_desc->retval)); 877 ice_debug(hw, ICE_DBG_AQ_DESC, "\tcookie (h,l) 0x%08X 0x%08X\n", 878 LE32_TO_CPU(cq_desc->cookie_high), 879 LE32_TO_CPU(cq_desc->cookie_low)); 880 ice_debug(hw, ICE_DBG_AQ_DESC, "\tparam (0,1) 0x%08X 0x%08X\n", 881 LE32_TO_CPU(cq_desc->params.generic.param0), 882 LE32_TO_CPU(cq_desc->params.generic.param1)); 883 ice_debug(hw, ICE_DBG_AQ_DESC, "\taddr (h,l) 0x%08X 0x%08X\n", 884 LE32_TO_CPU(cq_desc->params.generic.addr_high), 885 LE32_TO_CPU(cq_desc->params.generic.addr_low)); 886 /* Dump buffer iff 1) one exists and 2) is either a response indicated 887 * by the DD and/or CMP flag set or a command with the RD flag set. 888 */ 889 if (buf && cq_desc->datalen != 0 && 890 (flags & (ICE_AQ_FLAG_DD | ICE_AQ_FLAG_CMP) || 891 flags & ICE_AQ_FLAG_RD)) { 892 ice_debug(hw, ICE_DBG_AQ_DESC_BUF, "Buffer:\n"); 893 ice_debug_array(hw, ICE_DBG_AQ_DESC_BUF, 16, 1, (u8 *)buf, 894 MIN_T(u16, buf_len, datalen)); 895 } 896 } 897 898 /** 899 * ice_sq_done - check if FW has processed the Admin Send Queue (ATQ) 900 * @hw: pointer to the HW struct 901 * @cq: pointer to the specific Control queue 902 * 903 * Returns true if the firmware has processed all descriptors on the 904 * admin send queue. Returns false if there are still requests pending. 905 */ 906 bool ice_sq_done(struct ice_hw *hw, struct ice_ctl_q_info *cq) 907 { 908 /* AQ designers suggest use of head for better 909 * timing reliability than DD bit 910 */ 911 return rd32(hw, cq->sq.head) == cq->sq.next_to_use; 912 } 913 914 /** 915 * ice_sq_send_cmd_nolock - send command to Control Queue (ATQ) 916 * @hw: pointer to the HW struct 917 * @cq: pointer to the specific Control queue 918 * @desc: prefilled descriptor describing the command (non DMA mem) 919 * @buf: buffer to use for indirect commands (or NULL for direct commands) 920 * @buf_size: size of buffer for indirect commands (or 0 for direct commands) 921 * @cd: pointer to command details structure 922 * 923 * This is the main send command routine for the ATQ. It runs the queue, 924 * cleans the queue, etc. 925 */ 926 static enum ice_status 927 ice_sq_send_cmd_nolock(struct ice_hw *hw, struct ice_ctl_q_info *cq, 928 struct ice_aq_desc *desc, void *buf, u16 buf_size, 929 struct ice_sq_cd *cd) 930 { 931 struct ice_dma_mem *dma_buf = NULL; 932 struct ice_aq_desc *desc_on_ring; 933 bool cmd_completed = false; 934 enum ice_status status = ICE_SUCCESS; 935 struct ice_sq_cd *details; 936 u32 total_delay = 0; 937 u16 retval = 0; 938 u32 val = 0; 939 940 /* if reset is in progress return a soft error */ 941 if (hw->reset_ongoing) 942 return ICE_ERR_RESET_ONGOING; 943 944 cq->sq_last_status = ICE_AQ_RC_OK; 945 946 if (!cq->sq.count) { 947 ice_debug(hw, ICE_DBG_AQ_MSG, "Control Send queue not initialized.\n"); 948 status = ICE_ERR_AQ_EMPTY; 949 goto sq_send_command_error; 950 } 951 952 if ((buf && !buf_size) || (!buf && buf_size)) { 953 status = ICE_ERR_PARAM; 954 goto sq_send_command_error; 955 } 956 957 if (buf) { 958 if (buf_size > cq->sq_buf_size) { 959 ice_debug(hw, ICE_DBG_AQ_MSG, "Invalid buffer size for Control Send queue: %d.\n", 960 buf_size); 961 status = ICE_ERR_INVAL_SIZE; 962 goto sq_send_command_error; 963 } 964 965 desc->flags |= CPU_TO_LE16(ICE_AQ_FLAG_BUF); 966 if (buf_size > ICE_AQ_LG_BUF) 967 desc->flags |= CPU_TO_LE16(ICE_AQ_FLAG_LB); 968 } 969 970 val = rd32(hw, cq->sq.head); 971 if (val >= cq->num_sq_entries) { 972 ice_debug(hw, ICE_DBG_AQ_MSG, "head overrun at %d in the Control Send Queue ring\n", 973 val); 974 status = ICE_ERR_AQ_EMPTY; 975 goto sq_send_command_error; 976 } 977 978 details = ICE_CTL_Q_DETAILS(cq->sq, cq->sq.next_to_use); 979 if (cd) 980 *details = *cd; 981 else 982 ice_memset(details, 0, sizeof(*details), ICE_NONDMA_MEM); 983 984 /* Call clean and check queue available function to reclaim the 985 * descriptors that were processed by FW/MBX; the function returns the 986 * number of desc available. The clean function called here could be 987 * called in a separate thread in case of asynchronous completions. 988 */ 989 if (ice_clean_sq(hw, cq) == 0) { 990 ice_debug(hw, ICE_DBG_AQ_MSG, "Error: Control Send Queue is full.\n"); 991 status = ICE_ERR_AQ_FULL; 992 goto sq_send_command_error; 993 } 994 995 /* initialize the temp desc pointer with the right desc */ 996 desc_on_ring = ICE_CTL_Q_DESC(cq->sq, cq->sq.next_to_use); 997 998 /* if the desc is available copy the temp desc to the right place */ 999 ice_memcpy(desc_on_ring, desc, sizeof(*desc_on_ring), 1000 ICE_NONDMA_TO_DMA); 1001 1002 /* if buf is not NULL assume indirect command */ 1003 if (buf) { 1004 dma_buf = &cq->sq.r.sq_bi[cq->sq.next_to_use]; 1005 /* copy the user buf into the respective DMA buf */ 1006 ice_memcpy(dma_buf->va, buf, buf_size, ICE_NONDMA_TO_DMA); 1007 desc_on_ring->datalen = CPU_TO_LE16(buf_size); 1008 1009 /* Update the address values in the desc with the pa value 1010 * for respective buffer 1011 */ 1012 desc_on_ring->params.generic.addr_high = 1013 CPU_TO_LE32(ICE_HI_DWORD(dma_buf->pa)); 1014 desc_on_ring->params.generic.addr_low = 1015 CPU_TO_LE32(ICE_LO_DWORD(dma_buf->pa)); 1016 } 1017 1018 /* Debug desc and buffer */ 1019 ice_debug(hw, ICE_DBG_AQ_DESC, "ATQ: Control Send queue desc and buffer:\n"); 1020 1021 ice_debug_cq(hw, (void *)desc_on_ring, buf, buf_size); 1022 1023 (cq->sq.next_to_use)++; 1024 if (cq->sq.next_to_use == cq->sq.count) 1025 cq->sq.next_to_use = 0; 1026 wr32(hw, cq->sq.tail, cq->sq.next_to_use); 1027 1028 do { 1029 if (ice_sq_done(hw, cq)) 1030 break; 1031 1032 ice_usec_delay(ICE_CTL_Q_SQ_CMD_USEC, false); 1033 total_delay++; 1034 } while (total_delay < cq->sq_cmd_timeout); 1035 1036 /* if ready, copy the desc back to temp */ 1037 if (ice_sq_done(hw, cq)) { 1038 ice_memcpy(desc, desc_on_ring, sizeof(*desc), 1039 ICE_DMA_TO_NONDMA); 1040 if (buf) { 1041 /* get returned length to copy */ 1042 u16 copy_size = LE16_TO_CPU(desc->datalen); 1043 1044 if (copy_size > buf_size) { 1045 ice_debug(hw, ICE_DBG_AQ_MSG, "Return len %d > than buf len %d\n", 1046 copy_size, buf_size); 1047 status = ICE_ERR_AQ_ERROR; 1048 } else { 1049 ice_memcpy(buf, dma_buf->va, copy_size, 1050 ICE_DMA_TO_NONDMA); 1051 } 1052 } 1053 retval = LE16_TO_CPU(desc->retval); 1054 if (retval) { 1055 ice_debug(hw, ICE_DBG_AQ_MSG, "Control Send Queue command 0x%04X completed with error 0x%X\n", 1056 LE16_TO_CPU(desc->opcode), 1057 retval); 1058 1059 /* strip off FW internal code */ 1060 retval &= 0xff; 1061 } 1062 cmd_completed = true; 1063 if (!status && retval != ICE_AQ_RC_OK) 1064 status = ICE_ERR_AQ_ERROR; 1065 cq->sq_last_status = (enum ice_aq_err)retval; 1066 } 1067 1068 ice_debug(hw, ICE_DBG_AQ_MSG, "ATQ: desc and buffer writeback:\n"); 1069 1070 ice_debug_cq(hw, (void *)desc, buf, buf_size); 1071 1072 /* save writeback AQ if requested */ 1073 if (details->wb_desc) 1074 ice_memcpy(details->wb_desc, desc_on_ring, 1075 sizeof(*details->wb_desc), ICE_DMA_TO_NONDMA); 1076 1077 /* update the error if time out occurred */ 1078 if (!cmd_completed) { 1079 if (rd32(hw, cq->rq.len) & cq->rq.len_crit_mask || 1080 rd32(hw, cq->sq.len) & cq->sq.len_crit_mask) { 1081 ice_debug(hw, ICE_DBG_AQ_MSG, "Critical FW error.\n"); 1082 status = ICE_ERR_AQ_FW_CRITICAL; 1083 } else { 1084 ice_debug(hw, ICE_DBG_AQ_MSG, "Control Send Queue Writeback timeout.\n"); 1085 status = ICE_ERR_AQ_TIMEOUT; 1086 } 1087 } 1088 1089 sq_send_command_error: 1090 return status; 1091 } 1092 1093 /** 1094 * ice_sq_send_cmd - send command to Control Queue (ATQ) 1095 * @hw: pointer to the HW struct 1096 * @cq: pointer to the specific Control queue 1097 * @desc: prefilled descriptor describing the command (non DMA mem) 1098 * @buf: buffer to use for indirect commands (or NULL for direct commands) 1099 * @buf_size: size of buffer for indirect commands (or 0 for direct commands) 1100 * @cd: pointer to command details structure 1101 * 1102 * This is the main send command routine for the ATQ. It runs the queue, 1103 * cleans the queue, etc. 1104 */ 1105 enum ice_status 1106 ice_sq_send_cmd(struct ice_hw *hw, struct ice_ctl_q_info *cq, 1107 struct ice_aq_desc *desc, void *buf, u16 buf_size, 1108 struct ice_sq_cd *cd) 1109 { 1110 enum ice_status status = ICE_SUCCESS; 1111 1112 /* if reset is in progress return a soft error */ 1113 if (hw->reset_ongoing) 1114 return ICE_ERR_RESET_ONGOING; 1115 1116 ice_acquire_lock(&cq->sq_lock); 1117 status = ice_sq_send_cmd_nolock(hw, cq, desc, buf, buf_size, cd); 1118 ice_release_lock(&cq->sq_lock); 1119 1120 return status; 1121 } 1122 1123 /** 1124 * ice_fill_dflt_direct_cmd_desc - AQ descriptor helper function 1125 * @desc: pointer to the temp descriptor (non DMA mem) 1126 * @opcode: the opcode can be used to decide which flags to turn off or on 1127 * 1128 * Fill the desc with default values 1129 */ 1130 void ice_fill_dflt_direct_cmd_desc(struct ice_aq_desc *desc, u16 opcode) 1131 { 1132 /* zero out the desc */ 1133 ice_memset(desc, 0, sizeof(*desc), ICE_NONDMA_MEM); 1134 desc->opcode = CPU_TO_LE16(opcode); 1135 desc->flags = CPU_TO_LE16(ICE_AQ_FLAG_SI); 1136 } 1137 1138 /** 1139 * ice_clean_rq_elem 1140 * @hw: pointer to the HW struct 1141 * @cq: pointer to the specific Control queue 1142 * @e: event info from the receive descriptor, includes any buffers 1143 * @pending: number of events that could be left to process 1144 * 1145 * This function cleans one Admin Receive Queue element and returns 1146 * the contents through e. It can also return how many events are 1147 * left to process through 'pending'. 1148 */ 1149 enum ice_status 1150 ice_clean_rq_elem(struct ice_hw *hw, struct ice_ctl_q_info *cq, 1151 struct ice_rq_event_info *e, u16 *pending) 1152 { 1153 u16 ntc = cq->rq.next_to_clean; 1154 enum ice_status ret_code = ICE_SUCCESS; 1155 struct ice_aq_desc *desc; 1156 struct ice_dma_mem *bi; 1157 u16 desc_idx; 1158 u16 datalen; 1159 u16 flags; 1160 u16 ntu; 1161 1162 /* pre-clean the event info */ 1163 ice_memset(&e->desc, 0, sizeof(e->desc), ICE_NONDMA_MEM); 1164 1165 /* take the lock before we start messing with the ring */ 1166 ice_acquire_lock(&cq->rq_lock); 1167 1168 if (!cq->rq.count) { 1169 ice_debug(hw, ICE_DBG_AQ_MSG, "Control Receive queue not initialized.\n"); 1170 ret_code = ICE_ERR_AQ_EMPTY; 1171 goto clean_rq_elem_err; 1172 } 1173 1174 /* set next_to_use to head */ 1175 ntu = (u16)(rd32(hw, cq->rq.head) & cq->rq.head_mask); 1176 1177 if (ntu == ntc) { 1178 /* nothing to do - shouldn't need to update ring's values */ 1179 ret_code = ICE_ERR_AQ_NO_WORK; 1180 goto clean_rq_elem_out; 1181 } 1182 1183 /* now clean the next descriptor */ 1184 desc = ICE_CTL_Q_DESC(cq->rq, ntc); 1185 desc_idx = ntc; 1186 1187 cq->rq_last_status = (enum ice_aq_err)LE16_TO_CPU(desc->retval); 1188 flags = LE16_TO_CPU(desc->flags); 1189 if (flags & ICE_AQ_FLAG_ERR) { 1190 ret_code = ICE_ERR_AQ_ERROR; 1191 ice_debug(hw, ICE_DBG_AQ_MSG, "Control Receive Queue Event 0x%04X received with error 0x%X\n", 1192 LE16_TO_CPU(desc->opcode), 1193 cq->rq_last_status); 1194 } 1195 ice_memcpy(&e->desc, desc, sizeof(e->desc), ICE_DMA_TO_NONDMA); 1196 datalen = LE16_TO_CPU(desc->datalen); 1197 e->msg_len = MIN_T(u16, datalen, e->buf_len); 1198 if (e->msg_buf && e->msg_len) 1199 ice_memcpy(e->msg_buf, cq->rq.r.rq_bi[desc_idx].va, 1200 e->msg_len, ICE_DMA_TO_NONDMA); 1201 1202 ice_debug(hw, ICE_DBG_AQ_DESC, "ARQ: desc and buffer:\n"); 1203 1204 ice_debug_cq(hw, (void *)desc, e->msg_buf, cq->rq_buf_size); 1205 1206 /* Restore the original datalen and buffer address in the desc, 1207 * FW updates datalen to indicate the event message size 1208 */ 1209 bi = &cq->rq.r.rq_bi[ntc]; 1210 ice_memset(desc, 0, sizeof(*desc), ICE_DMA_MEM); 1211 1212 desc->flags = CPU_TO_LE16(ICE_AQ_FLAG_BUF); 1213 if (cq->rq_buf_size > ICE_AQ_LG_BUF) 1214 desc->flags |= CPU_TO_LE16(ICE_AQ_FLAG_LB); 1215 desc->datalen = CPU_TO_LE16(bi->size); 1216 desc->params.generic.addr_high = CPU_TO_LE32(ICE_HI_DWORD(bi->pa)); 1217 desc->params.generic.addr_low = CPU_TO_LE32(ICE_LO_DWORD(bi->pa)); 1218 1219 /* set tail = the last cleaned desc index. */ 1220 wr32(hw, cq->rq.tail, ntc); 1221 /* ntc is updated to tail + 1 */ 1222 ntc++; 1223 if (ntc == cq->num_rq_entries) 1224 ntc = 0; 1225 cq->rq.next_to_clean = ntc; 1226 cq->rq.next_to_use = ntu; 1227 1228 clean_rq_elem_out: 1229 /* Set pending if needed, unlock and return */ 1230 if (pending) { 1231 /* re-read HW head to calculate actual pending messages */ 1232 ntu = (u16)(rd32(hw, cq->rq.head) & cq->rq.head_mask); 1233 *pending = (u16)((ntc > ntu ? cq->rq.count : 0) + (ntu - ntc)); 1234 } 1235 clean_rq_elem_err: 1236 ice_release_lock(&cq->rq_lock); 1237 1238 return ret_code; 1239 } 1240