On Thu, 28 May 2026 16:05:35 +0100
Karunika Choo <[email protected]> wrote:

> @@ -251,12 +279,56 @@ static int panthor_gpu_info_init(struct panthor_device 
> *ptdev)
>               ptdev->gpu_info.tiler_present = gpu_read64(gpu_iomem, 
> GPU_TILER_PRESENT);
>               ptdev->gpu_info.l2_present = gpu_read64(gpu_iomem, 
> GPU_L2_PRESENT);
>       }
> +}
> +
> +static void panthor_gpu_info_v15_init(struct panthor_device *ptdev)
> +{
> +     void __iomem *pwr_iomem = ptdev->iomem + 
> ptdev->hw->map.pwr_control_base;
> +     u64 texture_features;
> +
> +     ptdev->gpu_info.gpu_rev_wide = gpu_read64(ptdev->iomem, 
> DISCOVER_REVIDR);
> +     ptdev->gpu_info.l2_features_wide = gpu_read64(ptdev->iomem, 
> DISCOVER_L2_FEATURES);
> +
> +     texture_features = gpu_read64(ptdev->iomem, DISCOVER_TEXTURE_FEATURES);
> +     ptdev->gpu_info.texture_features[0] = lower_32_bits(texture_features);
> +     ptdev->gpu_info.texture_features[1] = upper_32_bits(texture_features);
> +
> +     ptdev->gpu_info.thread_features = gpu_read(ptdev->iomem, 
> DISCOVER_THREAD_FEATURES);
> +     ptdev->gpu_info.max_threads = gpu_read(ptdev->iomem, 
> DISCOVER_THREAD_MAX_THREADS);
> +     ptdev->gpu_info.thread_num_active_granularity =
> +             gpu_read(ptdev->iomem, DISCOVER_THREAD_NUM_ACTIVE_GRANULARITY);
> +
> +     ptdev->gpu_info.gpu_features = gpu_read64(ptdev->iomem, 
> DISCOVER_GPU_FEATURES);
> +
> +     /* The following _HI registers do not contain any information (yet) */

AFAICT, this is also the case for DISCOVER_GPU_FEATURES.

> +     ptdev->gpu_info.mem_features = gpu_read(ptdev->iomem, 
> DISCOVER_MEM_FEATURES);
> +     ptdev->gpu_info.mmu_features = gpu_read(ptdev->iomem, 
> DISCOVER_MMU_FEATURES);
> +     ptdev->gpu_info.coherency_features = gpu_read(ptdev->iomem, 
> DISCOVER_AMBA_FEATURES);
> +     ptdev->gpu_info.tiler_features = gpu_read(ptdev->iomem, 
> DISCOVER_TILER_FEATURES);
> +     ptdev->gpu_info.core_features = gpu_read(ptdev->iomem, 
> DISCOVER_CORE_FEATURES);
> +
> +     /* AS_PRESENT register removed on v15+ create virtual mask from 
> MMU_FEATURES.AS_COUNT */
> +     ptdev->gpu_info.as_present =
> +             (1U << MMU_FEATURES_AS_COUNT(ptdev->gpu_info.mmu_features)) - 1;
> +
> +     ptdev->gpu_info.l2_present = gpu_read64(pwr_iomem, PWR_L2_PRESENT);
> +     ptdev->gpu_info.tiler_present = gpu_read64(pwr_iomem, 
> PWR_TILER_PRESENT);
> +     ptdev->gpu_info.shader_present = gpu_read64(pwr_iomem, 
> PWR_SHADER_PRESENT);
> +}

Reply via email to