Received: by 2002:a05:7412:37c9:b0:e2:908c:2ebd with SMTP id jz9csp1660379rdb; Wed, 20 Sep 2023 16:09:16 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF1SzSsDliBUusTVSmiJCrZ5erXgqhS+rmsRAq+UazgMtS6DkiFlmKKi0pJtTmfjMi/gViR X-Received: by 2002:a05:6358:2787:b0:143:49f5:145d with SMTP id l7-20020a056358278700b0014349f5145dmr3722510rwb.20.1695251355796; Wed, 20 Sep 2023 16:09:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695251355; cv=none; d=google.com; s=arc-20160816; b=qnOmoBI2+KrS8LQLoRgLEyBazzMg5rBx1ltkcgFJzrqRZcqMQqkgvk9PjkUN3M/E3T vtAJE5J655msC2p/8WTbLi5Mp+Bq7AENZRl1xMKyyj3c5v0T0mSIPMyUhU17/gEy9X+j OKoxDMJOAVzJq+QJxgpcoDlsYu5DfYZ44q3bEMANtRgX3LmKNRlXe+zYtB6C62lovxH4 ZA2TPp+KFPRUb4rdupglxTey1mZIq1EpQGeNkAD0oW8tslOQEKXo/0MYJ0G4oRmJDU5e iy52EAadcOYQSuE0ookW5WbYYF+BwG3YmKro8ec+Ri/WvJBH46KudYHDtCy1YtOKfk1d wrtA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=ySgTFRif0OhDbbpB+8wVZjSypEFgsdIXoRMvaDKaYV0=; fh=+rozOPr0+oAXf/B1F/UwZaPPUyFSNTQM43B5lsrrlXc=; b=eRN0et8i4kkDD2FWOdjtLRgJEKFZ6J/CvpTunLYpDHKCHE6TbnSUOj95xKVvON2eJM UelP53RfQ+cmsah8fHl6cD7mtrltqkBYhTQkQipB7FuPQfm400aMsbQl3VHEmbwzAn2E htK88sWbt2dhkNPRP7xIPK5gGt/tUUbC2vaLh7ogYXc6msxS4Miqwy4MpplMif5lYdmM a3lgBTpCZRXEZq+vT7ntAe9x1Lv45ABdByDyivdziEOz3eeHob8cAO8kmIOcSz9/IwQ1 zrYxJW1rRbfmr3rqrvGRn/10Rmp0A7/RJvUY3GFEAedY7rJKOFcoqNTszooRjZKT3oOe 1HgQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=SuYBAF5i; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id bx22-20020a056a02051600b00578c36d7249si105484pgb.291.2023.09.20.16.09.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Sep 2023 16:09:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=SuYBAF5i; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 0A5FD805BCB5; Wed, 20 Sep 2023 15:01:12 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229478AbjITWBP (ORCPT + 99 others); Wed, 20 Sep 2023 18:01:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39686 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229451AbjITWBO (ORCPT ); Wed, 20 Sep 2023 18:01:14 -0400 Received: from mail-qt1-x82c.google.com (mail-qt1-x82c.google.com [IPv6:2607:f8b0:4864:20::82c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DDE54CF for ; Wed, 20 Sep 2023 15:01:05 -0700 (PDT) Received: by mail-qt1-x82c.google.com with SMTP id d75a77b69052e-41761e9181eso64431cf.1 for ; Wed, 20 Sep 2023 15:01:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1695247265; x=1695852065; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=ySgTFRif0OhDbbpB+8wVZjSypEFgsdIXoRMvaDKaYV0=; b=SuYBAF5i6Q5CuZyDineu84uzq4HnJdkdrfIkfwCtYmOtwGqCdd5rg79usviFIJ0b6L +b6CCmxQr7DMuMMsOZIsYsARmv70PUK/A1oSCIpjO6WMJUgt3UdCHSI1yBKRETzmTkMu VL3tRVulu3reQxw7LAewIYQ7jf/oQyFXol66BC/Aswtlo6gMmcyY+jaoVmLImucHay8C Bl9ot+OzMY56D9Iwci90cBCcAaAoGRuNlyxyjncGJtAuwVcJj8HhndoU0TYtOy0MjGfm dih77nfQpEFPgJ21Ei6yBkiiNa9kAc5BNMu/USDnV3TWpIZjkcOWAdJU40AtrwJSDwME hIUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695247265; x=1695852065; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ySgTFRif0OhDbbpB+8wVZjSypEFgsdIXoRMvaDKaYV0=; b=Uf7nMYnRynM5Z3x/Ln9sMsFDZ3d7S2DiHDXKiXPTctWtq3MxXyzfnWY0doWlvp8snK mY8jXRQi35eDs/sxwAudmU5SlsTkCcpPya4eoFg6tHE6MMBL3nEPZ5XAltC+yBGsotP7 kzVixzea1Hb6WSwibsy61tMANPr4johOXw4tYZia5DssvD9qdA7qUBHu8YYDdtZwcYFV s0rGQRm4Ne7c8MfB7bcextQ1mH8V3BlJvpBNhCHRA6KYubUtH+mFpXHjd3juzP8okQzf l3FvR39BG8MrL/xUDAToY9tP8xC5nbYwQO392qvrD3PKlfJQevD+jP9F3jXIbhzhfu4a rssA== X-Gm-Message-State: AOJu0YzxbMRfeH1HgDTCgeREC/1CAsZBQtd1CEeK8Z2P1q3voU4rX30b sumGTN2FrEMjcYef9kouldxfw2jtH4WR7BFGBb6gFQ== X-Received: by 2002:ac8:7f48:0:b0:412:16f:c44f with SMTP id g8-20020ac87f48000000b00412016fc44fmr84660qtk.6.1695247264772; Wed, 20 Sep 2023 15:01:04 -0700 (PDT) MIME-Version: 1.0 References: <20230904115816.1237684-1-s.hauer@pengutronix.de> <20230904115816.1237684-2-s.hauer@pengutronix.de> <20230913065843.GF637806@pengutronix.de> <20230915065120.GQ637806@pengutronix.de> In-Reply-To: <20230915065120.GQ637806@pengutronix.de> From: Saravana Kannan Date: Wed, 20 Sep 2023 15:00:28 -0700 Message-ID: Subject: Re: [PATCH 1/3] pinctrl: rockchip: add support for io-domain dependency To: Sascha Hauer Cc: Chen-Yu Tsai , Linus Walleij , linux-rockchip@lists.infradead.org, Heiko Stuebner , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, kernel@pengutronix.de, Quentin Schulz , Michael Riesch , Rob Herring , Krzysztof Kozlowski , Conor Dooley Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-17.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=unavailable 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 X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Wed, 20 Sep 2023 15:01:12 -0700 (PDT) On Thu, Sep 14, 2023 at 11:51=E2=80=AFPM Sascha Hauer wrote: > > On Wed, Sep 13, 2023 at 01:48:12PM -0700, Saravana Kannan wrote: > > On Tue, Sep 12, 2023 at 11:58=E2=80=AFPM Sascha Hauer wrote: > > > > > > On Wed, Sep 13, 2023 at 12:37:54PM +0800, Chen-Yu Tsai wrote: > > > > On Tue, Sep 12, 2023 at 4:07=E2=80=AFPM Linus Walleij wrote: > > > > > > > > > > Top posting to bring Saravana Kannan into this discussion. > > > > > > > > > > This looks like a big hack to me, Saravana has been working > > > > > tirelessly to make the device tree probe order "sort itself out" > > > > > and I am pretty sure this issue needs to be fixed at the DT > > > > > core level and not in a driver. > > > > > > > > We could merge all the IO domain stuff into the pinctrl node/driver= , > > > > like is done for Allwinner? Maybe that would simplify things a bit? > > > > > > I thought about this as well. On Rockchip the pinctrl driver and the = IO > > > domain driver even work on the same register space, so putting these > > > into a single node/driver would even feel more natural than what we h= ave > > > now. > > > > Then we should try to do this and fix any issues blocking us. > > > > > However, with that the pinctrl node would get the supplies that the I= O > > > domain node now has and we would never get into the probe of the pinc= trl > > > driver due to the circular dependencies. > > > > From a fw_devlink perspective, the circular dependency shouldn't be a > > problem. It's smart enough to recognize all cycle possibilities (since > > 6.3) and not enforce ordering between nodes in a cycle. > > > > So, this is really only a matter of pinctrl not trying to do > > regulator_get() in its probe function. You need to do the > > regulator_get() when the pins that depend on the io-domain are > > requested. And if the regulator isn't ready yet, return -EPROBE_DEFER? > > That's basically what my series does already, I return -EPROBE_DEFER > from the pinctrl driver when a pin is requested and the IO domain is not > yet ready. > > > > > Is there something that prevents us from doing that? > > No. We could do that, but it wouldn't buy us anthing. I am glad to hear > that fw_devlink can break the circular dependencies. With this we could > add the supplies to the pinctrl node and the pinctrl driver would still > be probed. > > With the IO domain supplies added to the pinctrl node our binding would > be cleaner, but still we would have to defer probe of many requested > pins until finally the I2C driver providing access to the PMIC comes > along. We also still need a "Do not defer probe for these pins" property > in the pingrp needed for the I2C driver. Sorry about the slow reply. Been a bit busy. Oh, this is not true though. With the example binding I gave, fw_devlink will automatically defer the probe of devices that depend on pins that need an iodomain/regulator. pinctrl { compatible =3D "rockchip,rk3568-pinctrl"; i2c0 { /omit-if-no-ref/ i2c0_xfer: i2c0-xfer { rockchip,pins =3D /* i2c0_scl */ <0 RK_PB1 1 &pcfg_pull_none_smt>, /* i2c0_sda */ <0 RK_PB2 1 &pcfg_pull_none_smt>; }; } ... ... pinctrl-io { compatible =3D "rockchip,rk3568-pinctrl-io"; pmuio1-supply =3D <&vcc3v3_pmu>; cam { .... } .... .... } consumerA { pinctrl-0 =3D <&cam>; } With this model above, there are no cycles anymore. pictrl doesn't depend on anything. vcc3v3_pmu will depend on pinctrl (not shown in DT above). pinctrl-io depends on pinctrl and vcc3v3_pmu. consumerA depends on pinctrl-io. So pinctrl probes first. vcc3v3 will probe next. pinctrl-io will probe now that the supply is ready. consumerA will probe now that pinctrl-io is ready. fw_devlink will enforce all these dependencies because it understands pinctrl and -supply bindings. -Saravana > > I would consider this being a way to cleanup the bindings, but not a > solution at DT core level that Linus was aiming at. > > > > > > > > > > > IIRC on Allwinner SoCs the PMIC pins don't have a separate power ra= il, > > > > or if they do they almost certainly use the default I/O rail that i= s > > > > always on, and so we omit it to work around the dependency cycle. > > > > > > I looked into sun50i as an example. This one has two pinctrl nodes, p= io > > > and r_pio. Only the former has supplies whereas the latter, where the > > > PMIC is connected to, has (found in sun50i-a64-pinephone.dtsi): > > > > > > &r_pio { > > > /* > > > * FIXME: We can't add that supply for now since it would > > > * create a circular dependency between pinctrl, the regulato= r > > > * and the RSB Bus. > > > * > > > * vcc-pl-supply =3D <®_aldo2>; > > > */ > > > }; > > > > > > At least it show me that I am not the first one who has this problem = ;) > > > > > > We could add the supplies to the pingroup subnodes of the pinctrl dri= ver > > > to avoid that, but as Saravana already menioned, that would feel like > > > overkill. > > > > So my comment yesterday was that it'd be an overkill to make every > > struct pin_desc into a device. But if you can split that rockchip > > pinctrl into two devices, that should be okay and definitely not an > > overkill. > > > > Maybe something like: > > > > pinctrl { > > compatible =3D "rockchip,rk3568-pinctrl"; > > i2c0 { > > /omit-if-no-ref/ > > i2c0_xfer: i2c0-xfer { > > rockchip,pins =3D > > /* i2c0_scl */ > > <0 RK_PB1 1 &pcfg_pull_none_smt>, > > /* i2c0_sda */ > > <0 RK_PB2 1 &pcfg_pull_none_smt>; > > }; > > } > > ... > > ... > > pinctrl-io { > > compatible =3D "rockchip,rk3568-pinctrl-io"; > > pmuio1-supply =3D <&vcc3v3_pmu>; > > cam { > > .... > > } > > .... > > .... > > } > > > > So pinctrl will probe successfully and add it's child device > > pinctrl-io. i2c0 will probe once pinctrl is available. Then eventually > > the regulator will probe. And after all that, pinctrl-io would probe. > > > > This has no cycles and IMHO represents the hardware accurately. You > > have a pinctrl block and there's a sub component of it (pinctrl-io) > > that works differently and has additional dependencies. > > > > Any thoughts on this? > > By making the IO domain device a child node of the pinctrl node we > wouldn't need a phandle from the pinctrl node to the IO domain node > anymore, but apart from that the approach is equivalent to what we have > already. > > Given that fw_devlink allows us to add the supplies directly to the > pinctrl node, I would prefer doing that. But as said, it doesn't solve > the problem. > > Sascha > > -- > Pengutronix e.K. | = | > Steuerwalder Str. 21 | http://www.pengutronix.de/ = | > 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 = | > Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 = |