From nobody Wed Oct 8 09:26:31 2025 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5DE51289E00 for ; Mon, 30 Jun 2025 12:12:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751285533; cv=none; b=f9RbyNPEtkDEMbotLK+iAJpt3rRH00rCKBuzwolVDdWjVhmrw/vk5x99nPttAaWc9KeRu6YO0hKCBoIUK78t8rxZJz3uaDBwajmxqq4i8w/FKTVzPo843Icv72UDDBl8Bsny9lXjsn2IZhaZbqKK2WUu2KhJkXIusVrDEpM5Dig= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751285533; c=relaxed/simple; bh=JHEMWVgoh1hSEWV3+LxISOVNHVENn+umGgBSK+L7G3s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=neIc2ROZIYMi1rVzbzVCfgLszBYdbOn+OKWRIZwv+UBggwJe7IdyWHVYitehb93ylkCRY6r36i56hcbWO9Tr4Lt16HdfIuRUvizrVp1A89wf5BytNstB20wTbBwvz6Ulvc9CwNmE592V+oLkyHWAg2EZ/jSjDSH3HxiXMaI4AdE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=cciHYJrA; arc=none smtp.client-ip=209.85.221.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="cciHYJrA" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-3a52874d593so1732335f8f.0 for ; Mon, 30 Jun 2025 05:12:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1751285531; x=1751890331; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=K2w7Xf8pzyPjjaTg20uEoTHzkbLaYJGlVAM+8SRoxsE=; b=cciHYJrAXlUy1SPHDsCQucTPvkh5WgD/ijOhyQ2Q+aazK4ZAzTEpGAANIDmrjMDTyp sWg/Vx4lKB1UnY0vdX2ubq9jFYEIBGKLW3ZGrIbROlPeIMCBIhuo+KpNUtYgoQlXvt8s lMzJJJEDSi4Rr4zpgv1F8+suZUAJR0R71S3E2VabUlbf90opKkPQvNLYOYya40SZeWq+ Wf6ye/0oGv/2lCGEFWmmyndI5OsNZFPGJHp8jz2xJqG5q/BpXX8s7iZMiXgtxTfPj5MO rN/TGSLk0z3aWCy8CB3Q+BIc7t08+DwQD4kjNXXvxlQRqjMmYZ9AyVT+XGQ/xnqi7F7Q 3UHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751285531; x=1751890331; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=K2w7Xf8pzyPjjaTg20uEoTHzkbLaYJGlVAM+8SRoxsE=; b=Scv+oXMOT+Xhb11A89YtaVrrTsW6fqQEeB++SCue4YQoGBqUsJ5zmgtvkCg7HIs/wU Y8RnKv645hm2cNm0Q4wOJH2IKM9wyHan4mdBtX+zC6LHtLc1GNUsr11t8SeFAfLIBCv8 wm8LOd/qpP0EimubAmTvjWFLIWiJHZ5bP7FJOqqEytmrTHMdJ0DfAW+lYjBmGshLcXft /9dWiXwkY+eWdQTZhJth2C1VUY9TNoBkagaviKQO3ws22McNkMlqsFiK4SgoloRwrbcc /mweW2M7YbMndch7b5RUl0tafGjiwq+UBAQ+Eco1ycFD5EtOjCQOhCMxYxdQZZ77nva0 kbtg== X-Forwarded-Encrypted: i=1; AJvYcCXbElwPpdPkif9p+ejDvJjLZZj7NEadcCLUMwpRYpW1ivzT3uhJP0XUcod15j/vxRxe4+XyMIyIqMZILPQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzfnjTkUGRX7pDqgACAKtevyAdejgOCN6KanMCUT+wtC/GavLA8 RVo9WBps7LsrkR6XtFc/hDjH6/44CiACFLoZAE/53+ZoRx+PuqMdhJ1dAYQuj/Wizk4= X-Gm-Gg: ASbGncuPXp+poVbOhRD26kiQnB0nO6YG0nFr78c68p2W3CT0mDnsC5MuSVswjHuWpqO WbG8yvr9mSQdpWQO863auEVfOSTXrbYW5oPmoOrIH+JSivAx9MSZw13akS346VX7QqJB4iyyXRz Xc10Mdsg/BG92Q7MApOEZFARLWm931SDP6fn63QdkDoorNIhzA/R8+dTSDvGbjZhoOnjZSd7svl WBYO2D2EgHr+0S6rMS5ZwrPS3NaWpsIxuajsrqSZ9wQThj8IiGHvrB/WVIkTPtPmEutzMaF9ti9 y68YMeiD8WnhFhYx3VXbWN6FdkFb5Yx3BPFyWUPMQx3AECyQV2QLDubN X-Google-Smtp-Source: AGHT+IFhId39qI7YjHzEzjthugvk1G5r/371+xQVx/G8j/lKjEuyHz1PoyVGN9Y5kQEyv/NFSXv6lw== X-Received: by 2002:adf:cb8c:0:b0:3a5:8a68:b81d with SMTP id ffacd0b85a97d-3a8ff520200mr8265438f8f.43.1751285530559; Mon, 30 Jun 2025 05:12:10 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:19e3:6e9c:f7cd:ff6a]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a88c800eaasm10470472f8f.37.2025.06.30.05.12.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Jun 2025 05:12:10 -0700 (PDT) From: Bartosz Golaszewski Date: Mon, 30 Jun 2025 14:12:02 +0200 Subject: [PATCH v2 1/4] firmware: qcom: scm: remove unused arguments from SHM bridge routines Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250630-qcom-scm-race-v2-1-fa3851c98611@linaro.org> References: <20250630-qcom-scm-race-v2-0-fa3851c98611@linaro.org> In-Reply-To: <20250630-qcom-scm-race-v2-0-fa3851c98611@linaro.org> To: Bjorn Andersson , Konrad Dybcio , Johan Hovold Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski , Konrad Dybcio X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3243; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=tDndb84vpRLLlB0tqAD10LKSmWnhIuaAzdlt5YEE7gM=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoYn8X/J+02BKiQNIqcB/qSsY5HFRAecbon0pNX 9L1Tl2a5UyJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaGJ/FwAKCRARpy6gFHHX cmPuD/99ROP6cyXEEdebUl5yHEUYgSjlKZ56OZ5qC8VeYAbPj5FbN19gApc9L6fd4UGu96fNJQF BkE9QqPgjk046VHjE3n2auh0Gvj0+wYwN4FblV8vqf+BgD3mlF7UMlVMR40pxTIiYZiuy6jPeOH etOO5Gzc0sjzcb2OWjfMhwz5ex52jH8ICbRWUeS9ZV/s7MxzBEL93t0JPvyjJ7Cpw1cGLbGN7c9 smdQpWN+D8ti+fJpjZ/2icgkgTMHCT0INfogztBZyxCCwd+IooCqR7I/J++H6UsWW0Vq1inegjS Uu0tRgpJ4xYOob4R5No+dSMFJgi0Ut9uuFTJru9lOPqvQ4oyIRAsKd0+ETc2BGphz15RlkOiftc OO0BbNRmHlULs5IXxnSpa7oAsEir4CgsHz4r7YImjwHlFTCp2OHY0WQT+4oNs/wmy9J2toyEzAp +e/P8r041rGi5jxXnqmXcRr+DZ8MV6ZJ5NhvG/wiBfD3mYvzLZd0mwOc9RCXL8Hw3X/9XHZIu36 bX2tp7wRhVSGnaCf3LkzgnTvK32VmR5SAxPCQd25hQxaPeAJUi6E+8E+s9q8PVgodVkrUs7ohtS lXQOicMwbFoA6yGI1KkcIXUYUQ0buj5ntClbpeCtoNQxI5xmM62Zuzrw7mSl+FDfvtUKjwSOBjt /EBQFtreWnouIOQ== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski qcom_scm_shm_bridge_create() and qcom_scm_shm_bridge_delete() take struct device as argument but don't use it. Remove it from these functions' prototypes. Reviewed-by: Konrad Dybcio Signed-off-by: Bartosz Golaszewski --- drivers/firmware/qcom/qcom_scm.c | 4 ++-- drivers/firmware/qcom/qcom_tzmem.c | 8 ++++---- include/linux/firmware/qcom/qcom_scm.h | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_= scm.c index f63b716be5b027550ae3a987e784f0814ea6d678..d830511a0082a6a52e544a4b247= b2863d8b06dbd 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -1631,7 +1631,7 @@ int qcom_scm_shm_bridge_enable(void) } EXPORT_SYMBOL_GPL(qcom_scm_shm_bridge_enable); =20 -int qcom_scm_shm_bridge_create(struct device *dev, u64 pfn_and_ns_perm_fla= gs, +int qcom_scm_shm_bridge_create(u64 pfn_and_ns_perm_flags, u64 ipfn_and_s_perm_flags, u64 size_and_flags, u64 ns_vmids, u64 *handle) { @@ -1659,7 +1659,7 @@ int qcom_scm_shm_bridge_create(struct device *dev, u6= 4 pfn_and_ns_perm_flags, } EXPORT_SYMBOL_GPL(qcom_scm_shm_bridge_create); =20 -int qcom_scm_shm_bridge_delete(struct device *dev, u64 handle) +int qcom_scm_shm_bridge_delete(u64 handle) { struct qcom_scm_desc desc =3D { .svc =3D QCOM_SCM_SVC_MP, diff --git a/drivers/firmware/qcom/qcom_tzmem.c b/drivers/firmware/qcom/qco= m_tzmem.c index 94196ad87105c6efc229bccebfd15e0be55f72c0..4fe333fd2f075a4e92ac6462d85= 4848255665e18 100644 --- a/drivers/firmware/qcom/qcom_tzmem.c +++ b/drivers/firmware/qcom/qcom_tzmem.c @@ -124,9 +124,9 @@ static int qcom_tzmem_init_area(struct qcom_tzmem_area = *area) if (!handle) return -ENOMEM; =20 - ret =3D qcom_scm_shm_bridge_create(qcom_tzmem_dev, pfn_and_ns_perm, - ipfn_and_s_perm, size_and_flags, - QCOM_SCM_VMID_HLOS, handle); + ret =3D qcom_scm_shm_bridge_create(pfn_and_ns_perm, ipfn_and_s_perm, + size_and_flags, QCOM_SCM_VMID_HLOS, + handle); if (ret) return ret; =20 @@ -142,7 +142,7 @@ static void qcom_tzmem_cleanup_area(struct qcom_tzmem_a= rea *area) if (!qcom_tzmem_using_shm_bridge) return; =20 - qcom_scm_shm_bridge_delete(qcom_tzmem_dev, *handle); + qcom_scm_shm_bridge_delete(*handle); kfree(handle); } =20 diff --git a/include/linux/firmware/qcom/qcom_scm.h b/include/linux/firmwar= e/qcom/qcom_scm.h index 983e1591bbba75215cc1ae3eb28455c0c360e0ce..82b1b8c50ca3e5f97665e6975e8= d7e8e4299e65d 100644 --- a/include/linux/firmware/qcom/qcom_scm.h +++ b/include/linux/firmware/qcom/qcom_scm.h @@ -149,10 +149,10 @@ bool qcom_scm_lmh_dcvsh_available(void); int qcom_scm_gpu_init_regs(u32 gpu_req); =20 int qcom_scm_shm_bridge_enable(void); -int qcom_scm_shm_bridge_create(struct device *dev, u64 pfn_and_ns_perm_fla= gs, +int qcom_scm_shm_bridge_create(u64 pfn_and_ns_perm_flags, u64 ipfn_and_s_perm_flags, u64 size_and_flags, u64 ns_vmids, u64 *handle); -int qcom_scm_shm_bridge_delete(struct device *dev, u64 handle); +int qcom_scm_shm_bridge_delete(u64 handle); =20 #ifdef CONFIG_QCOM_QSEECOM =20 --=20 2.48.1 From nobody Wed Oct 8 09:26:31 2025 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E863A289E03 for ; Mon, 30 Jun 2025 12:12:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751285535; cv=none; b=geLjepfSahQIvNnLxzi0hrrWuHmL8DaYFVezMYy5r30OY6mvU+6miMoZ91YYa6a+k3LOAxvVmMyPnfAxkUaXRrAY9TfGYZu32QkMwL5WQsiXJHQjf7qeP/dpcUrIYxF2llOYAdisAQagsBjASea2XdP8w+uuIZnUzjA5RKFXaNw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751285535; c=relaxed/simple; bh=Ohg7lHWaNmfosvJfdJwtJFPngEtlvxXVxUzrVn4Qc2M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HwmtqrEyhiHsaJ8xppUCwovrs7MIBwqy/sEvTCKBNtxj35+sdrs2dlCJEYM4iNNfH8DfsvpUDzGEWM1FQ6eL4eEVbupRhlhfgw4jixUBKXBri0wQrAcWIEm/QTsQ6u5MA8QocQ6RN1OjiCGRRumDKacw96NcR9VZj+ecavD8/6k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=yLP+Dzcp; arc=none smtp.client-ip=209.85.221.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="yLP+Dzcp" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-3a57c8e247cso1598628f8f.1 for ; Mon, 30 Jun 2025 05:12:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1751285532; x=1751890332; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=hHXWi0yX60qUZ47U63Zg5gRe8tPHzoc8Gl7zu8pbins=; b=yLP+DzcpvKuGjqjXE1vVFvpShQcsafEScKA279oTg7cfYBU/VfzYOzWqiGrIdUMb8G DzXePEHrYD97VqJEYDDvLxFt9klHBkgshVqZAaVrH15QF1PtSznCvNFq+SaX5e4WTlv9 X++aGUfNsroES6kb7VAggUUuH5vlq/rim6GnyebYIUEBdZbfxdFFpc7vB0MZuiOf8Mjj T4Wj6/LRFOaJnPF1ex9pDP+B/igymHw/BMk5I+8JuyA3mV/YwyZdwjfy2LuAJBCPUwzU nvZ9hzf66xMVrdzIziu9KIiXcXMgOowJNjr4SR6XKuCLv2+7GBaGttQ7+XaOsPXWyCRi odcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751285532; x=1751890332; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hHXWi0yX60qUZ47U63Zg5gRe8tPHzoc8Gl7zu8pbins=; b=jLMRPcfI1rh7QMrrHLhph5S0sDTsPfnurw6TrLFiJTJ7kOhnoBMMfQZLOdC1QuUu5P /8UNGjidehIwjQw6G3gZgXub/ToDo2Spbi3r9q1reaMscyMHZUzwGjdJIbdbWWD75loY I4tVb/hfPSD2FpQjTbRoSE+up1nC5u2ByowQ6XqeArlm88Zjn9+GX76+BehADg/9CDcO DhNbm5ucXmki71cMKuqEf5b9xA9Ur9H8aid13ZexowtpCLmgmfzi331rIBd7OEPUYux4 YkvP0yeaZu75fN1Y1Xgz9cQDVQHWCif0/LHweWZgfXNKYb8jwg2l5haEdeG4E9PvOuXF iqpg== X-Forwarded-Encrypted: i=1; AJvYcCUgSN61kZKH0foSTLxwVVgt6sWYmYvTkDQ/aDty4EV1BChx13AECMLksfCevGUlupVEUIH5PJ4jl1gjkgo=@vger.kernel.org X-Gm-Message-State: AOJu0YxHZ0vZ27N8XZONNiN45hnUVYcBwXpJLkkjGUG+EKr20b7XvrJM BFv9/vHwdkYFi5gxv4GUDaXPZa70HfmmEhqMj9itW2agT0dgqk3XcJqW1lRtWHi4YplpzPWbya3 oOGq2RL8= X-Gm-Gg: ASbGncthP+6XTUkYGx6evkOJmnj4/WaY0wBf3Q4jKp8kjIRr2SLELYwPRWNlHHyIDpF oqxAb7DSY4vKtXUzRbgPzlUukN+aHijWlmkl9SG7P1XfK7P+sPFD4Hl4fcL/+4tRzNi4PYEAgXH ng/J/kqM/mcEPT8yHpB5SYyRPFDTIFaUBlRBUGJRgeQjWJNRWptrRlX6s3JZhawsGeAbwRWp+hq yOzqJLGozrn6Qr1xJIqtvxHGL5sBOdtOhMZyLG4p12Xv+RB2tTPdXC6HmUAWC8SDdcssl+YEt/t u6ITVrTZOIEMs2MvNnpoEewaLemgle3dDOjpg6z0/9nawNGmS/6itFrk X-Google-Smtp-Source: AGHT+IG7MR2n2/ZV47wed8EHudQp/eHNqsEPoyeopp5kfyyt51ODYXw9zBR32o0zpPwfzzedV7Kqkw== X-Received: by 2002:adf:9d8d:0:b0:3a4:d8f2:d9d with SMTP id ffacd0b85a97d-3a8fe4bd07amr10821479f8f.38.1751285532118; Mon, 30 Jun 2025 05:12:12 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:19e3:6e9c:f7cd:ff6a]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a88c800eaasm10470472f8f.37.2025.06.30.05.12.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Jun 2025 05:12:10 -0700 (PDT) From: Bartosz Golaszewski Date: Mon, 30 Jun 2025 14:12:03 +0200 Subject: [PATCH v2 2/4] firmware: qcom: scm: take struct device as argument in SHM bridge enable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250630-qcom-scm-race-v2-2-fa3851c98611@linaro.org> References: <20250630-qcom-scm-race-v2-0-fa3851c98611@linaro.org> In-Reply-To: <20250630-qcom-scm-race-v2-0-fa3851c98611@linaro.org> To: Bjorn Andersson , Konrad Dybcio , Johan Hovold Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4245; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=XXO55uSWhNpf83sskv4v7e1dRT/tHH7zQM4YO9aBRyM=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoYn8Yas7h5Y154bniUvL2mA/ylmUcLasDDzDpQ oFqWilJ7vKJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaGJ/GAAKCRARpy6gFHHX cpdtEADcyCkASgTOpv3DbOP6wBQOIuKsDpqi8bWp8NoxBUgl+iRWK+OTsJ165//wOqR26YjSlVb Dhx91kE6+Mx5Jw+lQ7hmBIwnRjlnY6W5thI2RJgxQ5/0dn8woygQ95uCpbFK8F2UbpMnfdbRI+i 4+mELRPZoJfPalL07H+Wq15OVRzlsZzZpO/niCaPLE9plZAacj7hGyRRD2qoravzZWFefZDgl/K XrbQqqXeqJCNQXvM6HqGnpEYZ9J5RwRThcSpvbTTKblTwfA/JWt1u0YT5fgC74HQ96QZwjGLWIz 3Y6RWkxhAZJiZXDFQn/2316exOhDwcbCjDHnp9tAtPn1o0ooZP1zghdyxXSygYab57QqeKraTnv B814oS3+eW977IVJU7/dTm70swU/qVXzDyqgfibCGs7Y+oidoA9AXhz++HOQQLAs04qxEEY27ts JZvIXqq677pdOfZqFvvn+qXgCz1wT/04f5EOzWsGQbsfmhPcuppYf1TTC/XGrYkaZuczt9eDJV0 lnRdj9SuEzh8OLBAW7gn54Xn1eH+WrBQk1sWT00xbnQdxz75rVQ79WE/4ZDzlBWTvpHoOnG6A/h Whj+l/U94+1Gak5hEf+oTgTmH4bhtepAbC9l616n8kChuNDYSRyT9w9FrDT+B+qyr12Dtm06eZz WlbAt0RxXJiX0jQ== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski qcom_scm_shm_bridge_enable() is used early in the SCM initialization routine. It makes an SCM call and so expects the internal __scm pointer in the SCM driver to be assigned. For this reason the tzmem memory pool is allocated *after* this pointer is assigned. However, this can lead to a crash if another consumer of the SCM API makes a call using the memory pool between the assignment of the __scm pointer and the initialization of the tzmem memory pool. As qcom_scm_shm_bridge_enable() is a special case, not meant to be called by ordinary users, pull it into the local SCM header. Make it take struct device as argument. This is the device that will be used to make the SCM call as opposed to the global __scm pointer. This will allow us to move the tzmem initialization *before* the __scm assignment in the core SCM driver. Signed-off-by: Bartosz Golaszewski Reviewed-by: Konrad Dybcio --- drivers/firmware/qcom/qcom_scm.c | 12 +++++++++--- drivers/firmware/qcom/qcom_scm.h | 1 + drivers/firmware/qcom/qcom_tzmem.c | 3 ++- include/linux/firmware/qcom/qcom_scm.h | 1 - 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_= scm.c index d830511a0082a6a52e544a4b247b2863d8b06dbd..09b698b9021644660468d59bef4= 96cd7859aec7f 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -1603,7 +1603,13 @@ bool qcom_scm_lmh_dcvsh_available(void) } EXPORT_SYMBOL_GPL(qcom_scm_lmh_dcvsh_available); =20 -int qcom_scm_shm_bridge_enable(void) +/* + * This is only supposed to be called once by the TZMem module. It takes t= he + * SCM struct device as argument and uses it to pass the call as at the ti= me + * the SHM Bridge is enabled, the SCM is not yet fully set up and doesn't + * accept global user calls. Don't try to use the __scm pointer here. + */ +int qcom_scm_shm_bridge_enable(struct device *scm_dev) { int ret; =20 @@ -1615,11 +1621,11 @@ int qcom_scm_shm_bridge_enable(void) =20 struct qcom_scm_res res; =20 - if (!__qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_MP, + if (!__qcom_scm_is_call_available(scm_dev, QCOM_SCM_SVC_MP, QCOM_SCM_MP_SHM_BRIDGE_ENABLE)) return -EOPNOTSUPP; =20 - ret =3D qcom_scm_call(__scm->dev, &desc, &res); + ret =3D qcom_scm_call(scm_dev, &desc, &res); =20 if (ret) return ret; diff --git a/drivers/firmware/qcom/qcom_scm.h b/drivers/firmware/qcom/qcom_= scm.h index 3133d826f5fae8d135a8f03758173903a87e718b..0e8dd838099e1176b6d6bf76a20= 4c875698eb1f7 100644 --- a/drivers/firmware/qcom/qcom_scm.h +++ b/drivers/firmware/qcom/qcom_scm.h @@ -83,6 +83,7 @@ int scm_legacy_call(struct device *dev, const struct qcom= _scm_desc *desc, struct qcom_scm_res *res); =20 struct qcom_tzmem_pool *qcom_scm_get_tzmem_pool(void); +int qcom_scm_shm_bridge_enable(struct device *scm_dev); =20 #define QCOM_SCM_SVC_BOOT 0x01 #define QCOM_SCM_BOOT_SET_ADDR 0x01 diff --git a/drivers/firmware/qcom/qcom_tzmem.c b/drivers/firmware/qcom/qco= m_tzmem.c index 4fe333fd2f075a4e92ac6462d854848255665e18..ea0a35355657064b1c08a6ebed7= cfb483a60dd3f 100644 --- a/drivers/firmware/qcom/qcom_tzmem.c +++ b/drivers/firmware/qcom/qcom_tzmem.c @@ -20,6 +20,7 @@ #include #include =20 +#include "qcom_scm.h" #include "qcom_tzmem.h" =20 struct qcom_tzmem_area { @@ -94,7 +95,7 @@ static int qcom_tzmem_init(void) goto notsupp; } =20 - ret =3D qcom_scm_shm_bridge_enable(); + ret =3D qcom_scm_shm_bridge_enable(qcom_tzmem_dev); if (ret =3D=3D -EOPNOTSUPP) goto notsupp; =20 diff --git a/include/linux/firmware/qcom/qcom_scm.h b/include/linux/firmwar= e/qcom/qcom_scm.h index 82b1b8c50ca3e5f97665e6975e8d7e8e4299e65d..0f667bf1d4d9d8c3e63d69159e3= cdec2fb40396b 100644 --- a/include/linux/firmware/qcom/qcom_scm.h +++ b/include/linux/firmware/qcom/qcom_scm.h @@ -148,7 +148,6 @@ bool qcom_scm_lmh_dcvsh_available(void); =20 int qcom_scm_gpu_init_regs(u32 gpu_req); =20 -int qcom_scm_shm_bridge_enable(void); int qcom_scm_shm_bridge_create(u64 pfn_and_ns_perm_flags, u64 ipfn_and_s_perm_flags, u64 size_and_flags, u64 ns_vmids, u64 *handle); --=20 2.48.1 From nobody Wed Oct 8 09:26:31 2025 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 73053289E2D for ; Mon, 30 Jun 2025 12:12:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751285537; cv=none; b=FK9A2B5zz3cZiHoc/pyuvIWHVsTWwhrurLS5+Y1qsyDoxWpjw5tbMBSQig/BVSMV/gmbaHt0FjZqjBJDv5WPleT2m4mV4jfbASAaSmVnwPo3fO+fX0JtETpdG21oVDpOFYbmdJMg0oxGzKX7vW2SZOcKUw4scFjScSCm3hgOuQg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751285537; c=relaxed/simple; bh=bFpJof7nuUmGYqkm2KsPCZQjhSQXEXEiHNCnFh89z+E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qiEEtRdcBFeZfKdV5VI7upADLfZ16VyTjTcYTRcM+Sp/HELh8MGqtwA2TWiA3UFu5n8obgsDkwdBnz8D+3pwxwCHz/Mdgyamx+Qpsuw48HYVogdeZIJ0QDqjNIw/y3gDDMs7lSXjGjivHyH4MJXDeCQGsuyN64rBYOiRYo1r6dY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=UDH4OMkd; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="UDH4OMkd" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-3a525eee2e3so2789690f8f.2 for ; Mon, 30 Jun 2025 05:12:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1751285534; x=1751890334; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=TH1fp4P+aeVvVYSCJGFpR12/g8gtwgbu556T9z0YPnk=; b=UDH4OMkd0QRpX99cNucYd5sLpTvoCwTF5IcJlBV8iT6c+moM/t/zCQAXAHFgQG0uDX kM5gIoJugyDlLbrfqfBBA1RcLlbUec8cyw+e8wVQiLh2Z/zIQJ1fIhKa6N+efFfywlu3 x271sJVZyoqVK7a/fLFULURTaHu1R5ord5CUjBsJeHcv66kUJDKsRO11ufg4yhTBkaJL Ntjidtt4khPvu7hpT14zaKrJ9xxrGRbDzkt7A4XTiGDfs0TYfL/8BtK0VlkFjdzgrvcx lMIN2Nej6wh9XegWP0UIL/bqjZAhEHi/KVagz/pX/+8ilzNi5Q4GkBLJtfxDPBZf8M/8 rXYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751285534; x=1751890334; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TH1fp4P+aeVvVYSCJGFpR12/g8gtwgbu556T9z0YPnk=; b=g+Xk4wbMN0zwnCcRRRBGa3agOhT53jfShJ8gQo8Owh5aqXe44vv+iAQ9wxWLPDxGij ul4vOWvkD1Nla4V71mRQiw+dY8jSAF+Sukz7KZlrXsSMtzV4lcHAeWk080k9Ilfk8X5Z 2Vg3Ue6u81GjXKpk/w6AOrb1WflGDfqvb4SRyd3d6j3rCXTMhSmOqIPJlx6JmEPR4yME cGzzwhw7YyD5anhVum7G9oKreOZv3MOgNPbpFh+BXHGAuLXrBURBxidectwyGNtX/QZ5 ttvjZvCD+dF8wT/EfGZjFt9yzRSuOD8tZoR826GBdHuaMFe1525LoWeRCBB4zq6xuJpk SwkQ== X-Forwarded-Encrypted: i=1; AJvYcCVf60YS1JK/UrJBmjo7rWJraKGuWLB5zUjFuQrmus/7qUqkoPxXFZMT+eb9/k0c8Dl5u8qZcG2+xTEVQIU=@vger.kernel.org X-Gm-Message-State: AOJu0YyNq4shs39JWBfXZ2F/K9KfYYszGupEic+ITDiforpawoHYxBQc s04NSOfKuNaZyeOtbFh15TB0zyxOoPlud2PrOceDe7KwRKiIbW6tvQ666lcbYgkVEmo= X-Gm-Gg: ASbGnct+nRNTqXu2JyLzxL1OVVssCvAiAuVZui91QV9GtPle5njxlFFgYM0ka8WTJJZ 8rvPAAP6VwuDenpqafSKr23b8cFx82nhLc9VY05/NcKYK0XvcS3GibVJdkDTTKCKAELuafZr5dg VuPLvLQ+rjnP27+qlsdR+FsEaUYxJJ2eu+gfXwp7d8nZIxYHaIh76LWLEycc//8ZCpKwIqzFwBI tGh12Kx+6QPefGZWgNWsBx0jyZvDqEzy4XGwxrTuGxJekmUWIo7GQAQdZWGkhWg16oTb957HC2m z5DXVqsMRgUTu55hlHoAwhZM6McFT/dfrVQMDxqP2JoSQx4plIL0SnAd X-Google-Smtp-Source: AGHT+IGTwXlLXs8MR/SSzHxMFqh4fK+JAUeg49T/YeD3Bz9Ie5DajX3NmkIxmF9d/AC5OC7FQmM9cQ== X-Received: by 2002:a05:6000:4105:b0:3a4:e665:ca5 with SMTP id ffacd0b85a97d-3a8fe89162dmr8715759f8f.23.1751285533481; Mon, 30 Jun 2025 05:12:13 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:19e3:6e9c:f7cd:ff6a]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a88c800eaasm10470472f8f.37.2025.06.30.05.12.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Jun 2025 05:12:12 -0700 (PDT) From: Bartosz Golaszewski Date: Mon, 30 Jun 2025 14:12:04 +0200 Subject: [PATCH v2 3/4] firmware: qcom: scm: initialize tzmem before marking SCM as available Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250630-qcom-scm-race-v2-3-fa3851c98611@linaro.org> References: <20250630-qcom-scm-race-v2-0-fa3851c98611@linaro.org> In-Reply-To: <20250630-qcom-scm-race-v2-0-fa3851c98611@linaro.org> To: Bjorn Andersson , Konrad Dybcio , Johan Hovold Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski , Johan Hovold X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3258; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=VMbPEeKpx4YSDu/1h5tBKKJJggttpFWBH/DjHj7Up2s=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoYn8YdJX5oXippXdR1epJBhhVwCAQTEfcY+5WB zeWxonA/LKJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaGJ/GAAKCRARpy6gFHHX cgKhD/9qR0lxgs5cdnWfBc4yGo89ZUQdp/vZhVeSVNaKqX77RkqZ+JeGd0F9UDX5LxivCsrju7K UyiFSliWG1bsFETP71JbJROZFRWC3rM4FSe96Vj+G81s4n7Aek2t/VFv0WnsO2nSur5+Yh/Dr+u GBbcIUY1xuH8jF65+IJlGqeRCqFHaFb6/GQHUEeq93q7F309uDn6DdOKWuXtVUZdjs4bwHakGy3 oL+SGtQDzsoed5luTNxuoDmGc+14fMh8txbQy9iivIecel+nPpL9HpuVezID5GwRrXgUSVqIV7Y lIfhC30rb2MvxNbihloC1M559XorGPgMeZbE4O+3+6k6VlnX2+4pqRwaDwbRT5xhT1WgXx/4ped N4NOxeCx76Sqnw1hCWGcGh3U0rdnROGgrZthLuoanclKIGu2JwRtksyMHAuzfxlo/sG7lHZaQFc oI3MmwvCdU2Yn2yht/aCzasKo6w7eZlOtqc/CxSb2EeY9c1oOm2bHttjGCrfyFaUGTT6FmcZ2nb WhNSpvXAERIlE4oEzuWUsLBeCSVQ/vV0x3YG9v6+iYK6TwHFzC1vScyF294dKRZAhechyf9nIQM eAPNXL8i6Tzbm+GOZyPGU6rbQkLRm4w4i9s5bm6udOEhUSgX82djJwKlVtiGf07CeVvT6woC2OY KcA8uzZGcQz7KAw== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski Now that qcom_scm_shm_bridge_enable() uses the struct device passed to it as argument to make the QCOM_SCM_MP_SHM_BRIDGE_ENABLE SCM call, we can move the TZMem initialization before the assignment of the __scm pointer in the SCM driver (which marks SCM as ready to users) thus fixing the potential race between consumer calls and the memory pool initialization. Reported-by: Johan Hovold Closes: https://lore.kernel.org/all/20250120151000.13870-1-johan+linaro@ker= nel.org/ Signed-off-by: Bartosz Golaszewski --- drivers/firmware/qcom/qcom_scm.c | 53 ++++++++++++++++++++----------------= ---- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_= scm.c index 09b698b9021644660468d59bef496cd7859aec7f..b6e0420bb2b72247e4d772b6631= 4d81f336f5d9d 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -2256,7 +2256,32 @@ static int qcom_scm_probe(struct platform_device *pd= ev) if (ret) return ret; =20 - /* Paired with smp_load_acquire() in qcom_scm_is_available(). */ + ret =3D of_reserved_mem_device_init(scm->dev); + if (ret && ret !=3D -ENODEV) + return dev_err_probe(scm->dev, ret, + "Failed to setup the reserved memory region for TZ mem\n"); + + ret =3D qcom_tzmem_enable(scm->dev); + if (ret) + return dev_err_probe(scm->dev, ret, + "Failed to enable the TrustZone memory allocator\n"); + + memset(&pool_config, 0, sizeof(pool_config)); + pool_config.initial_size =3D 0; + pool_config.policy =3D QCOM_TZMEM_POLICY_ON_DEMAND; + pool_config.max_size =3D SZ_256K; + + scm->mempool =3D devm_qcom_tzmem_pool_new(scm->dev, &pool_config); + if (IS_ERR(scm->mempool)) + return dev_err_probe(scm->dev, PTR_ERR(scm->mempool), + "Failed to create the SCM memory pool\n"); + + /* + * Paired with smp_load_acquire() in qcom_scm_is_available(). + * + * This marks the SCM API as ready to accept user calls and can only + * be called after the TrustZone memory pool is initialized. + */ smp_store_release(&__scm, scm); =20 irq =3D platform_get_irq_optional(pdev, 0); @@ -2289,32 +2314,6 @@ static int qcom_scm_probe(struct platform_device *pd= ev) if (of_property_read_bool(pdev->dev.of_node, "qcom,sdi-enabled") || !down= load_mode) qcom_scm_disable_sdi(); =20 - ret =3D of_reserved_mem_device_init(__scm->dev); - if (ret && ret !=3D -ENODEV) { - dev_err_probe(__scm->dev, ret, - "Failed to setup the reserved memory region for TZ mem\n"); - goto err; - } - - ret =3D qcom_tzmem_enable(__scm->dev); - if (ret) { - dev_err_probe(__scm->dev, ret, - "Failed to enable the TrustZone memory allocator\n"); - goto err; - } - - memset(&pool_config, 0, sizeof(pool_config)); - pool_config.initial_size =3D 0; - pool_config.policy =3D QCOM_TZMEM_POLICY_ON_DEMAND; - pool_config.max_size =3D SZ_256K; - - __scm->mempool =3D devm_qcom_tzmem_pool_new(__scm->dev, &pool_config); - if (IS_ERR(__scm->mempool)) { - ret =3D dev_err_probe(__scm->dev, PTR_ERR(__scm->mempool), - "Failed to create the SCM memory pool\n"); - goto err; - } - /* * Initialize the QSEECOM interface. * --=20 2.48.1 From nobody Wed Oct 8 09:26:31 2025 Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B167328A1DD for ; Mon, 30 Jun 2025 12:12:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751285538; cv=none; b=PgCEhmw8qnRsApYZxhzVdZT8Kq5rMzGCYXiuaP51dXpEpff05xSPDsFxgtOEpE8P4PsctwLpfH4xuNukPlai33dKq57TQ0bvAuWpOipL0rgnd5p/ChWLt+yHH3e+ZPfmtok9lCCOD/9a3Jw1Y/XoaDIMJkyAM8Aqb+vjIcRt8rE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751285538; c=relaxed/simple; bh=BKfqqka86bDL0dJyNuOG9LjYml165Lxh5NhMO1RrfhA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sDDHiz01QEnIE/cJNlSMaquVhwanQApmfrvfaIkjXIBkIh1g3TRtTuw545rME4h2ZKHXRupomFX+udKaTn5ZlNXIrj0Nn4Qyhv76zZVn5GlGDXe9/9V0hI28A8WYxf6/4XTJrQa+wcOg0zIoavQykp0zGFlNCFCdtOtx8hCcnxY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=u2NpsNCI; arc=none smtp.client-ip=209.85.221.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="u2NpsNCI" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-3a6e8b1fa37so1787885f8f.2 for ; Mon, 30 Jun 2025 05:12:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1751285535; x=1751890335; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=+QlXPJik67OJ+ji5i52hXuqCUQwHGO8iJergE6aP1vs=; b=u2NpsNCIPQa0/7jy5FSxDDbRejKyurQgt0oiypcar3yNiWL5F96Xr6Ak+6kgFecw29 UIn47MGrLRF9UdsZfLkqUmfcE5XR01pXPbRmQaCMzCoveSTtBWZTA02tUmAWSgHXqyiM c913l+sfSDlp3P9StUV1yrpJEvR69SFJrgWl28a6Cnt3mpiOnEIbBRUN9roqgnPOI2Gk HGDtgAw99jMXR+GJfA79VlsItADByiaVf5Zin6vSry/jiSipIGwF5N8Ei1nDedL8fRu/ EmqjRBT40jaYgHroMeWm4H5nFeuI9Qwhh4KwJ+pkpVTzqYwdHpQHD5tfi4WwqmLWB4Ee Gfrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751285535; x=1751890335; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+QlXPJik67OJ+ji5i52hXuqCUQwHGO8iJergE6aP1vs=; b=K0AwIBJNGV8cpgJ8YI2VC6iRMiPYgl5VHeDIx5ANjthwnmm+IbMX92J4baiwYo2T81 xdsZfD8TiUdogYNJ6Al0JUkpn5NLXJ+BNs817l/7WHdxIV3jtfL71rH5eNend9sRMnsZ G8cfTGZXFwU6q6PDceBJdHjCkDhNpAhKW2iEjLdVdU98szFpDzAtRdyimFHF6t+lPLY/ auj9Qzf2IdG2NbBJM4V1gibse1slnECup7Ssa/+OxHotkTPSddZAQuVxtWv1LMnUA5I2 TSuvfbGxMjVUso4K9Fe4Kqa84wlTR3EPg2+/vi5YB0TeFJ4YA5pQT8jFFNptiBt6VEf8 9XDw== X-Forwarded-Encrypted: i=1; AJvYcCV9YlHR3lG8LdwVEjo2nkcbdg9d5XELLYoI8VeDKxMAvT7eD+gKJCv9bfWAGKPPFCVAKgDEJqtZdaxziRY=@vger.kernel.org X-Gm-Message-State: AOJu0YwQOcKHq9dJ7t/9UnSFxlmZgWObymnmX/dCxccGRfLNbfPqz01c EBa3p2maqedXggPKukc+jpCN+bbfORgj0n7L0Qbfr3OLSV7xDCL28ZtC1UnA406ljog= X-Gm-Gg: ASbGnctR66jmFOJe0KcVyucEBO1soLzG0LGbIh/hb8lpvvfxJlxhHZdFGKd+rZJy4Km iI8DWAQ0rzZhRlCELnQJSiUkh3DjZYJkZmjigF1nvvyDFK20317mO3/xmoAst6sjQSzyQKQzKon JkZT3eQSw4lhdLbxEPDig6ZZoCVemB3zyixI0zOUvrbiOTO841KDFP84zJIM7gwq1l7Xmg9y7Bw SsVP2bu+0A8w9cWlsn3AgDxSEnaroNMIjQNF6HMJHRTC8aFt+kfas5N0WiHEIzbVvSnxArvP8wZ m1LIwtx4POt3ytN1xkmvHfRDM3kYmftiWN/2kcyTzMn6idxJrU3/6+mV X-Google-Smtp-Source: AGHT+IFQXwxIM2HUr1IQmwXbE2oEZjblR7pgcFR+7RdIC1AVXJ7VrKdoozRAzizI1O0LoBUAsA/j2A== X-Received: by 2002:a5d:584b:0:b0:3a5:3e64:1ac4 with SMTP id ffacd0b85a97d-3a8fee64d08mr12789954f8f.33.1751285534948; Mon, 30 Jun 2025 05:12:14 -0700 (PDT) Received: from [127.0.1.1] ([2a01:cb1d:dc:7e00:19e3:6e9c:f7cd:ff6a]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a88c800eaasm10470472f8f.37.2025.06.30.05.12.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Jun 2025 05:12:13 -0700 (PDT) From: Bartosz Golaszewski Date: Mon, 30 Jun 2025 14:12:05 +0200 Subject: [PATCH v2 4/4] firmware: qcom: scm: request the waitqueue irq *after* initializing SCM Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250630-qcom-scm-race-v2-4-fa3851c98611@linaro.org> References: <20250630-qcom-scm-race-v2-0-fa3851c98611@linaro.org> In-Reply-To: <20250630-qcom-scm-race-v2-0-fa3851c98611@linaro.org> To: Bjorn Andersson , Konrad Dybcio , Johan Hovold Cc: linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski , Konrad Dybcio X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2669; i=bartosz.golaszewski@linaro.org; h=from:subject:message-id; bh=PcAqvM6FBpCoLkNCxS4qTB03W5O8x/84hACrv61h9wk=; b=owEBbQKS/ZANAwAKARGnLqAUcddyAcsmYgBoYn8Yx15pNqlt0atuJpYpP50OvajemYIKa09s+ ekM0xLA3tyJAjMEAAEKAB0WIQQWnetsC8PEYBPSx58Rpy6gFHHXcgUCaGJ/GAAKCRARpy6gFHHX ch39D/9oDWM+eSjmgaVqiQPFLysRWcTpuyu6+mfAoyuIOI4xMyTNBOVzEH3DBCI1mFYnFA3b+W1 mzSkILp7RIA/JbCx5b4xhxyxrdELnMDBojM9UWwGlmtcs2o+mV7TskNvGGs+Kyy/0nzHwBxdDzo LLhjEQ065UtVT84EyQvnfc3U1rH+r2dvWUCrH36TC9wn4yRykeF4+A0UNBYtK0n3N97dIJxJ4dH 7aq2N+C+9CB9F9een5g5Ue7bhb5R65xMCT4v0xpkFPK01Wmmsr6AMoDPZ47yTO15u5vcSIHD8eI IZs4Q8fAwg3/dKPNAWS7BchTT0KejeRVRtViyBkoqnBwAh+b5DsRYoNkepK8I1FFSs+i6WRkJBs XyNbOncDGTYGqqQJNFOmNZjkCGeNetxEywG7N2SjSZkmdAKkoA/cQY/h/ko1fN3eljMGnd7/1vP rXTiJ6Mh017fjIICDjhQNr4Rb8NTfzodV04ji8/FCSq8t1rWNJxEKB4CEhFf8nC6dV8gyOZcWrw CzlPuZWljCl7vM/Onps19IJugJS7Zmb48M2zo9E7A/MrNWxw/oCYFkgWxnNcYvJCpck5p3+nLX9 MeibYJ9/VLCOVwQHJwOqZfc0Jdepsc5ya6YsUm522BCdQB5jGbDjTXXNVX83FRNfaeX6690pQxl CBsWjW6CY+GT0VQ== X-Developer-Key: i=bartosz.golaszewski@linaro.org; a=openpgp; fpr=169DEB6C0BC3C46013D2C79F11A72EA01471D772 From: Bartosz Golaszewski There's a subtle race in the SCM driver: we assign the __scm pointer before requesting the waitqueue interrupt. Assigning __scm marks the SCM API as ready to accept calls. It's possible that a user makes a call right after we set __scm and the firmware raises an interrupt before the driver's ready to service it. Move the __scm assignment after we request the interrupt. This has the added benefit of allowing us to drop the goto label. Reviewed-by: Konrad Dybcio Signed-off-by: Bartosz Golaszewski --- drivers/firmware/qcom/qcom_scm.c | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_= scm.c index b6e0420bb2b72247e4d772b66314d81f336f5d9d..26cd0458aacd67dcd36f065675e= 969cea97eb465 100644 --- a/drivers/firmware/qcom/qcom_scm.c +++ b/drivers/firmware/qcom/qcom_scm.c @@ -2276,29 +2276,27 @@ static int qcom_scm_probe(struct platform_device *p= dev) return dev_err_probe(scm->dev, PTR_ERR(scm->mempool), "Failed to create the SCM memory pool\n"); =20 + irq =3D platform_get_irq_optional(pdev, 0); + if (irq < 0) { + if (irq !=3D -ENXIO) + return irq; + } else { + ret =3D devm_request_threaded_irq(scm->dev, irq, NULL, qcom_scm_irq_hand= ler, + IRQF_ONESHOT, "qcom-scm", scm); + if (ret < 0) + return dev_err_probe(scm->dev, ret, + "Failed to request qcom-scm irq\n"); + } + /* * Paired with smp_load_acquire() in qcom_scm_is_available(). * * This marks the SCM API as ready to accept user calls and can only - * be called after the TrustZone memory pool is initialized. + * be called after the TrustZone memory pool is initialized and the + * waitqueue interrupt requested. */ smp_store_release(&__scm, scm); =20 - irq =3D platform_get_irq_optional(pdev, 0); - if (irq < 0) { - if (irq !=3D -ENXIO) { - ret =3D irq; - goto err; - } - } else { - ret =3D devm_request_threaded_irq(__scm->dev, irq, NULL, qcom_scm_irq_ha= ndler, - IRQF_ONESHOT, "qcom-scm", __scm); - if (ret < 0) { - dev_err_probe(scm->dev, ret, "Failed to request qcom-scm irq\n"); - goto err; - } - } - __get_convention(); =20 /* @@ -2328,12 +2326,6 @@ static int qcom_scm_probe(struct platform_device *pd= ev) WARN(ret < 0, "failed to initialize qseecom: %d\n", ret); =20 return 0; - -err: - /* Paired with smp_load_acquire() in qcom_scm_is_available(). */ - smp_store_release(&__scm, NULL); - - return ret; } =20 static void qcom_scm_shutdown(struct platform_device *pdev) --=20 2.48.1