From nobody Sun Apr 5 16:48:06 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 59DDC3DDDCE for ; Mon, 23 Mar 2026 20:12: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=1774296769; cv=none; b=IBop3HFR4YZkwz1oY1bPaQoeDUObWFrkZHLQk4LXRbEkkaJm404AMvKgt2J3SWvNKbHdlcIaBH7YSF3yp9VPrkICuJ/rFAzykaGRVTjv8hmDIZawMT6VZh7XDdupycT5EYLS8WpLkTGropYQPBqP74m5+eqLVXl6pOvcGc3/eyk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296769; c=relaxed/simple; bh=fyL0L8FEEG4BJOzg7sRyFwEc/V7XoLzUNjMTow7BabM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EPmumICb6KRdVF7YSIiSvmFrsM/N56O83PkRXjL9HTHCXX4gL451wsbW9Wrjjok7CoDXEmBbGo0ko31wtqtXj65HM7ml7ioSPrYKF2N8rLDy8dSZxcjmPP5hBxq9bzjQXoBHGbup2huaOm2z6FJ4dWqJROc+hoXwirKp4oNii1c= 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=CsFE33tL; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=IUrG0w5n; 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="CsFE33tL"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="IUrG0w5n" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NHr97P2833932 for ; Mon, 23 Mar 2026 20:12:45 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= WO2JyAUszUgTDdy1Htc6BOSwNDnhDSWgUZjYgndONWg=; b=CsFE33tLiaqHd1HK DB8KZMgGNpRNmMSKXDYtO3ffDHtmGt2oC/61hAW5BF1+4CcFT1W052bt/rYPY4Sb 4fesmgyuJwLUbyKIfZgA1QdEGu8m2WjJyh67yH16fWZaoEyxSe+W54O5TOdjo1TR FUXTKaXcYjP6lpvQjyzzxdQOhDFCPQVV3qxT9G8SyBIQMCQgC3tLEiSM7iu+z2Cp jsKCc2b1WjuOt/HbkZ/bp1mVc66hQD8ULNYuUWWkBYJOa3JUaE7k1EMQKdvhadro X2itKnJA59LnPyKwkEQwbo4B6Bf4P6DtsL+luX74PurqbbHeGDHjyG+mHP1JNk21 r2srVg== 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 4d364jsgjk-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 20:12:45 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-2b06b68783dso17723295ad.3 for ; Mon, 23 Mar 2026 13:12:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774296765; x=1774901565; 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=WO2JyAUszUgTDdy1Htc6BOSwNDnhDSWgUZjYgndONWg=; b=IUrG0w5nrUtqSOSPKgoWO06+i1vSfIsPd8UwkxIakSITyHVSheF1akZFI/qtqUIRm2 OKliRYlo6t19Z9T8qOJ9YWm/V6/ySgwFvE/eWCpAt2YJFbBHMrGxbngnEb3XmHtKer8j NC8OMMuvkBRQsQy5EVfBaeXyCO2SA17gehAk9RJM/mE7e32Z9P+lGjIphxxgKp618Qie oy0Z/sng98FWdovjAZA7i3DXb0UH4OPkvQuVURfTNKYrbA2ZMQtFPdJUXhPmL5QrUlSs F8J/g/A49hRCbO2kLdxpNumLqkh0q7Kp9EXD263Ph0rBJ1Eqf4o+eJHKNWjqxWuVaHRW zUoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774296765; x=1774901565; 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=WO2JyAUszUgTDdy1Htc6BOSwNDnhDSWgUZjYgndONWg=; b=jBVpL3cGnKEjLPFqRWwtaqUzboRQOFooviFIleflgbTTMJeUcoGp7oaJMZJ52RXdC7 sMoTNrBLVuXEqsuNO2wIVoD1IXO/KNKhgjbyA7AHsS1W6XY8pjo2asB62GI7Mms28Ii1 uAsAsQX8I8aXUn9bW2Nf2btak3K4YSCd96VdbRYmNNXdNnzHOLWPJuf/B/gFSbgikMEr Xd/WKnTkVq4T8zWthU0QO8eMQOBdkmYAYFr1OsRgMMyDv3b/zR0oqr6v3gNr7JwT9ZIV MEPFE8sZReW4oIMKBp54Sgdq0o1c14wgSz4Sxgf5l5iwkDgkd1aFoETXENnpUZp45vKI BnjA== X-Forwarded-Encrypted: i=1; AJvYcCUNSNRaTNcSizsacjYU4RHRxjYtUQvVJcw8Vb0Sz3EW0Hgw5hfBN+C4QyZ74LeyRUL94LEr8ju9sr5G7IQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxWzo4AoIv2TImqiJQXX2dOIc4F3bf/+OIQV8jIitaqoFtSG2jN 2n+PZGp1ueJhZdtX5hbbypHBCHBdnCbm8XHSjpGAD284/vEL/3OdwGDJ/z0z0kcvvDkCFfJXoVC 71aSmErM30T7aHqijFYo7dpiO/WXNXxJsy0Q8onOvlW+2fsCCyKBnuKjwGMZWXX0AUDM= X-Gm-Gg: ATEYQzzsXLUqDKdLD48Lgu6IuIKWjC20if6ULglPyxLZpSMZr2h/KCAp8qVc7N9PA2/ 9iz30xBf3wW41sp9w6P5UFjOGR+xuHs0CZhOeupgePleMhuH6GnGQBN2pIAfSJcwd0TSmJnR2h6 ltzTuVK2z0jbY+cPB/BMgw3Ll2NfOlEXeuufAQO/qSwZnpa3DL866bjdivOFa1uLy+MjyHWT9oc gfuNKX5ZrYw9kwOmVp1Cp1lx2tzzxX5FPtVibmQMwzfhUCV//MjQEMp25LcDN8QOzK/YQXexEho oeAs0l5wjsm2055uPC1koUc9OceSp4Doc144IBdIMEnwaiUCWGE4epGpqqvNHGVXYRpjVfQrcFO NEsYXGUHwUe93HBQakMuYbDHDJRdZpgIKhfHSE97s/h1LQw== X-Received: by 2002:a05:6a20:2448:b0:39b:ff0b:8aee with SMTP id adf61e73a8af0-39bff0b9fa2mr5896606637.14.1774296764804; Mon, 23 Mar 2026 13:12:44 -0700 (PDT) X-Received: by 2002:a05:6a20:2448:b0:39b:ff0b:8aee with SMTP id adf61e73a8af0-39bff0b9fa2mr5896586637.14.1774296764273; Mon, 23 Mar 2026 13:12:44 -0700 (PDT) Received: from hu-akhilpo-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0409d148sm9510738b3a.29.2026.03.23.13.12.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 13:12:43 -0700 (PDT) From: Akhil P Oommen Date: Tue, 24 Mar 2026 01:42:13 +0530 Subject: [PATCH 01/16] drm/msm/a8xx: Fix the ticks used in submit traces 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: <20260324-a8xx-gpu-batch2-v1-1-fc95b8d9c017@oss.qualcomm.com> References: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> In-Reply-To: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> To: Rob Clark , Sean Paul , Konrad Dybcio , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Marijn Suijten , David Airlie , Simona Vetter , Antonino Maniscalco , Connor Abbott , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Akhil P Oommen X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774296753; l=9030; i=akhilpo@oss.qualcomm.com; s=20240726; h=from:subject:message-id; bh=fyL0L8FEEG4BJOzg7sRyFwEc/V7XoLzUNjMTow7BabM=; b=WoVnh+xAwdmgIsxoc5bnSMg4stSJg0DQtUvfoxU39imw6AQA1PFGFTB8+vm9WY4F7LpERgo3q 6hKl2kE7XquCW84IoeGDu5hLPM469V8P4RhAhaTdmy0lzsGpC6Vgrfh X-Developer-Key: i=akhilpo@oss.qualcomm.com; a=ed25519; pk=lmVtttSHmAUYFnJsQHX80IIRmYmXA4+CzpGcWOOsfKA= X-Proofpoint-GUID: f-SqFJcT_3YpD4PBrE5b40F_M5ZkLDSo X-Proofpoint-ORIG-GUID: f-SqFJcT_3YpD4PBrE5b40F_M5ZkLDSo X-Authority-Analysis: v=2.4 cv=JcaxbEKV c=1 sm=1 tr=0 ts=69c19ebd 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=eoimf2acIAo5FJnRuUoq:22 a=e5mUnYsNAAAA:8 a=EUspDBNiAAAA:8 a=KCeLXEH0ftFH6332X0AA:9 a=QEXdDO2ut3YA:10 a=1OuFwYUASf3TG4hYMiVC:22 a=Vxmtnl_E_bksehYqCbjh:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE0OSBTYWx0ZWRfX0GIuh2cJ4dbf QMM/Tx6xPJI3e0dNdK/diM6H8sBFtlFNY+9r61vb41BwwAXNP2sV+1PZIpfZGwOqm+Bpp4/mvGZ 0UPM0wCJVENCXbHG2H0DBVQBj2Nsn67gW+LjZ+elu5iTPT7bxlspZXnv7goWV2tK3tkfAoTm7m1 1OHzQ22O38Pd43nbYgeNzBmErnuCJQG0cBrL7UhnA9moj3fsiPEySvdGwmoKViFssr5N/os054M 6fiQaDWI4wUbN0tQojLw5iE9M4FHEt21nyp4DDb/yAtD+BQs/zm3f78JbGacDWsmIH3XRDPc5Wg zdNOaSxV1Io1JrnudmF7PClA3lOxkgS/VUzX26SfyncBbeE9hCqXOig9p0oPDSCyY0oTpMaDuQW oJT+1bNflzzajyGYRkFJlUAf1lH4RbKhHh57ghJTQ+7+nZ8k5cfd4IFL+KLiG9vQT0vTsrGtvUY zx86UHdc10zMYPAr+CA== 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-23_05,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 impostorscore=0 phishscore=0 spamscore=0 adultscore=0 lowpriorityscore=0 bulkscore=0 malwarescore=0 priorityscore=1501 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230149 GMU_ALWAYS_ON_COUNTER_* registers got moved in A8x, but currently, A6x register offsets are used in the submit traces instead of A8x offsets. To fix this, refactor a bit and use adreno_gpu->funcs->get_timestamp() everywhere. While we are at it, update a8xx_gmu_get_timestamp() to use the GMU AO counter. Fixes: 288a93200892 ("drm/msm/adreno: Introduce A8x GPU Support") Signed-off-by: Akhil P Oommen --- drivers/gpu/drm/msm/adreno/a4xx_gpu.c | 6 ++---- drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 6 ++---- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 15 ++++++------- drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 2 +- drivers/gpu/drm/msm/adreno/a8xx_gpu.c | 26 ++++++++++++-------= ---- drivers/gpu/drm/msm/adreno/adreno_gpu.c | 6 ++---- drivers/gpu/drm/msm/adreno/adreno_gpu.h | 2 +- drivers/gpu/drm/msm/registers/adreno/a6xx_gmu.xml | 6 ++++-- 8 files changed, 32 insertions(+), 37 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a4xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a4xx_gpu.c index db06c06067ae..0ed8bf2b5dd5 100644 --- a/drivers/gpu/drm/msm/adreno/a4xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a4xx_gpu.c @@ -604,11 +604,9 @@ static int a4xx_pm_suspend(struct msm_gpu *gpu) { return 0; } =20 -static int a4xx_get_timestamp(struct msm_gpu *gpu, uint64_t *value) +static u64 a4xx_get_timestamp(struct msm_gpu *gpu) { - *value =3D gpu_read64(gpu, REG_A4XX_RBBM_PERFCTR_CP_0_LO); - - return 0; + return gpu_read64(gpu, REG_A4XX_RBBM_PERFCTR_CP_0_LO); } =20 static u64 a4xx_gpu_busy(struct msm_gpu *gpu, unsigned long *out_sample_ra= te) diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a5xx_gpu.c index 56eaff2ee4e4..79a441e91fa1 100644 --- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c @@ -1435,11 +1435,9 @@ static int a5xx_pm_suspend(struct msm_gpu *gpu) return 0; } =20 -static int a5xx_get_timestamp(struct msm_gpu *gpu, uint64_t *value) +static u64 a5xx_get_timestamp(struct msm_gpu *gpu) { - *value =3D gpu_read64(gpu, REG_A5XX_RBBM_ALWAYSON_COUNTER_LO); - - return 0; + return gpu_read64(gpu, REG_A5XX_RBBM_ALWAYSON_COUNTER_LO); } =20 struct a5xx_crashdumper { diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.c index 2129d230a92b..14d5b5e266f7 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -404,7 +404,7 @@ static void a6xx_submit(struct msm_gpu *gpu, struct msm= _gem_submit *submit) OUT_RING(ring, upper_32_bits(rbmemptr(ring, fence))); OUT_RING(ring, submit->seqno); =20 - trace_msm_gpu_submit_flush(submit, read_gmu_ao_counter(a6xx_gpu)); + trace_msm_gpu_submit_flush(submit, adreno_gpu->funcs->get_timestamp(gpu)); =20 a6xx_flush(gpu, ring); } @@ -614,7 +614,7 @@ static void a7xx_submit(struct msm_gpu *gpu, struct msm= _gem_submit *submit) } =20 =20 - trace_msm_gpu_submit_flush(submit, read_gmu_ao_counter(a6xx_gpu)); + trace_msm_gpu_submit_flush(submit, adreno_gpu->funcs->get_timestamp(gpu)); =20 a6xx_flush(gpu, ring); =20 @@ -2414,20 +2414,17 @@ static int a6xx_pm_suspend(struct msm_gpu *gpu) return 0; } =20 -static int a6xx_gmu_get_timestamp(struct msm_gpu *gpu, uint64_t *value) +static u64 a6xx_gmu_get_timestamp(struct msm_gpu *gpu) { struct adreno_gpu *adreno_gpu =3D to_adreno_gpu(gpu); struct a6xx_gpu *a6xx_gpu =3D to_a6xx_gpu(adreno_gpu); =20 - *value =3D read_gmu_ao_counter(a6xx_gpu); - - return 0; + return read_gmu_ao_counter(a6xx_gpu); } =20 -static int a6xx_get_timestamp(struct msm_gpu *gpu, uint64_t *value) +static u64 a6xx_get_timestamp(struct msm_gpu *gpu) { - *value =3D gpu_read64(gpu, REG_A6XX_CP_ALWAYS_ON_COUNTER); - return 0; + return gpu_read64(gpu, REG_A6XX_CP_ALWAYS_ON_COUNTER); } =20 static struct msm_ringbuffer *a6xx_active_ring(struct msm_gpu *gpu) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.h index 4eaa04711246..a4434a6a56dd 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.h @@ -320,7 +320,7 @@ int a6xx_zap_shader_init(struct msm_gpu *gpu); void a8xx_bus_clear_pending_transactions(struct adreno_gpu *adreno_gpu, bo= ol gx_off); int a8xx_fault_handler(void *arg, unsigned long iova, int flags, void *dat= a); void a8xx_flush(struct msm_gpu *gpu, struct msm_ringbuffer *ring); -int a8xx_gmu_get_timestamp(struct msm_gpu *gpu, uint64_t *value); +u64 a8xx_gmu_get_timestamp(struct msm_gpu *gpu); u64 a8xx_gpu_busy(struct msm_gpu *gpu, unsigned long *out_sample_rate); int a8xx_gpu_feature_probe(struct msm_gpu *gpu); void a8xx_gpu_get_slice_info(struct msm_gpu *gpu); diff --git a/drivers/gpu/drm/msm/adreno/a8xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a8xx_gpu.c index b1887e0cf698..987c99097d40 100644 --- a/drivers/gpu/drm/msm/adreno/a8xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a8xx_gpu.c @@ -1174,23 +1174,25 @@ void a8xx_bus_clear_pending_transactions(struct adr= eno_gpu *adreno_gpu, bool gx_ gpu_write(gpu, REG_A6XX_GBIF_HALT, 0x0); } =20 -int a8xx_gmu_get_timestamp(struct msm_gpu *gpu, uint64_t *value) +static u64 read_gmu_ao_counter(struct a6xx_gpu *a6xx_gpu) { - struct adreno_gpu *adreno_gpu =3D to_adreno_gpu(gpu); - struct a6xx_gpu *a6xx_gpu =3D to_a6xx_gpu(adreno_gpu); - - mutex_lock(&a6xx_gpu->gmu.lock); - - /* Force the GPU power on so we can read this register */ - a6xx_gmu_set_oob(&a6xx_gpu->gmu, GMU_OOB_PERFCOUNTER_SET); + u64 count_hi, count_lo, temp; =20 - *value =3D gpu_read64(gpu, REG_A8XX_CP_ALWAYS_ON_COUNTER); + do { + count_hi =3D gmu_read(&a6xx_gpu->gmu, REG_A8XX_GMU_ALWAYS_ON_COUNTER_H); + count_lo =3D gmu_read(&a6xx_gpu->gmu, REG_A8XX_GMU_ALWAYS_ON_COUNTER_L); + temp =3D gmu_read(&a6xx_gpu->gmu, REG_A8XX_GMU_ALWAYS_ON_COUNTER_H); + } while (unlikely(count_hi !=3D temp)); =20 - a6xx_gmu_clear_oob(&a6xx_gpu->gmu, GMU_OOB_PERFCOUNTER_SET); + return (count_hi << 32) | count_lo; +} =20 - mutex_unlock(&a6xx_gpu->gmu.lock); +u64 a8xx_gmu_get_timestamp(struct msm_gpu *gpu) +{ + struct adreno_gpu *adreno_gpu =3D to_adreno_gpu(gpu); + struct a6xx_gpu *a6xx_gpu =3D to_a6xx_gpu(adreno_gpu); =20 - return 0; + return read_gmu_ao_counter(a6xx_gpu); } =20 u64 a8xx_gpu_busy(struct msm_gpu *gpu, unsigned long *out_sample_rate) diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/= adreno/adreno_gpu.c index d5fe6f6f0dec..1bc0e570bd12 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c @@ -391,13 +391,11 @@ int adreno_get_param(struct msm_gpu *gpu, struct msm_= context *ctx, return 0; case MSM_PARAM_TIMESTAMP: if (adreno_gpu->funcs->get_timestamp) { - int ret; - pm_runtime_get_sync(&gpu->pdev->dev); - ret =3D adreno_gpu->funcs->get_timestamp(gpu, value); + *value =3D (uint64_t) adreno_gpu->funcs->get_timestamp(gpu); pm_runtime_put_autosuspend(&gpu->pdev->dev); =20 - return ret; + return 0; } return -EINVAL; case MSM_PARAM_PRIORITIES: diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.h b/drivers/gpu/drm/msm/= adreno/adreno_gpu.h index 1d0145f8b3ec..c08725ed54c4 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.h +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.h @@ -79,7 +79,7 @@ struct adreno_gpu; struct adreno_gpu_funcs { struct msm_gpu_funcs base; struct msm_gpu *(*init)(struct drm_device *dev); - int (*get_timestamp)(struct msm_gpu *gpu, uint64_t *value); + u64 (*get_timestamp)(struct msm_gpu *gpu); void (*bus_halt)(struct adreno_gpu *adreno_gpu, bool gx_off); int (*mmu_fault_handler)(void *arg, unsigned long iova, int flags, void *= data); }; diff --git a/drivers/gpu/drm/msm/registers/adreno/a6xx_gmu.xml b/drivers/gp= u/drm/msm/registers/adreno/a6xx_gmu.xml index c4e00b1263cd..33404eb18fd0 100644 --- a/drivers/gpu/drm/msm/registers/adreno/a6xx_gmu.xml +++ b/drivers/gpu/drm/msm/registers/adreno/a6xx_gmu.xml @@ -141,8 +141,10 @@ xsi:schemaLocation=3D"https://gitlab.freedesktop.org/f= reedreno/ rules-fd.xsd"> - - + + + + --=20 2.51.0 From nobody Sun Apr 5 16:48:06 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 7F896364E95 for ; Mon, 23 Mar 2026 20:12:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296773; cv=none; b=BP4DJmS9B+Kz7PZ6zcaolilmeTJFbU+r5NYI7rU6gFl047IpMR1OxPaIGpcBdiZEnGDeqduFszqVE8SbVhajmOw+++0rj3Wxzd69JdchXlOupOvVxXCnF+69vOJo+TXxFrF8MsprlgqvwCn1SnJUcgQyuJigEk8897ICu/SvkUg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296773; c=relaxed/simple; bh=DJLzmbucRspXCItdG/LdYzMZhld/T9yZi2VyuKHhrhU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UNZ1XG76Uhl+opF8usvoRlpzgBEuwZRs371iaXQLzMCv6noqInCkaNbiWcciiZ/tjElPfOJAuScNSyVBMnuYZEYtEdEq3KB3aRiVfX6aORqCsZYQa+e+A/6h1u/vKtuwG8R1c8iZk/NxAIk0otlbyiYMxnRu+6/s+RWvuGoJoic= 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=iIsb29pf; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=OQALRXAT; arc=none smtp.client-ip=205.220.180.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="iIsb29pf"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="OQALRXAT" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NHqWMB943509 for ; Mon, 23 Mar 2026 20:12:51 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= ZUIEeydvmYEvJ4AasFR6sWOSfK2dLPW2bJak6RaNFAA=; b=iIsb29pfOLl8jjMx 1Bx7nY7TtB8c02p9LXjZXleyZS65YbwcWV/bkTiBoptVdI4KGIpsdyOfz2r59XTU e8t7pRzjbm2ZN5MyA/Kc4xtvtLzxt0ozB6xw3hCzHgV3kUc0t146NpKU4q72r1nZ umUa+oyyzd7j3AU+wbbM/mrKJ/BdmvM6Uh2ewcFGSl3Zp5pgNodZdzjHj63XNbKo hQ2C9KSdcKkuxqyGvQV2s7w2Ends0WTPqcXgIJUwjtTKi3iFTEg8XXvjnOgzOAWB Gemrvp2i9nydko7onRfz1Fq/shRNvw+L0Y3bBNrbsDYAQIZvecd316RJK/QsM4KK UH3w3A== Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d34vkss0c-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 20:12:51 +0000 (GMT) Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-82c1e1a6cfbso2517494b3a.0 for ; Mon, 23 Mar 2026 13:12:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774296771; x=1774901571; 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=ZUIEeydvmYEvJ4AasFR6sWOSfK2dLPW2bJak6RaNFAA=; b=OQALRXATla0fwayaMrSJnZniCTyyAfZbkmXLGGarVHNWxRr1HeZ/TsL01qLjzevEUe nbNzfXxwWF5jXPGNLNgNoO10nx/q0si4zmk3rdKVuCNoZ1+Mc8J+4pA+F7dWHmP4YFHm w+gyrElZPXvHM+VCZG1oJ2/fnx/lBbGpX8VRyUAEOnq66jBrGbI0Rrw5fbwshmbR5MGS 6S47iSSbr7AzwFuDqQaLmKQDhBxSBz4BAZzpVihqnjPPBh5ohWDD5OioM0sYasa3Kpaq HeuscKCWvTGVDD/sqvNIQ/aSeejkaNqrHGBcSFP8W/QheYgFOhVefjmLgz2h3tNhEsXn TkLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774296771; x=1774901571; 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=ZUIEeydvmYEvJ4AasFR6sWOSfK2dLPW2bJak6RaNFAA=; b=p8L4Y9/EV5UzGkNc54w5rBGOr07XvViD3DR77JPZ+a7JwoenXJdtwubBs7alE6Sk92 18Ho3dFo2K0uQx4dauL7B3m0oq1XKA4lWvl7ikl+kdmbjOQZTHcL+5d3KlxIXtCQMOod UkKb6MYANPteu3QBrtIhz+xNYzZcgMea1RVuh6vDTy+htVgvbd0x1vTo5l4QwL/8NygG QfmNspToQJojejFAUHNcpTmsv2diDiya/EB7+hDmexBvxd9HkW6IL9jtWARiI0W5lsHY Xs7OwnS6Y8Et69pRgRiEZ77M6IjTfhZTmZiROC6MqefNLYvVvWXMR2NEjxgSeaEhqiiM GRXw== X-Forwarded-Encrypted: i=1; AJvYcCV+k+fCoGujJ+jVcKHlcgkcWYCw7NLOBtc+mq5c6YnhXo9MaHMPgGqLY31kN0soanJx8KCVFLie4k1JMJo=@vger.kernel.org X-Gm-Message-State: AOJu0YzdI+09rNx1ZZckrVu7a1cbDBNFVlJORj1zi7+EOAaqUSGiQZz+ 4AtnKxH7inuZHzZ1/9ZCfr3xnZJUsfFlcigJePyuYqqF/HVWrPjrciabmM93/Vu+4FOvkPMDxjy gwBg6Sq19qZPIKX0awhxltBn5efHocqashoA2g+4eGucWLJsRlzs92ZUs+dhAYyK3LVE= X-Gm-Gg: ATEYQzy+h8RdMPZwwzUE4fctmUTFmrawqhpEUnDN93qEK6mrSKWmZcgmD+j2flCwBOD X3xaPTOfbAcVrBvhHa9AQw23V8ah0uVbCiu519Ow+Y6cuAs4MwEoD1mgoba5EqyOccZu4rOVIXW m1ag1kyWP5faAyvC9x027BMKJRTUX/xKttk/UoE+bePb9I1+TMDPlR2Np7czwC4m9KRWYTFRLMN gs+C3QkgZJ6j/ZDIRj1TsrxWS4XtnE730COCvSpCo7ZAMJt3z9z+Lx2Oc9zi8Fix9MTSaGZ7I6t AL2UBd8Szr0uSreGRdnQGL3Lst+sugaxd5L8I6WYd+PIIGF46rECp2Uy3EGO/iGV+41qA4nGyRO FXDr5zKegF+DTYFVOnDONieH5vLUk1d3KWaAc/wA63iN0fg== X-Received: by 2002:a05:6a00:21d5:b0:82a:17b8:1474 with SMTP id d2e1a72fcca58-82a8c233026mr10856573b3a.1.1774296770505; Mon, 23 Mar 2026 13:12:50 -0700 (PDT) X-Received: by 2002:a05:6a00:21d5:b0:82a:17b8:1474 with SMTP id d2e1a72fcca58-82a8c233026mr10856553b3a.1.1774296769990; Mon, 23 Mar 2026 13:12:49 -0700 (PDT) Received: from hu-akhilpo-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0409d148sm9510738b3a.29.2026.03.23.13.12.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 13:12:49 -0700 (PDT) From: Akhil P Oommen Date: Tue, 24 Mar 2026 01:42:14 +0530 Subject: [PATCH 02/16] drm/msm/a6xx: Switch to preemption safe AO counter 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: <20260324-a8xx-gpu-batch2-v1-2-fc95b8d9c017@oss.qualcomm.com> References: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> In-Reply-To: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> To: Rob Clark , Sean Paul , Konrad Dybcio , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Marijn Suijten , David Airlie , Simona Vetter , Antonino Maniscalco , Connor Abbott , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Akhil P Oommen X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774296753; l=2121; i=akhilpo@oss.qualcomm.com; s=20240726; h=from:subject:message-id; bh=DJLzmbucRspXCItdG/LdYzMZhld/T9yZi2VyuKHhrhU=; b=7eIpyiPVzz3/lA3tNdx6v3BjVJkz9FAwX5gIBKai2tJFGSn0FlxJ6dayYSPkVj/CSLne/fone t1xRhr84PPcDzDlp69R41ltZrzK+IhHNEbKr9lypHSHELE9CV0laPKm X-Developer-Key: i=akhilpo@oss.qualcomm.com; a=ed25519; pk=lmVtttSHmAUYFnJsQHX80IIRmYmXA4+CzpGcWOOsfKA= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE0OSBTYWx0ZWRfX9yTOLM/8jfBo vTx/147vWw0s/5W0zdEA6alCQNciYTxzg3OHdxRJwIwOCUmKAsIVo3AJ11mLqqPqJtQU3414DdK +Y7M32++U8y33i5jvBUQD8cJgZGnY+ANxXaz9A1iDUir+H8XvmuDoNss4loIDxYITSHaWcgU0Rx aNx9XENsLVbn9CzrsFFCtF7nJrGOe3ZDsGrDybgGhOw5fvmU1GfZm4lCi6LtwQnsUQ203hm8tOl U8Y7qqekII5cir+g6re0aY9ofmJR+H+RwgNeODqIYWuWYaMPrXb1qMCwvdiMcNakZNV84sRAX0U ILWpaDXCauu7Cn0OooJmu8k+Yh8bjSWd9Db6viWLkRwg74wpWrRIs5YF+tlkaNSrIu8tCoPpuU8 PXSIJAJznBTD1ZgC/BVGyDsf5zpcSkNN8mex4StbzMK8pKUwxZff6D5l5ajuDGH080gq+O4xzhr PdiA5JUYyU7lrcD5AAA== X-Authority-Analysis: v=2.4 cv=eMoeTXp1 c=1 sm=1 tr=0 ts=69c19ec3 cx=c_pps a=mDZGXZTwRPZaeRUbqKGCBw==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=EUspDBNiAAAA:8 a=5jko6oGmZP8uHvb63LkA:9 a=QEXdDO2ut3YA:10 a=zc0IvFSfCIW2DFIPzwfm:22 X-Proofpoint-GUID: enRVIG_M42xgOTfy625RQ_88hgTE9qOE X-Proofpoint-ORIG-GUID: enRVIG_M42xgOTfy625RQ_88hgTE9qOE 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-23_05,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 adultscore=0 lowpriorityscore=0 impostorscore=0 bulkscore=0 phishscore=0 spamscore=0 clxscore=1015 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230149 CP_ALWAYS_ON_COUNTER is not save-restored during preemption, so it won't provide accurate data about the 'submit' when preemption is enabled. Switch to CP_ALWAYS_ON_CONTEXT which is preemption safe. Fixes: e7ae83da4a28 ("drm/msm/a6xx: Implement preemption for a7xx targets") Signed-off-by: Akhil P Oommen --- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.c index 14d5b5e266f7..93bf2c40bfb9 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -345,7 +345,7 @@ static void a6xx_submit(struct msm_gpu *gpu, struct msm= _gem_submit *submit) * GPU registers so we need to add 0x1a800 to the register value on A630 * to get the right value from PM4. */ - get_stats_counter(ring, REG_A6XX_CP_ALWAYS_ON_COUNTER, + get_stats_counter(ring, REG_A6XX_CP_ALWAYS_ON_CONTEXT, rbmemptr_stats(ring, index, alwayson_start)); =20 /* Invalidate CCU depth and color */ @@ -386,7 +386,7 @@ static void a6xx_submit(struct msm_gpu *gpu, struct msm= _gem_submit *submit) =20 get_stats_counter(ring, REG_A6XX_RBBM_PERFCTR_CP(0), rbmemptr_stats(ring, index, cpcycles_end)); - get_stats_counter(ring, REG_A6XX_CP_ALWAYS_ON_COUNTER, + get_stats_counter(ring, REG_A6XX_CP_ALWAYS_ON_CONTEXT, rbmemptr_stats(ring, index, alwayson_end)); =20 /* Write the fence to the scratch register */ @@ -478,10 +478,10 @@ static void a7xx_submit(struct msm_gpu *gpu, struct m= sm_gem_submit *submit) =20 if (adreno_is_a8xx(adreno_gpu)) { rbbm_perfctr_cp0 =3D REG_A8XX_RBBM_PERFCTR_CP(0); - cp_always_on_counter =3D REG_A8XX_CP_ALWAYS_ON_COUNTER; + cp_always_on_counter =3D REG_A8XX_CP_ALWAYS_ON_CONTEXT; } else { rbbm_perfctr_cp0 =3D REG_A7XX_RBBM_PERFCTR_CP(0); - cp_always_on_counter =3D REG_A6XX_CP_ALWAYS_ON_COUNTER; + cp_always_on_counter =3D REG_A6XX_CP_ALWAYS_ON_CONTEXT; } =20 get_stats_counter(ring, rbbm_perfctr_cp0, rbmemptr_stats(ring, index, cpc= ycles_start)); --=20 2.51.0 From nobody Sun Apr 5 16:48:06 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 93B793E0253 for ; Mon, 23 Mar 2026 20:12:57 +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=1774296783; cv=none; b=FAXCOKDYSZDK9UJ/+vgNVK1jJ2EVxVbPpFHMG2DV5em5KY1T1wYtdMoEEWDBoSUyEe4lN0Ee+LXxwxp11Rba0bRMGSzph9MVXVJgBLNRxMz/JwOejf6i65uoImii/YnldANsEqMzbwthJVhjpCn3248gpX7i4FdhulbJFYTxuD0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296783; c=relaxed/simple; bh=XU6DfLSnpNWPI66IC/TzgoZVKRNGuruB43NJyqi08Jc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cJMn+GKuVYio+6gxBJ9ovt6rwD3PJ81yZgiTomb2FQSjcU1AKaA3c2ba2MwPAktUltxYuh1eTesi8bv0XDRRQOB6ZzIYe3/QHlGrcwU4+1FagXbCqWDqE8lkjy8KmcsgYTOH0E8VY7QCIjHED/TEdRhDEK5dIioP8jR7iwzdJSQ= 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=dqloMYI1; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=DRjKffqL; 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="dqloMYI1"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="DRjKffqL" 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 62NHquhh618693 for ; Mon, 23 Mar 2026 20:12:56 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= S55qtoUgugfr63dVcnC+GLJkI8uxi0KX+Hru5AmHH7Y=; b=dqloMYI11CXMm/0S keI+hcXWw6XO5qsNaLbzc2snqk79Ajsz1CFDNCPAheowchArt6sr25ayJhV+iAV+ LZjC52g802mjn+iLMROT9Yd2mCPbQE+XqPDBHpZwdChmqXNUwIzGSwGH0Z8VeNGk G5O7Tyr5ry5el3TH9+b1/gtOKjxpSNb6P9/eRPm4JsT1ElSALZc+QBkXIiJg8oTg WP8VtX16wCtAlsnYPYs+Pc3giSy97oMKDLkMLRqpgzWdHKycN0HiiWCehktVCUme /XzEVVa0lMlpv1UsfHLfXTefIoJHviuQxWcMEBt51jZh5Y1VgyFmsPDUwfXD2otE yYqyHw== Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d31jgjkey-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 20:12:56 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-c7422397574so15127743a12.0 for ; Mon, 23 Mar 2026 13:12:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774296776; x=1774901576; 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=S55qtoUgugfr63dVcnC+GLJkI8uxi0KX+Hru5AmHH7Y=; b=DRjKffqLRyRoaw5xaQiYMt9yobhcuEcXj4O0I7XGpv5+r7RsKQwITHwi3o5/MoOkpp N53VeO0zLasDuRGjAiW02RDYoVKuBaerbTtn+ri8fYl8h0c2uOoNhm5TlaEWZw74nCt/ g7E4QZO1JbR0LsvtdsBZJncJGP9aA6B+WpQL180sBDXZHQbQIlKiElaYD8iqZLnoxNHx 04XBSID1wqN5+aAHKkcpTiYqWi4IW45JVoTiSUM9pfDCaUSLIYnQDOhmghPKrCRQkHAJ dVQzqOQDDr+1SYATsZ1vGaEwif8HI75R7tTcYRD8Wk4ZllyjAFT7oZTlCE0tjIwzfOYT GbNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774296776; x=1774901576; 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=S55qtoUgugfr63dVcnC+GLJkI8uxi0KX+Hru5AmHH7Y=; b=Hzo/IbDeJ+2Tdc4HQxenBWPuBszpk5yEk0jb9eU+bVL7uDW1G7NzVb/MyUk5BUMwW/ ZfFZCesrcdkOgsentqrbN2qorb6kSHEmyYWwHWuiYRt9E1pZ6bxgpTSD9ijEoxolVodN lyIfnbnRm0nn4hk3zQDR8bcDw74eTQ1EKBArtE/Jtzc4sXPy9NaNTlYpc1Jplr6nAnlT IAPk7Pnx0TGQrYX4YHRrs1fbK5bRKIjPWIWzJlvmeYpQTp2HdAhm8C+BhAUyPUeY+Azx PQ9DJbiwshufu0PsXt2CCUfL2sPdoy+giDgbYsZrUBou4Y9mgrQV1JX5VwHxRgwBGFJw OAnA== X-Forwarded-Encrypted: i=1; AJvYcCV5QtttzMQz5Y50hdbc9nCQaPr3SqzlpWnNoVM6tg53FdOqh0R9p2ip7VmHfyPJ/qXVTDY9XkuoZLUgwVk=@vger.kernel.org X-Gm-Message-State: AOJu0YwjkwnSlHmDkTFYal+D7kzdQjnstgiri2xS9AXlYeDVIPltIwk4 HWhjQicN7aSiNeg2Di/0xR/+zO8gDs6AtpjAbwCZvvgOx0Dwh8w6KS+2ejXSVfLB4v3/UubnXFo oB5/wVovYLTQdUGxEiAI6FtqBytkyJhsJjKkFTm8L85G7nsAukBSaCDFXFA7fB5r94OI= X-Gm-Gg: ATEYQzy0OL99zyd9vgQKNFwDh1Os8SiX8IqPDEKo55JqRD1ExGLSJpmOw4GeCi+8KJj xbjORopJZnfzuMUzP2Q1Fm1XTRAJ+5azjL4pa9EgOz2jwXUl4juFBPGeOgLaZNG8AjIO64SkU5S qkVuEgeHfcQaFOqXFsatH72gyRR7rKSS/TZOrZ5SdkERasOauyYgug5HVwY4cePsolGgomE2m7O BpyCs7bNp2rbJ3JDCbjbHy4kGGv8pL59JKImwTclzkXpTgoVUi4ZnwguG0pY3kG5HodbNAr6eBZ udcBMpMp/t+qLiDhVtK7fkpsBwdBhsWRUXZMBIec7yqXZP69mCC+cNGSld83X0aN1dzrTb3gmP1 4ViSOaK60nAEqOo7VubCd3i8/dUoWRzwEaNzbutInuqsONw== X-Received: by 2002:a05:6a00:2d29:b0:82c:28de:fa26 with SMTP id d2e1a72fcca58-82c28defcd5mr8681509b3a.36.1774296776024; Mon, 23 Mar 2026 13:12:56 -0700 (PDT) X-Received: by 2002:a05:6a00:2d29:b0:82c:28de:fa26 with SMTP id d2e1a72fcca58-82c28defcd5mr8681498b3a.36.1774296775570; Mon, 23 Mar 2026 13:12:55 -0700 (PDT) Received: from hu-akhilpo-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0409d148sm9510738b3a.29.2026.03.23.13.12.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 13:12:55 -0700 (PDT) From: Akhil P Oommen Date: Tue, 24 Mar 2026 01:42:15 +0530 Subject: [PATCH 03/16] drm/msm/a6xx: Correct OOB usage 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: <20260324-a8xx-gpu-batch2-v1-3-fc95b8d9c017@oss.qualcomm.com> References: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> In-Reply-To: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> To: Rob Clark , Sean Paul , Konrad Dybcio , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Marijn Suijten , David Airlie , Simona Vetter , Antonino Maniscalco , Connor Abbott , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Akhil P Oommen X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774296753; l=2386; i=akhilpo@oss.qualcomm.com; s=20240726; h=from:subject:message-id; bh=XU6DfLSnpNWPI66IC/TzgoZVKRNGuruB43NJyqi08Jc=; b=0yD/TiCNdFIRXTp7VQT0deosP8kmu4wjice+6AJyGdMDp+3xpyU04YHALqF5QI8cnEA1H0j2C hsAba0mO96sD8vFFQv6elOzXlZTlcraC0mQZMsFn00dq6NPbflBufv8 X-Developer-Key: i=akhilpo@oss.qualcomm.com; a=ed25519; pk=lmVtttSHmAUYFnJsQHX80IIRmYmXA4+CzpGcWOOsfKA= X-Proofpoint-GUID: fesu5orlrZr8D4dzaUN4nbz49ht8W1h0 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE0OSBTYWx0ZWRfXwW4aV5XH+tXd AXvT/CKa/PxlJPEtBfjKo2ROWqT3rIc0a6vr3CWj8lctu8MVbV7dkR+7KJw9cdhDJc5MqVYR3UT uscBqtJ8mAlilQZPHst+BDXknfnGC81L/m/3HjJ6YHqseV9/72dYyYd+GULtaG3IB/TqKLJLIzv cUdxkk2puFTTIe/wpfnnFjpgQqNNK2wML/6giAGNJlLBSPJgnR1siKfkfMBYfPVaGArnJonffwg HTbcHS3/rAI0iyNBVLSuaX57OqF3912suCcE4c1nYy2pqN2n2VdS73gQgs5H+bqRiuA6G2VHe6V /MMmrVtvRVanPnjqLEiELmEZkjyhf+JcV/COwSHgt38eYWBnlRyQwGV3JRJaLpONXTwzACAlgE5 /qvcIW+tpCqKiNzjTOE+80T/banY/aDgJtpNNYaYFxUbHhI12WigW6MetL6oYubdRVvnq8d0+nC qrnUY9sd3CjN07LmsJA== X-Authority-Analysis: v=2.4 cv=CMInnBrD c=1 sm=1 tr=0 ts=69c19ec8 cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==: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=pGJFX0Yo-_9-baE-uFMA:9 a=QEXdDO2ut3YA:10 a=_Vgx9l1VpLgwpw_dHYaR:22 X-Proofpoint-ORIG-GUID: fesu5orlrZr8D4dzaUN4nbz49ht8W1h0 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-23_05,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 clxscore=1015 malwarescore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 spamscore=0 phishscore=0 impostorscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230149 During the GMU resume sequence, using another OOB other than OOB_GPU may confuse the internal state of GMU firmware. To align more strictly with the downstream sequence, move the sysprof related OOB setup after the OOB_GPU is cleared. Fixes: 62cd0fa6990b ("drm/msm/adreno: Disable IFPC when sysprof is active") Signed-off-by: Akhil P Oommen --- drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 5 ----- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 6 ++++++ drivers/gpu/drm/msm/adreno/a8xx_gpu.c | 6 ++++++ 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gmu.c index 9662201cd2e9..690d3e53e273 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c @@ -1236,11 +1236,6 @@ int a6xx_gmu_resume(struct a6xx_gpu *a6xx_gpu) /* Set the GPU to the current freq */ a6xx_gmu_set_initial_freq(gpu, gmu); =20 - if (refcount_read(&gpu->sysprof_active) > 1) { - ret =3D a6xx_gmu_set_oob(gmu, GMU_OOB_PERFCOUNTER_SET); - if (!ret) - set_bit(GMU_STATUS_OOB_PERF_SET, &gmu->status); - } out: /* On failure, shut down the GMU to leave it in a good state */ if (ret) { diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.c index 93bf2c40bfb9..897522778fd4 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -1603,6 +1603,12 @@ static int hw_init(struct msm_gpu *gpu) a6xx_gmu_clear_oob(&a6xx_gpu->gmu, GMU_OOB_BOOT_SLUMBER); } =20 + if (!ret && (refcount_read(&gpu->sysprof_active) > 1)) { + ret =3D a6xx_gmu_set_oob(gmu, GMU_OOB_PERFCOUNTER_SET); + if (!ret) + set_bit(GMU_STATUS_OOB_PERF_SET, &gmu->status); + } + return ret; } =20 diff --git a/drivers/gpu/drm/msm/adreno/a8xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a8xx_gpu.c index 987c99097d40..d414f24ddbd9 100644 --- a/drivers/gpu/drm/msm/adreno/a8xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a8xx_gpu.c @@ -711,6 +711,12 @@ static int hw_init(struct msm_gpu *gpu) */ a6xx_gmu_clear_oob(&a6xx_gpu->gmu, GMU_OOB_GPU_SET); =20 + if (!ret && (refcount_read(&gpu->sysprof_active) > 1)) { + ret =3D a6xx_gmu_set_oob(gmu, GMU_OOB_PERFCOUNTER_SET); + if (!ret) + set_bit(GMU_STATUS_OOB_PERF_SET, &gmu->status); + } + return ret; } =20 --=20 2.51.0 From nobody Sun Apr 5 16:48:06 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 21EDC364E95 for ; Mon, 23 Mar 2026 20:13:03 +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=1774296784; cv=none; b=SWa1pdXp/rA+KmL9JCNfeu/MGRi7qszHDg4W5JX3MhW6deENV6eQ3JJNGsXLbvjmyaXLJ9hOZI8/RR4yzd8V5FPr+xnqjjEiKX+PGnHpIaTmZ4l0W+aOldSabyVS0+p7wuShtY6qSYjkClLPO/td8HE6ralrdE6xGasKZApmmbw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296784; c=relaxed/simple; bh=sELChCEzxCGR2Lu27U9noN48qPqz/NrmLFJdIRsmNH8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=P9OJ/VEQ4OyCe0GFp7O3pP1NS29I4+8Yh96tkt3XAAdLQ512fIEjvTfyhpyWfVfHK3ybSCLeK5tmILwGe5YCC+a/sB27SWkhtS8kuJ/FLjAeXCeWIfUtSOoeC13VHm7ip990hFZhULq1uMpP2rB29HoK+oRZ1i0nqlQaektmwQM= 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=hb3eSMNd; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Vi+Jit4k; 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="hb3eSMNd"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Vi+Jit4k" 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 62NHqliC3634578 for ; Mon, 23 Mar 2026 20:13:02 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= vuW6AnATRy0mNRNmrdAu80AS+AJJl14JYp6IvrFFHNQ=; b=hb3eSMNd5wSMQ6e+ EqNiSySNyqMOI7bazhzRGQCNqSYl8WNOUBgNRs1BAxePQvqO0s6cMCGBVbJ/mOhL UR0VZGjVYzaFSseWhchzDnXfXPvkQF4k2rEKJAITTCYmuEhX9Rs5dLaf7qDBoEsN 4YE7pg90XtHwufOTAnG384F6ZgC3Iv7MeLp0FZ9SPih6qECJmA0ymOuPjYn8tP8z /elByFWpjNkRiMX9JTCPccYnIYcBJx2/GFKAZpDcn4TTdWXi+tiSVR0p0dSeHPU5 jKVVXvYP3RhXD305DTU0lxhiNTgMjbqd24heCr872QEJrq+skCy4Yce5r5/Gy0cX ZwYxgQ== Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d34k4hwh6-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 20:13:02 +0000 (GMT) Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-82a6c70f1f8so3900802b3a.0 for ; Mon, 23 Mar 2026 13:13:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774296782; x=1774901582; 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=vuW6AnATRy0mNRNmrdAu80AS+AJJl14JYp6IvrFFHNQ=; b=Vi+Jit4keVX24oiKkWzWh5oFjrp5iTpBTkSAqJe8JwHlpjBByQf3AZb31ID4jZ/xYM ISdCiRtGEQ2P/0hX83ySF14rfE7b1uvtYUB4JXj9uM8gZGnVwgF3ehff2q+Cd0VvPkcT hZBIGrSKQYqCEooHUgzwAOxkJYQ+IOwPZw/XPbKRxhmvRCDPzakNZ8HYIyQAUJuMPTRg AWUylaZ5s1j7Mr+ahjTdFGty7IGpFFmy01pEL8BV7T4xzUCOBo20+ePANI3XhTaZ1mFu qQ1SlDjbdCKz/HOdUe2JpFZcLdS14Ozh4kjcnEJ9O/1TBDzGNgN6zV1xW83pSWH42CJa wYOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774296782; x=1774901582; 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=vuW6AnATRy0mNRNmrdAu80AS+AJJl14JYp6IvrFFHNQ=; b=BdodwWOsBXdc5UJYuolJ+qjreXh2jqSdnyiUwL2WgrYhhH4sg5UigfCIjbm7ts154n LDgJhn/5blTBX/7VHYn8tHzft2VuAU+Ehjuq3UdPVLUxx4cWxiSSFMn8dSmFKJtrAcO3 9mA4BlMjrEFDIsM5KT5MLsM5vkgSoqmRDWOgPlMVfecsWQu557MAhlrhG/IrKrlza21/ qLi9JpHAy7gaLaiWyjpWlJdml5XM3xCUgeSqq3Usd11X4WWzoHig6dNAX7lvCqH2eZQY ZfQAgxyD0Dxp58o4qv3wrPPxS8DE7FCL3MOSbVJEDzRBpj4+0g1K/ru3Vy68oYxgydMO YpWw== X-Forwarded-Encrypted: i=1; AJvYcCWAhJjlFWM8QxBbcau/gobJS0dMDzCvcQwNF7TwPsV2PC3GnjdVhYA2TdeI0d8Klp2vjsTYY+Cs1r0G8fI=@vger.kernel.org X-Gm-Message-State: AOJu0YzV5MVj9gX7KzjXgWeQ/5q3uMLEm4Hya508T7dMYU8A5tuzb1cz llYrpKaCzsNY8cz7aJ+fPZbTNa4f8aAoCCLqeiSBWo1xuozOrl9AGM81OU9KkD3wM5VjP7jCjUL oi7R6tW80I4mX2QgoBxvPinJxGxJXNOcz2SuC5wP2K1NUP+jMJhbVROCe9zg85k+1hzQ= X-Gm-Gg: ATEYQzyvOgb0o/kA2SWNp2Yy7DCWm/Vb8HKhaOt/UPuAMUC5kPkuOjtS5sHCjQPB6e8 svcXlCQSbYXnOPnFSFs2G+ylHKu5U/KHYhHokkyEF0p24CFPlYNn6QRnHUi07C33t4uaAU9yOT/ Ux2vG726cPZMEYLXVUfVkYWwJTyOBRzy95SEQXVwfPXdsU/VB8nlhZpFEyTJ+x8tdbbp85Bnmkh y2wmpA8uJplxK3qbUNW3f3JB9ogGsm7Snrffb4VedSMn34PYs1zJuiDE7U5s3YeBslLyhUzPVkN TzV3GUSUHWrYm+cg7hZGLvkAkw/8sUonmh2V3W5JHaEB1obAhoRCnfFcfAYfuiAXTI/SDpkv6ws wLMukxZCy/bzmRO05dk2Xrb0J8TTU82L5isiVM5C4H1SohA== X-Received: by 2002:a05:6a00:4288:b0:81e:7496:f826 with SMTP id d2e1a72fcca58-82a8c302094mr11008578b3a.31.1774296781765; Mon, 23 Mar 2026 13:13:01 -0700 (PDT) X-Received: by 2002:a05:6a00:4288:b0:81e:7496:f826 with SMTP id d2e1a72fcca58-82a8c302094mr11008547b3a.31.1774296781278; Mon, 23 Mar 2026 13:13:01 -0700 (PDT) Received: from hu-akhilpo-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0409d148sm9510738b3a.29.2026.03.23.13.12.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 13:13:00 -0700 (PDT) From: Akhil P Oommen Date: Tue, 24 Mar 2026 01:42:16 +0530 Subject: [PATCH 04/16] drm/msm/a6xx: Add support for Debug HFI Q 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: <20260324-a8xx-gpu-batch2-v1-4-fc95b8d9c017@oss.qualcomm.com> References: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> In-Reply-To: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> To: Rob Clark , Sean Paul , Konrad Dybcio , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Marijn Suijten , David Airlie , Simona Vetter , Antonino Maniscalco , Connor Abbott , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Akhil P Oommen X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774296753; l=3294; i=akhilpo@oss.qualcomm.com; s=20240726; h=from:subject:message-id; bh=sELChCEzxCGR2Lu27U9noN48qPqz/NrmLFJdIRsmNH8=; b=QRQiVhG4a4bfTyTLpWD25BEfUelIPhhcz/p6tq30dvKOuPYxKYBHwauVgKxvptrDrGtCNHFGA Pu3HSHbAmbHDjw+o2kFeXCyyLk1vAPhXYiw9VIaaOCacIhIu6dHRDSd X-Developer-Key: i=akhilpo@oss.qualcomm.com; a=ed25519; pk=lmVtttSHmAUYFnJsQHX80IIRmYmXA4+CzpGcWOOsfKA= X-Proofpoint-GUID: cULCH_7NNPi6HOeE-1FyQDaWLKncTV2T X-Proofpoint-ORIG-GUID: cULCH_7NNPi6HOeE-1FyQDaWLKncTV2T X-Authority-Analysis: v=2.4 cv=c+imgB9l c=1 sm=1 tr=0 ts=69c19ece cx=c_pps a=mDZGXZTwRPZaeRUbqKGCBw==: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=a1WYpzXZzT6O6UdPSaAA:9 a=QEXdDO2ut3YA:10 a=zc0IvFSfCIW2DFIPzwfm:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE0OSBTYWx0ZWRfX33nkesYCAkbH oQOOWI/Ayo8pXyxHzmJY9+vXVG1FjPJ7/7UcDQbMLXDmiMAexBNF/isIJ7cGETq3ijuX/pKBC70 8nwe1Og3BW0jYXrLIvzaduJJhKzkJ/1FQ7Wpl3W4fMyNjXc2X8nnzY2EJFkMHg3lwULpJ9CaacC w38lmeBplo8JUPbTsdfTq9XVJAJuC8atT5NHTyiBwpnA25VlE+O4Fi52UEABGL1ivAWfX1x7/Fj HuOl/yhf6ZIEIHRjY7LuT1u3IR072qQu+DkC/cTb5AVevnIyoWET5n0HlA48emKSBXSbFmFhe+X zYF1HSRQO234zERXEm34vDLg9XdKX/ee88Hnd3Y5NVjl5wf31v/X3KPDxq7VHgV8M+T/x1JY3o0 tch/vooGW4NEmFccRxwvoELdA6vIw7Cf27DjvbdcAleKGLQ2A4zRffqqL4uyHXDLmBwGeWfEpZ+ u5n1SeKpRT7DaPKJS8w== 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-23_05,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 impostorscore=0 phishscore=0 lowpriorityscore=0 spamscore=0 suspectscore=0 priorityscore=1501 bulkscore=0 adultscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230149 Add the Debug HFI Queue which contains the F2H messages posted from the GMU firmware. Having this data in coredump is useful to debug firmware issues. Signed-off-by: Akhil P Oommen --- drivers/gpu/drm/msm/adreno/a6xx_gmu.h | 2 +- drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c | 2 +- drivers/gpu/drm/msm/adreno/a6xx_hfi.c | 16 +++++++++++++--- drivers/gpu/drm/msm/adreno/a6xx_hfi.h | 2 ++ 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.h b/drivers/gpu/drm/msm/ad= reno/a6xx_gmu.h index 2af074c8e8cf..dd0614b19aac 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.h +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.h @@ -110,7 +110,7 @@ struct a6xx_gmu { =20 unsigned long freq; =20 - struct a6xx_hfi_queue queues[2]; + struct a6xx_hfi_queue queues[HFI_MAX_QUEUES]; =20 bool initialized; bool hung; diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c b/drivers/gpu/drm/= msm/adreno/a6xx_gpu_state.c index d2d6b2fd3cba..018c164ad980 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c @@ -57,7 +57,7 @@ struct a6xx_gpu_state { struct msm_gpu_state_bo *gmu_hfi; struct msm_gpu_state_bo *gmu_debug; =20 - s32 hfi_queue_history[2][HFI_HISTORY_SZ]; + s32 hfi_queue_history[HFI_MAX_QUEUES][HFI_HISTORY_SZ]; =20 struct list_head objs; =20 diff --git a/drivers/gpu/drm/msm/adreno/a6xx_hfi.c b/drivers/gpu/drm/msm/ad= reno/a6xx_hfi.c index 53cfdf4e6c34..2daaa340366d 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_hfi.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_hfi.c @@ -1056,8 +1056,8 @@ void a6xx_hfi_init(struct a6xx_gmu *gmu) struct a6xx_gmu_bo *hfi =3D &gmu->hfi; struct a6xx_hfi_queue_table_header *table =3D hfi->virt; struct a6xx_hfi_queue_header *headers =3D hfi->virt + sizeof(*table); + int table_size, idx; u64 offset; - int table_size; =20 /* * The table size is the size of the table header plus all of the queue @@ -1076,12 +1076,22 @@ void a6xx_hfi_init(struct a6xx_gmu *gmu) table->active_queues =3D ARRAY_SIZE(gmu->queues); =20 /* Command queue */ + idx =3D 0; offset =3D SZ_4K; - a6xx_hfi_queue_init(&gmu->queues[0], &headers[0], hfi->virt + offset, + a6xx_hfi_queue_init(&gmu->queues[idx], &headers[idx], hfi->virt + offset, hfi->iova + offset, 0); =20 /* GMU response queue */ + idx++; offset +=3D SZ_4K; - a6xx_hfi_queue_init(&gmu->queues[1], &headers[1], hfi->virt + offset, + a6xx_hfi_queue_init(&gmu->queues[idx], &headers[idx], hfi->virt + offset, hfi->iova + offset, gmu->legacy ? 4 : 1); + + /* GMU Debug queue */ + idx++; + offset +=3D SZ_4K; + a6xx_hfi_queue_init(&gmu->queues[idx], &headers[idx], hfi->virt + offset, + hfi->iova + offset, gmu->legacy ? 5 : 2); + + WARN_ON(idx >=3D HFI_MAX_QUEUES); } diff --git a/drivers/gpu/drm/msm/adreno/a6xx_hfi.h b/drivers/gpu/drm/msm/ad= reno/a6xx_hfi.h index 6f9f74a0bc85..19f6eca2c8c9 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_hfi.h +++ b/drivers/gpu/drm/msm/adreno/a6xx_hfi.h @@ -4,6 +4,8 @@ #ifndef _A6XX_HFI_H_ #define _A6XX_HFI_H_ =20 +#define HFI_MAX_QUEUES 3 + struct a6xx_hfi_queue_table_header { u32 version; u32 size; /* Size of the queue table in dwords */ --=20 2.51.0 From nobody Sun Apr 5 16:48:06 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 0FADA364E95 for ; Mon, 23 Mar 2026 20:13:08 +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=1774296790; cv=none; b=G2FCQ9GAOYvB0wlqo04frTBP8K8lyZbwdy/TvP73U0MmMDg6wSxWCFsVI2R1hPQzcD4d6sGH3InkwhwVcibOw44rzsprpupGX3fwMNWID7WhaA7CxtzBTx+bBgOnkZRCFZXeDTpd0z5H7C4CXqypJXauKIxcx+ga4GVl6oUjR5w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296790; c=relaxed/simple; bh=Y47hfhEP77VPPLQuO6M98YMW2oPSMLiiSh5WGqdD588=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DUxbGU9TNRlOv6AjdV6Q+Mfp3AT+lHMY22HyHLitZzs0OVm0f4oZTg2/putLpK5+C9c3pKxfY81pJdTCxxezaXn0oYXcLOlVN2Z4DKAZS4Yw0H9G2wayNEEU+STOaoBmJ/mStpVNoDfO7WOJXLeRQlDVwbEJ9E6QkRom2e+IdaY= 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=Of4Rq/g0; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=jzQ+k9nF; 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="Of4Rq/g0"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="jzQ+k9nF" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NIYlgJ1908895 for ; Mon, 23 Mar 2026 20:13:08 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= 9gnUn4vlm4hYrJYBjxx32v/u7fbwTJqrSqNxW05+/Zk=; b=Of4Rq/g0bVYsAXN4 7FyNacw+Ksh0aBGZFUtPhXJPVvFJa9IT7+MO0154eM+3SQxlZHO7TtpwUXAjEhZ1 gC+7w9P1VGZTTMbnEHNagPc7rS4xSVSeVg7/MOorRE+17EM6BUnfUQhy7DIu8pir MCD3gB4HXOy49CvwSD4zugOLd8hPJVNlNdWHLj16qQdL5qfngvBAe9wNV1VLHQUO SegZETfwgnJVDg+98fb2/Lt+sxmZJZ+CxxJ2fEMoSzkPV3ME3q9LrQOxKfBUm1Fu 5/i9U0oUivGqUfDV4B2FzgtqQmKMpJrjYfEnTFZau3E/FZuGHtfhGgKD8qP1E9wH 1u1/mA== Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d3awyr9sk-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 20:13:08 +0000 (GMT) Received: by mail-pf1-f198.google.com with SMTP id d2e1a72fcca58-82a820305c1so392205b3a.0 for ; Mon, 23 Mar 2026 13:13:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774296787; x=1774901587; 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=9gnUn4vlm4hYrJYBjxx32v/u7fbwTJqrSqNxW05+/Zk=; b=jzQ+k9nF0sidrCQ6eXjfE8+G81rFyEy9Jd0l/I1RKpkggXcXY3x7muf0YXX2kViS8h 4Vhy+5eQAABC7ss0ZfNIY83V4oez2jjHk8ryIe/uFfWMqVBDAqxEuxPTfPIBwIZ3FoZh 4CReM7xAMnJ2uzKdPXfV2cJKAbl/nL92shyVpHbtJCbe9zs64G4TkkCrHp6JaoCuGzIV xmXZm+WG1r97IjDwcusSKUGRB+w1aBMgv2TlS+7RF9aaIou/RSuLSMhjv5JxCbRRUgaX tkGrRIsB1L82aAlSxJyntlz9PyBavJvI3jt/BJzk8dwWgYofA/YqBMPSGDo4gi4f5XY0 J4Fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774296787; x=1774901587; 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=9gnUn4vlm4hYrJYBjxx32v/u7fbwTJqrSqNxW05+/Zk=; b=ebbP9Wb3scPNXLYvKPIbwCfFF4J9LRcjLe4OZsRowcewV9nUDEAYobDkmClL7TVmEn Qm+v6a3OyYe6NNFvgoNGCmwtP2jLYWGpnsN1iO8BZgzbmzRfuJBf+JwClM9Oxw8vRmSV RqRzw+gSoP86hx4L5Sioj/QPtnHrWNWzoYRGFS5e7NzozbGywJ24wEIsU7rGY3V8h+70 25u1Ih5MJWXI3Wf8U2V+DMB7mIR+2z6s5onJFzgtgElKlyaMHyUprCR7MoRbf3AHXYN7 JVEB/asN4oZqyhGuXUX+eH8xqj7brbNnRn8M+aN5EeavCPQbRHkDYNRBlTWC9n3tvJvn ylCA== X-Forwarded-Encrypted: i=1; AJvYcCVnrs6psLC1kiEzELwrWZtnzohXf3wyBgj27TK6xrPsFeJqFSBG1+aeHfP+bVZxRUQfa2jiTKo4TuvkUKE=@vger.kernel.org X-Gm-Message-State: AOJu0Yw5FieZ4rUDxt59eeMd/b1CH9t2KPJU44M2dALROLUT9uH01BYM HvZ6ChzJsIt94FjSlowlIOY4Rj9EbpMtSNObi7+N9/5oiXjT7j/bZ7lx1iz+ZN6TPBy9/n4YG9V RcZUyEXhnSD83w+3jwKg4O9ND/iHIAOqvyl+Y3CB4U2q5SAwldLOqmwp5mu13rDF9xjs= X-Gm-Gg: ATEYQzxj8ZRkkEsyRspcZykS0EWQWH6v+j2VKvJZrSbfxnQAaipIFGa1/W6ZSfloi8P 590VPD8CWyAiVZ/b2QeiyBWUaiPSRRqjZ8gBmuH3VgRydorqOd4kSOOZ11+SOl63ll29IcPRVuf B90Va7xi5+bm/nLj3swtbFISPja2qpKV2DPSPLgSCzw4CrWQ0+6yLIS4UGWDs8zDZlc4RBHoO6b H47/b7xGqaEqhs1KMFle/0tqkLMrra63ikaQhtTIo7+zwIW44qfTXqbnR4/J7RUZRNpmdRzNNWQ hyFVdQT7j/84DAWpDVaMHqvI7L2nwYRfLTG4rHJftkOhupfzGyBd6IgkwtlL4U9jojd6bu0xUs2 qtRkn0BmIneg+AZ9UPwSlsfZPVnNqs7gAosiaaq4sQQyhRg== X-Received: by 2002:a05:6a00:13a6:b0:81e:4476:f67c with SMTP id d2e1a72fcca58-82a8c22de4dmr11789588b3a.3.1774296787437; Mon, 23 Mar 2026 13:13:07 -0700 (PDT) X-Received: by 2002:a05:6a00:13a6:b0:81e:4476:f67c with SMTP id d2e1a72fcca58-82a8c22de4dmr11789558b3a.3.1774296786933; Mon, 23 Mar 2026 13:13:06 -0700 (PDT) Received: from hu-akhilpo-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0409d148sm9510738b3a.29.2026.03.23.13.13.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 13:13:06 -0700 (PDT) From: Akhil P Oommen Date: Tue, 24 Mar 2026 01:42:17 +0530 Subject: [PATCH 05/16] drm/msm/adreno: Coredump on GPU/GMU init failures 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: <20260324-a8xx-gpu-batch2-v1-5-fc95b8d9c017@oss.qualcomm.com> References: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> In-Reply-To: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> To: Rob Clark , Sean Paul , Konrad Dybcio , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Marijn Suijten , David Airlie , Simona Vetter , Antonino Maniscalco , Connor Abbott , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Akhil P Oommen X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774296753; l=4487; i=akhilpo@oss.qualcomm.com; s=20240726; h=from:subject:message-id; bh=Y47hfhEP77VPPLQuO6M98YMW2oPSMLiiSh5WGqdD588=; b=uNx5nipFybpSsxCpeoPj8dQ+2Szp58MCMSQh230ApmII8VwqLiThw0TG2UiEPDhMGLF4u6Hsv Cnqrk16U9iaCYLw/aJmPZTNSksnZB5JVRYhyIW0xPFVKxUOlY62uvYC X-Developer-Key: i=akhilpo@oss.qualcomm.com; a=ed25519; pk=lmVtttSHmAUYFnJsQHX80IIRmYmXA4+CzpGcWOOsfKA= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE0OSBTYWx0ZWRfX7YET2Od+5Iw5 o9V9C0Rp8EUfBP7csJXo0dhnT14y1hciVGAHFLdjc0EsSztpUNsj4ZC1GxLqkOSnnI+WuON3w6l 5BJsZP90qCvwWpmLNDVZkMlvJ02KYtvj72uXEZ5aMwgz1PY5FyvlIIwLV6c16aKvvUKfz6V1Dw+ occRIJch2TKxuiu3SQ3GXgFD9faeU2AuwxQqCLUsv6OnEU6E3jMKqyH+L+60JuEUuMQB5HqXjEP b4MkiqmKwtUNw/D6QHEToSfQuXABLclB2f52WdxqdHm+RJKXX0nfla6LIOt3qHwChYcuyOiGws0 xmmgMbcmCMdzLq8jpZENobcXynbhUCFw73gs8gTTOgVWs5FBBS90d9gV9y0K/QxCFKVSExbmRdq 0WDL8NapBYoVGOASfUz1ktfFO9gi6F/hCidyMuX1lXRfuA3fhwqj2WaDGq9UpOC+Q9r40DQfRxn TLxh+Il6XMFgrm/zYNw== X-Proofpoint-ORIG-GUID: lGCyFD5336_etbSFWvBdrV4VLWx9-2iq X-Authority-Analysis: v=2.4 cv=KuhAGGWN c=1 sm=1 tr=0 ts=69c19ed4 cx=c_pps a=m5Vt/hrsBiPMCU0y4gIsQw==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=EUspDBNiAAAA:8 a=Uv9L2OBOgJoomgqfufwA:9 a=QEXdDO2ut3YA:10 a=IoOABgeZipijB_acs4fv:22 X-Proofpoint-GUID: lGCyFD5336_etbSFWvBdrV4VLWx9-2iq 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-23_05,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 malwarescore=0 phishscore=0 priorityscore=1501 impostorscore=0 spamscore=0 adultscore=0 lowpriorityscore=0 clxscore=1015 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230149 Capture coredump on GPU or GMU errors during initialization to help in debugging the issues. To be consistent with the locks while calling msm_gpu_crashstate_capture(), call pm_runtime_get(gpu) always with msm_gpu->lock. Signed-off-by: Akhil P Oommen --- drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 1 + drivers/gpu/drm/msm/adreno/adreno_device.c | 7 +++++-- drivers/gpu/drm/msm/adreno/adreno_gpu.c | 2 ++ drivers/gpu/drm/msm/msm_gpu.c | 5 +++-- drivers/gpu/drm/msm/msm_gpu.h | 2 ++ 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gmu.c index 690d3e53e273..6d511dc54e43 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c @@ -1240,6 +1240,7 @@ int a6xx_gmu_resume(struct a6xx_gpu *a6xx_gpu) /* On failure, shut down the GMU to leave it in a good state */ if (ret) { disable_irq(gmu->gmu_irq); + msm_gpu_crashstate_capture(gpu, NULL, NULL, NULL, NULL); a6xx_rpmh_stop(gmu); pm_runtime_put(gmu->gxpd); pm_runtime_put(gmu->dev); diff --git a/drivers/gpu/drm/msm/adreno/adreno_device.c b/drivers/gpu/drm/m= sm/adreno/adreno_device.c index 4edfe80c5be7..85b3e1f0e4fa 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_device.c +++ b/drivers/gpu/drm/msm/adreno/adreno_device.c @@ -105,6 +105,7 @@ struct msm_gpu *adreno_load_gpu(struct drm_device *dev) */ pm_runtime_enable(&pdev->dev); =20 + mutex_lock(&gpu->lock); ret =3D pm_runtime_get_sync(&pdev->dev); if (ret < 0) { pm_runtime_put_noidle(&pdev->dev); @@ -112,15 +113,15 @@ struct msm_gpu *adreno_load_gpu(struct drm_device *de= v) goto err_disable_rpm; } =20 - mutex_lock(&gpu->lock); ret =3D msm_gpu_hw_init(gpu); - mutex_unlock(&gpu->lock); if (ret) { + msm_gpu_crashstate_capture(gpu, NULL, NULL, NULL, NULL); DRM_DEV_ERROR(dev->dev, "gpu hw init failed: %d\n", ret); goto err_put_rpm; } =20 pm_runtime_put_autosuspend(&pdev->dev); + mutex_unlock(&gpu->lock); =20 #ifdef CONFIG_DEBUG_FS if (gpu->funcs->debugfs_init) { @@ -136,6 +137,8 @@ struct msm_gpu *adreno_load_gpu(struct drm_device *dev) err_disable_rpm: pm_runtime_disable(&pdev->dev); =20 + mutex_unlock(&gpu->lock); + return NULL; } =20 diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/= adreno/adreno_gpu.c index 1bc0e570bd12..10d9e5f40640 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c @@ -391,9 +391,11 @@ int adreno_get_param(struct msm_gpu *gpu, struct msm_c= ontext *ctx, return 0; case MSM_PARAM_TIMESTAMP: if (adreno_gpu->funcs->get_timestamp) { + mutex_lock(&gpu->lock); pm_runtime_get_sync(&gpu->pdev->dev); *value =3D (uint64_t) adreno_gpu->funcs->get_timestamp(gpu); pm_runtime_put_autosuspend(&gpu->pdev->dev); + mutex_unlock(&gpu->lock); =20 return 0; } diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c index 995549d0bbbc..472db2c916f9 100644 --- a/drivers/gpu/drm/msm/msm_gpu.c +++ b/drivers/gpu/drm/msm/msm_gpu.c @@ -361,7 +361,7 @@ static void crashstate_get_vm_logs(struct msm_gpu_state= *state, struct msm_gem_v mutex_unlock(&vm->mmu_lock); } =20 -static void msm_gpu_crashstate_capture(struct msm_gpu *gpu, +void msm_gpu_crashstate_capture(struct msm_gpu *gpu, struct msm_gem_submit *submit, struct msm_gpu_fault_info *fault_info, char *comm, char *cmd) { @@ -886,7 +886,8 @@ void msm_gpu_submit(struct msm_gpu *gpu, struct msm_gem= _submit *submit) =20 pm_runtime_get_sync(&gpu->pdev->dev); =20 - msm_gpu_hw_init(gpu); + if (msm_gpu_hw_init(gpu)) + msm_gpu_crashstate_capture(gpu, NULL, NULL, NULL, NULL); =20 submit->seqno =3D submit->hw_fence->seqno; =20 diff --git a/drivers/gpu/drm/msm/msm_gpu.h b/drivers/gpu/drm/msm/msm_gpu.h index 666cf499b7ec..eb5b3a7b81f9 100644 --- a/drivers/gpu/drm/msm/msm_gpu.h +++ b/drivers/gpu/drm/msm/msm_gpu.h @@ -747,6 +747,8 @@ static inline void msm_gpu_crashstate_put(struct msm_gp= u *gpu) } =20 void msm_gpu_fault_crashstate_capture(struct msm_gpu *gpu, struct msm_gpu_= fault_info *fault_info); +void msm_gpu_crashstate_capture(struct msm_gpu *gpu, struct msm_gem_submit= *submit, + struct msm_gpu_fault_info *fault_info, char *comm, char *cmd); =20 /* * Simple macro to semi-cleanly add the MAP_PRIV flag for targets that can --=20 2.51.0 From nobody Sun Apr 5 16:48:06 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 670573BF682 for ; Mon, 23 Mar 2026 20:13:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296796; cv=none; b=n40iAKf/8NSVYeHvpl++Lxcx6eqbnCbFUH+zJBQhseCYbOV2Seg3L1uhdJ1Kdzp7saVJZJCe1bWd+ZmDoQluCVgyoflWdjz1/MkUA3KYUsxKL+7SYRpdoPn4pm9eY95VMxYxHOHFFbBpHKJ0kRBnrhqAqdR+wT0KyRYaOOCut1Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296796; c=relaxed/simple; bh=1ajLVoslkBTv41Sp8G4luxsz7Te6eYrrZtKsz0zxR/0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hlMqS70zlhE1QS380R0xHCMhYfl7jttpZo1KIMlC/+TPCkDF3UaH+kS4m/cfzXaRSGmy9PnLLzRV7FxR1lBAAgaItrsQy/Yd3yERC2wnXo6XbikRsJnNyseFNl9NwC+VvMtT3tFZDOm4Us+Td/Y0HI7AWSNASob1h6oNqznuf/0= 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=aOXMgnna; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=dWOebm+M; arc=none smtp.client-ip=205.220.180.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="aOXMgnna"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="dWOebm+M" Received: from pps.filterd (m0279871.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NHqYPW3170682 for ; Mon, 23 Mar 2026 20:13:14 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= iFi8aoHCvHDcD5YBbZdBFmik9S7MrX8p/en9vgMxupI=; b=aOXMgnnaMW2rfqSm wf62voJmAEkx/vKDnitU4Jh6I+Jx9zjys+3vRU5b6OOGPsOe+N7aF15Klx1HQe0j VgFTzhqWfc1X3Cq/hARFhbp5MkrRthSJ1ksvZD6XHyJIqFXbFtRfXgpNIEny9zUy C6ik7xWFs8OomYncVeiUK1WIyzYiIXaR6fdC0yE2VqAQyZBm4W1VGouUFsnBeuVH wI+RAIicJKiwElL+y07nTDqRJMqgNruncASULMUkJyWmOLgw3zdGPG1RYC4Zp0yw zK0Zqo2xSSoO2V6GDjufxkp7rfU6R6Ka0gAbnebsXOybe9KfLJIy5YwXdzWwTZMe Fe9KIQ== Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d35r21jxc-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 20:13:14 +0000 (GMT) Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-b62da7602a0so2376281a12.2 for ; Mon, 23 Mar 2026 13:13:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774296793; x=1774901593; 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=iFi8aoHCvHDcD5YBbZdBFmik9S7MrX8p/en9vgMxupI=; b=dWOebm+MY4mYFHddn0uBWhIwa9tJCm0yJLasqUwncgYgEfWfvMKzLImWfYzei416WX P7yexKuGyO061Pdzc7dN0ilNtAkVbJEaRu9Couwe0AM8UFzIQPBccHygMNDf8ZHxG30R lcuKukjqEWAPf/I9aanc+VAYTe8H+9uKgW73npSLF+f+gxBONSUXGrSLgFW8FRpGM0B0 RAg86G5EH9JQmFpOyFvz9ehRC2aRfMpoewEBUN4D0OHOJAnc9z+Em73nfQ4Du8CqVHhM eodyzVVbfvZvvfBZB9ZuIIR80pehV7GCv+scvhJ9cAbBGfVbQX4VFBco00LlMHWBhec1 9NZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774296793; x=1774901593; 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=iFi8aoHCvHDcD5YBbZdBFmik9S7MrX8p/en9vgMxupI=; b=JKy9szoaEGyTNUojb5YRuU+hL19ysDnt7Nx4rEhmH0vTEdBOiErFVesuuh8nA6Uij1 SKPXBryFwSpt+MWrOSij3MoTLIcxkqLl/BIbJBpCfFJDvCPO9KJG8edGsZfQsPC7CVSU VprYbby2FcfJX5z5IXkUU5L2a9gAN4KOYDqryZ0J4zChbBts3GfTXiAteDkHWQMaRYme G+zPEXCjCKzkdokLTYjDibszlGNKuMIF1JE1fmyy3DxXEyQbbxVTkuxbOD23f8XwTiNM aGTx1lG32dDZ9x/DFGLWPZqf4n9/SUDi17dP6ITojQ/FY1OnGj3yPrsFi4wpagypyUDO SbcQ== X-Forwarded-Encrypted: i=1; AJvYcCWfIb95Zn1/Yfz1crCJzgxse4k6NiA3QVHS1RDRcBpTEuieVb5fdkuqNtNRdPYrAR1W9FU8SYtG70iKH9o=@vger.kernel.org X-Gm-Message-State: AOJu0YxhmH+qpkOh7QRoGI53Y2WPB2IJjLMuqgOjkvRwvLHOt2ihep+p IUt/pRaLVdbMRHTG8KQnzf6BVf2QcHFBrUcsjbD/Is1i7pckA176N/vq0ISGJEZNK8zUyW1EvHd lsepxfFg14NN4I/gTwn1lJVWLuYduBVMUlHC+NBDxi5ML5DV/8IWZZ+1/y3v0irwOHqw= X-Gm-Gg: ATEYQzzCPMkkxsOFRJ6kqkkYLdNjb3eGCH2v0d9ymuNUfLBSBWtz1PlHMmOXmLnvNV0 RBj0GrtMn/CKZ6gENymUYC9KS5iBzlXPe7ZaFXEqURCjpiSYMbtxX+Ryp4/IE+Ujm5E4TVloLZg T0IgQ81D+rBYtK69LZLds/tQQF2OF+KvNCrrcIByB6itoM9NwkFryeqZxFMr34FM7yMp3OePRqa ZwujJIqyDShqFYY5lqCOgcQOetWmUZUiCSJfm44jw5es71Kt+801W0Rz0HeUgW7FSlIILqIt1p9 bR1qJsF5yrTFqbDFnOT4m5JYPwenxLRD6M9KTxc1n0/MEQe+ulS9olOnnR2vPnakFYxgpldVLq0 tQQbFUNfHyrnsW7ySyoMGXyXw99jiw+Lx9t674dWRVr35yg== X-Received: by 2002:aa7:8ed2:0:b0:82a:1529:2b4f with SMTP id d2e1a72fcca58-82a8c35758cmr8866478b3a.44.1774296793137; Mon, 23 Mar 2026 13:13:13 -0700 (PDT) X-Received: by 2002:aa7:8ed2:0:b0:82a:1529:2b4f with SMTP id d2e1a72fcca58-82a8c35758cmr8866464b3a.44.1774296792639; Mon, 23 Mar 2026 13:13:12 -0700 (PDT) Received: from hu-akhilpo-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0409d148sm9510738b3a.29.2026.03.23.13.13.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 13:13:12 -0700 (PDT) From: Akhil P Oommen Date: Tue, 24 Mar 2026 01:42:18 +0530 Subject: [PATCH 06/16] drm/msm/a6xx: Use barriers while updating HFI Q headers 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: <20260324-a8xx-gpu-batch2-v1-6-fc95b8d9c017@oss.qualcomm.com> References: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> In-Reply-To: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> To: Rob Clark , Sean Paul , Konrad Dybcio , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Marijn Suijten , David Airlie , Simona Vetter , Antonino Maniscalco , Connor Abbott , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Akhil P Oommen X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774296753; l=1974; i=akhilpo@oss.qualcomm.com; s=20240726; h=from:subject:message-id; bh=1ajLVoslkBTv41Sp8G4luxsz7Te6eYrrZtKsz0zxR/0=; b=fMD8o5dT8SsxOVs4k4rWFPgLkKIR8YU77uqDQ0DMUTmim9gm/FgM8cMODWImekNXWofrA88+w e0f5Cwsu1g7BsVGQC1TXcmqh/guEntf0zGyTwt2ln78P0OQd5K3Jkww X-Developer-Key: i=akhilpo@oss.qualcomm.com; a=ed25519; pk=lmVtttSHmAUYFnJsQHX80IIRmYmXA4+CzpGcWOOsfKA= X-Authority-Analysis: v=2.4 cv=VvUuwu2n c=1 sm=1 tr=0 ts=69c19eda cx=c_pps a=oF/VQ+ItUULfLr/lQ2/icg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=3WHJM1ZQz_JShphwDgj5:22 a=EUspDBNiAAAA:8 a=h6CQE6Wve-Y6OpkwRbYA:9 a=QEXdDO2ut3YA:10 a=3WC7DwWrALyhR5TkjVHa:22 X-Proofpoint-GUID: RVp4BiFDe48uJwZkr9TLiXGBrqfmcNfq X-Proofpoint-ORIG-GUID: RVp4BiFDe48uJwZkr9TLiXGBrqfmcNfq X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE0OSBTYWx0ZWRfXyxYAaEk3U9ci 2by6MaT07xsI1AaRlXEZwIbUA76I80UU7mpkUf7jdPExshxpValW+8TRqsZ7MljolclP7YVbHAr 6BXVKcylaFvgkfDrT/mlfewRLZHStwn/UAQXkJiE3cpMA1x7Y99xX3yuQ/XXJUfvHZvplQWv/AI 7lVE2k7Zn2X6qBpiLM1GE8QkyGlj/Ku2Nq5rcGfkx4+lj3kOx0arh/UqoRmbLrwif/05XzMgFI/ 8MJgZoADSZj2GnAq7wQUhpD57K9s/zAfJHN0oXnBmQl/h5upG0l+nsyk/LdWqTSFMUlARCy6wX7 60BhEHXPx83V4uG8LImvrkzYYp/kUA3tyYCJI0H4ZoBZ7rLOc0uxRsQZ+taKappBMj/fuYaeBa2 xDoAr/V8iw7RfbuyVdLp3FPW80/b8rU3/BxbVfd/v7Z5qmysSDnOhIwDVdOBX6ZxsLsVTQumrXG 93fJ8LNLDUNhplGdw9w== 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-23_05,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 malwarescore=0 spamscore=0 adultscore=0 lowpriorityscore=0 impostorscore=0 bulkscore=0 clxscore=1015 priorityscore=1501 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230149 To avoid harmful compiler optimizations and IO reordering in the HW, use barriers and READ/WRITE_ONCE helpers as necessary while accessing the HFI queue index variables. Signed-off-by: Akhil P Oommen --- drivers/gpu/drm/msm/adreno/a6xx_hfi.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_hfi.c b/drivers/gpu/drm/msm/ad= reno/a6xx_hfi.c index 2daaa340366d..aef00c2dd137 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_hfi.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_hfi.c @@ -34,7 +34,7 @@ static int a6xx_hfi_queue_read(struct a6xx_gmu *gmu, struct a6xx_hfi_queue_header *header =3D queue->header; u32 i, hdr, index =3D header->read_index; =20 - if (header->read_index =3D=3D header->write_index) { + if (header->read_index =3D=3D READ_ONCE(header->write_index)) { header->rx_request =3D 1; return 0; } @@ -62,7 +62,10 @@ static int a6xx_hfi_queue_read(struct a6xx_gmu *gmu, if (!gmu->legacy) index =3D ALIGN(index, 4) % header->size; =20 - header->read_index =3D index; + /* Ensure all memory operations are complete before updating the read in= dex */ + dma_mb(); + + WRITE_ONCE(header->read_index, index); return HFI_HEADER_SIZE(hdr); } =20 @@ -74,7 +77,7 @@ static int a6xx_hfi_queue_write(struct a6xx_gmu *gmu, =20 spin_lock(&queue->lock); =20 - space =3D CIRC_SPACE(header->write_index, header->read_index, + space =3D CIRC_SPACE(header->write_index, READ_ONCE(header->read_index), header->size); if (space < dwords) { header->dropped++; @@ -95,7 +98,10 @@ static int a6xx_hfi_queue_write(struct a6xx_gmu *gmu, queue->data[index] =3D 0xfafafafa; } =20 - header->write_index =3D index; + /* Ensure all memory operations are complete before updating the write i= ndex */ + dma_mb(); + + WRITE_ONCE(header->write_index, index); spin_unlock(&queue->lock); =20 gmu_write(gmu, REG_A6XX_GMU_HOST2GMU_INTR_SET, 0x01); --=20 2.51.0 From nobody Sun Apr 5 16:48:06 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 4EED23DFC7C for ; Mon, 23 Mar 2026 20:13:20 +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=1774296802; cv=none; b=UNo/eccpiJDjIK75SDg748OvmxAkC05P4kvwsKbbu/WkQZruEOcHlaZX+nYF/APQB8odBpCOGWuq/QidZ3ijv9ZHB+g3zxCUVPHFCR0dDD9VSVdqz9ibKrWW/z7xt2vjSZf0+iz2u5F2PqAOQ1PG/KZOWW5r36YqCltE9m6nsx0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296802; c=relaxed/simple; bh=nnupNIOeLrMXfkuUyA2tcvNb3mffh+T80cPwHVdQi3c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XEsde/bAOHJS2JWG9ide8Stjk0qjhMBXGBXL5/np2pvd4B2O1eFht9Pa3a05/ZUEQRIPsBFEgXnPpdDLOnoz0kNrS4ltE+A4klxn5ja8uTLuQ0TBZDm7IAOm9GXb/pdukV/80npiT4O1JkhGJiUdhhzhxS1iD7QuJhDqVYt8HJs= 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=GWO6czEO; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=XaYtVc2Z; 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="GWO6czEO"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="XaYtVc2Z" 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 62NHrhC2620409 for ; Mon, 23 Mar 2026 20:13:19 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= s55BbPd47G4U0MWootUpuQFOjqvge2EChb3luzG9YmY=; b=GWO6czEOxZHUTfuP izJhaXgEvot5as2nB1ugMTX7VRUAaZ0xW15h4Q1YgYjKdPr5SDmz99OD6XY7fR+L XaSmUX9gynnYxEWCKh6q0O8DdgW2BwAi5hBRbYEeyv9VveKBpvK1slDOIqqra14m GkqqDDATh8nFpUOI9Ioz5qBZrVZFiSE/IIs9OLpVYcIzDCaFUY29XxxHudg7EkJs GE6z4xnk+cAE2VIf1eD5f7V/L6rhsimeqyeVr2GBnpRAqzzso+41Tfd/S9axdsLH 67RWgW/paAgsjl2P+4RZ+jy4WW5v/kInVwQxEkD4bBSaavnxOuoXYW7+Kl6JUsam j4vbBA== Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d31jgjkg2-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 20:13:19 +0000 (GMT) Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-82a820305c1so392293b3a.0 for ; Mon, 23 Mar 2026 13:13:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774296799; x=1774901599; 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=s55BbPd47G4U0MWootUpuQFOjqvge2EChb3luzG9YmY=; b=XaYtVc2ZN+xeLloSG4Zsbj+4e8S0HwS5+xCKeWhgSyvAmWQ+zZAHq+YHhpXrMYrtxD fFkCN/jGxRB+/HiMtKRCnREKaSzOMApSKpExyAOYtEuJvZxfx6kDdV7pGoa/GEQ5LHMQ MMZunu+H1e5J83NeigZizDWf2Zm4pf/xpIGjeqrBuuvafUubpG/0Ekvewb3sAWSE8nM/ UCqussxmxtU80fQU5KXnYkC/6zOVh87WeCiy3W6kOmApsdt7GavngBsnFs5X0zFJYxYP dpT11Munyvw8waqwhYzYV6mFdwSd4ck0lx2n2GWEpbpyn/DfROBocWiywQWrLC5UBvep Fc4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774296799; x=1774901599; 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=s55BbPd47G4U0MWootUpuQFOjqvge2EChb3luzG9YmY=; b=FNuxtZsQQZ61ZBGHux3sqqLmJ8QNQX7Mouy3tKqZlZ/WKJrU8U/mM+eec6i7QmVA+/ rPOqMXIKAHeZ+7e3jbDMkmFhbQh3786Gr+LC6Zje/1murd/ZghBdmUJBWheskXcCl8vV 4+wANsqtxkAfXGqdGJM+apvEE21HVkKX02UZEvDbN44xiDBHd3t0/TKsDLmR+wdYGqhK gMsybdi8rsxYyHCtoRy01ZhxQN2XYObRxaHjnIrIESOycKL9nmVwvVUBAX1hMYdF6rLq pw1wZn49l1DvnrxkJNGo1KYonVfsj4kX0xJchxPVFF7TFtSY6P2IKr9BrE1JNSOwg0SO mKSw== X-Forwarded-Encrypted: i=1; AJvYcCVlarQT1WKTrekZkE7b6Y+8Ys3CSaUi5mGSER8IqVGWwx2kBLAVUkmlcei7ljFEKRok+HUS7p3IWfl22WY=@vger.kernel.org X-Gm-Message-State: AOJu0YycIM6kptMNFmA8VTVur32J9JqZXYtw/XkS7iPAr7B6bnSXGU/+ S9GQ/mbo34HGI5gH+44ANscZiQl2uV7DvYCVwuEN1NLTSzPPlSKblSy/Fm812aeUrVCQv3MQNy3 3xGNqxzsxJqXHIFN82WzQC3wptIJ9UNCludV2iGqF7W6S5p6hkcfq/+fMAAfxtWNd9nk= X-Gm-Gg: ATEYQzyTlslbhrCYN+s7CUGl5dXYqKBvVaRz6iOLXu6RGfL5riCtKxhVt0taeX4Falv VXR3y1XWlVyc0IEeSMqGoNxsjOKt//UNBhRNGYthE6JWg0V6OFnQJEVqeYVe/yt+HBObCM+szod xS0M8ENd9UljZynaAYv1bVrOJWF2hysZQcscWgqv3NB7Ok4I7SAXRmHyYzedRZ54DWjHW2fRjrB bBxXb88rKud9RwPF7Z17cmXWyComxBHF1tpKxTIQgx8HWIwYYpaf5fHJ4keprDO/HS8sZcveIl/ lmMoboY9X/oQcyq7QCzM+Z3ankn1IMvwTjTa49Gq+vpchz3YktC1s7uNckkTY1Pz3pdjX5/yFb9 7NXgm3RU8CQIeYisPexR3JAjHNRZnWP++4NtkjlVdRnfkhQ== X-Received: by 2002:a05:6a00:1707:b0:82a:6461:6d1e with SMTP id d2e1a72fcca58-82a8c392393mr11129958b3a.46.1774296798790; Mon, 23 Mar 2026 13:13:18 -0700 (PDT) X-Received: by 2002:a05:6a00:1707:b0:82a:6461:6d1e with SMTP id d2e1a72fcca58-82a8c392393mr11129922b3a.46.1774296798223; Mon, 23 Mar 2026 13:13:18 -0700 (PDT) Received: from hu-akhilpo-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0409d148sm9510738b3a.29.2026.03.23.13.13.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 13:13:17 -0700 (PDT) From: Akhil P Oommen Date: Tue, 24 Mar 2026 01:42:19 +0530 Subject: [PATCH 07/16] drm/msm/a6xx: Use packed structs for HFI 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: <20260324-a8xx-gpu-batch2-v1-7-fc95b8d9c017@oss.qualcomm.com> References: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> In-Reply-To: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> To: Rob Clark , Sean Paul , Konrad Dybcio , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Marijn Suijten , David Airlie , Simona Vetter , Antonino Maniscalco , Connor Abbott , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Akhil P Oommen X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774296753; l=3900; i=akhilpo@oss.qualcomm.com; s=20240726; h=from:subject:message-id; bh=nnupNIOeLrMXfkuUyA2tcvNb3mffh+T80cPwHVdQi3c=; b=wYEXOm/R6Vsxc4rBfrfyT9WUhx8CW/T2BOGGO+xofnEJDCbPmC1wyW81635C1kRzkWrzKXy7u JYNCqh7a/gdBW5mk2jJTJvHPIghQWautFCviH27ZFJuilb3Nhxx5u75 X-Developer-Key: i=akhilpo@oss.qualcomm.com; a=ed25519; pk=lmVtttSHmAUYFnJsQHX80IIRmYmXA4+CzpGcWOOsfKA= X-Proofpoint-GUID: uws0PhzIny0itPlDnKTu-_MVTH-Y_XPH X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE0OSBTYWx0ZWRfXxaeUENSekAlE r2uSyZ6SwtL6SaUG7vBxJEfJsvAmRdgTuJYYKAzWzBhHa24A6W5onnFqiyTxd+XRXOOYoN3Kkgw VuBS/46E+xkNTJiP6sxB4njtWBkD0SgUijAL9Euhb3/hfsiYsezfs2lqt/NIVtRr/35i80FnYV8 z/VmJEwdgNf+HiA5vOIEqPfTeQ8Z0qZ+jQr8xr1BK3MEjS6iOml6ttn40yQlAjUeuybvQQhj1mb lzo7K5LJrNZu3DttlmH8RXdKrjumeuYK8zqRvGxrmtqClL/Dxqu5b+3yxqoA9qpoCeHjLlxpmbd xAtuSbewvA8AP+cpZrWe8WtZwIp6zC5ZFMG4EK3LOn8BQLrqjjKDhELV8Y+Y+YZogxG20vgywqD bYijjdISPr8zWiJvaAoTB4R9bEQOb9B1LYU1tIm8UfMGjBWp8R1/fPs1gvg4Naq8vyox6mm+7qB blR1CXkdtaiND3wpf9A== X-Authority-Analysis: v=2.4 cv=CMInnBrD c=1 sm=1 tr=0 ts=69c19edf cx=c_pps a=mDZGXZTwRPZaeRUbqKGCBw==: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=ArFqxpKCfli7nxZMP-sA:9 a=QEXdDO2ut3YA:10 a=zc0IvFSfCIW2DFIPzwfm:22 X-Proofpoint-ORIG-GUID: uws0PhzIny0itPlDnKTu-_MVTH-Y_XPH 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-23_05,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 clxscore=1015 malwarescore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 spamscore=0 phishscore=0 impostorscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230149 HFI related structs define the ABI between the KMD and the GMU firmware. So, use packed structures to avoid unintended compiler inserted padding. Signed-off-by: Akhil P Oommen Reviewed-by: Konrad Dybcio --- drivers/gpu/drm/msm/adreno/a6xx_hfi.h | 40 +++++++++++++++++--------------= ---- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_hfi.h b/drivers/gpu/drm/msm/ad= reno/a6xx_hfi.h index 19f6eca2c8c9..217708b03f6f 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_hfi.h +++ b/drivers/gpu/drm/msm/adreno/a6xx_hfi.h @@ -13,7 +13,7 @@ struct a6xx_hfi_queue_table_header { u32 qhdr_size; /* Size of the queue headers */ u32 num_queues; /* Number of total queues */ u32 active_queues; /* Number of active queues */ -}; +} __packed; =20 struct a6xx_hfi_queue_header { u32 status; @@ -28,7 +28,7 @@ struct a6xx_hfi_queue_header { u32 tx_request; u32 read_index; u32 write_index; -}; +} __packed; =20 struct a6xx_hfi_queue { struct a6xx_hfi_queue_header *header; @@ -74,7 +74,7 @@ struct a6xx_hfi_msg_response { u32 ret_header; u32 error; u32 payload[HFI_RESPONSE_PAYLOAD_SIZE]; -}; +} __packed; =20 #define HFI_F2H_MSG_ERROR 100 =20 @@ -82,7 +82,7 @@ struct a6xx_hfi_msg_error { u32 header; u32 code; u32 payload[2]; -}; +} __packed; =20 #define HFI_H2F_MSG_INIT 0 =20 @@ -92,27 +92,27 @@ struct a6xx_hfi_msg_gmu_init_cmd { u32 dbg_buffer_addr; u32 dbg_buffer_size; u32 boot_state; -}; +} __packed; =20 #define HFI_H2F_MSG_FW_VERSION 1 =20 struct a6xx_hfi_msg_fw_version { u32 header; u32 supported_version; -}; +} __packed; =20 #define HFI_H2F_MSG_PERF_TABLE 4 =20 struct perf_level { u32 vote; u32 freq; -}; +} __packed; =20 struct perf_gx_level { u32 vote; u32 acd; u32 freq; -}; +} __packed; =20 struct a6xx_hfi_msg_perf_table_v1 { u32 header; @@ -121,7 +121,7 @@ struct a6xx_hfi_msg_perf_table_v1 { =20 struct perf_level gx_votes[16]; struct perf_level cx_votes[4]; -}; +} __packed; =20 struct a6xx_hfi_msg_perf_table { u32 header; @@ -130,7 +130,7 @@ struct a6xx_hfi_msg_perf_table { =20 struct perf_gx_level gx_votes[16]; struct perf_level cx_votes[4]; -}; +} __packed; =20 #define HFI_H2F_MSG_BW_TABLE 3 =20 @@ -145,13 +145,13 @@ struct a6xx_hfi_msg_bw_table { u32 cnoc_cmds_data[2][6]; u32 ddr_cmds_addrs[8]; u32 ddr_cmds_data[16][8]; -}; +} __packed; =20 #define HFI_H2F_MSG_TEST 5 =20 struct a6xx_hfi_msg_test { u32 header; -}; +} __packed; =20 #define HFI_H2F_MSG_ACD 7 #define MAX_ACD_STRIDE 2 @@ -163,13 +163,13 @@ struct a6xx_hfi_acd_table { u32 stride; u32 num_levels; u32 data[16 * MAX_ACD_STRIDE]; -}; +} __packed; =20 #define HFI_H2F_MSG_START 10 =20 struct a6xx_hfi_msg_start { u32 header; -}; +} __packed; =20 #define HFI_H2F_FEATURE_CTRL 11 =20 @@ -178,14 +178,14 @@ struct a6xx_hfi_msg_feature_ctrl { u32 feature; u32 enable; u32 data; -}; +} __packed; =20 #define HFI_H2F_MSG_CORE_FW_START 14 =20 struct a6xx_hfi_msg_core_fw_start { u32 header; u32 handle; -}; +} __packed; =20 #define HFI_H2F_MSG_TABLE 15 =20 @@ -193,7 +193,7 @@ struct a6xx_hfi_table_entry { u32 count; u32 stride; u32 data[]; -}; +} __packed; =20 struct a6xx_hfi_table { u32 header; @@ -202,7 +202,7 @@ struct a6xx_hfi_table { #define HFI_TABLE_BW_VOTE 0 #define HFI_TABLE_GPU_PERF 1 struct a6xx_hfi_table_entry entry[]; -}; +} __packed; =20 #define HFI_H2F_MSG_GX_BW_PERF_VOTE 30 =20 @@ -211,7 +211,7 @@ struct a6xx_hfi_gx_bw_perf_vote_cmd { u32 ack_type; u32 freq; u32 bw; -}; +} __packed; =20 #define AB_VOTE_MASK GENMASK(31, 16) #define MAX_AB_VOTE (FIELD_MAX(AB_VOTE_MASK) - 1) @@ -224,6 +224,6 @@ struct a6xx_hfi_prep_slumber_cmd { u32 header; u32 bw; u32 freq; -}; +} __packed; =20 #endif --=20 2.51.0 From nobody Sun Apr 5 16:48:06 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 EB67938837A for ; Mon, 23 Mar 2026 20:13:25 +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=1774296807; cv=none; b=FFDlpSY/JjPQUNkiRqg/t/MW5YmCAfFsc0F8uQdvfOmOr3guEEYm5VNWKsZTZRl25SuACL87Qg24b6er/vtIKeCjIdwnV+wfd6JI5ySuSP5b4HAN9O1AWl1tLjE8fGEOS1JBihTy1Y/Q35WZyahbmMGLpIVB6D081011ko7oIZA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296807; c=relaxed/simple; bh=4zxAWIYbFGPJZdqzNURHE7IGPmYkkyOAYwc4ePuq8iY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VNXKcFGk3/fcToliO7qHlHGSiK9Y4+wfw2EnSlWNqrAYJtLxdBU+9h2QwlaszLwN12WCYfdiOyhCFlTmuJEVoVcD6SL5RQV4fSrt386qbLJAWSB2q/ns2CU9Uxa1VNYjRUsBK9iusrbWD2pKPcXOITeYESjK6nXSqeGnqV2FdJ0= 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=X4M7XseU; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=Al8BOA9a; 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="X4M7XseU"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Al8BOA9a" Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NHqYPk2971815 for ; Mon, 23 Mar 2026 20:13:25 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= +O6SQ5BKjVQu9nVs+GvS1a/KUjJBIyvuJGjIVMri3qY=; b=X4M7XseULhnwbuVK tMsA7hhB/c/oandTBDGtY7D0nVUGmhDQbcy2nuTmQ8Oj6Ti8dNyFsj3DWUh/Clzg UCvw+Rogu5C0wDr6gyMXao5zOe2Kv3kkvO5zct9gRH5CNxzna7xHIlpGi1XoHMDz JEwmQEgTRua7oqlsRxF/BlNcFwhTpOKHegolCHL87RhTr8KdGf/IaEg14Nutds4K qYQ+GKEiYD8AOl5fa2SGkmxnGB7zmllsjGfmI2KcyCx4rH4m8cKUNNv7N5zNrqaC 7BUY47NZZje+GmHU8P99M9IO5VIPQ8kpdL/jPyGuS3GK9ZH+oXlsHoW4TE8WIA9V tOV8Dw== Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d31jc2kyp-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 20:13:25 +0000 (GMT) Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-82a1436347eso316267b3a.2 for ; Mon, 23 Mar 2026 13:13:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774296804; x=1774901604; 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=+O6SQ5BKjVQu9nVs+GvS1a/KUjJBIyvuJGjIVMri3qY=; b=Al8BOA9a7OMlgxiMMsBY2jVdSNnDpOj/sFLyN4AIarzY7Q9MDd4ozx3n1qAGfA6cwL H6iDwxYgSRFK1XD6xduSfzAFbGoF0Yk9zL0DPNOx/+QX19T6t0BYWS1huDyveUrJEW17 l/LUq7+fdpJ4q03KB5gzLMeNyvD5Ymm5YM/F/dv5n//6HlFuzRe101Hlz+mqmLOCT++q uhji0VzsqrTANv1wQ7viuHJyeYjNV4/iOxkeQJZ9IPwdHHVTNHC+0RfD0dpt2k3ZDLb8 weXGwyr4Y/9nUMzc5K+ZZhnfBy4r+VsyOk0l5xpNlJJCTrQHtmZTnbtPHHJ6fStr6S+H Qmaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774296804; x=1774901604; 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=+O6SQ5BKjVQu9nVs+GvS1a/KUjJBIyvuJGjIVMri3qY=; b=sB7jjBawCYGLzE+kWUlyhfRNdzMmYcPgaqW7x2knB0s/pgaiMZexNYkJ7GzDPyYQQr pbweAjVmIFmEL0mCLSwNB5UhkFV0DAkX98v+JdhSB2c/sKsXNRDgOpqubkTVSVcGQWFD DI+4eXCa4rxyqwZqOEkR1cpA4xywNOIDgPiZ0wfA46zp0pzzfYP03rKxtIwuQRms66FG ysxORCX7v/okfKEATCYR35/TcjeWNbVMkegcqj8nTPoZBgUKdbmDEqJBwfhKXjz73FaR 7/Rr0b+bMq2mIKg5Vi6neroK427z5LiBIzLhp8uyTuA5WLUmwC1S9nhkeR6OFOqXQ6Qv c2SQ== X-Forwarded-Encrypted: i=1; AJvYcCWVOr545kbWB19HJTQf1BYPAiljPiSdLH6y9LM6EZB0IlU8clnWpeF6b2qapzg22IkqakXpGFrhSskcxDY=@vger.kernel.org X-Gm-Message-State: AOJu0YyfuTothjcBzckqZGhOWAr/P2IDQGat8g8RS6HEKsQgNmw3xf2M Qritv5H0yEU2H8i6BMhNGiumirF5Un40S2sMEFaMsfyqOU8aNbUb/lltHr/UVA6KSrBtRDeuPkF qYKzG+oaO6MZtmRtp1ur38ogyKvcVMh2H778nq0TE+cHSUTnAmWxMMCduUnUdRlaOZInvpwNZr6 w= X-Gm-Gg: ATEYQzy4VdZK87qZLLpaXqbO+OoazZahPlaV9CDrrbbRHVSPRInlN5iqkdym8O3EkRO khj54GfYOwYDRqAcImM54DokOnkDTxLFsConaqlo5tH1zomsNNG7bfXlpQ70UKavsvL0Iudd7dl MuqVTk6K7RLODoxIaVwwepN7eo8oi0bzY12Jj8zbx0JqGOYdGeZyrxzgw90JZGG0rqNv+C0PiWg mFnKFMbTne0D4O8NDseS2EzlOa488YDcpDliwcye9VAwnaoMkP2mlQYW9Neexq5rF+v6nCA7he1 b9He5zo/vyj+z3SgOIcU7N3q33va4brQjPu6kmH+SlAKYYiN7bpfxVDWwRiCDFvzOmWdBnM7ILW h5a6lIBYnDuVZ1uIB95zIjVQ6BTRn5vhUj19V9h98TsvX6A== X-Received: by 2002:a05:6a00:1a89:b0:823:1d10:cf04 with SMTP id d2e1a72fcca58-82a8c3b88cbmr10947679b3a.55.1774296804314; Mon, 23 Mar 2026 13:13:24 -0700 (PDT) X-Received: by 2002:a05:6a00:1a89:b0:823:1d10:cf04 with SMTP id d2e1a72fcca58-82a8c3b88cbmr10947651b3a.55.1774296803779; Mon, 23 Mar 2026 13:13:23 -0700 (PDT) Received: from hu-akhilpo-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0409d148sm9510738b3a.29.2026.03.23.13.13.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 13:13:23 -0700 (PDT) From: Akhil P Oommen Date: Tue, 24 Mar 2026 01:42:20 +0530 Subject: [PATCH 08/16] drm/msm/a6xx: Update HFI definitions 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: <20260324-a8xx-gpu-batch2-v1-8-fc95b8d9c017@oss.qualcomm.com> References: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> In-Reply-To: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> To: Rob Clark , Sean Paul , Konrad Dybcio , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Marijn Suijten , David Airlie , Simona Vetter , Antonino Maniscalco , Connor Abbott , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Akhil P Oommen X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774296753; l=5252; i=akhilpo@oss.qualcomm.com; s=20240726; h=from:subject:message-id; bh=4zxAWIYbFGPJZdqzNURHE7IGPmYkkyOAYwc4ePuq8iY=; b=a2Dz3Y6fr4jNZCH89Aek/iMsncePcji5TDTxjTMHmuU0EsB5iXbHSJaDp22+jrOYoWLH5zUN7 lj4JNars1x7CwhdiPOLG0SbUDOiZniv4z97wG9eBVf9BNa2LpXmLjVt X-Developer-Key: i=akhilpo@oss.qualcomm.com; a=ed25519; pk=lmVtttSHmAUYFnJsQHX80IIRmYmXA4+CzpGcWOOsfKA= X-Authority-Analysis: v=2.4 cv=fKc0HJae c=1 sm=1 tr=0 ts=69c19ee5 cx=c_pps a=WW5sKcV1LcKqjgzy2JUPuA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=EUspDBNiAAAA:8 a=wp9Eiz2YcQHRIHTaYAUA:9 a=QEXdDO2ut3YA:10 a=OpyuDcXvxspvyRM73sMx:22 X-Proofpoint-GUID: AJyc6VGUJpbeX8r25sukT-umuEYdMeyA X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE0OSBTYWx0ZWRfX4toGrgbRN7KZ 8glSJvbzAYLII6WTOkPutN+i2Q/ZJxFpSuDPYsC9esyAgREk5y3Acp5HU8qZaOcVB3RC5l0mTmK t124TmgvT5TNRtYDf2bVaNaay/bjHmfRLaK9UdqOh796agne6VKyK2zZ98cvl3uwPplMRPhSB8Q jw1X/u1dx+je7vSIwdcQu8ulP6nO7D7micvTwdcIC1saAPgWkQcN+coRoUukfbXwKs4BuUOfyvT U8Ic1rVRDUmYOCdIq8W02aHSRTUqZj2pZ31gPG4p4YG+ojPqtUiKxsJC0MkosuAkteBb73mTXmZ /A6Odnum1sPdnL9O3B1s2Q6yfCb6oTUYfEzdIOIVp8YqouiDjwnHjj5vXiv2M335Z8YZEJ6FFb6 V+Sbsmq9SHBu3VtlIsZs7BhLFzkYxankDybF4/vENs9Aifsfv3eKnHwJmhJ3cUS6rIsOwd583uS yKJMlXXOiznpRVgXcoA== X-Proofpoint-ORIG-GUID: AJyc6VGUJpbeX8r25sukT-umuEYdMeyA 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-23_05,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 priorityscore=1501 phishscore=0 lowpriorityscore=0 adultscore=0 bulkscore=0 spamscore=0 suspectscore=0 malwarescore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230149 Update the HFI definitions to support additional GMU based power features. Signed-off-by: Akhil P Oommen --- drivers/gpu/drm/msm/adreno/a6xx_hfi.c | 3 - drivers/gpu/drm/msm/adreno/a6xx_hfi.h | 113 ++++++++++++++++++++++++++++++= +++- 2 files changed, 111 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_hfi.c b/drivers/gpu/drm/msm/ad= reno/a6xx_hfi.c index aef00c2dd137..d613bf00e3f8 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_hfi.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_hfi.c @@ -851,7 +851,6 @@ static int a6xx_hfi_feature_ctrl_msg(struct a6xx_gmu *g= mu, u32 feature, u32 enab return a6xx_hfi_send_msg(gmu, HFI_H2F_FEATURE_CTRL, &msg, sizeof(msg), NU= LL, 0); } =20 -#define HFI_FEATURE_IFPC 9 #define IFPC_LONG_HYST 0x1680 =20 static int a6xx_hfi_enable_ifpc(struct a6xx_gmu *gmu) @@ -862,8 +861,6 @@ static int a6xx_hfi_enable_ifpc(struct a6xx_gmu *gmu) return a6xx_hfi_feature_ctrl_msg(gmu, HFI_FEATURE_IFPC, 1, IFPC_LONG_HYST= ); } =20 -#define HFI_FEATURE_ACD 12 - static int a6xx_hfi_enable_acd(struct a6xx_gmu *gmu) { struct a6xx_hfi_acd_table *acd_table =3D &gmu->acd_table; diff --git a/drivers/gpu/drm/msm/adreno/a6xx_hfi.h b/drivers/gpu/drm/msm/ad= reno/a6xx_hfi.h index 217708b03f6f..917b9c9e9906 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_hfi.h +++ b/drivers/gpu/drm/msm/adreno/a6xx_hfi.h @@ -165,6 +165,42 @@ struct a6xx_hfi_acd_table { u32 data[16 * MAX_ACD_STRIDE]; } __packed; =20 +#define CLX_DATA(irated, num_phases, clx_path, extd_intf) \ + ((extd_intf << 29) | \ + (clx_path << 28) | \ + (num_phases << 22) | \ + (irated << 16)) + +struct a6xx_hfi_clx_domain_v2 { + /** + * @data: BITS[0:15] Migration time + * BITS[16:21] Current rating + * BITS[22:27] Phases for domain + * BITS[28:28] Path notification + * BITS[29:31] Extra features + */ + u32 data; + /** @clxt: CLX time in microseconds */ + u32 clxt; + /** @clxh: CLH time in microseconds */ + u32 clxh; + /** @urg_mode: Urgent HW throttle mode of operation */ + u32 urg_mode; + /** @lkg_en: Enable leakage current estimate */ + u32 lkg_en; + /** curr_budget: Current Budget */ + u32 curr_budget; +} __packed; + +#define HFI_H2F_MSG_CLX_TBL 8 + +#define MAX_CLX_DOMAINS 2 +struct a6xx_hfi_clx_table_v2_cmd { + u32 hdr; + u32 version; + struct a6xx_hfi_clx_domain_v2 domain[MAX_CLX_DOMAINS]; +} __packed; + #define HFI_H2F_MSG_START 10 =20 struct a6xx_hfi_msg_start { @@ -176,6 +212,41 @@ struct a6xx_hfi_msg_start { struct a6xx_hfi_msg_feature_ctrl { u32 header; u32 feature; +#define HFI_FEATURE_DCVS 0 +#define HFI_FEATURE_HWSCHED 1 +#define HFI_FEATURE_PREEMPTION 2 +#define HFI_FEATURE_CLOCKS_ON 3 +#define HFI_FEATURE_BUS_ON 4 +#define HFI_FEATURE_RAIL_ON 5 +#define HFI_FEATURE_HWCG 6 +#define HFI_FEATURE_LM 7 +#define HFI_FEATURE_THROTTLE 8 +#define HFI_FEATURE_IFPC 9 +#define HFI_FEATURE_NAP 10 +#define HFI_FEATURE_BCL 11 +#define HFI_FEATURE_ACD 12 +#define HFI_FEATURE_DIDT 13 +#define HFI_FEATURE_DEPRECATED 14 +#define HFI_FEATURE_CB 15 +#define HFI_FEATURE_KPROF 16 +#define HFI_FEATURE_BAIL_OUT_TIMER 17 +#define HFI_FEATURE_GMU_STATS 18 +#define HFI_FEATURE_DBQ 19 +#define HFI_FEATURE_MINBW 20 +#define HFI_FEATURE_CLX 21 +#define HFI_FEATURE_LSR 23 +#define HFI_FEATURE_LPAC 24 +#define HFI_FEATURE_HW_FENCE 25 +#define HFI_FEATURE_PERF_NORETAIN 26 +#define HFI_FEATURE_DMS 27 +#define HFI_FEATURE_THERMAL 28 +#define HFI_FEATURE_AQE 29 +#define HFI_FEATURE_TDCVS 30 +#define HFI_FEATURE_DCE 31 +#define HFI_FEATURE_IFF_PCLX 32 +#define HFI_FEATURE_SOFT_RESET 0x10000001 +#define HFI_FEATURE_DCVS_PROFILE 0x10000002 +#define HFI_FEATURE_FAST_CTX_DESTROY 0x10000003 u32 enable; u32 data; } __packed; @@ -199,8 +270,17 @@ struct a6xx_hfi_table { u32 header; u32 version; u32 type; -#define HFI_TABLE_BW_VOTE 0 -#define HFI_TABLE_GPU_PERF 1 +#define HFI_TABLE_BW_VOTE 0 +#define HFI_TABLE_GPU_PERF 1 +#define HFI_TABLE_DIDT 2 +#define HFI_TABLE_ACD 3 +#define HFI_TABLE_CLX_V1 4 /* Unused */ +#define HFI_TABLE_CLX_V2 5 +#define HFI_TABLE_THERM 6 +#define HFI_TABLE_DCVS 7 +#define HFI_TABLE_SYS_TIME 8 +#define HFI_TABLE_GMU_DCVS 9 +#define HFI_TABLE_LIMITS_MIT 10 struct a6xx_hfi_table_entry entry[]; } __packed; =20 @@ -226,4 +306,33 @@ struct a6xx_hfi_prep_slumber_cmd { u32 freq; } __packed; =20 +struct a6xx_hfi_limits_cfg { + u32 enable; + u32 msg_path; + u32 lkg_en; + /** + * @mode: BIT[0]: 0 =3D (static) throttle to fixed sid level + * 1 =3D (dynamic) throttle to sid lievel calculated by HW + * BIT[1]: 0 =3D Mx + * 1 =3D Bx + */ + u32 mode; + u32 sid; + /** @mit_time: mitigation time in microseconds */ + u32 mit_time; + /** @curr_limit: Max current in mA during mitigation */ + u32 curr_limit; +} __packed; + +struct a6xx_hfi_limits_tbl { + u8 feature_id; +#define GMU_MIT_IFF 0 +#define GMU_MIT_PCLX 1 + u8 domain; +#define GMU_GX_DOMAIN 0 +#define GMU_MX_DOMAIN 1 + u16 feature_rev; + struct a6xx_hfi_limits_cfg cfg; +} __packed; + #endif --=20 2.51.0 From nobody Sun Apr 5 16:48:06 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 E59D83E1234 for ; Mon, 23 Mar 2026 20:13:32 +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=1774296814; cv=none; b=IiuPcVJQErUV+ywOf7SUceC6cZ4JgtZNGgaR7I5vklRoR/aj2bWv0JkS0gaKswVdZYqlFP4oF8bqiqyel8UwN1sqasNQlc8+BJtpow7UlM/NPLErN19DhKApzzD7woA2cmxwsabdYd5fsu4nr3CAXUma5WxG1v3dTK9a8m5wtIg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296814; c=relaxed/simple; bh=2QHtgMqo3TglD7zXCiFywppEZUI75kRalKuvSCgmedA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=L03QDf+jUEgJIZErgrUVrK4f0Kpdqj249H59bRk5I52tlFVhFr3t0TxVqZvcAAh3UnvKtc5YQLJi1Ylj5xqqDEZ4mpST01V7LU+/QuRHaLRxyEN7IWL1o7apu1FZnfy5dgQw5H3/qC4+ZWRGnc8ZAB4xTqgggb6W9tpCgaFmLzQ= 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=R5JcowfY; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=YeBRDlFH; 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="R5JcowfY"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="YeBRDlFH" 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 62NHqXrU3634275 for ; Mon, 23 Mar 2026 20:13:32 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= i/EFVjmIq4o0XB7IqAunb20T4qbIQzoB4f8t5D0bKME=; b=R5JcowfYpShE6HKi ZZtR1afU1moPbs6WD1t9iUwFQRgLbARvEKpBPk/qiTNEqARgCK12/Z7u+nK4LRpq +YfE/PVdhkZ8X+lFKL4JJb18cSQL3la56GGS4TiS1bCl6L7oUKZoNt3AgrTJyzu/ /jCCU5a+7x7AKKjKGGcR0D2gCcP88G/WeJzya8VOlSmFk3UWsNh/4pDsPaQUYsw4 xkrg2sGcmZ8/S/wfiOUQrQn90C3B7kpFgEwXZD/iuILIL+C7yMjIr4XsPQdbmRSW cUfx1Lu3uWHCatPXwmMnPKzVnkq2mpFd28aWa9ydl5vSokCNPf4o5sF2U0gJ7NFw H6n7ew== Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d34k4hwjy-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 20:13:32 +0000 (GMT) Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-829ba0e63e8so2746913b3a.2 for ; Mon, 23 Mar 2026 13:13:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774296811; x=1774901611; 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=i/EFVjmIq4o0XB7IqAunb20T4qbIQzoB4f8t5D0bKME=; b=YeBRDlFHw1/nYv+yV2qZRi3QuDeA8sP7XW6xrCtSmNhsCZ44U92MnKz/HP2Vhq+62v qFq/pQrzpK6siPRoWwaHbUGC89a5aFRUUfWwlmfg7RExJSZQkzxKRpUrHQklhZ3I95XO mZPipuMdKWHZ5Xw6kP4e8feq9mkODUn9yBDjaSqYvMbFW9F5INGXfyy9dT2ECTnIr4gx FhdiEQyFi6GXD3+RhGRQm90g3rIuXNptaH/LY4zZz1YH9VP9HuQwIszQxv1a5nn4UGvG gwRAxLnB0CJkOJYP16J2JYCdiNFuwzDhsIo5PptCiCmvni1jXYiCQ8BlZg29M06i9X+k 2Q4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774296811; x=1774901611; 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=i/EFVjmIq4o0XB7IqAunb20T4qbIQzoB4f8t5D0bKME=; b=VjBHAUamiF5SOsxUQXPptgRP/nM8nGv78qYhCWa4qV2kZcoAusU/VB2YdLs0hoQ8RQ GZSGjTnCfX0By5HI6YZsO9U6EKZeHtXALeCkbx52qXpZjcj9XZa3zD8G0lfOGLzUs6eZ R9t30J4HhJYBQdbdEay3Pi/eepk6vV+orMPh16AocXojOE2pC6uUaCvnVcJJJTeXSpEN F1FQbkm4Rq/ERI/hY6R+8dGBnpbuG8QSbKPnWui8jW93io7RwU0SSKYiDnwLVCvHopgz P2lez5uwV+SlzUMZ+zWBRVZkMz0U+V993GwAO57N2GtN7Oh27kSpUa+v26xNaboPSY/m 1xPQ== X-Forwarded-Encrypted: i=1; AJvYcCVI3cPhuiyi+/x77beHROaCBVvmtllp727mZIrbG9tLMkQCbJh3vkPaHfOm4k9L5+Ur6Rrdrbx3IbWQ+g0=@vger.kernel.org X-Gm-Message-State: AOJu0YwQC60sQoUoohip6mfp6QIKLkKKudEpj5dz8aq4NizH1oMdyLVz DXE06wuRMZ8pWBrhle2+V473atFCJbuB26DHh5I7eggu9OiyaeviqBmNaMM7rbl4FLHvaYDGsjH oBhXdUEsJ0LBMv+wWVp5MGeHsMqoJU2MXpu0y/N4dKx0pxkqsXH2bMoptCFGIYIEpF18= X-Gm-Gg: ATEYQzwdcIbv6lD87DtEe2L6ITPxwijXH32hLRQeUKEwlSnmOQ0BkG1IGvY2sqtTgdv PqtD+7B2rlHC/ZwaaOqFnDQvS/sZGo212LvWJK+LJwt/LjorAEdqLHgv0EVbdiw/f3ZMRAOJsJu NNtuYXB3lyFEHEd5N4U/BQmdU9ZJ4o4672xEFIVP519JjbHw/divTCntTvEaWoFXEyhugYrYqm9 TaLot8sCjLMET856ZJSvgklfNeXTRSc+ya6LOm4FSgk5kt39t6MpLS21aXUO3S+3NzF91Wdkx5c H6eFB7l6tI+5RYTdY0pVModWHDTDfKQBwndxtuHvZZhiDEHyjbaLgFgYLAG5AOodDumx6ide0i7 2ffR9vP+KY1XFjAZ15ZpmD/DLQYCTz3IDyhtwLZbV1Jv1Qw== X-Received: by 2002:a05:6a00:1707:b0:82a:8163:4bfe with SMTP id d2e1a72fcca58-82a8c38da93mr10575919b3a.60.1774296811121; Mon, 23 Mar 2026 13:13:31 -0700 (PDT) X-Received: by 2002:a05:6a00:1707:b0:82a:8163:4bfe with SMTP id d2e1a72fcca58-82a8c38da93mr10575852b3a.60.1774296809650; Mon, 23 Mar 2026 13:13:29 -0700 (PDT) Received: from hu-akhilpo-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0409d148sm9510738b3a.29.2026.03.23.13.13.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 13:13:29 -0700 (PDT) From: Akhil P Oommen Date: Tue, 24 Mar 2026 01:42:21 +0530 Subject: [PATCH 09/16] drm/msm/adreno: Implement gx_is_on() for A8x 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: <20260324-a8xx-gpu-batch2-v1-9-fc95b8d9c017@oss.qualcomm.com> References: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> In-Reply-To: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> To: Rob Clark , Sean Paul , Konrad Dybcio , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Marijn Suijten , David Airlie , Simona Vetter , Antonino Maniscalco , Connor Abbott , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Akhil P Oommen X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774296753; l=6497; i=akhilpo@oss.qualcomm.com; s=20240726; h=from:subject:message-id; bh=2QHtgMqo3TglD7zXCiFywppEZUI75kRalKuvSCgmedA=; b=hquaopb4yfbmflNYOXExPzWdFx7cZL5F60eeWJy+fD6AopfspxA3QntDU/q/URSv5NPSWGMeF unE3v63PjiyDlPBks60CG219KYKk5i9OBmXmHMwdsjkpfZ3BiPXeHgD X-Developer-Key: i=akhilpo@oss.qualcomm.com; a=ed25519; pk=lmVtttSHmAUYFnJsQHX80IIRmYmXA4+CzpGcWOOsfKA= X-Proofpoint-GUID: 4XV8wOcDzKPBV3SfGMy41b1GcC4CIZlJ X-Proofpoint-ORIG-GUID: 4XV8wOcDzKPBV3SfGMy41b1GcC4CIZlJ X-Authority-Analysis: v=2.4 cv=c+imgB9l c=1 sm=1 tr=0 ts=69c19eec cx=c_pps a=mDZGXZTwRPZaeRUbqKGCBw==: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=wYauUFJWvglRPmXws0gA:9 a=QEXdDO2ut3YA:10 a=zc0IvFSfCIW2DFIPzwfm:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE0OSBTYWx0ZWRfX5D0gr4WGZ+R6 u9/NO/goehzifQKPd/TeY+26A7r5XJJBdHePrvEbg8uNFe5irD/mZsXTC0zhkRuVJsSV2IOwB0x m5Tre2Y601UpsCyvohC6Ms5bZ2vHkJLlR/t72JFu+zmdJv59oayOY1f2trDw9qv0GN5D7Grd26W e7dTXbGV77BNOw9H51qHg5K9ncekpUg7WibCkzSgGttrSUthXLLuBGVpTz2biU9umkf5f1wRp1E 01Sd40I6rhCa3lxHEmyVWfpBJ4DuY+iLrTOUvaH54be6OWfNY7HRheBO1DZuT9lyVuBJGb0AY+z lw87ujlWmHZ/+eUZ7K4UCVo9YMC2TGYYxvBQWDryCRnY7se1O/FnPuPPxSuLjrL9b6V51P4IFFL 3Mv4XXlBVPwb22wfyO0X1Er2zSGUG46u5Qmfc9qb5sV6OgpfUZEExYY2NLEGRwR13jSBMiwX6AT 0wnrJWF5422KR4enfWw== 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-23_05,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 impostorscore=0 phishscore=0 lowpriorityscore=0 spamscore=0 suspectscore=0 priorityscore=1501 bulkscore=0 adultscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230149 A8x has a diverged enough for a separate implementation of gx_is_on() check. Add that and move them to the adreno func table. Fixes: 288a93200892 ("drm/msm/adreno: Introduce A8x GPU Support") Signed-off-by: Akhil P Oommen Reviewed-by: Konrad Dybcio --- drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 25 +++++++++++++++++++++---- drivers/gpu/drm/msm/adreno/a6xx_gmu.h | 4 +++- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 6 +++++- drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c | 4 ++-- drivers/gpu/drm/msm/adreno/adreno_gpu.h | 1 + 5 files changed, 32 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gmu.c index 6d511dc54e43..cd6609bb66fe 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c @@ -91,10 +91,10 @@ bool a6xx_gmu_sptprac_is_on(struct a6xx_gmu *gmu) } =20 /* Check to see if the GX rail is still powered */ -bool a6xx_gmu_gx_is_on(struct a6xx_gmu *gmu) +bool a6xx_gmu_gx_is_on(struct adreno_gpu *adreno_gpu) { - struct a6xx_gpu *a6xx_gpu =3D container_of(gmu, struct a6xx_gpu, gmu); - struct adreno_gpu *adreno_gpu =3D &a6xx_gpu->base; + struct a6xx_gpu *a6xx_gpu =3D to_a6xx_gpu(adreno_gpu); + struct a6xx_gmu *gmu =3D &a6xx_gpu->gmu; u32 val; =20 /* This can be called from gpu state code so make sure GMU is valid */ @@ -117,6 +117,23 @@ bool a6xx_gmu_gx_is_on(struct a6xx_gmu *gmu) A6XX_GMU_SPTPRAC_PWR_CLK_STATUS_GX_HM_CLK_OFF)); } =20 +bool a8xx_gmu_gx_is_on(struct adreno_gpu *adreno_gpu) +{ + struct a6xx_gpu *a6xx_gpu =3D to_a6xx_gpu(adreno_gpu); + struct a6xx_gmu *gmu =3D &a6xx_gpu->gmu; + u32 val; + + /* This can be called from gpu state code so make sure GMU is valid */ + if (!gmu->initialized) + return false; + + val =3D gmu_read(gmu, REG_A8XX_GMU_PWR_CLK_STATUS); + + return !(val & + (A8XX_GMU_PWR_CLK_STATUS_GX_HM_GDSC_POWER_OFF | + A8XX_GMU_PWR_CLK_STATUS_GX_HM_CLK_OFF)); +} + void a6xx_gmu_set_freq(struct msm_gpu *gpu, struct dev_pm_opp *opp, bool suspended) { @@ -240,7 +257,7 @@ static bool a6xx_gmu_check_idle_level(struct a6xx_gmu *= gmu) =20 if (val =3D=3D local) { if (gmu->idle_level !=3D GMU_IDLE_STATE_IFPC || - !a6xx_gmu_gx_is_on(gmu)) + !adreno_gpu->funcs->gx_is_on(adreno_gpu)) return true; } =20 diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.h b/drivers/gpu/drm/msm/ad= reno/a6xx_gmu.h index dd0614b19aac..9a5464fa6a07 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.h +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.h @@ -10,6 +10,7 @@ #include #include #include "msm_drv.h" +#include "adreno_gpu.h" #include "a6xx_hfi.h" =20 struct a6xx_gmu_bo { @@ -231,7 +232,8 @@ void a6xx_hfi_stop(struct a6xx_gmu *gmu); int a6xx_hfi_send_prep_slumber(struct a6xx_gmu *gmu); int a6xx_hfi_set_freq(struct a6xx_gmu *gmu, u32 perf_index, u32 bw_index); =20 -bool a6xx_gmu_gx_is_on(struct a6xx_gmu *gmu); +bool a6xx_gmu_gx_is_on(struct adreno_gpu *adreno_gpu); +bool a8xx_gmu_gx_is_on(struct adreno_gpu *adreno_gpu); bool a6xx_gmu_sptprac_is_on(struct a6xx_gmu *gmu); void a6xx_sptprac_disable(struct a6xx_gmu *gmu); int a6xx_sptprac_enable(struct a6xx_gmu *gmu); diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.c index 897522778fd4..cdecd91094c6 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -1641,7 +1641,7 @@ static void a6xx_recover(struct msm_gpu *gpu) =20 adreno_dump_info(gpu); =20 - if (a6xx_gmu_gx_is_on(&a6xx_gpu->gmu)) { + if (adreno_gpu->funcs->gx_is_on(adreno_gpu)) { /* Sometimes crashstate capture is skipped, so SQE should be halted here= again */ gpu_write(gpu, REG_A6XX_CP_SQE_CNTL, 3); =20 @@ -2768,6 +2768,7 @@ const struct adreno_gpu_funcs a6xx_gpu_funcs =3D { .get_timestamp =3D a6xx_gmu_get_timestamp, .bus_halt =3D a6xx_bus_clear_pending_transactions, .mmu_fault_handler =3D a6xx_fault_handler, + .gx_is_on =3D a6xx_gmu_gx_is_on, }; =20 const struct adreno_gpu_funcs a6xx_gmuwrapper_funcs =3D { @@ -2800,6 +2801,7 @@ const struct adreno_gpu_funcs a6xx_gmuwrapper_funcs = =3D { .get_timestamp =3D a6xx_get_timestamp, .bus_halt =3D a6xx_bus_clear_pending_transactions, .mmu_fault_handler =3D a6xx_fault_handler, + .gx_is_on =3D a6xx_gmu_gx_is_on, }; =20 const struct adreno_gpu_funcs a7xx_gpu_funcs =3D { @@ -2834,6 +2836,7 @@ const struct adreno_gpu_funcs a7xx_gpu_funcs =3D { .get_timestamp =3D a6xx_gmu_get_timestamp, .bus_halt =3D a6xx_bus_clear_pending_transactions, .mmu_fault_handler =3D a6xx_fault_handler, + .gx_is_on =3D a6xx_gmu_gx_is_on, }; =20 const struct adreno_gpu_funcs a8xx_gpu_funcs =3D { @@ -2861,4 +2864,5 @@ const struct adreno_gpu_funcs a8xx_gpu_funcs =3D { .get_timestamp =3D a8xx_gmu_get_timestamp, .bus_halt =3D a8xx_bus_clear_pending_transactions, .mmu_fault_handler =3D a8xx_fault_handler, + .gx_is_on =3D a8xx_gmu_gx_is_on, }; diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c b/drivers/gpu/drm/= msm/adreno/a6xx_gpu_state.c index 018c164ad980..c0b9661131e8 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c @@ -1251,7 +1251,7 @@ static void a6xx_get_gmu_registers(struct msm_gpu *gp= u, _a6xx_get_gmu_registers(gpu, a6xx_state, &a6xx_gpucc_reg, &a6xx_state->gmu_registers[2], false); =20 - if (!a6xx_gmu_gx_is_on(&a6xx_gpu->gmu)) + if (!adreno_gpu->funcs->gx_is_on(adreno_gpu)) return; =20 /* Set the fence to ALLOW mode so we can access the registers */ @@ -1608,7 +1608,7 @@ struct msm_gpu_state *a6xx_gpu_state_get(struct msm_g= pu *gpu) } =20 /* If GX isn't on the rest of the data isn't going to be accessible */ - if (!a6xx_gmu_gx_is_on(&a6xx_gpu->gmu)) + if (!adreno_gpu->funcs->gx_is_on(adreno_gpu)) return &a6xx_state->base; =20 /* Halt SQE first */ diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.h b/drivers/gpu/drm/msm/= adreno/adreno_gpu.h index c08725ed54c4..29097e6b4253 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.h +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.h @@ -82,6 +82,7 @@ struct adreno_gpu_funcs { u64 (*get_timestamp)(struct msm_gpu *gpu); void (*bus_halt)(struct adreno_gpu *adreno_gpu, bool gx_off); int (*mmu_fault_handler)(void *arg, unsigned long iova, int flags, void *= data); + bool (*gx_is_on)(struct adreno_gpu *adreno_gpu); }; =20 struct adreno_reglist { --=20 2.51.0 From nobody Sun Apr 5 16:48:06 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 600EC3E121C for ; Mon, 23 Mar 2026 20:13:37 +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=1774296819; cv=none; b=L6elxBcVqbj5WXuzkwhTQ88xqqRaATHLJEa6hH2ssXetmbXPUS3q+bi/xqjhiimo4NFWiepr1UINQLZjjiDBHbtjG6pCnjLD4No8lpTaBEbGY7ifyHmik9q4JJ/ENTC+KZd+nOVey5uATh9PPOXDXrYJMMuBE5tDYb04mkXlzEI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296819; c=relaxed/simple; bh=LD258q8BiZPKjxboZZEHGa5/WJjqvZE6K1YLsrcGhkc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=C/I/ySCzwS2xLyRx6sLYzHY/TsTP4Mjk8rDcKYkQoIAft/DgRvUcjBGiC3bO8i0HaT25CgFfwLT11SIWaCj7fJHHoron7rJRLu6gjZ6sEhwm7Ue0mOBcNgZoXP5RZHEyjgKJKnUudXke3HO3nCIafb1QyWecyQlQ+CuP9clQ4K8= 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=V8Cd9pY4; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=UBhGDInc; 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="V8Cd9pY4"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="UBhGDInc" 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 62NHquhn618693 for ; Mon, 23 Mar 2026 20:13:37 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= 5Nx0bvZeW+J5SMSuTF/HVH8X59gK1KW+/QrWtuB3c54=; b=V8Cd9pY4PTTKTHJh hyt4Nv7QJjCmTsvKmac/P8ceMJdRg07YbWBu2pSVgIyUB/b/njN9F8thAAPXSUY7 sRUv9QM1PeRB242hDzKKwkb8r9jpf39j7NMkKlALVb7zpIpM9duB/HbHVXneWmJq /mvXWnpwowuRA97Wr9KTkUnYx/8tTR/J1UdWTAzp4sQZBNvv+O/yhH1h3VxhZFjD qyDf6J1pJREjZWqXjumv68FBpz9GrXPgHZVf2EtC4UUyurn7v0SZZRcShlGFo9Vr BV6TlWbR/aN2+I5262Kxpn/ttgageJW/3qd7GhSiWpfmm7JyEauMcMQnMN7fQAQk 49/6/g== Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d31jgjkh1-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 20:13:36 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-c70ea91bfe1so374891a12.1 for ; Mon, 23 Mar 2026 13:13:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774296816; x=1774901616; 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=5Nx0bvZeW+J5SMSuTF/HVH8X59gK1KW+/QrWtuB3c54=; b=UBhGDIncF01/x4bLVbxZgya4qXwFqUrbKRcnjPQWxIyLlQsU+cUBEyZqgi7vkPKPhJ HF945XMmkeCE1gF1ipgXdcseYICTURkX2yxg4qg3gBV8UAplwWSlc4nOtcdB8NpIPZyP J+t5eGJPbW+/qzr3+EzOTrrOzAme0eGmJIIQsKcVgqo7I0XW00+BsIZTCLDWnTzhadV5 lIPw7bklHxcKmPLEyoxbvU+phERElGZjPicpEP2zHXovALS4RQI5binEkEOe1cKqWq6m 5Hj+yuOg4SK2dxeSZRyvs9n1eG9QdfNf5ci4Gxwgpod/NzxAq5kzLwCXcuEljMSRqOdH yJbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774296816; x=1774901616; 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=5Nx0bvZeW+J5SMSuTF/HVH8X59gK1KW+/QrWtuB3c54=; b=PJWFq46MVKbZkJjxnw5dH3NnO6KzCrcXgt2HOhLRFYQgsAtsKUdFv1Z+mmMtfBoQn5 oq+v4uaX/wEC43utWevfpzweHd7Qw9YCru6RB0n1BrsynFpSwTDojHCveq1xLGcgpEEH eCqbFWsQfTnbJ5s7jwJs9PhcK3rUHAxN1zTgeS4FbtjgRqAlRj1m+g9KTSQScleAavJX 2KIn4MGCNKeNUKa+n6Ai6BRQL3qmFlcH+ulZ9IuM0O6HCjJxlHWF1khcLYcl712qRxp0 bJYm6/03WcLXFppjLHjtvQqmCu+s8m5HEpWJfHTiy4T5Nf/P+EIfCa5bjUIAwScKjStm FFIQ== X-Forwarded-Encrypted: i=1; AJvYcCWoKRGLlez980RgDB3cxCe3dKVkb89rQPMzafU2bdgNFyT/ibxY+GOOH18zewPOrpQyh9uoH1eLS+FvOXY=@vger.kernel.org X-Gm-Message-State: AOJu0YxYLQq3top4U7Jp/onuPp5e+/ojstc9fwlX3xIrcHjloqFIpGzj 4er+0DYxQH05/9/Ac8IAlGSLT2IorFO6WArhyCW2Wlpu6G08+Jx+54JG90UyaF91lEYY/8KVNyd FhboWmc7JFumO64nF2OH5ZpZLOwquulAs0kpyfx2Ulbf01FbsARLN34A5Xtb9Od7A4wc= X-Gm-Gg: ATEYQzy76CpcxvUYoP3q7/UEjDpjtpv/ktz+yR8kvlgjvCZWUonPXxwxHdZvs84IanI Ut/OOdCU+T6Mg+w6FdA4aBC42Vii9CHhDKNjtAYL/clgrcur4J3juHXGVrkXltJ9NQ7htr6HlG7 dQQcjjmHIwfDyZhLd5cpH3mkuEfwnzv3bvOpuqs3dSJVecTn1mCfnPBsqrRQjO0JCHpqQgqqSzh QRF4hP5Fjyy+OlDFSvBngUQ5cwfUbPU7SWNSKf8ffc7QSyAcnYs7K0aUQgFTEMrbuM//b+7tyf8 IXubZezciJVXqskaSC/24JvTefX9684FfO/+SYCkicv3LOihl5nKtC2QsWBzZMzIh4mE0W5K5mO w/2norxqmwU54Gy9mSeABqWYXWDz43AJlAJ0NyNZcTDYSOw== X-Received: by 2002:a05:6a00:3a20:b0:82a:75be:d371 with SMTP id d2e1a72fcca58-82a8c346991mr12354206b3a.29.1774296815936; Mon, 23 Mar 2026 13:13:35 -0700 (PDT) X-Received: by 2002:a05:6a00:3a20:b0:82a:75be:d371 with SMTP id d2e1a72fcca58-82a8c346991mr12354184b3a.29.1774296815364; Mon, 23 Mar 2026 13:13:35 -0700 (PDT) Received: from hu-akhilpo-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0409d148sm9510738b3a.29.2026.03.23.13.13.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 13:13:35 -0700 (PDT) From: Akhil P Oommen Date: Tue, 24 Mar 2026 01:42:22 +0530 Subject: [PATCH 10/16] drm/msm/a6xx: Fix gpu init from secure world 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: <20260324-a8xx-gpu-batch2-v1-10-fc95b8d9c017@oss.qualcomm.com> References: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> In-Reply-To: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> To: Rob Clark , Sean Paul , Konrad Dybcio , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Marijn Suijten , David Airlie , Simona Vetter , Antonino Maniscalco , Connor Abbott , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Akhil P Oommen X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774296753; l=6048; i=akhilpo@oss.qualcomm.com; s=20240726; h=from:subject:message-id; bh=LD258q8BiZPKjxboZZEHGa5/WJjqvZE6K1YLsrcGhkc=; b=6KkTxybuGhFG4MhRzfOXNucn9U+wGV8/nNzkWUSQhiMxHGniBVMxN4cnk3SHxU9/uhPL0PuvO A1QiAsvhfIWANIqqU1fgKZX/XHBSPPkejkcoW/V9X1MMP1LWR2YWQxD X-Developer-Key: i=akhilpo@oss.qualcomm.com; a=ed25519; pk=lmVtttSHmAUYFnJsQHX80IIRmYmXA4+CzpGcWOOsfKA= X-Proofpoint-GUID: 7BSjW4nbQBbAFVMKuf7EdY8ulyItZmo5 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE0OSBTYWx0ZWRfX2SharPUI+iyX VU/CgXzWGCllSohO/QtkhAOluckok74R4WQkoLw+eBdqs9tB/FsCU1LeIhqBEqtXJUGSNKfRVTq xth5NwbLiQT4g4xp5bEa7zcouphplzMNWhqRduyO68KctFp95v8Pia2Z8X8Byxi/WdOUvV8xf7f EzV9pDqim47BwWL+PlOxdr3zuEeyqdH7SV86cecrpKT023k9m9YrN0q3yOtGgvYB22xpJEQaG7i /Mlx17e8H7SHd+BTm2Mg3/vm5NrGCmiQX0sMf8uX7jFOXu5xJB+cetpjH40O8N4uEnoXtwZJeAM ii6SlVLvyab6EpE2/VC4J6OwHIg19Jbb78c4htfjJ0bcx8axu5hCdWjw2yCg0d1De1T4wvIJPWd 35WeZu3lHyPfcj1Xvhinoe7Cps0yPENdpL+Fb4rPfM24ecq2aiWPTTQAgS15YY80agHVysdapG2 DapzxLkFi34WJnNVXhg== X-Authority-Analysis: v=2.4 cv=CMInnBrD c=1 sm=1 tr=0 ts=69c19ef0 cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==: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=BkmLZa_BGXOvOyRCPiUA:9 a=QEXdDO2ut3YA:10 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-ORIG-GUID: 7BSjW4nbQBbAFVMKuf7EdY8ulyItZmo5 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-23_05,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 clxscore=1015 malwarescore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 spamscore=0 phishscore=0 impostorscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230149 A7XX_GEN2 and newer GPUs requires initialization of few configurations related to features/power from secure world. The SCM call to do this should be triggered after GDSC and clocks are enabled. So, keep this sequence to a6xx_gmu_resume instead of the probe. Fixes: 14b27d5df3ea ("drm/msm/a7xx: Initialize a750 "software fuse"") Signed-off-by: Akhil P Oommen --- drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 58 +++++++++++++++++++++++++++++++= +++ drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 59 -------------------------------= ---- 2 files changed, 58 insertions(+), 59 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gmu.c index cd6609bb66fe..61af3b212ba4 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c @@ -3,6 +3,7 @@ =20 #include #include +#include #include #include #include @@ -1174,6 +1175,59 @@ static void a6xx_gmu_set_initial_bw(struct msm_gpu *= gpu, struct a6xx_gmu *gmu) dev_pm_opp_put(gpu_opp); } =20 +static int a6xx_gmu_secure_init(struct a6xx_gpu *a6xx_gpu) +{ + struct adreno_gpu *adreno_gpu =3D &a6xx_gpu->base; + struct msm_gpu *gpu =3D &adreno_gpu->base; + u32 fuse_val; + int ret; + + if (adreno_is_a750(adreno_gpu) || adreno_is_a8xx(adreno_gpu)) { + /* + * Assume that if qcom scm isn't available, that whatever + * replacement allows writing the fuse register ourselves. + * Users of alternative firmware need to make sure this + * register is writeable or indicate that it's not somehow. + * Print a warning because if you mess this up you're about to + * crash horribly. + */ + if (!qcom_scm_is_available()) { + dev_warn_once(gpu->dev->dev, + "SCM is not available, poking fuse register\n"); + a6xx_llc_write(a6xx_gpu, REG_A7XX_CX_MISC_SW_FUSE_VALUE, + A7XX_CX_MISC_SW_FUSE_VALUE_RAYTRACING | + A7XX_CX_MISC_SW_FUSE_VALUE_FASTBLEND | + A7XX_CX_MISC_SW_FUSE_VALUE_LPAC); + adreno_gpu->has_ray_tracing =3D true; + return 0; + } + + ret =3D qcom_scm_gpu_init_regs(QCOM_SCM_GPU_ALWAYS_EN_REQ | + QCOM_SCM_GPU_TSENSE_EN_REQ); + if (ret) { + dev_warn_once(gpu->dev->dev, + "SCM call failed\n"); + return ret; + } + + /* + * On A7XX_GEN3 and newer, raytracing may be disabled by the + * firmware, find out whether that's the case. The scm call + * above sets the fuse register. + */ + fuse_val =3D a6xx_llc_read(a6xx_gpu, + REG_A7XX_CX_MISC_SW_FUSE_VALUE); + adreno_gpu->has_ray_tracing =3D + !!(fuse_val & A7XX_CX_MISC_SW_FUSE_VALUE_RAYTRACING); + } else if (adreno_is_a740(adreno_gpu)) { + /* Raytracing is always enabled on a740 */ + adreno_gpu->has_ray_tracing =3D true; + } + + return 0; +} + + int a6xx_gmu_resume(struct a6xx_gpu *a6xx_gpu) { struct adreno_gpu *adreno_gpu =3D &a6xx_gpu->base; @@ -1208,6 +1262,10 @@ int a6xx_gmu_resume(struct a6xx_gpu *a6xx_gpu) return ret; } =20 + ret =3D a6xx_gmu_secure_init(a6xx_gpu); + if (ret) + return ret; + /* Read the slice info on A8x GPUs */ a8xx_gpu_get_slice_info(gpu); =20 diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.c index cdecd91094c6..cbc803d90673 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -10,7 +10,6 @@ =20 #include #include -#include #include #include =20 @@ -2158,56 +2157,6 @@ static void a6xx_llc_slices_init(struct platform_dev= ice *pdev, a6xx_gpu->llc_mmio =3D ERR_PTR(-EINVAL); } =20 -static int a7xx_cx_mem_init(struct a6xx_gpu *a6xx_gpu) -{ - struct adreno_gpu *adreno_gpu =3D &a6xx_gpu->base; - struct msm_gpu *gpu =3D &adreno_gpu->base; - u32 fuse_val; - int ret; - - if (adreno_is_a750(adreno_gpu) || adreno_is_a8xx(adreno_gpu)) { - /* - * Assume that if qcom scm isn't available, that whatever - * replacement allows writing the fuse register ourselves. - * Users of alternative firmware need to make sure this - * register is writeable or indicate that it's not somehow. - * Print a warning because if you mess this up you're about to - * crash horribly. - */ - if (!qcom_scm_is_available()) { - dev_warn_once(gpu->dev->dev, - "SCM is not available, poking fuse register\n"); - a6xx_llc_write(a6xx_gpu, REG_A7XX_CX_MISC_SW_FUSE_VALUE, - A7XX_CX_MISC_SW_FUSE_VALUE_RAYTRACING | - A7XX_CX_MISC_SW_FUSE_VALUE_FASTBLEND | - A7XX_CX_MISC_SW_FUSE_VALUE_LPAC); - adreno_gpu->has_ray_tracing =3D true; - return 0; - } - - ret =3D qcom_scm_gpu_init_regs(QCOM_SCM_GPU_ALWAYS_EN_REQ | - QCOM_SCM_GPU_TSENSE_EN_REQ); - if (ret) - return ret; - - /* - * On A7XX_GEN3 and newer, raytracing may be disabled by the - * firmware, find out whether that's the case. The scm call - * above sets the fuse register. - */ - fuse_val =3D a6xx_llc_read(a6xx_gpu, - REG_A7XX_CX_MISC_SW_FUSE_VALUE); - adreno_gpu->has_ray_tracing =3D - !!(fuse_val & A7XX_CX_MISC_SW_FUSE_VALUE_RAYTRACING); - } else if (adreno_is_a740(adreno_gpu)) { - /* Raytracing is always enabled on a740 */ - adreno_gpu->has_ray_tracing =3D true; - } - - return 0; -} - - #define GBIF_CLIENT_HALT_MASK BIT(0) #define GBIF_ARB_HALT_MASK BIT(1) #define VBIF_XIN_HALT_CTRL0_MASK GENMASK(3, 0) @@ -2711,14 +2660,6 @@ static struct msm_gpu *a6xx_gpu_init(struct drm_devi= ce *dev) return ERR_PTR(ret); } =20 - if (adreno_is_a7xx(adreno_gpu) || adreno_is_a8xx(adreno_gpu)) { - ret =3D a7xx_cx_mem_init(a6xx_gpu); - if (ret) { - a6xx_destroy(&(a6xx_gpu->base.base)); - return ERR_PTR(ret); - } - } - adreno_gpu->uche_trap_base =3D 0x1fffffffff000ull; =20 msm_mmu_set_fault_handler(to_msm_vm(gpu->vm)->mmu, gpu, --=20 2.51.0 From nobody Sun Apr 5 16:48:06 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 140BB3E1CF4 for ; Mon, 23 Mar 2026 20:13:43 +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=1774296825; cv=none; b=p0O1F1WOE4nrA3o+KGOZlwxUcBmPMUHjsZyHH9OCEExOh29boaCIab75vElJfnb8MluV+cK8PKw5ONpRg0ZQw4WJiIwaigbcxWiG5tH/RvSfffn8meuz44vgLHlluIY2sCxuD/7NhqOCEKlOk+45NSU3ITYLprviOmlKwl63Y1A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296825; c=relaxed/simple; bh=H5UIoWKcwOAS+auMl89W13gGP8KyR+VgG/pl7Eqs3ww=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QIEw0dSs+kuu7eXHmmMDxHqQeZnN1eJO6RhkNGGNQAwiNuyH9OE2EsZUjFwtXcrh56m/I2Qroc7ZwHw2jtI+okfLz/AdLMOf34lOY4L/BCeVRx/5gE2RyvP6NKMAyvfCKnZ58iNgiUArlXNO2tCpIl2km31G5rkUbGug4Bdq4KU= 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=hXeIWAQp; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ZxBfQO1K; 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="hXeIWAQp"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ZxBfQO1K" 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 62NHqYX83634290 for ; Mon, 23 Mar 2026 20:13:43 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= 6h1GbkcqRvODh/gp8Mx0/sRdMg7ZV4RUJ1froSrMVMQ=; b=hXeIWAQp4tXKWM45 T/jZ4fs65SZJXFX59Y8kgasgcFUANVPeq2RnqxokWA4XW73kug81gwq3n4waBDI9 fcS/RTvsjHljE0uTXT4UVZYVR7mAd9LxJ+SpNkQOpvfsgJBUkG0xBQuAARWhNUD2 XVguUzRv/AvZ9eC8LzYS6Sn37EjcvpotP9sChM1U5IMs/HuQN9fsr3s/njNXwNFm XoKgnKz3ZYV0gb51jk9sDSzuEc7jRLgGLqyQT2vSZ7Y0zFPKiHfa1vwazoG0Di8H Kr9KiMctN5vWpAX16KfZHUqqm5YA7MMN2eO6sXJKsFgRKXEsOy246l4Dyb+ZgIK3 pji7pQ== Received: from mail-pf1-f200.google.com (mail-pf1-f200.google.com [209.85.210.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d34k4hwkr-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 20:13:43 +0000 (GMT) Received: by mail-pf1-f200.google.com with SMTP id d2e1a72fcca58-82c245a88a5so1160386b3a.1 for ; Mon, 23 Mar 2026 13:13:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774296822; x=1774901622; 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=6h1GbkcqRvODh/gp8Mx0/sRdMg7ZV4RUJ1froSrMVMQ=; b=ZxBfQO1KSK+xZG4Ua0gzzXWtGSETKrNKiwwHhhZwgH72t4c2RqE2zaUJkENiwlHUsI 3c6hbi3bdvFXzv3k5gkyRtyLZrpihbqDaN3LdThTgJffqOXoQSx1SoP1/0eBNlF3DwF5 guMt+9kZxMDybIE+lMZTqDesVxN3m9hRxc4/3W4MsF2vtp6/bjriKpRFigr3y/MOZb0E HxIFws6uepHBbzW5KQ8/LBUcZPdp5EvGjJtvP25oREaCj7LL58zd/h0V8yl6W3QfXJFV 5GU14BV3QwiWcjr/avnZ+trk6dGo4lAc06dpbBf1IRggzS080/w4z0UI7Xi2QqzkXV/v OyJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774296822; x=1774901622; 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=6h1GbkcqRvODh/gp8Mx0/sRdMg7ZV4RUJ1froSrMVMQ=; b=rfFB8M/qQ45RWeP1AvncLLLENCUFrfYIYfL8LzBmT6VZs8BqmQPgvllVWuF55j91WI kfT+35n3PlQMms8FGF93VraUyviCe4FmpxQRpagBKruwuRAk4ivr1CaQ8dbQ1XKST9JS N5rj+DC3nl7qhh+XbZrNFgkIFRX0PDAQto/K6NNPgRs63u08CN0flaWHpLIEBOLNbjxX 8GbE3YMBcVxq6Oi1/uJFnfnxXKECT39C9LVrU/jsgwSSpzsii4SYwCHSKmO9IBCbV6Kk Y2SzTZBFq2Gyu3iVztCpZR7LDiOLbXiG8mK/RHBAmancIGjBmKzNloU5gyPrrieHHrOK Wvxg== X-Forwarded-Encrypted: i=1; AJvYcCXrj1z36vBk7v7AQ3dRC9OgYpzHmTpeX0XN+5bvs8B781gJlj9GvOdtT20ktHDIlQIQx3PkKH/prDt+Zd8=@vger.kernel.org X-Gm-Message-State: AOJu0YzFmthIJdpmgphcSlMaGOHv3ojvOTHum3OfSpH7lZcywm1w4/Jz BT8oaAaI02wAkzCt5FPk6XsBE5i1dgX3xSYdbMg9ZW8iwA4ZsnW1afAR9lCEt6IJgbjl3uZjSPL yXSWqxow2gzMnscjtU/xZVndGaAl7CKsgEKS/z2e+EusONicmSViKc3+PXfMgrxXQvSs= X-Gm-Gg: ATEYQzxgfnUf39AttesAlKqiI4JeRfzOgogKIF/9a+TYzo0Q1WA8onn46bzhq0YoKNZ q+/dtq01Xa6psWvZbiQut+3p/Uj97aczsdqVE7csZGeMgfEV3Cp4JTh8lkNdkFOpTDZRipRam9R gWCddRMCuwbygix5ynS5C2HnGi/MEKiCfmxEia41d1f+ZB5xjl4YB21Od7qqdMbzrryItn/GoI5 M74OCUBVYKV2rRbBruNRaAd2TiIf24wIoeTLbit7RzvSUOPLv+K4RBI7ZgbA/VpmXhWsKRTMeJ9 c9C8GEoEjAy/r0GbPm6PSuw0dXMBpPY+e126nQhpUjz7T2unWWdvVZIv2e0MMcrSO2nxOoP4Pcq eF31y5s2U5/evpWsYfEb9hUcwb1bgu0KATcBU6S2cw5woFg== X-Received: by 2002:a05:6a00:4205:b0:82a:14db:68d1 with SMTP id d2e1a72fcca58-82c5bf3fa3fmr615592b3a.33.1774296822497; Mon, 23 Mar 2026 13:13:42 -0700 (PDT) X-Received: by 2002:a05:6a00:4205:b0:82a:14db:68d1 with SMTP id d2e1a72fcca58-82c5bf3fa3fmr615561b3a.33.1774296822025; Mon, 23 Mar 2026 13:13:42 -0700 (PDT) Received: from hu-akhilpo-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0409d148sm9510738b3a.29.2026.03.23.13.13.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 13:13:41 -0700 (PDT) From: Akhil P Oommen Date: Tue, 24 Mar 2026 01:42:23 +0530 Subject: [PATCH 11/16] drm/msm/a8xx: Add SKU table for A840 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: <20260324-a8xx-gpu-batch2-v1-11-fc95b8d9c017@oss.qualcomm.com> References: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> In-Reply-To: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> To: Rob Clark , Sean Paul , Konrad Dybcio , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Marijn Suijten , David Airlie , Simona Vetter , Antonino Maniscalco , Connor Abbott , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Akhil P Oommen X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774296753; l=805; i=akhilpo@oss.qualcomm.com; s=20240726; h=from:subject:message-id; bh=H5UIoWKcwOAS+auMl89W13gGP8KyR+VgG/pl7Eqs3ww=; b=TKJvi6RCo2aYUyZ3p7K/BZECCtS+cIhE1EkWZuqvmVpyQUApl/uOvQm2q6V3bOBVRiZsKkED9 4uyowwPNQsMBemb25MWQI6R5es8SS8bmXShzUHHmHzoc9KqllrbrMt9 X-Developer-Key: i=akhilpo@oss.qualcomm.com; a=ed25519; pk=lmVtttSHmAUYFnJsQHX80IIRmYmXA4+CzpGcWOOsfKA= X-Proofpoint-GUID: jaqdtn0a14tEmVjaoT6h7RFE4-qSH5EE X-Proofpoint-ORIG-GUID: jaqdtn0a14tEmVjaoT6h7RFE4-qSH5EE X-Authority-Analysis: v=2.4 cv=c+imgB9l c=1 sm=1 tr=0 ts=69c19ef7 cx=c_pps a=mDZGXZTwRPZaeRUbqKGCBw==: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=Ml_BBXNIZAQcZvYyiGwA:9 a=QEXdDO2ut3YA:10 a=zc0IvFSfCIW2DFIPzwfm:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE0OSBTYWx0ZWRfX1qpahPsp0rDh 5HF/FRiOP5hzDn4hSKYUzm6VPgdYqvo1tquWgmyIdOMumULtGUs7hHkizmIczZoe17v2R3jcIlt R603JFSsS2YJr1a33TT2bMcWW+zODhmTA5YeUYcWQrkyLJhTTJWk7VXLJ/FQNFbXFSbj+xLdGHS SynPcGyC+oriX92FpoPo0j2fBW79zsGpwwVUzWRExqipa0LaUNnGKOl52N0a4h42KQnAI2Xbjos e4tcm+5vLX4+aDk2/cKqSa+celFkkH5vpnWZcnBmgQ26oLLerBYNUTEelLR33kF6e+rNEnH7090 WBKG2fo5jsSOBj9a7OVzuNcDLKpGiDJkbzViH4Hzm3emQVLkCEdJHyldlsKpCdOiaVgt3AjskTa godvemYC/oZG07jORstLfnm2k8a+qd7F7QHGuJl3g96eVXWjw62FFNe7jPzKEfemLRmSOG15Q/P uWNSYz7YezCxBQL98KQ== 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-23_05,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 impostorscore=0 phishscore=0 lowpriorityscore=0 spamscore=0 suspectscore=0 priorityscore=1501 bulkscore=0 adultscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230149 Add the SKU table in the catalog for A840 GPU. This data helps to pick the correct bin from the OPP table based on the speed_bin fuse value. Signed-off-by: Akhil P Oommen --- drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c b/drivers/gpu/drm/ms= m/adreno/a6xx_catalog.c index 38561f26837e..f6b9792531a6 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c @@ -1954,6 +1954,12 @@ static const struct adreno_info a8xx_gpus[] =3D { }, }, .preempt_record_size =3D 19708 * SZ_1K, + .speedbins =3D ADRENO_SPEEDBINS( + { 0, 0 }, + { 273, 1 }, + { 252, 2 }, + { 221, 3 }, + ), } }; =20 --=20 2.51.0 From nobody Sun Apr 5 16:48:06 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 B6E203E0254 for ; Mon, 23 Mar 2026 20:13:49 +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=1774296831; cv=none; b=qES9JAgulxAK3F3GJ0EcYqklozy2fzf7RLjwvjFG5Ch1gI/08FQBcX/YX/VLkOCSdGjMrPxOrn/pPbT0Xz9RFwm22aQNZ9aOEMvBvLD69yrBsIynbvzBpuQ6ZkyPdolymBipMdafBFZKGlzl6lpLrkQHdceR8zFwDPXuNZ6Ftlg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296831; c=relaxed/simple; bh=4D9q9C/KDNPPGKfghm5SOHAW/QvZXC4Fp7RMJpvJjag=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TfKC8bS97E/jZVtHO3bY1PjlWiy4keB/VCi3W4f6i7mPQ9FiPiqUTnctVVd5YdMiR87y9sLKYdc0BN0GgfiWSTtvKS1IFFgiKVmeZUuhwHnfJJtJnPUtc8kg3wFJrJIBkUWN5F1EVD+lnIu1j0Shf6SARLKzffF+SHe31395eA0= 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=OpH6XsGD; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=NZyxwEz3; 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="OpH6XsGD"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="NZyxwEz3" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NHquVm2832908 for ; Mon, 23 Mar 2026 20:13:49 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= zf9OgMQW8kjaOJM6YV3ZDejW7RqNIctSZqIvD7mhJNg=; b=OpH6XsGDtibgAOR7 WJf+yxZInuWfm0AxCIPK5gtZVLkpeHl71AgrpSZsJSwbx1ebeBo6VHtrpuxlSk2H vNd8VqM3yE7ryRjloLGw6w3hSHt4MM9h069+ltqozlhMq4wITUSPBGm51JcRlH/J MlTb1W1TEXyq9Sd5HFqDrquA75uuwjIIPH1J2PN8CXm3RoTnbEa1kA42GNNET1pM V+oCOXIPYsXvccn1bubFEtUbdn/bmS6I+igoSlqi/T3jEcv5kKtn3CbKWVEXGsf1 5YYDbdtH7UBjFM3WPI136nI8/MG59CPbuN4HCYacntZCrnQ/T8Z1iWjxJBr8YejS TvvGGw== Received: from mail-pg1-f198.google.com (mail-pg1-f198.google.com [209.85.215.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d364jsgpe-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 20:13:49 +0000 (GMT) Received: by mail-pg1-f198.google.com with SMTP id 41be03b00d2f7-c737b6686ddso2988300a12.3 for ; Mon, 23 Mar 2026 13:13:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774296828; x=1774901628; 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=zf9OgMQW8kjaOJM6YV3ZDejW7RqNIctSZqIvD7mhJNg=; b=NZyxwEz3/QtCHgqmMseINKxqAMwqFtg+L9zSYap/oEuaAfxeWVpSbCwtma8RTGUpVk Ob1U5ony9L7oxwYztHu0Zrv55Ecr9+EalTBIMsLVqqTgx8ytYXvuVCBsmhUvhD8HVq14 zulFGFAX0EO6wAKDuX8dECr0gQ7xuw/oJvC73sUyOgbhICpNX8IcvWEckz7nlyQlWG+Q 5+l08LFYnwqLWy/QCODT1q7iaBCnwr213f4TUpVlUPMDsyj1mDgLRt65WyG5hsPhUJqj QgmF7ziwo9wvlxmNWrLdZ4tu8fxSWz1+ig6JVjZeuH9JFmqkZrj1ygfEL7PShZzQA0u9 IWVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774296828; x=1774901628; 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=zf9OgMQW8kjaOJM6YV3ZDejW7RqNIctSZqIvD7mhJNg=; b=TjzMYzmVIUMuHVgxpgpPYTMYWSY9xEr4vU4nm53e8jv2EvFneDhRKw2YmLUhTUluEu w2BOM6jyllAG6UgTzlgOsi9wxq03kCsXMOMsSuaUtR+ulNbh5aA6VC1UgliEqWjVdG0g OkBMK1wfXchDo99NJlZIKLEPBI8bKO2phMHvYnrlrCUZrQQgv80Rs0DrFyiQoDJHIxtZ 0Fmn0c6vvw+3S477Qag/LQRXy8g8moBkkOzxxdrdvljr/Wqg5fYrDiohRZUWp2IsBm4f h7G3suDFgewUHbeRhf8RIYc8ZrTz6LMIV8AByL4wTrPPF3RFzcXof9bhZEwtVzPBZtiM MUyA== X-Forwarded-Encrypted: i=1; AJvYcCV0BJpT7N/xj7ogtJlZzd0c0rB+ilCXdyIe6T1eEVuupcq1RauzvVi9WdvoCHSkz6VLoq8AaO47LF5b4sA=@vger.kernel.org X-Gm-Message-State: AOJu0YzcJVpBaeG8Ak31bi4eoBTNogPrcvoLszx3iATGMlBqAQSYaYp+ iK5/aa7/7dYYmBfF2ChSKCtxDUOKtPAOueSibjeSN+sc5qpUpIMfXuTUWRw4bAnbhATUzx90LL6 jNodD9tMGlP1impE2hvBn2Zblm3PGkOiCDinu/js8k91h/Yv2T54ANXKFTReCv4Fw8zY= X-Gm-Gg: ATEYQzz0yaGybKF7jyfde+aN3cxibkHSjDKqUhdAlemO+/3iwrYd/8yEsiu/TCJI+ju FKXO11wlCze/+wUeK9PDgH0LDGwf9ynf63HLo3wuSVsQbpP4OR051mqYV5J97pa/NmZNtoLFZFY UN1oacNE0zHsAJDKM2Eg9HFJSRMFmNlqIONFPYScm2oQi+wfSl5huPaPggADYcGRyeE60k8WhRI 32uaOVxG8y+x431KsfW1YwOM5TKFK8tDtYqs4EOHwUrfHEKUkPEEBXG6+TIcKouokluo2TrAkaG LRoWNNdSuPTW/ldZVV3JAQiEq2bXnTcsnHpqzDBbYsqI/qtXaUeiCsP7qr1crEmJTfY7h18WVyV WYkF5J8HxUwQjkuc5lJw/PTC6MYElwYJks0rhWZ3OMcXWgg== X-Received: by 2002:a05:6a00:908e:b0:81f:3afe:281e with SMTP id d2e1a72fcca58-82a8c247e08mr10525712b3a.3.1774296828348; Mon, 23 Mar 2026 13:13:48 -0700 (PDT) X-Received: by 2002:a05:6a00:908e:b0:81f:3afe:281e with SMTP id d2e1a72fcca58-82a8c247e08mr10525689b3a.3.1774296827835; Mon, 23 Mar 2026 13:13:47 -0700 (PDT) Received: from hu-akhilpo-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0409d148sm9510738b3a.29.2026.03.23.13.13.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 13:13:47 -0700 (PDT) From: Akhil P Oommen Date: Tue, 24 Mar 2026 01:42:24 +0530 Subject: [PATCH 12/16] drm/msm/a6xx: Add SKU detection support for X2-85 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: <20260324-a8xx-gpu-batch2-v1-12-fc95b8d9c017@oss.qualcomm.com> References: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> In-Reply-To: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> To: Rob Clark , Sean Paul , Konrad Dybcio , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Marijn Suijten , David Airlie , Simona Vetter , Antonino Maniscalco , Connor Abbott , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Akhil P Oommen X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774296753; l=8395; i=akhilpo@oss.qualcomm.com; s=20240726; h=from:subject:message-id; bh=4D9q9C/KDNPPGKfghm5SOHAW/QvZXC4Fp7RMJpvJjag=; b=1xObmfn+e0DZqh5iORmJvf7AxvHH2VJWAdzdwD0fdLez9VuwcH4Eb16dXCUGwoFaamkuBDawz N5x4BdbWjegDXcBoLK1rf21/W8F+bXgpUncqcvk+cZHPwPEmWrVytvt X-Developer-Key: i=akhilpo@oss.qualcomm.com; a=ed25519; pk=lmVtttSHmAUYFnJsQHX80IIRmYmXA4+CzpGcWOOsfKA= X-Proofpoint-GUID: aRco1ASPkXCJdPJTGnx2lrEb9wSNExhF X-Proofpoint-ORIG-GUID: aRco1ASPkXCJdPJTGnx2lrEb9wSNExhF X-Authority-Analysis: v=2.4 cv=JcaxbEKV c=1 sm=1 tr=0 ts=69c19efd cx=c_pps a=Qgeoaf8Lrialg5Z894R3/Q==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=Vdb0TAve2SCM4sGFxkMA:9 a=QEXdDO2ut3YA:10 a=x9snwWr2DeNwDh03kgHS:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE0OSBTYWx0ZWRfX3BF1g//cyWAe QZPlyN76aC+1LebCoCgXIWeOhe7tLTARv4wY1rCPwZmVQUKfrZXhKh1FWd2SkU6xYMN1/INPHC6 WhLz3g9S1Hf2zGGsI6zL2tlREYLZxLEhn0NySDAbab45ewpcPktY/FhmubrZ7s9E4qfGeE6OT/F SHIGRyV9vxThQn+oEHLNDUY2Mn2MUdkJ0/g+Y8yn8s0YLa0k+t9y+h2F/uWutm9++o1eVvJUgUQ xUKSutVTG6MbKA7M/FRtnOWn6uZhckpziVpRqwnFZR1/jybiAkhsErYoUp5H6JgGWd/h/CWu2Wu fRO7c/PcslX96vdVu9GoLeM/VuKcOuc6KBWlY3Er8u8I/yRy6Zx395gxq/ykUuRI7p3pShXicqy CrM0H9BJ+H9+HcsPiQrxDLYP7hUBYfx568t7xr7a1bo7MVuMW1J+H6v9jpJgO/SFBEgBWYSSq8C Y3lqzFC8EIuSHPsa4/w== 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-23_05,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 impostorscore=0 phishscore=0 spamscore=0 adultscore=0 lowpriorityscore=0 bulkscore=0 malwarescore=0 priorityscore=1501 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230149 Adreno X2-85 series present in Glymur chipset supports a new mechanism for SKU detection. A new CX_MISC register exposes the combined (or final) speedbin value from both HW fuse register and the Soft Fuse register. Implement this new SKU detection along with a new quirk to identify the GPUs that has SOFT SKU support. Also, enable this quirk for Adreno X2-85 and add its SKU table to the catalog. Signed-off-by: Akhil P Oommen --- drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 6 ++++ drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 9 +++++- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 41 ++++++++++++++++++++++-= ---- drivers/gpu/drm/msm/adreno/adreno_gpu.c | 5 ---- drivers/gpu/drm/msm/adreno/adreno_gpu.h | 1 + drivers/gpu/drm/msm/registers/adreno/a6xx.xml | 4 +++ 6 files changed, 53 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a5xx_gpu.c index 79a441e91fa1..d7ed3225f635 100644 --- a/drivers/gpu/drm/msm/adreno/a5xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a5xx_gpu.c @@ -1731,6 +1731,7 @@ static struct msm_gpu *a5xx_gpu_init(struct drm_devic= e *dev) struct adreno_gpu *adreno_gpu; struct msm_gpu *gpu; unsigned int nr_rings; + u32 speedbin; int ret; =20 a5xx_gpu =3D kzalloc(sizeof(*a5xx_gpu), GFP_KERNEL); @@ -1757,6 +1758,11 @@ static struct msm_gpu *a5xx_gpu_init(struct drm_devi= ce *dev) return ERR_PTR(ret); } =20 + /* Set the speedbin value that is passed to userspace */ + if (adreno_read_speedbin(&pdev->dev, &speedbin) || !speedbin) + speedbin =3D 0xffff; + adreno_gpu->speedbin =3D (uint16_t) (0xffff & speedbin); + msm_mmu_set_fault_handler(to_msm_vm(gpu->vm)->mmu, gpu, a5xx_fault_handler); =20 diff --git a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c b/drivers/gpu/drm/ms= m/adreno/a6xx_catalog.c index f6b9792531a6..758bc7bd31f6 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c @@ -1902,7 +1902,8 @@ static const struct adreno_info a8xx_gpus[] =3D { .gmem =3D 21 * SZ_1M, .inactive_period =3D DRM_MSM_INACTIVE_PERIOD, .quirks =3D ADRENO_QUIRK_HAS_CACHED_COHERENT | - ADRENO_QUIRK_HAS_HW_APRIV, + ADRENO_QUIRK_HAS_HW_APRIV | + ADRENO_QUIRK_SOFTFUSE, .funcs =3D &a8xx_gpu_funcs, .a6xx =3D &(const struct a6xx_info) { .protect =3D &x285_protect, @@ -1922,6 +1923,12 @@ static const struct adreno_info a8xx_gpus[] =3D { { /* sentinel */ }, }, }, + .speedbins =3D ADRENO_SPEEDBINS( + { 0, 0 }, + { 388, 1 }, + { 357, 2 }, + { 284, 3 }, + ), }, { .chip_ids =3D ADRENO_CHIP_IDS(0x44050a01), .family =3D ADRENO_8XX_GEN2, diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.c index cbc803d90673..0fe6d803e628 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -2552,13 +2552,33 @@ static u32 fuse_to_supp_hw(const struct adreno_info= *info, u32 fuse) return UINT_MAX; } =20 -static int a6xx_set_supported_hw(struct device *dev, const struct adreno_i= nfo *info) +static int a6xx_read_speedbin(struct device *dev, struct a6xx_gpu *a6xx_gp= u, + const struct adreno_info *info, u32 *speedbin) +{ + int ret; + + /* Use speedbin fuse if present. Otherwise, fallback to softfuse */ + ret =3D adreno_read_speedbin(dev, speedbin); + if (ret !=3D -ENOENT) + return ret; + + if (info->quirks & ADRENO_QUIRK_SOFTFUSE) { + *speedbin =3D a6xx_llc_read(a6xx_gpu, REG_A8XX_CX_MISC_SW_FUSE_FREQ_LIMI= T_STATUS); + *speedbin =3D A8XX_CX_MISC_SW_FUSE_FREQ_LIMIT_STATUS_FINALFREQLIMIT(*spe= edbin); + return 0; + } + + return -ENOENT; +} + +static int a6xx_set_supported_hw(struct device *dev, struct a6xx_gpu *a6xx= _gpu, + const struct adreno_info *info) { u32 supp_hw; u32 speedbin; int ret; =20 - ret =3D adreno_read_speedbin(dev, &speedbin); + ret =3D a6xx_read_speedbin(dev, a6xx_gpu, info, &speedbin); /* * -ENOENT means that the platform doesn't support speedbin which is * fine @@ -2592,11 +2612,13 @@ static struct msm_gpu *a6xx_gpu_init(struct drm_dev= ice *dev) struct msm_drm_private *priv =3D dev->dev_private; struct platform_device *pdev =3D priv->gpu_pdev; struct adreno_platform_config *config =3D pdev->dev.platform_data; + const struct adreno_info *info =3D config->info; struct device_node *node; struct a6xx_gpu *a6xx_gpu; struct adreno_gpu *adreno_gpu; struct msm_gpu *gpu; extern int enable_preemption; + u32 speedbin; bool is_a7xx; int ret, nr_rings =3D 1; =20 @@ -2619,14 +2641,14 @@ static struct msm_gpu *a6xx_gpu_init(struct drm_dev= ice *dev) adreno_gpu->gmu_is_wrapper =3D of_device_is_compatible(node, "qcom,adreno= -gmu-wrapper"); =20 adreno_gpu->base.hw_apriv =3D - !!(config->info->quirks & ADRENO_QUIRK_HAS_HW_APRIV); + !!(info->quirks & ADRENO_QUIRK_HAS_HW_APRIV); =20 /* gpu->info only gets assigned in adreno_gpu_init(). A8x is included int= entionally */ - is_a7xx =3D config->info->family >=3D ADRENO_7XX_GEN1; + is_a7xx =3D info->family >=3D ADRENO_7XX_GEN1; =20 a6xx_llc_slices_init(pdev, a6xx_gpu, is_a7xx); =20 - ret =3D a6xx_set_supported_hw(&pdev->dev, config->info); + ret =3D a6xx_set_supported_hw(&pdev->dev, a6xx_gpu, info); if (ret) { a6xx_llc_slices_destroy(a6xx_gpu); kfree(a6xx_gpu); @@ -2634,15 +2656,20 @@ static struct msm_gpu *a6xx_gpu_init(struct drm_dev= ice *dev) } =20 if ((enable_preemption =3D=3D 1) || (enable_preemption =3D=3D -1 && - (config->info->quirks & ADRENO_QUIRK_PREEMPTION))) + (info->quirks & ADRENO_QUIRK_PREEMPTION))) nr_rings =3D 4; =20 - ret =3D adreno_gpu_init(dev, pdev, adreno_gpu, config->info->funcs, nr_ri= ngs); + ret =3D adreno_gpu_init(dev, pdev, adreno_gpu, info->funcs, nr_rings); if (ret) { a6xx_destroy(&(a6xx_gpu->base.base)); return ERR_PTR(ret); } =20 + /* Set the speedbin value that is passed to userspace */ + if (a6xx_read_speedbin(&pdev->dev, a6xx_gpu, info, &speedbin) || !speedbi= n) + speedbin =3D 0xffff; + adreno_gpu->speedbin =3D (uint16_t) (0xffff & speedbin); + /* * For now only clamp to idle freq for devices where this is known not * to cause power supply issues: diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/= adreno/adreno_gpu.c index 10d9e5f40640..826661cb7988 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c @@ -1184,7 +1184,6 @@ int adreno_gpu_init(struct drm_device *drm, struct pl= atform_device *pdev, struct msm_gpu_config adreno_gpu_config =3D { 0 }; struct msm_gpu *gpu =3D &adreno_gpu->base; const char *gpu_name; - u32 speedbin; int ret; =20 adreno_gpu->funcs =3D funcs; @@ -1213,10 +1212,6 @@ int adreno_gpu_init(struct drm_device *drm, struct p= latform_device *pdev, devm_pm_opp_set_clkname(dev, "core"); } =20 - if (adreno_read_speedbin(dev, &speedbin) || !speedbin) - speedbin =3D 0xffff; - adreno_gpu->speedbin =3D (uint16_t) (0xffff & speedbin); - gpu_name =3D devm_kasprintf(dev, GFP_KERNEL, "%"ADRENO_CHIPID_FMT, ADRENO_CHIPID_ARGS(config->chip_id)); if (!gpu_name) diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.h b/drivers/gpu/drm/msm/= adreno/adreno_gpu.h index 29097e6b4253..044ed4d49aa7 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.h +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.h @@ -63,6 +63,7 @@ enum adreno_family { #define ADRENO_QUIRK_PREEMPTION BIT(5) #define ADRENO_QUIRK_4GB_VA BIT(6) #define ADRENO_QUIRK_IFPC BIT(7) +#define ADRENO_QUIRK_SOFTFUSE BIT(8) =20 /* Helper for formating the chip_id in the way that userspace tools like * crashdec expect. diff --git a/drivers/gpu/drm/msm/registers/adreno/a6xx.xml b/drivers/gpu/dr= m/msm/registers/adreno/a6xx.xml index 3941e7510754..2309870f5031 100644 --- a/drivers/gpu/drm/msm/registers/adreno/a6xx.xml +++ b/drivers/gpu/drm/msm/registers/adreno/a6xx.xml @@ -5016,6 +5016,10 @@ by a particular renderpass/blit. + + + + =20 --=20 2.51.0 From nobody Sun Apr 5 16:48:06 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 896C53E1D0D for ; Mon, 23 Mar 2026 20:13:55 +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=1774296837; cv=none; b=BZF8+gM+tKK7g5GuiB0bVnDQYMHw+Xu2dPcHXZzB8EHsJEcJ9G0/c68cvWC1xtagAmiRvs0+PaIy1muh/Fk+TiJtEx2exixtdc/xlgHNtahmjrewXUHSOW+NmRw+cbYpTIJlg+EMb2t+p+Oiu/yllyOMfHm2/NjLKWqK+SM+8IE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296837; c=relaxed/simple; bh=BOYNB5erOcTcXYtZi4okQGOy9Gb4kZCAjXNcLR1sRo0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WKf48zbb/joWagryuldoHjkzxSP+fs6YSvUSTw7eKHNFlCRpMxB/JLL2ZYf1io2T/e2QFyC4t8gljLX3TzlBLDl/gkc6yWVwXMtORB9CeJ5EEz0XBuH7DUIKabArzGsuDUTbYSShCIFStUl8TOHKbogpkhPxKS0Og5NQcSoCJrA= 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=pAVxtE/s; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=XonXZzZT; 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="pAVxtE/s"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="XonXZzZT" Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NHqW712831807 for ; Mon, 23 Mar 2026 20:13:55 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= ++AqkByfrQV0XRfPXuc9etfMULCFiMNJAf5WZLb9rpY=; b=pAVxtE/so+Yx4b3R IT1Kvccr+m0wgfSV0RBQbapibVXIezMWPrZfmYNfZzhUHjXpy3/iFD13Rkhciict NAYBB0TLZp0z/knj7iGpIO1gX4RT+hdu2mmjbz94LMGj/jKntrXS6wLOCYFoV7k4 cUJ7Z6kAD+SNrJ2D8ZPaZ8vDD0/oc/Vua4t0VUU5dUDxootz0Tuk4zyN/lHxRVvQ B5ysEFAjFWaLNK4eeWp/qZG4ajaMyZd7/GQF5PXyKrIM+JoNzQFM8e1S3IReslJE 08jQJbrCC6n6fXfk846NCsqJyTDTn94tsNYbeZ3YzqBsGvt7VGiyfeIa5QaEW+CH bUI11g== Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d364jsgpu-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 20:13:54 +0000 (GMT) Received: by mail-pf1-f199.google.com with SMTP id d2e1a72fcca58-82c245a88a5so1160470b3a.1 for ; Mon, 23 Mar 2026 13:13:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774296834; x=1774901634; 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=++AqkByfrQV0XRfPXuc9etfMULCFiMNJAf5WZLb9rpY=; b=XonXZzZTtT0Hj3yiIbX2v9W5PLtA7LLuqtJnPr7l7NKlOHMDNJWwAO2JXO6QrTnJmo KKqrw6pdWp4puMe/jyYUQcZkOjA+Elo1dwOFY85LcTPWd4IKqkmV4Hn3IDBRBWUkQWf8 N5Tapcy8EZtx7a6G88qKeughS7+lwRcyzRjSam0rBiOR/ijT82HyXHXJ3NK0B53NubNz BsYTyKio1a/XI7duBZ02+p3bYiCnT0hbwxz7TatKaU2P1XL6CHEZpxXeB+132w1T0Z6A xCj3JxcTE45PJWyBC0Z6t2JzS/653zfGIxLJkrxCIkHlgg+N8JmRIoDDpMWiwv3/PeIS PikA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774296834; x=1774901634; 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=++AqkByfrQV0XRfPXuc9etfMULCFiMNJAf5WZLb9rpY=; b=EcM/iijicQmqbs7ZpPcLzUmAx5C3qOYmKKnMkVGkptkP61dAifKI8imc1Rt8+wuJiv 8KW4vK9PQzJKVSFtCCICj5ZiUKOXDvnbjwv9LMsVe3lMMWwo6ToGGLL8Pgg6j76WaEv8 b/a87O0Ty74aS0h6AMAGMrpptMpEbcAjU3PGkMfvFKOxjlC7WJ6fp/Ytx+iBWPXWzMQb GZp21eI5EYlnJplQM3xMm40a5XcHJqy+5COwTopI0pgO3QEG+Psu33SdCPJtqUbkGKHj HTBwjhzakbfLdH8+sxR8Zf/eE+y4npajJQgPcn8ARymL3vieiP8aFAcOPrGYo0tV3hos kNXA== X-Forwarded-Encrypted: i=1; AJvYcCVNNsM9+2Wonqb5Yvw8HPYUI6DjblIev7GslFeroYV8f+TXENUTdmiSmAO5MJTpdCW/IgdoizgOq2QnnaM=@vger.kernel.org X-Gm-Message-State: AOJu0YwRkPGnSlSQikTCQDJlEkS/NSbj3wJ8C5vU4zjluGsPsXIFCXgi Gt7FVTz3DxfOnpxEeNs8gnfm3c6y85WY2clhTqO+pXjOytBdT4x1UvHm01hqdeYCvIAg7fKMZ6I Gl4BKVYv7r7LGp//jtB90hIdaOKjd3umjXBNkyzgnOhx1im3tbptG+lBFfCSa+N7BZoE= X-Gm-Gg: ATEYQzxydClm3kBl4daiC/yjqcnC7SxASALJiliCsYpLK8TLDNXrlbrNeHS6Vkip9JE wy62/L+xes/ZaNRO4JOsPT4/0BSxQ0NjTqspoiqqFyubyIwqsyu7CclBq2pPqeAZqr0QcfwOc1Z x+l+jX+tjvPQA8OrMo+iWNZ/2IcdxUDb0Fv+QW90TwGnd6TM9S+pVal7EGMcDDqZU0g0nyeozmm EDkHGPY7x8s43yMyXyufQAxIeiJUJtU10tUp86dNhgRdlj+opSQo0safRBIvtoG650ZQu4+p+ax 6pOktiPbsuBGpfWG29IdiuHONQa2Xib1kU1KE+E1XtRZW8WNJvXLuLl8MWf4h5A2hRHKwDZA+DR Yl2aOkUBjDIURLAMLk7WCj0IKKh7JILPZg4ksIJR8LpysuA== X-Received: by 2002:a05:6a00:a248:b0:824:b03f:2f65 with SMTP id d2e1a72fcca58-82c5bd62488mr584004b3a.7.1774296834123; Mon, 23 Mar 2026 13:13:54 -0700 (PDT) X-Received: by 2002:a05:6a00:a248:b0:824:b03f:2f65 with SMTP id d2e1a72fcca58-82c5bd62488mr583977b3a.7.1774296833505; Mon, 23 Mar 2026 13:13:53 -0700 (PDT) Received: from hu-akhilpo-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0409d148sm9510738b3a.29.2026.03.23.13.13.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 13:13:53 -0700 (PDT) From: Akhil P Oommen Date: Tue, 24 Mar 2026 01:42:25 +0530 Subject: [PATCH 13/16] drm/msm/a8xx: Implement IFPC support for A840 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: <20260324-a8xx-gpu-batch2-v1-13-fc95b8d9c017@oss.qualcomm.com> References: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> In-Reply-To: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> To: Rob Clark , Sean Paul , Konrad Dybcio , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Marijn Suijten , David Airlie , Simona Vetter , Antonino Maniscalco , Connor Abbott , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Akhil P Oommen X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774296753; l=13599; i=akhilpo@oss.qualcomm.com; s=20240726; h=from:subject:message-id; bh=BOYNB5erOcTcXYtZi4okQGOy9Gb4kZCAjXNcLR1sRo0=; b=NQW2gdQvVmcHxacDjjqKshLJaDdaA7zwuU8lmNpV63yHDxi/oCh+VB6OK4sy0k3uNAKldE3lK x/tyDBQDgBCBdmTko+MuiCjy78G5lr3jzr4JYeuG+Sjzko258ZzhrPT X-Developer-Key: i=akhilpo@oss.qualcomm.com; a=ed25519; pk=lmVtttSHmAUYFnJsQHX80IIRmYmXA4+CzpGcWOOsfKA= X-Proofpoint-GUID: WPeck-QbA8H_cM__1GySgBHfDjD-k-FG X-Proofpoint-ORIG-GUID: WPeck-QbA8H_cM__1GySgBHfDjD-k-FG X-Authority-Analysis: v=2.4 cv=JcaxbEKV c=1 sm=1 tr=0 ts=69c19f02 cx=c_pps a=WW5sKcV1LcKqjgzy2JUPuA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=EUspDBNiAAAA:8 a=gVRFLEIR9Vaz-UcNYaQA:9 a=QEXdDO2ut3YA:10 a=OpyuDcXvxspvyRM73sMx:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE0OSBTYWx0ZWRfX9/RIdysKqSHp qR2Mi2Vbw4LvtuPHFU/MkKyerzHeMhkBqBx0to+lhffvo6YGHzi/OLnDp2cg1+ANAGaNxE+C+gE wV6GwhUJbadXgRjkE0OkORMdx7396nmGRmZwuZFB1qOsec++uj4XU+x7da9ct+ZFfwgdD0vb4Sq 2N0ZSqYNElYkAaHdQ7BBIDJlg8+BbxdpaD7x5AP/ROrucCyTvtBgLUAF980YaWOaifxqYAjlP/a ElplM9LNzr7Bo3yH/nKvhfdQ/aaU5IGKEJM98YYd6HvdlSPkd5RAxFGrKax7IGjZLxZ7ef5b3Dp omg68wLAOETW1c4peZlUbR3RBV4YmTYVrH8cxLaLajkM8aNSJFYfeeJ6f9XjbmrUIWgZuIeGR5w EAlWmA6Ty9yb+sL+AZyFc15CCm9u3cBwwUPrq/uTCs+iWLoRVjRfDgYVChMf5qH+tg5YNTRS4wC xq1pQwkS2OHkCFiffgg== 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-23_05,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 impostorscore=0 phishscore=0 spamscore=0 adultscore=0 lowpriorityscore=0 bulkscore=0 malwarescore=0 priorityscore=1501 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230149 Implement pwrup reglist support and add the necessary register configurations to enable IFPC support on A840 Signed-off-by: Akhil P Oommen --- drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 185 ++++++++++++++++++++++++++= +++- drivers/gpu/drm/msm/adreno/a8xx_gpu.c | 97 +++++++++++++++- 2 files changed, 280 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c b/drivers/gpu/drm/ms= m/adreno/a6xx_catalog.c index 758bc7bd31f6..53548f6e891b 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c @@ -1891,6 +1891,185 @@ static const struct adreno_reglist a840_gbif[] =3D { { }, }; =20 +static const uint32_t a840_pwrup_reglist_regs[] =3D { + REG_A7XX_SP_HLSQ_TIMEOUT_THRESHOLD_DP, + REG_A7XX_SP_READ_SEL, + REG_A6XX_UCHE_MODE_CNTL, + REG_A8XX_UCHE_VARB_IDLE_TIMEOUT, + REG_A8XX_UCHE_GBIF_GX_CONFIG, + REG_A8XX_UCHE_CCHE_MODE_CNTL, + REG_A8XX_UCHE_CCHE_CACHE_WAYS, + REG_A8XX_UCHE_CACHE_WAYS, + REG_A8XX_UCHE_CCHE_GC_GMEM_RANGE_MIN, + REG_A8XX_UCHE_CCHE_GC_GMEM_RANGE_MIN + 1, + REG_A8XX_UCHE_CCHE_LPAC_GMEM_RANGE_MIN, + REG_A8XX_UCHE_CCHE_LPAC_GMEM_RANGE_MIN + 1, + REG_A8XX_UCHE_CCHE_TRAP_BASE, + REG_A8XX_UCHE_CCHE_TRAP_BASE + 1, + REG_A8XX_UCHE_CCHE_WRITE_THRU_BASE, + REG_A8XX_UCHE_CCHE_WRITE_THRU_BASE + 1, + REG_A8XX_UCHE_HW_DBG_CNTL, + REG_A8XX_UCHE_WRITE_THRU_BASE, + REG_A8XX_UCHE_WRITE_THRU_BASE + 1, + REG_A8XX_UCHE_TRAP_BASE, + REG_A8XX_UCHE_TRAP_BASE + 1, + REG_A8XX_UCHE_CLIENT_PF, + REG_A8XX_RB_CMP_NC_MODE_CNTL, + REG_A8XX_SP_HLSQ_GC_GMEM_RANGE_MIN, + REG_A8XX_SP_HLSQ_GC_GMEM_RANGE_MIN + 1, + REG_A6XX_TPL1_NC_MODE_CNTL, + REG_A6XX_TPL1_DBG_ECO_CNTL, + REG_A6XX_TPL1_DBG_ECO_CNTL1, + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(0), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(1), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(2), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(3), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(4), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(5), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(6), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(7), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(8), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(9), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(10), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(11), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(12), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(13), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(14), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(15), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(16), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(17), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(18), + REG_A8XX_TPL1_BICUBIC_WEIGHTS_TABLE(19), +}; +DECLARE_ADRENO_REGLIST_LIST(a840_pwrup_reglist); + +static const u32 a840_ifpc_reglist_regs[] =3D { + REG_A8XX_RBBM_NC_MODE_CNTL, + REG_A8XX_RBBM_SLICE_NC_MODE_CNTL, + REG_A6XX_SP_NC_MODE_CNTL, + REG_A6XX_SP_CHICKEN_BITS, + REG_A8XX_SP_SS_CHICKEN_BITS_0, + REG_A7XX_SP_CHICKEN_BITS_1, + REG_A7XX_SP_CHICKEN_BITS_2, + REG_A7XX_SP_CHICKEN_BITS_3, + REG_A8XX_SP_CHICKEN_BITS_4, + REG_A6XX_SP_PERFCTR_SHADER_MASK, + REG_A8XX_RBBM_SLICE_PERFCTR_CNTL, + REG_A8XX_RBBM_SLICE_INTERFACE_HANG_INT_CNTL, + REG_A7XX_SP_HLSQ_DBG_ECO_CNTL, + REG_A7XX_SP_HLSQ_DBG_ECO_CNTL_1, + REG_A7XX_SP_HLSQ_DBG_ECO_CNTL_2, + REG_A8XX_SP_HLSQ_DBG_ECO_CNTL_3, + REG_A8XX_SP_HLSQ_LPAC_GMEM_RANGE_MIN, + REG_A8XX_SP_HLSQ_LPAC_GMEM_RANGE_MIN + 1, + REG_A8XX_CP_INTERRUPT_STATUS_MASK_GLOBAL, + REG_A8XX_RBBM_PERFCTR_CNTL, + REG_A8XX_CP_PROTECT_GLOBAL(0), + REG_A8XX_CP_PROTECT_GLOBAL(1), + REG_A8XX_CP_PROTECT_GLOBAL(2), + REG_A8XX_CP_PROTECT_GLOBAL(3), + REG_A8XX_CP_PROTECT_GLOBAL(4), + REG_A8XX_CP_PROTECT_GLOBAL(5), + REG_A8XX_CP_PROTECT_GLOBAL(6), + REG_A8XX_CP_PROTECT_GLOBAL(7), + REG_A8XX_CP_PROTECT_GLOBAL(8), + REG_A8XX_CP_PROTECT_GLOBAL(9), + REG_A8XX_CP_PROTECT_GLOBAL(10), + REG_A8XX_CP_PROTECT_GLOBAL(11), + REG_A8XX_CP_PROTECT_GLOBAL(12), + REG_A8XX_CP_PROTECT_GLOBAL(13), + REG_A8XX_CP_PROTECT_GLOBAL(14), + REG_A8XX_CP_PROTECT_GLOBAL(15), + REG_A8XX_CP_PROTECT_GLOBAL(16), + REG_A8XX_CP_PROTECT_GLOBAL(17), + REG_A8XX_CP_PROTECT_GLOBAL(18), + REG_A8XX_CP_PROTECT_GLOBAL(19), + REG_A8XX_CP_PROTECT_GLOBAL(20), + REG_A8XX_CP_PROTECT_GLOBAL(21), + REG_A8XX_CP_PROTECT_GLOBAL(22), + REG_A8XX_CP_PROTECT_GLOBAL(23), + REG_A8XX_CP_PROTECT_GLOBAL(24), + REG_A8XX_CP_PROTECT_GLOBAL(25), + REG_A8XX_CP_PROTECT_GLOBAL(26), + REG_A8XX_CP_PROTECT_GLOBAL(27), + REG_A8XX_CP_PROTECT_GLOBAL(28), + REG_A8XX_CP_PROTECT_GLOBAL(29), + REG_A8XX_CP_PROTECT_GLOBAL(30), + REG_A8XX_CP_PROTECT_GLOBAL(31), + REG_A8XX_CP_PROTECT_GLOBAL(32), + REG_A8XX_CP_PROTECT_GLOBAL(33), + REG_A8XX_CP_PROTECT_GLOBAL(34), + REG_A8XX_CP_PROTECT_GLOBAL(35), + REG_A8XX_CP_PROTECT_GLOBAL(36), + REG_A8XX_CP_PROTECT_GLOBAL(37), + REG_A8XX_CP_PROTECT_GLOBAL(38), + REG_A8XX_CP_PROTECT_GLOBAL(39), + REG_A8XX_CP_PROTECT_GLOBAL(40), + REG_A8XX_CP_PROTECT_GLOBAL(41), + REG_A8XX_CP_PROTECT_GLOBAL(42), + REG_A8XX_CP_PROTECT_GLOBAL(43), + REG_A8XX_CP_PROTECT_GLOBAL(44), + REG_A8XX_CP_PROTECT_GLOBAL(45), + REG_A8XX_CP_PROTECT_GLOBAL(46), + REG_A8XX_CP_PROTECT_GLOBAL(47), + REG_A8XX_CP_PROTECT_GLOBAL(48), + REG_A8XX_CP_PROTECT_GLOBAL(49), + REG_A8XX_CP_PROTECT_GLOBAL(50), + REG_A8XX_CP_PROTECT_GLOBAL(51), + REG_A8XX_CP_PROTECT_GLOBAL(52), + REG_A8XX_CP_PROTECT_GLOBAL(53), + REG_A8XX_CP_PROTECT_GLOBAL(54), + REG_A8XX_CP_PROTECT_GLOBAL(55), + REG_A8XX_CP_PROTECT_GLOBAL(56), + REG_A8XX_CP_PROTECT_GLOBAL(57), + REG_A8XX_CP_PROTECT_GLOBAL(58), + REG_A8XX_CP_PROTECT_GLOBAL(59), + REG_A8XX_CP_PROTECT_GLOBAL(60), + REG_A8XX_CP_PROTECT_GLOBAL(61), + REG_A8XX_CP_PROTECT_GLOBAL(62), + REG_A8XX_CP_PROTECT_GLOBAL(63), +}; +DECLARE_ADRENO_REGLIST_LIST(a840_ifpc_reglist); + +static const struct adreno_reglist_pipe a840_dyn_pwrup_reglist_regs[] =3D { + { REG_A8XX_GRAS_TSEFE_DBG_ECO_CNTL, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_GRAS_NC_MODE_CNTL, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_GRAS_DBG_ECO_CNTL, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A6XX_PC_AUTO_VERTEX_STRIDE, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_CHICKEN_BITS_1, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_CHICKEN_BITS_2, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_CHICKEN_BITS_3, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_CHICKEN_BITS_4, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_CONTEXT_SWITCH_STABILIZE_CNTL_1, 0, BIT(PIPE_BV) | BIT(PIPE= _BR) }, + { REG_A8XX_PC_VIS_STREAM_CNTL, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A7XX_RB_CCU_CNTL, 0, BIT(PIPE_BR) }, + { REG_A7XX_RB_CCU_DBG_ECO_CNTL, 0, BIT(PIPE_BR)}, + { REG_A8XX_RB_CCU_NC_MODE_CNTL, 0, BIT(PIPE_BR) }, + { REG_A8XX_RB_CMP_NC_MODE_CNTL, 0, BIT(PIPE_BR) }, + { REG_A6XX_RB_RBP_CNTL, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_RB_RESOLVE_PREFETCH_CNTL, 0, BIT(PIPE_BR) }, + { REG_A6XX_RB_DBG_ECO_CNTL, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_RB_CMP_DBG_ECO_CNTL, 0, BIT(PIPE_BR) }, + { REG_A7XX_VFD_DBG_ECO_CNTL, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_VFD_CB_BV_THRESHOLD, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_VFD_CB_BR_THRESHOLD, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_VFD_CB_BUSY_REQ_CNT, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_VFD_CB_LP_REQ_CNT, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_VPC_FLATSHADE_MODE_CNTL, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_CP_HW_FAULT_STATUS_MASK_PIPE, 0, BIT(PIPE_BR) | + BIT(PIPE_BV) | BIT(PIPE_LPAC) | BIT(PIPE_AQE0) | + BIT(PIPE_AQE1) | BIT(PIPE_DDE_BR) | BIT(PIPE_DDE_BV) }, + { REG_A8XX_CP_INTERRUPT_STATUS_MASK_PIPE, 0, BIT(PIPE_BR) | + BIT(PIPE_BV) | BIT(PIPE_LPAC) | BIT(PIPE_AQE0) | + BIT(PIPE_AQE1) | BIT(PIPE_DDE_BR) | BIT(PIPE_DDE_BV) }, + { REG_A8XX_CP_PROTECT_CNTL_PIPE, 0, BIT(PIPE_BR) | BIT(PIPE_BV) | BIT(PIP= E_LPAC)}, + { REG_A8XX_CP_PROTECT_PIPE(15), 0, BIT(PIPE_BR) | BIT(PIPE_BV) | BIT(PIPE= _LPAC) }, + { REG_A8XX_RB_GC_GMEM_PROTECT, 0, BIT(PIPE_BR) }, + { REG_A8XX_RB_LPAC_GMEM_PROTECT, 0, BIT(PIPE_BR) }, + { REG_A6XX_RB_CONTEXT_SWITCH_GMEM_SAVE_RESTORE_ENABLE, 0, BIT(PIPE_BR) }, +}; +DECLARE_ADRENO_REGLIST_PIPE_LIST(a840_dyn_pwrup_reglist); + static const struct adreno_info a8xx_gpus[] =3D { { .chip_ids =3D ADRENO_CHIP_IDS(0x44070001), @@ -1940,11 +2119,15 @@ static const struct adreno_info a8xx_gpus[] =3D { .gmem =3D 18 * SZ_1M, .inactive_period =3D DRM_MSM_INACTIVE_PERIOD, .quirks =3D ADRENO_QUIRK_HAS_CACHED_COHERENT | - ADRENO_QUIRK_HAS_HW_APRIV, + ADRENO_QUIRK_HAS_HW_APRIV | + ADRENO_QUIRK_IFPC, .funcs =3D &a8xx_gpu_funcs, .a6xx =3D &(const struct a6xx_info) { .protect =3D &a840_protect, .nonctxt_reglist =3D a840_nonctxt_regs, + .pwrup_reglist =3D &a840_pwrup_reglist, + .dyn_pwrup_reglist =3D &a840_dyn_pwrup_reglist, + .ifpc_reglist =3D &a840_ifpc_reglist, .gbif_cx =3D a840_gbif, .max_slices =3D 3, .gmu_chipid =3D 0x8020100, diff --git a/drivers/gpu/drm/msm/adreno/a8xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a8xx_gpu.c index d414f24ddbd9..b1784e0819c1 100644 --- a/drivers/gpu/drm/msm/adreno/a8xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a8xx_gpu.c @@ -173,7 +173,7 @@ void a8xx_flush(struct msm_gpu *gpu, struct msm_ringbuf= fer *ring) /* Update HW if this is the current ring and we are not in preempt*/ if (!a6xx_in_preempt(a6xx_gpu)) { if (a6xx_gpu->cur_ring =3D=3D ring) - gpu_write(gpu, REG_A6XX_CP_RB_WPTR, wptr); + a6xx_fenced_write(a6xx_gpu, REG_A6XX_CP_RB_WPTR, wptr, BIT(0), false); else ring->restore_wptr =3D true; } else { @@ -386,8 +386,87 @@ static void a8xx_nonctxt_config(struct msm_gpu *gpu, u= 32 *gmem_protect) a8xx_aperture_clear(gpu); } =20 +static void a8xx_patch_pwrup_reglist(struct msm_gpu *gpu) +{ + const struct adreno_reglist_pipe_list *dyn_pwrup_reglist; + struct adreno_gpu *adreno_gpu =3D to_adreno_gpu(gpu); + struct a6xx_gpu *a6xx_gpu =3D to_a6xx_gpu(adreno_gpu); + const struct adreno_reglist_list *reglist; + void *ptr =3D a6xx_gpu->pwrup_reglist_ptr; + struct cpu_gpu_lock *lock =3D ptr; + u32 *dest =3D (u32 *)&lock->regs[0]; + u32 dyn_pwrup_reglist_count =3D 0; + int i; + + lock->gpu_req =3D lock->cpu_req =3D lock->turn =3D 0; + + reglist =3D adreno_gpu->info->a6xx->ifpc_reglist; + if (reglist) { + lock->ifpc_list_len =3D reglist->count; + + /* + * For each entry in each of the lists, write the offset and the current + * register value into the GPU buffer + */ + for (i =3D 0; i < reglist->count; i++) { + *dest++ =3D reglist->regs[i]; + *dest++ =3D gpu_read(gpu, reglist->regs[i]); + } + } + + reglist =3D adreno_gpu->info->a6xx->pwrup_reglist; + if (reglist) { + lock->preemption_list_len =3D reglist->count; + + for (i =3D 0; i < reglist->count; i++) { + *dest++ =3D reglist->regs[i]; + *dest++ =3D gpu_read(gpu, reglist->regs[i]); + } + } + + /* + * The overall register list is composed of + * 1. Static IFPC-only registers + * 2. Static IFPC + preemption registers + * 3. Dynamic IFPC + preemption registers (ex: perfcounter selects) + * + * The first two lists are static. Size of these lists are stored as + * number of pairs in ifpc_list_len and preemption_list_len + * respectively. With concurrent binning, Some of the perfcounter + * registers being virtualized, CP needs to know the pipe id to program + * the aperture inorder to restore the same. Thus, third list is a + * dynamic list with triplets as + * (
), and the length is + * stored as number for triplets in dynamic_list_len. + */ + dyn_pwrup_reglist =3D adreno_gpu->info->a6xx->dyn_pwrup_reglist; + if (!dyn_pwrup_reglist) + goto done; + + for (u32 pipe_id =3D PIPE_BR; pipe_id <=3D PIPE_DDE_BV; pipe_id++) { + for (i =3D 0; i < dyn_pwrup_reglist->count; i++) { + if ((dyn_pwrup_reglist->regs[i].pipe & BIT(pipe_id)) =3D=3D 0) + continue; + *dest++ =3D A8XX_CP_APERTURE_CNTL_HOST_PIPEID(pipe_id); + *dest++ =3D dyn_pwrup_reglist->regs[i].offset; + *dest++ =3D a8xx_read_pipe_slice(gpu, + pipe_id, + a8xx_get_first_slice(a6xx_gpu), + dyn_pwrup_reglist->regs[i].offset); + dyn_pwrup_reglist_count++; + } + } + + lock->dynamic_list_len =3D dyn_pwrup_reglist_count; + +done: + a8xx_aperture_clear(gpu); +} + static int a8xx_cp_init(struct msm_gpu *gpu) { + struct adreno_gpu *adreno_gpu =3D to_adreno_gpu(gpu); + struct a6xx_gpu *a6xx_gpu =3D to_a6xx_gpu(adreno_gpu); struct msm_ringbuffer *ring =3D gpu->rb[0]; u32 mask; =20 @@ -409,6 +488,9 @@ static int a8xx_cp_init(struct msm_gpu *gpu) /* Disable save/restore of performance counters across preemption */ mask |=3D BIT(6); =20 + /* Enable the register init list with the spinlock */ + mask |=3D BIT(8); + OUT_RING(ring, mask); =20 /* Enable multiple hardware contexts */ @@ -420,6 +502,14 @@ static int a8xx_cp_init(struct msm_gpu *gpu) /* Operation mode mask */ OUT_RING(ring, 0x00000002); =20 + /* Lo address */ + OUT_RING(ring, lower_32_bits(a6xx_gpu->pwrup_reglist_iova)); + /* Hi address */ + OUT_RING(ring, upper_32_bits(a6xx_gpu->pwrup_reglist_iova)); + + /* Enable dyn pwrup list with triplets (offset, value, pipe) */ + OUT_RING(ring, BIT(31)); + a6xx_flush(gpu, ring); return a8xx_idle(gpu, ring) ? 0 : -EINVAL; } @@ -702,6 +792,11 @@ static int hw_init(struct msm_gpu *gpu) WARN_ON(!gmem_protect); a8xx_aperture_clear(gpu); =20 + if (!a6xx_gpu->pwrup_reglist_emitted) { + a8xx_patch_pwrup_reglist(gpu); + a6xx_gpu->pwrup_reglist_emitted =3D true; + } + /* Enable hardware clockgating */ a8xx_set_hwcg(gpu, true); out: --=20 2.51.0 From nobody Sun Apr 5 16:48:06 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 440273E4C62 for ; Mon, 23 Mar 2026 20:14:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296845; cv=none; b=NoCJXsfjObotPVJRB3HhqGKejQ3ZuuXBcz19J3+y4eiDrZjOYgxKnT3bQIoHPQY+hG78HRgrXxp3/JfjU0jmfHCB5AZur6hoctNewsDCO2lU3nIm2iJ8qWO+mx4I55tQJsi5XDaiK93N0AYySBoI9Og0+btspVG5TB6ErcnyW/o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296845; c=relaxed/simple; bh=FEe8R/rRX361Ss9+y/FT4W1Kn3g7sYPWTSDSorPhJG8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tUTMfzkRpP7ort/QesoMe+8snAI2P9d8RVwj8H6h7Mn0PgviMBvsg+H2mtmMSFjqUCwMH+x02gmuJ3gcc4JtDAOhhhaQ8rVPbSEozrJsxfQl/ENY9ecX8Mup7qe/qtLot6aYKAMXBwWWmrkeJ375uOIoe7cvZnYTweivDxSOjKE= 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=OznWtNKr; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=ievc48a3; arc=none smtp.client-ip=205.220.180.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="OznWtNKr"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="ievc48a3" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NHqiqX2681188 for ; Mon, 23 Mar 2026 20:14:02 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= 7LQmunI4gQedz7r93OpyXpHZ3BB8yObf9HrBwMQos40=; b=OznWtNKruncN03KZ o3EWBPCUGMLrmAMWSgsDQuLzr6eq5z7XpdnLa76x+Lusm2UHXiSX/qV7WAKt0/d/ dV5uyYk1fhVPnHtKJYdNp2HN1wmVnTmI+dZF0PF2yTeoqCnpbaiePB6Y/XwLo8vv Xfl0bmuu12MkWte12YBDkYRSL9fK/2cuKxM2OCTdNgttXtuzCw7xXtBONl0aKXDV tqNybogA/oxJpifItUVbqeYOfVFlAkJ7VdXE3GPlSLTZmEkb5gV6cpsoYyEa4cqZ ZLVNj4L9/zffRuCzCmlrMkrb8KNaAVw+I/OotzIkPJ+KQZ48Cqm5hvTUyjufi3S2 z0dO5g== Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d31p7ajvw-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 20:14:02 +0000 (GMT) Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-c741b950511so1945499a12.0 for ; Mon, 23 Mar 2026 13:14:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774296841; x=1774901641; 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=7LQmunI4gQedz7r93OpyXpHZ3BB8yObf9HrBwMQos40=; b=ievc48a3AEpODgPgW2204BxvaVunrmi3yP9nxWGAAQshTMYxtSBKgKTSg0pJJfCFJu I6Snx36Xxp7Gsjb7mpvXFrH1uFKyDG+xb682FHaT34KkNtybTSDYdOldIDgIJoA4YjyP c60alosdFvD5jr/dspv695Yy6O+BqQ19vidBGmX+oEm/8avwJ9to9xeKwmcy1s9Yu00w scZggc7gJSgeDqA22nqLN/hTRrF8grdG0wItt9HSmOMcpqP05dmz0jkbglMQneHdiFmu +pxOZNG2i89IEBsTXdlLfQZf9gXaJSdLcjbj115Wcb4wOOQ0HzpOUnL0lEL2SJqErljw nJmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774296841; x=1774901641; 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=7LQmunI4gQedz7r93OpyXpHZ3BB8yObf9HrBwMQos40=; b=i29QShh59/x/0KCSkXF/itU770hUmGpvsxPaXspY6rL3pllN4DdB7qp0sjMPU+62cX 29oMtVEapmdAnQB7Bny2NtaIzMKDs5ndmCHgXdaQMmePHwWPNQfESy+RapJnV547yc+M VxgXqaMPfJIuYHlDnSK6W21E0tHOvXJVDcvrEq/Gn7kUfLsxVZu/lAg4qp2cZn8N/3Hh X0F0pNtBx+InNMMiAiv2REX/KCP8P6f0lRR2EQQkJswOYaCQIyGBShK+s94CAM9vDCp6 3lMpt8BuyoW5BYPa6f9E1IJtlw04VOgpcxbboSK40DFnHvlrrL3jNtaQZmJRHHMjZtOY 2JXQ== X-Forwarded-Encrypted: i=1; AJvYcCWyM8LCLr7dm6wwIxpNeqg/76KsR9qY/OnEdL31grnmoYCi2w6lVhSJtOYhJNRFp+aTW/SA8xECV1mBMrQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxxNbwC3lms+/3FUxyKmUHUoYhQrgrBDTj/7v9cagURG2exhflz mqkzySe7sjyj8mEu08lKymS85VvB7LdF4tU/ex0SlzAB6c7RmTBz0Q7pOgQx41A7gftZe0P9RHC E4XOsFLXbvvyJQwC2XNE4cijawPP7vB1/HOjaD32ThnF/wMufvgakSgVy59L9cX++T9c= X-Gm-Gg: ATEYQzxffbGxFOPxOiBuUxOncYFTnHKS5iqTb9NzeEl6royoFB84KKGaC88CN9DWM9T lSyjvnD8UBW2h1laGgG44vPhCzOnWy0LNvgjAjhawLuMXvrOGV/+eZuBUANcm4ycJZ6cnbxu9ng jP8f+IPrF7nE+bxTvguUMpXhEWwaFYQsHpaNcGdtvmvtUX68Ms1SeOrRDfmJhsOfP3p/Bd9wHQ5 Fi/bC4O6HbX+jBPWLiTH+yxyYkL1sxhf2Md9S+mwi0g9Czq1To/g4Bq2z7F8rZbzPIQCUavdyaa i+K2lci7t8Bj14CRmLsDf9iX6gOTQN03Cosi8o1n8WkQ/9F0+c8BSy53Kfl8SD6PTDS6ZDFkqze SrXrMRUAY7Bhg2BgvWE5WUuGcr5xhPMvCGK7+o/3LqiT+9g== X-Received: by 2002:a05:6a00:2d96:b0:829:7b0f:c9de with SMTP id d2e1a72fcca58-82a8c3217aemr10910289b3a.35.1774296839881; Mon, 23 Mar 2026 13:13:59 -0700 (PDT) X-Received: by 2002:a05:6a00:2d96:b0:829:7b0f:c9de with SMTP id d2e1a72fcca58-82a8c3217aemr10910260b3a.35.1774296839280; Mon, 23 Mar 2026 13:13:59 -0700 (PDT) Received: from hu-akhilpo-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0409d148sm9510738b3a.29.2026.03.23.13.13.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 13:13:58 -0700 (PDT) From: Akhil P Oommen Date: Tue, 24 Mar 2026 01:42:26 +0530 Subject: [PATCH 14/16] drm/msm/a8xx: Preemption support for A840 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: <20260324-a8xx-gpu-batch2-v1-14-fc95b8d9c017@oss.qualcomm.com> References: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> In-Reply-To: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> To: Rob Clark , Sean Paul , Konrad Dybcio , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Marijn Suijten , David Airlie , Simona Vetter , Antonino Maniscalco , Connor Abbott , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Akhil P Oommen X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774296753; l=20443; i=akhilpo@oss.qualcomm.com; s=20240726; h=from:subject:message-id; bh=FEe8R/rRX361Ss9+y/FT4W1Kn3g7sYPWTSDSorPhJG8=; b=EY82Vnw4rrZ6M0p7UwGnQZ03qMdmO9QvxLosP04+LZqtu2A+S/LYjtfj3oavmYyMH8btrHpvV A4/lxU4XP43CmPnNXurptT4xJsRon/a5wVzV7KAd/rbsVbks2DLAgIF X-Developer-Key: i=akhilpo@oss.qualcomm.com; a=ed25519; pk=lmVtttSHmAUYFnJsQHX80IIRmYmXA4+CzpGcWOOsfKA= X-Authority-Analysis: v=2.4 cv=RMC+3oi+ c=1 sm=1 tr=0 ts=69c19f0a cx=c_pps a=oF/VQ+ItUULfLr/lQ2/icg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=fmxdy_jVxe639krZ1D8A:9 a=QEXdDO2ut3YA:10 a=O8hF6Hzn-FEA:10 a=3WC7DwWrALyhR5TkjVHa:22 X-Proofpoint-ORIG-GUID: y3m_AFWxBsXKkkhUj6fQNNcL6gb5RR2D X-Proofpoint-GUID: y3m_AFWxBsXKkkhUj6fQNNcL6gb5RR2D X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE0OSBTYWx0ZWRfX9L9TeK0iKeAT wrFht4EZivfqKYxyjiv9ax3z089VRWcI4YO4kZ+jfg+bxiiKMCWSh72siiBt9Bt1fMv+UpYHyKn xE3U+gnoE8iE6VBD7LxKAsEmzHqtT6YWlo4r+6xY/oLFRFLx3/am0l9a0J+/RbXopxdt3bo5B4P leCp8e30mdEZqCaAdMFy4CcGWg4BghiUhBeF4kpzWRNl801NMCMQRK1CBekoFh5iIvGF/uTbLap +aGGj7ZV57VI87RcavQUxnATzhNryGuaJ4xLrM2apJOrXQTEeKOtfzWZVII+7/SB57f5jvuUFkO vh5HghFjKdgN4C5m3Tr2b8tabjOHpr19tz5S5qcSp0SjxrZVYv9cD4Hq389RtYfmRjbL5uLovEv yWLlLEDMP7q4w5CDL/tvB+TbhOqmGkoju1aWkyZJVr/Hju5OqNbgBVJeKv6IkevM8VmCUnCf//I fpN0k2tJQIQhebdPNuw== 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-23_05,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 malwarescore=0 phishscore=0 lowpriorityscore=0 impostorscore=0 priorityscore=1501 bulkscore=0 spamscore=0 adultscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230149 The programing sequence related to preemption is unchanged from A7x. But there is some code churn due to register shuffling in A8x. So, split out the common code into a header file for code sharing and add/update additional changes required to support preemption feature on A8x GPUs. Finally, enable the preemption quirk in A840's catalog to enable this feature. Signed-off-by: Akhil P Oommen --- drivers/gpu/drm/msm/Makefile | 1 + drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 1 + drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 7 +- drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 5 + drivers/gpu/drm/msm/adreno/a6xx_preempt.c | 77 +-------- drivers/gpu/drm/msm/adreno/a6xx_preempt.h | 82 ++++++++++ drivers/gpu/drm/msm/adreno/a8xx_gpu.c | 37 ++++- drivers/gpu/drm/msm/adreno/a8xx_preempt.c | 262 ++++++++++++++++++++++++++= ++++ 8 files changed, 392 insertions(+), 80 deletions(-) diff --git a/drivers/gpu/drm/msm/Makefile b/drivers/gpu/drm/msm/Makefile index 8b94c5f1cb68..ba45e99be05b 100644 --- a/drivers/gpu/drm/msm/Makefile +++ b/drivers/gpu/drm/msm/Makefile @@ -25,6 +25,7 @@ adreno-y :=3D \ adreno/a6xx_hfi.o \ adreno/a6xx_preempt.o \ adreno/a8xx_gpu.o \ + adreno/a8xx_preempt.o \ =20 adreno-$(CONFIG_DEBUG_FS) +=3D adreno/a5xx_debugfs.o \ =20 diff --git a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c b/drivers/gpu/drm/ms= m/adreno/a6xx_catalog.c index 53548f6e891b..21f5a685196b 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c @@ -2120,6 +2120,7 @@ static const struct adreno_info a8xx_gpus[] =3D { .inactive_period =3D DRM_MSM_INACTIVE_PERIOD, .quirks =3D ADRENO_QUIRK_HAS_CACHED_COHERENT | ADRENO_QUIRK_HAS_HW_APRIV | + ADRENO_QUIRK_PREEMPTION | ADRENO_QUIRK_IFPC, .funcs =3D &a8xx_gpu_funcs, .a6xx =3D &(const struct a6xx_info) { diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.c index 0fe6d803e628..df739fd744ab 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -408,7 +408,7 @@ static void a6xx_submit(struct msm_gpu *gpu, struct msm= _gem_submit *submit) a6xx_flush(gpu, ring); } =20 -static void a6xx_emit_set_pseudo_reg(struct msm_ringbuffer *ring, +void a6xx_emit_set_pseudo_reg(struct msm_ringbuffer *ring, struct a6xx_gpu *a6xx_gpu, struct msm_gpu_submitqueue *queue) { u64 preempt_postamble; @@ -618,7 +618,10 @@ static void a7xx_submit(struct msm_gpu *gpu, struct ms= m_gem_submit *submit) a6xx_flush(gpu, ring); =20 /* Check to see if we need to start preemption */ - a6xx_preempt_trigger(gpu); + if (adreno_is_a8xx(adreno_gpu)) + a8xx_preempt_trigger(gpu); + else + a6xx_preempt_trigger(gpu); } =20 static void a6xx_set_hwcg(struct msm_gpu *gpu, bool state) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.h index a4434a6a56dd..eb431e5e00b1 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.h @@ -278,6 +278,8 @@ void a6xx_preempt_hw_init(struct msm_gpu *gpu); void a6xx_preempt_trigger(struct msm_gpu *gpu); void a6xx_preempt_irq(struct msm_gpu *gpu); void a6xx_preempt_fini(struct msm_gpu *gpu); +void a6xx_emit_set_pseudo_reg(struct msm_ringbuffer *ring, + struct a6xx_gpu *a6xx_gpu, struct msm_gpu_submitqueue *queue); int a6xx_preempt_submitqueue_setup(struct msm_gpu *gpu, struct msm_gpu_submitqueue *queue); void a6xx_preempt_submitqueue_close(struct msm_gpu *gpu, @@ -327,6 +329,9 @@ void a8xx_gpu_get_slice_info(struct msm_gpu *gpu); int a8xx_hw_init(struct msm_gpu *gpu); irqreturn_t a8xx_irq(struct msm_gpu *gpu); void a8xx_llc_activate(struct a6xx_gpu *a6xx_gpu); +void a8xx_preempt_hw_init(struct msm_gpu *gpu); +void a8xx_preempt_trigger(struct msm_gpu *gpu); +void a8xx_preempt_irq(struct msm_gpu *gpu); bool a8xx_progress(struct msm_gpu *gpu, struct msm_ringbuffer *ring); void a8xx_recover(struct msm_gpu *gpu); #endif /* __A6XX_GPU_H__ */ diff --git a/drivers/gpu/drm/msm/adreno/a6xx_preempt.c b/drivers/gpu/drm/ms= m/adreno/a6xx_preempt.c index 747a22afad9f..df4cbf42e9a4 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_preempt.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_preempt.c @@ -6,85 +6,10 @@ #include "msm_gem.h" #include "a6xx_gpu.h" #include "a6xx_gmu.xml.h" +#include "a6xx_preempt.h" #include "msm_mmu.h" #include "msm_gpu_trace.h" =20 -/* - * Try to transition the preemption state from old to new. Return - * true on success or false if the original state wasn't 'old' - */ -static inline bool try_preempt_state(struct a6xx_gpu *a6xx_gpu, - enum a6xx_preempt_state old, enum a6xx_preempt_state new) -{ - enum a6xx_preempt_state cur =3D atomic_cmpxchg(&a6xx_gpu->preempt_state, - old, new); - - return (cur =3D=3D old); -} - -/* - * Force the preemption state to the specified state. This is used in cas= es - * where the current state is known and won't change - */ -static inline void set_preempt_state(struct a6xx_gpu *gpu, - enum a6xx_preempt_state new) -{ - /* - * preempt_state may be read by other cores trying to trigger a - * preemption or in the interrupt handler so barriers are needed - * before... - */ - smp_mb__before_atomic(); - atomic_set(&gpu->preempt_state, new); - /* ... and after*/ - smp_mb__after_atomic(); -} - -/* Write the most recent wptr for the given ring into the hardware */ -static inline void update_wptr(struct a6xx_gpu *a6xx_gpu, struct msm_ringb= uffer *ring) -{ - unsigned long flags; - uint32_t wptr; - - spin_lock_irqsave(&ring->preempt_lock, flags); - - if (ring->restore_wptr) { - wptr =3D get_wptr(ring); - - a6xx_fenced_write(a6xx_gpu, REG_A6XX_CP_RB_WPTR, wptr, BIT(0), false); - - ring->restore_wptr =3D false; - } - - spin_unlock_irqrestore(&ring->preempt_lock, flags); -} - -/* Return the highest priority ringbuffer with something in it */ -static struct msm_ringbuffer *get_next_ring(struct msm_gpu *gpu) -{ - struct adreno_gpu *adreno_gpu =3D to_adreno_gpu(gpu); - struct a6xx_gpu *a6xx_gpu =3D to_a6xx_gpu(adreno_gpu); - - unsigned long flags; - int i; - - for (i =3D 0; i < gpu->nr_rings; i++) { - bool empty; - struct msm_ringbuffer *ring =3D gpu->rb[i]; - - spin_lock_irqsave(&ring->preempt_lock, flags); - empty =3D (get_wptr(ring) =3D=3D gpu->funcs->get_rptr(gpu, ring)); - if (!empty && ring =3D=3D a6xx_gpu->cur_ring) - empty =3D ring->memptrs->fence =3D=3D a6xx_gpu->last_seqno[i]; - spin_unlock_irqrestore(&ring->preempt_lock, flags); - - if (!empty) - return ring; - } - - return NULL; -} - static void a6xx_preempt_timer(struct timer_list *t) { struct a6xx_gpu *a6xx_gpu =3D timer_container_of(a6xx_gpu, t, diff --git a/drivers/gpu/drm/msm/adreno/a6xx_preempt.h b/drivers/gpu/drm/ms= m/adreno/a6xx_preempt.h new file mode 100644 index 000000000000..4e69ed038403 --- /dev/null +++ b/drivers/gpu/drm/msm/adreno/a6xx_preempt.h @@ -0,0 +1,82 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright (c) 2018, The Linux Foundation. All rights reserved. */ +/* Copyright (c) 2023 Collabora, Ltd. */ +/* Copyright (c) 2024 Valve Corporation */ +/* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. */ + +/* + * Try to transition the preemption state from old to new. Return + * true on success or false if the original state wasn't 'old' + */ +static inline bool try_preempt_state(struct a6xx_gpu *a6xx_gpu, + enum a6xx_preempt_state old, enum a6xx_preempt_state new) +{ + enum a6xx_preempt_state cur =3D atomic_cmpxchg(&a6xx_gpu->preempt_state, + old, new); + + return (cur =3D=3D old); +} + +/* + * Force the preemption state to the specified state. This is used in cas= es + * where the current state is known and won't change + */ +static inline void set_preempt_state(struct a6xx_gpu *gpu, + enum a6xx_preempt_state new) +{ + /* + * preempt_state may be read by other cores trying to trigger a + * preemption or in the interrupt handler so barriers are needed + * before... + */ + smp_mb__before_atomic(); + atomic_set(&gpu->preempt_state, new); + /* ... and after*/ + smp_mb__after_atomic(); +} + +/* Write the most recent wptr for the given ring into the hardware */ +static inline void update_wptr(struct a6xx_gpu *a6xx_gpu, struct msm_ringb= uffer *ring) +{ + unsigned long flags; + uint32_t wptr; + + spin_lock_irqsave(&ring->preempt_lock, flags); + + if (ring->restore_wptr) { + wptr =3D get_wptr(ring); + + a6xx_fenced_write(a6xx_gpu, REG_A6XX_CP_RB_WPTR, wptr, BIT(0), false); + + ring->restore_wptr =3D false; + } + + spin_unlock_irqrestore(&ring->preempt_lock, flags); +} + +/* Return the highest priority ringbuffer with something in it */ +static struct msm_ringbuffer *get_next_ring(struct msm_gpu *gpu) +{ + struct adreno_gpu *adreno_gpu =3D to_adreno_gpu(gpu); + struct a6xx_gpu *a6xx_gpu =3D to_a6xx_gpu(adreno_gpu); + + unsigned long flags; + int i; + + for (i =3D 0; i < gpu->nr_rings; i++) { + bool empty; + struct msm_ringbuffer *ring =3D gpu->rb[i]; + + spin_lock_irqsave(&ring->preempt_lock, flags); + empty =3D (get_wptr(ring) =3D=3D gpu->funcs->get_rptr(gpu, ring)); + if (!empty && ring =3D=3D a6xx_gpu->cur_ring) + empty =3D ring->memptrs->fence =3D=3D a6xx_gpu->last_seqno[i]; + spin_unlock_irqrestore(&ring->preempt_lock, flags); + + if (!empty) + return ring; + } + + return NULL; +} + diff --git a/drivers/gpu/drm/msm/adreno/a8xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a8xx_gpu.c index b1784e0819c1..3ab4c1d79fdb 100644 --- a/drivers/gpu/drm/msm/adreno/a8xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a8xx_gpu.c @@ -463,6 +463,34 @@ static void a8xx_patch_pwrup_reglist(struct msm_gpu *g= pu) a8xx_aperture_clear(gpu); } =20 +static int a8xx_preempt_start(struct msm_gpu *gpu) +{ + struct adreno_gpu *adreno_gpu =3D to_adreno_gpu(gpu); + struct a6xx_gpu *a6xx_gpu =3D to_a6xx_gpu(adreno_gpu); + struct msm_ringbuffer *ring =3D gpu->rb[0]; + + if (gpu->nr_rings <=3D 1) + return 0; + + /* Turn CP protection off */ + OUT_PKT7(ring, CP_SET_PROTECTED_MODE, 1); + OUT_RING(ring, 0); + + a6xx_emit_set_pseudo_reg(ring, a6xx_gpu, NULL); + + /* Yield the floor on command completion */ + OUT_PKT7(ring, CP_CONTEXT_SWITCH_YIELD, 4); + OUT_RING(ring, 0x00); + OUT_RING(ring, 0x00); + OUT_RING(ring, 0x00); + /* Generate interrupt on preemption completion */ + OUT_RING(ring, 0x00); + + a6xx_flush(gpu, ring); + + return a8xx_idle(gpu, ring) ? 0 : -EINVAL; +} + static int a8xx_cp_init(struct msm_gpu *gpu) { struct adreno_gpu *adreno_gpu =3D to_adreno_gpu(gpu); @@ -738,6 +766,8 @@ static int hw_init(struct msm_gpu *gpu) gpu_write64(gpu, REG_A6XX_CP_RB_RPTR_ADDR, shadowptr(a6xx_gpu, gpu->rb[0]= )); gpu_write64(gpu, REG_A8XX_CP_RB_RPTR_ADDR_BV, rbmemptr(gpu->rb[0], bv_rpt= r)); =20 + a8xx_preempt_hw_init(gpu); + for (i =3D 0; i < gpu->nr_rings; i++) a6xx_gpu->shadow[i] =3D 0; =20 @@ -800,6 +830,9 @@ static int hw_init(struct msm_gpu *gpu) /* Enable hardware clockgating */ a8xx_set_hwcg(gpu, true); out: + /* Last step - yield the ringbuffer */ + a8xx_preempt_start(gpu); + /* * Tell the GMU that we are done touching the GPU and it can start power * management @@ -1209,11 +1242,11 @@ irqreturn_t a8xx_irq(struct msm_gpu *gpu) =20 if (status & A6XX_RBBM_INT_0_MASK_CP_CACHE_FLUSH_TS) { msm_gpu_retire(gpu); - a6xx_preempt_trigger(gpu); + a8xx_preempt_trigger(gpu); } =20 if (status & A6XX_RBBM_INT_0_MASK_CP_SW) - a6xx_preempt_irq(gpu); + a8xx_preempt_irq(gpu); =20 return IRQ_HANDLED; } diff --git a/drivers/gpu/drm/msm/adreno/a8xx_preempt.c b/drivers/gpu/drm/ms= m/adreno/a8xx_preempt.c new file mode 100644 index 000000000000..05cd847242f3 --- /dev/null +++ b/drivers/gpu/drm/msm/adreno/a8xx_preempt.c @@ -0,0 +1,262 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. */ + +#include "msm_gem.h" +#include "a6xx_gpu.h" +#include "a6xx_gmu.xml.h" +#include "a6xx_preempt.h" +#include "msm_mmu.h" +#include "msm_gpu_trace.h" + +static void preempt_prepare_postamble(struct a6xx_gpu *a6xx_gpu) +{ + u32 *postamble =3D a6xx_gpu->preempt_postamble_ptr; + u32 count =3D 0; + + postamble[count++] =3D PKT7(CP_REG_RMW, 3); + postamble[count++] =3D REG_A8XX_RBBM_PERFCTR_SRAM_INIT_CMD; + postamble[count++] =3D 0; + postamble[count++] =3D 1; + + postamble[count++] =3D PKT7(CP_WAIT_REG_MEM, 6); + postamble[count++] =3D CP_WAIT_REG_MEM_0_FUNCTION(WRITE_EQ); + postamble[count++] =3D CP_WAIT_REG_MEM_POLL_ADDR_LO( + REG_A8XX_RBBM_PERFCTR_SRAM_INIT_STATUS); + postamble[count++] =3D CP_WAIT_REG_MEM_POLL_ADDR_HI(0); + postamble[count++] =3D CP_WAIT_REG_MEM_3_REF(0x1); + postamble[count++] =3D CP_WAIT_REG_MEM_4_MASK(0x1); + postamble[count++] =3D CP_WAIT_REG_MEM_5_DELAY_LOOP_CYCLES(0); + + a6xx_gpu->preempt_postamble_len =3D count; + + a6xx_gpu->postamble_enabled =3D true; +} + +static void preempt_disable_postamble(struct a6xx_gpu *a6xx_gpu) +{ + u32 *postamble =3D a6xx_gpu->preempt_postamble_ptr; + + /* + * Disable the postamble by replacing the first packet header with a NOP + * that covers the whole buffer. + */ + *postamble =3D PKT7(CP_NOP, (a6xx_gpu->preempt_postamble_len - 1)); + + a6xx_gpu->postamble_enabled =3D false; +} + +/* + * Set preemption keepalive vote. Please note that this vote is different = from the one used in + * a8xx_irq() + */ +static void a8xx_preempt_keepalive_vote(struct msm_gpu *gpu, bool on) +{ + struct adreno_gpu *adreno_gpu =3D to_adreno_gpu(gpu); + struct a6xx_gpu *a6xx_gpu =3D to_a6xx_gpu(adreno_gpu); + + if (adreno_has_gmu_wrapper(adreno_gpu)) + return; + + gmu_write(&a6xx_gpu->gmu, REG_A8XX_GMU_PWR_COL_PREEMPT_KEEPALIVE, on); +} + +void a8xx_preempt_irq(struct msm_gpu *gpu) +{ + uint32_t status; + struct adreno_gpu *adreno_gpu =3D to_adreno_gpu(gpu); + struct a6xx_gpu *a6xx_gpu =3D to_a6xx_gpu(adreno_gpu); + struct drm_device *dev =3D gpu->dev; + + if (!try_preempt_state(a6xx_gpu, PREEMPT_TRIGGERED, PREEMPT_PENDING)) + return; + + /* Delete the preemption watchdog timer */ + timer_delete(&a6xx_gpu->preempt_timer); + + /* + * The hardware should be setting the stop bit of CP_CONTEXT_SWITCH_CNTL + * to zero before firing the interrupt, but there is a non zero chance + * of a hardware condition or a software race that could set it again + * before we have a chance to finish. If that happens, log and go for + * recovery + */ + status =3D gpu_read(gpu, REG_A8XX_CP_CONTEXT_SWITCH_CNTL); + if (unlikely(status & A8XX_CP_CONTEXT_SWITCH_CNTL_STOP)) { + DRM_DEV_ERROR(&gpu->pdev->dev, + "!!!!!!!!!!!!!!!! preemption faulted !!!!!!!!!!!!!! irq\n"); + set_preempt_state(a6xx_gpu, PREEMPT_FAULTED); + dev_err(dev->dev, "%s: Preemption failed to complete\n", + gpu->name); + kthread_queue_work(gpu->worker, &gpu->recover_work); + return; + } + + a6xx_gpu->cur_ring =3D a6xx_gpu->next_ring; + a6xx_gpu->next_ring =3D NULL; + + set_preempt_state(a6xx_gpu, PREEMPT_FINISH); + + update_wptr(a6xx_gpu, a6xx_gpu->cur_ring); + + set_preempt_state(a6xx_gpu, PREEMPT_NONE); + + a8xx_preempt_keepalive_vote(gpu, false); + + trace_msm_gpu_preemption_irq(a6xx_gpu->cur_ring->id); + + /* + * Retrigger preemption to avoid a deadlock that might occur when preempt= ion + * is skipped due to it being already in flight when requested. + */ + a8xx_preempt_trigger(gpu); +} + +void a8xx_preempt_hw_init(struct msm_gpu *gpu) +{ + struct adreno_gpu *adreno_gpu =3D to_adreno_gpu(gpu); + struct a6xx_gpu *a6xx_gpu =3D to_a6xx_gpu(adreno_gpu); + int i; + + /* No preemption if we only have one ring */ + if (gpu->nr_rings =3D=3D 1) + return; + + for (i =3D 0; i < gpu->nr_rings; i++) { + struct a6xx_preempt_record *record_ptr =3D a6xx_gpu->preempt[i]; + + record_ptr->wptr =3D 0; + record_ptr->rptr =3D 0; + record_ptr->rptr_addr =3D shadowptr(a6xx_gpu, gpu->rb[i]); + record_ptr->info =3D 0; + record_ptr->data =3D 0; + record_ptr->rbase =3D gpu->rb[i]->iova; + } + + /* Write a 0 to signal that we aren't switching pagetables */ + gpu_write64(gpu, REG_A8XX_CP_CONTEXT_SWITCH_SMMU_INFO, 0); + + /* Enable the GMEM save/restore feature for preemption */ + gpu_write(gpu, REG_A6XX_RB_CONTEXT_SWITCH_GMEM_SAVE_RESTORE_ENABLE, 0x1); + + /* Reset the preemption state */ + set_preempt_state(a6xx_gpu, PREEMPT_NONE); + + spin_lock_init(&a6xx_gpu->eval_lock); + + /* Always come up on rb 0 */ + a6xx_gpu->cur_ring =3D gpu->rb[0]; +} + +void a8xx_preempt_trigger(struct msm_gpu *gpu) +{ + struct adreno_gpu *adreno_gpu =3D to_adreno_gpu(gpu); + struct a6xx_gpu *a6xx_gpu =3D to_a6xx_gpu(adreno_gpu); + unsigned long flags; + struct msm_ringbuffer *ring; + unsigned int cntl; + bool sysprof; + + if (gpu->nr_rings =3D=3D 1) + return; + + /* + * Lock to make sure another thread attempting preemption doesn't skip it + * while we are still evaluating the next ring. This makes sure the other + * thread does start preemption if we abort it and avoids a soft lock. + */ + spin_lock_irqsave(&a6xx_gpu->eval_lock, flags); + + /* + * Try to start preemption by moving from NONE to START. If + * unsuccessful, a preemption is already in flight + */ + if (!try_preempt_state(a6xx_gpu, PREEMPT_NONE, PREEMPT_START)) { + spin_unlock_irqrestore(&a6xx_gpu->eval_lock, flags); + return; + } + + cntl =3D A8XX_CP_CONTEXT_SWITCH_CNTL_LEVEL(a6xx_gpu->preempt_level); + + if (a6xx_gpu->skip_save_restore) + cntl |=3D A8XX_CP_CONTEXT_SWITCH_CNTL_SKIP_SAVE_RESTORE; + + if (a6xx_gpu->uses_gmem) + cntl |=3D A8XX_CP_CONTEXT_SWITCH_CNTL_USES_GMEM; + + cntl |=3D A8XX_CP_CONTEXT_SWITCH_CNTL_STOP; + + /* Get the next ring to preempt to */ + ring =3D get_next_ring(gpu); + + /* + * If no ring is populated or the highest priority ring is the current + * one do nothing except to update the wptr to the latest and greatest + */ + if (!ring || (a6xx_gpu->cur_ring =3D=3D ring)) { + set_preempt_state(a6xx_gpu, PREEMPT_FINISH); + update_wptr(a6xx_gpu, a6xx_gpu->cur_ring); + set_preempt_state(a6xx_gpu, PREEMPT_NONE); + spin_unlock_irqrestore(&a6xx_gpu->eval_lock, flags); + return; + } + + spin_unlock_irqrestore(&a6xx_gpu->eval_lock, flags); + + spin_lock_irqsave(&ring->preempt_lock, flags); + + struct a7xx_cp_smmu_info *smmu_info_ptr =3D + a6xx_gpu->preempt_smmu[ring->id]; + struct a6xx_preempt_record *record_ptr =3D a6xx_gpu->preempt[ring->id]; + u64 ttbr0 =3D ring->memptrs->ttbr0; + u32 context_idr =3D ring->memptrs->context_idr; + + smmu_info_ptr->ttbr0 =3D ttbr0; + smmu_info_ptr->context_idr =3D context_idr; + record_ptr->wptr =3D get_wptr(ring); + + /* + * The GPU will write the wptr we set above when we preempt. Reset + * restore_wptr to make sure that we don't write WPTR to the same + * thing twice. It's still possible subsequent submissions will update + * wptr again, in which case they will set the flag to true. This has + * to be protected by the lock for setting the flag and updating wptr + * to be atomic. + */ + ring->restore_wptr =3D false; + + trace_msm_gpu_preemption_trigger(a6xx_gpu->cur_ring->id, ring->id); + + spin_unlock_irqrestore(&ring->preempt_lock, flags); + + /* Set the keepalive bit to keep the GPU ON until preemption is complete = */ + a8xx_preempt_keepalive_vote(gpu, true); + + a6xx_fenced_write(a6xx_gpu, + REG_A8XX_CP_CONTEXT_SWITCH_SMMU_INFO, a6xx_gpu->preempt_smmu_iova[ring->= id], + BIT(1), true); + + a6xx_fenced_write(a6xx_gpu, + REG_A8XX_CP_CONTEXT_SWITCH_PRIV_NON_SECURE_RESTORE_ADDR, + a6xx_gpu->preempt_iova[ring->id], BIT(1), true); + + a6xx_gpu->next_ring =3D ring; + + /* Start a timer to catch a stuck preemption */ + mod_timer(&a6xx_gpu->preempt_timer, jiffies + msecs_to_jiffies(10000)); + + /* Enable or disable postamble as needed */ + sysprof =3D refcount_read(&a6xx_gpu->base.base.sysprof_active) > 1; + + if (!sysprof && !a6xx_gpu->postamble_enabled) + preempt_prepare_postamble(a6xx_gpu); + + if (sysprof && a6xx_gpu->postamble_enabled) + preempt_disable_postamble(a6xx_gpu); + + /* Set the preemption state to triggered */ + set_preempt_state(a6xx_gpu, PREEMPT_TRIGGERED); + + /* Trigger the preemption */ + a6xx_fenced_write(a6xx_gpu, REG_A8XX_CP_CONTEXT_SWITCH_CNTL, cntl, BIT(1)= , false); +} + --=20 2.51.0 From nobody Sun Apr 5 16:48:06 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 D59F53E4C82 for ; Mon, 23 Mar 2026 20:14:06 +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=1774296848; cv=none; b=kV29GIgVyvLMpK6n+5uAgttjQR/V0CAiMOygX3EXnUXxP51HRGEGbj6PdU61RHCaLKIebgqcDoR+2ICONzX2zdRRtryTdbpJI4a8akyxqKarBCdUTXgX2ndTJo1icL4wYYAqQR7e7vc50fmlqFYQ3vaS/Tt751OqYjStRpkzjxU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296848; c=relaxed/simple; bh=xUiKo1yj6GLcQVb+vkBst3BMjf309OP8s++yQjsuSJc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oT10QwLVI2COeecs4ztCQKp3GyBmABsMUUHcKqe1Niblp/B943qD78aCOhJ5ccLSSNVKSGf40HRw0SjcrN62Yh4kV0PxoKAdgDq4XBjQ2uJdxRgU3YOES+On/6sFrKfsJvjAlG5F+qdXxkNmsixqAelkcKSuCs28UWYhYIQWR3Y= 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=Oy9Dfmws; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=DcB7HetM; 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="Oy9Dfmws"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="DcB7HetM" 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 62NHr8WT618876 for ; Mon, 23 Mar 2026 20:14:06 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= lVL5O2LZPIVIF6OfH5Vaje2elHwGIQmYJFJtw0KLdVs=; b=Oy9DfmwsqoNtpWML ED2eU9yOaMJ4rrJYBNPK8YzXD/vtV4jd02IDqCfqQQLi/Zn9BxPuhE1iDkrO4cgD WJ+BKUnL9gvthLXwOyAANsaYAQpwm07X0qrbqiNsj6hrbaX8QDDLGIg+2X2tQ/Rg OWYnGKovBs6iDyuV/hUFl3Xj8WC24u40eI1CzTMYVmM5zgkTo7iVWTO8bYN7DBdS TP37npjrq+9BXkYFnh4WmVEUyxhhydGj/yHIJz2k4qfg6OwNfGWOGUi1XoiRfYlc bVwo3/0n81VK3rTJ8CwESgNWbzTvF07kFYAG/kb+EXFoSKQVEontgctenbSuXhBj jt59Jw== Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d31jgjkju-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 20:14:06 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-b630753cc38so21910179a12.1 for ; Mon, 23 Mar 2026 13:14:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774296845; x=1774901645; 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=lVL5O2LZPIVIF6OfH5Vaje2elHwGIQmYJFJtw0KLdVs=; b=DcB7HetMmFTrpdKj0QpTy9BzFs02oQh5ky3MCL8wD81uO8F9M1TTSBZuikv6YXp+77 MzXE3+kqqrQ160uzRuoOlIy/nBWsPBR8WjIsuJsi8ZEM8GS+ZTVPDlsxIbLPco3v0wFm xDw6FaduHDW+lxngXZM4A35dmHJaHZURMMlTRQGV3/bmFupqJfPLDvWRuVv8C3e44rhz 0qQxakpG8G5mhpUWaX2ypwtIoRCBEIstehIyRx0R7GBu+j1t8JmgfgjIvtGHGq5e7w3Y gHjoLfhWRxIGtrZJlRaV49xYLVNZRtY3gHlhzdgYfssSy18Ux82apj6w7pfitmrxsFby WGtA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774296845; x=1774901645; 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=lVL5O2LZPIVIF6OfH5Vaje2elHwGIQmYJFJtw0KLdVs=; b=G6+Dr6ig42xbjB7Oh/GKsygt32Civ5et7Ckf8w5zb0M2uaebITYqLClYvyADlaX5y6 tneui88T3NqU0pwoMURqphPu+/6KjWMedobmJvpRQirFuO9B3EmzcIzUO8KzPPfssAnb 8zJb8YIGiZlVMWPBWLFM6Bs0WGUOtqJOuQaE2rY7s+wKRDNWKW68CY4TH+RErNsvAYeM /VBmOn2vV12plCDuqfYBv26oKnc0TzZ4/UlwvUXyIkVcxPz92y+j28eLrsdWq98x8ne/ p4D9t/yu+RwdcHYbexRVYcxeNCkqWh3hrB8X+QnFFxYnqBn0olU1PKqruvTfDAuntT33 dT+Q== X-Forwarded-Encrypted: i=1; AJvYcCU76MeqR/h+FyzVDE7x2Ui1f6eIoDAjMndBJQux+eelvdR2lh3Vt4PybZ7lxjEyXGI4OjdLAF6R+KY5y58=@vger.kernel.org X-Gm-Message-State: AOJu0Yzs0lu2Wr1J/D1G70adSrTshzWdvw9Zw8qkO768kUKmAEALMXIV waTL6F7GtOsj7UYxQ0mhpzj6+z0BKYsAxOuAMHpRsoL97vPiPQJ9YVdoSeZ47PWEG2FHuSZKOq4 vbWS0vDY/jHx0L50RF2rUCVGF6Azw7ktiWR5VulWLJb6u50UyO++Z63bZB+bVfd76T6Y= X-Gm-Gg: ATEYQzyyt86yo6Cn7nTmHqyaC76xf7VaHlo7X1Uc+ttV3AojHFOnnqRrOh1p5wAOexV OsTqVfgNkOM3JbL/1shaG7fXBAm2PzPAz9Uf9LeehPnHqLwN9sDLj65H7CMGwJdFHcZcttrUf+x v34M4o2om64qJZ9OFu6VugEYPErFjuNWpPAMaF4Gs1dofZgflgOAfCZDRJEoPte8hHnamUWUeOU 9NFMT8Vs6qmnLBDnxGvP04gfcoxTe2qEMq0g7tk+jDSlie4lmCPil2eFVjrKWDABrtcEEhljUx1 Upb7FypGCoHtpFd4QIsyB1fnFIKLJL17Tp25acCzKE04DTkb6JUkGBo0roGniio1mGA06UpbXNM ignv7oOwAL8K5GIpTe4YR2Vu08QoNof1Wxzpjq79NeJtTsA== X-Received: by 2002:a05:6a00:4148:b0:827:37d5:af5a with SMTP id d2e1a72fcca58-82a8c22d010mr10820906b3a.19.1774296845443; Mon, 23 Mar 2026 13:14:05 -0700 (PDT) X-Received: by 2002:a05:6a00:4148:b0:827:37d5:af5a with SMTP id d2e1a72fcca58-82a8c22d010mr10820884b3a.19.1774296844899; Mon, 23 Mar 2026 13:14:04 -0700 (PDT) Received: from hu-akhilpo-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0409d148sm9510738b3a.29.2026.03.23.13.13.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 13:14:04 -0700 (PDT) From: Akhil P Oommen Date: Tue, 24 Mar 2026 01:42:27 +0530 Subject: [PATCH 15/16] drm/msm/a6xx: Enable Preemption on X2-85 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: <20260324-a8xx-gpu-batch2-v1-15-fc95b8d9c017@oss.qualcomm.com> References: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> In-Reply-To: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> To: Rob Clark , Sean Paul , Konrad Dybcio , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Marijn Suijten , David Airlie , Simona Vetter , Antonino Maniscalco , Connor Abbott , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Akhil P Oommen X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774296753; l=3858; i=akhilpo@oss.qualcomm.com; s=20240726; h=from:subject:message-id; bh=xUiKo1yj6GLcQVb+vkBst3BMjf309OP8s++yQjsuSJc=; b=2rI1YvLFs4YYZPHksxVvp7iWMp+avy/Jx1t3dSt7bJZ5N8uTnzF/6lWeRkdCGwsPD//qlh/0f /PZWHx81nUxDi8atrdNqCYjYvRLPGVWtk5p/y/wNKIQGLcEePilBj9U X-Developer-Key: i=akhilpo@oss.qualcomm.com; a=ed25519; pk=lmVtttSHmAUYFnJsQHX80IIRmYmXA4+CzpGcWOOsfKA= X-Proofpoint-GUID: GPNrwkjY5M50KR-ENAJ_h6o660JcHhnE X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE0OSBTYWx0ZWRfX7YwUrG2qECDI aOTZpodGwgp1XUN4PUUwpZP2QX4btL7A4BZCsAHCIh6SUlfXcf50+8RSMO+C9mvN+l9+hIigfkE qnepU0XWjqhpmqQlIEcqbdMhZh5lNqJThqu/8+qJb8VEFJrOFtt2872vpajQpWxafic9lt78TJP zEE3bACJCYY5EbKrqUzmCrdOpbZjtUphBETx2HxB5tJdY6zrTdoWPBey9WRtfQ2G7q9Q8cclb+y v7UcPKDRm/H+wtWekFVcjFMMawtMA6yot4gPpBbTWJmFg0eW8CipdMI4ASZxA8N8jgs58jcMHuz CnufSxl1s1P5WRbT8ilrNp7f9xKMe31lyPG3DIU++Fws9Lf/x3FzE5yDJ/S+VHKq0YtYnmnquuD lU7LtP1y2YrvKhzYUJ4Kd1w09KxcBqNJB6X94RS83uomSjuRYDb9f22GX0RATDEAohW+QehzQ7Y p7tyzl6GjZIeod04lSQ== X-Authority-Analysis: v=2.4 cv=CMInnBrD c=1 sm=1 tr=0 ts=69c19f0e cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==: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=PN0yGgm3WGXANvjD27MA:9 a=QEXdDO2ut3YA:10 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-ORIG-GUID: GPNrwkjY5M50KR-ENAJ_h6o660JcHhnE 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-23_05,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 clxscore=1015 malwarescore=0 adultscore=0 lowpriorityscore=0 priorityscore=1501 spamscore=0 phishscore=0 impostorscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230149 Add the save-restore register lists and set the necessary quirk flags in the catalog to enable the Preemption feature on Adreno X2-85 GPU. Signed-off-by: Akhil P Oommen --- drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 42 +++++++++++++++++++++++++++= ++++ 1 file changed, 42 insertions(+) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c b/drivers/gpu/drm/ms= m/adreno/a6xx_catalog.c index 21f5a685196b..550ff3a9b82e 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c @@ -1761,6 +1761,44 @@ static const u32 x285_protect_regs[] =3D { =20 DECLARE_ADRENO_PROTECT(x285_protect, 15); =20 +static const struct adreno_reglist_pipe x285_dyn_pwrup_reglist_regs[] =3D { + { REG_A8XX_GRAS_TSEFE_DBG_ECO_CNTL, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_GRAS_NC_MODE_CNTL, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_GRAS_DBG_ECO_CNTL, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A6XX_PC_AUTO_VERTEX_STRIDE, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_CHICKEN_BITS_1, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_CHICKEN_BITS_2, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_CHICKEN_BITS_3, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_CHICKEN_BITS_4, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_PC_CONTEXT_SWITCH_STABILIZE_CNTL_1, 0, BIT(PIPE_BV) | BIT(PIPE= _BR) }, + { REG_A8XX_PC_VIS_STREAM_CNTL, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A7XX_RB_CCU_CNTL, 0, BIT(PIPE_BR) }, + { REG_A7XX_RB_CCU_DBG_ECO_CNTL, 0, BIT(PIPE_BR)}, + { REG_A8XX_RB_CCU_NC_MODE_CNTL, 0, BIT(PIPE_BR) }, + { REG_A8XX_RB_CMP_NC_MODE_CNTL, 0, BIT(PIPE_BR) }, + { REG_A6XX_RB_RBP_CNTL, 0, BIT(PIPE_BR) }, + { REG_A8XX_RB_RESOLVE_PREFETCH_CNTL, 0, BIT(PIPE_BR) }, + { REG_A8XX_RB_CMP_DBG_ECO_CNTL, 0, BIT(PIPE_BR) }, + { REG_A7XX_VFD_DBG_ECO_CNTL, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_VFD_CB_BV_THRESHOLD, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_VFD_CB_BR_THRESHOLD, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_VFD_CB_BUSY_REQ_CNT, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_VFD_CB_LP_REQ_CNT, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_VPC_FLATSHADE_MODE_CNTL, 0, BIT(PIPE_BV) | BIT(PIPE_BR) }, + { REG_A8XX_CP_HW_FAULT_STATUS_MASK_PIPE, 0, BIT(PIPE_BR) | + BIT(PIPE_BV) | BIT(PIPE_LPAC) | BIT(PIPE_AQE0) | + BIT(PIPE_AQE1) | BIT(PIPE_DDE_BR) | BIT(PIPE_DDE_BV) }, + { REG_A8XX_CP_INTERRUPT_STATUS_MASK_PIPE, 0, BIT(PIPE_BR) | + BIT(PIPE_BV) | BIT(PIPE_LPAC) | BIT(PIPE_AQE0) | + BIT(PIPE_AQE1) | BIT(PIPE_DDE_BR) | BIT(PIPE_DDE_BV) }, + { REG_A8XX_CP_PROTECT_CNTL_PIPE, 0, BIT(PIPE_BR) | BIT(PIPE_BV) | BIT(PIP= E_LPAC)}, + { REG_A8XX_CP_PROTECT_PIPE(15), 0, BIT(PIPE_BR) | BIT(PIPE_BV) | BIT(PIPE= _LPAC) }, + { REG_A8XX_RB_GC_GMEM_PROTECT, 0, BIT(PIPE_BR) }, + { REG_A8XX_RB_LPAC_GMEM_PROTECT, 0, BIT(PIPE_BR) }, + { REG_A6XX_RB_CONTEXT_SWITCH_GMEM_SAVE_RESTORE_ENABLE, 0, BIT(PIPE_BR) }, +}; +DECLARE_ADRENO_REGLIST_PIPE_LIST(x285_dyn_pwrup_reglist); + static const struct adreno_reglist_pipe a840_nonctxt_regs[] =3D { { REG_A8XX_CP_SMMU_STREAM_ID_LPAC, 0x00000101, BIT(PIPE_NONE) }, { REG_A8XX_GRAS_DBG_ECO_CNTL, 0x00000800, BIT(PIPE_BV) | BIT(PIPE_BR) }, @@ -2082,11 +2120,15 @@ static const struct adreno_info a8xx_gpus[] =3D { .inactive_period =3D DRM_MSM_INACTIVE_PERIOD, .quirks =3D ADRENO_QUIRK_HAS_CACHED_COHERENT | ADRENO_QUIRK_HAS_HW_APRIV | + ADRENO_QUIRK_PREEMPTION | ADRENO_QUIRK_SOFTFUSE, .funcs =3D &a8xx_gpu_funcs, .a6xx =3D &(const struct a6xx_info) { .protect =3D &x285_protect, .nonctxt_reglist =3D x285_nonctxt_regs, + .pwrup_reglist =3D &a840_pwrup_reglist, + .dyn_pwrup_reglist =3D &x285_dyn_pwrup_reglist, + .ifpc_reglist =3D &a840_ifpc_reglist, .gbif_cx =3D a840_gbif, .max_slices =3D 4, .gmu_chipid =3D 0x8010100, --=20 2.51.0 From nobody Sun Apr 5 16:48:06 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 6EB9E3E4C82 for ; Mon, 23 Mar 2026 20:14:12 +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=1774296853; cv=none; b=rLsH6HfYxqbMyzY35AfjYSGp7XdO6nKfJAGqWF7XABL8QEnCzRWS1Re4g5dCOEzpOWi5FGEIUUcMTJzgL/KBqNcDccRaofpT9Nzp3IRNmY45yIjuIrHe3X2iNIpAKF+ULeNmkxsTWXNXQ2BKBG3LVJK25FKPIF3i2BnKrun5l38= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774296853; c=relaxed/simple; bh=OALDtSgWAoUx/EoQ1+hF76+gqkywPVTt4BGA/lmsR7A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZF9PUWxH4pSfwhlXpo00wrCpDLwey1m2ZsZIOmcMBzCgTdi4dnWW00FLJRJgRVl2Pj41XC7VC6cOnWyHTa2gT2cX5Nms0i54bNeZ/A/Jj4/bL2wlpyKVM511ubooEhMWX50ue1kRcfymbZjsyPJqlLA95n3QxbF3jD0JjlQTuWY= 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=dKowUVY5; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=kotSCHnT; 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="dKowUVY5"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="kotSCHnT" Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62NHqurX3934989 for ; Mon, 23 Mar 2026 20:14:12 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= CGj71twJ5ZzNNZi9iu7gqpb92KAhwgkcEKsZ1QXTiMw=; b=dKowUVY5LJ5uf1JD bo/duJJ02zO4z658gX+PdzgFzXswOv/PBrSAS90rkrJlnpNSk9IJr+m6QcjQtXIJ 3prq2NzzX4fb4SY7/Ofl1Zi8kI+uZLgJfcqNnMlkNW2E2mvTTSzYQUUnyeCTTrm8 xE1vd9CtsuFZTlJP9Q0gZGK8nny9zkV4KIrf2BOzHs/bZpMuJrHXMvCmWLetvIr7 AInRMj/AhTRLiU5wSmv6OEdsCOEabI8slm0OSjiddz0fAv6d9VT5eOOOz+KEzbOA 4pkANv7qj4uFhhSHIYzvE2F/BGwds3anmSrWWCFbPD3lNsh4+mwgAABI73CIP4Km +Xy5Yw== Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4d37a0h6nf-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Mon, 23 Mar 2026 20:14:11 +0000 (GMT) Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-35bea322389so2051210a91.1 for ; Mon, 23 Mar 2026 13:14:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1774296851; x=1774901651; 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=CGj71twJ5ZzNNZi9iu7gqpb92KAhwgkcEKsZ1QXTiMw=; b=kotSCHnTbR+X5cwLf0WbmiYlwkLzMLrCEjeZ+U9APqcg+W76EVvcL2nBp6vcgyLZlx xeM3rsZIKjQ/PFH1O2zjOMho7XpvPm26Z6dQi9oAPwuuUPtSUBTyGDEgKMoXQ8dYFbsK 25GYYsL3C3eoOKPUtf5zyYqmSSVOSRBMx5ukryyb69nAqJKh0eJRBI3gzS7iN1LbhfXc 7kKXxql5CCTGqtvi00gTkImVMVl1GdqlOZwOB5ZjdsKNLuAtLrBKmXXS4xuNQDoiqKsR 18E8YAWTs3YFZwTwR7i866n18lm5QhLjCRpgMNRgb0P98uiydSAx822oainC8mqDDxsy rKCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774296851; x=1774901651; 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=CGj71twJ5ZzNNZi9iu7gqpb92KAhwgkcEKsZ1QXTiMw=; b=W0Kdh+HlJUvUeQU467F7AwT4YmgLbtlrhf4d6KIKBF5mtnrXEGLHYnOw11/xaphjnF AH5I5flmsz71bmzSwH0R8kA6gk+SZ5pgtLz+D8CcFHx0Qe2dQLKVvK/rIDDxR21TiqVq 0JTlr/WIRuedveuh0XHqmGw4V4LOfI52L5qLTeHmYn1q3qz+nfWLDCDHeAbJHIfj6wti djnUjWF02ze/SxC4gkmxlA8xExRUU5xuq8BXhl+uQk2p2NIvAVKqcmw+xskJefMtC8bN IjLmNB2jPR2ZQCukZLRYYmUk11ob2PREbrE+qRHZnwhkvC1uhybhQx9yiPggXs9ASweY jrkw== X-Forwarded-Encrypted: i=1; AJvYcCUqi9sJ8Z8hx7vbOCsStkmgI7e47HsWGqz16DaXctkzKyN4IgHAWtVbHY4QzJpEQpnPQrB05dw4x4273/k=@vger.kernel.org X-Gm-Message-State: AOJu0YwAzuox9tLHw6zef6Mn5R3fMTfR6JD6cfhmo9G0vn81WwMn5KtZ U4U+s35fjQJ4EauKps11G9sHiRyX2YkDemy0dCh0wzHIGH1p8VqvwPKIANwPIGWkuf7oSQ+LlM4 XwAjSp6Ocv3gPKMT+61ujqTk0x+pgKdcELahExL0RhXTKnaaFfbP47U29VV0Ho+ROyTQ= X-Gm-Gg: ATEYQzzFYgPGzRO/xvPR5rUnsYJ21OT1/fMKfYkgcgvaFCBgaoakAXJb9BCqFIdnb+R yi/Knz0iP1p8NOf6xkdGmAm+alInWURU+j++7ETrlrG+XubhWNXhLWlu4ySiqvD4vbCBQNvyF4Y vqI/1z9+qVbbi0waT6dQKGG+Oli65zQbMfyGweoLITVpZBhzqFUSlMmdUhYR3NXVnEmcqUYJMBU AvsUWYVRl2NsEn6+qNcA6tHo0a3bljpKDVICPNOLWGwakXvYk3PYhrwC80RqxlPKNOHQJZdPtX2 sHpXGJuDaB878uCGLcTKm9G+yp3VmcGcnIrqIe5xA/FEexdFpLxoMf4zVjlz00aYTJuAC8uwzoe +GlNLDH9m2HjvVHJVF5O7jNbVzb0z+85YTmVhU6ozO/8FHg== X-Received: by 2002:a05:6a21:6d99:b0:395:7fb:9362 with SMTP id adf61e73a8af0-39bcea16744mr12834161637.19.1774296850981; Mon, 23 Mar 2026 13:14:10 -0700 (PDT) X-Received: by 2002:a05:6a21:6d99:b0:395:7fb:9362 with SMTP id adf61e73a8af0-39bcea16744mr12834139637.19.1774296850493; Mon, 23 Mar 2026 13:14:10 -0700 (PDT) Received: from hu-akhilpo-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0409d148sm9510738b3a.29.2026.03.23.13.14.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 13:14:10 -0700 (PDT) From: Akhil P Oommen Date: Tue, 24 Mar 2026 01:42:28 +0530 Subject: [PATCH 16/16] drm/msm/adreno: Expose a PARAM to check AQE support 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: <20260324-a8xx-gpu-batch2-v1-16-fc95b8d9c017@oss.qualcomm.com> References: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> In-Reply-To: <20260324-a8xx-gpu-batch2-v1-0-fc95b8d9c017@oss.qualcomm.com> To: Rob Clark , Sean Paul , Konrad Dybcio , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Marijn Suijten , David Airlie , Simona Vetter , Antonino Maniscalco , Connor Abbott , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, Akhil P Oommen X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1774296753; l=3641; i=akhilpo@oss.qualcomm.com; s=20240726; h=from:subject:message-id; bh=OALDtSgWAoUx/EoQ1+hF76+gqkywPVTt4BGA/lmsR7A=; b=0U/dxL1yL6aQatKBLmc7nPkUYTffkVUmMgtW1qBahyOb239m7K436lkQdHzJI2lNLj8kbRpdK t0Tp+PB1ZxYBf3Q8mB5wv+jUSHLjlETidORFunZfMQSFnyjxEHRepxA X-Developer-Key: i=akhilpo@oss.qualcomm.com; a=ed25519; pk=lmVtttSHmAUYFnJsQHX80IIRmYmXA4+CzpGcWOOsfKA= X-Authority-Analysis: v=2.4 cv=GIIF0+NK c=1 sm=1 tr=0 ts=69c19f13 cx=c_pps a=0uOsjrqzRL749jD1oC5vDA==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=EUspDBNiAAAA:8 a=VDML5bnlI8VuwgTyKRQA:9 a=QEXdDO2ut3YA:10 a=mQ_c8vxmzFEMiUWkPHU9:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzIzMDE0OSBTYWx0ZWRfX8TS3IKtQlSqG Fq0iHhl/E32o9WB96HkRimfwns/X8YjEfK0Kb8DSw+5DGnqbJzulqZVriSb9BRQWvxJ+RJCgiAz D8K0Hij/LYh0nsO66glJWlDuQ7SCtrsn/FXBHA8tW4/HMn8cPv69FnRYZWwD9w9EebkZF5VGf62 PX+o76e1JJGeN8MOSCLLfa5DheqKFTd0i7pPDIWTMA9cuA2ARqwb3TYnDTSnuZp2bIn9yyoH7rF toKbvc0f1j1224hlxck/0ZeGpO3tMC0KxnTu4ETiRbMcN0SLh1pMLlujsQJ+rAr3YnN7SVoqU0a lVHu401dIYHYCfrhxtkBOG+jYjcP6ZHgVstPReVsUf+5wo7T1/PWgV/QLqjmpGUsevArzRipkdp kENSrB45Q5CoPOC0ePttVD6Q+FzPXwMpCejSQjmaMI7apvjTSoAKSEtOPajvznVT/Ou2JZlqEGn fK1CzQcYfOpxqMj3j3g== X-Proofpoint-GUID: dmORpej4LDaSPBBKz6jVfNzfNp0bYrdr X-Proofpoint-ORIG-GUID: dmORpej4LDaSPBBKz6jVfNzfNp0bYrdr 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-23_05,2026-03-23_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 adultscore=0 malwarescore=0 priorityscore=1501 phishscore=0 impostorscore=0 lowpriorityscore=0 clxscore=1015 suspectscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2603050001 definitions=main-2603230149 AQE (Applicaton Qrisc Engine) is required to support VK ray-pipeline. Two conditions should be met to use this HW: 1. AQE firmware should be loaded and programmed 2. Preemption support Expose a new MSM_PARAM to allow userspace to query its support. Signed-off-by: Akhil P Oommen --- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 13 +++++++++++++ drivers/gpu/drm/msm/adreno/adreno_gpu.c | 4 ++++ drivers/gpu/drm/msm/adreno/adreno_gpu.h | 1 + include/uapi/drm/msm_drm.h | 1 + 4 files changed, 19 insertions(+) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/ad= reno/a6xx_gpu.c index df739fd744ab..224b2f7cc8d3 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -2610,6 +2610,17 @@ static int a6xx_set_supported_hw(struct device *dev,= struct a6xx_gpu *a6xx_gpu, return 0; } =20 +static bool a6xx_aqe_is_enabled(struct adreno_gpu *adreno_gpu) +{ + struct a6xx_gpu *a6xx_gpu =3D to_a6xx_gpu(adreno_gpu); + + /* + * AQE uses preemption context record as scratch pad, so check if + * preemption is enabled + */ + return (adreno_gpu->base.nr_rings > 1) && !!a6xx_gpu->aqe_bo; +} + static struct msm_gpu *a6xx_gpu_init(struct drm_device *dev) { struct msm_drm_private *priv =3D dev->dev_private; @@ -2808,6 +2819,7 @@ const struct adreno_gpu_funcs a7xx_gpu_funcs =3D { .bus_halt =3D a6xx_bus_clear_pending_transactions, .mmu_fault_handler =3D a6xx_fault_handler, .gx_is_on =3D a6xx_gmu_gx_is_on, + .aqe_is_enabled =3D a6xx_aqe_is_enabled, }; =20 const struct adreno_gpu_funcs a8xx_gpu_funcs =3D { @@ -2836,4 +2848,5 @@ const struct adreno_gpu_funcs a8xx_gpu_funcs =3D { .bus_halt =3D a8xx_bus_clear_pending_transactions, .mmu_fault_handler =3D a8xx_fault_handler, .gx_is_on =3D a8xx_gmu_gx_is_on, + .aqe_is_enabled =3D a6xx_aqe_is_enabled, }; diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/= adreno/adreno_gpu.c index 826661cb7988..f7289a9ee0bb 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c @@ -443,6 +443,10 @@ int adreno_get_param(struct msm_gpu *gpu, struct msm_c= ontext *ctx, case MSM_PARAM_HAS_PRR: *value =3D adreno_smmu_has_prr(gpu); return 0; + case MSM_PARAM_AQE: + *value =3D (adreno_gpu->funcs->aqe_is_enabled && + adreno_gpu->funcs->aqe_is_enabled(adreno_gpu)) ? 1 : 0; + return 0; default: return UERR(EINVAL, drm, "%s: invalid param: %u", gpu->name, param); } diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.h b/drivers/gpu/drm/msm/= adreno/adreno_gpu.h index 044ed4d49aa7..c0ee544ce257 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.h +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.h @@ -84,6 +84,7 @@ struct adreno_gpu_funcs { void (*bus_halt)(struct adreno_gpu *adreno_gpu, bool gx_off); int (*mmu_fault_handler)(void *arg, unsigned long iova, int flags, void *= data); bool (*gx_is_on)(struct adreno_gpu *adreno_gpu); + bool (*aqe_is_enabled)(struct adreno_gpu *adreno_gpu); }; =20 struct adreno_reglist { diff --git a/include/uapi/drm/msm_drm.h b/include/uapi/drm/msm_drm.h index 5c67294edc95..b99098792371 100644 --- a/include/uapi/drm/msm_drm.h +++ b/include/uapi/drm/msm_drm.h @@ -117,6 +117,7 @@ struct drm_msm_timespec { * ioctl will throw -EPIPE. */ #define MSM_PARAM_EN_VM_BIND 0x16 /* WO, once */ +#define MSM_PARAM_AQE 0x17 /* RO */ =20 /* For backwards compat. The original support for preemption was based on * a single ring per priority level so # of priority levels equals the # --=20 2.51.0