From nobody Mon Feb 9 19:04:43 2026 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E30762DA749 for ; Wed, 21 Jan 2026 01:54:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768960497; cv=none; b=vGFtpLJFnIgdQHNzwYsjp58lcrHbVoZcPATpMNKybCW7UoC4KSKvUuj13Ntmev36lqWj345nU+7UpaAEyzxUxCVvAKtPO5XenIACeX4qc8UD5iLG4+FO0Wi3MjWTvhifPLcNuIPvu2pxjoyn5GPMmXqq1dxHBvGDyaFzoANeVvM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768960497; c=relaxed/simple; bh=m50F9JiuRetfBHd30wXU12P9n0yh0b4IyX91kBEVf3M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=G6ZGgwkurNl57Jy+ZLXEzTiGQGVlgTWV4qEaVXMAswswsgJ2c5k8s94gh3byEMa2IZuh39FDt2Nm+h64H1anWWgPdN7AbbkVBwRPTv8wvfX5RNCNqTjnhwbqgjNPCHCBkap5yav8Aat+kJ5sSLNT8GXMDjCELel0SUEWlYTbsZ0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=nLXFexxH; arc=none smtp.client-ip=209.85.210.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="nLXFexxH" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-81f223c70d8so5022022b3a.1 for ; Tue, 20 Jan 2026 17:54:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1768960488; x=1769565288; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=aEdSe9hSCornkFcn2jbum3ZEMbO3Qyjg0eU8ilBKTtI=; b=nLXFexxHuBWZroLU9qUurEmPzQS7Gfrg+upXZYO6lQLu4JoHzN7EPStTQEJkliM8fd lvXrFqNpqC8XxaA2f3wtE+ODy8mNixie9qaBXENDjL90dJfh0Fnm6kuXBeILVtRokDL9 vukN2Qj7QUBO3TpnqsBQevEeamhAkALXPLbeypPpu3vkXAvq3uCHI9+W7VcbkhH0ZOui 4KIPXz4VRfoqLs+nuKsJWLPntFMlmv/23WW0iCyMSBFET1/Jahw15n4KPj6D2RWjLxvK PLd5pYYYIXauKp5p6X0HLSlv8F6Max8a3ilMURzQW8WW6IyYiHRFeTWgaY4obbR7x+iC orSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768960488; x=1769565288; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=aEdSe9hSCornkFcn2jbum3ZEMbO3Qyjg0eU8ilBKTtI=; b=ELJBmHadd/0GrqUX6xs98dKvmAnocLL3aQBj9wQGDAHogbdR8ztbfoKAlGVN/RNs7X 9ajcYlUBMYEHp548jng/eGZwJNKVtTIJP1zQBK/cpvZhmRM/KokXwRiOhC/NPhUbVCLM iq//lX71Kc4pkrHTQc4uBaJ8/ki4JDGU9VwsEBX97KcoZEuy//bdY0Q5glw5n/fY4NK/ IUkOI8Qj2FQekMR3xrIUkz+rKjTVn4DmtcKgeFZDAcI4M4vUAHzO/+6EqewyAeFcctDl 0VQcr7uYYyb1QZXL7o5GdsVadkfi4sAeI9qSXhbrdLR5VODWGrYqRHyuCvlmHYgbx6En is8w== X-Forwarded-Encrypted: i=1; AJvYcCUQvlmiJuhjpNAeYcgPmic3bE12QvrTjDhBs5+Y1yqD/Cuu8tupZHZr7GfbtRS3ff3ykHFVpnKpZ88FhoM=@vger.kernel.org X-Gm-Message-State: AOJu0YwhAS1BxG29WK5rU1SvnmyrTXDitmuzMwx6zNLYxRR3KaBsNGVA bgzYnGWBLgHXqaP5WKBrlIQFfB+aPTf0gG2jFKe65ATqSY65S3MQqVDv8/mGKW/6Eyk= X-Gm-Gg: AZuq6aKGfs5Kw5RQoexbmE2ksvH76RFCccN6l/44giygO7QS0h/dGlGhpdRagcP09zN vs9pUhPeb2bqNk8YERscTBjqGns1MGIM48u9K1C4CRmU7SkJSR5sAWznSKvdqcH+OsgYX64yYaZ YnFQ4wt9kVoJT3XnEdx8YWXc8IXnUri7AL1dxl/w+gA1CumFdsdgPZf55gE0pS3sojhN5qKfS3B bN3bNhkXpTP1dMl0m/913X95FsKSqyebDXGvsaA5pxqnNt7FnSRl8ZQWQsEE5yYB7Dref74PYOJ SNy3J0kejPsl4gezarDaDCJBpEmYYwbkvBGiX/f9nh5q+ynDfOjeVSrAAnA40HDAgZjzu+k10Bk FgpnzuQmBX2+vraxMK3MqUMS4fTnSFxESrE9/r/ZQ0MjwI+atkkyNe/txHLRVhBamx3m+HwoyYi T5/LpFzs73 X-Received: by 2002:a05:6a20:939f:b0:38b:dd1e:ef4b with SMTP id adf61e73a8af0-38e00bf6ca7mr14314892637.12.1768960488444; Tue, 20 Jan 2026 17:54:48 -0800 (PST) Received: from localhost ([71.212.200.220]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a7190c9ee9sm134762075ad.22.2026.01.20.17.54.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jan 2026 17:54:47 -0800 (PST) From: "Kevin Hilman (TI)" Date: Tue, 20 Jan 2026 17:54:45 -0800 Subject: [PATCH 2/2] pmdommain: add support system-wide resume latency constraints Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260120-topic-lpm-pmdomain-device-constraints-v1-2-108fc4cfafce@baylibre.com> References: <20260120-topic-lpm-pmdomain-device-constraints-v1-0-108fc4cfafce@baylibre.com> In-Reply-To: <20260120-topic-lpm-pmdomain-device-constraints-v1-0-108fc4cfafce@baylibre.com> To: "Rafael J. Wysocki" , Ulf Hansson , linux-pm@vger.kernel.org Cc: Dhruva Gole , linux-kernel@vger.kernel.org X-Mailer: b4 0.15-dev-47773 X-Developer-Signature: v=1; a=openpgp-sha256; l=3792; i=khilman@baylibre.com; h=from:subject:message-id; bh=m50F9JiuRetfBHd30wXU12P9n0yh0b4IyX91kBEVf3M=; b=owEBbQKS/ZANAwAIAVk3GJrT+8ZlAcsmYgBpcDHlxhHkg4Aur/xo9q0I0miLjCgRk5YJxSzax WANNtjwKxSJAjMEAAEIAB0WIQR7h0YOFpJ/qfW/8QxZNxia0/vGZQUCaXAx5QAKCRBZNxia0/vG ZfY5D/9vltNKG6iYdCw8hJecbXFfiX9ldAv3xUYm00yeenDCTM6NZcjlOZJXkHNu+K4RK4J9UW+ S55NSZ3fTINdNBHgwruSmP5/dbxHOW6HPhSO7F7mnUbS8PpuP9gs9OzuD5snYZM8fPbmelH4S4x mVrHmk3eRoATHUIkGCwlL4bXkPuETkr9dvPds7siRbWcBs9+sqFjPI0vrll8ec1LSNP2b4hyjpm olUcXrHogANrrkGsCkimzGhc613qg/SXft1iJNTZjHI/7d+UVtwurohh2KiZtCYlzPPEgYCmE9J yemGeql+W8qlOAZnmv+JMYWmkX+GgBiB0O2QG5q7jPWWyzyVTCNCfZBXFqjaNjhbcWaTXmN7tDe qK1dWJgZ/DZgMf6mJewBl8pPev4wkzlYu1M64tWDepha5yApFYNxI59Qe9kt/FpJRDqaXGkSyol QHrC8vnrPtBVvLcvbYZkAP71vZkiHha1gdIR1jyxja4hth/GjSsQq7GF7NNlRfikbiKo00lzLWT kpXTXXoq9izafLM75Mcua2mvOPasm/+d7LgtzirXd5pUGa/+LAsgp8ZgbpqBP4SHZtk8rEhPS3r 2hOcsfDpWR3lEBoWOFhHMmmnPMMgJXr5/T6Fwr8JK3dX8CpZAKhHiwYE7p30C8p3l01CI8LbLk3 ALBZyiJTHdSj/jg== X-Developer-Key: i=khilman@baylibre.com; a=openpgp; fpr=7B87460E16927FA9F5BFF10C5937189AD3FBC665 In addition to checking for CPU latency constraints when checking if OK to power down a domain, also check for QoS latency constraints in all devices of a domain and use that in determining the final latency constraint to use for the domain. Since cpu_system_power_down_ok() is used for system-wide suspend, the per-device constratints are only relevant if the LATENCY_SYS QoS flag is set. Because this flag implies the latency constraint only applies to system-wide suspend, also check the flag in dev_update_qos_constraint(). If it is set, then the constraint is not relevant for runtime PM decisions. Signed-off-by: Kevin Hilman (TI) --- drivers/pmdomain/governor.c | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/drivers/pmdomain/governor.c b/drivers/pmdomain/governor.c index 96737abbb496..03802a859a78 100644 --- a/drivers/pmdomain/governor.c +++ b/drivers/pmdomain/governor.c @@ -31,6 +31,8 @@ static int dev_update_qos_constraint(struct device *dev, = void *data) constraint_ns =3D td ? td->effective_constraint_ns : PM_QOS_RESUME_LATENCY_NO_CONSTRAINT_NS; } else { + enum pm_qos_flags_status flag_status; + /* * The child is not in a domain and there's no info on its * suspend/resume latencies, so assume them to be negligible and @@ -38,7 +40,14 @@ static int dev_update_qos_constraint(struct device *dev,= void *data) * known at this point anyway). */ constraint_ns =3D dev_pm_qos_read_value(dev, DEV_PM_QOS_RESUME_LATENCY); - constraint_ns *=3D NSEC_PER_USEC; + flag_status =3D dev_pm_qos_flags(dev, PM_QOS_FLAG_LATENCY_SYS); + if ((constraint_ns !=3D PM_QOS_RESUME_LATENCY_NO_CONSTRAINT) && + (flag_status =3D=3D PM_QOS_FLAGS_ALL)) { + dev_dbg_once(dev, "resume-latency only for system-wide. Ignoring.\n"); + constraint_ns =3D PM_QOS_RESUME_LATENCY_NO_CONSTRAINT_NS; + } else { + constraint_ns *=3D NSEC_PER_USEC; + } } =20 if (constraint_ns < *constraint_ns_p) @@ -430,12 +439,43 @@ static bool cpu_system_power_down_ok(struct dev_pm_do= main *pd) s64 constraint_ns =3D cpu_wakeup_latency_qos_limit() * NSEC_PER_USEC; struct generic_pm_domain *genpd =3D pd_to_genpd(pd); int state_idx =3D genpd->state_count - 1; + struct pm_domain_data *pdd; + s32 min_dev_latency =3D PM_QOS_RESUME_LATENCY_NO_CONSTRAINT; + s64 min_dev_latency_ns =3D PM_QOS_RESUME_LATENCY_NO_CONSTRAINT_NS; + struct gpd_link *link; =20 if (!(genpd->flags & GENPD_FLAG_CPU_DOMAIN)) { genpd->state_idx =3D state_idx; return true; } =20 + list_for_each_entry(link, &genpd->parent_links, parent_node) { + struct generic_pm_domain *child_pd =3D link->child; + + list_for_each_entry(pdd, &child_pd->dev_list, list_node) { + enum pm_qos_flags_status flag_status; + s32 dev_latency; + + dev_latency =3D dev_pm_qos_read_value(pdd->dev, DEV_PM_QOS_RESUME_LATEN= CY); + flag_status =3D dev_pm_qos_flags(pdd->dev, PM_QOS_FLAG_LATENCY_SYS); + if ((dev_latency !=3D PM_QOS_RESUME_LATENCY_NO_CONSTRAINT) && + (flag_status =3D=3D PM_QOS_FLAGS_ALL)) { + dev_dbg(pdd->dev, + "in domain %s, has QoS system-wide resume latency=3D%d\n", + child_pd->name, dev_latency); + if (dev_latency < min_dev_latency) + min_dev_latency =3D dev_latency; + } + } + } + + /* If device latency < CPU wakeup latency, use it instead */ + if (min_dev_latency !=3D PM_QOS_RESUME_LATENCY_NO_CONSTRAINT) { + min_dev_latency_ns =3D min_dev_latency * NSEC_PER_USEC; + if (min_dev_latency_ns < constraint_ns) + constraint_ns =3D min_dev_latency_ns; + } + /* Find the deepest state for the latency constraint. */ while (state_idx >=3D 0) { s64 latency_ns =3D genpd->states[state_idx].power_off_latency_ns + --=20 2.51.0