From patchwork Thu May 20 09:22:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Greg KH X-Patchwork-Id: 443173 Delivered-To: patch@linaro.org Received: by 2002:a02:7a1b:0:0:0:0:0 with SMTP id a27csp2114982jac; Thu, 20 May 2021 02:31:51 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy7nd5ukuQYr0afBDLHrldOSU/bJIFs8SZR61SsIQAVuZ5b/5QlJ0z3HirkNQ9n/oCPaDAO X-Received: by 2002:a17:906:3615:: with SMTP id q21mr3802757ejb.414.1621503111636; Thu, 20 May 2021 02:31:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621503111; cv=none; d=google.com; s=arc-20160816; b=ZIahH1MnV4d22KF4KkyPeN00XEl/24E5MtcYXcWv5KIrYjjqjCSdEzOQnDJ+DTCfRw r5rBiPOUIijOPfTgP4HTl/6xMZRAbxFU+Y/SIhUpyok0Iy+imwsM0HBEZifUewoR1zpo h9xH7nGlu8ombiQjsyB+mkMqubTgEPqGjVqwd1lGhafSZligXgS3w9pWDYwh1uwTgKlB XgcS9XtV7taoI2ChBYfrrOtveovkx+XsVpHFR9I8XF+GEVbGsUI2g8tOJhIGIu4YD8Dw 7f1NyX329NNUEeildrwN6RMdzDImhd7qr0wPR+2t7ow2s6b2KNiehPGvHXg2Qsao7u3/ xrGw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=m3O7wbHR6K2GktpqTcn6PKKHp3U1GNc2Uz5TPA1Pawo=; b=vjI55LIFa5HrG9aLxYzEgJS9cQq9yyzZtwWGdDnF1CM1DE4JYlLf3d5dc4KOP+VP0o TNvVTpOSRwfUkLoACDr/+K12M9UYouHkwNLLF+yjyDV7rJacfUfYkKIispLRqN/xpbbt t+qHoWrd6+4AuryojHlDNkdCBAmLk3mGjiAip4SFUuXjhng4cYAGTppaanqOCeyhRIEX M8u2oP4anAxOjlwMvxTwYdcziENSYVwacO5tT8RN2EfIxdCqUzE77XS4LKQoNQT/ELRW 9UPC6bmOqVWz9pvL+eIgqBFHIdnSIGJTFAXKCd5oeQYpbMNVl3ecVerq7ZJZlLU75T1j YpJg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Vdi6avpr; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v4si1776824edc.556.2021.05.20.02.31.51; Thu, 20 May 2021 02:31:51 -0700 (PDT) Received-SPF: pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Vdi6avpr; spf=pass (google.com: domain of stable-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=stable-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232268AbhETJdJ (ORCPT + 12 others); Thu, 20 May 2021 05:33:09 -0400 Received: from mail.kernel.org ([198.145.29.99]:53974 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232464AbhETJbI (ORCPT ); Thu, 20 May 2021 05:31:08 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id D3B4C6121E; Thu, 20 May 2021 09:27:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1621502876; bh=gFCcF5BTHerYyZCaGQSR28fzhZp33fOtxwvk3P1bJTw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Vdi6avprC+Ww6Am4WxaLg9r3XvOZ0/n8bKoitKUEwK41hcfl/jxKPo0K/5fL7vs1g yh2tVQ/eHlVNQYAOHXDUdjFYxl/+lI01Wy7irU/R/7ZR4Zx8W3s10fTqH1QSmpGaOV d+GuLV+g1kqNSHuokqLuhtFnH8NlJuBmNiKruJ+o= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Manivannan Sadhasivam , Bjorn Andersson , Russell King , Sasha Levin Subject: [PATCH 5.10 21/47] ARM: 9075/1: kernel: Fix interrupted SMC calls Date: Thu, 20 May 2021 11:22:19 +0200 Message-Id: <20210520092054.228690234@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210520092053.559923764@linuxfoundation.org> References: <20210520092053.559923764@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Manivannan Sadhasivam [ Upstream commit 57ac51667d8cd62731223d687e5fe7b41c502f89 ] On Qualcomm ARM32 platforms, the SMC call can return before it has completed. If this occurs, the call can be restarted, but it requires using the returned session ID value from the interrupted SMC call. The ARM32 SMCC code already has the provision to add platform specific quirks for things like this. So let's make use of it and add the Qualcomm specific quirk (ARM_SMCCC_QUIRK_QCOM_A6) used by the QCOM_SCM driver. This change is similar to the below one added for ARM64 a while ago: commit 82bcd087029f ("firmware: qcom: scm: Fix interrupted SCM calls") Without this change, the Qualcomm ARM32 platforms like SDX55 will return -EINVAL for SMC calls used for modem firmware loading and validation. Signed-off-by: Manivannan Sadhasivam Reviewed-by: Bjorn Andersson Signed-off-by: Russell King Signed-off-by: Sasha Levin --- arch/arm/kernel/asm-offsets.c | 3 +++ arch/arm/kernel/smccc-call.S | 11 ++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) -- 2.30.2 diff --git a/arch/arm/kernel/asm-offsets.c b/arch/arm/kernel/asm-offsets.c index be8050b0c3df..70993af22d80 100644 --- a/arch/arm/kernel/asm-offsets.c +++ b/arch/arm/kernel/asm-offsets.c @@ -24,6 +24,7 @@ #include #include #include +#include #include "signal.h" /* @@ -148,6 +149,8 @@ int main(void) DEFINE(SLEEP_SAVE_SP_PHYS, offsetof(struct sleep_save_sp, save_ptr_stash_phys)); DEFINE(SLEEP_SAVE_SP_VIRT, offsetof(struct sleep_save_sp, save_ptr_stash)); #endif + DEFINE(ARM_SMCCC_QUIRK_ID_OFFS, offsetof(struct arm_smccc_quirk, id)); + DEFINE(ARM_SMCCC_QUIRK_STATE_OFFS, offsetof(struct arm_smccc_quirk, state)); BLANK(); DEFINE(DMA_BIDIRECTIONAL, DMA_BIDIRECTIONAL); DEFINE(DMA_TO_DEVICE, DMA_TO_DEVICE); diff --git a/arch/arm/kernel/smccc-call.S b/arch/arm/kernel/smccc-call.S index 00664c78faca..931df62a7831 100644 --- a/arch/arm/kernel/smccc-call.S +++ b/arch/arm/kernel/smccc-call.S @@ -3,7 +3,9 @@ * Copyright (c) 2015, Linaro Limited */ #include +#include +#include #include #include #include @@ -27,7 +29,14 @@ UNWIND( .fnstart) UNWIND( .save {r4-r7}) ldm r12, {r4-r7} \instr - pop {r4-r7} + ldr r4, [sp, #36] + cmp r4, #0 + beq 1f // No quirk structure + ldr r5, [r4, #ARM_SMCCC_QUIRK_ID_OFFS] + cmp r5, #ARM_SMCCC_QUIRK_QCOM_A6 + bne 1f // No quirk present + str r6, [r4, #ARM_SMCCC_QUIRK_STATE_OFFS] +1: pop {r4-r7} ldr r12, [sp, #(4 * 4)] stm r12, {r0-r3} bx lr