Received: by 2002:a05:7412:d008:b0:f9:6acb:47ec with SMTP id bd8csp68915rdb; Tue, 19 Dec 2023 09:32:02 -0800 (PST) X-Google-Smtp-Source: AGHT+IGDmW3O+uIcBk7Gudi5n4T+H7gLyWv2epPv96pgO0LOw3aOaq37zAZtWJfU38GpX7qMnfRL X-Received: by 2002:a05:6122:3c86:b0:4b6:e9fe:c3b7 with SMTP id fy6-20020a0561223c8600b004b6e9fec3b7mr781322vkb.14.1703007122641; Tue, 19 Dec 2023 09:32:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1703007122; cv=none; d=google.com; s=arc-20160816; b=WXOkcOJ1EoZVeg4F2eWrP4GWqjuAQ2hMfGezp+m6GwllMPydlVdQUMhTlzs+BEwVxu aCJbt4ooVaqYKgpx+K0Rxd8njBD9efYIu9xxQ3n9SgmKQ0P07qPq6dP9+0WBs074U1A9 iBvq3M1iUeKhX9X5iGvj7QRZobJK7fJ/s4gJal4D+Vh5QRv2GP66YykHO1dGh0ZRyv96 i38wionsPSkUpJhT/+hsb08DODcTZgCTgAyObWTxzgiKeu0cVo0L/3NTr62FofG9n2w7 kdHfU3YKHrBUZTVOUma4lgc1hjMEGTJXb0/40kFeNsqxk6dVFyDZA/PoOpr1WQOtUacW wkig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:list-unsubscribe:list-subscribe :list-id:precedence:dkim-signature; bh=tNuSOIUI5x4sS7b6TcbJmnlVmXjTRkIFXpOBXzrlw3w=; fh=bN6FYJbEX5T7pvZupMhUBwTh12MzmTP2d6Pekj2xdtU=; b=S7WyzbxUiBaQgLFC/0h6FzpgTTt8TrPa6KyWysaLwrPZfc007VIKRlmWmC/PtcrA0f RuerBHAnDDG/cnQJPfi054RaxWyQwXM3OrynJ1Al/sW06JfI9F9Qtne8VfT1jVsnd0HL lDTQQCvzhPIYaEgTaahgf7SwnpfJGKig2QmSrOmxBnqlKcTEckkZHIQfwTLVs2Y+c5OO 3j58vFKfIvDvLXa0wrunju8Zl4sMfHHSHm1nhTlgZxkLmsn/6Q6y6RgJ41s4ZBLgsTWc VpRchOUThg4BQxI7smpy4U8LQYMvSt0xvVosE3tqxASFr/75q1bVs7GMmLn05E3P4J5O sfhw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="DREywg/P"; spf=pass (google.com: domain of linux-kernel+bounces-5694-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-5694-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id y188-20020a1fc8c5000000b004b6c9b8e534si958771vkf.92.2023.12.19.09.32.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Dec 2023 09:32:02 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-5694-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="DREywg/P"; spf=pass (google.com: domain of linux-kernel+bounces-5694-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-5694-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 514631C2310C for ; Tue, 19 Dec 2023 17:32:02 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8C9332E410; Tue, 19 Dec 2023 17:31:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="DREywg/P" X-Original-To: linux-kernel@vger.kernel.org Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2B3DD249F8 for ; Tue, 19 Dec 2023 17:31:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-28b06be7cf6so2175059a91.2 for ; Tue, 19 Dec 2023 09:31:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1703007110; x=1703611910; 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=tNuSOIUI5x4sS7b6TcbJmnlVmXjTRkIFXpOBXzrlw3w=; b=DREywg/PBO41JJuxCDs8Oz9LldHyDbpaW6ty4KK5CD/uNipQ7iEI51Xr58/SeiB/dP cFyVue2MQBWH6hURHg9vlaFnaTXU9FtxEtgpvhW2Sx82iL5rEUF2J3LmpLxcudwrgadU V/mv2aYpuO7goABDobJAYDGHXrPOG6PJVVHm+1ASvjqGVqLwlYeTTbQ/XCK9+3MwYSWP vDtacNBkQaC93pIgLQZkAxwZCSclJxRJjQRSMSjQ1AZaPGYK7aIJyLe6BhJhwva8tJJ3 2LdhEVWAssQnCidB7e1sXGIoRzneh0wdRnBLDN1Hsgf22AJErdXNRzQflEwQJsg0kSlF vu5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703007110; x=1703611910; 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=tNuSOIUI5x4sS7b6TcbJmnlVmXjTRkIFXpOBXzrlw3w=; b=Bwnmp5R3BvfKK9TlAmXAiXye6ycJgVny73mDx7IE8spMptPjxi3xMvprgt9nVKDtiC EijU59uiCyVYmSERmzZ7apkhZkv1wflL9JFhC3q2aaVOk+0FoyBtr/FhX9HvIBsXSqyE A0Brtm16KJtvJpu5YGSOXt8PkDxGzs6Fw8lOX1qZMWojBFZdQpMYh90U79R8rRajkZg8 71mcs6mf1krcNxLuJAVaPIZrb6u6DrmXhDP7g9iEk4F6nJJca9GFwMKnDSuwduZFH3jp 4ElMfS72MjcrQtad+DHUQLpjbJ/u99eyNJAauT/F+hZKCBkHYY62GD2wSn8Qgr0FLcfJ l75A== X-Gm-Message-State: AOJu0YyAhvhbqk3bFMfoziX0OZne2pHMHtBxuYQpBq45IojNcRL/R75P PV6Fwq8Q9Wd5FLRxFyW701MlUuH7MkX+thmTv8e+1Q== X-Received: by 2002:a17:90b:24b:b0:28b:8fb6:45d1 with SMTP id fz11-20020a17090b024b00b0028b8fb645d1mr1794300pjb.41.1703007110402; Tue, 19 Dec 2023 09:31:50 -0800 (PST) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20231214105243.3707730-1-tudor.ambarus@linaro.org> <20231214105243.3707730-8-tudor.ambarus@linaro.org> <5de5cddd-2bab-4408-b31f-f48bef98f14c@linaro.org> <4ba80e1e-8fec-4fd2-9140-6da006c9d5f5@linaro.org> In-Reply-To: <4ba80e1e-8fec-4fd2-9140-6da006c9d5f5@linaro.org> From: Sam Protsenko Date: Tue, 19 Dec 2023 11:31:39 -0600 Message-ID: Subject: Re: [PATCH 07/13] clk: samsung: gs101: mark PERIC0 IP TOP gate clock as critical To: Tudor Ambarus Cc: peter.griffin@linaro.org, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, mturquette@baylibre.com, sboyd@kernel.org, conor+dt@kernel.org, andi.shyti@kernel.org, alim.akhtar@samsung.com, gregkh@linuxfoundation.org, jirislaby@kernel.org, catalin.marinas@arm.com, will@kernel.org, s.nawrocki@samsung.com, tomasz.figa@gmail.com, cw00.choi@samsung.com, arnd@arndb.de, andre.draszik@linaro.org, saravanak@google.com, willmcvicker@google.com, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-i2c@vger.kernel.org, linux-serial@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Dec 19, 2023 at 10:47=E2=80=AFAM Tudor Ambarus wrote: > > Hi, Sam! > > On 12/14/23 16:43, Sam Protsenko wrote: > > On Thu, Dec 14, 2023 at 10:15=E2=80=AFAM Tudor Ambarus wrote: > >> > >> > >> > >> On 12/14/23 16:09, Sam Protsenko wrote: > >>> On Thu, Dec 14, 2023 at 10:01=E2=80=AFAM Tudor Ambarus wrote: > >>>> > >>>> > >>>> > >>>> On 12/14/23 15:37, Sam Protsenko wrote: > >>>>> On Thu, Dec 14, 2023 at 4:52=E2=80=AFAM Tudor Ambarus wrote: > >>>>>> > >>>>>> Testing USI8 I2C with an eeprom revealed that when the USI8 leaf c= lock > >>>>>> is disabled it leads to the CMU_TOP PERIC0 IP gate clock disableme= nt, > >>>>>> which then makes the system hang. To prevent this, mark > >>>>>> CLK_GOUT_CMU_PERIC0_IP as critical. Other clocks will be marked > >>>>>> accordingly when tested. > >>>>>> > >>>>>> Signed-off-by: Tudor Ambarus > >>>>>> --- > >>>>>> drivers/clk/samsung/clk-gs101.c | 2 +- > >>>>>> 1 file changed, 1 insertion(+), 1 deletion(-) > >>>>>> > >>>>>> diff --git a/drivers/clk/samsung/clk-gs101.c b/drivers/clk/samsung= /clk-gs101.c > >>>>>> index 3d194520b05e..08d80fca9cd6 100644 > >>>>>> --- a/drivers/clk/samsung/clk-gs101.c > >>>>>> +++ b/drivers/clk/samsung/clk-gs101.c > >>>>>> @@ -1402,7 +1402,7 @@ static const struct samsung_gate_clock cmu_t= op_gate_clks[] __initconst =3D { > >>>>>> "mout_cmu_peric0_bus", CLK_CON_GAT_GATE_CLKCMU_PERIC0= _BUS, > >>>>>> 21, 0, 0), > >>>>>> GATE(CLK_GOUT_CMU_PERIC0_IP, "gout_cmu_peric0_ip", "mout_c= mu_peric0_ip", > >>>>>> - CLK_CON_GAT_GATE_CLKCMU_PERIC0_IP, 21, 0, 0), > >>>>>> + CLK_CON_GAT_GATE_CLKCMU_PERIC0_IP, 21, CLK_IS_CRITICA= L, 0), > >>>>> > >>>>> This clock doesn't seem like a leaf clock. It's also not a bus cloc= k. > >>>>> Leaving it always running makes the whole PERIC0 CMU clocked, which > >>>>> usually should be avoided. Is it possible that the system freezes > >>>>> because some other clock (which depends on peric0_ip) gets disabled= as > >>>>> a consequence of disabling peric0_ip? Maybe it's some leaf clock wh= ich > >>>>> is not implemented yet in the clock driver? Just looks weird to me > >>>>> that the system hangs because of CMU IP clock disablement. It's > >>>>> usually something much more specific. > >>>> > >>>> The system hang happened when I tested USI8 in I2C configuration wit= h an > >>>> eeprom. After the eeprom is read the leaf gate clock that gets disab= led > >>>> is the one on PERIC0 (CLK_GOUT_PERIC0_CLK_PERIC0_USI8_USI_CLK). I as= sume > >>>> this leads to the CMU_TOP gate (CLK_CON_GAT_GATE_CLKCMU_PERIC0_IP) > >>>> disablement which makes the system hang. Either marking the CMU_TOP = gate > >>>> clock as critical (as I did in this patch) or marking the leaf PERIC= 0 > >>>> gate clock as critical, gets rid of the system hang. Did I choose wr= ong? > >>>> > >>> > >>> Did you already implement 100% of clocks in CMU_PERIC0? If no, there > >> > >> yes. > > I checked again all the clocks. I implemented all but one, the one > defined by the CLK_CON_BUF_CLKBUF_PERIC0_IP register. Unfortunately I > don't have any reference on how it should be defined so I won't touch it > yet. But I have some good news too, see below. > > > > > Ok. Are there any other CMUs (perhaps not implemented yet) which > > consume clocks from CMU_PERIC0, specifically PERIC0_IP clock or some > > clocks derived from it? If so, is there a chance some particular leaf > > clock in those CMUs actually renders the system frozen when disabled > > as a consequence of disabling PERIC0_IP, and would explain better why > > the freeze happens? > > > > For now I think it's ok to have that CLK_IS_CRITICAL flag here, > > because as you said you implemented all clocks in this CMU and neither > > of those looks like a critical one. But I'd advice to add a TODO > > comment saying it's probably a temporary solution before actual leaf > > clock which leads to freeze is identified (which probably resides in > > some other not implemented yet CMU). > > > >> > >>> is a chance some other leaf clock (which is not implemented yet in > >>> your driver) gets disabled as a result of PERIC0_IP disablement, whic= h > >>> might actually lead to that hang you observe. Usually it's some > >>> meaningful leaf clock, e.g. GIC or interconnect clocks. Please check > >>> clk-exynos850.c driver for CLK_IS_CRITICAL and CLK_IGNORE_UNUSED flag= s > >>> and the corresponding comments I left there, maybe it'll give you mor= e > >>> particular idea about what to look for. Yes, making the whole CMU > >>> always running without understanding why (i.e. because of which > >>> particular leaf clock) might not be the best way of handling this > >> > >> because of CLK_GOUT_PERIC0_CLK_PERIC0_USI8_USI_CLK > > > > That's not a root cause here. And I think PERIC0_IP is neither. > > > > you were right! > >> > >>> issue. I might be mistaken, but at least please check if you > >>> implemented all clocks for PERIC0 first and if making some meaningful > >>> leaf clock critical makes more sense. > >>> > > I determined which leaf clocks shall be marked as critical. I enabled > the debugfs clock write access. Then I made sure that the parents of the > PERIC0 CMU have at least one user so that they don't get disabled after > an enable-disable sequence on a leaf clock. The I took all the PERIC0 > gate clocks and enabled and disabled them one by one. Whichever hang the > system when the clock was disabled was marked as critical. The list of > critical leaf clocks is as following: > Nice! I used somehow similar procedure for clk-exynos850, doing basically the same thing, but in core clock driver code. > "gout_peric0_peric0_cmu_peric0_pclk", > "gout_peric0_lhm_axi_p_peric0_i_clk", > "gout_peric0_peric0_top1_ipclk_0", > "gout_peric0_peric0_top1_pclk_0". > > I'll update v2 with this instead. Thanks for the help, Sam! Glad you weren't discouraged by my meticulousness :) In clk-exynos850 I usually used CLK_IGNORE_UNUSED for clocks like XXX_CMU_XXX (in your case it's PERIC0_CMU_PERIC0), with a corresponding comment. Those clocks usually can be used to disable the bus clock for corresponding CMU IP-core (in your case CMU_PERIC0), which makes it impossible to access the registers from that CMU block, as its register interface is not clocked anymore. Guess I saw something similar in Exynos5433 or Exynos7 clk drivers, or maybe Sylwester or Krzysztof told me to do so -- don't really remember. For AXI clock it also seems logical to keep it running (AXI bus might be used for GIC and memory). But again, maybe CLK_IGNORE_UNUSED flag would be more appropriate that CLK_IS_CRITICAL? For the last two clocks -- it's hard to tell what exactly they do. Is TOP1 some other CMU or block name, and is there any further users for those clocks? Anyways, if you are working on v2, please consider doing next two things while at it: 1. For each critical clock: add corresponding comment explaining why it's marked so 2. Consider using CLK_IGNORE_UNUSED instead of CLK_IS_CRITICAL when appropriate; both have their use in different cases Btw, if you check other Exynos clk drivers, there is a lot of examples for flags like those. > Cheers, > ta