From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751488AbeCLSZs (ORCPT ); Mon, 12 Mar 2018 14:25:48 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:42064 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751232AbeCLSZq (ORCPT ); Mon, 12 Mar 2018 14:25:46 -0400 X-Google-Smtp-Source: AG47ELtF4Njj0Z3AMZiO5ryLithB2fxCEsOiOub2VeBK+F9d89qR+eOG2vbjOYJI2vufclW32KZDFQ== Date: Sun, 11 Mar 2018 22:54:08 -0700 From: Michael Turquette Subject: Re: [PATCH v2 4/8] clk: migrate the count of orphaned clocks at init To: Heiko =?iso-8859-1?q?St=FCbner?= , Jerome Brunet Cc: Dong Aisheng , linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, Stephen Boyd , Stephen Boyd , Shawn Guo References: <20180214134340.17242-1-jbrunet@baylibre.com> <20180214134340.17242-5-jbrunet@baylibre.com> <1970074.VYjjbDuVRv@diego> In-Reply-To: <1970074.VYjjbDuVRv@diego> MIME-Version: 1.0 User-Agent: astroid/8ea8c2a3 (https://github.com/astroidmail/astroid) Message-Id: <1520834013.z6bypcssbs.astroid@resonance.none> Content-Type: text/plain; charset=utf-8; format=flowed Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by mail.home.local id w2CIQCg2010644 Excerpts from Heiko Stübner's message of February 15, 2018 1:01 pm: > Am Mittwoch, 14. Februar 2018, 14:43:36 CET schrieb Jerome Brunet: >> The orphan clocks reparents should migrate any existing count from the >> orphan clock to its new acestor clocks, otherwise we may have >> inconsistent counts in the tree and end-up with gated critical clocks >> >> Assuming we have two clocks, A and B. >> * Clock A has CLK_IS_CRITICAL flag set. >> * Clock B is an ancestor of A which can gate. Clock B gate is left >> enabled by the bootloader. >> >> Step 1: Clock A is registered. Since it is a critical clock, it is >> enabled. The clock being still an orphan, no parent are enabled. >> >> Step 2: Clock B is registered and reparented to clock A (potentially >> through several other clocks). We are now in situation where the enable >> count of clock A is 1 while the enable count of its ancestors is 0, which >> is not good. >> >> Step 3: in lateinit, clk_disable_unused() is called, the enable_count of >> clock B being 0, clock B is gated and and critical clock A actually gets >> disabled. >> >> This situation was found while adding fdiv_clk gates to the meson8b >> platform. These clocks parent clk81 critical clock, which is the mother >> of all peripheral clocks in this system. Because of the issue described >> here, the system is crashing when clk_disable_unused() is called. >> >> The situation is solved by reverting >> commit f8f8f1d04494 ("clk: Don't touch hardware when reparenting during >> registration"). To avoid breaking again the situation described in this >> commit >> description, enabling critical clock should be done before walking the >> orphan list. This way, a parent critical clock may not be accidentally >> disabled due to the CLK_OPS_PARENT_ENABLE mechanism. >> >> Fixes: f8f8f1d04494 ("clk: Don't touch hardware when reparenting during >> registration") Cc: Stephen Boyd >> Cc: Shawn Guo >> Cc: Dong Aisheng >> Signed-off-by: Jerome Brunet > > On a rk3288-veyron Chromebook > Tested-by: Heiko Stuebner > > This made the hdmi on the machine work again with 4.16-rc1 . > (hdmi-cec clock is sourced from the i2c connected pmic which provides > the 32kHz clock needed) > > So it would be really cool if this could make it into 4.16-rc :-) I separated this patch out into clk-fixes to be set for -rc5 or -rc6. Regards, Mike > > > Heiko >