On Mon, Jun 20, 2022 at 11:38:02AM +0300, Jani Nikula wrote: > Add initial runtime info that we can copy to runtime info at i915 > creation time. This lets us define the initial values for runtime info > statically while making it possible to change them runtime. This will be > the new home for the current "const" device info members that are > modified runtime anyway. > > Signed-off-by: Jani Nikula <jani.nikula@xxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_driver.c | 7 +++- > drivers/gpu/drm/i915/intel_device_info.h | 41 +++++++++++++----------- > 2 files changed, 29 insertions(+), 19 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c > index 0b00a05f1a74..5969cc7805d3 100644 > --- a/drivers/gpu/drm/i915/i915_driver.c > +++ b/drivers/gpu/drm/i915/i915_driver.c > @@ -796,6 +796,7 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent) > const struct intel_device_info *match_info = > (struct intel_device_info *)ent->driver_data; > struct intel_device_info *device_info; > + struct intel_runtime_info *runtime; > struct drm_i915_private *i915; > > i915 = devm_drm_dev_alloc(&pdev->dev, &i915_drm_driver, > @@ -811,7 +812,11 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent) > /* Setup the write-once "constant" device info */ > device_info = mkwrite_device_info(i915); > memcpy(device_info, match_info, sizeof(*device_info)); > - RUNTIME_INFO(i915)->device_id = pdev->device; > + > + /* Initialize initial runtime info from static const data and pdev. */ > + runtime = RUNTIME_INFO(i915); > + memcpy(runtime, &INTEL_INFO(i915)->__runtime, sizeof(*runtime)); > + runtime->device_id = pdev->device; > > return i915; > } > diff --git a/drivers/gpu/drm/i915/intel_device_info.h b/drivers/gpu/drm/i915/intel_device_info.h > index b86f68866e35..85385c98b9f4 100644 > --- a/drivers/gpu/drm/i915/intel_device_info.h > +++ b/drivers/gpu/drm/i915/intel_device_info.h > @@ -197,6 +197,27 @@ struct ip_version { > u8 rel; > }; > > +struct intel_runtime_info { > + /* > + * Platform mask is used for optimizing or-ed IS_PLATFORM calls into > + * into single runtime conditionals, and also to provide groundwork > + * for future per platform, or per SKU build optimizations. > + * > + * Array can be extended when necessary if the corresponding > + * BUILD_BUG_ON is hit. > + */ > + u32 platform_mask[2]; > + > + u16 device_id; > + > + u8 num_sprites[I915_MAX_PIPES]; > + u8 num_scalers[I915_MAX_PIPES]; I was just thinking about moving these out from runtime init, and perhaps converting to something a bit less funky (eg. plane bitmask or somesuch thing). But then I got lost trying to parse my way through the macro hell in i915_pci.c... > + > + u32 rawclk_freq; > + > + struct intel_step_info step; > +}; > + > struct intel_device_info { > struct ip_version graphics; > struct ip_version media; > @@ -252,27 +273,11 @@ struct intel_device_info { > u32 degamma_lut_tests; > u32 gamma_lut_tests; > } color; > -}; > > -struct intel_runtime_info { > /* > - * Platform mask is used for optimizing or-ed IS_PLATFORM calls into > - * into single runtime conditionals, and also to provide groundwork > - * for future per platform, or per SKU build optimizations. > - * > - * Array can be extended when necessary if the corresponding > - * BUILD_BUG_ON is hit. > + * Initial runtime info. Do not access outside of i915_driver_create(). > */ > - u32 platform_mask[2]; > - > - u16 device_id; > - > - u8 num_sprites[I915_MAX_PIPES]; > - u8 num_scalers[I915_MAX_PIPES]; > - > - u32 rawclk_freq; > - > - struct intel_step_info step; > + const struct intel_runtime_info __runtime; > }; > > struct intel_driver_caps { > -- > 2.30.2 -- Ville Syrjälä Intel