[PATCH] clk: mediatek: Disable ACP to fix 3D on MT8192

Robin Murphy robin.murphy at arm.com
Tue Feb 15 07:21:52 PST 2022


On 2022-02-15 10:44, AngeloGioacchino Del Regno wrote:
> Il 20/01/22 15:27, Alyssa Rosenzweig ha scritto:
>>> We also already have SoC-specific GPU compatibles because even without
>>> experimental interconnect easter eggs, people integrate these IPs in 
>>> fairly
>>> involved ways and there's a fair degree of variety. However unless we 
>>> want
>>> to be super-strict it's also not too hard to simply assume that if we 
>>> can
>>> find a "mediatek,mt8192-infracfg" syscon then we set the MT8192 magic 
>>> bit
>>> within it, and if we can't then we don't.
>>
>> We need a MT8192-specific compatible for the GPU anyway due to "unique"
>> power management requirements, this is why the MT8183 before it has a
>> specific GPU compatible. So I'm not worried about the compatible.
>>
> 
> Thing is, as it was explained, this is about a unwanted SoC 
> misconfiguration,
> hence this is very specific to one SoC, which *happens to* integrate a 
> Mali GPU.
> 
> I agree with Stephen's reasoning - also in my opinion, the panfrost 
> driver should
> be dedicated to managing the Mali GPUs and *not* the SoCs on which it is 
> present,
> so disabling the Accelerator Coherency Port for MFG should be performed 
> inside of
> files that are dealing with the specific SoC that requires this 
> configuration (or,
> if you want, quirk).
> 
> Simply put, though, as you already perfectly know, there is no driver 
> that is
> dedicated to exclusively manage the "extra" INFRA bits, so here's what 
> I've been
> thinking for a while; my logical reasoning:
> - Doing it in the IOMMU driver may seem at a first glance to make some 
> sense,
>    but then, does this really have anything to do with the IOMMU? I 
> don't think so;
> - Performing the disablement in mtk-pm-domains is very shady... there's 
> nothing
>    that screams "power" in that;
> - This doesn't scream "clocks" either, I understand that;
> - As far as I understand this specific thing won't happen anymore (or at 
> least,
>    not in MediaTek land, but I also don't expect to see this on other 
> SoCs).
> 
> Getting back to MediaTek-land, only MT8192 is (and will ever be) 
> affected, from
> what I understand... and there is one driver that is very specific to, 
> targets
> only, and would probe only on MT8192 - which also happens to manage the 
> very same
> iospace that we also want to poke at to disable this bit......
> 
> ... clk-mt8192!

The only trouble with that argument is that it falls apart under the
slightest scrutiny ;)

The relevant parts of the power domain, IOMMU and GPU drivers are every
bit as SoC-specific as the clock driver, and it is the generic syscon
driver which owns and manages the actual MMIO space.

All in all this has now convinced me that it *is* worth the slight extra
effort to put random infracfg stuff in the random infracfg stuff place.
And by "slight" I mean it turns out I've spent longer writing this prose
than bashing out the illustrative diff below, which is the last opinion
I shall have on this matter. Feel free to take it and fix it, or do 
anything else if you prefer :)

Cheers,
Robin.

----->8-----
diff --git a/drivers/soc/mediatek/mtk-infracfg.c 
b/drivers/soc/mediatek/mtk-infracfg.c
index 0590b68e0d78..af22d0f3d547 100644
--- a/drivers/soc/mediatek/mtk-infracfg.c
+++ b/drivers/soc/mediatek/mtk-infracfg.c
@@ -72,3 +72,20 @@ int mtk_infracfg_clear_bus_protection(struct regmap 
*infracfg, u32 mask,

  	return ret;
  }
+
+static int __init mtk_infracfg_init(void)
+{
+	struct regmap *infracfg;
+
+	/*
+	 * MT8192 has an experimental path to route GPU traffic to the DSU's
+	 * Accelerator Coherency Port, which is inadvertently enabled by
+	 * default. It turns out not to work very well, so disable it.
+	 */
+	infracfg = syscon_regmap_lookup_by_compatible("mediatek,mt8192-infracfg");
+	if (infracfg)
+		regmap_set_bits(infracfg, MT8192_INFRA_CTRL,
+				MT8192_INFRA_CTRL_DISABLE_MFG2ACP);
+	return 0;
+}
+postcore_initcall(mtk_infracfg_init);
diff --git a/include/linux/soc/mediatek/infracfg.h 
b/include/linux/soc/mediatek/infracfg.h
index 4615a228da51..94f0f338ce49 100644
--- a/include/linux/soc/mediatek/infracfg.h
+++ b/include/linux/soc/mediatek/infracfg.h
@@ -147,6 +147,9 @@
  #define INFRA_TOPAXI_PROTECTEN_SET		0x0260
  #define INFRA_TOPAXI_PROTECTEN_CLR		0x0264

+#define MT8192_INFRA_CTRL			0x290
+#define MT8192_INFRA_CTRL_DISABLE_MFG2ACP	BIT(9)
+
  #define REG_INFRA_MISC				0xf00
  #define F_DDR_4GB_SUPPORT_EN			BIT(13)




More information about the linux-arm-kernel mailing list