From patchwork Sun Apr 2 16:27:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Skripkin X-Patchwork-Id: 1764427 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=RQLeW4mf; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4PqrJ86KJlz1yYb for ; Mon, 3 Apr 2023 22:47:03 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 3F1B885E80; Mon, 3 Apr 2023 14:46:54 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="RQLeW4mf"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 22E2685844; Sun, 2 Apr 2023 18:27:41 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-lf1-x136.google.com (mail-lf1-x136.google.com [IPv6:2a00:1450:4864:20::136]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id B82468573D for ; Sun, 2 Apr 2023 18:27:37 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=paskripkin@gmail.com Received: by mail-lf1-x136.google.com with SMTP id c9so24637062lfb.1 for ; Sun, 02 Apr 2023 09:27:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1680452856; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=gLvrpKmA/1bYiN66l/mHOZ5OXLG4OZwKoUPY26+as6M=; b=RQLeW4mfiL3enYAcZxQxTFdfZmUl9ryDN+9I/wbCWDuDGMThS9ZOFAKfwvxtCvYGQK pAGmzRyiHoAlmJpBMo8q6KND4KJrutEEnsTOqf7qa+xdt2jfx0qJ5HXA2mNpysh+M2FY wNnS2yLwhR18mpiqCC+wcTEJmfah97yxTrW3T0sJVKgqWFVZRtrIBvcnJdr9/+EXL4Sx Rcxktbt/pEWuYkQu94tWSBy/G8+rJKgNTpowKQF3VV1NKuz1xKTU4KlS8rysGzd8Mp/6 0N4ylVB9e+wVXDEO+HfjMuNgv8UYWJh7kCLP4uVwxe54ENsCkE1Kxc/fgQT5JDLRpnnX hd2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680452856; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=gLvrpKmA/1bYiN66l/mHOZ5OXLG4OZwKoUPY26+as6M=; b=MeIu/ueiBPf2TaK8PstF5IwrSnE6dcrqIDO9udxRYXgSXKolrJ38WrgE1eKVLw1byc 9QFcVt/3AoRMROwcc87r+3xQqlf/jlZo/mZZWaoMCscKMfWFhcVQ2ufAA+I40gfs2Lxl WjYP5lX2fSlFUk9Wg5vOkMpZ+WGEXVNXDt2K6MRRdhNYLDuy1SKAWODwDR0axcPSRKIl B1YHAqEHdenZqFnxFF/Zot+E7wKa8i/UssFtlnu/XagiIJIJmRgn3ao8MKa35qEPVSyO HaBu8JlUjMX4WGFaYGU6+AKG5bIbxridjTFRn8cHngeQkUM+EGMwS+OLTf2ur4ntWPFa 2Gtw== X-Gm-Message-State: AAQBX9cYjEnNdK3b7BcNEaLgYe2AEvEBh2Z1lRqC4uIu5AypNgtT0qjj aPIqGC0Bum2FN6vEJWUzk9+gdEIpcPo= X-Google-Smtp-Source: AKy350br49g8N48whqgv2oY1iYdrWMxdX5oiic1UQAyf6GyLfDsuI1ZZAtN1SCXubJwpd53PtRG1Uw== X-Received: by 2002:ac2:5a4e:0:b0:4a4:68b9:19f9 with SMTP id r14-20020ac25a4e000000b004a468b919f9mr9451753lfn.33.1680452856487; Sun, 02 Apr 2023 09:27:36 -0700 (PDT) Received: from fedora.. ([2a00:1370:8180:6b00:a1a8:4887:1af4:637a]) by smtp.gmail.com with ESMTPSA id s12-20020a19ad4c000000b004eb3bb581ccsm511067lfd.53.2023.04.02.09.27.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 02 Apr 2023 09:27:36 -0700 (PDT) From: Pavel Skripkin To: u-boot@lists.denx.de Cc: Pavel Skripkin Subject: [PATCH] arm64: interrupts: print FAR_ELx on sync exceptions Date: Sun, 2 Apr 2023 19:27:34 +0300 Message-Id: <20230402162734.121322-1-paskripkin@gmail.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 X-Mailman-Approved-At: Mon, 03 Apr 2023 14:46:52 +0200 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Default synchronous exceptions handler prints only esr and register dump. Sometimes it requiers to see an address which caused exceptions to understand what's going on ARM ARM in section D13.2.41 states that FAR_EL2 will contain meanfull value in case of ESR.EC holds 0x20, 0x21, 0x24, 0x25, 0x22, 0x34 or 0x35. Same applies for EL1. This patch adds function whivh determine current EL, gets correct FAR register and prints it on panic. Signed-off-by: Pavel Skripkin --- arch/arm/lib/interrupts_64.c | 38 +++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/arch/arm/lib/interrupts_64.c b/arch/arm/lib/interrupts_64.c index 2e091415a4..125dc0bb39 100644 --- a/arch/arm/lib/interrupts_64.c +++ b/arch/arm/lib/interrupts_64.c @@ -37,6 +37,40 @@ static void show_efi_loaded_images(struct pt_regs *regs) efi_print_image_infos((void *)regs->elr); } +static void dump_far(unsigned long esr) +{ + unsigned long el, far; + + switch ((esr >> 26) & 0b111111) { + case 0x20: + case 0x21: + case 0x24: + case 0x25: + case 0x22: + case 0x34: + case 0x35: + break; + default: + return; + } + + asm("mrs %0, CurrentEl": "=r" (el)); + + switch (el >> 2) { + case 1: + asm("mrs %0, FAR_EL1": "=r" (far)); + break; + case 2: + asm("mrs %0, FAR_EL2": "=r" (far)); + break; + default: + /* don't print anything to make output pretty */ + return; + } + + printf(", far 0x%lx", far); +} + static void dump_instr(struct pt_regs *regs) { u32 *addr = (u32 *)(regs->elr & ~3UL); @@ -165,7 +199,9 @@ void do_sync(struct pt_regs *pt_regs) smh_emulate_trap(pt_regs)) return; efi_restore_gd(); - printf("\"Synchronous Abort\" handler, esr 0x%08lx\n", pt_regs->esr); + printf("\"Synchronous Abort\" handler, esr 0x%08lx", pt_regs->esr); + dump_far(pt_regs->esr); + printf("\n"); show_regs(pt_regs); show_efi_loaded_images(pt_regs); panic("Resetting CPU ...\n");