Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp357833pxb; Tue, 3 Nov 2020 01:11:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJzHNwE9geA2pqSe2kRCTwEj938Jsf5Jqp7YNqzEVJulfoGncKP8h6tr721T2Tof1/PJ65C2 X-Received: by 2002:a50:fa92:: with SMTP id w18mr521077edr.44.1604394663262; Tue, 03 Nov 2020 01:11:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1604394663; cv=none; d=google.com; s=arc-20160816; b=ZYM5IDEKlOqRDlkmu6S6xpaLD+nidNpT2c8cklNrVLmVOyoFZVHq/Pmm5vjHSL6ndz qJ8xOdVRMoKLqw36dmr+SUetfgO1NFnBDQuag7KGG3szDp06Agpa9Pxli1Fr6VPLj8ef KfMTRjNeH0CvC3ZQXoq91STyb/+uUei4tghzQlUmDLDhbWIyeBtbpAZZ7aSr41cRCiiV 1CVfV3t4W0u9Z/Ctyxlva6g5ROu0N6ZrPBj6n7q8NpONbXiN510fIGnYG3iV3mNVKWkW aWkyRjmsYVCw5aE9sRgD/FUCn1fQ42bviV5GFPH7UBqI9f8I6VPJi7NDcXj0J3X/nbmX pUNA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from; bh=ic8+Z5yMlTLOrWTzURnNYhvUxCayJ5LPMh5XUTIznxQ=; b=GpHm8UPMUOLX/0Ln08XcaBhbZsrPCSTc0zOPWqNNa0pqAt3xVHU4wMx9HrFq0pb59/ Ry1n9x71fC38eq7z5d3mQadAetKfc1NwNg0/m56ngw6+8pNCQ+sTvAXbEvAmVk4D1Z+x 8rYXhu95Ik1Zfj0vohmuxU0bcbbBMV5oTR24c8u1BUWsItd4NXh/YIMtK8A4Y10yTSgq Jr8MKm9EOMAUvfWSo7QGg9Z/Uzz6OZOvmJTTAYnRKgC7rdA/4d4jgpv/VocrXozNlucO U31TMeW8oqlhxu4ofzA97eYrKY+cE5xYWl/1u5L/kyHbZP9KHQt1T1BP9hSxxka6f7py lRiQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b4si12086455edy.510.2020.11.03.01.10.39; Tue, 03 Nov 2020 01:11:03 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727760AbgKCJGp (ORCPT + 99 others); Tue, 3 Nov 2020 04:06:45 -0500 Received: from foss.arm.com ([217.140.110.172]:44776 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727787AbgKCJGg (ORCPT ); Tue, 3 Nov 2020 04:06:36 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id CAFCB139F; Tue, 3 Nov 2020 01:06:35 -0800 (PST) Received: from e123648.arm.com (unknown [10.57.19.30]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 409B03F719; Tue, 3 Nov 2020 01:06:31 -0800 (PST) From: Lukasz Luba To: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, linux-doc@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: robh+dt@kernel.org, amitk@kernel.org, corbet@lwn.net, daniel.lezcano@linaro.org, lukasz.luba@arm.com, Dietmar.Eggemann@arm.com, morten.rasmussen@arm.com, qperret@google.com, dianders@chromium.org, mka@chromium.org, rnayak@codeaurora.org, rafael@kernel.org, sudeep.holla@arm.com, viresh.kumar@linaro.org, sboyd@kernel.org, nm@ti.com Subject: [PATCH v4 4/4] docs: power: Update Energy Model with new flag indicating power scale Date: Tue, 3 Nov 2020 09:06:00 +0000 Message-Id: <20201103090600.29053-5-lukasz.luba@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201103090600.29053-1-lukasz.luba@arm.com> References: <20201103090600.29053-1-lukasz.luba@arm.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Update description and meaning of a new flag, which indicates the type of power scale used for a registered Energy Model (EM) device. Reviewed-by: Quentin Perret Signed-off-by: Lukasz Luba --- Documentation/power/energy-model.rst | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/Documentation/power/energy-model.rst b/Documentation/power/energy-model.rst index ba7aa581b307..60ac091d3b0d 100644 --- a/Documentation/power/energy-model.rst +++ b/Documentation/power/energy-model.rst @@ -30,6 +30,8 @@ These subsystems are more interested in estimation of power used in the past, thus the real milli-Watts might be needed. An example of these requirements can be found in the Intelligent Power Allocation in Documentation/driver-api/thermal/power_allocator.rst. +Kernel subsystems might implement automatic detection to check whether EM +registered devices have inconsistent scale (based on EM internal flag). Important thing to keep in mind is that when the power values are expressed in an 'abstract scale' deriving real energy in milli-Joules would not be possible. @@ -86,7 +88,7 @@ Drivers are expected to register performance domains into the EM framework by calling the following API:: int em_dev_register_perf_domain(struct device *dev, unsigned int nr_states, - struct em_data_callback *cb, cpumask_t *cpus); + struct em_data_callback *cb, cpumask_t *cpus, bool milliwatts); Drivers must provide a callback function returning tuples for each performance state. The callback function provided by the driver is free @@ -94,6 +96,10 @@ to fetch data from any relevant location (DT, firmware, ...), and by any mean deemed necessary. Only for CPU devices, drivers must specify the CPUs of the performance domains using cpumask. For other devices than CPUs the last argument must be set to NULL. +The last argument 'milliwatts' is important to set with correct value. Kernel +subsystems which use EM might rely on this flag to check if all EM devices use +the same scale. If there are different scales, these subsystems might decide +to: return warning/error, stop working or panic. See Section 3. for an example of driver implementing this callback, and kernel/power/energy_model.c for further documentation on this API. @@ -169,7 +175,8 @@ EM framework:: 37 nr_opp = foo_get_nr_opp(policy); 38 39 /* And register the new performance domain */ - 40 em_dev_register_perf_domain(cpu_dev, nr_opp, &em_cb, policy->cpus); - 41 - 42 return 0; - 43 } + 40 em_dev_register_perf_domain(cpu_dev, nr_opp, &em_cb, policy->cpus, + 41 true); + 42 + 43 return 0; + 44 } -- 2.17.1