From patchwork Fri May 18 08:35:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Simek X-Patchwork-Id: 916116 X-Patchwork-Delegate: monstr@monstr.eu Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=xilinx.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=monstr-eu.20150623.gappssmtp.com header.i=@monstr-eu.20150623.gappssmtp.com header.b="NVbNUKUT"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 40nM2j06pJz9s28 for ; Fri, 18 May 2018 18:36:11 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 7B86CC21F37; Fri, 18 May 2018 08:36:05 +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_BLOCKED, RCVD_IN_MSPIKE_H2, 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 3A687C21DB3; Fri, 18 May 2018 08:36:03 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 007D7C21DB3; Fri, 18 May 2018 08:36:01 +0000 (UTC) Received: from mail-wr0-f196.google.com (mail-wr0-f196.google.com [209.85.128.196]) by lists.denx.de (Postfix) with ESMTPS id 755C3C21C29 for ; Fri, 18 May 2018 08:36:01 +0000 (UTC) Received: by mail-wr0-f196.google.com with SMTP id h5-v6so8301357wrm.4 for ; Fri, 18 May 2018 01:36:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monstr-eu.20150623.gappssmtp.com; s=20150623; h=sender:from:to:cc:subject:date:message-id; bh=j0dKYDUmFz/XnXO8bTXlM+NLmXoWlxqYzTWBAUczgcA=; b=NVbNUKUTGW3M+Zpi7Lh/W3nKWwrL4OG1ZFbilM0tIWgms+evsrQoWOL+UoEjAocQ5z STp2MVu3hINxjCFLPIqhPSW/oHQCC9XIRlshgHi4b7mymBp1TVspjW98hzlbnqcTOZ3z wTjo467DjrqzCrDV8UZt2fuGp+amdbu04Y6iVYoUyrw37JY2Y73x3a1LrqKDxiZNnSWY yzmVSbeYtq+klGn+iqPTcMGhKx9hVBv+89DKZk1NZRFMfAGCdw3/sZDswzJ8a7RoAXMH web43BFnaSfPZcYXGcIxRCM02zM+3GZ6P1pb01ZVIyCc7O58nizsUngVnGWiXtY6VlVn C/qw== 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; bh=j0dKYDUmFz/XnXO8bTXlM+NLmXoWlxqYzTWBAUczgcA=; b=RTuutCv+48iBBPucBvwbYL4I5dayxE066zK74txUaSAKLtUE1IgDUtup73lDykZUvP KsR3kTky7kavHU4e9bnneIliciO1HvcgDW2XERNn3vavHR+jhYfw6hUI1blRKDkmWgjy 0EyCdZ/Ymn1WbScttkzKIPX1YVUvcL1TGdUALfu4A0NuewWQfXU2w/clOcXsBPM3u95R r/eB9vYs+mP/djaQxHB48vIbTnyb32Qpng0Ggfir/80l06e1CZBbV4CbgPvl4gjmQFi/ uSgpmzqsIrks8zgsPM0FcRTvNzGjUAEQZZ2+TA4j+sHaEBuUxjbIw2CsbX76al/D1htA F+BA== X-Gm-Message-State: ALKqPwcp512bJha9/oOLW3q1uThHW2UjGk8rZqcT8KF/n0d8TbfjJkyz g03o22JecKmbCVF/nVmrWcSvNhl7 X-Google-Smtp-Source: AB8JxZpsbuHd+XxNKRF3ppwXUllmJgRqZ4WmquTBnUmqNqJoDSBo7BiG0Had3oeHXQ8Jr+yaimCx3g== X-Received: by 2002:adf:86fa:: with SMTP id 55-v6mr7751358wry.232.1526632560915; Fri, 18 May 2018 01:36:00 -0700 (PDT) Received: from localhost (nat-35.starnet.cz. [178.255.168.35]) by smtp.gmail.com with ESMTPSA id i30-v6sm12076727wra.38.2018.05.18.01.35.59 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 18 May 2018 01:36:00 -0700 (PDT) From: Michal Simek To: u-boot@lists.denx.de Date: Fri, 18 May 2018 10:35:56 +0200 Message-Id: X-Mailer: git-send-email 2.17.0 Subject: [U-Boot] [PATCH v2] arm64: zynqmp: Show reset reason 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" Read reset reason reg and show it in log and also save it as variable. Clearing reset reason when it is read to show only one status Signed-off-by: Michal Simek --- Changes in v2: - Clear stats after read - Remove print argument - Sync table order to fit with macros arch/arm/include/asm/arch-zynqmp/hardware.h | 12 +++++- board/xilinx/zynqmp/zynqmp.c | 43 +++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/arch/arm/include/asm/arch-zynqmp/hardware.h b/arch/arm/include/asm/arch-zynqmp/hardware.h index 3f1f9498e356..7961a247e196 100644 --- a/arch/arm/include/asm/arch-zynqmp/hardware.h +++ b/arch/arm/include/asm/arch-zynqmp/hardware.h @@ -33,6 +33,14 @@ #define PS_MODE2 BIT(2) #define PS_MODE3 BIT(3) +#define RESET_REASON_DEBUG_SYS BIT(6) +#define RESET_REASON_SOFT BIT(5) +#define RESET_REASON_SRST BIT(4) +#define RESET_REASON_PSONLY BIT(3) +#define RESET_REASON_PMU BIT(2) +#define RESET_REASON_INTERNAL BIT(1) +#define RESET_REASON_EXTERNAL BIT(0) + struct crlapb_regs { u32 reserved0[36]; u32 cpu_r5_ctrl; /* 0x90 */ @@ -40,7 +48,9 @@ struct crlapb_regs { u32 timestamp_ref_ctrl; /* 0x128 */ u32 reserved2[53]; u32 boot_mode; /* 0x200 */ - u32 reserved3[14]; + u32 reserved3_0[7]; + u32 reset_reason; /* 0x220 */ + u32 reserved3_1[6]; u32 rst_lpd_top; /* 0x23C */ u32 reserved4[4]; u32 boot_pin_ctrl; /* 0x250 */ diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c index 551921b888a0..f909c663357d 100644 --- a/board/xilinx/zynqmp/zynqmp.c +++ b/board/xilinx/zynqmp/zynqmp.c @@ -476,6 +476,47 @@ static int create_mmc_boot_commands(void) return 0; } +static const struct { + u32 bit; + const char *name; +} reset_reasons[] = { + { RESET_REASON_DEBUG_SYS, "DEBUG" }, + { RESET_REASON_SOFT, "SOFT" }, + { RESET_REASON_SRST, "SRST" }, + { RESET_REASON_PSONLY, "PS-ONLY" }, + { RESET_REASON_PMU, "PMU" }, + { RESET_REASON_INTERNAL, "INTERNAL" }, + { RESET_REASON_EXTERNAL, "EXTERNAL" }, + {} +}; + +static u32 reset_reason(void) +{ + u32 ret; + int i; + const char *reason = NULL; + + ret = readl(&crlapb_base->reset_reason); + + puts("Reset reason:\t"); + + for (i = 0; i < ARRAY_SIZE(reset_reasons); i++) { + if (ret & reset_reasons[i].bit) { + reason = reset_reasons[i].name; + printf("%s ", reset_reasons[i].name); + break; + } + } + + puts("\n"); + + env_set("reset_reason", reason); + + writel(~0, &crlapb_base->reset_reason); + + return ret; +} + int board_late_init(void) { u32 reg = 0; @@ -593,6 +634,8 @@ int board_late_init(void) env_set("boot_targets", new_targets); + reset_reason(); + return 0; }