On Wed, 11 Mar 2026 16:03:59 -0700
Deborah Brouwer <[email protected]> wrote:

> Currently GpuInfo reports the interconnect coherency protocol as none
> without actually reading the `COHERENCY_ENABLE` register.
> 
> Although the result is the same, write `NO_COHERENCY` to the register
> during probe and then read back the register to populate the GpuInfo
> struct.
> 
> This ensures that GpuInfo is populated consistently and is always as
> accurate as possible by reporting the register values directly.
> 
> Signed-off-by: Deborah Brouwer <[email protected]>
> ---
>  drivers/gpu/drm/tyr/driver.rs | 6 ++++++
>  drivers/gpu/drm/tyr/gpu.rs    | 2 +-
>  2 files changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/tyr/driver.rs b/drivers/gpu/drm/tyr/driver.rs
> index 
> 10c212a3a01910858f02c6d637edff8a263f017b..b2147c305bacf081caf028866811b902cf7b9182
>  100644
> --- a/drivers/gpu/drm/tyr/driver.rs
> +++ b/drivers/gpu/drm/tyr/driver.rs
> @@ -138,6 +138,12 @@ fn probe(
>          issue_soft_reset(pdev.as_ref(), &iomem)?;
>          gpu::l2_power_on(pdev.as_ref(), &iomem)?;
>  
> +        let io = (*iomem).access(pdev.as_ref())?;
> +        io.write_val(
> +            COHERENCY_ENABLE::zeroed()
> +                .with_const_l2_cache_protocol_select::<{ 
> COHERENCY_ENABLE::NO_COHERENCY }>(),
> +        );

If we want to do it right from the start, we should do what Panthor
does: check if the device is IO coherent (device_get_dma_attr()), and
set the protocol based on that. Given device_get_dma_attr() is not
currently exposed by the rust Device abstraction, I guess we can force
it to NO_COHERENCY, but I'd add a

        // FIXME: This needs to be set properly once we get
        // device_get_dma_attr() properly exposed to the rust drivers.
        

> +
>          let gpu_info = GpuInfo::new(pdev.as_ref(), &iomem)?;
>          gpu_info_log(pdev.as_ref(), &iomem)?;
>  
> diff --git a/drivers/gpu/drm/tyr/gpu.rs b/drivers/gpu/drm/tyr/gpu.rs
> index 
> 51a250570f375e12bb0f7fb32f047bf219ef9b70..9f572ccffd11a7ea1872a1e4e1c88f78fd6cad29
>  100644
> --- a/drivers/gpu/drm/tyr/gpu.rs
> +++ b/drivers/gpu/drm/tyr/gpu.rs
> @@ -55,7 +55,7 @@ pub(crate) fn new(dev: &Device<Bound>, iomem: 
> &Devres<IoMem>) -> Result<Self> {
>              // TODO: Add texture_features_{1,2,3}.
>              texture_features: [io.read(TEXTURE_FEATURES_0).into_raw(), 0, 0, 
> 0],
>              as_present: io.read(AS_PRESENT).into_raw(),
> -            selected_coherency: 
> uapi::drm_panthor_gpu_coherency_DRM_PANTHOR_GPU_COHERENCY_NONE,
> +            selected_coherency: io.read(COHERENCY_ENABLE).into_raw(),
>              shader_present: io.read(SHADER_PRESENT).into_raw(),
>              l2_present: io.read(L2_PRESENT).into_raw(),
>              tiler_present: io.read(TILER_PRESENT).into_raw(),
> 

Reply via email to