On Mon, 22 May 2023, Matt Roper <[email protected]> wrote:
> +static const struct intel_display_device_info xe_lpdp_display = {
> +     XE_LPD_FEATURES,
> +     .has_cdclk_crawl = 1,
> +     .has_cdclk_squash = 1,
> +
> +     .__runtime_defaults.ip.ver = 14,
> +     .__runtime_defaults.fbc_mask = BIT(INTEL_FBC_A) | BIT(INTEL_FBC_B),
> +     .__runtime_defaults.cpu_transcoder_mask =
> +             BIT(TRANSCODER_A) | BIT(TRANSCODER_B) |
> +             BIT(TRANSCODER_C) | BIT(TRANSCODER_D),
> +};
> +
> +static const struct pci_device_id intel_display_ids[] = {

Since this is not used for MODULE_DEVICE_TABLE(), there's no requirement
for the array to be struct pci_device_id.

You can either have a struct with compatible members, or just undef and
redefine INTEL_VGA_DEVICE() to initialize a struct with pci id and const
struct intel_display_device_info *, so you can avoid the cast in
intel_display_device_probe().

See what's done with subplatform init arrays in intel_device_info.c.

This too is nitpicking, and can be fixed later.

> +     INTEL_I830_IDS(&i830_display),
> +     INTEL_I845G_IDS(&i845_display),
> +     INTEL_I85X_IDS(&i85x_display),
> +     INTEL_I865G_IDS(&i865g_display),
> +     INTEL_I915G_IDS(&i915g_display),
> +     INTEL_I915GM_IDS(&i915gm_display),
> +     INTEL_I945G_IDS(&i945g_display),
> +     INTEL_I945GM_IDS(&i945gm_display),
> +     INTEL_I965G_IDS(&i965g_display),
> +     INTEL_G33_IDS(&g33_display),
> +     INTEL_I965GM_IDS(&i965gm_display),
> +     INTEL_GM45_IDS(&gm45_display),
> +     INTEL_G45_IDS(&g45_display),
> +     INTEL_PINEVIEW_G_IDS(&g33_display),
> +     INTEL_PINEVIEW_M_IDS(&g33_display),
> +     INTEL_IRONLAKE_D_IDS(&ilk_d_display),
> +     INTEL_IRONLAKE_M_IDS(&ilk_m_display),
> +     INTEL_SNB_D_IDS(&snb_display),
> +     INTEL_SNB_M_IDS(&snb_display),
> +     INTEL_IVB_Q_IDS(NULL),          /* must be first IVB in list */
> +     INTEL_IVB_M_IDS(&ivb_display),
> +     INTEL_IVB_D_IDS(&ivb_display),
> +     INTEL_HSW_IDS(&hsw_display),
> +     INTEL_VLV_IDS(&vlv_display),
> +     INTEL_BDW_IDS(&bdw_display),
> +     INTEL_CHV_IDS(&chv_display),
> +     INTEL_SKL_IDS(&skl_display),
> +     INTEL_BXT_IDS(&bxt_display),
> +     INTEL_GLK_IDS(&glk_display),
> +     INTEL_KBL_IDS(&skl_display),
> +     INTEL_CFL_IDS(&skl_display),
> +     INTEL_ICL_11_IDS(&gen11_display),
> +     INTEL_EHL_IDS(&gen11_display),
> +     INTEL_JSL_IDS(&gen11_display),
> +     INTEL_TGL_12_IDS(&tgl_display),
> +     INTEL_DG1_IDS(&tgl_display),
> +     INTEL_RKL_IDS(&rkl_display),
> +     INTEL_ADLS_IDS(&adl_s_display),
> +     INTEL_RPLS_IDS(&adl_s_display),
> +     INTEL_ADLP_IDS(&xe_lpd_display),
> +     INTEL_ADLN_IDS(&xe_lpd_display),
> +     INTEL_RPLP_IDS(&xe_lpd_display),
> +     INTEL_DG2_IDS(&xe_hpd_display),
> +
> +     /* FIXME: Replace this with a GMD_ID lookup */
> +     INTEL_MTL_IDS(&xe_lpdp_display),
> +};
> +
> +const struct intel_display_device_info *
> +intel_display_device_probe(u16 pci_devid)
> +{
> +     int i;
> +
> +     for (i = 0; i < ARRAY_SIZE(intel_display_ids); i++) {
> +             if (intel_display_ids[i].device == pci_devid)
> +                     return (struct intel_display_device_info 
> *)intel_display_ids[i].driver_data;
> +     }
> +

I wonder if a debug message here would be helpful. *shrug*.

> +     return &no_display;
> +}


> diff --git a/drivers/gpu/drm/i915/intel_device_info.c 
> b/drivers/gpu/drm/i915/intel_device_info.c
> index 4d158927c78b..e1507ae59f2d 100644
> --- a/drivers/gpu/drm/i915/intel_device_info.c
> +++ b/drivers/gpu/drm/i915/intel_device_info.c
> @@ -574,7 +574,6 @@ void intel_device_info_driver_create(struct 
> drm_i915_private *i915,
>  {
>       struct intel_device_info *info;
>       struct intel_runtime_info *runtime;
> -     struct intel_display_runtime_info *display_runtime;
>  
>       /* Setup the write-once "constant" device info */
>       info = mkwrite_device_info(i915);
> @@ -583,9 +582,10 @@ void intel_device_info_driver_create(struct 
> drm_i915_private *i915,
>       /* Initialize initial runtime info from static const data and pdev. */
>       runtime = RUNTIME_INFO(i915);
>       memcpy(runtime, &INTEL_INFO(i915)->__runtime, sizeof(*runtime));
> -     display_runtime = DISPLAY_RUNTIME_INFO(i915);
> -     memcpy(display_runtime, &DISPLAY_INFO(i915)->__runtime_defaults,
> -            sizeof(*display_runtime));
> +
> +     /* Probe display support */
> +     info->display = intel_display_device_probe(device_id);
> +     *DISPLAY_RUNTIME_INFO(i915) = DISPLAY_INFO(i915)->__runtime_defaults;

I think I'd keep the memcpy.

Acked-by: Jani Nikula <[email protected]>


>  
>       runtime->device_id = device_id;
>  }

-- 
Jani Nikula, Intel Open Source Graphics Center

Reply via email to