From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BA08CC32771 for ; Wed, 28 Sep 2022 17:29:23 +0000 (UTC) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 9F58883914; Wed, 28 Sep 2022 19:29:21 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="JR0Z3tb3"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 2D77984BB4; Wed, 28 Sep 2022 19:29:20 +0200 (CEST) Received: from mail-qt1-x82b.google.com (mail-qt1-x82b.google.com [IPv6:2607:f8b0:4864:20::82b]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 30A7683914 for ; Wed, 28 Sep 2022 19:29:16 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=seanga2@gmail.com Received: by mail-qt1-x82b.google.com with SMTP id w2so8361342qtv.9 for ; Wed, 28 Sep 2022 10:29:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date; bh=mONCXH9FPeygf78dXAHoYc+c73jklwTYQhLbkfNjHAs=; b=JR0Z3tb3Yskkh10FeIXls9VB9S84GgzO5h134hldt9qoD58ztk+Kx/384fApBAZ1aA p07gC+V6KJgDdM2NCE+6Is1ZkrGe5t+iXmt/7f3z9oi+Lzb6LYLfotp/CVm9ioZckgMM kvTYLHGu3LL4F5pqvGmCb8kmIxcGWKsslHtKWP4EAdVKf3JhCil+x5MhvpwGG+XrQHn8 cC+1uBjkxuYqJUp5D18ekk8zCqfoGoKhoGhE4mPBytOkqP02RUJBeVee8faNf7khCfbw 4iYkXC7TSqpPWDuU9OpmI/NvAW8GDCJC/06A797De+UsA4E9wK0XD/7ptTuWjxpJfp9J aemg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date; bh=mONCXH9FPeygf78dXAHoYc+c73jklwTYQhLbkfNjHAs=; b=npfZNzBAzTLcsbkGKCaAc/chxDN+aEnQ3Mhv7jqDH8Ve3OC/IqeMC2veEJ9Q06uxfE ZqleM5571grjvfpbVgzjfclwsLMXdohGaXyY7sBdRJqPkL17+Am+l+tZQn4Jg/arznlK olX1LT8nSRIDRbHZ0l/noVRVcfaYLt5Unw/m2qTmzaI5qso0ZqHIJ/16GTC0LuiI+smR s8M5cNiPdaEmnGNMM1kSECiWO+S1UtRvkJaeVJxJRB6JyBJScN/SFzL7s2WT4lVQEJem ALHKivvEYt6x29Gj1q20RQNVsqA1n63TYtD8cGpTUif8Zunny41LQ+2L3YRPfizfSoaw wtHw== X-Gm-Message-State: ACrzQf22prpUvu1GuxQx2Sa85+qYxNB00h7sVXoYKqNxr7/hVKelX3hY Nth+1AwIf82VHLrethElwg4= X-Google-Smtp-Source: AMsMyM7kiJd8wfdiLbjbrV03S1NVk2nBUTQ/hjQAmXWI8pYWk49tnI2kNG/POqvuQgdAHQ0LGh2rJg== X-Received: by 2002:a05:622a:15c1:b0:35c:db1e:cdef with SMTP id d1-20020a05622a15c100b0035cdb1ecdefmr27717164qty.104.1664386154988; Wed, 28 Sep 2022 10:29:14 -0700 (PDT) Received: from [192.168.1.201] (pool-173-73-95-180.washdc.fios.verizon.net. [173.73.95.180]) by smtp.gmail.com with ESMTPSA id t18-20020a05622a181200b0035cf5edefa6sm3658406qtc.56.2022.09.28.10.29.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 28 Sep 2022 10:29:14 -0700 (PDT) Message-ID: <7907e87f-b4c8-d40d-ee5a-5874e3d0f861@gmail.com> Date: Wed, 28 Sep 2022 13:29:13 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH v2 10/14] clk: scmi: support SCMI multi-channel Content-Language: en-US To: Etienne Carriere , u-boot@lists.denx.de Cc: Patrick Delaunay , Patrice Chotard , Lukasz Majewski References: <20220531160929.931150-1-etienne.carriere@linaro.org> <20220531160929.931150-11-etienne.carriere@linaro.org> From: Sean Anderson In-Reply-To: <20220531160929.931150-11-etienne.carriere@linaro.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean On 5/31/22 12:09, Etienne Carriere wrote: > Update SCMI clock driver to get its assigned SCMI channel during > initialization. This change allows SCMI clock protocol to use a > dedicated channel when defined in the DT. The reference is saved > in SCMI clock driver private data. > > Cc: Lukasz Majewski > Cc: Sean Anderson > Signed-off-by: Etienne Carriere > --- > Changes since v1: > - Define a private struct to hold channel reference rather than using > device private data reference as opaque channel reference. > > --- > drivers/clk/clk_scmi.c | 33 ++++++++++++++++++++++++++------- > 1 file changed, 26 insertions(+), 7 deletions(-) > > diff --git a/drivers/clk/clk_scmi.c b/drivers/clk/clk_scmi.c > index 0d0bb72eaf7..d172fed24c9 100644 > --- a/drivers/clk/clk_scmi.c > +++ b/drivers/clk/clk_scmi.c > @@ -1,6 +1,6 @@ > // SPDX-License-Identifier: GPL-2.0+ > /* > - * Copyright (C) 2019-2020 Linaro Limited > + * Copyright (C) 2019-2022 Linaro Limited > */ > > #define LOG_CATEGORY UCLASS_CLK > @@ -13,8 +13,17 @@ > #include > #include > > +/** > + * struct scmi_clk_priv - Private data for SCMI clocks > + * @channel: Reference to the SCMI channel to use > + */ > +struct scmi_clk_priv { > + struct scmi_channel *channel; > +}; > + > static int scmi_clk_get_num_clock(struct udevice *dev, size_t *num_clocks) > { > + struct scmi_clk_priv *priv = dev_get_priv(dev); > struct scmi_clk_protocol_attr_out out; > struct scmi_msg msg = { > .protocol_id = SCMI_PROTOCOL_ID_CLOCK, > @@ -24,7 +33,7 @@ static int scmi_clk_get_num_clock(struct udevice *dev, size_t *num_clocks) > }; > int ret; > > - ret = devm_scmi_process_msg(dev, NULL, &msg); > + ret = devm_scmi_process_msg(dev, priv->channel, &msg); > if (ret) > return ret; > > @@ -35,6 +44,7 @@ static int scmi_clk_get_num_clock(struct udevice *dev, size_t *num_clocks) > > static int scmi_clk_get_attibute(struct udevice *dev, int clkid, char **name) > { > + struct scmi_clk_priv *priv = dev_get_priv(dev); > struct scmi_clk_attribute_in in = { > .clock_id = clkid, > }; > @@ -49,7 +59,7 @@ static int scmi_clk_get_attibute(struct udevice *dev, int clkid, char **name) > }; > int ret; > > - ret = devm_scmi_process_msg(dev, NULL, &msg); > + ret = devm_scmi_process_msg(dev, priv->channel, &msg); > if (ret) > return ret; > > @@ -60,6 +70,7 @@ static int scmi_clk_get_attibute(struct udevice *dev, int clkid, char **name) > > static int scmi_clk_gate(struct clk *clk, int enable) > { > + struct scmi_clk_priv *priv = dev_get_priv(clk->dev); > struct scmi_clk_state_in in = { > .clock_id = clk->id, > .attributes = enable, > @@ -70,7 +81,7 @@ static int scmi_clk_gate(struct clk *clk, int enable) > in, out); > int ret; > > - ret = devm_scmi_process_msg(clk->dev, NULL, &msg); > + ret = devm_scmi_process_msg(clk->dev, priv->channel, &msg); > if (ret) > return ret; > > @@ -89,6 +100,7 @@ static int scmi_clk_disable(struct clk *clk) > > static ulong scmi_clk_get_rate(struct clk *clk) > { > + struct scmi_clk_priv *priv = dev_get_priv(clk->dev); > struct scmi_clk_rate_get_in in = { > .clock_id = clk->id, > }; > @@ -98,7 +110,7 @@ static ulong scmi_clk_get_rate(struct clk *clk) > in, out); > int ret; > > - ret = devm_scmi_process_msg(clk->dev, NULL, &msg); > + ret = devm_scmi_process_msg(clk->dev, priv->channel, &msg); > if (ret < 0) > return ret; > > @@ -111,6 +123,7 @@ static ulong scmi_clk_get_rate(struct clk *clk) > > static ulong scmi_clk_set_rate(struct clk *clk, ulong rate) > { > + struct scmi_clk_priv *priv = dev_get_priv(clk->dev); > struct scmi_clk_rate_set_in in = { > .clock_id = clk->id, > .flags = SCMI_CLK_RATE_ROUND_CLOSEST, > @@ -123,7 +136,7 @@ static ulong scmi_clk_set_rate(struct clk *clk, ulong rate) > in, out); > int ret; > > - ret = devm_scmi_process_msg(clk->dev, NULL, &msg); > + ret = devm_scmi_process_msg(clk->dev, priv->channel, &msg); > if (ret < 0) > return ret; > > @@ -136,10 +149,15 @@ static ulong scmi_clk_set_rate(struct clk *clk, ulong rate) > > static int scmi_clk_probe(struct udevice *dev) > { > + struct scmi_clk_priv *priv = dev_get_priv(dev); > struct clk *clk; > size_t num_clocks, i; > int ret; > > + ret = devm_scmi_of_get_channel(dev, &priv->channel); > + if (ret) > + return ret; > + > if (!CONFIG_IS_ENABLED(CLK_CCF)) > return 0; > > @@ -186,5 +204,6 @@ U_BOOT_DRIVER(scmi_clock) = { > .name = "scmi_clk", > .id = UCLASS_CLK, > .ops = &scmi_clk_ops, > - .probe = &scmi_clk_probe, > + .probe = scmi_clk_probe, > + .priv_auto = sizeof(struct scmi_clk_priv *), > }; Reviewed-by: Sean Anderson