From patchwork Wed May 31 23:57:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 769432 X-Patchwork-Delegate: sjg@chromium.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3wdSJG5pGxz9sDG for ; Thu, 1 Jun 2017 10:04:30 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="uVYwyndK"; dkim-atps=neutral Received: by lists.denx.de (Postfix, from userid 105) id 87274C21C5F; Thu, 1 Jun 2017 00:00:40 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 6ECD8C21C90; Wed, 31 May 2017 23:58:09 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 19525C21C7C; Wed, 31 May 2017 23:57:56 +0000 (UTC) Received: from mail-oi0-f50.google.com (mail-oi0-f50.google.com [209.85.218.50]) by lists.denx.de (Postfix) with ESMTPS id 52E83C21C6F for ; Wed, 31 May 2017 23:57:52 +0000 (UTC) Received: by mail-oi0-f50.google.com with SMTP id l18so35438028oig.2 for ; Wed, 31 May 2017 16:57:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=0JrlgbprFQO8K1vXmJc5qUyTksMYAq4iDjlPTqijvhk=; b=uVYwyndKkqjmRiLlOB4Cc+b3TdMQKGzgvsQ3HNbzC9kgYr4dIYxSdPQGnI/HZia0St X+vaU412nWyvvLEvWD/CZfSgkx5T4PgPzgYxrFX6vE8SdphafSegE8CpItZsJDD4MYXM Jl0T6w/JxVR2XQ9oUXt1GfiJQmMzLZdpV0tJNnnwmT/9athHj94SkKZAFRzOb8XiL0kR HHkhRZjBR1M5Stl3tO0Yf+0r1KXpVS96gpEAlhyvOurMVwSdNpQaJZHcoeE7/mInTPYD oz9naDM7R3o3lUAa2dQO7dpcGJ4OrcyxOOq6qDAtIeG7Eei9u/YJ5SAr64YGciH6qNYd D50A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=0JrlgbprFQO8K1vXmJc5qUyTksMYAq4iDjlPTqijvhk=; b=d5cL3WGyg+wpfiZBEt1JOsWE6xdIDI/5BaKduhORwT+rVeSl0OA9Dt4MyQbOFsB344 eZqjiFJyI848PqdRjWwqFsWe89RVV+RATkzRQfNRDus7oBlKAd7YrpRSOzyu2w+yU1o9 T9j6pAs4acOdYvi71DrFmeDa5DjNQZHXKlO2NfJ8zmg95/dvN+zOMHn7DiHk/Emnd38w XLW4iTHYiognK4chsAqxHoZp/Znpk94+fCK2LsBFSumPNKHvTtn6jroQCbdcIbM/pEYZ j8c35raqhpl/CZBbXrEewS/QbrQTyrtlmwQu5+9IC97q1nMca+s80zrqvld+bXWuDeys IEAw== X-Gm-Message-State: AODbwcB2TS8E044lnjG5ewYu3k0vORk6cTBgGAPANcHz6oAPs6PggdAH vrhg1v8RE0dc72VwooK6zg== X-Received: by 10.157.45.56 with SMTP id v53mr10708604ota.68.1496275071075; Wed, 31 May 2017 16:57:51 -0700 (PDT) Received: from kaki.bld.corp.google.com ([2620:0:10f2:12:5d5a:9b64:4f40:cd0e]) by smtp.gmail.com with ESMTPSA id p53sm706138otd.26.2017.05.31.16.57.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 31 May 2017 16:57:50 -0700 (PDT) Received: by kaki.bld.corp.google.com (Postfix, from userid 121222) id C66E84013C; Wed, 31 May 2017 17:57:49 -0600 (MDT) From: Simon Glass To: U-Boot Mailing List Date: Wed, 31 May 2017 17:57:16 -0600 Message-Id: <20170531235737.11676-9-sjg@chromium.org> X-Mailer: git-send-email 2.13.0.219.gdb65acc882-goog In-Reply-To: <20170531235737.11676-1-sjg@chromium.org> References: <20170531235737.11676-1-sjg@chromium.org> Cc: Stephen Warren , Tom Warren , Riley Baird Subject: [U-Boot] [PATCH v2 08/28] tegra: Init clocks even when SPL did not run X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" At present early clock init happens in SPL. If SPL did not run (because for example U-Boot is chain-loaded from another boot loader) then the clocks are not set as U-Boot expects. Add a function to detect this and call the early clock init in U-Boot proper. Signed-off-by: Simon Glass Signed-off-by: Simon Glass --- Changes in v2: None arch/arm/include/asm/arch-tegra/clock.h | 3 +++ arch/arm/mach-tegra/board2.c | 3 +++ arch/arm/mach-tegra/clock.c | 5 +++++ arch/arm/mach-tegra/tegra124/clock.c | 18 ++++++++++++++++++ 4 files changed, 29 insertions(+) diff --git a/arch/arm/include/asm/arch-tegra/clock.h b/arch/arm/include/asm/arch-tegra/clock.h index 301de4a899..92180db321 100644 --- a/arch/arm/include/asm/arch-tegra/clock.h +++ b/arch/arm/include/asm/arch-tegra/clock.h @@ -288,6 +288,9 @@ void clock_init(void); /* Initialize the PLLs */ void clock_early_init(void); +/* @return true if hardware indicates that clock_early_init() was called */ +bool clock_early_init_done(void); + /* Returns a pointer to the clock source register for a peripheral */ u32 *get_periph_source_reg(enum periph_id periph_id); diff --git a/arch/arm/mach-tegra/board2.c b/arch/arm/mach-tegra/board2.c index e0a39e1a32..bd137969f0 100644 --- a/arch/arm/mach-tegra/board2.c +++ b/arch/arm/mach-tegra/board2.c @@ -181,6 +181,9 @@ void gpio_early_init(void) __attribute__((weak, alias("__gpio_early_init"))); int board_early_init_f(void) { + if (!clock_early_init_done()) + clock_early_init(); + #if defined(CONFIG_TEGRA_DISCONNECT_UDC_ON_BOOT) #define USBCMD_FS2 (1 << 15) { diff --git a/arch/arm/mach-tegra/clock.c b/arch/arm/mach-tegra/clock.c index 090dba629c..ce68c7d0cc 100644 --- a/arch/arm/mach-tegra/clock.c +++ b/arch/arm/mach-tegra/clock.c @@ -824,3 +824,8 @@ int clock_external_output(int clk_id) return 0; } + +__weak bool clock_early_init_done(void) +{ + return true; +} diff --git a/arch/arm/mach-tegra/tegra124/clock.c b/arch/arm/mach-tegra/tegra124/clock.c index 5e4406102f..5ae718b342 100644 --- a/arch/arm/mach-tegra/tegra124/clock.c +++ b/arch/arm/mach-tegra/tegra124/clock.c @@ -891,6 +891,24 @@ void clock_early_init(void) udelay(2); } +/* + * clock_early_init_done - Check if clock_early_init() has been called + * + * Check a register that we set up to see if clock_early_init() has already + * been called. + * + * @return true if clock_early_init() was called, false if not + */ +bool clock_early_init_done(void) +{ + struct clk_rst_ctlr *clkrst = (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE; + u32 val; + + val = readl(&clkrst->crc_sclk_brst_pol); + + return val == 0x20002222; +} + void arch_timer_init(void) { struct sysctr_ctlr *sysctr = (struct sysctr_ctlr *)NV_PA_TSC_BASE;