From nobody Fri Jan 9 21:03:16 2026 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 4dnvPc4ZQpz6MN3n for ; Fri, 09 Jan 2026 21:03:16 +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 "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dnvPc110Fz3SnY for ; Fri, 09 Jan 2026 21:03:16 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1767992596; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=u8vTzhZL4OaNB6PCuZzkqq3wx+TGUMlf34TWZbRFanc=; b=hBM98u1vfyokVTY//EcE9nOU5K6rTJw0dfjSuUVNR5Dv0mNaRN/34DE8waN3S16wx5wjXh 5TJeog5qf8+JuNgD2QXgbg2SI33lPS2hslkOGpkY1W8ezeuzMZ59scGP0DrzEPvMY+DXwE ilwGgnA/DVjpgus6xxa+v26fW1DVKumIZogT/meSzUKv2y16bPjwoCi4ivYqJ2rfkT/tfO BiX0VAP+mapgV/s0w6eaCoqKBExKydFEcqpBaNO3IhkzcRx9m+xiMdk3+yK4SYfQAIWd7M HQzNXvdEnpvw318F7d+EwPUanPxyOK+X4eb9AOCciYlU65QMCq+qmDFgH2LQ9w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1767992596; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=u8vTzhZL4OaNB6PCuZzkqq3wx+TGUMlf34TWZbRFanc=; b=OTknP4ZnAMwnOsJcS4p5T0ppK/D6CF8ifcun+3PXOVzMjFr3i+n2rMQkdKe4TDHrfDIEuA b3jxk0XWnf85TDqO86GOavFYfteNb9nsv60FwANNCVoPLvGNaKsZIe/J7tf0a2mR2nmpib yrhiHo2u95uTzkpcyjO8M9YKiOVbUQZuCCueRQFEodwHr9hcbtk05KaFNAUAbbxLOtuNGv +RiGvU3f/ONWMOtNs6mUQwlgS86BQv2syQQ15YJyLZOoiIoQqI/mPRDNt5hXAZeHZ/5oVH xDjTYqVbiIrY9rPet3VZBQcvkdWHDvP4nLZFuoyJTGOYVobeuzpQIYIDzVw/gw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1767992596; a=rsa-sha256; cv=none; b=hkQTKyojKmp6pqJwtGSRHr9FvXK19sFy/khJJTKw+H9I6MJOHqV6K9IN4QbgF9XaeuLneQ lNO1OxlVgoJT5mXd4OaYgj6OSiF00bt0Lhsqdcf46weWZoCyXWz3L/nyrd6H8E5sXDE+zk QrUjWrtB7lFWXNCodxwYCH54QWzN3INaWlDWTFhl1zCSxfW92fVwymWyAe7va2Jwc2U4q9 YvtAZZhVRQ/8ouuiKqhIZQB/c7uuPh2TLjOHbU+K/fB82PcXRuuUCoRL6EstS3Hj8JZtJI DjIRTmwONaXI7kd99hOixipnbt3qzIzx8C9F7vRkerwpGKvvuezGJ4mtAatnnA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dnvPc0Vs3z985 for ; Fri, 09 Jan 2026 21:03:16 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id d0b7 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 09 Jan 2026 21:03:16 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Alexey Sukhoguzov From: Warner Losh Subject: git: f0d44ee06b68 - main - nvme: Add APST payload overriding 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: f0d44ee06b6814224653324e09a948e15a177d1f Auto-Submitted: auto-generated Date: Fri, 09 Jan 2026 21:03:16 +0000 Message-Id: <69616d14.d0b7.4059aed4@gitrepo.freebsd.org> The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=f0d44ee06b6814224653324e09a948e15a177d1f commit f0d44ee06b6814224653324e09a948e15a177d1f Author: Alexey Sukhoguzov AuthorDate: 2024-10-30 11:04:49 +0000 Commit: Warner Losh CommitDate: 2026-01-09 20:32:59 +0000 nvme: Add APST payload overriding The apst_data tunable allows APST configuration to be adjusted during controller initialization. It accepts an array of encoded integers, each defining specific transition parameters. Relnotes: YES Signed-off-by: Alexey Sukhoguzov Reviewed by: imp Pull Request: https://github.com/freebsd/freebsd-src/pull/1444 --- share/man/man4/nvme.4 | 12 ++++++++++++ sys/dev/nvme/nvme_ctrlr.c | 22 ++++++++++++++-------- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/share/man/man4/nvme.4 b/share/man/man4/nvme.4 index d24ffc07ef9e..76960a7e06c8 100644 --- a/share/man/man4/nvme.4 +++ b/share/man/man4/nvme.4 @@ -136,6 +136,18 @@ hw.nvme.apst_enable=1 .Ed .Pp The default vendor-provided settings, if any, will be applied. +To override this, set the following tunable: +.Bd -literal -offset indent +hw.nvme.apst_data +.Ed +.Pp +The string must contain up to 32 encoded integers, e.g. "0x6418 0 +0 0x3e820". +Each value corresponds to a specific available power state starting +from the lowest, and defines the target state (bits 3..7) to +transition to, as well as the idle time in milliseconds (bits 8..31) +to wait before that transition. +Bits 0..2 must be zero. .Pp The .Xr nvd 4 diff --git a/sys/dev/nvme/nvme_ctrlr.c b/sys/dev/nvme/nvme_ctrlr.c index 2c13dac96342..26194ccbb8f8 100644 --- a/sys/dev/nvme/nvme_ctrlr.c +++ b/sys/dev/nvme/nvme_ctrlr.c @@ -786,7 +786,7 @@ nvme_ctrlr_configure_apst(struct nvme_controller *ctrlr) { struct nvme_completion_poll_status status; uint64_t *data; - int data_size; + int data_size, i, read_size; bool enable, error = true; if (TUNABLE_BOOL_FETCH("hw.nvme.apst_enable", &enable) == 0 || @@ -796,13 +796,19 @@ nvme_ctrlr_configure_apst(struct nvme_controller *ctrlr) data_size = 32 * sizeof(*data); data = malloc(data_size, M_NVME, M_WAITOK | M_ZERO); - status.done = 0; - nvme_ctrlr_cmd_get_feature(ctrlr, - NVME_FEAT_AUTONOMOUS_POWER_STATE_TRANSITION, 0, - data, data_size, nvme_completion_poll_cb, &status); - nvme_completion_poll(&status); - if (nvme_completion_is_error(&status.cpl)) - goto out; + if (getenv_array("hw.nvme.apst_data", data, data_size, + &read_size, sizeof(*data), GETENV_UNSIGNED) != 0) { + for (i = 0; i < read_size / sizeof(*data); ++i) + data[i] = htole64(data[i]); + } else { + status.done = 0; + nvme_ctrlr_cmd_get_feature(ctrlr, + NVME_FEAT_AUTONOMOUS_POWER_STATE_TRANSITION, 0, + data, data_size, nvme_completion_poll_cb, &status); + nvme_completion_poll(&status); + if (nvme_completion_is_error(&status.cpl)) + goto out; + } status.done = 0; nvme_ctrlr_cmd_set_feature(ctrlr,