Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp917748imm; Wed, 18 Jul 2018 13:02:30 -0700 (PDT) X-Google-Smtp-Source: AAOMgpemcRQRPkN8e+EQBRgs18s2rBbrckRsLaiXxtLsOBw0ugMInqFG4b1iltitRtEIngH4J38/ X-Received: by 2002:a62:1489:: with SMTP id 131-v6mr6565155pfu.159.1531944150554; Wed, 18 Jul 2018 13:02:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531944150; cv=none; d=google.com; s=arc-20160816; b=c7w3SZELQoT4oLYZs22bHKFJe+Bk66/nBalkUQNTrZjP+Sejyucut8qt0i5z0PysEt 11FNETRMLVC0gYlrNM6noGYRNfod1AoyB4DjlBcLm9ikC/EfLIr8F3SHohQTCC/bFv4R Knw/FrMYqQAtVLUqk2xRewuUwz3R9VgXRublJD26CtsmPcBfmSr44c1eMtQ4BxfWXrrP LAsKQAdr5DMrxJwkj+Jv0WqW8V94M42ZECQrAXEDOhJxVZ4S7riWxtWYmuFwHKfb35gE /JrH39+ciJoBqjMrHfhs0cMJb/oSVw3f1XdsNQ2Z6TpAGzLptg3qxLdlZLsATX/OA0pW ZLNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=QQUo7sAkv2veFteCu7Sd3vVt3uDwFMv2uXXXA10kdKc=; b=y0NfLytX785/mcxrd8IQf8qM6q3FX6XH0Kqm6b9kUrD1yamOq0KUziZELpmCASoFVq MBd1QQq+98U61SHkz/gjz7wzsEsLSgInLbQIBH8jkz4XEKpQ+tS+GC0ARazezOzpQ5B+ oZyJ/LvGL7Tzhxs+1ebu9LREaHJKFYY73pt/6HECRUk4bLxz2S+pVqjhzVJ/YjraKrrN jz4zcP09umjx7HympZ1k0fL4CebF0zTNh/lLnhlZA6CFk/r+wkxInBCRrKbJhxjIK3lc p0fGU4RlKUZioEYN3VJWekSuL3wZbLVud+G42WqUacwGaFzIqGvgl9DJN2Gedl2vMiTP djfw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Q71qw1u+; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t17-v6si3658571pgv.615.2018.07.18.13.01.51; Wed, 18 Jul 2018 13:02:30 -0700 (PDT) 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=Q71qw1u+; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730094AbeGRUj3 (ORCPT + 99 others); Wed, 18 Jul 2018 16:39:29 -0400 Received: from mail.kernel.org ([198.145.29.99]:38408 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729309AbeGRUj3 (ORCPT ); Wed, 18 Jul 2018 16:39:29 -0400 Received: from localhost.localdomain (xdsl-188-155-58-14.adslplus.ch [188.155.58.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 8215C2075E; Wed, 18 Jul 2018 19:59:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1531944002; bh=Ig8IrYTGzMScTYPsqPbbWdZ1SYiNc6j6Lg7O1nRmCzs=; h=From:To:Cc:Subject:Date:From; b=Q71qw1u+oVoTujJAnH8FKc5ioIpUhOBl5Metv+0PYzFv1Iu8UKCgXXUD2a7Qst3hX IpLeKxErcEm/LVRq7t+2ReHBUeyTv6VK5y8y2WkXlhW48EUW04DPw0r3y7JlCxC1Zu 1kGJkwx2NqDNoXK8wD0l6405sw7QtpdjVULEdQI0= From: Krzysztof Kozlowski To: Kukjin Kim , Krzysztof Kozlowski , Russell King , Marek Szyprowski , Pankaj Dubey , linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Bartlomiej Zolnierkiewicz , Chanwoo Choi , Alim Akhtar Subject: [RFC] ARM: exynos: Fix imprecise abort during Exynos5422 suspend to RAM Date: Wed, 18 Jul 2018 21:59:29 +0200 Message-Id: <20180718195929.5852-1-krzk@kernel.org> X-Mailer: git-send-email 2.14.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Suspend to RAM on Odroid XU3/XU4/HC1 family (Exynos5422) causes imprecise abort: PM: Syncing filesystems ... done. Freezing user space processes ... (elapsed 0.003 seconds) done. OOM killer disabled. Freezing remaining freezable tasks ... (elapsed 0.003 seconds) done. wake enabled for irq 139 Disabling non-boot CPUs ... IRQ51 no longer affine to CPU1 IRQ52 no longer affine to CPU2 IRQ53 no longer affine to CPU3 IRQ54 no longer affine to CPU4 IRQ55 no longer affine to CPU5 IRQ56 no longer affine to CPU6 cpu cpu4: Dropping the link to regulator.40 IRQ57 no longer affine to CPU7 Unhandled fault: external abort on non-linefetch (0x1008) at 0xf081a028 Internal error: : 1008 [#1] PREEMPT SMP ARM with last call trace in exynos_suspend_enter(). The abort is caused by writing to register in secure part of sysram. All Exynos5422 devices, including Hardkernel Odroid boards, boot with TrustZone in non-secure mode therefore they should access non-secure sysram. Signed-off-by: Krzysztof Kozlowski --- Comments, whether my understanding is correct, are welcomed! --- Documentation/arm/Samsung/Bootloader-interface.txt | 1 + arch/arm/mach-exynos/suspend.c | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Documentation/arm/Samsung/Bootloader-interface.txt b/Documentation/arm/Samsung/Bootloader-interface.txt index ed494ac0beb2..d17ed518a7ea 100644 --- a/Documentation/arm/Samsung/Bootloader-interface.txt +++ b/Documentation/arm/Samsung/Bootloader-interface.txt @@ -26,6 +26,7 @@ Offset Value Purpose 0x20 0xfcba0d10 (Magic cookie) AFTR 0x24 exynos_cpu_resume_ns AFTR 0x28 + 4*cpu 0x8 (Magic cookie, Exynos3250) AFTR +0x28 0x0 or last value during resume (Exynos542x) System suspend 2. Secure mode diff --git a/arch/arm/mach-exynos/suspend.c b/arch/arm/mach-exynos/suspend.c index d3db306a5a70..0ec52f442b97 100644 --- a/arch/arm/mach-exynos/suspend.c +++ b/arch/arm/mach-exynos/suspend.c @@ -256,7 +256,7 @@ static int exynos5420_cpu_suspend(unsigned long arg) unsigned int cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1); unsigned int cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0); - writel_relaxed(0x0, sysram_base_addr + EXYNOS5420_CPU_STATE); + writel_relaxed(0x0, sysram_ns_base_addr + EXYNOS5420_CPU_STATE); if (IS_ENABLED(CONFIG_EXYNOS5420_MCPM)) { mcpm_set_entry_vector(cpu, cluster, exynos_cpu_resume); @@ -328,7 +328,7 @@ static void exynos5420_pm_prepare(void) * needs to restore it back in case, the primary cpu fails to * suspend for any reason. */ - exynos5420_cpu_state = readl_relaxed(sysram_base_addr + + exynos5420_cpu_state = readl_relaxed(sysram_ns_base_addr + EXYNOS5420_CPU_STATE); exynos_pm_enter_sleep_mode(); @@ -448,7 +448,7 @@ static void exynos5420_pm_resume(void) /* Restore the sysram cpu state register */ writel_relaxed(exynos5420_cpu_state, - sysram_base_addr + EXYNOS5420_CPU_STATE); + sysram_ns_base_addr + EXYNOS5420_CPU_STATE); pmu_raw_writel(EXYNOS5420_USE_STANDBY_WFI_ALL, S5P_CENTRAL_SEQ_OPTION); -- 2.14.1