From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Dan Carpenter <error27@gmail.com>
Subject: drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c:624 iwl_trans_pcie_gen2_start_fw() warn: inconsistent returns '&trans_pcie->mutex'.
Date: Tue, 10 Jun 2025 08:03:30 +0800 [thread overview]
Message-ID: <202506100707.WAnP5ePA-lkp@intel.com> (raw)
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Johannes Berg <johannes.berg@intel.com>
CC: Miri Korenblit <miriam.rachel.korenblit@intel.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 19272b37aa4f83ca52bdf9c16d5d81bdd1354494
commit: 909e1be6546258efb45993851d51d86862e2e5ee wifi: iwlwifi: implement TOP reset
date: 5 weeks ago
:::::: branch date: 27 hours ago
:::::: commit date: 5 weeks ago
config: sparc-randconfig-r073-20250608 (https://download.01.org/0day-ci/archive/20250610/202506100707.WAnP5ePA-lkp@intel.com/config)
compiler: sparc64-linux-gcc (GCC) 12.4.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202506100707.WAnP5ePA-lkp@intel.com/
smatch warnings:
drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c:624 iwl_trans_pcie_gen2_start_fw() warn: inconsistent returns '&trans_pcie->mutex'.
vim +624 drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c
25628bc08d4526 Johannes Berg 2021-03-26 485
eda50cde58de73 Sara Sharon 2016-09-28 486 int iwl_trans_pcie_gen2_start_fw(struct iwl_trans *trans,
eda50cde58de73 Sara Sharon 2016-09-28 487 const struct fw_img *fw, bool run_in_rfkill)
eda50cde58de73 Sara Sharon 2016-09-28 488 {
eda50cde58de73 Sara Sharon 2016-09-28 489 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
70582b826365d2 Johannes Berg 2023-04-13 490 bool hw_rfkill, keep_ram_busy;
909e1be6546258 Johannes Berg 2025-04-30 491 bool top_reset_done = false;
eda50cde58de73 Sara Sharon 2016-09-28 492 int ret;
eda50cde58de73 Sara Sharon 2016-09-28 493
909e1be6546258 Johannes Berg 2025-04-30 494 mutex_lock(&trans_pcie->mutex);
909e1be6546258 Johannes Berg 2025-04-30 495 again:
eda50cde58de73 Sara Sharon 2016-09-28 496 /* This may fail if AMT took ownership of the device */
eda50cde58de73 Sara Sharon 2016-09-28 497 if (iwl_pcie_prepare_card_hw(trans)) {
eda50cde58de73 Sara Sharon 2016-09-28 498 IWL_WARN(trans, "Exit HW not ready\n");
909e1be6546258 Johannes Berg 2025-04-30 499 ret = -EIO;
909e1be6546258 Johannes Berg 2025-04-30 500 goto out;
eda50cde58de73 Sara Sharon 2016-09-28 501 }
eda50cde58de73 Sara Sharon 2016-09-28 502
eda50cde58de73 Sara Sharon 2016-09-28 503 iwl_enable_rfkill_int(trans);
eda50cde58de73 Sara Sharon 2016-09-28 504
eda50cde58de73 Sara Sharon 2016-09-28 505 iwl_write32(trans, CSR_INT, 0xFFFFFFFF);
eda50cde58de73 Sara Sharon 2016-09-28 506
eda50cde58de73 Sara Sharon 2016-09-28 507 /*
eda50cde58de73 Sara Sharon 2016-09-28 508 * We enabled the RF-Kill interrupt and the handler may very
eda50cde58de73 Sara Sharon 2016-09-28 509 * well be running. Disable the interrupts to make sure no other
eda50cde58de73 Sara Sharon 2016-09-28 510 * interrupt can be fired.
eda50cde58de73 Sara Sharon 2016-09-28 511 */
eda50cde58de73 Sara Sharon 2016-09-28 512 iwl_disable_interrupts(trans);
eda50cde58de73 Sara Sharon 2016-09-28 513
eda50cde58de73 Sara Sharon 2016-09-28 514 /* Make sure it finished running */
eda50cde58de73 Sara Sharon 2016-09-28 515 iwl_pcie_synchronize_irqs(trans);
eda50cde58de73 Sara Sharon 2016-09-28 516
eda50cde58de73 Sara Sharon 2016-09-28 517 /* If platform's RF_KILL switch is NOT set to KILL */
9ad8fd0b4a24e6 Johannes Berg 2017-06-20 518 hw_rfkill = iwl_pcie_check_hw_rf_kill(trans);
eda50cde58de73 Sara Sharon 2016-09-28 519 if (hw_rfkill && !run_in_rfkill) {
eda50cde58de73 Sara Sharon 2016-09-28 520 ret = -ERFKILL;
eda50cde58de73 Sara Sharon 2016-09-28 521 goto out;
eda50cde58de73 Sara Sharon 2016-09-28 522 }
eda50cde58de73 Sara Sharon 2016-09-28 523
eda50cde58de73 Sara Sharon 2016-09-28 524 /* Someone called stop_device, don't try to start_fw */
eda50cde58de73 Sara Sharon 2016-09-28 525 if (trans_pcie->is_down) {
eda50cde58de73 Sara Sharon 2016-09-28 526 IWL_WARN(trans,
eda50cde58de73 Sara Sharon 2016-09-28 527 "Can't start_fw since the HW hasn't been started\n");
eda50cde58de73 Sara Sharon 2016-09-28 528 ret = -EIO;
eda50cde58de73 Sara Sharon 2016-09-28 529 goto out;
eda50cde58de73 Sara Sharon 2016-09-28 530 }
eda50cde58de73 Sara Sharon 2016-09-28 531
eda50cde58de73 Sara Sharon 2016-09-28 532 /* make sure rfkill handshake bits are cleared */
eda50cde58de73 Sara Sharon 2016-09-28 533 iwl_write32(trans, CSR_UCODE_DRV_GP1_CLR, CSR_UCODE_SW_BIT_RFKILL);
eda50cde58de73 Sara Sharon 2016-09-28 534 iwl_write32(trans, CSR_UCODE_DRV_GP1_CLR,
eda50cde58de73 Sara Sharon 2016-09-28 535 CSR_UCODE_DRV_GP1_BIT_CMD_BLOCKED);
eda50cde58de73 Sara Sharon 2016-09-28 536
eda50cde58de73 Sara Sharon 2016-09-28 537 /* clear (again), then enable host interrupts */
eda50cde58de73 Sara Sharon 2016-09-28 538 iwl_write32(trans, CSR_INT, 0xFFFFFFFF);
eda50cde58de73 Sara Sharon 2016-09-28 539
eda50cde58de73 Sara Sharon 2016-09-28 540 ret = iwl_pcie_gen2_nic_init(trans);
eda50cde58de73 Sara Sharon 2016-09-28 541 if (ret) {
eda50cde58de73 Sara Sharon 2016-09-28 542 IWL_ERR(trans, "Unable to init nic\n");
eda50cde58de73 Sara Sharon 2016-09-28 543 goto out;
eda50cde58de73 Sara Sharon 2016-09-28 544 }
eda50cde58de73 Sara Sharon 2016-09-28 545
909e1be6546258 Johannes Berg 2025-04-30 546 if (WARN_ON(trans->do_top_reset &&
909e1be6546258 Johannes Berg 2025-04-30 547 trans->trans_cfg->device_family < IWL_DEVICE_FAMILY_SC))
909e1be6546258 Johannes Berg 2025-04-30 548 return -EINVAL;
909e1be6546258 Johannes Berg 2025-04-30 549
909e1be6546258 Johannes Berg 2025-04-30 550 /* we need to wait later - set state */
909e1be6546258 Johannes Berg 2025-04-30 551 if (trans->do_top_reset)
909e1be6546258 Johannes Berg 2025-04-30 552 trans_pcie->fw_reset_state = FW_RESET_TOP_REQUESTED;
909e1be6546258 Johannes Berg 2025-04-30 553
909e1be6546258 Johannes Berg 2025-04-30 554 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210) {
909e1be6546258 Johannes Berg 2025-04-30 555 if (!top_reset_done) {
909e1be6546258 Johannes Berg 2025-04-30 556 ret = iwl_pcie_ctxt_info_gen3_alloc(trans, fw);
909e1be6546258 Johannes Berg 2025-04-30 557 if (ret)
909e1be6546258 Johannes Berg 2025-04-30 558 goto out;
909e1be6546258 Johannes Berg 2025-04-30 559 }
909e1be6546258 Johannes Berg 2025-04-30 560
909e1be6546258 Johannes Berg 2025-04-30 561 iwl_pcie_ctxt_info_gen3_kick(trans);
909e1be6546258 Johannes Berg 2025-04-30 562 } else {
97b00d877bb8c2 Johannes Berg 2017-04-19 563 ret = iwl_pcie_ctxt_info_init(trans, fw);
97b00d877bb8c2 Johannes Berg 2017-04-19 564 if (ret)
97b00d877bb8c2 Johannes Berg 2017-04-19 565 goto out;
909e1be6546258 Johannes Berg 2025-04-30 566 }
eda50cde58de73 Sara Sharon 2016-09-28 567
70582b826365d2 Johannes Berg 2023-04-13 568 keep_ram_busy = !iwl_pcie_set_ltr(trans);
25628bc08d4526 Johannes Berg 2021-03-26 569
595c230b95130b Matti Gottlieb 2021-08-26 570 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_BZ) {
70d400ba7fa71d Johannes Berg 2024-07-29 571 IWL_DEBUG_POWER(trans, "function scratch register value is 0x%08x\n",
70d400ba7fa71d Johannes Berg 2024-07-29 572 iwl_read32(trans, CSR_FUNC_SCRATCH));
595c230b95130b Matti Gottlieb 2021-08-26 573 iwl_write32(trans, CSR_FUNC_SCRATCH, CSR_FUNC_SCRATCH_INIT_VALUE);
9ce041f5966fd0 Johannes Berg 2021-08-02 574 iwl_set_bit(trans, CSR_GP_CNTRL,
9ce041f5966fd0 Johannes Berg 2021-08-02 575 CSR_GP_CNTRL_REG_FLAG_ROM_START);
595c230b95130b Matti Gottlieb 2021-08-26 576 } else if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210) {
25628bc08d4526 Johannes Berg 2021-03-26 577 iwl_write_umac_prph(trans, UREG_CPU_INIT_RUN, 1);
595c230b95130b Matti Gottlieb 2021-08-26 578 } else {
25628bc08d4526 Johannes Berg 2021-03-26 579 iwl_write_prph(trans, UREG_CPU_INIT_RUN, 1);
595c230b95130b Matti Gottlieb 2021-08-26 580 }
25628bc08d4526 Johannes Berg 2021-03-26 581
70582b826365d2 Johannes Berg 2023-04-13 582 if (keep_ram_busy)
70582b826365d2 Johannes Berg 2023-04-13 583 iwl_pcie_spin_for_iml(trans);
70582b826365d2 Johannes Berg 2023-04-13 584
909e1be6546258 Johannes Berg 2025-04-30 585 if (trans->do_top_reset) {
909e1be6546258 Johannes Berg 2025-04-30 586 trans->do_top_reset = 0;
909e1be6546258 Johannes Berg 2025-04-30 587
909e1be6546258 Johannes Berg 2025-04-30 588 #define FW_TOP_RESET_TIMEOUT (HZ / 4)
909e1be6546258 Johannes Berg 2025-04-30 589 ret = wait_event_timeout(trans_pcie->fw_reset_waitq,
909e1be6546258 Johannes Berg 2025-04-30 590 trans_pcie->fw_reset_state != FW_RESET_TOP_REQUESTED,
909e1be6546258 Johannes Berg 2025-04-30 591 FW_TOP_RESET_TIMEOUT);
909e1be6546258 Johannes Berg 2025-04-30 592
909e1be6546258 Johannes Berg 2025-04-30 593 if (trans_pcie->fw_reset_state != FW_RESET_OK) {
909e1be6546258 Johannes Berg 2025-04-30 594 if (trans_pcie->fw_reset_state != FW_RESET_TOP_REQUESTED)
909e1be6546258 Johannes Berg 2025-04-30 595 IWL_ERR(trans,
909e1be6546258 Johannes Berg 2025-04-30 596 "TOP reset interrupted by error (state %d)!\n",
909e1be6546258 Johannes Berg 2025-04-30 597 trans_pcie->fw_reset_state);
909e1be6546258 Johannes Berg 2025-04-30 598 else
909e1be6546258 Johannes Berg 2025-04-30 599 IWL_ERR(trans, "TOP reset timed out!\n");
909e1be6546258 Johannes Berg 2025-04-30 600 iwl_op_mode_nic_error(trans->op_mode,
909e1be6546258 Johannes Berg 2025-04-30 601 IWL_ERR_TYPE_TOP_RESET_FAILED);
909e1be6546258 Johannes Berg 2025-04-30 602 iwl_trans_schedule_reset(trans,
909e1be6546258 Johannes Berg 2025-04-30 603 IWL_ERR_TYPE_TOP_RESET_FAILED);
909e1be6546258 Johannes Berg 2025-04-30 604 ret = -EIO;
909e1be6546258 Johannes Berg 2025-04-30 605 goto out;
909e1be6546258 Johannes Berg 2025-04-30 606 }
909e1be6546258 Johannes Berg 2025-04-30 607
909e1be6546258 Johannes Berg 2025-04-30 608 msleep(10);
909e1be6546258 Johannes Berg 2025-04-30 609 IWL_INFO(trans, "TOP reset successful, reinit now\n");
909e1be6546258 Johannes Berg 2025-04-30 610 /* now load the firmware again properly */
909e1be6546258 Johannes Berg 2025-04-30 611 trans_pcie->prph_scratch->ctrl_cfg.control.control_flags &=
909e1be6546258 Johannes Berg 2025-04-30 612 ~cpu_to_le32(IWL_PRPH_SCRATCH_TOP_RESET);
909e1be6546258 Johannes Berg 2025-04-30 613 top_reset_done = true;
909e1be6546258 Johannes Berg 2025-04-30 614 goto again;
909e1be6546258 Johannes Berg 2025-04-30 615 }
909e1be6546258 Johannes Berg 2025-04-30 616
eda50cde58de73 Sara Sharon 2016-09-28 617 /* re-check RF-Kill state since we may have missed the interrupt */
9ad8fd0b4a24e6 Johannes Berg 2017-06-20 618 hw_rfkill = iwl_pcie_check_hw_rf_kill(trans);
eda50cde58de73 Sara Sharon 2016-09-28 619 if (hw_rfkill && !run_in_rfkill)
eda50cde58de73 Sara Sharon 2016-09-28 620 ret = -ERFKILL;
eda50cde58de73 Sara Sharon 2016-09-28 621
eda50cde58de73 Sara Sharon 2016-09-28 622 out:
eda50cde58de73 Sara Sharon 2016-09-28 623 mutex_unlock(&trans_pcie->mutex);
eda50cde58de73 Sara Sharon 2016-09-28 @624 return ret;
:::::: The code at line 624 was first introduced by commit
:::::: eda50cde58de7368f982e3906090fc033ecb9360 iwlwifi: pcie: add context information support
:::::: TO: Sara Sharon <sara.sharon@intel.com>
:::::: CC: Luca Coelho <luciano.coelho@intel.com>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
WARNING: multiple messages have this Message-ID (diff)
From: Dan Carpenter <dan.carpenter@linaro.org>
To: oe-kbuild@lists.linux.dev, Johannes Berg <johannes.berg@intel.com>
Cc: lkp@intel.com, oe-kbuild-all@lists.linux.dev,
linux-kernel@vger.kernel.org,
Miri Korenblit <miriam.rachel.korenblit@intel.com>
Subject: drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c:624 iwl_trans_pcie_gen2_start_fw() warn: inconsistent returns '&trans_pcie->mutex'.
Date: Tue, 10 Jun 2025 14:58:30 +0300 [thread overview]
Message-ID: <202506100707.WAnP5ePA-lkp@intel.com> (raw)
Message-ID: <20250610115830.wnD4AgfjgJi5jmdebIEd459rCtvWm761X14bWn3iL1A@z> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 19272b37aa4f83ca52bdf9c16d5d81bdd1354494
commit: 909e1be6546258efb45993851d51d86862e2e5ee wifi: iwlwifi: implement TOP reset
date: 5 weeks ago
config: sparc-randconfig-r073-20250608 (https://download.01.org/0day-ci/archive/20250610/202506100707.WAnP5ePA-lkp@intel.com/config)
compiler: sparc64-linux-gcc (GCC) 12.4.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
| Closes: https://lore.kernel.org/r/202506100707.WAnP5ePA-lkp@intel.com/
smatch warnings:
drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c:624 iwl_trans_pcie_gen2_start_fw() warn: inconsistent returns '&trans_pcie->mutex'.
vim +624 drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c
eda50cde58de73 Sara Sharon 2016-09-28 486 int iwl_trans_pcie_gen2_start_fw(struct iwl_trans *trans,
eda50cde58de73 Sara Sharon 2016-09-28 487 const struct fw_img *fw, bool run_in_rfkill)
eda50cde58de73 Sara Sharon 2016-09-28 488 {
eda50cde58de73 Sara Sharon 2016-09-28 489 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
70582b826365d2 Johannes Berg 2023-04-13 490 bool hw_rfkill, keep_ram_busy;
909e1be6546258 Johannes Berg 2025-04-30 491 bool top_reset_done = false;
eda50cde58de73 Sara Sharon 2016-09-28 492 int ret;
eda50cde58de73 Sara Sharon 2016-09-28 493
909e1be6546258 Johannes Berg 2025-04-30 494 mutex_lock(&trans_pcie->mutex);
909e1be6546258 Johannes Berg 2025-04-30 495 again:
eda50cde58de73 Sara Sharon 2016-09-28 496 /* This may fail if AMT took ownership of the device */
eda50cde58de73 Sara Sharon 2016-09-28 497 if (iwl_pcie_prepare_card_hw(trans)) {
eda50cde58de73 Sara Sharon 2016-09-28 498 IWL_WARN(trans, "Exit HW not ready\n");
909e1be6546258 Johannes Berg 2025-04-30 499 ret = -EIO;
909e1be6546258 Johannes Berg 2025-04-30 500 goto out;
eda50cde58de73 Sara Sharon 2016-09-28 501 }
eda50cde58de73 Sara Sharon 2016-09-28 502
eda50cde58de73 Sara Sharon 2016-09-28 503 iwl_enable_rfkill_int(trans);
eda50cde58de73 Sara Sharon 2016-09-28 504
eda50cde58de73 Sara Sharon 2016-09-28 505 iwl_write32(trans, CSR_INT, 0xFFFFFFFF);
eda50cde58de73 Sara Sharon 2016-09-28 506
eda50cde58de73 Sara Sharon 2016-09-28 507 /*
eda50cde58de73 Sara Sharon 2016-09-28 508 * We enabled the RF-Kill interrupt and the handler may very
eda50cde58de73 Sara Sharon 2016-09-28 509 * well be running. Disable the interrupts to make sure no other
eda50cde58de73 Sara Sharon 2016-09-28 510 * interrupt can be fired.
eda50cde58de73 Sara Sharon 2016-09-28 511 */
eda50cde58de73 Sara Sharon 2016-09-28 512 iwl_disable_interrupts(trans);
eda50cde58de73 Sara Sharon 2016-09-28 513
eda50cde58de73 Sara Sharon 2016-09-28 514 /* Make sure it finished running */
eda50cde58de73 Sara Sharon 2016-09-28 515 iwl_pcie_synchronize_irqs(trans);
eda50cde58de73 Sara Sharon 2016-09-28 516
eda50cde58de73 Sara Sharon 2016-09-28 517 /* If platform's RF_KILL switch is NOT set to KILL */
9ad8fd0b4a24e6 Johannes Berg 2017-06-20 518 hw_rfkill = iwl_pcie_check_hw_rf_kill(trans);
eda50cde58de73 Sara Sharon 2016-09-28 519 if (hw_rfkill && !run_in_rfkill) {
eda50cde58de73 Sara Sharon 2016-09-28 520 ret = -ERFKILL;
eda50cde58de73 Sara Sharon 2016-09-28 521 goto out;
eda50cde58de73 Sara Sharon 2016-09-28 522 }
eda50cde58de73 Sara Sharon 2016-09-28 523
eda50cde58de73 Sara Sharon 2016-09-28 524 /* Someone called stop_device, don't try to start_fw */
eda50cde58de73 Sara Sharon 2016-09-28 525 if (trans_pcie->is_down) {
eda50cde58de73 Sara Sharon 2016-09-28 526 IWL_WARN(trans,
eda50cde58de73 Sara Sharon 2016-09-28 527 "Can't start_fw since the HW hasn't been started\n");
eda50cde58de73 Sara Sharon 2016-09-28 528 ret = -EIO;
eda50cde58de73 Sara Sharon 2016-09-28 529 goto out;
eda50cde58de73 Sara Sharon 2016-09-28 530 }
eda50cde58de73 Sara Sharon 2016-09-28 531
eda50cde58de73 Sara Sharon 2016-09-28 532 /* make sure rfkill handshake bits are cleared */
eda50cde58de73 Sara Sharon 2016-09-28 533 iwl_write32(trans, CSR_UCODE_DRV_GP1_CLR, CSR_UCODE_SW_BIT_RFKILL);
eda50cde58de73 Sara Sharon 2016-09-28 534 iwl_write32(trans, CSR_UCODE_DRV_GP1_CLR,
eda50cde58de73 Sara Sharon 2016-09-28 535 CSR_UCODE_DRV_GP1_BIT_CMD_BLOCKED);
eda50cde58de73 Sara Sharon 2016-09-28 536
eda50cde58de73 Sara Sharon 2016-09-28 537 /* clear (again), then enable host interrupts */
eda50cde58de73 Sara Sharon 2016-09-28 538 iwl_write32(trans, CSR_INT, 0xFFFFFFFF);
eda50cde58de73 Sara Sharon 2016-09-28 539
eda50cde58de73 Sara Sharon 2016-09-28 540 ret = iwl_pcie_gen2_nic_init(trans);
eda50cde58de73 Sara Sharon 2016-09-28 541 if (ret) {
eda50cde58de73 Sara Sharon 2016-09-28 542 IWL_ERR(trans, "Unable to init nic\n");
eda50cde58de73 Sara Sharon 2016-09-28 543 goto out;
eda50cde58de73 Sara Sharon 2016-09-28 544 }
eda50cde58de73 Sara Sharon 2016-09-28 545
909e1be6546258 Johannes Berg 2025-04-30 546 if (WARN_ON(trans->do_top_reset &&
909e1be6546258 Johannes Berg 2025-04-30 547 trans->trans_cfg->device_family < IWL_DEVICE_FAMILY_SC))
909e1be6546258 Johannes Berg 2025-04-30 548 return -EINVAL;
ret = -EINVAL;
goto out;
909e1be6546258 Johannes Berg 2025-04-30 549
909e1be6546258 Johannes Berg 2025-04-30 550 /* we need to wait later - set state */
909e1be6546258 Johannes Berg 2025-04-30 551 if (trans->do_top_reset)
909e1be6546258 Johannes Berg 2025-04-30 552 trans_pcie->fw_reset_state = FW_RESET_TOP_REQUESTED;
909e1be6546258 Johannes Berg 2025-04-30 553
909e1be6546258 Johannes Berg 2025-04-30 554 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210) {
909e1be6546258 Johannes Berg 2025-04-30 555 if (!top_reset_done) {
909e1be6546258 Johannes Berg 2025-04-30 556 ret = iwl_pcie_ctxt_info_gen3_alloc(trans, fw);
909e1be6546258 Johannes Berg 2025-04-30 557 if (ret)
909e1be6546258 Johannes Berg 2025-04-30 558 goto out;
909e1be6546258 Johannes Berg 2025-04-30 559 }
909e1be6546258 Johannes Berg 2025-04-30 560
909e1be6546258 Johannes Berg 2025-04-30 561 iwl_pcie_ctxt_info_gen3_kick(trans);
909e1be6546258 Johannes Berg 2025-04-30 562 } else {
97b00d877bb8c2 Johannes Berg 2017-04-19 563 ret = iwl_pcie_ctxt_info_init(trans, fw);
97b00d877bb8c2 Johannes Berg 2017-04-19 564 if (ret)
97b00d877bb8c2 Johannes Berg 2017-04-19 565 goto out;
909e1be6546258 Johannes Berg 2025-04-30 566 }
eda50cde58de73 Sara Sharon 2016-09-28 567
70582b826365d2 Johannes Berg 2023-04-13 568 keep_ram_busy = !iwl_pcie_set_ltr(trans);
25628bc08d4526 Johannes Berg 2021-03-26 569
595c230b95130b Matti Gottlieb 2021-08-26 570 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_BZ) {
70d400ba7fa71d Johannes Berg 2024-07-29 571 IWL_DEBUG_POWER(trans, "function scratch register value is 0x%08x\n",
70d400ba7fa71d Johannes Berg 2024-07-29 572 iwl_read32(trans, CSR_FUNC_SCRATCH));
595c230b95130b Matti Gottlieb 2021-08-26 573 iwl_write32(trans, CSR_FUNC_SCRATCH, CSR_FUNC_SCRATCH_INIT_VALUE);
9ce041f5966fd0 Johannes Berg 2021-08-02 574 iwl_set_bit(trans, CSR_GP_CNTRL,
9ce041f5966fd0 Johannes Berg 2021-08-02 575 CSR_GP_CNTRL_REG_FLAG_ROM_START);
595c230b95130b Matti Gottlieb 2021-08-26 576 } else if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210) {
25628bc08d4526 Johannes Berg 2021-03-26 577 iwl_write_umac_prph(trans, UREG_CPU_INIT_RUN, 1);
595c230b95130b Matti Gottlieb 2021-08-26 578 } else {
25628bc08d4526 Johannes Berg 2021-03-26 579 iwl_write_prph(trans, UREG_CPU_INIT_RUN, 1);
595c230b95130b Matti Gottlieb 2021-08-26 580 }
25628bc08d4526 Johannes Berg 2021-03-26 581
70582b826365d2 Johannes Berg 2023-04-13 582 if (keep_ram_busy)
70582b826365d2 Johannes Berg 2023-04-13 583 iwl_pcie_spin_for_iml(trans);
70582b826365d2 Johannes Berg 2023-04-13 584
909e1be6546258 Johannes Berg 2025-04-30 585 if (trans->do_top_reset) {
909e1be6546258 Johannes Berg 2025-04-30 586 trans->do_top_reset = 0;
909e1be6546258 Johannes Berg 2025-04-30 587
909e1be6546258 Johannes Berg 2025-04-30 588 #define FW_TOP_RESET_TIMEOUT (HZ / 4)
909e1be6546258 Johannes Berg 2025-04-30 589 ret = wait_event_timeout(trans_pcie->fw_reset_waitq,
909e1be6546258 Johannes Berg 2025-04-30 590 trans_pcie->fw_reset_state != FW_RESET_TOP_REQUESTED,
909e1be6546258 Johannes Berg 2025-04-30 591 FW_TOP_RESET_TIMEOUT);
909e1be6546258 Johannes Berg 2025-04-30 592
909e1be6546258 Johannes Berg 2025-04-30 593 if (trans_pcie->fw_reset_state != FW_RESET_OK) {
909e1be6546258 Johannes Berg 2025-04-30 594 if (trans_pcie->fw_reset_state != FW_RESET_TOP_REQUESTED)
909e1be6546258 Johannes Berg 2025-04-30 595 IWL_ERR(trans,
909e1be6546258 Johannes Berg 2025-04-30 596 "TOP reset interrupted by error (state %d)!\n",
909e1be6546258 Johannes Berg 2025-04-30 597 trans_pcie->fw_reset_state);
909e1be6546258 Johannes Berg 2025-04-30 598 else
909e1be6546258 Johannes Berg 2025-04-30 599 IWL_ERR(trans, "TOP reset timed out!\n");
909e1be6546258 Johannes Berg 2025-04-30 600 iwl_op_mode_nic_error(trans->op_mode,
909e1be6546258 Johannes Berg 2025-04-30 601 IWL_ERR_TYPE_TOP_RESET_FAILED);
909e1be6546258 Johannes Berg 2025-04-30 602 iwl_trans_schedule_reset(trans,
909e1be6546258 Johannes Berg 2025-04-30 603 IWL_ERR_TYPE_TOP_RESET_FAILED);
909e1be6546258 Johannes Berg 2025-04-30 604 ret = -EIO;
909e1be6546258 Johannes Berg 2025-04-30 605 goto out;
909e1be6546258 Johannes Berg 2025-04-30 606 }
909e1be6546258 Johannes Berg 2025-04-30 607
909e1be6546258 Johannes Berg 2025-04-30 608 msleep(10);
909e1be6546258 Johannes Berg 2025-04-30 609 IWL_INFO(trans, "TOP reset successful, reinit now\n");
909e1be6546258 Johannes Berg 2025-04-30 610 /* now load the firmware again properly */
909e1be6546258 Johannes Berg 2025-04-30 611 trans_pcie->prph_scratch->ctrl_cfg.control.control_flags &=
909e1be6546258 Johannes Berg 2025-04-30 612 ~cpu_to_le32(IWL_PRPH_SCRATCH_TOP_RESET);
909e1be6546258 Johannes Berg 2025-04-30 613 top_reset_done = true;
909e1be6546258 Johannes Berg 2025-04-30 614 goto again;
909e1be6546258 Johannes Berg 2025-04-30 615 }
909e1be6546258 Johannes Berg 2025-04-30 616
eda50cde58de73 Sara Sharon 2016-09-28 617 /* re-check RF-Kill state since we may have missed the interrupt */
9ad8fd0b4a24e6 Johannes Berg 2017-06-20 618 hw_rfkill = iwl_pcie_check_hw_rf_kill(trans);
eda50cde58de73 Sara Sharon 2016-09-28 619 if (hw_rfkill && !run_in_rfkill)
eda50cde58de73 Sara Sharon 2016-09-28 620 ret = -ERFKILL;
eda50cde58de73 Sara Sharon 2016-09-28 621
eda50cde58de73 Sara Sharon 2016-09-28 622 out:
eda50cde58de73 Sara Sharon 2016-09-28 623 mutex_unlock(&trans_pcie->mutex);
eda50cde58de73 Sara Sharon 2016-09-28 @624 return ret;
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next reply other threads:[~2025-06-10 0:04 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-10 0:03 kernel test robot [this message]
2025-06-10 11:58 ` drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c:624 iwl_trans_pcie_gen2_start_fw() warn: inconsistent returns '&trans_pcie->mutex' Dan Carpenter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202506100707.WAnP5ePA-lkp@intel.com \
--to=lkp@intel.com \
--cc=error27@gmail.com \
--cc=oe-kbuild@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.