Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp5971941pxb; Tue, 16 Feb 2021 12:16:00 -0800 (PST) X-Google-Smtp-Source: ABdhPJxq8L0FCzPIQMUn00Sqndl/5DUAfbhNCXSmBqhKUWVUjR0hOfp9P22pjXX3D+kts0swsbOA X-Received: by 2002:a05:6402:22d0:: with SMTP id dm16mr1728081edb.370.1613506560240; Tue, 16 Feb 2021 12:16:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1613506560; cv=none; d=google.com; s=arc-20160816; b=0Zm+5T8k+PEoqvLzjXM9HJ39VaKQ1PBAskJDcbG7hjCyqCVU5qJzYRUWbiotvYI7Uv rnF7OlrbPGKl9rNWfVTN83mWi2VOWtkJ9Ge7nb2GjKKuGGtiJcrssH3JEdgiy8Wih2+l IzfJAV4Y5R3U2tXyMprTfF2edVSF94mH+tafw7k00r51f8ehe24AGK1G9xJn+HVkBgVj a4NDRxhdC1HfK1PoUbjW1r5O5Oa0tPunqZcvl+s5yZdXq6BOkd7T2+aqvCfPxzTf8k9O wFY6TYDYqfCMz/Ewp8/Aoy94X8M0OV/GWOElqrIJKmQyiHv1Nsb4KDoO8cNFIM4DQafX l5oA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=ESU2v6PnWuuqrc3aBtGPRviCIYxee3TEkKh6dRFK5uo=; b=jB7riFEJdNbRXquu0XC+wczE3pq+ZjBJ0vPkl/6IftrJxXAp1VZk//ejMHqVLMvTPB BmIBEjzL/TLlfbKYTMnyFgTYjo8SL89okQTueSDaKy60JPrwEVZDeheqQ9eTfJeMbW0f lQTH2yVJW0IbMT8p2ahAy/ah9FClUw96zcp6YoVZkRsq8vTQp7Hvl5ArqgCjHkyUDwbK Y+I4d5y/mqAkZlV9gn/8/4PYXmhbm8TJsc3STBiMwX/kIabhRLFlUwHZrZXajJdlqBP0 XVjT79dH8gjhD5iXnOAaVA699k7HYwRsOeaXudDgVxQU7vPmGPY1MYRDC+iP1nExSzcN ItIA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@marek-ca.20150623.gappssmtp.com header.s=20150623 header.b=Gb3bXHKR; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dp16si14299463ejc.49.2021.02.16.12.15.35; Tue, 16 Feb 2021 12:16:00 -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; dkim=pass header.i=@marek-ca.20150623.gappssmtp.com header.s=20150623 header.b=Gb3bXHKR; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229811AbhBPUMM (ORCPT + 99 others); Tue, 16 Feb 2021 15:12:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40408 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229577AbhBPUML (ORCPT ); Tue, 16 Feb 2021 15:12:11 -0500 Received: from mail-qv1-xf30.google.com (mail-qv1-xf30.google.com [IPv6:2607:f8b0:4864:20::f30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A784FC061574 for ; Tue, 16 Feb 2021 12:11:30 -0800 (PST) Received: by mail-qv1-xf30.google.com with SMTP id g3so5258487qvl.2 for ; Tue, 16 Feb 2021 12:11:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marek-ca.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=ESU2v6PnWuuqrc3aBtGPRviCIYxee3TEkKh6dRFK5uo=; b=Gb3bXHKRAg/D7IARf3bWgbaQnVZPbDzZXMaW8ftiH2UDhv1Dze7XbrejZTpAghSOJQ eyJwEDlW3onw3k29tSH3mp7Ab2RBOAVYpkhTeomnvz0+WRqmFiEa5Uf0WP9eVB2v3eFB P3u29V2HepHJuKqgSy4HGcf1kukKcKKI/xlR/iebsRLPSajCIHprbjaNCv1U4uiep05H sk2rs4bfStcQI7IsirbvbBxXst6SYAMgjx1T7nkNS3mV41BBC0IKs6E6iPIulBL6GHKE iCEFPAilq4jv9bbsQ4ncj0asisko/+/Hnmc0C7OmIEv2drTF3exVkTNjX+LkxJBONs80 42aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=ESU2v6PnWuuqrc3aBtGPRviCIYxee3TEkKh6dRFK5uo=; b=IC6at8k01b+7NcRb72IW7kepYl5iaCMEf3UKigMCxcdekrfPczHyalQ4291g8HRori rVZtMyqcbC9kfD/0WLkc/66qtxqIRttCPip9JVJuoUD6P2m8SVNH2fc4i3zsHsPl0vJQ g7RN93IYEt54Zlk/fKlWSFaqmN6SXq01TWWZ8bXZ003BZ5Wjt2La6wbdG5T8BTjnwI1/ ZYbDzzD5OoX7ECAB/Kzrb8S46V/2c+4pFf5u3+GY7UZVYctQkF1oG5L+8EtnriLJnM8e uVui2R+yvm3+w8Sva8bKwzztzk1e7XbijP2TTGZ1qfQ+WFiiHJsViZoieZ7oIuaznpwS TEmw== X-Gm-Message-State: AOAM5326mwkNpWUoTNbAVZTxnIx6OcJOuWL31H0BgQ/RwxtKz4tFkErn NDIwVu5ADk25E35XTEpaffw3xw== X-Received: by 2002:a05:6214:16cf:: with SMTP id d15mr21451336qvz.32.1613506289989; Tue, 16 Feb 2021 12:11:29 -0800 (PST) Received: from localhost.localdomain (modemcable068.184-131-66.mc.videotron.ca. [66.131.184.68]) by smtp.gmail.com with ESMTPSA id t6sm13790761qti.2.2021.02.16.12.11.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Feb 2021 12:11:29 -0800 (PST) From: Jonathan Marek To: linux-arm-msm@vger.kernel.org Cc: Viresh Kumar , Nishanth Menon , Stephen Boyd , linux-pm@vger.kernel.org (open list:OPERATING PERFORMANCE POINTS (OPP)), linux-kernel@vger.kernel.org (open list) Subject: [PATCH] opp: fix dev_pm_opp_set_rate for different frequency at the same opp level Date: Tue, 16 Feb 2021 15:10:29 -0500 Message-Id: <20210216201030.19152-1-jonathan@marek.ca> X-Mailer: git-send-email 2.26.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org There is not "nothing to do" when the opp is the same. The frequency can be different from opp->rate. Fixes: 81c4d8a3c414 ("opp: Keep track of currently programmed OPP") Signed-off-by: Jonathan Marek --- drivers/opp/core.c | 7 +++++-- drivers/opp/opp.h | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/opp/core.c b/drivers/opp/core.c index c3f3d9249cc5..f82cf72f433e 100644 --- a/drivers/opp/core.c +++ b/drivers/opp/core.c @@ -986,6 +986,7 @@ static int _set_opp(struct device *dev, struct opp_table *opp_table, struct dev_pm_opp *opp, unsigned long freq) { struct dev_pm_opp *old_opp; + unsigned long old_freq; int scaling_down, ret; if (unlikely(!opp)) @@ -996,15 +997,16 @@ static int _set_opp(struct device *dev, struct opp_table *opp_table, _find_current_opp(dev, opp_table); old_opp = opp_table->current_opp; + old_freq = opp_table->current_freq; /* Return early if nothing to do */ - if (opp_table->enabled && old_opp == opp) { + if (opp_table->enabled && old_opp == opp && old_freq == freq) { dev_dbg(dev, "%s: OPPs are same, nothing to do\n", __func__); return 0; } dev_dbg(dev, "%s: switching OPP: Freq %lu -> %lu Hz, Level %u -> %u, Bw %u -> %u\n", - __func__, old_opp->rate, freq, old_opp->level, opp->level, + __func__, old_freq, freq, old_opp->level, opp->level, old_opp->bandwidth ? old_opp->bandwidth[0].peak : 0, opp->bandwidth ? opp->bandwidth[0].peak : 0); @@ -1061,6 +1063,7 @@ static int _set_opp(struct device *dev, struct opp_table *opp_table, /* Make sure current_opp doesn't get freed */ dev_pm_opp_get(opp); opp_table->current_opp = opp; + opp_table->current_freq = freq; return ret; } diff --git a/drivers/opp/opp.h b/drivers/opp/opp.h index 9b9daf83b074..9f1d9c877380 100644 --- a/drivers/opp/opp.h +++ b/drivers/opp/opp.h @@ -186,6 +186,7 @@ struct opp_table { enum opp_table_access shared_opp; struct dev_pm_opp *current_opp; struct dev_pm_opp *suspend_opp; + unsigned long current_freq; struct mutex genpd_virt_dev_lock; struct device **genpd_virt_devs; -- 2.26.1