From nobody Wed Apr 30 17:21:52 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4ZnkWP30Vwz5tj3s; Wed, 30 Apr 2025 17:21:53 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZnkWN6976z3MJx; Wed, 30 Apr 2025 17:21:52 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1746033712; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=UNSAqU5NUYEuw2vr+ZvabsEbkufnITTSzj2r+KOH6zA=; b=qJt1A2BsIhLmw10n5iWmPbdMYlOarSsRExgxSW2IsUQVmy2Aj73tXRY25ESpbAVk3EiZvx lE6fHSmarV13Lu14RY0ceTuOkvYtwHldEstkYthEd4ffGYSbrrf1D0Q9rvdIO0txQuQ+1V T5Sl6RUo4nmKrQz0NTcTBGKOM1jBKiziI3mcKlGgmeYoD1vi+qcxyTc+O+V6DvGvkxB2ZP bNXL/GxAO8v7PN6y/J/3XbRIQH1HAcTxFMKqFfCWt5UfeheFZuiLA5CuchZ7AZG/KKLEDj m86ruCgkhZsn6Og8olhJi5ZofNC59Qn6Q2SAMY83wKEP6uq3bnWCLqxjbd41Sg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1746033712; a=rsa-sha256; cv=none; b=MqzQV90/YX+J2Ic6czHn/ulz500u74MPkSAQ70R7A02FWXSDEIeO0nI8dVZdBVEAetm2/m Fg4QTrCtUz2sUvXesTq6d3Y4FqLlDfjnXfKx3nNST2piaiCX1aJgnigRnmdpEyVergo2M2 ZIfINoW1WuECyR4Av6bNxb5MjYPXIBr+MDjYY0cDMwH/6LEDhSYbYP3kLXeHAoAfNrmQ1A wkAsHsGNosCelASZum91LZ10PNJUuRMRmK5du5glcwmoFI54IV7aj1G7qaLitbgkp5KlF7 gkyv1obNd6LCgQSAiRg3UAwu8ysKRhSatgcE3k+qgHc+Z0PzO0IVeJ3YyfzbjA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1746033712; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=UNSAqU5NUYEuw2vr+ZvabsEbkufnITTSzj2r+KOH6zA=; b=h8UsiCZpsYXvuMwopXhMY7SFlP5II4ZmuVH7qmIfH7GDFOfrGGgIc/EE+LYTGqId+p+BmV D0f4Op1hbs6ch7A4waPpJf/DYjKBwzoVXXLi91P3dZcid4eW7AbVac1KfTEzwRC6bBE57y A8wA1/adt813Q+5em5E0lgmcUFQ2PMqyYj3TDA7OzXUEEFK0OC4YZ3Q3vFbEEHD+6Eyj+D adoZe+W2wdtUiRmARvZOVJWLSqVawTyfjzBNh4s0B7qVDZwh0a3/J1MC4lgUej/6EhlwQo 7jm/Bq/y/jvDNn/FeTZayDwyHymTaPwFobKd8TzEKf+ysgWNvqubZsUjqxRWBw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4ZnkWN5mBZzmP; Wed, 30 Apr 2025 17:21:52 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 53UHLq0j095326; Wed, 30 Apr 2025 17:21:52 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 53UHLqES095323; Wed, 30 Apr 2025 17:21:52 GMT (envelope-from git) Date: Wed, 30 Apr 2025 17:21:52 GMT Message-Id: <202504301721.53UHLqES095323@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Warner Losh Subject: git: 05cf85775b2a - stable/14 - mpi3mr: Handle Insufficient Power Fault Code List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: imp X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 05cf85775b2a120211ce5530acffd3b335543593 Auto-Submitted: auto-generated The branch stable/14 has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=05cf85775b2a120211ce5530acffd3b335543593 commit 05cf85775b2a120211ce5530acffd3b335543593 Author: Chandrakanth patil AuthorDate: 2025-04-27 23:35:23 +0000 Commit: Warner Losh CommitDate: 2025-04-30 17:05:53 +0000 mpi3mr: Handle Insufficient Power Fault Code The driver now checks for insufficient power faults during the load phase and immediately fails initialization instead of retrying. Additionally, if an insufficient power fault is detected by the watchdog after the controller is up, the controller is marked as unrecoverable instead of triggering a reset. This improves fault handling and avoids unnecessary recovery attempts in low-power conditions. Reviewed by: ssaxena, imp Differential Revision: https://reviews.freebsd.org/D49747 (cherry picked from commit 116c8b18a2b5278df0d1982a683193c3dba6f30c) --- sys/dev/mpi3mr/mpi3mr.c | 50 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/sys/dev/mpi3mr/mpi3mr.c b/sys/dev/mpi3mr/mpi3mr.c index bfb032a86c5b..1611f2c4aceb 100644 --- a/sys/dev/mpi3mr/mpi3mr.c +++ b/sys/dev/mpi3mr/mpi3mr.c @@ -2785,18 +2785,37 @@ retry_init: } if (ioc_state != MRIOC_STATE_RESET) { - mpi3mr_print_fault_info(sc); - mpi3mr_dprint(sc, MPI3MR_ERROR, "issuing soft reset to bring to reset state\n"); - retval = mpi3mr_issue_reset(sc, - MPI3_SYSIF_HOST_DIAG_RESET_ACTION_SOFT_RESET, - MPI3MR_RESET_FROM_BRINGUP); - if (retval) { - mpi3mr_dprint(sc, MPI3MR_ERROR, - "%s :Failed to soft reset IOC, error 0x%d\n", - __func__, retval); + if (ioc_state == MRIOC_STATE_FAULT) { + mpi3mr_print_fault_info(sc); + + U32 fault = mpi3mr_regread(sc, MPI3_SYSIF_FAULT_OFFSET) & + MPI3_SYSIF_FAULT_CODE_MASK; + if (fault == MPI3_SYSIF_FAULT_CODE_INSUFFICIENT_PCI_SLOT_POWER) + mpi3mr_dprint(sc, MPI3MR_INFO, + "controller faulted due to insufficient power. " + "try by connecting it in a different slot\n"); + goto err; + + U32 host_diagnostic; + timeout = MPI3_SYSIF_DIAG_SAVE_TIMEOUT * 10; + do { + host_diagnostic = mpi3mr_regread(sc, MPI3_SYSIF_HOST_DIAG_OFFSET); + if (!(host_diagnostic & MPI3_SYSIF_HOST_DIAG_SAVE_IN_PROGRESS)) + break; + DELAY(100 * 1000); + } while (--timeout); + } + mpi3mr_dprint(sc, MPI3MR_ERROR, "issuing soft reset to bring to reset state\n"); + retval = mpi3mr_issue_reset(sc, + MPI3_SYSIF_HOST_DIAG_RESET_ACTION_SOFT_RESET, + MPI3MR_RESET_FROM_BRINGUP); + if (retval) { + mpi3mr_dprint(sc, MPI3MR_ERROR, + "%s :Failed to soft reset IOC, error 0x%d\n", + __func__, retval); goto err_retry; - } - } + } + } ioc_state = mpi3mr_get_iocstate(sc); @@ -3166,6 +3185,15 @@ mpi3mr_watchdog_thread(void *arg) sc->unrecoverable = 1; break; } + + if (fault == MPI3_SYSIF_FAULT_CODE_INSUFFICIENT_PCI_SLOT_POWER) { + mpi3mr_dprint(sc, MPI3MR_INFO, + "controller faulted due to insufficient power, marking" + " controller as unrecoverable\n"); + sc->unrecoverable = 1; + break; + } + if ((fault == MPI3_SYSIF_FAULT_CODE_DIAG_FAULT_RESET) || (fault == MPI3_SYSIF_FAULT_CODE_SOFT_RESET_IN_PROGRESS) || (sc->reset_in_progress))