From: Akhil P Oommen <akhilpo@oss.qualcomm.com>
To: Chia-I Wu <olvaffe@gmail.com>
Cc: rob.clark@oss.qualcomm.com, Sean Paul <sean@poorly.run>,
Konrad Dybcio <konradybcio@kernel.org>,
Dmitry Baryshkov <lumag@kernel.org>,
Abhinav Kumar <abhinav.kumar@linux.dev>,
Jessica Zhang <jessica.zhang@oss.qualcomm.com>,
Marijn Suijten <marijn.suijten@somainline.org>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
Antonino Maniscalco <antomani103@gmail.com>,
Neil Armstrong <neil.armstrong@linaro.org>,
linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org,
freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 15/16] drm/msm/a6xx: Enable IFPC on Adreno X1-85
Date: Mon, 3 Nov 2025 20:41:23 +0530 [thread overview]
Message-ID: <5272401a-612c-467e-a833-36fe72837d5b@oss.qualcomm.com> (raw)
In-Reply-To: <CAPaKu7QvBZmx0b8SDBY1H3u-Em+0py0BrGkmrfGUXkx1uQrg3A@mail.gmail.com>
On 11/2/2025 11:25 PM, Chia-I Wu wrote:
> On Sat, Nov 1, 2025 at 12:52 PM Akhil P Oommen <akhilpo@oss.qualcomm.com> wrote:
>>
>> On 11/1/2025 6:27 PM, Rob Clark wrote:
>>> On Fri, Oct 31, 2025 at 4:43 PM Chia-I Wu <olvaffe@gmail.com> wrote:
>>>>
>>>> On Mon, Sep 8, 2025 at 1:28 AM Akhil P Oommen <akhilpo@oss.qualcomm.com> wrote:
>>>>>
>>>>> Add the IFPC restore register list and enable IFPC support on Adreno
>>>>> X1-85 gpu.
>>>>>
>>>>> Signed-off-by: Akhil P Oommen <akhilpo@oss.qualcomm.com>
>>>>> ---
>>>>> drivers/gpu/drm/msm/adreno/a6xx_catalog.c | 68 ++++++++++++++++++++++++++++++-
>>>>> drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 15 +++++--
>>>>> drivers/gpu/drm/msm/adreno/a6xx_gpu.h | 1 +
>>>>> 3 files changed, 79 insertions(+), 5 deletions(-)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c
>>>>> index 00e1afd46b81546eec03e22cda9e9a604f6f3b60..547c046730a9b50a82cc9b27f08a5b1eeb08dced 100644
>>>>> --- a/drivers/gpu/drm/msm/adreno/a6xx_catalog.c
>>>>> +++ b/drivers/gpu/drm/msm/adreno/a6xx_catalog.c
>>>>> @@ -1343,6 +1343,69 @@ static const uint32_t a7xx_pwrup_reglist_regs[] = {
>>>>>
>>>>> DECLARE_ADRENO_REGLIST_LIST(a7xx_pwrup_reglist);
>>>>>
>>>>> +/* Applicable for X185, A750 */
>>>>> +static const u32 a750_ifpc_reglist_regs[] = {
>>>>> + REG_A6XX_TPL1_BICUBIC_WEIGHTS_TABLE_0,
>>>>> + REG_A6XX_TPL1_BICUBIC_WEIGHTS_TABLE_1,
>>>>> + REG_A6XX_TPL1_BICUBIC_WEIGHTS_TABLE_2,
>>>>> + REG_A6XX_TPL1_BICUBIC_WEIGHTS_TABLE_3,
>>>>> + REG_A6XX_TPL1_BICUBIC_WEIGHTS_TABLE_4,
>>>>> + REG_A6XX_TPL1_NC_MODE_CNTL,
>>>>> + REG_A6XX_SP_NC_MODE_CNTL,
>>>>> + REG_A6XX_CP_DBG_ECO_CNTL,
>>>>> + REG_A6XX_CP_PROTECT_CNTL,
>>>>> + REG_A6XX_CP_PROTECT(0),
>>>>> + REG_A6XX_CP_PROTECT(1),
>>>>> + REG_A6XX_CP_PROTECT(2),
>>>>> + REG_A6XX_CP_PROTECT(3),
>>>>> + REG_A6XX_CP_PROTECT(4),
>>>>> + REG_A6XX_CP_PROTECT(5),
>>>>> + REG_A6XX_CP_PROTECT(6),
>>>>> + REG_A6XX_CP_PROTECT(7),
>>>>> + REG_A6XX_CP_PROTECT(8),
>>>>> + REG_A6XX_CP_PROTECT(9),
>>>>> + REG_A6XX_CP_PROTECT(10),
>>>>> + REG_A6XX_CP_PROTECT(11),
>>>>> + REG_A6XX_CP_PROTECT(12),
>>>>> + REG_A6XX_CP_PROTECT(13),
>>>>> + REG_A6XX_CP_PROTECT(14),
>>>>> + REG_A6XX_CP_PROTECT(15),
>>>>> + REG_A6XX_CP_PROTECT(16),
>>>>> + REG_A6XX_CP_PROTECT(17),
>>>>> + REG_A6XX_CP_PROTECT(18),
>>>>> + REG_A6XX_CP_PROTECT(19),
>>>>> + REG_A6XX_CP_PROTECT(20),
>>>>> + REG_A6XX_CP_PROTECT(21),
>>>>> + REG_A6XX_CP_PROTECT(22),
>>>>> + REG_A6XX_CP_PROTECT(23),
>>>>> + REG_A6XX_CP_PROTECT(24),
>>>>> + REG_A6XX_CP_PROTECT(25),
>>>>> + REG_A6XX_CP_PROTECT(26),
>>>>> + REG_A6XX_CP_PROTECT(27),
>>>>> + REG_A6XX_CP_PROTECT(28),
>>>>> + REG_A6XX_CP_PROTECT(29),
>>>>> + REG_A6XX_CP_PROTECT(30),
>>>>> + REG_A6XX_CP_PROTECT(31),
>>>>> + REG_A6XX_CP_PROTECT(32),
>>>>> + REG_A6XX_CP_PROTECT(33),
>>>>> + REG_A6XX_CP_PROTECT(34),
>>>>> + REG_A6XX_CP_PROTECT(35),
>>>>> + REG_A6XX_CP_PROTECT(36),
>>>>> + REG_A6XX_CP_PROTECT(37),
>>>>> + REG_A6XX_CP_PROTECT(38),
>>>>> + REG_A6XX_CP_PROTECT(39),
>>>>> + REG_A6XX_CP_PROTECT(40),
>>>>> + REG_A6XX_CP_PROTECT(41),
>>>>> + REG_A6XX_CP_PROTECT(42),
>>>>> + REG_A6XX_CP_PROTECT(43),
>>>>> + REG_A6XX_CP_PROTECT(44),
>>>>> + REG_A6XX_CP_PROTECT(45),
>>>>> + REG_A6XX_CP_PROTECT(46),
>>>>> + REG_A6XX_CP_PROTECT(47),
>>>>> +};
>>>>> +
>>>>> +DECLARE_ADRENO_REGLIST_LIST(a750_ifpc_reglist);
>>>>> +
>>>>> static const struct adreno_info a7xx_gpus[] = {
>>>>> {
>>>>> .chip_ids = ADRENO_CHIP_IDS(0x07000200),
>>>>> @@ -1432,12 +1495,14 @@ static const struct adreno_info a7xx_gpus[] = {
>>>>> .inactive_period = DRM_MSM_INACTIVE_PERIOD,
>>>>> .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
>>>>> ADRENO_QUIRK_HAS_HW_APRIV |
>>>>> - ADRENO_QUIRK_PREEMPTION,
>>>>> + ADRENO_QUIRK_PREEMPTION |
>>>>> + ADRENO_QUIRK_IFPC,
>>>>> .init = a6xx_gpu_init,
>>>>> .a6xx = &(const struct a6xx_info) {
>>>>> .hwcg = a740_hwcg,
>>>>> .protect = &a730_protect,
>>>>> .pwrup_reglist = &a7xx_pwrup_reglist,
>>>>> + .ifpc_reglist = &a750_ifpc_reglist,
>>>>> .gmu_chipid = 0x7050001,
>>>>> .gmu_cgc_mode = 0x00020202,
>>>>> },
>>>>> @@ -1466,6 +1531,7 @@ static const struct adreno_info a7xx_gpus[] = {
>>>>> .a6xx = &(const struct a6xx_info) {
>>>>> .protect = &a730_protect,
>>>>> .pwrup_reglist = &a7xx_pwrup_reglist,
>>>>> + .ifpc_reglist = &a750_ifpc_reglist,
>>>>> .gmu_chipid = 0x7090100,
>>>>> .gmu_cgc_mode = 0x00020202,
>>>>> .bcms = (const struct a6xx_bcm[]) {
>>>>> diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
>>>>> index 76dd78f5c48ea818a2aa209e0c0c88bc5e8f4e06..91a2a82c4f388ca6b052172efdd7255165f3c04a 100644
>>>>> --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
>>>>> +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
>>>>> @@ -828,11 +828,10 @@ static void a7xx_patch_pwrup_reglist(struct msm_gpu *gpu)
>>>>> u32 *dest = (u32 *)&lock->regs[0];
>>>>> int i;
>>>>>
>>>>> - reglist = adreno_gpu->info->a6xx->pwrup_reglist;
>>>>> -
>>>>> lock->gpu_req = lock->cpu_req = lock->turn = 0;
>>>>> - lock->ifpc_list_len = 0;
>>>>> - lock->preemption_list_len = reglist->count;
>>>>> +
>>>>> + reglist = adreno_gpu->info->a6xx->ifpc_reglist;
>>>> This is NULL on X1-45 and causes
>>>>
>>>> [ 8.795603] Unable to handle kernel NULL pointer dereference at
>>>> virtual address 0000000000000008
>>>
>>> Hmm, this is probably going to happen on all a7xx which don't have
>>> IFPC from the looks of it.
>>>
>>> We should either check for the IFPC quirk.. or maybe just drop the
>>> quirk and decide whether IFPC is supported based on ifpc_reglist !=
>>> NULL?
>>>
>>> (That said, we probably do want to have IFPC enabled for x1-45)
>>
>> We should add a check for IFPC quirk here. Chia, do you plan to send a fix?
>>
>> To enable IFPC, we can just add a750_ifpc_reglist_regs[] to
>> adreno_gpu->info->a6xx->ifpc_reglist and enable the IFPC quirk.
> Maybe it is easier for you to do the fix? Because I would have several
> little questions (what happens when the reglist and the quirk flag are
> inconsistent? how about preemption reglist?)
>
> I am happy to do the testing.
No problem. I will send a fix.
-Akhil
>
>>
>> -Akhil.
>>
>>>
>>> BR,
>>> -R
>>>
>>>>> + lock->ifpc_list_len = reglist->count;
>>>>>
>>>>> /*
>>>>> * For each entry in each of the lists, write the offset and the current
>>>>> @@ -843,6 +842,14 @@ static void a7xx_patch_pwrup_reglist(struct msm_gpu *gpu)
>>>>> *dest++ = gpu_read(gpu, reglist->regs[i]);
>>>>> }
>>>>>
>>>>> + reglist = adreno_gpu->info->a6xx->pwrup_reglist;
>>>>> + lock->preemption_list_len = reglist->count;
>>>>> +
>>>>> + for (i = 0; i < reglist->count; i++) {
>>>>> + *dest++ = reglist->regs[i];
>>>>> + *dest++ = gpu_read(gpu, reglist->regs[i]);
>>>>> + }
>>>>> +
>>>>> /*
>>>>> * The overall register list is composed of
>>>>> * 1. Static IFPC-only registers
>>>>> diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h b/drivers/gpu/drm/msm/adreno/a6xx_gpu.h
>>>>> index 124c63c4615930b00c64e488a498163ae35afccd..0b17d36c36a9567e6afa4269ae7783ed3578e40e 100644
>>>>> --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.h
>>>>> +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.h
>>>>> @@ -45,6 +45,7 @@ struct a6xx_info {
>>>>> const struct adreno_reglist *hwcg;
>>>>> const struct adreno_protect *protect;
>>>>> const struct adreno_reglist_list *pwrup_reglist;
>>>>> + const struct adreno_reglist_list *ifpc_reglist;
>>>>> u32 gmu_chipid;
>>>>> u32 gmu_cgc_mode;
>>>>> u32 prim_fifo_threshold;
>>>>>
>>>>> --
>>>>> 2.50.1
>>>>>
>>
next prev parent reply other threads:[~2025-11-03 15:11 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-08 8:26 [PATCH v2 00/16] drm/msm: Support for Inter Frame Power Collapse (IFPC) feature Akhil P Oommen
2025-09-08 8:26 ` [PATCH v2 01/16] drm/msm: Update GMU register xml Akhil P Oommen
2025-09-08 8:26 ` [PATCH v2 02/16] drm/msm: a6xx: Fix gx_is_on check for a7x family Akhil P Oommen
2025-09-08 8:26 ` [PATCH v2 03/16] drm/msm/a6xx: Poll additional DRV status Akhil P Oommen
2025-09-08 15:18 ` Konrad Dybcio
2025-09-08 16:49 ` Akhil P Oommen
2025-09-08 8:26 ` [PATCH v2 04/16] drm/msm/a6xx: Fix PDC sleep sequence Akhil P Oommen
2025-09-08 8:26 ` [PATCH v2 05/16] drm/msm: a6xx: Refactor a6xx_sptprac_enable() Akhil P Oommen
2025-09-08 15:21 ` Konrad Dybcio
2025-09-08 8:26 ` [PATCH v2 06/16] drm/msm: Add an ftrace for gpu register access Akhil P Oommen
2025-09-08 8:27 ` [PATCH v2 07/16] drm/msm/adreno: Add fenced regwrite support Akhil P Oommen
2025-09-08 15:37 ` Konrad Dybcio
2025-09-08 16:15 ` Akhil P Oommen
2025-09-08 15:54 ` Connor Abbott
2025-09-08 16:46 ` Akhil P Oommen
2025-09-08 8:27 ` [PATCH v2 08/16] drm/msm/a6xx: Set Keep-alive votes to block IFPC Akhil P Oommen
2025-09-08 8:27 ` [PATCH v2 09/16] drm/msm/a6xx: Switch to GMU AO counter Akhil P Oommen
2025-09-08 8:27 ` [PATCH v2 10/16] drm/msm/a6xx: Poll AHB fence status in GPU IRQ handler Akhil P Oommen
2025-09-08 8:27 ` [PATCH v2 11/16] drm/msm: Add support for IFPC Akhil P Oommen
2025-09-08 8:27 ` [PATCH v2 12/16] drm/msm/a6xx: Fix hangcheck " Akhil P Oommen
2025-09-08 8:27 ` [PATCH v2 13/16] drm/msm/adreno: Disable IFPC when sysprof is active Akhil P Oommen
2025-09-08 8:27 ` [PATCH v2 14/16] drm/msm/a6xx: Make crashstate capture IFPC safe Akhil P Oommen
2025-09-08 8:27 ` [PATCH v2 15/16] drm/msm/a6xx: Enable IFPC on Adreno X1-85 Akhil P Oommen
2025-09-08 15:24 ` Konrad Dybcio
2025-10-31 23:43 ` Chia-I Wu
2025-11-01 12:57 ` Rob Clark
2025-11-01 19:52 ` Akhil P Oommen
2025-11-02 17:55 ` Chia-I Wu
2025-11-03 15:11 ` Akhil P Oommen [this message]
2025-09-08 8:27 ` [PATCH v2 16/16] drm/msm/a6xx: Enable IFPC on A750 GPU Akhil P Oommen
2025-09-08 17:11 ` [PATCH v2 00/16] drm/msm: Support for Inter Frame Power Collapse (IFPC) feature Neil Armstrong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5272401a-612c-467e-a833-36fe72837d5b@oss.qualcomm.com \
--to=akhilpo@oss.qualcomm.com \
--cc=abhinav.kumar@linux.dev \
--cc=airlied@gmail.com \
--cc=antomani103@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=jessica.zhang@oss.qualcomm.com \
--cc=konradybcio@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lumag@kernel.org \
--cc=marijn.suijten@somainline.org \
--cc=neil.armstrong@linaro.org \
--cc=olvaffe@gmail.com \
--cc=rob.clark@oss.qualcomm.com \
--cc=sean@poorly.run \
--cc=simona@ffwll.ch \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®