From patchwork Thu Aug 8 14:42:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andr=C3=A9_Draszik?= X-Patchwork-Id: 13757711 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 30CEFC52D6F for ; Thu, 8 Aug 2024 14:43:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Cc:To: Content-Transfer-Encoding:Content-Type:MIME-Version:Message-Id:Date:Subject: From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=QqlFumWj11SFbqn7rghR1MsiiuQhB4WbP4/WopFjRvU=; b=2k5GELzr3DszDo nQFsjCsvE7Tb06ZHGZP0rB32SQe+dYePmx8IW+iT6Cyr+ABtJLJuMU3IB8GK25tbu4dAPnjMPj8SZ mdJ176kesqvG9vkM/njCcaTN8aCYB0GdzDC79k3ydIutuocrqmPbAC/1sb+u8XzJtq9Lnl5GkpWWh IeaVGPjUMgLa9uYbCJUFYuYmzEId3KL3uUrFbopWTFuK0r/xydRkT5WX8cNDN4NzKEam3MFxv2rfx 7uMziotR24sYp9geVB+gKFVPU39jc1DevCIFvUh2JWwTcvLNrsvnSCMMKr/rB4sLEjDbO4GADgSQs /KqaE9k4pviTZ+6NqYZQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sc4MT-00000008Zc6-0TWs; Thu, 08 Aug 2024 14:43:29 +0000 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sc4Lq-00000008ZN0-0fHz for linux-arm-kernel@lists.infradead.org; Thu, 08 Aug 2024 14:42:52 +0000 Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-a7aa4ca9d72so122558066b.0 for ; Thu, 08 Aug 2024 07:42:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1723128168; x=1723732968; darn=lists.infradead.org; h=cc:to:content-transfer-encoding:mime-version:message-id:date :subject:from:from:to:cc:subject:date:message-id:reply-to; bh=QqlFumWj11SFbqn7rghR1MsiiuQhB4WbP4/WopFjRvU=; b=wSfPezzx2/8hokuhL3V2975HdINb+nG4D/UOKpGRSZJsVgzD8T9piTwVAPx/uLxwQC lFbf2hOmoZQXNt8282ca1zqOcrPDIK5B+FtlzKxmdGzJZrd6YY6YHKNeVlaPdPAl8519 YYoHLxz8XNpgvDXT/HDlTi8V57sDGUq5SZBe5Bdle2dzWUg5Tniya0yRTHSpMH1BE79E Wk35a7T/ZG8X5L+P/Uv01NQ43mnEyp60MYfmqNJTiawZYS22dY8YUm3MAmUg/4TbWW9h mFnxngw5VoodSUqno/3NirAMfUFKWuVjicI8xFs6JveTWR0if5GrM6pVvMgc6yerQGwa Vegw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1723128168; x=1723732968; h=cc:to:content-transfer-encoding:mime-version:message-id:date :subject:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=QqlFumWj11SFbqn7rghR1MsiiuQhB4WbP4/WopFjRvU=; b=kVVCH6IUUklAm4KFWV5aqxBUvYIs0OA2JAmNxiLY1GM575LLW+8//35nWHk4uGsCIw gTGdiiA/FP8Wo2w6eHQlxMkkpcrWPETu2ITNFrWe7yFhE+vq8AN37WLt7J5knUBdVn0O ksQLkCJPgROYdQe398SH6O7n7mlSutJpDthBczU6SBPIU35OoBtoahkkwnbksKxagvij DeXWDNR1QppOBt+q5E/sLsVzzcLHIw0XWR4Z3GaNwg4Yz9Ua0uVXWyqsLQ0A2F7Vjegp V0WxDfLLpgi91c3iBfEJtu0VpHsRePq/JcXScbDvoT8E0sWof+TDokY8fpdd6bM33Q0Q a1RQ== X-Forwarded-Encrypted: i=1; AJvYcCXWeqYPSvB5wu9vpgm9nnzaB+8Mc1f81sVa3iOkS5Xo9frMf9j3RfGZPSPV99hQc6Djsbiu80n5IXW0jSvKRQQjVfNod8IL21QUzBadeCjAut3YLrs= X-Gm-Message-State: AOJu0YxxCcsefAP5bqop1j09QafSJn46XrelyNvHIcg0rcDjKb3Gyhq1 XKOYzO4jsvULBi483Hf/seO6tFMHUT02i7gnAPjuflTvupTXfBj3SBzgyMUP9u0= X-Google-Smtp-Source: AGHT+IFR7bYGBnaMOhaFH4f94Vv7JZow/txFeQW64yeEZpKk5E2SBtyJawrOgHNhrqWB2DxlDwtasQ== X-Received: by 2002:a17:907:f1a6:b0:a7a:ba59:3164 with SMTP id a640c23a62f3a-a8090e9e288mr181745366b.53.1723128167728; Thu, 08 Aug 2024 07:42:47 -0700 (PDT) Received: from puffmais.c.googlers.com (64.227.90.34.bc.googleusercontent.com. [34.90.227.64]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a7dc9e80e04sm759298966b.175.2024.08.08.07.42.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Aug 2024 07:42:47 -0700 (PDT) From: =?utf-8?q?Andr=C3=A9_Draszik?= Subject: [PATCH v6 00/20] clk: help OF platforms with their stdout (earlycon) clocks during early boot Date: Thu, 08 Aug 2024 15:42:41 +0100 Message-Id: <20240808-gs101-non-essential-clocks-2-v6-0-e91c537acedc@linaro.org> MIME-Version: 1.0 X-B4-Tracking: v=1; b=H4sIAGLZtGYC/4XOsU7DMBCA4VepPHPRne2kphPvgRhc+5JYDTayo wio8u44ZWgRQ8Z/+fRfReEcuIjT4SoyL6GEFGt0TwfhRhsHhuBrC4lSo1YIQyEkiCkCl8JxDnY CNyV3KSChs0oa7C2d2YhKfGTuw+eNf32r3ef0DvOY2d5RUojPypBs6Ki7liQQ2OgzNz7b8h0uL 1OINqcm5WEzx1DmlL9ux4va5F/nSDtziwKE1ruz8ajRk3uEt7tFP2pyR9NVU4SWGT3rjv9p7V0 zaHa0tmpEru+5x07pv9q6rj+WKm4kqQEAAA== To: Michael Turquette , Stephen Boyd , Peter Griffin , Krzysztof Kozlowski , Sylwester Nawrocki , Chanwoo Choi , Alim Akhtar , Sam Protsenko , Tudor Ambarus , Abel Vesa , Peng Fan , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: Will McVicker , kernel-team@android.com, linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, imx@lists.linux.dev, =?utf-8?q?Andr=C3=A9_Draszik?= X-Mailer: b4 0.13.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240808_074250_228558_124EFEDB X-CRM114-Status: GOOD ( 19.21 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi, On at least two plaforms, i.MX and the Exynos-derivative gs101, earlycon depends on the bootloader setup stdout clocks being retained. In some cases stdout UART clocks (or their parents) can get disabled during loading of other drivers (e.g. i2c or UART driver init) causing earlycon to stop to work sometime into the boot, halting the whole system, see e.g. [3]. Code exists in the i.MX clock drivers to deal with that by temporarily bumping the reference count of the relevant stdout clocks during early boot. While gs101 doesn't have such code, some UART clocks had been marked 'critical' for a different reason originally, and by accident worked-around the same problem. v4 of this series proposed addition of similar code to gs101 to be able to drop the 'critical' flag from its clocks, but Stephen suggested to move all this into the clk core instead. This series now does that: * instead of duplicating such code to gs101, teaches the clk core to deal with stdout clocks during early boot, similar to the existing support in i.MX This is hooked into of_clk_add_hw_provider() and of_clk_add_provider() * updates gs101 to remove the 'critical' flag from affected clocks, as not necessary. This is essentially the last remaining patch [1] with all review comments addressed, from the series [2] that was sent earlier this year, see lore links below. * updates i.MX to remove the now-unnecessary platform specific code in its clock drivers. I believe this also plugs a memory and extra clock reference leak at least on imx7ulp, see below. Note 1: For the avoidance of doubt, any of the above is relevant only if earlycon and OF are enabled, behaviour is based on the 'earlycon' kernel command line parameter. As this is meant to also replace i.MX specific code, the 'earlyprintk' is also supported (since it was supported on i.MX) Note 2: On i.MX, at least clk-imx7ulp.c calls imx_register_uart_clocks() twice (once for each compatible), but imx_register_uart_clocks() can not handle that and will leak memory and clock references in that case. The new clk core code handles multiple invocations without such issues. Note 3: I am not in a position to test any of the i.MX changes and would appreciate feedback. In particular with these changes stdout clocks are enabled when of_clk_add_hw_provider() or of_clk_add_provider() return, but: * some i.MX platforms did some reparenting or frequency changes in the old approach before enabling stdout clocks. I believe they're all unrelated to stdout, though * some i.MX platforms enabled stdout clocks before the call to of_clk_add_hw_provider() or of_clk_add_provider(). Again, I don't think that difference is going to be relevant. Signed-off-by: André Draszik [1] https://lore.kernel.org/all/20240130093812.1746512-6-andre.draszik@linaro.org/ [2] https://lore.kernel.org/all/20240130093812.1746512-1-andre.draszik@linaro.org/ [3] https://lore.kernel.org/all/d45de3b2bb6b48653842cf1f74e58889ed6783ae.camel@linaro.org/ Changes in v6: - drop a stray #include from drivers/clk/samsung/clk-gs101.c - Link to v5: https://lore.kernel.org/r/20240808-gs101-non-essential-clocks-2-v5-0-11cffef0634e@linaro.org Changes in v5: - move stdout uart clock handling from gs101 into clk core (Stephen) - update i.MX to drop now-unnecessary code - update series' subject due to changed scope - Link to v4: https://lore.kernel.org/r/20240712-gs101-non-essential-clocks-2-v4-0-310aee0de46e@linaro.org Changes in v4: - new patch "clk: samsung: gs101: allow earlycon to work unconditionally" - update commit message for patch 2 - Link to v3: https://lore.kernel.org/r/20240710-gs101-non-essential-clocks-2-v3-0-5dcb8d040d1c@linaro.org --- André Draszik (20): clk: bump stdout clock usage for earlycon clk: samsung: gs101: don't mark non-essential (UART) clocks critical clk: imx: imx25: drop call to imx_register_uart_clocks() clk: imx: imx27: drop call to imx_register_uart_clocks() clk: imx: imx35: drop call to imx_register_uart_clocks() clk: imx: imx5: drop call to imx_register_uart_clocks() clk: imx: imx6q: drop call to imx_register_uart_clocks() clk: imx: imx6sl: drop call to imx_register_uart_clocks() clk: imx: imx6sll: drop call to imx_register_uart_clocks() clk: imx: imx6sx: drop call to imx_register_uart_clocks() clk: imx: imx6ul: drop call to imx_register_uart_clocks() clk: imx: imx7d: drop call to imx_register_uart_clocks() clk: imx: imx7ulp: drop calls to imx_register_uart_clocks() clk: imx: imx8mm: drop call to imx_register_uart_clocks() clk: imx: imx8mn: drop call to imx_register_uart_clocks() clk: imx: imx8mp: drop call to imx_register_uart_clocks() clk: imx: imx8mq: drop call to imx_register_uart_clocks() clk: imx: imx8ulp: drop call to imx_register_uart_clocks() clk: imx: imx93: drop call to imx_register_uart_clocks() clk: imx: drop imx_register_uart_clocks() drivers/clk/clk.c | 129 ++++++++++++++++++++++++++++++++++++++++ drivers/clk/imx/clk-imx25.c | 2 - drivers/clk/imx/clk-imx27.c | 2 - drivers/clk/imx/clk-imx35.c | 2 - drivers/clk/imx/clk-imx5.c | 6 -- drivers/clk/imx/clk-imx6q.c | 2 - drivers/clk/imx/clk-imx6sl.c | 2 - drivers/clk/imx/clk-imx6sll.c | 2 - drivers/clk/imx/clk-imx6sx.c | 2 - drivers/clk/imx/clk-imx6ul.c | 2 - drivers/clk/imx/clk-imx7d.c | 2 - drivers/clk/imx/clk-imx7ulp.c | 4 -- drivers/clk/imx/clk-imx8mm.c | 2 - drivers/clk/imx/clk-imx8mn.c | 2 - drivers/clk/imx/clk-imx8mp.c | 2 - drivers/clk/imx/clk-imx8mq.c | 2 - drivers/clk/imx/clk-imx8ulp.c | 2 - drivers/clk/imx/clk-imx93.c | 2 - drivers/clk/imx/clk.c | 72 ---------------------- drivers/clk/imx/clk.h | 7 --- drivers/clk/samsung/clk-gs101.c | 6 +- 21 files changed, 131 insertions(+), 123 deletions(-) --- base-commit: 1e391b34f6aa043c7afa40a2103163a0ef06d179 change-id: 20240430-gs101-non-essential-clocks-2-6a3280fa1be8 Best regards,