Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp757462ybl; Wed, 4 Dec 2019 10:20:42 -0800 (PST) X-Google-Smtp-Source: APXvYqwb94d9i3sQ/KbOTf28Q0VwS48EG/aQjraPZ1NPLIhFu2wPEccGrQW1vhDL2RAkQ3Dy48pr X-Received: by 2002:a54:488d:: with SMTP id r13mr3594975oic.115.1575483642608; Wed, 04 Dec 2019 10:20:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1575483642; cv=none; d=google.com; s=arc-20160816; b=GUHOtqY5PrKXyKBjklU5i1koYyJYEqDg/e5WdFs+6v0kzX77Ha2twA5bzaLUOwmEd+ Y8xKRxVuTIWIWaVEXCvTFxh7AnEELZXANgIaF3PnWEVt4cGd5JeSpqs6LX7D1kRj+FRB o1CD7XINa40EDpYX0aQGGjVvjJpwZwe5nCbtAEsHinxObDWDCPYFTRkpzK2Bou1zF7f6 2J+rdKoyZ6Ns+Xp3wXhoBSjTZnVTFJX0mbeUOtaCXaGgQaobf+TujG7vEZKrOJ9h0zQR P564J/N5PAW4EgvfZvD92k+v45wwgSGqUzaRjQal3Zmvpec4vwUUG3tiKcS1i0bcWcBT BQxA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=IkvhJgg1Orm2ImAWeveGMmintbxEti+7pmrpdlXh2p8=; b=qcqzzD7QpR4+uuTKQ8tSQ0aRYtSVUVsGYTo3pGlU1GrwQRqqDxF2eHkInQRg4yz/RK U4rsBpC8ukOreMun4zpgOU2GMJADWFmsFaqnnXIF+SVyk5W0m7ks6bYL4bWumtkq+XqH 7PoLGT1go3EyViA8ySJnbOxVXXYfk4UBdyHRxRIQKlDkydjTJcvH+Ift47i1eLLhqVq1 Y8rbhTlemqI1oxnsb7D4rdzUW9hK8XaCJAH0bF0cKnd7QRY1iHNMGILW7Q485QwIsm8F dgxVrFfhwrOMaDb4Lfgevao4ew2lOQ9YKSyBdxwNJ8+iP8ko/Ykk9D5GYzUrMoAY8d5g yCFQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=evaGfYGM; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h200si3589195oib.258.2019.12.04.10.20.30; Wed, 04 Dec 2019 10:20:42 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=evaGfYGM; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731707AbfLDSSV (ORCPT + 99 others); Wed, 4 Dec 2019 13:18:21 -0500 Received: from mail.kernel.org ([198.145.29.99]:38962 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731347AbfLDSLD (ORCPT ); Wed, 4 Dec 2019 13:11:03 -0500 Received: from localhost (unknown [217.68.49.72]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id F255E20833; Wed, 4 Dec 2019 18:11:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1575483062; bh=cUBxm5bpX3BNZcvYOv8A70HiYFqDP/A/TSE0hj9URx0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=evaGfYGMbhNnpOD7FwetbXtcSb4V0w0a/U1Uq1Beb/f5qr6BnEdBiCqIJf0n8TdI2 8ephrmCHwqiF9vq3vhMcyAkzpSaO2diHBX/XAU6HJVmhqJm+fU4dsu3Gm9mkiLcSs0 AD6cD79b4Ot0yqvxeWNq0ClVoL2G54h9aX6FoG1w= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , Alexandre Belloni , Stephen Boyd , Sasha Levin Subject: [PATCH 4.9 005/125] clk: at91: avoid sleeping early Date: Wed, 4 Dec 2019 18:55:10 +0100 Message-Id: <20191204175311.107996817@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191204175308.377746305@linuxfoundation.org> References: <20191204175308.377746305@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Alexandre Belloni [ Upstream commit 658fd65cf0b0d511de1718e48d9a28844c385ae0 ] It is not allowed to sleep to early in the boot process and this may lead to kernel issues if the bootloader didn't prepare the slow clock and main clock. This results in the following error and dump stack on the AriettaG25: bad: scheduling from the idle thread! Ensure it is possible to sleep, else simply have a delay. Reported-by: Uwe Kleine-König Signed-off-by: Alexandre Belloni Link: https://lkml.kernel.org/r/20190920153906.20887-1-alexandre.belloni@bootlin.com Fixes: 80eded6ce8bb ("clk: at91: add slow clks driver") Tested-by: Uwe Kleine-König Signed-off-by: Stephen Boyd Signed-off-by: Sasha Levin --- drivers/clk/at91/clk-main.c | 5 ++++- drivers/clk/at91/sckc.c | 20 ++++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/drivers/clk/at91/clk-main.c b/drivers/clk/at91/clk-main.c index 2f97a843d6d6b..fb5c14af8cc8d 100644 --- a/drivers/clk/at91/clk-main.c +++ b/drivers/clk/at91/clk-main.c @@ -354,7 +354,10 @@ static int clk_main_probe_frequency(struct regmap *regmap) regmap_read(regmap, AT91_CKGR_MCFR, &mcfr); if (mcfr & AT91_PMC_MAINRDY) return 0; - usleep_range(MAINF_LOOP_MIN_WAIT, MAINF_LOOP_MAX_WAIT); + if (system_state < SYSTEM_RUNNING) + udelay(MAINF_LOOP_MIN_WAIT); + else + usleep_range(MAINF_LOOP_MIN_WAIT, MAINF_LOOP_MAX_WAIT); } while (time_before(prep_time, timeout)); return -ETIMEDOUT; diff --git a/drivers/clk/at91/sckc.c b/drivers/clk/at91/sckc.c index ab6ecefc49ad8..43ba2a8b03faf 100644 --- a/drivers/clk/at91/sckc.c +++ b/drivers/clk/at91/sckc.c @@ -74,7 +74,10 @@ static int clk_slow_osc_prepare(struct clk_hw *hw) writel(tmp | AT91_SCKC_OSC32EN, sckcr); - usleep_range(osc->startup_usec, osc->startup_usec + 1); + if (system_state < SYSTEM_RUNNING) + udelay(osc->startup_usec); + else + usleep_range(osc->startup_usec, osc->startup_usec + 1); return 0; } @@ -197,7 +200,10 @@ static int clk_slow_rc_osc_prepare(struct clk_hw *hw) writel(readl(sckcr) | AT91_SCKC_RCEN, sckcr); - usleep_range(osc->startup_usec, osc->startup_usec + 1); + if (system_state < SYSTEM_RUNNING) + udelay(osc->startup_usec); + else + usleep_range(osc->startup_usec, osc->startup_usec + 1); return 0; } @@ -310,7 +316,10 @@ static int clk_sam9x5_slow_set_parent(struct clk_hw *hw, u8 index) writel(tmp, sckcr); - usleep_range(SLOWCK_SW_TIME_USEC, SLOWCK_SW_TIME_USEC + 1); + if (system_state < SYSTEM_RUNNING) + udelay(SLOWCK_SW_TIME_USEC); + else + usleep_range(SLOWCK_SW_TIME_USEC, SLOWCK_SW_TIME_USEC + 1); return 0; } @@ -443,7 +452,10 @@ static int clk_sama5d4_slow_osc_prepare(struct clk_hw *hw) return 0; } - usleep_range(osc->startup_usec, osc->startup_usec + 1); + if (system_state < SYSTEM_RUNNING) + udelay(osc->startup_usec); + else + usleep_range(osc->startup_usec, osc->startup_usec + 1); osc->prepared = true; return 0; -- 2.20.1