From nobody Sun Feb 8 21:29:01 2026 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (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 BC704320393 for ; Wed, 21 Jan 2026 01:54:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768960497; cv=none; b=VF/lukA10inBQFji8E0UU5e5L6RHjGSZ9iCr3RyUwF6tWO91HeTCpN6/co6+f8DqVCxcOkgiAoCqIBFXwUFwvK6q8uq1zEFskm46+hCcup3LnLB2Une8R8Ig69KCGh+WYyMcrunS/qTyLTwo8uoViwkliui299pGaBWBgwsuDco= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768960497; c=relaxed/simple; bh=k+Fl6IhMZkW4zdULsvbRzYFhAZS1AjCB/KSpAtlWRRU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IR19mJaj7FmwALOWcA1qXqIwo/QulvuYb+j/4brbCFLZ/25+uzM9/CW2d3v6hqF7nt6WtfdhuzqS4lISFV1cJw2pAohfgeWG3AHivog1e2TOYa+eCszSw/7oOgv4oS7aTlNJHCwYWDKmLr8YsLLbRBCtuS/HEjhBS5fSKkdJBwI= 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=YzjGKYrl; arc=none smtp.client-ip=209.85.214.182 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="YzjGKYrl" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-2a0834769f0so41451035ad.2 for ; Tue, 20 Jan 2026 17:54:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1768960487; x=1769565287; 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=rbUzzdXjX7SF274De+Y10x0I1IICDRKCDKCZqXPx8V4=; b=YzjGKYrl/265R+bNDYwnb9BV+fsWFV8fri+6JyI5B5JIPZXK6N41w3ccTPI9XNkCEO YyGc0Q6jss1SrITW1SweWS1+Tr+7uhiLjWlPPuUikxz40hlSjj9M5aJ9BnXmlRDCmeyj BA0S39pgycdxr3bR5sbCEyRWvCvPIUqOfVo+BqIfoANogog/jLryIrBWW7X95HxZu2BX ctGVGUxXbfXDNGNPdsjpIWtWaRggr83RO6OT4RLvi2mnmX01SNfHGbdOje/y6aQgtFIk zPFQH6hfEEzLHjrSZQ3h8lbDnS/a6gJcRD+XtZ+Y6UAOzQU3XHIKrJg9OaI7Ql1tC+IC c7ZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768960487; x=1769565287; 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=rbUzzdXjX7SF274De+Y10x0I1IICDRKCDKCZqXPx8V4=; b=Y/PAkOPXuuvojPjbLYQlqMjnlPVWfgCBAsGtH04UQfwpQhOotHaiLbUh2K2Mj6+Edx bejNTlWSDZfI9rFfAQoqZ3Mbqaht33pExmghLxx0iGC+CfFP5hYLOg08i0mIAMyq+8T/ RtpVK5RDZY0h2axj0L0G9li9UOZv3j/0Rpeun/shkykV/09+eto/txPOMXOrkxxkMCrB cxfZnBjQPzji9iXNvE5EA/Hd3brgIklxWyw2vFVauKJckN8YWVm5KorOLpqaQDHQ+VUF dZvirYsjojoo9zn4xeQkq35SOK12Fvke3OEWWnm5OHnUBvsRWXd6QMzzq4PtZ4jptYdt Mjqg== X-Forwarded-Encrypted: i=1; AJvYcCV3Ybxvm6HaKj5gP/pI3BuXQZwi/NiDgy0dDjCzBtXKPLWmJQubsb0YYQRBTCBNHm13MVzeyss4XRYSKgY=@vger.kernel.org X-Gm-Message-State: AOJu0YxInRiO+/Zlrlaj+wddg3d7oIC+nyqSmijH6ri8Uuw2F3ihsN24 03+MKTw2KT41OLz98JeP8UmWEF+WT9Al7nkAAFoY4jt5gUD+g0YHBo6d5zQyW6tq7wreQnGB7c8 uOmufAS4= X-Gm-Gg: AZuq6aK1QjJWG1KV3Mryfja1EqIjRQGfLkEb4xl8Z4X1vXz+RRbED1tbiGzdYHwQZKm ClPVdawNfgwuT58MaAHXhqKQxEOt/UxXIXgpvVVQ9MU2MiakUm0SjyAVbgUvJgs6UHU916COIej wWGP7ecL9pJiybnSDefc/QAQ/KfdvngHsMZntj4i4k2pSFV6uSM5V8aBdgpeYyf28Sx7uSDGoV2 a0zMEWRPiq+8D5cQQ5vBoaa5rk6bZwslEg8HHIHYDtS7eOP8m+sXeSACQvpgKGxoxOkernc8LYB 2ETywV8RPirH0YAxxh+zcY1AEyOaBjjuvaSwaIUwNCdOSu058uc8KgaHQGNl8R59PDhadloH4ks +WYgf5i5c3JNg4M5KjHqNlotghx6GaXNvaGp16rxDrGI2EHU/BN7Ke4lqshyCCt827b9YkcCUkx xGhYHlBwZZ X-Received: by 2002:a17:903:1a67:b0:2a7:6f90:8650 with SMTP id d9443c01a7336-2a76f9086b7mr31818275ad.55.1768960487009; Tue, 20 Jan 2026 17:54:47 -0800 (PST) Received: from localhost ([71.212.200.220]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a7193fbf8fsm135489625ad.78.2026.01.20.17.54.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jan 2026 17:54:46 -0800 (PST) From: "Kevin Hilman (TI)" Date: Tue, 20 Jan 2026 17:54:44 -0800 Subject: [PATCH 1/2] PM / QoS: add flag to indicate latency applies system-wide 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-1-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=2313; i=khilman@baylibre.com; h=from:subject:message-id; bh=k+Fl6IhMZkW4zdULsvbRzYFhAZS1AjCB/KSpAtlWRRU=; b=owEBbQKS/ZANAwAIAVk3GJrT+8ZlAcsmYgBpcDHlEX4ueOIJZgbwN2tO5otIiqWKqMV9b2qfb N1Bouzo+OyJAjMEAAEIAB0WIQR7h0YOFpJ/qfW/8QxZNxia0/vGZQUCaXAx5QAKCRBZNxia0/vG ZcXHD/9cHpqeANTcR/xoS8Drc0O9cMGrPVLgCAoQF4x4OHvwCYDzawxIwXt60R0JOZxlGIxfTLy kNnLdQbV91lWmNch5cfBoTlXqSu00FtoDsdZ1/U454KRWXpMQxG7oL95k5R23kbuui6TS6OowXi PU++Sy7cTRTzQcTMBR+cx/2361SvXc1MtetxVAT8zc0vWiKzsu+Zex5szs/EMDpYBMWhzY44iq6 cTDxxklpxpaRmzWfd5zj6NvY1SOVobcaN58OmkC9QiAdvDHPbYw/SXS6eLV7If++by4FJYqPsWz oyf8pVosAJPJhjt6xjYAdM3kqr/unErsOulVP6Nvn909FQ/W2ly4gN24TAs//9zWnguWjP0HdEL FJANuu4tJluhK3xfGS8KKx5fXLPj79mnWwylOmm3TbzQAzuee5dGsia0F6rtbPgu/WSc1DrjgES FpXtrF82Tffd+zgeBh3Az3MsQ0W/SvhJldwHZmn3oV/LpvsAKaWRksPToc/MUOyo2V+TovBy3bV MKzlB06CqPo8q8txslxmFHPy4aaqdzwloC+tGZChg6XBV/pbp5fzCQs+FtqraKM52DDBPSb/lB5 0q8F7rbLR4sGD6ktqrCcyiSDbF2VDyC7tIqTW516RdqKgWOFy4KjweAieNyEYHcbM7d3xNXKZSa yWrDDeL5VBAz7mw== X-Developer-Key: i=khilman@baylibre.com; a=openpgp; fpr=7B87460E16927FA9F5BFF10C5937189AD3FBC665 By default, the QoS resume latency currenly only applied to runtime PM decisions. Add new PM_QOS_FLAG_LATENCY_SYS flag to indicate that the resume latency QoS constraint should be applied to system-wide PM, and *not* runtime PM. Signed-off-by: Kevin Hilman (TI) Acked-by: Rafael J. Wysocki (Intel) --- drivers/base/power/sysfs.c | 27 +++++++++++++++++++++++++++ include/linux/pm_qos.h | 2 ++ 2 files changed, 29 insertions(+) diff --git a/drivers/base/power/sysfs.c b/drivers/base/power/sysfs.c index 13b31a3adc77..9136c13c17e4 100644 --- a/drivers/base/power/sysfs.c +++ b/drivers/base/power/sysfs.c @@ -316,6 +316,32 @@ static ssize_t pm_qos_no_power_off_store(struct device= *dev, =20 static DEVICE_ATTR_RW(pm_qos_no_power_off); =20 +static ssize_t pm_qos_latency_sys_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + return sysfs_emit(buf, "%d\n", !!(dev_pm_qos_requested_flags(dev) + & PM_QOS_FLAG_LATENCY_SYS)); +} + +static ssize_t pm_qos_latency_sys_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t n) +{ + int ret; + + if (kstrtoint(buf, 0, &ret)) + return -EINVAL; + + if (ret !=3D 0 && ret !=3D 1) + return -EINVAL; + + ret =3D dev_pm_qos_update_flags(dev, PM_QOS_FLAG_LATENCY_SYS, ret); + return ret < 0 ? ret : n; +} + +static DEVICE_ATTR_RW(pm_qos_latency_sys); + #ifdef CONFIG_PM_SLEEP static const char _enabled[] =3D "enabled"; static const char _disabled[] =3D "disabled"; @@ -681,6 +707,7 @@ static const struct attribute_group pm_qos_latency_tole= rance_attr_group =3D { =20 static struct attribute *pm_qos_flags_attrs[] =3D { &dev_attr_pm_qos_no_power_off.attr, + &dev_attr_pm_qos_latency_sys.attr, NULL, }; static const struct attribute_group pm_qos_flags_attr_group =3D { diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h index 6cea4455f867..aededda52b6b 100644 --- a/include/linux/pm_qos.h +++ b/include/linux/pm_qos.h @@ -37,6 +37,8 @@ enum pm_qos_flags_status { #define PM_QOS_LATENCY_TOLERANCE_NO_CONSTRAINT (-1) =20 #define PM_QOS_FLAG_NO_POWER_OFF (1 << 0) +/* latency value applies to system-wide suspend/s2idle */ +#define PM_QOS_FLAG_LATENCY_SYS (2 << 0) =20 enum pm_qos_type { PM_QOS_UNITIALIZED, --=20 2.51.0 From nobody Sun Feb 8 21:29:01 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