Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp30304973rwd; Thu, 6 Jul 2023 04:07:37 -0700 (PDT) X-Google-Smtp-Source: APBJJlH79mwvxLrWX/EbOCmR4eiwSTDRv2WX0qYmpIKKcDr67kMMaf/Ai58pVY1QNS9Ro9EUWDS1 X-Received: by 2002:a17:902:7003:b0:1b3:d4ed:8306 with SMTP id y3-20020a170902700300b001b3d4ed8306mr1099744plk.19.1688641657510; Thu, 06 Jul 2023 04:07:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688641657; cv=none; d=google.com; s=arc-20160816; b=WuL2iycbDCP6YD7jNNN1iZRWvKoKymQTpxnhRWIcPX1cOUo6uoZKK2w+RGyVGnWuyo o12ORZYcSgvzaYl6uT734cLQy8V+6hNMehDwr30SRgpDNQjWchq5lxBURSqlK6mpaUht /mwE2AG2EL4Eaux6D80H+XH471Z/1wOzg72fOfChUpl0U8JRKeZ7BDvHIqwgjUv+cAEU 7SCzCAUAeqcvgB4RxJ3/9EioX+iIQiByUmS4+caLRRW+qab+sj/7/BuX5HWC8Dyd4ga7 OCBEOvz0tAg7q3KtzbPqvsQ6sVwu3yiB4xhZT45biQaVJ7oGU4SYwf4AfdSVgySiV0np K9rg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date; bh=PPWS34DtPO5hfW9VIIdL45HeLtGAG/1Q2mOBqasHiY4=; fh=AVGRLGq8JkD1pslEumaYOq2FVZZDEbBvwae5GOJHzAs=; b=Jj/h49NlKI8Vv3poUgGi3B6UpaCuDikxJkoFcrGJf/q7/5GtDCSVoM71UyVOcPK/2Y 9mx8Vno01PuKj1wHEsydSjsyF2j+Sk5RaRfvzc/dMbYgd17ub5q++Z6OZ+wGNTF0WlsY e5ZMlwNLlNKGvT1k2fXY01hfGhY8sLfZnVm/ew9Brecpp+7rhT9GnZzqhriUZrqArUK3 cYIbJIremlkBv+MoylhwB+IsV3h3bN790SjquuFHYEOd76r1WneQSuZE5NcqeoaTPBK+ L/E9XQ0BSvtZtXsx5L1u4JVMBR2YmYwWc8ekWb4pgeaXQfxXOmGNbJ9vlO7xY6BmfwhD oORA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id jx17-20020a170903139100b001b8aef277a3si1016255plb.45.2023.07.06.04.07.23; Thu, 06 Jul 2023 04:07:37 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S232330AbjGFK4x (ORCPT + 99 others); Thu, 6 Jul 2023 06:56:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44640 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231769AbjGFK43 (ORCPT ); Thu, 6 Jul 2023 06:56:29 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 0AF0826AD; Thu, 6 Jul 2023 03:55:36 -0700 (PDT) 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 D9EFD1480; Thu, 6 Jul 2023 03:56:17 -0700 (PDT) Received: from e120937-lin (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2D1903F663; Thu, 6 Jul 2023 03:55:34 -0700 (PDT) Date: Thu, 6 Jul 2023 11:55:32 +0100 From: Cristian Marussi To: andy.shevchenko@gmail.com Cc: Oleksii Moisieiev , "sudeep.holla@arm.com" , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Linus Walleij , "linux-arm-kernel@lists.infradead.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-gpio@vger.kernel.org" Subject: Re: [PATCH v3 2/4] firmware: arm_scmi: Add SCMI v3.2 pincontrol protocol basic support Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jul 04, 2023 at 12:27:40AM +0300, andy.shevchenko@gmail.com wrote: > Fri, Jun 30, 2023 at 05:02:12PM +0100, Cristian Marussi kirjoitti: > > On Wed, Jun 07, 2023 at 10:10:44AM +0300, andy.shevchenko@gmail.com wrote: > > > Tue, Jun 06, 2023 at 04:22:27PM +0000, Oleksii Moisieiev kirjoitti: > > ... > Hi Andy, > > > > -scmi-protocols-y = base.o clock.o perf.o power.o reset.o sensors.o system.o voltage.o powercap.o > > > > +scmi-protocols-y = base.o clock.o perf.o power.o reset.o sensors.o system.o voltage.o powercap.o pinctrl.o > > > > > > Why not splitting it and make it ordered? > > > > Maybe a good idea for a separate cleanup...not sure can fit this series > > without causing churn with other in-flight SCMI series...I'll happily wait > > for Sudeep to decide. [snip] > > > > + } > > ... > > > > All the same, why devm_*() is in use and what are the object lifetimes? > > > > This bit about alocation and devres deserves an explanation in the context > > of the SCMI stack. > > > > So, you can add support for a new SCMI protocol using the below macro > > > > DEFINE_SCMI_PROTOCOL_REGISTER_UNREGISTER > > > > to register with the core SCMI stack a few things like an > > initialization function and the protocol operations you wish this > > protocol to expose. > > > > At run-time, once the first user of your new protocol comes up (like > > the pinctrl driver later in the series), the core SCMI will take care > > to setup and initialize the protocol so that can be used by the SCMI > > drivers (like pinctrl-scmi.c) via its exposed proto_operations. > > (assuming the protocol has been also found as supported by the fw > > serving as the SCMI server) > > > > When the last user of a protocol is gone, similarly, the protocol > > will be deinitialized (if anything is needed to be deinit really...) > > > > Basically the core calls upfront the protocol_init function you provided > > and passes to it a ph protocol_handle that embeds a number of things > > useful for protocol implementations, like as example the xops-> needed > > to build and send messages using the core facilities. > > > > Another thing that is embedded in the ph, as you noticed, is the ph->dev > > device reference to be optionally used for devres in your protocol: now, > > we do NOT have per-protocol devices, so, that device lifetine is NOT bound > > strictly to this protocol but to the whole stack... BUT the SCMI core > > takes care to open/close a devres group around your protocol_init invocation, > > so that you can use devres on your .protocol_init, and be assured that when > > your protocol will be de-initialized (since no more used by anyone) all your > > devres allocations will be freed. > > > > For this see: > > > > drivers/firmware/arm_scmi/driver.c::scmi_alloc_init_protocol_instance() > > > > This clearly works ONLY for allocations descending directly from the > > .protocol_init() call (when the devres group is open) and it was working > > fine till today for all protocols, since all existing protocols > > allocated all what they needed during protocol_init.... > > > > ... Pinctrl is a differenet beast, though, since it could make sense indeed > > (even though still under a bit of discussion..) to delay some allocations and > > SCMI querying to the platform after the protocol_init stage...i.e. lazy allocate > > some resources only later when the pinctrl subsystem will parse the DT and will > > ask the pinctrl-scmi driver just for the strictly needed resources. > > (so you avoid to query and allocate at boot time a bunch of pin stuff that you > > will never use...) > > > > These lazy allocations instead, like the ones in scmi_pinctrl_get_group_info(), > > happen outside of the .protocol_init path so they HAVE TO to be explicitly > > managed manually without devres; as a consequence the addition of a > > dedicated .protocol_deinit() function and the frees on the err path: so > > that anything non devres allocated in the protcol devres_group can be > > freed properly when the core deinitializes the protocol. > > > > What is WRONG, though, in this patch (and I missed it ... my bad) is that such > > explicit manual alloc/dealloc need not and should not be of devres kind but just > > plain simple kmalloc_ / kfree. > > (even though it is not harmful in this context...the ph->dev never unbounds till > > the end of the stack..it is certainkly not needed and confusing) > > > > Hoping not to have bored you to death with all of this SCMI digression... :D > > Thank you for a dive into the implementation of the SCMI. Perhaps you can > summarize that into some kernel doc aroung thouse callbacks, so people can > clearly see when it's possible and when it's not to use devm_*() APIs. > Absolutely, this is definitely missing, it's just that till now I was the only dealing with this, so docs was overlooked ... and I am really the first to be in need of this documentation :P Thanks, Cristian P.S.: and apologies for late replies but our mail server seems to constantly classify you as spam :D