From nobody Thu Apr 9 10:36:20 2026 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 64B273E5EFE for ; Tue, 10 Mar 2026 07:22:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773127367; cv=none; b=Lw4hgDB9ick5Bbj8b5aKMZx7el2mUGxJnVEQiVDFXKGv0zdwF3BQKiA9tCN03B5cBBUVV+BpsHydVOeNtYtRur4v02fKx15okKwqA6FW1Gy19RZr1Bsc/aXYVt7nvGe1/0KC6+NqP7E1FmRUpmgFVOGF+8/AmkZ7pQqi8iu/CM0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773127367; c=relaxed/simple; bh=zLHdxvYlh3SgJM3zwdFzuQdChe4Q/8MyqXYe5cHG93o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PMwOSKBx7SaXs/++6eRgpFjP/E5nbtvXA0YvAlAV+L5n/E0IB3QT2snn6NOTi0t7Z1c59bHO0ZvI3y2B+7V6xpC4dLHUoSOLG1QSlU6Ymj1P3fgL+FIkBSa7vpo2PBHL63idCkvva/XLGWxwWZ7Os2egBEGo/PNT/dy6UYDTTIE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=oYn2oJD7; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=W+7/hFm/; arc=none smtp.client-ip=205.220.168.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="oYn2oJD7"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="W+7/hFm/" Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62A2EBii246496 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-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ct8801a08-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-f197.google.com with SMTP id d9443c01a7336-2ae669a8ff1so362522155ad.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=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=iiXrCv65t5Cfe7JS9CAoM+yCgarvykPh0XYvrPKdD3o=; b=W+7/hFm/EQpv4+9Lh2/gcXUnTmOLqXQbspH9qCXSM7ZrNfyxaNL45DhE9fm1sCfcT8 pZGp3kLJ7eeyInBsnXn+GLPXDe9rp1du4x4Q7LRHKJRhF/2R56x+xn9ZYqQxwJ+kx3bc xGW/sLbG1dqpIwxcCwt7KmOn9iSkSMMWJ8SlvGehyF/OOPBZvmurmp1d4E+XCk4cogpM jbm8fwin9GLT4/oJc7rQDWhlnIGwI0lOQJwRGnyOTGaGdrYBDQ8VBp47EoZVKEqsG1LV aXAgfI7yKgpkgA+vafFgg3eJTlaB5yiYChoqW5/zrqh09MexNl6KXTnkFwbXssZnfK16 Y7Og== 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=uvM6N/utf1ySOtzCT8EF+RaPdlpWpLKOVpj0mB1OJ5bUprkv4cIZiL338dk4OVXs0y BS2OYoHQAHI3vrZ+/K5h1PLh1DaKk1WzTcyYD23co3+UeeZDkVnHgQmbiuttAGhEoO23 6ptgqryyERcL4jVuGV2W1iQx1p+oolfTSWsqCKv6OTDIM5iOZRsFkB5KlgGqVgAGVxsC 3jbUGWz7+4RGrqBeNmTmN7y/ElfWCSxXga9eiAneiZLsMXMxyuDLcTv3kOuvCAeYwWWI rQZUjbXWRHv4PXDYeqX3728MUudRzqJDsd9/yw8/M/oY8hBOwf40Avvpdlpa7unG3Z75 znYA== X-Forwarded-Encrypted: i=1; AJvYcCVWkp+DeXZ+JOJMsISRqra7JiyVcYEX3M9e0XOaWgwLhTXspyHFf/e2Ss14Wpk/x4j+WBniD5BrfyQ7Ris=@vger.kernel.org X-Gm-Message-State: AOJu0YwHk+1cQrgwF7GEqD+gCp+OjbQLf7vUfx6wgdDDoABGw2G3ZCUh 4QqW255SQW/3tX7995eaH2xt3/7zduAubTw+MbFSkjnJD5kZmHYrRanX3g2cJ8PQPVyQdotjJdV V2KNxBTdx2nB9s1xNMhWw4JjYmBbD4MtmaPrrAel2v2fY+9pmop8mgvjGR8Qdfc++w6E= X-Gm-Gg: ATEYQzxq69CMk91XFntcgRWQlaP2hywSVKz9ET+WpN3Tdl5BYRheID9XVXYmlkPVIQm lUQLPBFngMME5be4Wwq7GkdFBCtuLEv5S8wy2eW9yW838uzW6jBal0VNdhKJ1aL+xjAA8SxSIsg CJEvivaSXnxjKzk/aLYN3Su945DABWNcMVyyh2ttcW2Ca99o2Wt4yJAm0lBsUfq0oxNYOaSVGpM UcwHU4ds8GPMGY4248wv3gPg13oOFYVkGsZ785bID8zUuBwvnY51daEAVEaSnr+P+v9QWNKUAHD 9fosoqcNFcX9x1HcY5+jVhQut1H2vvmi2FAGpZlHQ0NvNNJX7k9RWwI96LtH6GyoU7mKPWf9aNm vobyqpj+4x0kIiXYNjIHWeyu6I20K2ZRnyIwUpCxPJXKcIY3C0LU= X-Received: by 2002:a17:903:2ac4:b0:2ae:673b:6a3 with SMTP id d9443c01a7336-2ae8249d4fcmr140850935ad.49.1773127365113; 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 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: <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-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzEwMDA2MSBTYWx0ZWRfX1ZMrDRFJKuH+ RTo1d516FDh0NtG9VWN1ueKveCQx265SaWkMdiUrvleDXPSVyby72oIFj0XmqA68ZTKL89NeUEi 3h7RnGlntUCrlQGC2qUxem0SsJEZTPxcZuLwTZIJ2nzdgk2u9yoxTqjJN12qvX98DdtQ470TsqU FnF65SxbFhkXCMAqw95k3YLUKXN4r9wP1iKphAMzbgXidoqU1J+y/3KIVuBZUWxMkyzw3pE30gU DTxiNZaboIQVnA4oa6qiazXoSMm6cV6j6jkCcLCrywgAh2DjT+CX6E+anjHF6e6M/d7k/g1DkdN moDN91ixNeUwt4MmTR5q1dgVbeOvqOD7I9D291H6ZflcfrcNaVLnr8E53DmL+MiAnrfadQiCViG It4/AcFtbP5HgyU1/OugHefCEe5bYcwqwaXFlJxADuj1gztxk454iUJR1ZzfAQJvi7VqLJdGUl0 8SmyZk+lJBqV+DJ5BRw== X-Proofpoint-GUID: HUrjb5JrNvPctzh7K2XZxuCxu2o4TmaT X-Authority-Analysis: v=2.4 cv=Jtf8bc4C c=1 sm=1 tr=0 ts=69afc6c5 cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=EUspDBNiAAAA:8 a=9mPLix8uEUeM4unapbcA:9 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 X-Proofpoint-ORIG-GUID: HUrjb5JrNvPctzh7K2XZxuCxu2o4TmaT 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 adultscore=0 malwarescore=0 priorityscore=1501 phishscore=0 impostorscore=0 bulkscore=0 clxscore=1015 spamscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2602130000 definitions=main-2603100061 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/sahar= a.c index c88f1220199ac4373d3552167870c19a0d5f23b9..b7208738df10fc3c3895acd4687= 3412818dc1730 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; } =20 +static ssize_t ddr_training_data_read(struct file *filp, struct kobject *k= obj, + const struct bin_attribute *attr, char *buf, + loff_t offset, size_t count) +{ + struct device *dev =3D kobj_to_dev(kobj); + struct sahara_ctrl_trng_data *ct; + size_t available; + + ct =3D sahara_ctrl_trng_get(dev); + if (!ct) + return -ENODEV; + + mutex_lock(&ct->lock); + + /* No data yet or offset past end */ + if (!ct->data || offset >=3D ct->size) { + mutex_unlock(&ct->lock); + return 0; + } + + available =3D ct->size - offset; + count =3D 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 =3D { + .attr =3D { + .name =3D "ddr_training_data", + .mode =3D 0444, + }, + .read =3D 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 =3D &mhi_dev->mhi_cntrl->mhi_dev->dev; + void *cookie; + int ret; + + if (devres_find(dev, sahara_sysfs_devres_release, NULL, NULL)) + return; + + ret =3D 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 =3D 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_de= v, const struct mhi_device_ return ret; } =20 + sahara_sysfs_create(mhi_dev); + return 0; } =20 --=20 2.34.1