From mboxrd@z Thu Jan 1 00:00:00 1970 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 923F215C14F for ; Thu, 9 Apr 2026 21:23:16 +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=1775769797; cv=none; b=HRUOkF4xXKcLUuIzYUzEERQ355xNi0OCrRD59U4yr9hyZMMA34wr0FzmHau9k0vo45KWYb3dBOTPXl7giF2VvvBm0e+95EQfMZM5NUeVYvB/fYjO1+xzDsrkb9cVl9SRU2E79/JYcvphyDy4JPDR8RB6vjCN8oxofpIryuESTG8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775769797; c=relaxed/simple; bh=LPc3QBu+kJtrwBij2bSyr2bn3fppSoov+nAOiScxvNo=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=nqgzzGJ7tODmfAsPjAiiijQ2+fIAPeQAazxb0GWj8RAyGY215APA8Gygahlu7oaiZA5NIqO0aeSxNFq/cKApM8x2puK6gMSWH7S7AMvYME5iWKCNbhOO61Cz8j0TivBIbkOddNYNmoY9YirUYpgBQgh9iRann+wrj0GwzjozeH4= 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=YtPv8XsW; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ZdklVGlX; 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="YtPv8XsW"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ZdklVGlX" 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 639DdKUu2812071 for ; Thu, 9 Apr 2026 21:23:15 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= WSBXIIWfdwTwS8iiRQJHGI9PtTjv4IHRrGHbuBKd26c=; b=YtPv8XsWvAXUmXXL MzZUJC1E2rUDkiHda/ejZd/xqhij9t4SVRA/RZFldHUmjuRbcADFOZU3EYVSM3Ea YNpEso/Vx5MS8dZs9BvnmJFFS2Hbdb+tYhOdfsoep0HemYTzrS+R95Q4mX4o0O1W UxAVzZQFnELbMJK+VH6dBdqr9KgAb+2fl1E9IbJdSRniDBcskieWxwu6k9SorjeX gH1ZSyNCl+BCruBku+xwCTf+KrlSzKArZSzl5C/uK0bzXTeiU91J+Eea4M+3IeLy D31iKLibqQU6oyIQR+k3489iyfeeD8hJ+7U/uDLbwFZsRpFE3WmDOHQhusikn1/l doN+ng== Received: from mail-dl1-f70.google.com (mail-dl1-f70.google.com [74.125.82.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4ded6h9j8e-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 09 Apr 2026 21:23:15 +0000 (GMT) Received: by mail-dl1-f70.google.com with SMTP id a92af1059eb24-12c21dbc9c1so279237c88.0 for ; Thu, 09 Apr 2026 14:23:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1775769795; x=1776374595; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=WSBXIIWfdwTwS8iiRQJHGI9PtTjv4IHRrGHbuBKd26c=; b=ZdklVGlXFRS/CZdUepaU6Lq2rXMEXkHE94zGCmk8frGBtW8DW2TR7RaH3s0VcImuCe bxAEZm2pmSl1Qx4JbqKrSLCkB4GL/xD1oP2qGrPYrLrP7v5pYWjfufYhl3OYkd2wv2Yt 8D6AyICKl/yCJr8ffsML9Hisd+GXskh/ufJyRD0otm3hYreV6Ng/3xkXoRWASifvE/2p 8HJVSFKAxSHeoC30BVWHrz7bogbW56EutRBkM+k7iGK4tO6kxGZWuasTvIG6KJVV1dKc v5IDTcvIXGOxPjlYNiV84U4VbhC2IcWel+/WO9ARjuPc/GxMoe+n6rCA9f0edQa71ZCE 54tA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775769795; x=1776374595; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=WSBXIIWfdwTwS8iiRQJHGI9PtTjv4IHRrGHbuBKd26c=; b=rehVXOqkBK+8jAEgPZLanqvcqcpr1c+71ZQtFOvyZUULhVFLA2FQVQvm1+LJmC6qjd EFP6E3brNhDJyzXbxkDhtc3rSUlwEUpgpuoaENGuUhmYBg+BrvWdOWaARHoiX5pSuQhs CHGHx49hvprpb9sSDIHH93zatbGvheoMv4c9zNGpH2uCW/aEtjelG4hwKcvPxqWSx/yM Rv4GYsi2v27woONWMm9G36OGJ6otzRGh/Fy6pUg1gHXKnL0msGoi3mEPDpvIK7akcri2 0eSj9B3fhJfg9GGyvbumXr0CDq5FEuWR+0MRcHUBuKKsNw6P7O1btOdgh1DQ4UkWi5yJ aCJw== X-Forwarded-Encrypted: i=1; AJvYcCU9GTr77trWJs21dsxSX1+7f006HTJV4Hg1h+sxor/sOVOqJWZZNM+d0wFVUpn9xjiSati9uiK9JA3o7sg=@vger.kernel.org X-Gm-Message-State: AOJu0Yw3cA2teyotMgqaZLPZm6dmY4LSTAqOj6pbqyZ/8vIKbVIi1HJK AL7a7rPV9eNrN+3AL52kd0BqVjovZVQAMNCJFuebYx9NjhRSUf6XsSZoPTBu82qAVSuNh4tPzvW QNUrbowy6fvhyGZ2O5eMVHw0b3QoW1/pWHWUcuZMLXgokeZ2irP7d236CtIHbxQXFr/2U50EYGC I= X-Gm-Gg: AeBDievSVLM5MkNbBCPnqhdK/Q5RXHtgS4AF4X0JMenY/UmSejxwjeFNsoC35E7ZjS4 n4+l+idNfghd5FdX3k18uv/IZJnnS7d5eESgGFpPAGJrA8IcN/NnlmP0Aucey6+NDGkNRhbuQ3p dFNknT7qNvXkv5Lcn5XD1EvF+oPNPozT0x6bRlXSTnPNF1By7x+CtAjvvfdi08BtsRxr0KPv3uQ E+cE7tCuVZTRSGsI5HVy8AbPGYbaH8nzBb9Mnobc79UPPfCX5jzlSfqrHRsg6xjo1KlB2MegALj 83TeRlIT6VWqljX37scgQwKuwjGO0B6mVyG2BUnpcp/kgCtmLHUDSuHAAP1vl6XB9s8hfEbXGeK nkMOVg2l3OgF2gth7lvKNQv9DJNRoPBitaI8hsX/Gg6Z3B4iZoLWIAmLkkyTNKQkdOf2VpBiYfv s= X-Received: by 2002:a05:7022:60aa:b0:123:34e8:aec2 with SMTP id a92af1059eb24-12c34e4531dmr485668c88.1.1775769794952; Thu, 09 Apr 2026 14:23:14 -0700 (PDT) X-Received: by 2002:a05:7022:60aa:b0:123:34e8:aec2 with SMTP id a92af1059eb24-12c34e4531dmr485631c88.1.1775769794383; Thu, 09 Apr 2026 14:23:14 -0700 (PDT) Received: from [10.226.59.182] (i-global254.qualcomm.com. [199.106.103.254]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-12c346fb26dsm907975c88.14.2026.04.09.14.23.13 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 09 Apr 2026 14:23:14 -0700 (PDT) Message-ID: <2865b4a9-9044-4593-b32d-39b581298edd@oss.qualcomm.com> Date: Thu, 9 Apr 2026 15:23:12 -0600 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 6/9] bus: mhi: Load DDR training data using per-device serial number To: Kishore Batta , Jonathan Corbet , Shuah Khan , Carl Vanderlip , Oded Gabbay , Manivannan Sadhasivam , andersson@kernel.org 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 References: <20260319-sahara_protocol_new_v2-v4-0-47ad79308762@oss.qualcomm.com> <20260319-sahara_protocol_new_v2-v4-6-47ad79308762@oss.qualcomm.com> Content-Language: en-US From: Jeff Hugo In-Reply-To: <20260319-sahara_protocol_new_v2-v4-6-47ad79308762@oss.qualcomm.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Authority-Analysis: v=2.4 cv=RfCgzVtv c=1 sm=1 tr=0 ts=69d818c3 cx=c_pps a=SvEPeNj+VMjHSW//kvnxuw==:117 a=JYp8KDb2vCoCEuGobkYCKw==:17 a=IkcTkHD0fZMA:10 a=A5OVakUREuEA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=Um2Pa8k9VHT-vaBCBUpS:22 a=EUspDBNiAAAA:8 a=4fJIAEbhtct7chBbnB8A:9 a=QEXdDO2ut3YA:10 a=Kq8ClHjjuc5pcCNDwlU0:22 X-Proofpoint-GUID: 6bJ2dxz9oQ0xddfGHE9FLkhLvk1FEuX_ X-Proofpoint-ORIG-GUID: 6bJ2dxz9oQ0xddfGHE9FLkhLvk1FEuX_ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNDA5MDE5NyBTYWx0ZWRfX0VS6K4NwQpOO QsOqC9e27AiL/uVyaxmRl1T0GdbQZUUU8ahxfVabz9KPdFTO31MlGHpgJycLyFV7H1sPlXXz+zG VOgRsJrps8zT6u9ATh+xqcRuwgFqsgup1AU78wF+TMXERfXC2exAwVzfs1JFXb4o0jmOjCsfeBj 0oiGWTFZVRQcdH1cIAA4V6TrBoMTiLYZTSoimSA29BHsL0JMHP8ajSjXr1C5GuAFRya48kEkXZQ FYwO8VxPX974G3uG5CtgXlY1Rx4qGElWMz9BEYJxaM6wPMfsQvR0jgTo2mJauLN1TBxnXmQEFFP XElBQcIAi0RgYjuAEefZM6M9B0fveJLZBM/JnMqvPpZUDgwATTJX+mDxWwE+vJzXb+zJqAUG8xz T1VCPZbVopge5i/M9hylXcwzuKKX64c3vj5q+N0veu5x+umtE6epvic98KkwSPOTmgUoI8mdUGS tdD/0vVbhQ2zy+tNFsQ== 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-04-09_04,2026-04-09_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 clxscore=1015 impostorscore=0 adultscore=0 priorityscore=1501 lowpriorityscore=0 spamscore=0 suspectscore=0 malwarescore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2604010000 definitions=main-2604090197 On 3/19/2026 12:31 AM, Kishore Batta wrote: > Devices may provide device-specific DDR training data that can be reused > across boot to avoid retraining and reduce boot time. The Sahara driver > currently always falls back to the default DDR training image, even when > per-device training data is available. > > Extend the firmware loading logic to first attempt loading a per-device > DDR training image using the device serial number. If the serial-specific > image is not present, fallback to the existing default image, preserving > current behavior. > > This change enables DDR training data reuse when available while keeping > the existing training flow unchanged for devices without saved data. > > Signed-off-by: Kishore Batta > --- > drivers/bus/mhi/sahara/sahara.c | 47 ++++++++++++++++++++++++++++++++--------- > 1 file changed, 37 insertions(+), 10 deletions(-) > > diff --git a/drivers/bus/mhi/sahara/sahara.c b/drivers/bus/mhi/sahara/sahara.c > index 4ea14c57774f51a778289d7409372a6ab21fea60..0a0f578aaa47ab2c4ca0765666b392fb9936ddd5 100644 > --- a/drivers/bus/mhi/sahara/sahara.c > +++ b/drivers/bus/mhi/sahara/sahara.c > @@ -61,6 +61,8 @@ > #define SAHARA_MEM_DEBUG64_LENGTH 0x18 > #define SAHARA_MEM_READ64_LENGTH 0x18 > > +#define SAHARA_DDR_TRAINING_IMG_ID 34 > + > struct sahara_packet { > __le32 cmd; > __le32 length; > @@ -365,16 +367,41 @@ static int sahara_find_image(struct sahara_context *context, u32 image_id) > return 0; > } > > - /* > - * This image might be optional. The device may continue without it. > - * Only the device knows. Suppress error messages that could suggest an > - * a problem when we were actually able to continue. > - */ > - ret = sahara_request_fw(context, context->image_table[image_id]); > - if (ret) { > - dev_dbg(&context->mhi_dev->dev, "request for image id %d / file %s failed %d\n", > - image_id, context->image_table[image_id], ret); > - return ret; > + /* DDR training special case: Try per-serial number file first */ > + if (image_id == SAHARA_DDR_TRAINING_IMG_ID && context->fw_folder) { > + u32 serial_num = context->mhi_dev->mhi_cntrl->serial_number; > + > + fw_path = kasprintf(GFP_KERNEL, > + "qcom/%s/mdmddr_0x%x.mbn", > + context->fw_folder, serial_num); > + if (!fw_path) > + return -ENOMEM; > + > + ret = sahara_request_fw(context, fw_path); > + kfree(fw_path); > + > + if (ret) { > + ret = sahara_request_fw(context, context->image_table[image_id]); > + if (ret) { > + dev_dbg(&context->mhi_dev->dev, > + "request for image id %d / file %s failed %d\n", > + image_id, context->image_table[image_id], ret); > + } > + return ret; > + } This is entirely redundant with the else in the next line. I don't understand why id 34 could be reserved for training data, but also be a valid image if the training data was not found. Just have the if that looks for the training data, and an if that if there is no found image, do a normal lookup. > + } else { > + /* > + * This image might be optional. The device may continue without it. > + * Only the device knows. Suppress error messages that could suggest an > + * a problem when we were actually able to continue. > + */ > + ret = sahara_request_fw(context, context->image_table[image_id]); > + if (ret) { > + dev_dbg(&context->mhi_dev->dev, > + "request for image id %d / file %s failed %d\n", > + image_id, context->image_table[image_id], ret); > + return ret; > + } > } > > context->active_image_id = image_id; >