From nobody Thu Apr 9 23:26:37 2026 Received: from mx07-00376f01.pphosted.com (mx07-00376f01.pphosted.com [185.132.180.163]) (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 55D49BE5E for ; Thu, 5 Mar 2026 11:07:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.132.180.163 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772708891; cv=none; b=RLDaWg6MZrhdg3KVoY9vzxZ6rGiiRMJYWp0sv2pRSIOjFIJ4galR4Y9SyDCkk8FUc2AikcxInNWurJdzDbpVWjN7ZgD6KM+dbew0x5x06/pe0LrOAe+ucawuMsnUHqRpfm11Pd9H57eZ7fOVQ5/j4xy/UYuJy8KfOODVWK0z2Vk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772708891; c=relaxed/simple; bh=UK0HzNM0Hjzt6bAEnfm5A1R1GqivGHPANa4fW7CFl+k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-ID:References: In-Reply-To:To:CC; b=WzSXO1+0dKbWG2N+ierXiNtjOJkuMkc/lS3Tr4VR1JJ1L4F7siFtPRb43OILdL1FcgbX7E/yL04KSmElXTQssE28QsSIt/hM716Y1fsayQt0Uo2ev9sRcrEypecGWUVdLOLzape7h+J5MV2fh1nPRjcemroSikrshwhlJI+Daf4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=imgtec.com; spf=pass smtp.mailfrom=imgtec.com; dkim=pass (2048-bit key) header.d=imgtec.com header.i=@imgtec.com header.b=M0mxWvKr; arc=none smtp.client-ip=185.132.180.163 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=imgtec.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=imgtec.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=imgtec.com header.i=@imgtec.com header.b="M0mxWvKr" Received: from pps.filterd (m0168889.ppops.net [127.0.0.1]) by mx07-00376f01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 62580mOc2709618; Thu, 5 Mar 2026 11:07:24 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=imgtec.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=dk201812; bh=0 d4aJVUA3fUH10+yQGW7BMctA95MaZCfJgKPDKtFyX4=; b=M0mxWvKrfjpNoc5Ga 11/155WGcEKb6eqXibsQ6fkuh9KLqD0xOtcaGqgrkYKKHNeXcDug/BvyoCDoZkC2 DaUQ7IQ+Cr9Rw1eC0ejK18Z1uG/AK+UgaqLDwVt6sHeGpAFZSZA9inEKpkhTLEg0 gQYbUdSvGFi7xLIydAvyv9tl5WoHRpwpRxNYL9HFyfFxq2lyZilmXwg0vuOcTjs8 0F4c0ZuC67K4lISYnSbnAGwIuSAZQwDYZSpdtSQp59MUJV/pugbj3QU74rD1yGfV nk+qlsLjofSK4r0J3YnyRzMoO0UJ3sCAAtLKcuugHjUCFEQwORfwAvRcFt9RXWw4 iw1Gg== Received: from hhmail01.hh.imgtec.org (83-244-153-141.cust-83.exponential-e.net [83.244.153.141]) by mx07-00376f01.pphosted.com (PPS) with ESMTPS id 4cp30uhhbs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 05 Mar 2026 11:07:24 +0000 (GMT) Received: from NP-G-BRAJESH.pu.imgtec.org (172.25.128.150) by HHMAIL01.hh.imgtec.org (10.100.10.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.37; Thu, 5 Mar 2026 11:07:21 +0000 From: Brajesh Gupta Date: Thu, 5 Mar 2026 11:06:16 +0000 Subject: [PATCH 1/2] drm/imagination: Improve firmware power off for layout_mars config 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: <20260305-b4-staging-layout_mars_base-v1-1-09831fa17cef@imgtec.com> References: <20260305-b4-staging-layout_mars_base-v1-0-09831fa17cef@imgtec.com> In-Reply-To: <20260305-b4-staging-layout_mars_base-v1-0-09831fa17cef@imgtec.com> To: Frank Binns , Matt Coster , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Alessio Belle , Alexandru Dadu CC: , , "Brajesh Gupta" X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1772708838; l=5245; i=brajesh.gupta@imgtec.com; s=20260107; h=from:subject:message-id; bh=UK0HzNM0Hjzt6bAEnfm5A1R1GqivGHPANa4fW7CFl+k=; b=uxn+A76P2kqiwE6xTTeqYe7CSF/8U+MMp82TIfPHylxuyEX+iX8a+/cg6ObK4Zo5jvo3sXtz/ NDAnkoXASzsAN5wQ+VQ/aCpkLsInGajENtizOmKIZtWQPRcBZp67Ay6 X-Developer-Key: i=brajesh.gupta@imgtec.com; a=ed25519; pk=mxdDr22E/sHiu68U/bLe0W/SRYi3i848ZgoBuEyk21E= X-Authority-Analysis: v=2.4 cv=IoITsb/g c=1 sm=1 tr=0 ts=69a963ec cx=c_pps a=AKOq//PuzOIrVTIF9yBwbA==:117 a=AKOq//PuzOIrVTIF9yBwbA==:17 a=aSvOoEy96_oA:10 a=IkcTkHD0fZMA:10 a=Yq5XynenixoA:10 a=VkNPw1HP01LnGYTKEx00:22 a=kQ-hrUj2-E3RCbRHssb7:22 a=7RYWX5rxfSByPNLylY2M:22 a=r_1tXGB3AAAA:8 a=2EhetXc2wdb5fkq4U_wA:9 a=QEXdDO2ut3YA:10 a=t8nPyN_e6usw4ciXM-Pk:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMzA1MDA5MCBTYWx0ZWRfX0O++b8++uYNg Vb98d7vpoOP0ZbauLKP/Po+3wQL4N2EHV7Vx611hWoioL6kjeicpOfkI2LjVZB5Bd3cBs9DsJPs KNKbH/LnZza9M2uMcQGfzUSpqSb4KkmGjuS8vW2bTVRnvnS5vWf5g53LwRhyrPfoLXWwvYKw8cP EvMObh2/bCGIMTrlURDXQFURzorIXLKZSocRsj7h/rX3xf3w7kwlW3Ixw/Ww0CPRpgzbR2whbAx jDR4KQ47FaBNorG5lVR5ErPKEi0jDy3H/V90QSA++0LmGy1CWB1P++KVmVH4/vMmgYpQwPdYLjK Yz7MLi0Ga6S+RWahMGv52w3QYh+fudkSeMJsrLl97/FEYoMvxO4emNLyY86/jVHWZ2LOQuAF6sh e1Ow5I1QciTPlv4JvRfDLxamfAKwk0fiqPaF/wbdwGoQpBY9e11aBD8dy62kr2F2r4LcvSajmP8 YnH6x6pTN24MW92yBUw== X-Proofpoint-GUID: Kip5sdEy6LWtGDi0zHY-MVBJWZsHtCX4 X-Proofpoint-ORIG-GUID: Kip5sdEy6LWtGDi0zHY-MVBJWZsHtCX4 In layout_mars HW config, Firmware MCU moved from SideKick to new Mars domain so Firmware takes care of powering down Sidekick/Jones and SLC. Skip checks for those from kernel and check idle bits for Firmware MCU and system arbiter excluding SOCIF. Signed-off-by: Brajesh Gupta --- drivers/gpu/drm/imagination/pvr_fw_startstop.c | 86 +++++++++++++++++-----= ---- 1 file changed, 58 insertions(+), 28 deletions(-) diff --git a/drivers/gpu/drm/imagination/pvr_fw_startstop.c b/drivers/gpu/d= rm/imagination/pvr_fw_startstop.c index dcbb9903e791..ce089f51f06a 100644 --- a/drivers/gpu/drm/imagination/pvr_fw_startstop.c +++ b/drivers/gpu/drm/imagination/pvr_fw_startstop.c @@ -208,19 +208,31 @@ pvr_fw_stop(struct pvr_device *pvr_dev) ~(ROGUE_CR_SIDEKICK_IDLE_GARTEN_EN | ROGUE_CR_SIDEKICK_IDLE_SOCIF_EN | ROGUE_CR_SIDEKICK_IDLE_HOSTIF_EN); - bool skip_garten_idle =3D false; + u64 layout_mars_value =3D 0; + bool layout_mars =3D false; u32 reg_value; int err; =20 + if (PVR_FEATURE_VALUE(pvr_dev, layout_mars, &layout_mars_value) =3D=3D 0) + layout_mars =3D layout_mars_value > 0; + /* - * Wait for Sidekick/Jones to signal IDLE except for the Garten Wrapper. - * For cores with the LAYOUT_MARS feature, SIDEKICK would have been + * For cores with the LAYOUT_MARS feature, SIDEKICK and SLC would have be= en * powered down by the FW. */ - err =3D pvr_cr_poll_reg32(pvr_dev, ROGUE_CR_SIDEKICK_IDLE, sidekick_idle_= mask, - sidekick_idle_mask, POLL_TIMEOUT_USEC); - if (err) - return err; + if (!layout_mars) { + /* Wait for Sidekick/Jones to signal IDLE except for the Garten Wrapper.= */ + err =3D pvr_cr_poll_reg32(pvr_dev, ROGUE_CR_SIDEKICK_IDLE, sidekick_idle= _mask, + sidekick_idle_mask, POLL_TIMEOUT_USEC); + if (err) + return err; + + /* Wait for SLC to signal IDLE. */ + err =3D pvr_cr_poll_reg32(pvr_dev, ROGUE_CR_SLC_IDLE, ROGUE_CR_SLC_IDLE_= MASKFULL, + ROGUE_CR_SLC_IDLE_MASKFULL, POLL_TIMEOUT_USEC); + if (err) + return err; + } =20 /* Unset MTS DM association with threads. */ pvr_cr_write32(pvr_dev, ROGUE_CR_MTS_INTCTX_THREAD0_DM_ASSOC, @@ -229,6 +241,7 @@ pvr_fw_stop(struct pvr_device *pvr_dev) pvr_cr_write32(pvr_dev, ROGUE_CR_MTS_BGCTX_THREAD0_DM_ASSOC, ROGUE_CR_MTS_BGCTX_THREAD0_DM_ASSOC_MASKFULL & ROGUE_CR_MTS_BGCTX_THREAD0_DM_ASSOC_DM_ASSOC_CLRMSK); + pvr_cr_write32(pvr_dev, ROGUE_CR_MTS_INTCTX_THREAD1_DM_ASSOC, ROGUE_CR_MTS_INTCTX_THREAD1_DM_ASSOC_MASKFULL & ROGUE_CR_MTS_INTCTX_THREAD1_DM_ASSOC_DM_ASSOC_CLRMSK); @@ -270,25 +283,23 @@ pvr_fw_stop(struct pvr_device *pvr_dev) return err; =20 /* - * Wait for SLC to signal IDLE. - * For cores with the LAYOUT_MARS feature, SLC would have been powered - * down by the FW. + * For cores with the LAYOUT_MARS feature, SIDEKICK and SLC would have be= en + * powered down by the FW. */ - err =3D pvr_cr_poll_reg32(pvr_dev, ROGUE_CR_SLC_IDLE, - ROGUE_CR_SLC_IDLE_MASKFULL, - ROGUE_CR_SLC_IDLE_MASKFULL, POLL_TIMEOUT_USEC); - if (err) - return err; + if (!layout_mars) { + /* Wait for SLC to signal IDLE. */ + err =3D pvr_cr_poll_reg32(pvr_dev, ROGUE_CR_SLC_IDLE, + ROGUE_CR_SLC_IDLE_MASKFULL, + ROGUE_CR_SLC_IDLE_MASKFULL, POLL_TIMEOUT_USEC); + if (err) + return err; =20 - /* - * Wait for Sidekick/Jones to signal IDLE except for the Garten Wrapper. - * For cores with the LAYOUT_MARS feature, SIDEKICK would have been power= ed - * down by the FW. - */ - err =3D pvr_cr_poll_reg32(pvr_dev, ROGUE_CR_SIDEKICK_IDLE, sidekick_idle_= mask, - sidekick_idle_mask, POLL_TIMEOUT_USEC); - if (err) - return err; + /* Wait for Sidekick/Jones to signal IDLE except for the Garten Wrapper.= */ + err =3D pvr_cr_poll_reg32(pvr_dev, ROGUE_CR_SIDEKICK_IDLE, sidekick_idle= _mask, + sidekick_idle_mask, POLL_TIMEOUT_USEC); + if (err) + return err; + } =20 if (pvr_dev->fw_dev.processor_type =3D=3D PVR_FW_PROCESSOR_TYPE_META) { err =3D pvr_meta_cr_read32(pvr_dev, META_CR_TxVECINT_BHALT, ®_value); @@ -300,11 +311,30 @@ pvr_fw_stop(struct pvr_device *pvr_dev) * Wrapper if there is no debugger attached (TxVECINT_BHALT =3D * 0x0). */ - if (reg_value) - skip_garten_idle =3D true; - } + if (!reg_value) { + err =3D pvr_cr_poll_reg32(pvr_dev, ROGUE_CR_SIDEKICK_IDLE, + ROGUE_CR_SIDEKICK_IDLE_GARTEN_EN, + ROGUE_CR_SIDEKICK_IDLE_GARTEN_EN, + POLL_TIMEOUT_USEC); + if (err) + return err; + } + } else if (layout_mars) { + /* + * As FW core has been moved from SIDEKICK to the new MARS domain, check= ing + * idle bits for CPU & System Arbiter excluding SOCIF which will never be + * idle if Host polling on this register + */ + err =3D pvr_cr_poll_reg32(pvr_dev, ROGUE_CR_MARS_IDLE, + ROGUE_CR_MARS_IDLE_CPU_EN | + ROGUE_CR_MARS_IDLE_MH_SYSARB0_EN, + ROGUE_CR_MARS_IDLE_CPU_EN | + ROGUE_CR_MARS_IDLE_MH_SYSARB0_EN, + POLL_TIMEOUT_USEC); =20 - if (!skip_garten_idle) { + if (err) + return err; + } else { err =3D pvr_cr_poll_reg32(pvr_dev, ROGUE_CR_SIDEKICK_IDLE, ROGUE_CR_SIDEKICK_IDLE_GARTEN_EN, ROGUE_CR_SIDEKICK_IDLE_GARTEN_EN, --=20 2.43.0