Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp6642978rwb; Tue, 22 Nov 2022 16:49:41 -0800 (PST) X-Google-Smtp-Source: AA0mqf5xczScq8uWIKfFq4ZjdIoJL+jTTUhvuldXuhb931Hivm6WrWFA1ABY+IaehKQRCgbs292u X-Received: by 2002:a17:906:144c:b0:7ad:cda3:93c7 with SMTP id q12-20020a170906144c00b007adcda393c7mr21983111ejc.500.1669164581470; Tue, 22 Nov 2022 16:49:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1669164581; cv=none; d=google.com; s=arc-20160816; b=ul+g66NT4b7NGEe4qSTLnQFZq2sh1+6P58P3QtuauLAcWEc74VFNz37axfQlyQHLRr K6LIYiMNCpDB6xW681w9SiEaCpJ9eCF72FH6GzfBKrcMCXV+WJD8tYjszAUD2x3Kp+Ts I/CH/KabsdZ77/NFD0wP8XcQglm1MErpin4NfisPFHfzGWJVTGKFNl7xMBQ0g1t8G75u i5+fwXbyq+Dn96ZRr2js3XVomLd7kISWfFTxaezEaFHeLRg3g74XafiGFLuxrYP0JUEH +N0b0gAnbG+v8XxrFKELJetlmNeyLIAoXw0hCZyJy6YAJxmRTfbEevcyiEVsa3SYNjdl MItg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=MSgIibd7PPWjdbrAznTN3rMaaj73nclCItTKFGqjTmM=; b=eMAJnYiRCHfugq81ao4tqOBhfIku4ZFBdR9cWVDeGmztIVApy66X+5YXBBZDYyJSWZ jR++AG2i57WmkOqQG56dQbmw2F4s8RwNMa/lt/BFqh69ciu14TOuBJkWGZtFCzNABre/ jQcjzYZU9oXFqezx4lgOnOndj8AftdeGCUmSB2TfE7d/KLlmFkzPwsfYh+tt2yI9962A jpncFcY6Gpka+A6I54DIQLxS8p/zu9cuMiNgCc4gwnG4SvTx05lW46ZylykmkNYkFnP2 j8fSrEQUOxwYz3sUTfdzG8hgW2VerPT5Hw2jg6L0RFy0gVTZ+i3RirHB3SRMr+XWR3v0 SluQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=qYSBPvDP; 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=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id le30-20020a170907171e00b007ade8dd3517si11478738ejc.936.2022.11.22.16.49.19; Tue, 22 Nov 2022 16:49:41 -0800 (PST) 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; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=qYSBPvDP; 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=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234830AbiKVXon (ORCPT + 89 others); Tue, 22 Nov 2022 18:44:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54244 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234982AbiKVXok (ORCPT ); Tue, 22 Nov 2022 18:44:40 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ED389C723E; Tue, 22 Nov 2022 15:44:37 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 95FDFB81CEF; Tue, 22 Nov 2022 23:44:36 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 50CF7C433D7; Tue, 22 Nov 2022 23:44:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1669160675; bh=s223SP/RFpQY9lN8EX5vF1WrFIPun8dMRy1bOsGbAoc=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=qYSBPvDPItWGMvlA77rGvB7+sa4DKveQ/aAPrBMFC1HzImpQ75hrlOXVBO/RTWRsZ PMKB5MHlU4iaOJXk9F9VxHM6o9r73VLgf9ZpYYbcnMvFMS/CjlTjt2ScbCekeO8q7L Q5+y4FhxGZWdO6GbbPj53V35FEkqWAbUdptnYc1JZ/99YVwE18D/DB6b8tWI3dGvoq qoq3BrR3FdGuciro3kB9MczF0chyIEkxaM24CkwNwdEMriKGEGRTKO5+SZC9c8u+8Q 9Hk3ZT65eImsO0WbWaNmZJOucDW6amjs8vWO9zbeWMEMOcyO/SId9XTaZ4zCmEtzKY ByyoviCE0dXDg== Received: by mail-vs1-f48.google.com with SMTP id 124so2726319vsv.4; Tue, 22 Nov 2022 15:44:35 -0800 (PST) X-Gm-Message-State: ANoB5plEIr2/zUwS5+hhDv2Qh0Dz8Y6N9PHZ86kh6+ldt5CsWDqcSyED tmJcb5p1Ty7KaD1p9ELyGROFLti8Tg9Cv2Wlug== X-Received: by 2002:a05:6102:3003:b0:3aa:2ac7:5956 with SMTP id s3-20020a056102300300b003aa2ac75956mr6359328vsa.6.1669160674196; Tue, 22 Nov 2022 15:44:34 -0800 (PST) MIME-Version: 1.0 References: <8b976cf546bad3aa159a6f05cd3c15d1@walle.cc> <20221118214036.1269005-1-michael@walle.cc> In-Reply-To: From: Rob Herring Date: Tue, 22 Nov 2022 17:44:26 -0600 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH] of: property: special #nvmem-cell-cells handling To: Michael Walle Cc: Srinivas Kandagatla , Miquel Raynal , Frank Rowand , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS 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 Fri, Nov 18, 2022 at 4:03 PM Michael Walle wrote: > > Am 2022-11-18 22:52, schrieb Rob Herring: > > On Fri, Nov 18, 2022 at 3:40 PM Michael Walle wrote: > >> > >> Since recently, there is a new #nvmem-cell-cells. To be backwards > >> compatible this is optional. Therefore, we need special handling and > >> cannot use DEFINE_SIMPLE_PROP() anymore. > >> > >> Signed-off-by: Michael Walle > >> --- > >> This patch will be part of the following series: > >> https://lore.kernel.org/linux-arm-kernel/20221118185118.1190044-1-michael@walle.cc/ > >> > >> drivers/of/property.c | 17 ++++++++++++++++- > >> 1 file changed, 16 insertions(+), 1 deletion(-) > >> > >> diff --git a/drivers/of/property.c b/drivers/of/property.c > >> index 967f79b59016..93c0ea662336 100644 > >> --- a/drivers/of/property.c > >> +++ b/drivers/of/property.c > >> @@ -1305,7 +1305,6 @@ DEFINE_SIMPLE_PROP(dmas, "dmas", "#dma-cells") > >> DEFINE_SIMPLE_PROP(power_domains, "power-domains", > >> "#power-domain-cells") > >> DEFINE_SIMPLE_PROP(hwlocks, "hwlocks", "#hwlock-cells") > >> DEFINE_SIMPLE_PROP(extcon, "extcon", NULL) > >> -DEFINE_SIMPLE_PROP(nvmem_cells, "nvmem-cells", NULL) > >> DEFINE_SIMPLE_PROP(phys, "phys", "#phy-cells") > >> DEFINE_SIMPLE_PROP(wakeup_parent, "wakeup-parent", NULL) > >> DEFINE_SIMPLE_PROP(pinctrl0, "pinctrl-0", NULL) > >> @@ -1381,6 +1380,22 @@ static struct device_node > >> *parse_interrupts(struct device_node *np, > >> return of_irq_parse_one(np, index, &sup_args) ? NULL : > >> sup_args.np; > >> } > >> > >> +static struct device_node *parse_nvmem_cells(struct device_node *np, > >> + const char *prop_name, > >> int index) > >> +{ > >> + struct of_phandle_args sup_args; > >> + > >> + if (strcmp(prop_name, "nvmem-cells")) > >> + return NULL; > >> + > >> + if (of_parse_phandle_with_optional_args(np, prop_name, > >> + "#nvmem-cell-cells", > >> index, > >> + &sup_args)) > >> + return NULL; > >> + > >> + return sup_args.np; > >> +} > > > > There's a couple of other cases like that (MSI IIRC), so can we > > generalize this to work in more than 1 case? > > You mean addding a new DEFINE_SIMPLE_PROP_OPTIONAL_ARGS()? Actually, I think you can just do something like the below. I don't think we need to separately handle an optional #.*-cells and a required one. It's really just validation which we do already both with the tools and when the subsystems parse these bindings. Of course, if we need to handle cases other than 0 default cells, we'll have to restructure the define some to pass the default cells. diff --git a/drivers/of/property.c b/drivers/of/property.c index 967f79b59016..198f56633eb0 100644 --- a/drivers/of/property.c +++ b/drivers/of/property.c @@ -1254,7 +1254,7 @@ static struct device_node *parse_suffix_prop_cells(struct device_node *np, if (strcmp_suffix(prop_name, suffix)) return NULL; - if (of_parse_phandle_with_args(np, prop_name, cells_name, index, + if (__of_parse_phandle_with_args(np, prop_name, cells_name, 0, index, &sup_args)) return NULL;