From nobody Mon Apr 28 03:25:21 2025 X-Original-To: dev-commits-src-main@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 4Zm836138Gz5tkwx; Mon, 28 Apr 2025 03:25:22 +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 4Zm835254Tz3cxY; Mon, 28 Apr 2025 03:25:21 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1745810721; 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=fvCALm2gpyb01v/c+LFGu7RYQJ0R2dyqL4LS08SPLTE=; b=Ud4T52Iz0z9vMDdmEm/CUYLD81WMBSremARyhv/LDQP7DjQdAvWFWBkLnbEH9J5TDZd0C2 TT/lJxUIAS7nb7vLGGCwzA7fh0t1XsK6NAGRAL+JyZkdwDkyWp1lQ4/Lp8QPAPeVDAOrdk QnsD3oAQxM2Cbu3NShhcoaVWZoolw/w62nGZMs/0LGEAj6ioRnpJTvechVXa4rUsO4aCe9 Q0yJjrPMo8pF0nlhVbGJ+iMEbJNPhL/zkdMqY+lNIx/3xU/wMB56a/+mExoSJCAQcgYFec XGKFPbLqs1SrYSlqbTdrQhhomW61awZZVQ9bgeburil1h8Ymn/3oMf5JHIBsUA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1745810721; a=rsa-sha256; cv=none; b=r3ZVyQQokVLp5RGhVTBkRmwpR2UHPbwbBJwaJuZCJSgpqAaELuFbvpPULLJnNwJ7VPqGEf H66/d01pzBEmeoclQz8uRwtG52QKjxRUQjJ86TUWb/JXsxy94dfD4nn5qgSfOz/n45j4He G7My2Irdd9z8G7X76YQVk0yiIS8dfXzLAq5Fm3w0OS80/koyVfAXYQixKl4g3wqZY2J4bS mWUvHcwl3vrsvu5aDhYlDQ23f8uTnJHna9jvEMYD9peayammYkQUcf0HeU/182fIe5ShA4 SkJBXBI/b3vOYq1zzr+oWxlNq1SGxusLYPSXEYhUHe/Ru7g+da/3/LPsRY+oTw== 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=1745810721; 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=fvCALm2gpyb01v/c+LFGu7RYQJ0R2dyqL4LS08SPLTE=; b=Fec06nLSq2RjkbBTQk+RRRi5fy46QxCK1Lnm3oa5ZWrpiFsSKdfx0QiV3Plon2HlVXdW9+ +ldUtexh7YIEizMfWSBqvgGvtd4yPPEOag8poVWLVeThl0bXutYwbKUX8z9/0Xgz8M+mVf F2LvoFfc9d41+FwO1VUenVII3QQpZaosjH0+rEYjdov/fyn4uD995Oo0VOPzll4Mc9xPz7 1ylIVDhWDz0g+0734jBLcsW+LZcb/mKhWft91zLo0M/R0Vl/KzQoOXtaiyqMno9LonBON9 t/K123HoI2l3/OTbCFpcXZc4ua9I31VFpDYvUXwCh/Q7aUJU5QIahBbL3eGRYw== 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 4Zm8351TYQz3Hl; Mon, 28 Apr 2025 03:25:21 +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 53S3PLaF014741; Mon, 28 Apr 2025 03:25:21 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 53S3PL2f014738; Mon, 28 Apr 2025 03:25:21 GMT (envelope-from git) Date: Mon, 28 Apr 2025 03:25:21 GMT Message-Id: <202504280325.53S3PL2f014738@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Warner Losh Subject: git: 116c8b18a2b5 - main - mpi3mr: Handle Insufficient Power Fault Code List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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/main X-Git-Reftype: branch X-Git-Commit: 116c8b18a2b5278df0d1982a683193c3dba6f30c Auto-Submitted: auto-generated The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=116c8b18a2b5278df0d1982a683193c3dba6f30c commit 116c8b18a2b5278df0d1982a683193c3dba6f30c Author: Chandrakanth patil AuthorDate: 2025-04-27 23:35:23 +0000 Commit: Warner Losh CommitDate: 2025-04-28 03:22:55 +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 --- 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 5688d6bb8d25..c92d05d972de 100644 --- a/sys/dev/mpi3mr/mpi3mr.c +++ b/sys/dev/mpi3mr/mpi3mr.c @@ -2784,18 +2784,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); @@ -3165,6 +3184,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))