From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A3452FCC9D4 for ; Tue, 10 Mar 2026 07:22:48 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 154B410E65B; Tue, 10 Mar 2026 07:22:48 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="oYn2oJD7"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="fO3nekPP"; dkim-atps=neutral Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by gabe.freedesktop.org (Postfix) with ESMTPS id AC0DE10E65B for ; Tue, 10 Mar 2026 07:22:46 +0000 (UTC) Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62A2EhaM3087380 for ; Tue, 10 Mar 2026 07:22:46 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= iiXrCv65t5Cfe7JS9CAoM+yCgarvykPh0XYvrPKdD3o=; b=oYn2oJD7ZYS6xKDv L4wJAW3KR170Qvd8MThH0/2fBJzXL3055SL3k7YpFmDUnHdsOxVtI4l2o8XLU3SE 4kO7QO6FhO3XrKNJBfNmVkprnYwOuOoyeRbVfVAXlLf9TIYrxjGFHn/JS7w8Db+h ogugjfX5CIH9HsQytnjPa/xHoZkmUn4WnJFaFCT6H0cRKcXvYTa4aKRsA8NVAqKb 7cpvBcPnBOQXifSV8Bnyej6olfF4ztc4vT+wszB39fTvwDyhgwV89LA3AR5XVAWg qtw36XPeAG82UftvrPS/YmU9GZrL36LlWzXYCjLmWy1UmPBhiMAPHvTxjL/c4hEF paaFMA== Received: from mail-pl1-f199.google.com (mail-pl1-f199.google.com [209.85.214.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4csxy8398u-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 10 Mar 2026 07:22:45 +0000 (GMT) Received: by mail-pl1-f199.google.com with SMTP id d9443c01a7336-2ae669a8ff1so362522195ad.3 for ; Tue, 10 Mar 2026 00:22:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1773127365; x=1773732165; darn=lists.freedesktop.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=iiXrCv65t5Cfe7JS9CAoM+yCgarvykPh0XYvrPKdD3o=; b=fO3nekPPkgJ3UgIZcH3hhgsdUnUZwerJkz8dB/4fEM7pFHZKibgpmJDV2OCNjup1RW zj6UkBo6zQqprJuQEJnwwwe4uPdLbDSO08XrgweYzFic7gaH+wqt8rRsdjohG1ED2WYp heUz3GUcuUj9gfDsMDp1D8hq0Sq35I59zMq3+a8+2wgPpYrqgEGMQ9JmtFU/UH1EL5B0 B+d1e1a8YXW5PbarVjo939iFHTXgpKqmeYnIZxv/bZgjGLpihQ8wXPcje5H143JKNBec 7THwV9enkaW7dFD2rIGTOOXgZmxAcnmJy7mqyhSj7IutME46nCn3zgAASmGz0ydsjUI7 uNXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773127365; x=1773732165; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=iiXrCv65t5Cfe7JS9CAoM+yCgarvykPh0XYvrPKdD3o=; b=iGhdi3r4HkvcAdK6b/jj7ewPT4n2WlFpzSTSkqWo0Z0uG05W+1flJQpmFsxcV7X7Mv 1lQTUBXMKTQIfjOVGW/7h1jucoRbfAJnxp6hv6848YrsTl4LDmcMd583AK7dTm1h631q wsUHBhdzD1d+aXHO03kLpfW6KWK3Hab+BiJ1alahfr7iXHxS1rL6Vchs+ZXzEXCzoqDt uyTSTfoFY0Ix7Xsa/RgXAFzYZYVqSJkvcuM7v0FD42gpe5+NjUegFRsAZiwEf1o4gnU4 tqWrxY26lLFcssBJbUmYQhTamLYMHpdK6E+69yMJi6a7/sjdokRFkgj0/+4mX8g4ak0+ cEVA== X-Forwarded-Encrypted: i=1; AJvYcCW+KCLIYSXMnedFGPcOBMc+B981BUtZeZFGBAkaSy1peMNU32aiBoKLSEeUnHLtJvmcGjCQG6WJ3Xw=@lists.freedesktop.org X-Gm-Message-State: AOJu0Yx9Y8zCwRfGnGkQL5H2cjaQcVINwIr+RI4oZFY8ex9jl4c3d2jU T4N/icQk3GKhwAowkf/UjuXPyiCzSPCJ4Ua6QBCk8tk75H8GFx4nlzn/I9qgGkPsQHM5nYc448N RK+i7jO65BVcTJq5Y4dwopp+lLzQbZ4vbEYyumR6ZUINRLC0y2uzx0nC4gMscSWvEIecfWS8= X-Gm-Gg: ATEYQzzxN3A3+XIiFIfrVlR1YHJNRA0uox5w5Q7R2Ux9vP+ZbKi23qWWj3lJvp9INba sT7QFxFRGJ1Ko+5GIo8YOzca05AAqZe0vImTKu8qoD4OjV6+XbzYUpJvr0j6be4/4rdfLT7c7YT 3dSInhXXc8KA9AE2HHz22kNaFbPykOpYzSdqfM4M+sap5rmTFilQRiTzWr+a93zkOvfVpB22gP6 MBDDPLuRI3igJ34FCXekTdNaG4RzpFZuOjloLW5tcDMhFP+pYaOp3wD6329MyWcl1VZHKpV5yTO V8QOuY+PE1OLPh1tE9R4qLnhQL5UOJz/Fq7lPm2gs/vEqF5rv7n/0fOuhLUDLE4jkIG3ESpaTNZ Jbjc9u77OTz54986WJOgZeUITat+a24y8akBtok+Tnu50fqU9ysY= X-Received: by 2002:a17:903:2ac4:b0:2ae:673b:6a3 with SMTP id d9443c01a7336-2ae8249d4fcmr140850945ad.49.1773127365129; Tue, 10 Mar 2026 00:22:45 -0700 (PDT) X-Received: by 2002:a17:903:2ac4:b0:2ae:673b:6a3 with SMTP id d9443c01a7336-2ae8249d4fcmr140850645ad.49.1773127364647; Tue, 10 Mar 2026 00:22:44 -0700 (PDT) Received: from hu-batta-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2ae840b2e9dsm185200325ad.85.2026.03.10.00.22.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Mar 2026 00:22:44 -0700 (PDT) From: Kishore Batta Date: Tue, 10 Mar 2026 12:52:05 +0530 Subject: [PATCH v3 8/9] bus: mhi: Expose DDR training data via controller sysfs MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260310-sahara_protocol_new_v2-v3-8-994ea4b0d5ad@oss.qualcomm.com> References: <20260310-sahara_protocol_new_v2-v3-0-994ea4b0d5ad@oss.qualcomm.com> In-Reply-To: <20260310-sahara_protocol_new_v2-v3-0-994ea4b0d5ad@oss.qualcomm.com> To: Jonathan Corbet , Shuah Khan , Jeff Hugo , Carl Vanderlip , Oded Gabbay , Manivannan Sadhasivam Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, mhi@lists.linux.dev, Kishore Batta X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1773127328; l=3311; i=kishore.batta@oss.qualcomm.com; s=20260206; h=from:subject:message-id; bh=zLHdxvYlh3SgJM3zwdFzuQdChe4Q/8MyqXYe5cHG93o=; b=pes+jy19Oahyjrj9tGIH89vFrAWYY4NOq1AgxQcEUjKQTpqGWSIU3tWU0VFnNvOBkuhrGWxoq VU6vI4W5RVXAVK+t9BMlRNCZDOBecfyTaszyNRJ9WUpQiU+8fxa1BuN X-Developer-Key: i=kishore.batta@oss.qualcomm.com; a=ed25519; pk=vJo8RvTf+HZpRLK2oOIljmbn9l3zFkibCGh+blaqZCw= X-Authority-Analysis: v=2.4 cv=SvmdKfO0 c=1 sm=1 tr=0 ts=69afc6c5 cx=c_pps a=JL+w9abYAAE89/QcEU+0QA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=9mPLix8uEUeM4unapbcA:9 a=QEXdDO2ut3YA:10 a=324X-CrmTo6CU4MGRt3R:22 X-Proofpoint-GUID: ERH0yuo5YkgwPLoc8Z6u5UcMthdkSXxf X-Proofpoint-ORIG-GUID: ERH0yuo5YkgwPLoc8Z6u5UcMthdkSXxf X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEwMDA2MSBTYWx0ZWRfX131hLk6bnxuE ZJD9ZJM57YMYNDRVszKi295Agt/iSmqEys5zO50dzmlwz/DW9miN1XMkdBzWdUP3LkS75uuKH2J aCEdmbJo+jWXdTNrNqvxnXREpFo2qYmN4Si6nbBBIMo6lFmyxwNzBa7WjvnT88ZaMSVUyR4bOGe bmWY+jPTs5RUuKuYrCclDii61sGw4SmdKj5PvnEZdQscar8WNxmZjRGF9DcEGPQ3gjqF0wtDJKK 4M7T254+A03d/dk9O1RTG01f4aLyNgcGXj9Qt+A2ikn7BIR16t4+5ovdOkU3CHYf0N1E+SWYLVu inVcFBFp+NJsNJvWiRtR/s7YmlMW5I3yT3sNYgEFI4IeUBThdZqavg8wg+N/I/v3+MfufaOATxo TlLbPJisZr8B/wUCrkSc4cGRrJKShuf5jyU3yJPoAV1TQfoGN6Z6oWyXZEziBLskNYWLgMqgoA2 mqudrWl85TRItwJeb4Q== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-03-10_01,2026-03-09_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 impostorscore=0 spamscore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 adultscore=0 bulkscore=0 phishscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603100061 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" DDR training data captured during Sahara command mode needs to be accessible to userspace so it can be persisted and reused on subsequent boots. Currently, the training data is stored internally in the driver but has no external visibility once the sahara channel is torn down. Expose the captured DDR training data via a read-only binary sysfs attribute on the MHI controller device. The sysfs file is created under the controller node, allowing userspace to read the training data even after the sahara channel device has been removed. The sysfs attribute reads directly from controller-scoped storage and relies on device managed resources for cleanup when the controller device is destroyed. No explicit sysfs removal is required, avoiding lifetime dependencies on the Sahara channel device. Signed-off-by: Kishore Batta --- drivers/bus/mhi/sahara/sahara.c | 69 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/drivers/bus/mhi/sahara/sahara.c b/drivers/bus/mhi/sahara/sahara.c index c88f1220199ac4373d3552167870c19a0d5f23b9..b7208738df10fc3c3895acd46873412818dc1730 100644 --- a/drivers/bus/mhi/sahara/sahara.c +++ b/drivers/bus/mhi/sahara/sahara.c @@ -415,6 +415,73 @@ static struct sahara_ctrl_trng_data *sahara_ctrl_trng_get(struct device *dev) return ct; } +static ssize_t ddr_training_data_read(struct file *filp, struct kobject *kobj, + const struct bin_attribute *attr, char *buf, + loff_t offset, size_t count) +{ + struct device *dev = kobj_to_dev(kobj); + struct sahara_ctrl_trng_data *ct; + size_t available; + + ct = sahara_ctrl_trng_get(dev); + if (!ct) + return -ENODEV; + + mutex_lock(&ct->lock); + + /* No data yet or offset past end */ + if (!ct->data || offset >= ct->size) { + mutex_unlock(&ct->lock); + return 0; + } + + available = ct->size - offset; + count = min(count, available); + memcpy(buf, (u8 *)ct->data + offset, count); + + mutex_unlock(&ct->lock); + + return count; +} + +static const struct bin_attribute ddr_training_data_attr = { + .attr = { + .name = "ddr_training_data", + .mode = 0444, + }, + .read = ddr_training_data_read, +}; + +static void sahara_sysfs_devres_release(struct device *dev, void *res) +{ + device_remove_bin_file(dev, &ddr_training_data_attr); +} + +static void sahara_sysfs_create(struct mhi_device *mhi_dev) +{ + struct device *dev = &mhi_dev->mhi_cntrl->mhi_dev->dev; + void *cookie; + int ret; + + if (devres_find(dev, sahara_sysfs_devres_release, NULL, NULL)) + return; + + ret = device_create_bin_file(dev, &ddr_training_data_attr); + if (ret) { + dev_warn(&mhi_dev->dev, + "Failed to create DDR training sysfs node (%d)\n", ret); + return; + } + + cookie = devres_alloc(sahara_sysfs_devres_release, 1, GFP_KERNEL); + if (!cookie) { + device_remove_bin_file(dev, &ddr_training_data_attr); + return; + } + + devres_add(dev, cookie); +} + static int sahara_find_image(struct sahara_context *context, u32 image_id) { char *fw_path; @@ -1272,6 +1339,8 @@ static int sahara_mhi_probe(struct mhi_device *mhi_dev, const struct mhi_device_ return ret; } + sahara_sysfs_create(mhi_dev); + return 0; } -- 2.34.1