mkwrite_device_info removal
Subsystems (2)
cover mkwrite_device_info removal
From: Tvrtko Ursulin <[email protected]>
Some time ago we discussed the long term goal or removing the mkwrite_device_info hack in favour of splitting device info to a truly read-only and runtime halfves. This series attempts to do that.
Approach taken is to identify three classes of device info members:
1. Only set in static const tables.
2. Set in static const tables and modified at runtime.
3. Only set at runtime.
First set is left as is.
Third set is moved from const device_info into a newly created runtime_device_info and all accessors and use sites are converted to look at the new location.
Second set is duplicated in both device info structures, but the const copy is only used to copy over the respective members early on driver load. Otherwise the process is the same as for the third group.
End result is complete removal of mkwrite_device_info and removal of the embedded copy of device info stored in dev_priv/i915, which is now replaced with a pointer to the actual read-only/static const table.
Apart from the conceptual cleanup this has the benefit of making the static tables smaller since they are duplicated by the amount of platforms. And dev_priv/i915 is also smaller since it doesn't hold a copy of the whole device info.
On rough edge however is the copying over of group two members on driver load. I haven't found a nice automatic way to do it so at the moment it relies on manually adding lines to i915_driver_create.
Last patch of the series if probably best omitted since I think double underscore protection actually works well for preventing mistakes in any future work.
Tvrtko Ursulin (7):
drm/i915: Remove has_pooled_eu static initializer drm/i915: Introduce runtime device info
drm/i915: Move all runtime modified device info fields into runtime
info
drm/i915: Remove mkwrite_device_info
drm/i915: Move gen and platform mask to runtime device info drm/i915: Introduce subplatform concept
drm/i915: Remove double underscore from static device info member
names
drivers/gpu/drm/i915/i915_debugfs.c | 31 ++- drivers/gpu/drm/i915/i915_drv.c | 71 +++++-- drivers/gpu/drm/i915/i915_drv.h | 191 ++++++++---------- drivers/gpu/drm/i915/i915_gem.c | 5 +- drivers/gpu/drm/i915/i915_gem_gtt.c | 2 +- drivers/gpu/drm/i915/i915_gpu_error.c | 19 +- drivers/gpu/drm/i915/i915_gpu_error.h | 1 + drivers/gpu/drm/i915/i915_irq.c | 2 +- drivers/gpu/drm/i915/i915_pci.c | 5 +- drivers/gpu/drm/i915/i915_perf.c | 5 +- drivers/gpu/drm/i915/i915_query.c | 2 +- drivers/gpu/drm/i915/i915_reg.h | 190 ++++++++--------- drivers/gpu/drm/i915/intel_bios.c | 2 +- drivers/gpu/drm/i915/intel_device_info.c | 178 +++++++++++----- drivers/gpu/drm/i915/intel_device_info.h | 82 ++++++-- drivers/gpu/drm/i915/intel_display.c | 20 +- drivers/gpu/drm/i915/intel_display.h | 10 +- drivers/gpu/drm/i915/intel_engine_cs.c | 9 +- drivers/gpu/drm/i915/intel_fbc.c | 2 +- drivers/gpu/drm/i915/intel_fbdev.c | 4 +- drivers/gpu/drm/i915/intel_guc_submission.c | 4 +- drivers/gpu/drm/i915/intel_i2c.c | 2 +- drivers/gpu/drm/i915/intel_lpe_audio.c | 2 +- drivers/gpu/drm/i915/intel_lrc.c | 14 +- drivers/gpu/drm/i915/intel_pm.c | 11 +- drivers/gpu/drm/i915/intel_ringbuffer.c | 4 +- drivers/gpu/drm/i915/intel_ringbuffer.h | 4 +- drivers/gpu/drm/i915/intel_uncore.c | 4 +- drivers/gpu/drm/i915/intel_workarounds.c | 6 +- drivers/gpu/drm/i915/selftests/huge_pages.c | 18 +- .../gpu/drm/i915/selftests/i915_gem_context.c | 6 +- drivers/gpu/drm/i915/selftests/intel_guc.c | 4 +- drivers/gpu/drm/i915/selftests/intel_lrc.c | 4 +- .../gpu/drm/i915/selftests/mock_gem_device.c | 11 +- 34 files changed, 527 insertions(+), 398 deletions(-)
Signature · 6 lines
2.19.1 _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
RFC 1/7 drm/i915: Remove has_pooled_eu static initializer
From: Tvrtko Ursulin <[email protected]>
It is only initialized to zero once so does not need an explicit initializer.
--- drivers/gpu/drm/i915/i915_pci.c | 1 - 1 file changed, 1 deletion(-)
drivers/gpu/drm/i915/i915_pci.c +0 -1
@@ -507,7 +507,6 @@ static const struct intel_device_info intel_skylake_gt4_info = { .has_fbc = 1, \ .has_psr = 1, \ .has_runtime_pm = 1, \ - .has_pooled_eu = 0, \ .has_csr = 1, \ .has_rc6 = 1, \ .has_dp_mst = 1, \
Signature · 6 lines
2.19.1 _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 1/7] drm/i915: Remove has_pooled_eu static initializer
Quoted 17 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
It is only initialized to zero once so does not need an explicit initializer.
Signed-off-by Tvrtko Ursulin <[email protected]>Cc Chris Wilson <[email protected]>Cc Jani Nikula <[email protected]>--- drivers/gpu/drm/i915/i915_pci.c | 1 - 1 file changed, 1 deletion(-)drivers/gpu/drm/i915/i915_pci.c +0
-0
drivers/gpu/drm/i915/i915_pci.c static const struct intel_device_info intel_skylake_gt4_info = { · line 512
Quoted 7 lines
drivers/gpu/drm/i915/i915_pci.c +0
-1@@ -507,7 +507,6 @@ static const struct intel_device_info intel_skylake_gt4_info = { .has_fbc = 1, \ .has_psr = 1, \ .has_runtime_pm = 1, \ - .has_pooled_eu = 0, \ .has_csr = 1, \ .has_rc6 = 1, \ .has_dp_mst = 1, \
I'm always a bit wary with the way we inherit these macros. But this one looks safe since it's only ever unitialized at runtime, and also this macro (GEN9_LP_FEATURES despite what diff says) doesn't currently inherit anything.
PS. I wonder if there any magic trick we could do to make these
diffs actually legible?
Signature · 6 lines
Ville Syrjälä Intel _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
RFC 2/7 drm/i915: Introduce runtime device info
In reply to Tvrtko UrsulinFrom: Tvrtko Ursulin <[email protected]>
Idea of runtime device info is to contain all fields from the existing device info which are modified at runtime.
Initially we move there fields which are never set from the static tables ie.: num_rings, num_sprites, num_scalers, cs_timestamp_frequency_khz, sseu and has_pooled_eu.
--- drivers/gpu/drm/i915/i915_debugfs.c | 27 +++--- drivers/gpu/drm/i915/i915_drv.c | 17 ++-- drivers/gpu/drm/i915/i915_drv.h | 3 +- drivers/gpu/drm/i915/i915_gpu_error.c | 19 +++-- drivers/gpu/drm/i915/i915_gpu_error.h | 1 + drivers/gpu/drm/i915/i915_perf.c | 5 +- drivers/gpu/drm/i915/i915_query.c | 2 +- drivers/gpu/drm/i915/intel_device_info.c | 82 +++++++++++-------- drivers/gpu/drm/i915/intel_device_info.h | 42 ++++++---- drivers/gpu/drm/i915/intel_display.c | 2 +- drivers/gpu/drm/i915/intel_display.h | 6 +- drivers/gpu/drm/i915/intel_engine_cs.c | 4 +- drivers/gpu/drm/i915/intel_lrc.c | 14 ++-- drivers/gpu/drm/i915/intel_pm.c | 2 +- drivers/gpu/drm/i915/intel_ringbuffer.c | 4 +- drivers/gpu/drm/i915/intel_ringbuffer.h | 4 +- drivers/gpu/drm/i915/intel_workarounds.c | 6 +- .../gpu/drm/i915/selftests/i915_gem_context.c | 6 +- drivers/gpu/drm/i915/selftests/intel_lrc.c | 4 +- 19 files changed, 144 insertions(+), 106 deletions(-)
drivers/gpu/drm/i915/i915_debugfs.c +13 -14
@@ -48,7 +48,7 @@ static int i915_capabilities(struct seq_file *m, void *data)seq_printf (m,"pch: %d\n" ,INTEL_PCH_TYPE (dev_priv));intel_device_info_dump_flags (info, &p); -intel_device_info_dump_runtime (info, &p); +intel_device_info_dump_runtime (&dev_priv->runtime_info, &p);intel_driver_caps_print (&dev_priv->caps, &p);kernel_param_lock (THIS_MODULE );
@@ -3289,7 +3289,7 @@ static int i915_engine_info(struct seq_file *m, void *unused)seq_printf (m,"Global active requests: %d\n" , dev_priv->gt.active_requests);seq_printf (m,"CS timestamp frequency: %u kHz\n" , - dev_priv->info.cs_timestamp_frequency_khz); + dev_priv->runtime_info.cs_timestamp_frequency_khz); p =drm_seq_file_printer (m);for_each_engine (engine, dev_priv, id)
@@ -3305,7 +3305,7 @@ static int i915_rcs_topology(struct seq_file *m, void *unused)struct drm_i915_private *dev_priv =node_to_i915 (m->private);struct drm_printer p =drm_seq_file_printer (m); -intel_device_info_dump_topology (&INTEL_INFO (dev_priv)->sseu, &p); +intel_device_info_dump_topology (&dev_priv->runtime_info.sseu, &p);return 0 ; }
@@ -4341,7 +4341,7 @@ static void gen10_sseu_device_status(struct drm_i915_private *dev_priv, struct sseu_dev_info *sseu) {#define SS_MAX 6 -const struct intel_device_info *info =INTEL_INFO (dev_priv); +const struct intel_runtime_device_info *info = &dev_priv->runtime_info;u32 s_reg[SS_MAX ], eu_reg[2 *SS_MAX ], eu_mask[2 ];int s, ss;
@@ -4397,7 +4397,7 @@ static void gen9_sseu_device_status(struct drm_i915_private *dev_priv, struct sseu_dev_info *sseu) {#define SS_MAX 3 -const struct intel_device_info *info =INTEL_INFO (dev_priv); +const struct intel_runtime_device_info *info = &dev_priv->runtime_info;u32 s_reg[SS_MAX ], eu_reg[2 *SS_MAX ], eu_mask[2 ];int s, ss;
@@ -4424,8 +4424,7 @@ static void gen9_sseu_device_status(struct drm_i915_private *dev_priv, sseu->slice_mask |=BIT (s);if (IS_GEN9_BC (dev_priv)) - sseu->subslice_mask[s] = -INTEL_INFO (dev_priv)->sseu.subslice_mask[s]; + sseu->subslice_mask[s] = info->sseu.subslice_mask[s];for (ss =0 ; ss < info->sseu.max_subslices; ss++) {unsigned int eu_cnt;
@@ -4459,10 +4458,10 @@ static void broadwell_sseu_device_status(struct drm_i915_private *dev_priv,if (sseu->slice_mask) { sseu->eu_per_subslice = -INTEL_INFO (dev_priv)->sseu.eu_per_subslice; + dev_priv->runtime_info.sseu.eu_per_subslice;for (s =0 ; s <fls (sseu->slice_mask); s++) { sseu->subslice_mask[s] = -INTEL_INFO (dev_priv)->sseu.subslice_mask[s]; + dev_priv->runtime_info.sseu.subslice_mask[s]; } sseu->eu_total = sseu->eu_per_subslice *sseu_subslice_total (sseu);
@@ -4470,7 +4469,7 @@ static void broadwell_sseu_device_status(struct drm_i915_private *dev_priv,/* subtract fused off EU(s) from enabled slice(s) */ for (s =0 ; s <fls (sseu->slice_mask); s++) {u8 subslice_7eu = -INTEL_INFO (dev_priv)->sseu.subslice_7eu[s]; + dev_priv->runtime_info.sseu.subslice_7eu[s]; sseu->eu_total -=hweight8 (subslice_7eu); }
@@ -4523,14 +4522,14 @@ static int i915_sseu_status(struct seq_file *m, void *unused)return -ENODEV ;seq_puts (m,"SSEU Device Info\n" ); -i915_print_sseu_info (m, true, &INTEL_INFO (dev_priv)->sseu); +i915_print_sseu_info (m, true, &dev_priv->runtime_info.sseu);seq_puts (m,"SSEU Device Status\n" );memset (&sseu,0 ,sizeof (sseu)); - sseu.max_slices =INTEL_INFO (dev_priv)->sseu.max_slices; - sseu.max_subslices =INTEL_INFO (dev_priv)->sseu.max_subslices; + sseu.max_slices = dev_priv->runtime_info.sseu.max_slices; + sseu.max_subslices = dev_priv->runtime_info.sseu.max_subslices; sseu.max_eus_per_subslice = -INTEL_INFO (dev_priv)->sseu.max_eus_per_subslice; + dev_priv->runtime_info.sseu.max_eus_per_subslice;intel_runtime_pm_get (dev_priv);
drivers/gpu/drm/i915/i915_drv.c +9 -8
@@ -357,12 +357,12 @@ static int i915_getparam_ioctl(struct drm_device *dev, void *data, value =i915_cmd_parser_get_version (dev_priv);break ;case I915_PARAM_SUBSLICE_TOTAL : - value =sseu_subslice_total (&INTEL_INFO (dev_priv)->sseu); + value =sseu_subslice_total (&dev_priv->runtime_info.sseu);if (!value)return -ENODEV ;break ;case I915_PARAM_EU_TOTAL : - value =INTEL_INFO (dev_priv)->sseu.eu_total; + value = dev_priv->runtime_info.sseu.eu_total;if (!value)return -ENODEV ;break ;
@@ -379,7 +379,7 @@ static int i915_getparam_ioctl(struct drm_device *dev, void *data, value =HAS_POOLED_EU (dev_priv);break ;case I915_PARAM_MIN_EU_IN_POOL : - value =INTEL_INFO (dev_priv)->sseu.min_eu_in_pool; + value = dev_priv->runtime_info.sseu.min_eu_in_pool;break ;case I915_PARAM_HUC_STATUS : value =intel_huc_check_status (&dev_priv->huc);
@@ -429,17 +429,18 @@ static int i915_getparam_ioctl(struct drm_device *dev, void *data, value =intel_engines_has_context_isolation (dev_priv);break ;case I915_PARAM_SLICE_MASK : - value =INTEL_INFO (dev_priv)->sseu.slice_mask; + value = dev_priv->runtime_info.sseu.slice_mask;if (!value)return -ENODEV ;break ;case I915_PARAM_SUBSLICE_MASK : - value =INTEL_INFO (dev_priv)->sseu.subslice_mask[0 ]; + value = dev_priv->runtime_info.sseu.subslice_mask[0 ];if (!value)return -ENODEV ;break ;case I915_PARAM_CS_TIMESTAMP_FREQUENCY : - value =1000 *INTEL_INFO (dev_priv)->cs_timestamp_frequency_khz; + value =1000 * + dev_priv->runtime_info.cs_timestamp_frequency_khz;break ;case I915_PARAM_MMAP_GTT_COHERENT : value =INTEL_INFO (dev_priv)->has_coherent_ggtt;
@@ -1372,7 +1373,7 @@ static int i915_driver_init_hw(struct drm_i915_private *dev_priv)if (i915_inject_load_failure ())return -ENODEV ; -intel_device_info_runtime_init (mkwrite_device_info (dev_priv)); +intel_device_info_runtime_init (dev_priv);if (HAS_PPGTT (dev_priv)) { if (intel_vgpu_active(dev_priv) &&
@@ -1620,7 +1621,7 @@ static void i915_welcome_messages(struct drm_i915_private *dev_priv)struct drm_printer p =drm_debug_printer ("i915 device info:" );intel_device_info_dump (&dev_priv->info, &p); -intel_device_info_dump_runtime (&dev_priv->info, &p); +intel_device_info_dump_runtime (&dev_priv->runtime_info, &p); }if (IS_ENABLED (CONFIG_DRM_I915_DEBUG ))
drivers/gpu/drm/i915/i915_drv.h +2 -1
@@ -1589,6 +1589,7 @@ struct drm_i915_private {struct kmem_cache *priorities;const struct intel_device_info info; +struct intel_runtime_device_info runtime_info;struct intel_driver_caps caps;/**
@@ -2663,7 +2664,7 @@ intel_info(const struct drm_i915_private *dev_priv)#define USES_GUC_SUBMISSION (dev_priv) intel_uc_is_using_guc_submission()#define USES_HUC (dev_priv) intel_uc_is_using_huc() -#define HAS_POOLED_EU (dev_priv) ((dev_priv)->info.has_pooled_eu) +#define HAS_POOLED_EU (dev_priv) ((dev_priv)->runtime_info.has_pooled_eu)#define INTEL_PCH_DEVICE_ID_MASK 0xff80#define INTEL_PCH_IBX_DEVICE_ID_TYPE 0x3b00
drivers/gpu/drm/i915/i915_gpu_error.c +14 -5
@@ -589,15 +589,18 @@ static void print_error_obj(struct drm_i915_error_state_buf *m,err_puts (m,"\n" ); } -static void err_print_capabilities (struct drm_i915_error_state_buf *m, -const struct intel_device_info *info, -const struct intel_driver_caps *caps) +static void +err_print_capabilities (struct drm_i915_error_state_buf *m, +const struct intel_device_info *info, +const struct intel_runtime_device_info *runtime_info, +const struct intel_driver_caps *caps) {struct drm_printer p =i915_error_printer (m);intel_device_info_dump_flags (info, &p); +intel_device_info_dump_runtime (runtime_info, &p);intel_driver_caps_print (caps, &p); -intel_device_info_dump_topology (&info->sseu, &p); +intel_device_info_dump_topology (&runtime_info->sseu, &p); } static void err_print_params(struct drm_i915_error_state_buf *m,
@@ -829,7 +832,10 @@ int i915_error_state_to_str(struct drm_i915_error_state_buf *m,if (error->display)intel_display_print_error_state (m, error->display); -err_print_capabilities (m, &error->device_info, &error->driver_caps); +err_print_capabilities (m, + &error->device_info, + &error->runtime_device_info, + &error->driver_caps);err_print_params (m, &error->params);err_print_uc (m, &error->uc);
@@ -1751,6 +1757,9 @@ static void capture_gen_state(struct i915_gpu_state *error)memcpy (&error->device_info,INTEL_INFO (i915),sizeof (error->device_info)); +memcpy (&error->runtime_device_info, + &i915->runtime_info, +sizeof (error->runtime_device_info)); error->driver_caps = i915->caps; }
drivers/gpu/drm/i915/i915_gpu_error.h +1 -0
@@ -45,6 +45,7 @@ struct i915_gpu_state {u32 reset_count;u32 suspend_count;struct intel_device_info device_info; +struct intel_runtime_device_info runtime_device_info;struct intel_driver_caps driver_caps;struct i915_params params;
drivers/gpu/drm/i915/i915_perf.c +3 -2
@@ -2646,7 +2646,8 @@ i915_perf_open_ioctl_locked(struct drm_i915_private *dev_priv,static u64 oa_exponent_to_ns (struct drm_i915_private *dev_priv,int exponent) {return div64_u64 (1000000000ULL * (2ULL << exponent), -1000ULL *INTEL_INFO (dev_priv)->cs_timestamp_frequency_khz); +1000ULL * + dev_priv->runtime_info.cs_timestamp_frequency_khz); } static int
@@ -3505,7 +3506,7 @@ void i915_perf_init(struct drm_i915_private *dev_priv)spin_lock_init (&dev_priv->perf.oa.oa_buffer.ptr_lock); oa_sample_rate_hard_limit =1000 * - (INTEL_INFO (dev_priv)->cs_timestamp_frequency_khz /2 ); + (dev_priv->runtime_info.cs_timestamp_frequency_khz /2 ); dev_priv->perf.sysctl_header =register_sysctl_table (dev_root);mutex_init (&dev_priv->perf.metrics_lock);
drivers/gpu/drm/i915/i915_query.c +1 -1
@@ -13,7 +13,7 @@static int query_topology_info (struct drm_i915_private *dev_priv,struct drm_i915_query_item *query_item) { -const struct sseu_dev_info *sseu = &INTEL_INFO (dev_priv)->sseu; +const struct sseu_dev_info *sseu = &dev_priv->runtime_info.sseu;struct drm_i915_query_topology_info topo;u32 slice_length, subslice_length, eu_length, total_length;
drivers/gpu/drm/i915/intel_device_info.c +49 -33
204 lines not on this page · raw message
drivers/gpu/drm/i915/intel_device_info.h +26 -16
83 lines not on this page · raw message
drivers/gpu/drm/i915/intel_display.c +1 -1
@@ -13892,7 +13892,7 @@ static void intel_crtc_init_scalers(struct intel_crtc *crtc,struct drm_i915_private *dev_priv =to_i915 (crtc->base.dev);int i; - crtc->num_scalers = dev_priv->info.num_scalers[crtc->pipe]; + crtc->num_scalers = dev_priv->runtime_info.num_scalers[crtc->pipe];if (!crtc->num_scalers)return ;
drivers/gpu/drm/i915/intel_display.h +3 -3
@@ -105,7 +105,7 @@ enum i9xx_plane_id { };#define plane_name (p) ((p) + 'A') -#define sprite_name (p, s) ((p) * INTEL_INFO(dev_priv)->num_sprites[(p)] + (s) + 'A') +#define sprite_name (p, s) ((p) * dev_priv->runtime_info.num_sprites[(p)] + (s) + 'A')/* * Per-pipe plane identifier.
@@ -294,12 +294,12 @@ struct intel_link_m_n {#define for_each_universal_plane (__dev_priv, __pipe, __p) \ for ((__p) = 0; \ - (__p) < INTEL_INFO(__dev_priv)->num_sprites[(__pipe)] + 1; \ + (__p) < (__dev_priv)->runtime_info.num_sprites[(__pipe)] + 1;\ (__p)++)#define for_each_sprite (__dev_priv, __p, __s) \ for ((__s) = 0; \ - (__s) < INTEL_INFO(__dev_priv)->num_sprites[(__p)]; \ + (__s) < (__dev_priv)->runtime_info.num_sprites[(__p)]; \ (__s)++)#define for_each_port_masked (__port, __ports_mask) \
drivers/gpu/drm/i915/intel_engine_cs.c +2 -2
@@ -365,7 +365,7 @@ int intel_engines_init_mmio(struct drm_i915_private *dev_priv) goto cleanup; } - device_info->num_rings =hweight32 (mask); + dev_priv->runtime_info.num_rings =hweight32 (mask);i915_check_and_clear_faults (dev_priv);
@@ -807,7 +807,7 @@ const char *i915_cache_level_str(struct drm_i915_private *i915, int type)u32 intel_calculate_mcr_s_ss_select (struct drm_i915_private *dev_priv) { -const struct sseu_dev_info *sseu = &(INTEL_INFO (dev_priv)->sseu); +const struct sseu_dev_info *sseu = &dev_priv->runtime_info.sseu;u32 mcr_s_ss_select;u32 slice =fls (sseu->slice_mask);u32 subslice =fls (sseu->subslice_mask[slice]);
drivers/gpu/drm/i915/intel_lrc.c +7 -7
@@ -2343,9 +2343,9 @@ int logical_xcs_ring_init(struct intel_engine_cs *engine)static u32 make_rpcs (struct drm_i915_private *dev_priv) { -bool subslice_pg =INTEL_INFO (dev_priv)->sseu.has_subslice_pg; -u8 slices =hweight8 (INTEL_INFO (dev_priv)->sseu.slice_mask); -u8 subslices =hweight8 (INTEL_INFO (dev_priv)->sseu.subslice_mask[0 ]); +bool subslice_pg = dev_priv->runtime_info.sseu.has_subslice_pg; +u8 slices =hweight8 (dev_priv->runtime_info.sseu.slice_mask); +u8 subslices =hweight8 (dev_priv->runtime_info.sseu.subslice_mask[0 ]);u32 rpcs =0 ;/*
@@ -2393,7 +2393,7 @@ make_rpcs(struct drm_i915_private *dev_priv)* must make an explicit request through RPCS for full * enablement. */ -if (INTEL_INFO (dev_priv)->sseu.has_slice_pg) { +if (dev_priv->runtime_info.sseu.has_slice_pg) {u32 mask, val = slices;if (INTEL_GEN (dev_priv) >=11 ) {
@@ -2421,17 +2421,17 @@ make_rpcs(struct drm_i915_private *dev_priv) rpcs |=GEN8_RPCS_ENABLE |GEN8_RPCS_SS_CNT_ENABLE | val; } -if (INTEL_INFO (dev_priv)->sseu.has_eu_pg) { +if (dev_priv->runtime_info.sseu.has_eu_pg) {u32 val; - val =INTEL_INFO (dev_priv)->sseu.eu_per_subslice << + val = dev_priv->runtime_info.sseu.eu_per_subslice <<GEN8_RPCS_EU_MIN_SHIFT ;GEM_BUG_ON (val & ~GEN8_RPCS_EU_MIN_MASK ); val &=GEN8_RPCS_EU_MIN_MASK ; rpcs |= val; - val =INTEL_INFO (dev_priv)->sseu.eu_per_subslice << + val = dev_priv->runtime_info.sseu.eu_per_subslice <<GEN8_RPCS_EU_MAX_SHIFT ;GEM_BUG_ON (val & ~GEN8_RPCS_EU_MAX_MASK ); val &=GEN8_RPCS_EU_MAX_MASK ;
drivers/gpu/drm/i915/intel_pm.c +1 -1
@@ -7341,7 +7341,7 @@ static int cherryview_rps_max_freq(struct drm_i915_private *dev_priv) val =vlv_punit_read (dev_priv,FB_GFX_FMAX_AT_VMAX_FUSE ); -switch (INTEL_INFO (dev_priv)->sseu.eu_total) { +switch (dev_priv->runtime_info.sseu.eu_total) {case 8 :/* (2 * 4) config */ rp0 = (val >>FB_GFX_FMAX_AT_VMAX_2SS4EU_FUSE_SHIFT );
drivers/gpu/drm/i915/intel_ringbuffer.c +2 -2
@@ -1566,7 +1566,7 @@ static inline int mi_set_context(struct i915_request *rq, u32 flags)const int num_rings =/* Use an extended w/a on gen7 if signalling from other rings */ (HAS_LEGACY_SEMAPHORES (i915) &&IS_GEN7 (i915)) ? -INTEL_INFO (i915)->num_rings -1 : + i915->runtime_info.num_rings -1 :0 ;bool force_restore = false;int len;
@@ -2231,7 +2231,7 @@ static void intel_ring_default_vfuncs(struct drm_i915_private *dev_priv, engine->emit_breadcrumb = gen6_sema_emit_breadcrumb; - num_rings =INTEL_INFO (dev_priv)->num_rings -1 ; + num_rings = dev_priv->runtime_info.num_rings -1 ; engine->emit_breadcrumb_sz += num_rings *3 ;if (num_rings &1 ) engine->emit_breadcrumb_sz++;
drivers/gpu/drm/i915/intel_ringbuffer.h +2 -2
@@ -94,11 +94,11 @@ hangcheck_action_to_str(const enum intel_engine_hangcheck_action a)#define instdone_slice_mask (dev_priv__) \ (IS_GEN7(dev_priv__) ? \ - 1 : INTEL_INFO(dev_priv__)->sseu.slice_mask) + 1 : (dev_priv__)->runtime_info.sseu.slice_mask)#define instdone_subslice_mask (dev_priv__) \ (IS_GEN7(dev_priv__) ? \ - 1 : INTEL_INFO(dev_priv__)->sseu.subslice_mask[0]) + 1 : (dev_priv__)->runtime_info.sseu.subslice_mask[0])#define for_each_instdone_slice_subslice (dev_priv__, slice__, subslice__) \ for ((slice__) = 0, (subslice__) = 0; \
drivers/gpu/drm/i915/intel_workarounds.c +3 -3
@@ -318,7 +318,7 @@ static int skl_tune_iz_hashing(struct drm_i915_private *dev_priv)* Only consider slices where one, and only one, subslice has 7 * EUs */ -if (!is_power_of_2 (INTEL_INFO (dev_priv)->sseu.subslice_7eu[i])) +if (!is_power_of_2 (dev_priv->runtime_info.sseu.subslice_7eu[i]))continue ;/*
@@ -327,7 +327,7 @@ static int skl_tune_iz_hashing(struct drm_i915_private *dev_priv)* * -> 0 <= ss <= 3; */ - ss =ffs (INTEL_INFO (dev_priv)->sseu.subslice_7eu[i]) -1 ; + ss =ffs (dev_priv->runtime_info.sseu.subslice_7eu[i]) -1 ; vals[i] =3 - ss; }
@@ -732,7 +732,7 @@ static void cfl_gt_workarounds_apply(struct drm_i915_private *dev_priv)static void wa_init_mcr (struct drm_i915_private *dev_priv) { -const struct sseu_dev_info *sseu = &(INTEL_INFO (dev_priv)->sseu); +const struct sseu_dev_info *sseu = &dev_priv->runtime_info.sseu;u32 mcr;u32 mcr_slice_subslice_mask;
drivers/gpu/drm/i915/selftests/i915_gem_context.c +3 -3
@@ -627,7 +627,7 @@ static int igt_ctx_exec(void *arg) ncontexts++; }pr_info ("Submitted %lu contexts (across %u engines), filling %lu dwords\n" , - ncontexts,INTEL_INFO (i915)->num_rings, ndwords); + ncontexts, i915->runtime_info.num_rings, ndwords); dw =0 ;list_for_each_entry (obj, &objects, st_link) {
@@ -732,7 +732,7 @@ static int igt_ctx_readonly(void *arg) } }pr_info ("Submitted %lu dwords (across %u engines)\n" , - ndwords,INTEL_INFO (i915)->num_rings); + ndwords, i915->runtime_info.num_rings); dw =0 ;list_for_each_entry (obj, &objects, st_link) {
@@ -1064,7 +1064,7 @@ static int igt_vm_isolation(void *arg) count += this; }pr_info ("Checked %lu scratch offsets across %d engines\n" , - count,INTEL_INFO (i915)->num_rings); + count, i915->runtime_info.num_rings); out_rpm:intel_runtime_pm_put (i915);
drivers/gpu/drm/i915/selftests/intel_lrc.c +2 -2
@@ -719,7 +719,7 @@ static int smoke_crescendo(struct preempt_smoke *smoke, unsigned int flags)pr_info ("Submitted %lu crescendo:%x requests across %d engines and %d contexts\n" , count, flags, -INTEL_INFO (smoke->i915)->num_rings, smoke->ncontext); + smoke->i915->runtime_info.num_rings, smoke->ncontext);return 0 ; }
@@ -747,7 +747,7 @@ static int smoke_random(struct preempt_smoke *smoke, unsigned int flags)pr_info ("Submitted %lu random:%x requests across %d engines and %d contexts\n" , count, flags, -INTEL_INFO (smoke->i915)->num_rings, smoke->ncontext); + smoke->i915->runtime_info.num_rings, smoke->ncontext);return 0 ; }
Signature · 6 lines
2.19.1 _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 2/7] drm/i915: Introduce runtime device info
Quoted 7 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
Idea of runtime device info is to contain all fields from the existing device info which are modified at runtime.
Initially we move there fields which are never set from the static tables ie.:
num_rings,num_sprites,num_scalers,
If we accept that num_sprites[fused_off_pipe] can be non-zero we could keep num_sprites and num_scalers in the static info. I don't *think* we have any code that would rely on those being zero.
Quoted 881 lines
cs_timestamp_frequency_khz, sseu andhas_pooled_eu.Signed-off-by Tvrtko Ursulin <[email protected]>Cc Chris Wilson <[email protected]>Cc Jani Nikula <[email protected]>--- drivers/gpu/drm/i915/i915_debugfs.c | 27 +++--- drivers/gpu/drm/i915/i915_drv.c | 17 ++-- drivers/gpu/drm/i915/i915_drv.h | 3 +- drivers/gpu/drm/i915/i915_gpu_error.c | 19 +++-- drivers/gpu/drm/i915/i915_gpu_error.h | 1 + drivers/gpu/drm/i915/i915_perf.c | 5 +- drivers/gpu/drm/i915/i915_query.c | 2 +- drivers/gpu/drm/i915/intel_device_info.c | 82 +++++++++++-------- drivers/gpu/drm/i915/intel_device_info.h | 42 ++++++---- drivers/gpu/drm/i915/intel_display.c | 2 +- drivers/gpu/drm/i915/intel_display.h | 6 +- drivers/gpu/drm/i915/intel_engine_cs.c | 4 +- drivers/gpu/drm/i915/intel_lrc.c | 14 ++-- drivers/gpu/drm/i915/intel_pm.c | 2 +- drivers/gpu/drm/i915/intel_ringbuffer.c | 4 +- drivers/gpu/drm/i915/intel_ringbuffer.h | 4 +- drivers/gpu/drm/i915/intel_workarounds.c | 6 +- .../gpu/drm/i915/selftests/i915_gem_context.c | 6 +- drivers/gpu/drm/i915/selftests/intel_lrc.c | 4 +- 19 files changed, 144 insertions(+), 106 deletions(-)drivers/gpu/drm/i915/i915_debugfs.c +13
-14@@ -48,7 +48,7 @@ static int i915_capabilities(struct seq_file *m, void *data)seq_printf (m,"pch: %d\n" ,INTEL_PCH_TYPE (dev_priv));intel_device_info_dump_flags (info, &p); -intel_device_info_dump_runtime (info, &p); +intel_device_info_dump_runtime (&dev_priv->runtime_info, &p);intel_driver_caps_print (&dev_priv->caps, &p);kernel_param_lock (THIS_MODULE );@@ -3289,7 +3289,7 @@ static int i915_engine_info(struct seq_file *m, void *unused)seq_printf (m,"Global active requests: %d\n" , dev_priv->gt.active_requests);seq_printf (m,"CS timestamp frequency: %u kHz\n" , - dev_priv->info.cs_timestamp_frequency_khz); + dev_priv->runtime_info.cs_timestamp_frequency_khz); p =drm_seq_file_printer (m);for_each_engine (engine, dev_priv, id)@@ -3305,7 +3305,7 @@ static int i915_rcs_topology(struct seq_file *m, void *unused)struct drm_i915_private *dev_priv =node_to_i915 (m->private);struct drm_printer p =drm_seq_file_printer (m); -intel_device_info_dump_topology (&INTEL_INFO (dev_priv)->sseu, &p); +intel_device_info_dump_topology (&dev_priv->runtime_info.sseu, &p);return 0 ; }@@ -4341,7 +4341,7 @@ static void gen10_sseu_device_status(struct drm_i915_private *dev_priv, struct sseu_dev_info *sseu) {#define SS_MAX 6 -const struct intel_device_info *info =INTEL_INFO (dev_priv); +const struct intel_runtime_device_info *info = &dev_priv->runtime_info;u32 s_reg[SS_MAX ], eu_reg[2 *SS_MAX ], eu_mask[2 ];int s, ss;@@ -4397,7 +4397,7 @@ static void gen9_sseu_device_status(struct drm_i915_private *dev_priv, struct sseu_dev_info *sseu) {#define SS_MAX 3 -const struct intel_device_info *info =INTEL_INFO (dev_priv); +const struct intel_runtime_device_info *info = &dev_priv->runtime_info;u32 s_reg[SS_MAX ], eu_reg[2 *SS_MAX ], eu_mask[2 ];int s, ss;@@ -4424,8 +4424,7 @@ static void gen9_sseu_device_status(struct drm_i915_private *dev_priv, sseu->slice_mask |=BIT (s);if (IS_GEN9_BC (dev_priv)) - sseu->subslice_mask[s] = -INTEL_INFO (dev_priv)->sseu.subslice_mask[s]; + sseu->subslice_mask[s] = info->sseu.subslice_mask[s];for (ss =0 ; ss < info->sseu.max_subslices; ss++) {unsigned int eu_cnt;@@ -4459,10 +4458,10 @@ static void broadwell_sseu_device_status(struct drm_i915_private *dev_priv,if (sseu->slice_mask) { sseu->eu_per_subslice = -INTEL_INFO (dev_priv)->sseu.eu_per_subslice; + dev_priv->runtime_info.sseu.eu_per_subslice;for (s =0 ; s <fls (sseu->slice_mask); s++) { sseu->subslice_mask[s] = -INTEL_INFO (dev_priv)->sseu.subslice_mask[s]; + dev_priv->runtime_info.sseu.subslice_mask[s]; } sseu->eu_total = sseu->eu_per_subslice *sseu_subslice_total (sseu);@@ -4470,7 +4469,7 @@ static void broadwell_sseu_device_status(struct drm_i915_private *dev_priv,/* subtract fused off EU(s) from enabled slice(s) */ for (s =0 ; s <fls (sseu->slice_mask); s++) {u8 subslice_7eu = -INTEL_INFO (dev_priv)->sseu.subslice_7eu[s]; + dev_priv->runtime_info.sseu.subslice_7eu[s]; sseu->eu_total -=hweight8 (subslice_7eu); }@@ -4523,14 +4522,14 @@ static int i915_sseu_status(struct seq_file *m, void *unused)return -ENODEV ;seq_puts (m,"SSEU Device Info\n" ); -i915_print_sseu_info (m, true, &INTEL_INFO (dev_priv)->sseu); +i915_print_sseu_info (m, true, &dev_priv->runtime_info.sseu);seq_puts (m,"SSEU Device Status\n" );memset (&sseu,0 ,sizeof (sseu)); - sseu.max_slices =INTEL_INFO (dev_priv)->sseu.max_slices; - sseu.max_subslices =INTEL_INFO (dev_priv)->sseu.max_subslices; + sseu.max_slices = dev_priv->runtime_info.sseu.max_slices; + sseu.max_subslices = dev_priv->runtime_info.sseu.max_subslices; sseu.max_eus_per_subslice = -INTEL_INFO (dev_priv)->sseu.max_eus_per_subslice; + dev_priv->runtime_info.sseu.max_eus_per_subslice;intel_runtime_pm_get (dev_priv);drivers/gpu/drm/i915/i915_drv.c +9
-8@@ -357,12 +357,12 @@ static int i915_getparam_ioctl(struct drm_device *dev, void *data, value =i915_cmd_parser_get_version (dev_priv);break ;case I915_PARAM_SUBSLICE_TOTAL : - value =sseu_subslice_total (&INTEL_INFO (dev_priv)->sseu); + value =sseu_subslice_total (&dev_priv->runtime_info.sseu);if (!value)return -ENODEV ;break ;case I915_PARAM_EU_TOTAL : - value =INTEL_INFO (dev_priv)->sseu.eu_total; + value = dev_priv->runtime_info.sseu.eu_total;if (!value)return -ENODEV ;break ;@@ -379,7 +379,7 @@ static int i915_getparam_ioctl(struct drm_device *dev, void *data, value =HAS_POOLED_EU (dev_priv);break ;case I915_PARAM_MIN_EU_IN_POOL : - value =INTEL_INFO (dev_priv)->sseu.min_eu_in_pool; + value = dev_priv->runtime_info.sseu.min_eu_in_pool;break ;case I915_PARAM_HUC_STATUS : value =intel_huc_check_status (&dev_priv->huc);@@ -429,17 +429,18 @@ static int i915_getparam_ioctl(struct drm_device *dev, void *data, value =intel_engines_has_context_isolation (dev_priv);break ;case I915_PARAM_SLICE_MASK : - value =INTEL_INFO (dev_priv)->sseu.slice_mask; + value = dev_priv->runtime_info.sseu.slice_mask;if (!value)return -ENODEV ;break ;case I915_PARAM_SUBSLICE_MASK : - value =INTEL_INFO (dev_priv)->sseu.subslice_mask[0 ]; + value = dev_priv->runtime_info.sseu.subslice_mask[0 ];if (!value)return -ENODEV ;break ;case I915_PARAM_CS_TIMESTAMP_FREQUENCY : - value =1000 *INTEL_INFO (dev_priv)->cs_timestamp_frequency_khz; + value =1000 * + dev_priv->runtime_info.cs_timestamp_frequency_khz;break ;case I915_PARAM_MMAP_GTT_COHERENT : value =INTEL_INFO (dev_priv)->has_coherent_ggtt;@@ -1372,7 +1373,7 @@ static int i915_driver_init_hw(struct drm_i915_private *dev_priv)if (i915_inject_load_failure ())return -ENODEV ; -intel_device_info_runtime_init (mkwrite_device_info (dev_priv)); +intel_device_info_runtime_init (dev_priv);if (HAS_PPGTT (dev_priv)) { if (intel_vgpu_active(dev_priv) &&@@ -1620,7 +1621,7 @@ static void i915_welcome_messages(struct drm_i915_private *dev_priv)struct drm_printer p =drm_debug_printer ("i915 device info:" );intel_device_info_dump (&dev_priv->info, &p); -intel_device_info_dump_runtime (&dev_priv->info, &p); +intel_device_info_dump_runtime (&dev_priv->runtime_info, &p); }if (IS_ENABLED (CONFIG_DRM_I915_DEBUG ))drivers/gpu/drm/i915/i915_drv.h +2
-1@@ -1589,6 +1589,7 @@ struct drm_i915_private {struct kmem_cache *priorities;const struct intel_device_info info; +struct intel_runtime_device_info runtime_info;struct intel_driver_caps caps;/** @@ -2663,7 +2664,7 @@ intel_info(const struct drm_i915_private *dev_priv)#define USES_GUC_SUBMISSION (dev_priv) intel_uc_is_using_guc_submission()#define USES_HUC (dev_priv) intel_uc_is_using_huc() -#define HAS_POOLED_EU (dev_priv) ((dev_priv)->info.has_pooled_eu) +#define HAS_POOLED_EU (dev_priv) ((dev_priv)->runtime_info.has_pooled_eu)#define INTEL_PCH_DEVICE_ID_MASK 0xff80#define INTEL_PCH_IBX_DEVICE_ID_TYPE 0x3b00drivers/gpu/drm/i915/i915_gpu_error.c +14
-5@@ -589,15 +589,18 @@ static void print_error_obj(struct drm_i915_error_state_buf *m,err_puts (m,"\n" ); } -static void err_print_capabilities (struct drm_i915_error_state_buf *m, -const struct intel_device_info *info, -const struct intel_driver_caps *caps) +static void +err_print_capabilities (struct drm_i915_error_state_buf *m, +const struct intel_device_info *info, +const struct intel_runtime_device_info *runtime_info, +const struct intel_driver_caps *caps) {struct drm_printer p =i915_error_printer (m);intel_device_info_dump_flags (info, &p); +intel_device_info_dump_runtime (runtime_info, &p);intel_driver_caps_print (caps, &p); -intel_device_info_dump_topology (&info->sseu, &p); +intel_device_info_dump_topology (&runtime_info->sseu, &p); } static void err_print_params(struct drm_i915_error_state_buf *m,@@ -829,7 +832,10 @@ int i915_error_state_to_str(struct drm_i915_error_state_buf *m,if (error->display)intel_display_print_error_state (m, error->display); -err_print_capabilities (m, &error->device_info, &error->driver_caps); +err_print_capabilities (m, + &error->device_info, + &error->runtime_device_info, + &error->driver_caps);err_print_params (m, &error->params);err_print_uc (m, &error->uc);@@ -1751,6 +1757,9 @@ static void capture_gen_state(struct i915_gpu_state *error)memcpy (&error->device_info,INTEL_INFO (i915),sizeof (error->device_info)); +memcpy (&error->runtime_device_info, + &i915->runtime_info, +sizeof (error->runtime_device_info)); error->driver_caps = i915->caps; }drivers/gpu/drm/i915/i915_gpu_error.h +1
-0@@ -45,6 +45,7 @@ struct i915_gpu_state {u32 reset_count;u32 suspend_count;struct intel_device_info device_info; +struct intel_runtime_device_info runtime_device_info;struct intel_driver_caps driver_caps;struct i915_params params;drivers/gpu/drm/i915/i915_perf.c +3
-2@@ -2646,7 +2646,8 @@ i915_perf_open_ioctl_locked(struct drm_i915_private *dev_priv,static u64 oa_exponent_to_ns (struct drm_i915_private *dev_priv,int exponent) {return div64_u64 (1000000000ULL * (2ULL << exponent), -1000ULL *INTEL_INFO (dev_priv)->cs_timestamp_frequency_khz); +1000ULL * + dev_priv->runtime_info.cs_timestamp_frequency_khz); } static int@@ -3505,7 +3506,7 @@ void i915_perf_init(struct drm_i915_private *dev_priv)spin_lock_init (&dev_priv->perf.oa.oa_buffer.ptr_lock); oa_sample_rate_hard_limit =1000 * - (INTEL_INFO (dev_priv)->cs_timestamp_frequency_khz /2 ); + (dev_priv->runtime_info.cs_timestamp_frequency_khz /2 ); dev_priv->perf.sysctl_header =register_sysctl_table (dev_root);mutex_init (&dev_priv->perf.metrics_lock);drivers/gpu/drm/i915/i915_query.c +1
-1@@ -13,7 +13,7 @@static int query_topology_info (struct drm_i915_private *dev_priv,struct drm_i915_query_item *query_item) { -const struct sseu_dev_info *sseu = &INTEL_INFO (dev_priv)->sseu; +const struct sseu_dev_info *sseu = &dev_priv->runtime_info.sseu;struct drm_i915_query_topology_info topo;u32 slice_length, subslice_length, eu_length, total_length;drivers/gpu/drm/i915/intel_device_info.c +49
-33@@ -79,6 +79,15 @@ void intel_device_info_dump_flags(const struct intel_device_info *info,#undef PRINT_FLAG } +void +intel_runtime_device_info_dump_flags (const struct intel_runtime_device_info *info, +struct drm_printer *p) +{ +#define PRINT_FLAG (name) drm_printf(p, "%s: %s\n", #name, yesno(info->name)); +DEV_RUNTIME_INFO_FOR_EACH_FLAG (PRINT_FLAG ); +#undef PRINT_FLAG +} +static void sseu_dump (const struct sseu_dev_info *sseu,struct drm_printer *p) {int s;@@ -100,13 +109,16 @@ static void sseu_dump(const struct sseu_dev_info *sseu, struct drm_printer *p)drm_printf (p,"has EU power gating: %s\n" ,yesno (sseu->has_eu_pg)); } -void intel_device_info_dump_runtime (const struct intel_device_info *info, -struct drm_printer *p) +void +intel_device_info_dump_runtime (const struct intel_runtime_device_info *info, +struct drm_printer *p) {sseu_dump (&info->sseu, p);drm_printf (p,"CS timestamp frequency: %u kHz\n" , info->cs_timestamp_frequency_khz); + +intel_runtime_device_info_dump_flags (info, p); } void intel_device_info_dump(const struct intel_device_info *info,@@ -160,7 +172,7 @@ static u16 compute_eu_total(const struct sseu_dev_info *sseu)static void gen11_sseu_info_init (struct drm_i915_private *dev_priv) { -struct sseu_dev_info *sseu = &mkwrite_device_info (dev_priv)->sseu; +struct sseu_dev_info *sseu = &dev_priv->runtime_info.sseu;u8 s_en;u32 ss_en, ss_en_mask;u8 eu_en;@@ -199,7 +211,7 @@ static void gen11_sseu_info_init(struct drm_i915_private *dev_priv)static void gen10_sseu_info_init (struct drm_i915_private *dev_priv) { -struct sseu_dev_info *sseu = &mkwrite_device_info (dev_priv)->sseu; +struct sseu_dev_info *sseu = &dev_priv->runtime_info.sseu;const u32 fuse2 =I915_READ (GEN8_FUSE2 );int s, ss;const int eu_mask =0xff ;@@ -276,7 +288,7 @@ static void gen10_sseu_info_init(struct drm_i915_private *dev_priv)static void cherryview_sseu_info_init (struct drm_i915_private *dev_priv) { -struct sseu_dev_info *sseu = &mkwrite_device_info (dev_priv)->sseu; +struct sseu_dev_info *sseu = &dev_priv->runtime_info.sseu;u32 fuse; fuse =I915_READ (CHV_FUSE_GT );@@ -329,7 +341,7 @@ static void cherryview_sseu_info_init(struct drm_i915_private *dev_priv)static void gen9_sseu_info_init (struct drm_i915_private *dev_priv) { -struct intel_device_info *info =mkwrite_device_info (dev_priv); +struct intel_runtime_device_info *info = &dev_priv->runtime_info;struct sseu_dev_info *sseu = &info->sseu;int s, ss;u32 fuse2, eu_disable, subslice_mask;@@ -433,7 +445,7 @@ static void gen9_sseu_info_init(struct drm_i915_private *dev_priv)static void broadwell_sseu_info_init (struct drm_i915_private *dev_priv) { -struct sseu_dev_info *sseu = &mkwrite_device_info (dev_priv)->sseu; +struct sseu_dev_info *sseu = &dev_priv->runtime_info.sseu;int s, ss;u32 fuse2, subslice_mask, eu_disable[3 ];/* s_max */ @@ -515,8 +527,7 @@ static void broadwell_sseu_info_init(struct drm_i915_private *dev_priv)static void haswell_sseu_info_init (struct drm_i915_private *dev_priv) { -struct intel_device_info *info =mkwrite_device_info (dev_priv); -struct sseu_dev_info *sseu = &info->sseu; +struct sseu_dev_info *sseu = &dev_priv->runtime_info.sseu;u32 fuse1;int s, ss;@@ -524,9 +535,9 @@ static void haswell_sseu_info_init(struct drm_i915_private *dev_priv)* There isn't a register to tell us how many slices/subslices. We * work off the PCI-ids here. */ -switch (info->gt) { +switch (INTEL_INFO (dev_priv)->gt) {default : -MISSING_CASE (info->gt); +MISSING_CASE (INTEL_INFO (dev_priv)->gt);/* fall through */ case 1 : sseu->slice_mask =BIT (0 );@@ -735,29 +746,30 @@ static u32 read_timestamp_frequency(struct drm_i915_private *dev_priv)* - after the PCH has been detected, * - before the first usage of the fields it can tweak. */ -void intel_device_info_runtime_init (struct intel_device_info *info) +void intel_device_info_runtime_init (struct drm_i915_private *dev_priv) { -struct drm_i915_private *dev_priv = - container_of(info, struct drm_i915_private, info); +struct intel_device_info *info =mkwrite_device_info (dev_priv); +struct intel_runtime_device_info *runtime_info = + &dev_priv->runtime_info;enum pipe pipe;if (INTEL_GEN (dev_priv) >=10 ) {for_each_pipe (dev_priv, pipe) - info->num_scalers[pipe] =2 ; + runtime_info->num_scalers[pipe] =2 ; }else if (IS_GEN9 (dev_priv)) { - info->num_scalers[PIPE_A ] =2 ; - info->num_scalers[PIPE_B ] =2 ; - info->num_scalers[PIPE_C ] =1 ; + runtime_info->num_scalers[PIPE_A ] =2 ; + runtime_info->num_scalers[PIPE_B ] =2 ; + runtime_info->num_scalers[PIPE_C ] =1 ; }BUILD_BUG_ON (I915_NUM_ENGINES >BITS_PER_TYPE (intel_ring_mask_t));if (IS_GEN11 (dev_priv))for_each_pipe (dev_priv, pipe) - info->num_sprites[pipe] =6 ; + runtime_info->num_sprites[pipe] =6 ;else if (IS_GEN10 (dev_priv) ||IS_GEMINILAKE (dev_priv))for_each_pipe (dev_priv, pipe) - info->num_sprites[pipe] =3 ; + runtime_info->num_sprites[pipe] =3 ;else if (IS_BROXTON (dev_priv)) {/* * Skylake and Broxton currently don't expose the topmost plane as its @@ -768,15 +780,15 @@ void intel_device_info_runtime_init(struct intel_device_info *info)* down the line. */ - info->num_sprites[PIPE_A ] =2 ; - info->num_sprites[PIPE_B ] =2 ; - info->num_sprites[PIPE_C ] =1 ; + runtime_info->num_sprites[PIPE_A ] =2 ; + runtime_info->num_sprites[PIPE_B ] =2 ; + runtime_info->num_sprites[PIPE_C ] =1 ; }else if (IS_VALLEYVIEW (dev_priv) ||IS_CHERRYVIEW (dev_priv)) {for_each_pipe (dev_priv, pipe) - info->num_sprites[pipe] =2 ; + runtime_info->num_sprites[pipe] =2 ; }else if (INTEL_GEN (dev_priv) >=5 ||IS_G4X (dev_priv)) {for_each_pipe (dev_priv, pipe) - info->num_sprites[pipe] =1 ; + runtime_info->num_sprites[pipe] =1 ; }if (i915_modparams.disable_display) {@@ -860,7 +872,8 @@ void intel_device_info_runtime_init(struct intel_device_info *info) }/* Initialize command stream timestamp frequency */ - info->cs_timestamp_frequency_khz =read_timestamp_frequency (dev_priv); + runtime_info->cs_timestamp_frequency_khz = +read_timestamp_frequency (dev_priv); } void intel_driver_caps_print(const struct intel_driver_caps *caps,@@ -880,6 +893,8 @@ void intel_driver_caps_print(const struct intel_driver_caps *caps,void intel_device_info_init_mmio (struct drm_i915_private *dev_priv) {struct intel_device_info *info =mkwrite_device_info (dev_priv); +struct intel_runtime_device_info *runtime_info = + &dev_priv->runtime_info;u32 media_fuse;unsigned int i;@@ -888,27 +903,28 @@ void intel_device_info_init_mmio(struct drm_i915_private *dev_priv) media_fuse = ~I915_READ (GEN11_GT_VEBOX_VDBOX_DISABLE ); - info->vdbox_enable = media_fuse &GEN11_GT_VDBOX_DISABLE_MASK ; - info->vebox_enable = (media_fuse &GEN11_GT_VEBOX_DISABLE_MASK ) >> -GEN11_GT_VEBOX_DISABLE_SHIFT ; + runtime_info->vdbox_enable = media_fuse &GEN11_GT_VDBOX_DISABLE_MASK ; + runtime_info->vebox_enable = + (media_fuse &GEN11_GT_VEBOX_DISABLE_MASK ) >> +GEN11_GT_VEBOX_DISABLE_SHIFT ; -DRM_DEBUG_DRIVER ("vdbox enable: %04x\n" , info->vdbox_enable); +DRM_DEBUG_DRIVER ("vdbox enable: %04x\n" , runtime_info->vdbox_enable);for (i =0 ; i <I915_MAX_VCS ; i++) {if (!HAS_ENGINE (dev_priv,_VCS (i)))continue ; -if (!(BIT (i) & info->vdbox_enable)) { +if (!(BIT (i) & runtime_info->vdbox_enable)) { info->ring_mask &= ~ENGINE_MASK (_VCS (i));DRM_DEBUG_DRIVER ("vcs%u fused off\n" , i); } } -DRM_DEBUG_DRIVER ("vebox enable: %04x\n" , info->vebox_enable); +DRM_DEBUG_DRIVER ("vebox enable: %04x\n" , runtime_info->vebox_enable);for (i =0 ; i <I915_MAX_VECS ; i++) {if (!HAS_ENGINE (dev_priv,_VECS (i)))continue ; -if (!(BIT (i) & info->vebox_enable)) { +if (!(BIT (i) & runtime_info->vebox_enable)) { info->ring_mask &= ~ENGINE_MASK (_VECS (i));DRM_DEBUG_DRIVER ("vecs%u fused off\n" , i); }drivers/gpu/drm/i915/intel_device_info.h +26
-16@@ -105,7 +105,6 @@ enum intel_ppgtt {func (has_logical_ring_elsq); \func (has_logical_ring_preemption); \func (has_overlay); \ -func (has_pooled_eu); \func (has_psr); \func (has_rc6); \func (has_rc6p); \@@ -154,8 +153,8 @@ struct intel_device_info {u8 gen;u8 gt;/* GT number, 0 if undefined */ -u8 num_rings;intel_ring_mask_t ring_mask;/* Rings supported by the HW */ +u8 num_pipes;enum intel_platform platform;u32 platform_mask;@@ -165,10 +164,6 @@ struct intel_device_info {u32 display_mmio_offset; -u8 num_pipes; -u8 num_sprites[I915_MAX_PIPES ]; -u8 num_scalers[I915_MAX_PIPES ]; -#define DEFINE_FLAG (name) u8 name:1DEV_INFO_FOR_EACH_FLAG (DEFINE_FLAG );#undef DEFINE_FLAG@@ -179,19 +174,33 @@ struct intel_device_info {int trans_offsets[I915_MAX_TRANSCODERS ];int cursor_offsets[I915_MAX_PIPES ]; -/* Slice/subslice/EU info */ -struct sseu_dev_info sseu; +struct color_luts { +u16 degamma_lut_size; +u16 gamma_lut_size; + } color; +}; -u32 cs_timestamp_frequency_khz; +#define DEV_RUNTIME_INFO_FOR_EACH_FLAG (func) \ + func(has_pooled_eu); \ + +struct intel_runtime_device_info { +unsigned int num_rings; + +u8 num_sprites[I915_MAX_PIPES ]; +u8 num_scalers[I915_MAX_PIPES ];/* Enabled (not fused off) media engine bitmasks. */ u8 vdbox_enable;u8 vebox_enable; -struct color_luts { -u16 degamma_lut_size; -u16 gamma_lut_size; - } color; +u32 cs_timestamp_frequency_khz; + +/* Slice/subslice/EU info */ +struct sseu_dev_info sseu; + +#define DEFINE_FLAG (name) u8 name:1 +DEV_RUNTIME_INFO_FOR_EACH_FLAG (DEFINE_FLAG); +#undef DEFINE_FLAG };struct intel_driver_caps {@@ -248,13 +257,14 @@ static inline void sseu_set_eus(struct sseu_dev_info *sseu,const char *intel_platform_name (enum intel_platform platform); -void intel_device_info_runtime_init (struct intel_device_info *info); +void intel_device_info_runtime_init (struct drm_i915_private *dev_priv);void intel_device_info_dump (const struct intel_device_info *info,struct drm_printer *p);void intel_device_info_dump_flags (const struct intel_device_info *info,struct drm_printer *p); -void intel_device_info_dump_runtime (const struct intel_device_info *info, -struct drm_printer *p); +void +intel_device_info_dump_runtime (const struct intel_runtime_device_info *info, +struct drm_printer *p);void intel_device_info_dump_topology (const struct sseu_dev_info *sseu,struct drm_printer *p);drivers/gpu/drm/i915/intel_display.c +1
-1@@ -13892,7 +13892,7 @@ static void intel_crtc_init_scalers(struct intel_crtc *crtc,struct drm_i915_private *dev_priv =to_i915 (crtc->base.dev);int i; - crtc->num_scalers = dev_priv->info.num_scalers[crtc->pipe]; + crtc->num_scalers = dev_priv->runtime_info.num_scalers[crtc->pipe];if (!crtc->num_scalers)return ;drivers/gpu/drm/i915/intel_display.h +3
-3@@ -105,7 +105,7 @@ enum i9xx_plane_id { };#define plane_name (p) ((p) + 'A') -#define sprite_name (p, s) ((p) * INTEL_INFO(dev_priv)->num_sprites[(p)] + (s) + 'A') +#define sprite_name (p, s) ((p) * dev_priv->runtime_info.num_sprites[(p)] + (s) + 'A')/* * Per-pipe plane identifier. @@ -294,12 +294,12 @@ struct intel_link_m_n {#define for_each_universal_plane (__dev_priv, __pipe, __p) \ for ((__p) = 0; \ - (__p) < INTEL_INFO(__dev_priv)->num_sprites[(__pipe)] + 1; \ + (__p) < (__dev_priv)->runtime_info.num_sprites[(__pipe)] + 1;\ (__p)++)#define for_each_sprite (__dev_priv, __p, __s) \ for ((__s) = 0; \ - (__s) < INTEL_INFO(__dev_priv)->num_sprites[(__p)]; \ + (__s) < (__dev_priv)->runtime_info.num_sprites[(__p)]; \ (__s)++)#define for_each_port_masked (__port, __ports_mask) \drivers/gpu/drm/i915/intel_engine_cs.c +2
-2@@ -365,7 +365,7 @@ int intel_engines_init_mmio(struct drm_i915_private *dev_priv) goto cleanup; } - device_info->num_rings =hweight32 (mask); + dev_priv->runtime_info.num_rings =hweight32 (mask);i915_check_and_clear_faults (dev_priv);@@ -807,7 +807,7 @@ const char *i915_cache_level_str(struct drm_i915_private *i915, int type)u32 intel_calculate_mcr_s_ss_select (struct drm_i915_private *dev_priv) { -const struct sseu_dev_info *sseu = &(INTEL_INFO (dev_priv)->sseu); +const struct sseu_dev_info *sseu = &dev_priv->runtime_info.sseu;u32 mcr_s_ss_select;u32 slice =fls (sseu->slice_mask);u32 subslice =fls (sseu->subslice_mask[slice]);drivers/gpu/drm/i915/intel_lrc.c +7
-7@@ -2343,9 +2343,9 @@ int logical_xcs_ring_init(struct intel_engine_cs *engine)static u32 make_rpcs (struct drm_i915_private *dev_priv) { -bool subslice_pg =INTEL_INFO (dev_priv)->sseu.has_subslice_pg; -u8 slices =hweight8 (INTEL_INFO (dev_priv)->sseu.slice_mask); -u8 subslices =hweight8 (INTEL_INFO (dev_priv)->sseu.subslice_mask[0 ]); +bool subslice_pg = dev_priv->runtime_info.sseu.has_subslice_pg; +u8 slices =hweight8 (dev_priv->runtime_info.sseu.slice_mask); +u8 subslices =hweight8 (dev_priv->runtime_info.sseu.subslice_mask[0 ]);u32 rpcs =0 ;/* @@ -2393,7 +2393,7 @@ make_rpcs(struct drm_i915_private *dev_priv)* must make an explicit request through RPCS for full * enablement. */ -if (INTEL_INFO (dev_priv)->sseu.has_slice_pg) { +if (dev_priv->runtime_info.sseu.has_slice_pg) {u32 mask, val = slices;if (INTEL_GEN (dev_priv) >=11 ) {@@ -2421,17 +2421,17 @@ make_rpcs(struct drm_i915_private *dev_priv) rpcs |=GEN8_RPCS_ENABLE |GEN8_RPCS_SS_CNT_ENABLE | val; } -if (INTEL_INFO (dev_priv)->sseu.has_eu_pg) { +if (dev_priv->runtime_info.sseu.has_eu_pg) {u32 val; - val =INTEL_INFO (dev_priv)->sseu.eu_per_subslice << + val = dev_priv->runtime_info.sseu.eu_per_subslice <<GEN8_RPCS_EU_MIN_SHIFT ;GEM_BUG_ON (val & ~GEN8_RPCS_EU_MIN_MASK ); val &=GEN8_RPCS_EU_MIN_MASK ; rpcs |= val; - val =INTEL_INFO (dev_priv)->sseu.eu_per_subslice << + val = dev_priv->runtime_info.sseu.eu_per_subslice <<GEN8_RPCS_EU_MAX_SHIFT ;GEM_BUG_ON (val & ~GEN8_RPCS_EU_MAX_MASK ); val &=GEN8_RPCS_EU_MAX_MASK ;drivers/gpu/drm/i915/intel_pm.c +1
-1@@ -7341,7 +7341,7 @@ static int cherryview_rps_max_freq(struct drm_i915_private *dev_priv) val =vlv_punit_read (dev_priv,FB_GFX_FMAX_AT_VMAX_FUSE ); -switch (INTEL_INFO (dev_priv)->sseu.eu_total) { +switch (dev_priv->runtime_info.sseu.eu_total) {case 8 :/* (2 * 4) config */ rp0 = (val >>FB_GFX_FMAX_AT_VMAX_2SS4EU_FUSE_SHIFT );drivers/gpu/drm/i915/intel_ringbuffer.c +2
-2@@ -1566,7 +1566,7 @@ static inline int mi_set_context(struct i915_request *rq, u32 flags)const int num_rings =/* Use an extended w/a on gen7 if signalling from other rings */ (HAS_LEGACY_SEMAPHORES (i915) &&IS_GEN7 (i915)) ? -INTEL_INFO (i915)->num_rings -1 : + i915->runtime_info.num_rings -1 :0 ;bool force_restore = false;int len;@@ -2231,7 +2231,7 @@ static void intel_ring_default_vfuncs(struct drm_i915_private *dev_priv, engine->emit_breadcrumb = gen6_sema_emit_breadcrumb; - num_rings =INTEL_INFO (dev_priv)->num_rings -1 ; + num_rings = dev_priv->runtime_info.num_rings -1 ; engine->emit_breadcrumb_sz += num_rings *3 ;if (num_rings &1 ) engine->emit_breadcrumb_sz++;drivers/gpu/drm/i915/intel_ringbuffer.h +2
-2@@ -94,11 +94,11 @@ hangcheck_action_to_str(const enum intel_engine_hangcheck_action a)#define instdone_slice_mask (dev_priv__) \ (IS_GEN7(dev_priv__) ? \ - 1 : INTEL_INFO(dev_priv__)->sseu.slice_mask) + 1 : (dev_priv__)->runtime_info.sseu.slice_mask)#define instdone_subslice_mask (dev_priv__) \ (IS_GEN7(dev_priv__) ? \ - 1 : INTEL_INFO(dev_priv__)->sseu.subslice_mask[0]) + 1 : (dev_priv__)->runtime_info.sseu.subslice_mask[0])#define for_each_instdone_slice_subslice (dev_priv__, slice__, subslice__) \ for ((slice__) = 0, (subslice__) = 0; \drivers/gpu/drm/i915/intel_workarounds.c +3
-3@@ -318,7 +318,7 @@ static int skl_tune_iz_hashing(struct drm_i915_private *dev_priv)* Only consider slices where one, and only one, subslice has 7 * EUs */ -if (!is_power_of_2 (INTEL_INFO (dev_priv)->sseu.subslice_7eu[i])) +if (!is_power_of_2 (dev_priv->runtime_info.sseu.subslice_7eu[i]))continue ;/* @@ -327,7 +327,7 @@ static int skl_tune_iz_hashing(struct drm_i915_private *dev_priv)* * -> 0 <= ss <= 3; */ - ss =ffs (INTEL_INFO (dev_priv)->sseu.subslice_7eu[i]) -1 ; + ss =ffs (dev_priv->runtime_info.sseu.subslice_7eu[i]) -1 ; vals[i] =3 - ss; }@@ -732,7 +732,7 @@ static void cfl_gt_workarounds_apply(struct drm_i915_private *dev_priv)static void wa_init_mcr (struct drm_i915_private *dev_priv) { -const struct sseu_dev_info *sseu = &(INTEL_INFO (dev_priv)->sseu); +const struct sseu_dev_info *sseu = &dev_priv->runtime_info.sseu;u32 mcr;u32 mcr_slice_subslice_mask;drivers/gpu/drm/i915/selftests/i915_gem_context.c +3
-3@@ -627,7 +627,7 @@ static int igt_ctx_exec(void *arg) ncontexts++; }pr_info ("Submitted %lu contexts (across %u engines), filling %lu dwords\n" , - ncontexts,INTEL_INFO (i915)->num_rings, ndwords); + ncontexts, i915->runtime_info.num_rings, ndwords); dw =0 ;list_for_each_entry (obj, &objects, st_link) {@@ -732,7 +732,7 @@ static int igt_ctx_readonly(void *arg) } }pr_info ("Submitted %lu dwords (across %u engines)\n" , - ndwords,INTEL_INFO (i915)->num_rings); + ndwords, i915->runtime_info.num_rings); dw =0 ;list_for_each_entry (obj, &objects, st_link) {@@ -1064,7 +1064,7 @@ static int igt_vm_isolation(void *arg) count += this; }pr_info ("Checked %lu scratch offsets across %d engines\n" , - count,INTEL_INFO (i915)->num_rings); + count, i915->runtime_info.num_rings); out_rpm:intel_runtime_pm_put (i915);drivers/gpu/drm/i915/selftests/intel_lrc.c +2
-2@@ -719,7 +719,7 @@ static int smoke_crescendo(struct preempt_smoke *smoke, unsigned int flags)pr_info ("Submitted %lu crescendo:%x requests across %d engines and %d contexts\n" , count, flags, -INTEL_INFO (smoke->i915)->num_rings, smoke->ncontext); + smoke->i915->runtime_info.num_rings, smoke->ncontext);return 0 ; }@@ -747,7 +747,7 @@ static int smoke_random(struct preempt_smoke *smoke, unsigned int flags)pr_info ("Submitted %lu random:%x requests across %d engines and %d contexts\n" , count, flags, -INTEL_INFO (smoke->i915)->num_rings, smoke->ncontext); + smoke->i915->runtime_info.num_rings, smoke->ncontext);return 0 ; }Signature · 6 lines
2.19.1 _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Signature · 6 lines
Ville Syrjälä Intel _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 2/7] drm/i915: Introduce runtime device info
Quoted 6 lines · Ville Syrjälä
Quoted 5 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
Idea of runtime device info is to contain all fields from the existing device info which are modified at runtime.
Quoted 7 lines
Quoted 2 lines
Initially we move there fields which are never set from the static tables ie.:
num_rings,num_sprites,num_scalers,If we accept that num_sprites[fused_off_pipe] can be non-zero we could keep
num_spritesandnum_scalersin the static info. I don't *think* we have any code that would rely on those being zero.
Works for me, that is, I don't have a strong opinion on this one. If display folks agree on this direction you can either implement this ahead, or I can incorporate the move in this series.
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
RFC 3/7 drm/i915: Move all runtime modified device info fields into runtime info
In reply to Tvrtko UrsulinFrom: Tvrtko Ursulin <[email protected]>
After the previous change which cleared the static tables from effectively unused storage, we now replicate entries which have defaults set from there, but can be overriden at runtime.
For this class of variables all accessor macros and call sites are changed to use the runtime version. Therefore at driver load we need to copy over these variables from static to the runtime table.
We add double prefixes to the affected device info members to signify they are special and to catch all current and future users.
--- drivers/gpu/drm/i915/i915_debugfs.c | 4 +- drivers/gpu/drm/i915/i915_drv.c | 38 ++++-- drivers/gpu/drm/i915/i915_drv.h | 18 +-- drivers/gpu/drm/i915/i915_gem.c | 5 +- drivers/gpu/drm/i915/i915_gem_gtt.c | 2 +- drivers/gpu/drm/i915/i915_irq.c | 2 +- drivers/gpu/drm/i915/i915_pci.c | 114 +++++++++--------- drivers/gpu/drm/i915/intel_bios.c | 2 +- drivers/gpu/drm/i915/intel_device_info.c | 24 ++-- drivers/gpu/drm/i915/intel_device_info.h | 30 +++-- drivers/gpu/drm/i915/intel_display.c | 18 +-- drivers/gpu/drm/i915/intel_display.h | 4 +- drivers/gpu/drm/i915/intel_engine_cs.c | 5 +- drivers/gpu/drm/i915/intel_fbc.c | 2 +- drivers/gpu/drm/i915/intel_fbdev.c | 4 +- drivers/gpu/drm/i915/intel_guc_submission.c | 4 +- drivers/gpu/drm/i915/intel_i2c.c | 2 +- drivers/gpu/drm/i915/intel_lpe_audio.c | 2 +- drivers/gpu/drm/i915/intel_pm.c | 9 +- drivers/gpu/drm/i915/selftests/huge_pages.c | 18 +-- drivers/gpu/drm/i915/selftests/intel_guc.c | 4 +- .../gpu/drm/i915/selftests/mock_gem_device.c | 11 +- 22 files changed, 175 insertions(+), 147 deletions(-)
drivers/gpu/drm/i915/i915_debugfs.c +2 -2
@@ -510,7 +510,7 @@ static int i915_gem_object_info(struct seq_file *m, void *data)seq_printf (m,"%llu [%pa] gtt total\n" , ggtt->vm.total, &ggtt->mappable_end);seq_printf (m,"Supported page sizes: %s\n" , -stringify_page_sizes (INTEL_INFO (dev_priv)->page_sizes, +stringify_page_sizes (dev_priv->runtime_info.page_sizes, buf,sizeof (buf)));seq_putc (m,'\n' );
@@ -4144,7 +4144,7 @@ i915_ring_test_irq_set(void *data, u64 val)if (INTEL_GEN (i915) >=11 )return -ENODEV ; - val &=INTEL_INFO (i915)->ring_mask; + val &= i915->runtime_info.ring_mask;DRM_DEBUG_DRIVER ("Masking interrupts on rings 0x%08llx\n" , val);return fault_irq_set (i915, &i915->gpu_error.test_irq_rings, val);
drivers/gpu/drm/i915/i915_drv.c +29 -9
@@ -287,7 +287,7 @@ static void intel_detect_pch(struct drm_i915_private *dev_priv)* Use PCH_NOP (PCH but no South Display) for PCH platforms without * display. */ -if (pch &&INTEL_INFO (dev_priv)->num_pipes ==0 ) { +if (pch && dev_priv->runtime_info.num_pipes ==0 ) {DRM_DEBUG_KMS ("Display disabled, reverting to NOP PCH\n" ); dev_priv->pch_type =PCH_NOP ; dev_priv->pch_id =0 ;
@@ -646,9 +646,9 @@ static int i915_load_modeset_init(struct drm_device *dev)if (i915_inject_load_failure ())return -ENODEV ; -if (INTEL_INFO (dev_priv)->num_pipes) { +if (dev_priv->runtime_info.num_pipes) { ret =drm_vblank_init (&dev_priv->drm, -INTEL_INFO (dev_priv)->num_pipes); + dev_priv->runtime_info.num_pipes);if (ret) goto out; }
@@ -697,7 +697,7 @@ static int i915_load_modeset_init(struct drm_device *dev)intel_overlay_setup (dev_priv); -if (INTEL_INFO (dev_priv)->num_pipes ==0 ) +if (dev_priv->runtime_info.num_pipes ==0 )return 0 ; ret =intel_fbdev_init (dev);
@@ -1552,7 +1552,7 @@ static void i915_driver_register(struct drm_i915_private *dev_priv) }else DRM_ERROR ("Failed to register driver for userspace access!\n" ); -if (INTEL_INFO (dev_priv)->num_pipes) { +if (dev_priv->runtime_info.num_pipes) {/* Must be done after probing outputs */ intel_opregion_register (dev_priv);acpi_video_register ();
@@ -1576,7 +1576,7 @@ static void i915_driver_register(struct drm_i915_private *dev_priv)* We need to coordinate the hotplugs with the asynchronous fbdev * configuration, for which we use the fbdev->async_cookie. */ -if (INTEL_INFO (dev_priv)->num_pipes) +if (dev_priv->runtime_info.num_pipes)drm_kms_helper_poll_init (dev);intel_power_domains_enable (dev_priv);
@@ -1637,6 +1637,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_runtime_device_info *runtime_info;struct intel_device_info *device_info;struct drm_i915_private *i915;int err;
@@ -1658,11 +1659,30 @@ 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)); - device_info->device_id = pdev->device;BUILD_BUG_ON (INTEL_MAX_PLATFORMS >BITS_PER_TYPE (device_info->platform_mask)); -BUG_ON (device_info->gen >BITS_PER_TYPE (device_info->gen_mask)); +BUG_ON (device_info->__gen >BITS_PER_TYPE (device_info->gen_mask)); + +/* +* Early setup of the runtime device info. +*/ + runtime_info = &i915->runtime_info; + + runtime_info->device_id = pdev->device; + +/* +* Copy over entries that are both set statically but can also be +* modified at runtime. +*/ + runtime_info->gen = device_info->__gen; + runtime_info->has_fbc = device_info->__has_fbc; + runtime_info->has_rc6 = device_info->__has_rc6; + runtime_info->has_rc6p = device_info->__has_rc6p; + runtime_info->ppgtt = device_info->__ppgtt; + runtime_info->page_sizes = device_info->__page_sizes; + runtime_info->ring_mask = device_info->__ring_mask; + runtime_info->num_pipes = device_info->__num_pipes;return i915; }
@@ -1701,7 +1721,7 @@ int i915_driver_load(struct pci_dev *pdev, const struct pci_device_id *ent)return PTR_ERR (dev_priv);/* Disable nuclear pageflip by default on pre-ILK */ -if (!i915_modparams.nuclear_pageflip && match_info->gen <5 ) +if (!i915_modparams.nuclear_pageflip && match_info->__gen <5 ) dev_priv->drm.driver_features &= ~DRIVER_ATOMIC ; ret =pci_enable_device (pdev);
drivers/gpu/drm/i915/i915_drv.h +9 -9
@@ -2210,7 +2210,7 @@ static inline struct drm_i915_private *huc_to_i915(struct intel_huc *huc)/* Iterator over subset of engines selected by mask */ #define for_each_engine_masked (engine__, dev_priv__, mask__, tmp__) \ - for ((tmp__) = (mask__) & INTEL_INFO(dev_priv__)->ring_mask; \ + for ((tmp__) = (mask__) & (dev_priv__)->runtime_info.ring_mask; \ (tmp__) ? \ ((engine__) = (dev_priv__)->engine[__mask_next_bit(tmp__)]), 1 : \ 0;)
@@ -2358,8 +2358,8 @@ intel_info(const struct drm_i915_private *dev_priv)#define INTEL_INFO (dev_priv) intel_info((dev_priv))#define DRIVER_CAPS (dev_priv) (&(dev_priv)->caps) -#define INTEL_GEN (dev_priv) ((dev_priv)->info.gen) -#define INTEL_DEVID (dev_priv) ((dev_priv)->info.device_id) +#define INTEL_GEN (dev_priv) ((dev_priv)->runtime_info.gen) +#define INTEL_DEVID (dev_priv) ((dev_priv)->runtime_info.device_id)#define REVID_FOREVER 0xff#define INTEL_REVID (dev_priv) ((dev_priv)->drm.pdev->revision)
@@ -2557,7 +2557,7 @@ intel_info(const struct drm_i915_private *dev_priv)#define ALL_ENGINES (~0)#define HAS_ENGINE (dev_priv, id) \ - (!!((dev_priv)->info.ring_mask & ENGINE_MASK(id))) + (!!((dev_priv)->runtime_info.ring_mask & ENGINE_MASK(id)))#define HAS_BSD (dev_priv) HAS_ENGINE(dev_priv, VCS)#define HAS_BSD2 (dev_priv) HAS_ENGINE(dev_priv, VCS2)
@@ -2583,7 +2583,7 @@ intel_info(const struct drm_i915_private *dev_priv)#define HAS_EXECLISTS (dev_priv) HAS_LOGICAL_RING_CONTEXTS(dev_priv) -#define INTEL_PPGTT (dev_priv) (INTEL_INFO(dev_priv)->ppgtt) +#define INTEL_PPGTT (dev_priv) ((dev_priv)->runtime_info.ppgtt)#define HAS_PPGTT (dev_priv) \ (INTEL_PPGTT(dev_priv) != INTEL_PPGTT_NONE)#define HAS_FULL_PPGTT (dev_priv) \
@@ -2593,7 +2593,7 @@ intel_info(const struct drm_i915_private *dev_priv)#define HAS_PAGE_SIZES (dev_priv, sizes) ({ \ GEM_BUG_ON((sizes) == 0); \ - ((sizes) & ~(dev_priv)->info.page_sizes) == 0; \ + ((sizes) & ~(dev_priv)->runtime_info.page_sizes) == 0; \ })#define HAS_OVERLAY (dev_priv) ((dev_priv)->info.has_overlay)
@@ -2623,7 +2623,7 @@ intel_info(const struct drm_i915_private *dev_priv)#define I915_HAS_HOTPLUG (dev_priv) ((dev_priv)->info.has_hotplug)#define HAS_FW_BLC (dev_priv) (INTEL_GEN(dev_priv) > 2) -#define HAS_FBC (dev_priv) ((dev_priv)->info.has_fbc) +#define HAS_FBC (dev_priv) ((dev_priv)->runtime_info.has_fbc)#define HAS_CUR_FBC (dev_priv) (!HAS_GMCH_DISPLAY(dev_priv) && INTEL_GEN(dev_priv) >= 7)#define HAS_IPS (dev_priv) (IS_HSW_ULT(dev_priv) || IS_BROADWELL(dev_priv))
@@ -2634,8 +2634,8 @@ intel_info(const struct drm_i915_private *dev_priv)#define HAS_FPGA_DBG_UNCLAIMED (dev_priv) ((dev_priv)->info.has_fpga_dbg)#define HAS_PSR (dev_priv) ((dev_priv)->info.has_psr) -#define HAS_RC6 (dev_priv) ((dev_priv)->info.has_rc6) -#define HAS_RC6p (dev_priv) ((dev_priv)->info.has_rc6p) +#define HAS_RC6 (dev_priv) ((dev_priv)->runtime_info.has_rc6) +#define HAS_RC6p (dev_priv) ((dev_priv)->runtime_info.has_rc6p)#define HAS_RC6pp (dev_priv) (false)/* HW was never validated */ #define HAS_CSR (dev_priv) ((dev_priv)->info.has_csr)
drivers/gpu/drm/i915/i915_gem.c +2 -3
@@ -2725,7 +2725,7 @@ void __i915_gem_object_set_pages(struct drm_i915_gem_object *obj, unsigned int sg_page_sizes) {struct drm_i915_private *i915 =to_i915 (obj->base.dev); -unsigned long supported =INTEL_INFO (i915)->page_sizes; +unsigned long supported = i915->runtime_info.page_sizes;int i;lockdep_assert_held (&obj->mm.lock);
@@ -5535,8 +5535,7 @@ int i915_gem_init(struct drm_i915_private *dev_priv)/* We need to fallback to 4K pages if host doesn't support huge gtt. */ if (intel_vgpu_active (dev_priv) && !intel_vgpu_has_huge_gtt (dev_priv)) -mkwrite_device_info (dev_priv)->page_sizes = -I915_GTT_PAGE_SIZE_4K ; + dev_priv->runtime_info.page_sizes =I915_GTT_PAGE_SIZE_4K ; dev_priv->mm.unordered_timeline =dma_fence_context_alloc (1 );
drivers/gpu/drm/i915/i915_gem_gtt.c +1 -1
@@ -799,7 +799,7 @@ static void gen8_initialize_pml4(struct i915_address_space *vm,*/ static void mark_tlbs_dirty (struct i915_hw_ppgtt *ppgtt) { - ppgtt->pd_dirty_rings =INTEL_INFO (ppgtt->vm.i915)->ring_mask; + ppgtt->pd_dirty_rings = ppgtt->vm.i915->runtime_info.ring_mask; }/* Removes entries from a single page table, releasing it if it's empty.
drivers/gpu/drm/i915/i915_irq.c +1 -1
@@ -3322,7 +3322,7 @@ void i915_handle_error(struct drm_i915_private *dev_priv,*/ intel_runtime_pm_get (dev_priv); - engine_mask &=INTEL_INFO (dev_priv)->ring_mask; + engine_mask &= dev_priv->runtime_info.ring_mask;if (flags &I915_ERROR_CAPTURE ) {i915_capture_error_state (dev_priv, engine_mask, msg);
drivers/gpu/drm/i915/i915_pci.c +57 -57
319 lines not on this page · raw message
drivers/gpu/drm/i915/intel_bios.c +1 -1
@@ -1721,7 +1721,7 @@ void intel_bios_init(struct drm_i915_private *dev_priv)const struct bdb_header *bdb;u8 __iomem *bios =NULL ; -if (INTEL_INFO (dev_priv)->num_pipes ==0 ) { +if (dev_priv->runtime_info.num_pipes ==0 ) {DRM_DEBUG_KMS ("Skipping VBT init due to disabled display.\n" );return ; }
drivers/gpu/drm/i915/intel_device_info.c +11 -13
@@ -131,7 +131,7 @@ void intel_device_info_dump(const struct intel_device_info *info,INTEL_DEVID (dev_priv),INTEL_REVID (dev_priv),intel_platform_name (info->platform), - info->gen); + info->__gen);intel_device_info_dump_flags (info, p); }
@@ -748,7 +748,6 @@ static u32 read_timestamp_frequency(struct drm_i915_private *dev_priv)*/ void intel_device_info_runtime_init (struct drm_i915_private *dev_priv) { -struct intel_device_info *info =mkwrite_device_info (dev_priv);struct intel_runtime_device_info *runtime_info = &dev_priv->runtime_info;enum pipe pipe;
@@ -793,8 +792,8 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)if (i915_modparams.disable_display) {DRM_INFO ("Display disabled (module parameter)\n" ); - info->num_pipes =0 ; - }else if (info->num_pipes >0 && + runtime_info->num_pipes =0 ; + }else if (runtime_info->num_pipes >0 && (IS_GEN7 (dev_priv) ||IS_GEN8 (dev_priv)) &&HAS_PCH_SPLIT (dev_priv)) {u32 fuse_strap =I915_READ (FUSE_STRAP );
@@ -814,12 +813,12 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv) (HAS_PCH_CPT(dev_priv) && !(sfuse_strap & SFUSE_STRAP_FUSE_LOCK))) {DRM_INFO ("Display fused off, disabling\n" ); - info->num_pipes =0 ; + runtime_info->num_pipes =0 ; } else if (fuse_strap & IVB_PIPE_C_DISABLE) {DRM_INFO ("PipeC fused off\n" ); - info->num_pipes -=1 ; + runtime_info->num_pipes -=1 ; } - }else if (info->num_pipes >0 &&IS_GEN9 (dev_priv)) { + }else if (runtime_info->num_pipes >0 &&IS_GEN9 (dev_priv)) {u32 dfsm =I915_READ (SKL_DFSM );u8 disabled_mask =0 ;bool invalid;
@@ -845,11 +844,11 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv) invalid = false; } -if (num_bits > info->num_pipes || invalid) +if (num_bits > runtime_info->num_pipes || invalid)DRM_ERROR ("invalid pipe fuse configuration: 0x%x\n" , disabled_mask);else - info->num_pipes -= num_bits; + runtime_info->num_pipes -= num_bits; }/* Initialize slice/subslice/EU info */
@@ -868,7 +867,7 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)if (IS_GEN6 (dev_priv) &&intel_vtd_active ()) {DRM_INFO ("Disabling ppGTT for VT-d support\n" ); - info->ppgtt =INTEL_PPGTT_NONE ; + runtime_info->ppgtt =INTEL_PPGTT_NONE ; }/* Initialize command stream timestamp frequency */
@@ -892,7 +891,6 @@ void intel_driver_caps_print(const struct intel_driver_caps *caps,*/ void intel_device_info_init_mmio (struct drm_i915_private *dev_priv) { -struct intel_device_info *info =mkwrite_device_info (dev_priv);struct intel_runtime_device_info *runtime_info = &dev_priv->runtime_info;u32 media_fuse;
@@ -914,7 +912,7 @@ void intel_device_info_init_mmio(struct drm_i915_private *dev_priv)continue ;if (!(BIT (i) & runtime_info->vdbox_enable)) { - info->ring_mask &= ~ENGINE_MASK (_VCS (i)); + runtime_info->ring_mask &= ~ENGINE_MASK (_VCS (i));DRM_DEBUG_DRIVER ("vcs%u fused off\n" , i); } }
@@ -925,7 +923,7 @@ void intel_device_info_init_mmio(struct drm_i915_private *dev_priv)continue ;if (!(BIT (i) & runtime_info->vebox_enable)) { - info->ring_mask &= ~ENGINE_MASK (_VECS (i)); + runtime_info->ring_mask &= ~ENGINE_MASK (_VECS (i));DRM_DEBUG_DRIVER ("vecs%u fused off\n" , i); } }
drivers/gpu/drm/i915/intel_device_info.h +21 -9
@@ -93,7 +93,7 @@ enum intel_ppgtt {func (has_ddi); \func (has_dp_mst); \func (has_reset_engine); \ -func (has_fbc); \ +func (__has_fbc); \func (has_fpga_dbg); \func (has_gmch_display); \func (has_guc); \
@@ -106,8 +106,8 @@ enum intel_ppgtt {func (has_logical_ring_preemption); \func (has_overlay); \func (has_psr); \ -func (has_rc6); \ -func (has_rc6p); \ +func (__has_rc6); \ +func (__has_rc6p); \func (has_runtime_pm); \func (has_snoop); \func (has_coherent_ggtt); \
@@ -148,19 +148,18 @@ struct sseu_dev_info {typedef u8 intel_ring_mask_t ;struct intel_device_info { -u16 device_id;u16 gen_mask; -u8 gen; +u8 __gen;u8 gt;/* GT number, 0 if undefined */ -intel_ring_mask_t ring_mask;/* Rings supported by the HW */ -u8 num_pipes; +intel_ring_mask_t __ring_mask;/* Rings supported by the HW */ +u8 __num_pipes;enum intel_platform platform;u32 platform_mask; -enum intel_ppgtt ppgtt; -unsigned int page_sizes;/* page sizes supported by the HW */ +enum intel_ppgtt __ppgtt; +unsigned int __page_sizes;/* page sizes supported by the HW */ u32 display_mmio_offset;
@@ -181,11 +180,24 @@ struct intel_device_info { };#define DEV_RUNTIME_INFO_FOR_EACH_FLAG (func) \ + func(has_fbc); \ func(has_pooled_eu); \ + func(has_rc6); \ + func(has_rc6p); \struct intel_runtime_device_info { +int gen; +unsigned int num_rings; +enum intel_ppgtt ppgtt; +unsigned int page_sizes;/* page sizes supported by the HW */ + +u16 device_id; + +intel_ring_mask_t ring_mask;/* Rings supported by the HW */ +u8 num_pipes; +u8 num_sprites[I915_MAX_PIPES ];u8 num_scalers[I915_MAX_PIPES ];
drivers/gpu/drm/i915/intel_display.c +9 -9
@@ -6372,7 +6372,7 @@ static int ironlake_check_fdi_lanes(struct drm_device *dev, enum pipe pipe, } } -if (INTEL_INFO (dev_priv)->num_pipes ==2 ) +if (dev_priv->runtime_info.num_pipes ==2 )return 0 ;/* Ivybridge 3 pipe is really complicated */
@@ -8588,7 +8588,7 @@ static void ironlake_compute_dpll(struct intel_crtc *intel_crtc,* clear if it''s a win or loss power wise. No point in doing * this on ILK at all since it has a fixed DPLL<->pipe mapping. */ -if (INTEL_INFO (dev_priv)->num_pipes ==3 && +if (dev_priv->runtime_info.num_pipes ==3 &&intel_crtc_has_type (crtc_state,INTEL_OUTPUT_ANALOG )) dpll |=DPLL_SDVO_HIGH_SPEED ;
@@ -12684,7 +12684,7 @@ static void skl_update_crtcs(struct drm_atomic_state *state)if (skl_ddb_allocation_overlaps (&cstate->wm.skl.ddb, entries, -INTEL_INFO (dev_priv)->num_pipes, i)) + dev_priv->runtime_info.num_pipes, i))continue ; updated |= cmask;
@@ -14111,7 +14111,7 @@ static void intel_setup_outputs(struct drm_i915_private *dev_priv)intel_pps_init (dev_priv); -if (INTEL_INFO (dev_priv)->num_pipes ==0 ) +if (dev_priv->runtime_info.num_pipes ==0 )return ;/*
@@ -15063,8 +15063,8 @@ int intel_modeset_init(struct drm_device *dev) dev->mode_config.fb_base = ggtt->gmadr.start;DRM_DEBUG_KMS ("%d display pipe%s available.\n" , -INTEL_INFO (dev_priv)->num_pipes, -INTEL_INFO (dev_priv)->num_pipes >1 ?"s" :"" ); + dev_priv->runtime_info.num_pipes, + dev_priv->runtime_info.num_pipes >1 ?"s" :"" );for_each_pipe (dev_priv, pipe) { ret =intel_crtc_init (dev_priv, pipe);
@@ -15983,7 +15983,7 @@ intel_display_capture_error_state(struct drm_i915_private *dev_priv) };int i; -if (INTEL_INFO (dev_priv)->num_pipes ==0 ) +if (dev_priv->runtime_info.num_pipes ==0 )return NULL ; error =kzalloc (sizeof (*error),GFP_ATOMIC );
@@ -16024,7 +16024,7 @@ intel_display_capture_error_state(struct drm_i915_private *dev_priv) }/* Note: this does not include DSI transcoders. */ - error->num_transcoders =INTEL_INFO (dev_priv)->num_pipes; + error->num_transcoders = dev_priv->runtime_info.num_pipes;if (HAS_DDI (dev_priv)) error->num_transcoders++;/* Account for eDP. */
@@ -16063,7 +16063,7 @@ intel_display_print_error_state(struct drm_i915_error_state_buf *m,if (!error)return ; -err_printf (m,"Num Pipes: %d\n" ,INTEL_INFO (dev_priv)->num_pipes); +err_printf (m,"Num Pipes: %d\n" , dev_priv->runtime_info.num_pipes);if (IS_HASWELL (dev_priv) ||IS_BROADWELL (dev_priv))err_printf (m,"PWR_WELL_CTL2: %08x\n" , error->power_well_driver);
drivers/gpu/drm/i915/intel_display.h +2 -2
@@ -282,10 +282,10 @@ struct intel_link_m_n { };#define for_each_pipe (__dev_priv, __p) \ - for ((__p) = 0; (__p) < INTEL_INFO(__dev_priv)->num_pipes; (__p)++) + for ((__p) = 0; (__p) < (__dev_priv)->runtime_info.num_pipes; (__p)++)#define for_each_pipe_masked (__dev_priv, __p, __mask) \ - for ((__p) = 0; (__p) < INTEL_INFO(__dev_priv)->num_pipes; (__p)++) \ + for ((__p) = 0; (__p) < (__dev_priv)->runtime_info.num_pipes; (__p)++) \ for_each_if((__mask) & BIT(__p))#define for_each_cpu_transcoder_masked (__dev_priv, __t, __mask) \
drivers/gpu/drm/i915/intel_engine_cs.c +2 -3
@@ -325,8 +325,7 @@ intel_engine_setup(struct drm_i915_private *dev_priv,*/ int intel_engines_init_mmio (struct drm_i915_private *dev_priv) { -struct intel_device_info *device_info =mkwrite_device_info (dev_priv); -const unsigned int ring_mask =INTEL_INFO (dev_priv)->ring_mask; +const unsigned int ring_mask = dev_priv->runtime_info.ring_mask;struct intel_engine_cs *engine;enum intel_engine_id id;unsigned int mask =0 ;
@@ -357,7 +356,7 @@ int intel_engines_init_mmio(struct drm_i915_private *dev_priv)* engines. */ if (WARN_ON (mask != ring_mask)) - device_info->ring_mask = mask; + dev_priv->runtime_info.ring_mask = mask;/* We always presume we have at least RCS available for later probing */ if (WARN_ON (!HAS_ENGINE (dev_priv,RCS ))) {
drivers/gpu/drm/i915/intel_fbc.c +1 -1
@@ -1309,7 +1309,7 @@ void intel_fbc_init(struct drm_i915_private *dev_priv) fbc->active = false;if (need_fbc_vtd_wa (dev_priv)) -mkwrite_device_info (dev_priv)->has_fbc = false; + dev_priv->runtime_info.has_fbc = false; i915_modparams.enable_fbc =intel_sanitize_fbc_option (dev_priv); DRM_DEBUG_KMS("Sanitized enable_fbc value: %d\n",
drivers/gpu/drm/i915/intel_fbdev.c +2 -2
@@ -484,7 +484,7 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,* fbdev helper library. */ if (num_connectors_enabled != num_connectors_detected && - num_connectors_enabled <INTEL_INFO (dev_priv)->num_pipes) { + num_connectors_enabled < dev_priv->runtime_info.num_pipes) {DRM_DEBUG_KMS ("fallback: Not all outputs enabled\n" );DRM_DEBUG_KMS ("Enabled: %i, detected: %i\n" , num_connectors_enabled, num_connectors_detected);
@@ -672,7 +672,7 @@ int intel_fbdev_init(struct drm_device *dev)struct intel_fbdev *ifbdev;int ret; -if (WARN_ON (INTEL_INFO (dev_priv)->num_pipes ==0 )) +if (WARN_ON (dev_priv->runtime_info.num_pipes ==0 ))return -ENODEV ; ifbdev =kzalloc (sizeof (struct intel_fbdev ),GFP_KERNEL );
drivers/gpu/drm/i915/intel_guc_submission.c +2 -2
@@ -1024,7 +1024,7 @@ static int guc_clients_create(struct intel_guc *guc)GEM_BUG_ON (guc->preempt_client); client =guc_client_alloc (dev_priv, -INTEL_INFO (dev_priv)->ring_mask, + dev_priv->runtime_info.ring_mask,GUC_CLIENT_PRIORITY_KMD_NORMAL , dev_priv->kernel_context);if (IS_ERR (client)) {
@@ -1035,7 +1035,7 @@ static int guc_clients_create(struct intel_guc *guc)if (dev_priv->preempt_context) { client =guc_client_alloc (dev_priv, -INTEL_INFO (dev_priv)->ring_mask, + dev_priv->runtime_info.ring_mask,GUC_CLIENT_PRIORITY_KMD_HIGH , dev_priv->preempt_context);if (IS_ERR (client)) {
drivers/gpu/drm/i915/intel_i2c.c +1 -1
@@ -817,7 +817,7 @@ int intel_setup_gmbus(struct drm_i915_private *dev_priv)unsigned int pin;int ret; -if (INTEL_INFO (dev_priv)->num_pipes ==0 ) +if (dev_priv->runtime_info.num_pipes ==0 )return 0 ;if (IS_VALLEYVIEW (dev_priv) ||IS_CHERRYVIEW (dev_priv))
drivers/gpu/drm/i915/intel_lpe_audio.c +1 -1
@@ -111,7 +111,7 @@ lpe_audio_platdev_create(struct drm_i915_private *dev_priv) pinfo.size_data =sizeof (*pdata); pinfo.dma_mask =DMA_BIT_MASK (32 ); - pdata->num_pipes =INTEL_INFO (dev_priv)->num_pipes; + pdata->num_pipes = dev_priv->runtime_info.num_pipes; pdata->num_ports =IS_CHERRYVIEW (dev_priv) ?3 :2 ;/* B,C,D or B,C */ pdata->port[0 ].pipe =-1 ; pdata->port[1 ].pipe =-1 ;
drivers/gpu/drm/i915/intel_pm.c +5 -4
@@ -1899,7 +1899,8 @@ static int vlv_compute_pipe_wm(struct intel_crtc_state *crtc_state)for (level =0 ; level < wm_state->num_levels; level++) {const struct g4x_pipe_wm *raw = &crtc_state->wm.vlv.raw[level]; -const int sr_fifo_size =INTEL_INFO (dev_priv)->num_pipes *512 -1 ; +const int sr_fifo_size = + dev_priv->runtime_info.num_pipes *512 -1 ;if (!vlv_raw_crtc_wm_is_valid (crtc_state, level))break ;
@@ -2632,7 +2633,7 @@ static unsigned int ilk_plane_wm_max(const struct drm_device *dev,/* HSW allows LP1+ watermarks even with multiple pipes */ if (level ==0 || config->num_pipes_active >1 ) { - fifo_size /=INTEL_INFO (dev_priv)->num_pipes; + fifo_size /= dev_priv->runtime_info.num_pipes;/* * For some reason the non self refresh
@@ -6886,7 +6887,7 @@ static bool bxt_check_bios_rc6_setup(struct drm_i915_private *dev_priv)static bool sanitize_rc6 (struct drm_i915_private *i915) { -struct intel_device_info *info =mkwrite_device_info (i915); +struct intel_runtime_device_info *info = &i915->runtime_info;/* Powersaving is controlled by the host when inside a VM */ if (intel_vgpu_active (i915))
@@ -9498,7 +9499,7 @@ void intel_init_pm(struct drm_i915_private *dev_priv) dev_priv->display.update_wm = i9xx_update_wm; dev_priv->display.get_fifo_size = i9xx_get_fifo_size; }else if (IS_GEN2 (dev_priv)) { -if (INTEL_INFO (dev_priv)->num_pipes ==1 ) { +if (dev_priv->runtime_info.num_pipes ==1 ) { dev_priv->display.update_wm = i845_update_wm; dev_priv->display.get_fifo_size = i845_get_fifo_size; }else {
drivers/gpu/drm/i915/selftests/huge_pages.c +9 -9
@@ -341,7 +341,7 @@ fake_huge_pages_object(struct drm_i915_private *i915, u64 size, bool single)static int igt_check_page_sizes (struct i915_vma *vma) {struct drm_i915_private *i915 = vma->vm->i915; -unsigned int supported =INTEL_INFO (i915)->page_sizes; +unsigned int supported = i915->runtime_info.page_sizes;struct drm_i915_gem_object *obj = vma->obj;int err =0 ;
@@ -382,7 +382,7 @@ static int igt_mock_exhaust_device_supported_pages(void *arg) {struct i915_hw_ppgtt *ppgtt = arg;struct drm_i915_private *i915 = ppgtt->vm.i915; -unsigned int saved_mask =INTEL_INFO (i915)->page_sizes; +unsigned int saved_mask = i915->runtime_info.page_sizes;struct drm_i915_gem_object *obj;struct i915_vma *vma;int i, j, single;
@@ -401,7 +401,7 @@ static int igt_mock_exhaust_device_supported_pages(void *arg) combination |= page_sizes[j]; } -mkwrite_device_info (i915)->page_sizes = combination; + i915->runtime_info.page_sizes = combination;for (single =0 ; single <=1 ; ++single) { obj =fake_huge_pages_object (i915, combination, !!single);
@@ -452,7 +452,7 @@ static int igt_mock_exhaust_device_supported_pages(void *arg) out_put:i915_gem_object_put (obj); out_device: -mkwrite_device_info (i915)->page_sizes = saved_mask; + i915->runtime_info.page_sizes = saved_mask;return err; }
@@ -461,7 +461,7 @@ static int igt_mock_ppgtt_misaligned_dma(void *arg) {struct i915_hw_ppgtt *ppgtt = arg;struct drm_i915_private *i915 = ppgtt->vm.i915; -unsigned long supported =INTEL_INFO (i915)->page_sizes; +unsigned long supported = i915->runtime_info.page_sizes;struct drm_i915_gem_object *obj;int bit;int err;
@@ -1204,7 +1204,7 @@ static int igt_ppgtt_exhaust_huge(void *arg) {struct i915_gem_context *ctx = arg;struct drm_i915_private *i915 = ctx->i915; -unsigned long supported =INTEL_INFO (i915)->page_sizes; +unsigned long supported = i915->runtime_info.page_sizes;static unsigned int pages[ARRAY_SIZE (page_sizes)];struct drm_i915_gem_object *obj;unsigned int size_mask;
@@ -1296,7 +1296,7 @@ static int igt_ppgtt_exhaust_huge(void *arg)i915_gem_object_unpin_pages (obj);i915_gem_object_put (obj); out_device: -mkwrite_device_info (i915)->page_sizes = supported; + i915->runtime_info.page_sizes = supported;return err; }
@@ -1434,7 +1434,7 @@ static int igt_ppgtt_pin_update(void *arg) {struct i915_gem_context *ctx = arg;struct drm_i915_private *dev_priv = ctx->i915; -unsigned long supported =INTEL_INFO (dev_priv)->page_sizes; +unsigned long supported = dev_priv->runtime_info.page_sizes;struct i915_hw_ppgtt *ppgtt = ctx->ppgtt;struct drm_i915_gem_object *obj;struct i915_vma *vma;
@@ -1711,7 +1711,7 @@ int i915_gem_huge_page_mock_selftests(void)return -ENOMEM ;/* Pretend to be a device which supports the 48b PPGTT */ -mkwrite_device_info (dev_priv)->ppgtt =INTEL_PPGTT_FULL_4LVL ; + dev_priv->runtime_info.ppgtt =INTEL_PPGTT_FULL_4LVL ; pdev = dev_priv->drm.pdev;dma_coerce_mask_and_coherent (&pdev->dev,DMA_BIT_MASK (39 ));
drivers/gpu/drm/i915/selftests/intel_guc.c +2 -2
@@ -111,7 +111,7 @@ static int validate_client(struct intel_guc_client *client, dev_priv->preempt_context : dev_priv->kernel_context;if (client->owner != ctx_owner || - client->engines !=INTEL_INFO (dev_priv)->ring_mask || + client->engines != dev_priv->runtime_info.ring_mask || client->priority != client_priority || client->doorbell_id ==GUC_DOORBELL_INVALID )return -EINVAL ;
@@ -259,7 +259,7 @@ static int igt_guc_doorbells(void *arg)for (i =0 ; i <ATTEMPTS ; i++) { clients[i] =guc_client_alloc (dev_priv, -INTEL_INFO (dev_priv)->ring_mask, + dev_priv->runtime_info.ring_mask, i %GUC_CLIENT_PRIORITY_NUM , dev_priv->kernel_context);
drivers/gpu/drm/i915/selftests/mock_gem_device.c +5 -6
@@ -174,12 +174,11 @@ struct drm_i915_private *mock_gem_device(void)/* Using the global GTT may ask questions about KMS users, so prepare */ drm_mode_config_init (&i915->drm); -mkwrite_device_info (i915)->gen =-1 ; + i915->runtime_info.gen =-1 ; -mkwrite_device_info (i915)->page_sizes = -I915_GTT_PAGE_SIZE_4K | -I915_GTT_PAGE_SIZE_64K | -I915_GTT_PAGE_SIZE_2M ; + i915->runtime_info.page_sizes =I915_GTT_PAGE_SIZE_4K | +I915_GTT_PAGE_SIZE_64K | +I915_GTT_PAGE_SIZE_2M ;mock_uncore_init (i915);i915_gem_init__mm (i915);
@@ -231,7 +230,7 @@ struct drm_i915_private *mock_gem_device(void)mock_init_ggtt (i915); -mkwrite_device_info (i915)->ring_mask =BIT (0 ); + i915->runtime_info.ring_mask =BIT (0 ); i915->kernel_context =mock_context (i915,NULL );if (!i915->kernel_context) goto err_unlock;
Signature · 6 lines
2.19.1 _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 3/7] drm/i915: Move all runtime modified device info fields into runtime info
Quoting Tvrtko Ursulin (2018-11-12 17:12:38)
Quoted 8 lines
struct
intel_device_info{drivers/gpu/drm/i915/intel_device_info.h +1
-3-u16 device_id;u16 gen_mask; -u8 gen; +u8 __gen;u8 gt;/* GT number, 0 if undefined */ -intel_ring_mask_t ring_mask;/* Rings supported by the HW */
drivers/gpu/drm/i915/intel_device_info.h struct sseu_dev_info { · line 161
Quoted 10 lines
drivers/gpu/drm/i915/intel_device_info.h +3
-3-u8 num_pipes; +intel_ring_mask_t __ring_mask;/* Rings supported by the HW */ +u8 __num_pipes;enum intel_platform platform;u32 platform_mask; -enum intel_ppgtt ppgtt; -unsigned int page_sizes;/* page sizes supported by the HW */ +enum intel_ppgtt __ppgtt;
ppgtt mode is static.
-Chris
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 3/7] drm/i915: Move all runtime modified device info fields into runtime info
Quoted 13 lines · Chris Wilson
Quoting Tvrtko Ursulin (2018-11-12 17:12:38)
Quoted 12 lines
struct intel_device_info {drivers/gpu/drm/i915/intel_device_info.h +3
-4-u16 device_id;u16 gen_mask; -u8 gen; +u8 __gen;u8 gt;/* GT number, 0 if undefined */ -intel_ring_mask_t ring_mask;/* Rings supported by the HW */ -u8 num_pipes; +intel_ring_mask_t __ring_mask;/* Rings supported by the HW */ +u8 __num_pipes;
Quoted 8 lines
drivers/gpu/drm/i915/intel_device_info.h struct sseu_dev_info { · line 161
Quoted 6 lines
enum intel_platform platform; u32 platform_mask;drivers/gpu/drm/i915/intel_device_info.h +1
-2-enum intel_ppgtt ppgtt; -unsigned int page_sizes;/* page sizes supported by the HW */ +enum intel_ppgtt __ppgtt;ppgtt mode is static.
What about:
@@ -868,7 +867,7 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)
if (IS_GEN6(dev_priv) && intel_vtd_active()) {
DRM_INFO("Disabling ppGTT for VT-d support\n");
- info->ppgtt = INTEL_PPGTT_NONE;
+ runtime_info->ppgtt = INTEL_PPGTT_NONE;
}
/* Initialize command stream timestamp frequency */And:
@@ -1711,7 +1711,7 @@ int i915_gem_huge_page_mock_selftests(void)
return -ENOMEM;
/* Pretend to be a device which supports the 48b PPGTT */- mkwrite_device_info(dev_priv)->ppgtt = INTEL_PPGTT_FULL_4LVL;
+ dev_priv->runtime_info.ppgtt = INTEL_PPGTT_FULL_4LVL;
pdev = dev_priv->drm.pdev;
dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(39));?
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 3/7] drm/i915: Move all runtime modified device info fields into runtime info
Quoting Tvrtko Ursulin (2018-11-13 09:13:47)
Quoted 27 lines · Chris Wilson
Quoted 13 lines
Quoting Tvrtko Ursulin (2018-11-12 17:12:38)
Quoted 12 lines
struct intel_device_info {drivers/gpu/drm/i915/intel_device_info.h +3
-4-u16 device_id;u16 gen_mask; -u8 gen; +u8 __gen;u8 gt;/* GT number, 0 if undefined */ -intel_ring_mask_t ring_mask;/* Rings supported by the HW */ -u8 num_pipes; +intel_ring_mask_t __ring_mask;/* Rings supported by the HW */ +u8 __num_pipes;Quoted 8 lines
drivers/gpu/drm/i915/intel_device_info.h struct sseu_dev_info { · line 161
Quoted 6 lines
enum intel_platform platform; u32 platform_mask;drivers/gpu/drm/i915/intel_device_info.h +1
-2-enum intel_ppgtt ppgtt; -unsigned int page_sizes;/* page sizes supported by the HW */ +enum intel_ppgtt __ppgtt;ppgtt mode is static.
What about:
drivers/gpu/drm/i915/intel_device_info.c void intel_device_info_runtime_init(struct · line 871
Quoted 6 lines
drivers/gpu/drm/i915/intel_device_info.c +1
-1@@ -868,7 +867,7 @@ void intel_device_info_runtime_init(struct drm_i915_private *dev_priv)if (IS_GEN6 (dev_priv) &&intel_vtd_active ()) {DRM_INFO ("Disabling ppGTT for VT-d support\n" ); - info->ppgtt =INTEL_PPGTT_NONE ; + runtime_info->ppgtt =INTEL_PPGTT_NONE ;
Cunning, you see I grepped the patch for the wrong thing (thinking it was just the markup). We could make it static, but that would devalue the information stored by ppgtt.
The alternative plan:
- move the disabling ppgtt into aliasing setup
- tag the PD offsets in the error state with [none, aliasing, full]
Advantage: we don't need to worry about runtime_info.pggtt
Disadvantage: extra code to generate equiv of runtime_info.ppgtt for debugging.
drivers/gpu/drm/i915/selftests/huge_pages.c int i915_gem_huge_page_mock_selftests(void) · line 1714
Quoted 12 lines
(quoted diff) +0
-0}/* Initialize command stream timestamp frequency */And:
drivers/gpu/drm/i915/selftests/huge_pages.c +1
-1@@ -1711,7 +1711,7 @@ int i915_gem_huge_page_mock_selftests(void)return -ENOMEM ;/* Pretend to be a device which supports the 48b PPGTT */ -mkwrite_device_info (dev_priv)->ppgtt =INTEL_PPGTT_FULL_4LVL ; + dev_priv->runtime_info.ppgtt =INTEL_PPGTT_FULL_4LVL ;
That can be made static, but drops out later anyway. And when we have separate ppgtt mode and size, I think it should be static (certainly we are unlikely to change the ppgtt_size at runtime).
-Chris
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 3/7] drm/i915: Move all runtime modified device info fields into runtime info
In reply to Tvrtko UrsulinQuoted 17 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
After the previous change which cleared the static tables from effectively unused storage, we now replicate entries which have defaults set from there, but can be overriden at runtime.
For this class of variables all accessor macros and call sites are changed to use the runtime version. Therefore at driver load we need to copy over these variables from static to the runtime table.
We add double prefixes to the affected device info members to signify they are special and to catch all current and future users.
Signed-off-by Tvrtko Ursulin <[email protected]>Cc Chris Wilson <[email protected]>Cc Jani Nikula <[email protected]>---
[...]
drivers/gpu/drm/i915/selftests/mock_gem_device.c struct drm_i915_private *mock_gem_device(void) · line 177
Quoted 10 lines
drivers/gpu/drm/i915/selftests/mock_gem_device.c +1
-1@@ -174,12 +174,11 @@ struct drm_i915_private *mock_gem_device(void)/* Using the global GTT may ask questions about KMS users, so prepare */ drm_mode_config_init (&i915->drm); -mkwrite_device_info (i915)->gen =-1 ; + i915->runtime_info.gen =-1 ;
this seems the only place that is setting gen to something not statically defined. And it also misses that it'd need to set gen_mask, too.
Could we rather define a device_info for the mock device with the proper values rather than doing this?
Lucas De Marchi
Quoted 27 lines
drivers/gpu/drm/i915/selftests/mock_gem_device.c +4
-5-mkwrite_device_info (i915)->page_sizes = -I915_GTT_PAGE_SIZE_4K | -I915_GTT_PAGE_SIZE_64K | -I915_GTT_PAGE_SIZE_2M ; + i915->runtime_info.page_sizes =I915_GTT_PAGE_SIZE_4K | +I915_GTT_PAGE_SIZE_64K | +I915_GTT_PAGE_SIZE_2M ;mock_uncore_init (i915);i915_gem_init__mm (i915);@@ -231,7 +230,7 @@ struct drm_i915_private *mock_gem_device(void)mock_init_ggtt (i915); -mkwrite_device_info (i915)->ring_mask =BIT (0 ); + i915->runtime_info.ring_mask =BIT (0 ); i915->kernel_context =mock_context (i915,NULL );if (!i915->kernel_context) goto err_unlock;Signature · 6 lines
2.19.1 _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 3/7] drm/i915: Move all runtime modified device info fields into runtime info
Quoted 29 lines · Lucas De Marchi
Quoted 17 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
After the previous change which cleared the static tables from effectively unused storage, we now replicate entries which have defaults set from there, but can be overriden at runtime.
For this class of variables all accessor macros and call sites are changed to use the runtime version. Therefore at driver load we need to copy over these variables from static to the runtime table.
We add double prefixes to the affected device info members to signify they are special and to catch all current and future users.
Signed-off-by Tvrtko Ursulin <[email protected]>Cc Chris Wilson <[email protected]>Cc Jani Nikula <[email protected]>---
[...]
Quoted 8 lines
drivers/gpu/drm/i915/selftests/mock_gem_device.c +0
-0@@ -174,12 +174,11 @@ struct drm_i915_private *mock_gem_device(void)/* Using the global GTT may ask questions about KMS users, so prepare */ drm_mode_config_init (&i915->drm);
Quoted 8 lines
drivers/gpu/drm/i915/selftests/mock_gem_device.c struct drm_i915_private *mock_gem_device(void) · line 177
Quoted 2 lines
drivers/gpu/drm/i915/selftests/mock_gem_device.c +1
-1-mkwrite_device_info (i915)->gen =-1 ; + i915->runtime_info.gen =-1 ;this seems the only place that is setting gen to something not statically defined. And it also misses that it'd need to set
gen_mask, too.Could we rather define a
device_infofor the mock device with the proper values rather than doing this?
That would be indeed preferable and I hated the runtime edit of the gen myself. For the RFC I just did not spend the time to investigate why the mock device needs this etc. Marking as TODO.
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
RFC 4/7 drm/i915: Remove mkwrite_device_info
In reply to Tvrtko UrsulinFrom: Tvrtko Ursulin <[email protected]>
Now that we are down to one caller, which does not even modify copied device info, we can remove the mkwrite_device_info helper and convert the device info pointer itself to be a pointer to static table instead of a copy.
Only unfortnate thing is that we need to convert all callsites which were referencing the device info directly to using the INTEL_INFO helper.
--- drivers/gpu/drm/i915/i915_drv.c | 9 +- drivers/gpu/drm/i915/i915_drv.h | 107 ++++++------- drivers/gpu/drm/i915/i915_reg.h | 190 +++++++++++------------ drivers/gpu/drm/i915/intel_device_info.c | 11 +- drivers/gpu/drm/i915/intel_device_info.h | 2 +- drivers/gpu/drm/i915/intel_uncore.c | 2 +- 6 files changed, 151 insertions(+), 170 deletions(-)
drivers/gpu/drm/i915/i915_drv.c +3 -6
@@ -1620,7 +1620,7 @@ static void i915_welcome_messages(struct drm_i915_private *dev_priv)if (drm_debug &DRM_UT_DRIVER ) {struct drm_printer p =drm_debug_printer ("i915 device info:" ); -intel_device_info_dump (&dev_priv->info, &p); +intel_device_info_dump (dev_priv, &p);intel_device_info_dump_runtime (&dev_priv->runtime_info, &p); }
@@ -1638,7 +1638,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_runtime_device_info *runtime_info; -struct intel_device_info *device_info; +const struct intel_device_info *device_info;struct drm_i915_private *i915;int err;
@@ -1654,12 +1654,9 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent) i915->drm.pdev = pdev; i915->drm.dev_private = i915; + i915->info = device_info = match_info;pci_set_drvdata (pdev, &i915->drm); -/* Setup the write-once "constant" device info */ - device_info =mkwrite_device_info (i915); -memcpy (device_info, match_info,sizeof (*device_info)); -BUILD_BUG_ON (INTEL_MAX_PLATFORMS >BITS_PER_TYPE (device_info->platform_mask));BUG_ON (device_info->__gen >BITS_PER_TYPE (device_info->gen_mask));
drivers/gpu/drm/i915/i915_drv.h +47 -60
235 lines not on this page · raw message
drivers/gpu/drm/i915/i915_reg.h +95 -95
333 lines not on this page · raw message
drivers/gpu/drm/i915/intel_device_info.c +4 -7
@@ -121,19 +121,16 @@ intel_device_info_dump_runtime(const struct intel_runtime_device_info *info,intel_runtime_device_info_dump_flags (info, p); } -void intel_device_info_dump (const struct intel_device_info *info, +void intel_device_info_dump (struct drm_i915_private *dev_priv,struct drm_printer *p) { -struct drm_i915_private *dev_priv = - container_of(info, struct drm_i915_private, info); -drm_printf (p,"pciid=0x%04x rev=0x%02x platform=%s gen=%i\n" ,INTEL_DEVID (dev_priv),INTEL_REVID (dev_priv), -intel_platform_name (info->platform), - info->__gen); +intel_platform_name (INTEL_INFO (dev_priv)->platform), +INTEL_INFO (dev_priv)->__gen); -intel_device_info_dump_flags (info, p); +intel_device_info_dump_flags (INTEL_INFO (dev_priv), p); } void intel_device_info_dump_topology(const struct sseu_dev_info *sseu,
drivers/gpu/drm/i915/intel_device_info.h +1 -1
@@ -270,7 +270,7 @@ static inline void sseu_set_eus(struct sseu_dev_info *sseu,const char *intel_platform_name (enum intel_platform platform);void intel_device_info_runtime_init (struct drm_i915_private *dev_priv); -void intel_device_info_dump (const struct intel_device_info *info, +void intel_device_info_dump (struct drm_i915_private *dev_priv,struct drm_printer *p);void intel_device_info_dump_flags (const struct intel_device_info *info,struct drm_printer *p);
drivers/gpu/drm/i915/intel_uncore.c +1 -1
@@ -2256,7 +2256,7 @@ bool intel_has_gpu_reset(struct drm_i915_private *dev_priv)bool intel_has_reset_engine (struct drm_i915_private *dev_priv) { -return (dev_priv->info.has_reset_engine && +return (INTEL_INFO (dev_priv)->has_reset_engine && i915_modparams.reset >=2 ); }
Signature · 6 lines
2.19.1 _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 4/7] drm/i915: Remove mkwrite_device_info
Quoting Tvrtko Ursulin (2018-11-12 17:12:39)
Quoted 6 lines
From: Tvrtko Ursulin <[email protected]>
Now that we are down to one caller, which does not even modify copied device info, we can remove the
mkwrite_device_infohelper and convert the device info pointer itself to be a pointer to static table instead of a copy.
The copy was deliberate to avoid the extra pointer. How does the change in code size now compare?
-Chris
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 4/7] drm/i915: Remove mkwrite_device_info
Quoted 10 lines · Chris Wilson
Quoting Tvrtko Ursulin (2018-11-12 17:12:39)
Quoted 6 lines
From: Tvrtko Ursulin <[email protected]>
Now that we are down to one caller, which does not even modify copied device info, we can remove the
mkwrite_device_infohelper and convert the device info pointer itself to be a pointer to static table instead of a copy.The copy was deliberate to avoid the extra pointer. How does the change in code size now compare?
AFAIR grows a bit, but overall series still ends up overall smaller. I need to re-run the numbers for more concrete info.
However, if we keep having a copy, ie. do not make device info properly read-only, are we still interested in splitting the two? Benefit would be diminished, but presumably people still think it would be worth it?
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 4/7] drm/i915: Remove mkwrite_device_info
Quoted 12 lines · Tvrtko Ursulin
Quoted 10 lines · Chris Wilson
Quoting Tvrtko Ursulin (2018-11-12 17:12:39)
Quoted 6 lines
From: Tvrtko Ursulin <[email protected]>
Now that we are down to one caller, which does not even modify copied device info, we can remove the
mkwrite_device_infohelper and convert the device info pointer itself to be a pointer to static table instead of a copy.The copy was deliberate to avoid the extra pointer. How does the change in code size now compare?
Quoted 6 lines
AFAIR grows a bit, but overall series still ends up overall smaller. I need to re-run the numbers for more concrete info.
However, if we keep having a copy, ie. do not make device info properly read-only, are we still interested in splitting the two? Benefit would be diminished, but presumably people still think it would be worth it?
If we don't turn device info into a pointer to the static const structs, IMO there's simply no point in any of this. Then we might just as well drop the const and mkwrite_device_info, and use the mutable thing all over the place.
Modifying the device info copy was supposed to be an exception at the time of the copy, but with mkwrite_device_info it has proliferated. It's silly and ugly and wrong with no benefits. The const was put in place to hint that it's not supposed to be modified, but that didn't work out.
So which is it, runtime/static split with an extra pointer chase to the const data in rodata (I'm in favor), or just drop the const from the dev_priv copy and remove mkwrite_device_info?
The latter makes future attempts at utilizing DCE/LTO with a reduced number of device infos much harder I think.
BR,
Jani.
Signature · 5 lines
Jani Nikula, Intel Open Source Graphics Center _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 4/7] drm/i915: Remove mkwrite_device_info
Quoting Jani Nikula (2018-11-13 11:28:11)
Quoted 30 lines · Tvrtko Ursulin
Quoted 12 lines · Chris Wilson
Quoted 10 lines
Quoting Tvrtko Ursulin (2018-11-12 17:12:39)
Quoted 6 lines
From: Tvrtko Ursulin <[email protected]>
Now that we are down to one caller, which does not even modify copied device info, we can remove the
mkwrite_device_infohelper and convert the device info pointer itself to be a pointer to static table instead of a copy.The copy was deliberate to avoid the extra pointer. How does the change in code size now compare?
Quoted 6 lines
AFAIR grows a bit, but overall series still ends up overall smaller. I need to re-run the numbers for more concrete info.
However, if we keep having a copy, ie. do not make device info properly read-only, are we still interested in splitting the two? Benefit would be diminished, but presumably people still think it would be worth it?
If we don't turn device info into a pointer to the static const structs, IMO there's simply no point in any of this. Then we might just as well drop the const and
mkwrite_device_info, and use the mutable thing all over the place.Modifying the device info copy was supposed to be an exception at the time of the copy, but with
mkwrite_device_infoit has proliferated. It's silly and ugly and wrong with no benefits. The const was put in place to hint that it's not supposed to be modified, but that didn't work out.
Quoted 6 lines
So which is it, runtime/static split with an extra pointer chase to the const data in rodata (I'm in favor), or just drop the const from the
dev_privcopy and removemkwrite_device_info?The latter makes future attempts at utilizing DCE/LTO with a reduced number of device infos much harder I think.
The DCE goal is still worthwhile, as is making our constants truly immutable.
It's just a digression as I remembered one benefit of the copy, and tracking how much of that benefit remains and could maybe recovered in other ways is something we can measure.
-Chris
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 4/7] drm/i915: Remove mkwrite_device_info
In reply to Tvrtko UrsulinQuoted 9 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
Now that we are down to one caller, which does not even modify copied device info, we can remove the
mkwrite_device_infohelper and convert the device info pointer itself to be a pointer to static table instead of a copy.Only unfortnate thing is that we need to convert all callsites which were referencing the device info directly to using the
INTEL_INFOhelper.
I'm not sure if that's all that bad. When I was toying around with mkwrite_device_info removal, I actually started off with changing all device info references to INTEL_INFO. It's a big patch, but it nicely centralizes many of the other changes instead of splattering all over the place.
I'd actually like to see RUNTIME_INFO or similar macro as well, just to be able to change the way it's handled later on.
BR,
Jani.
Quoted 713 lines
Signed-off-by Tvrtko Ursulin <[email protected]>Cc Chris Wilson <[email protected]>Cc Jani Nikula <[email protected]>--- drivers/gpu/drm/i915/i915_drv.c | 9 +- drivers/gpu/drm/i915/i915_drv.h | 107 ++++++------- drivers/gpu/drm/i915/i915_reg.h | 190 +++++++++++------------ drivers/gpu/drm/i915/intel_device_info.c | 11 +- drivers/gpu/drm/i915/intel_device_info.h | 2 +- drivers/gpu/drm/i915/intel_uncore.c | 2 +- 6 files changed, 151 insertions(+), 170 deletions(-)drivers/gpu/drm/i915/i915_drv.c +3
-6@@ -1620,7 +1620,7 @@ static void i915_welcome_messages(struct drm_i915_private *dev_priv)if (drm_debug &DRM_UT_DRIVER ) {struct drm_printer p =drm_debug_printer ("i915 device info:" ); -intel_device_info_dump (&dev_priv->info, &p); +intel_device_info_dump (dev_priv, &p);intel_device_info_dump_runtime (&dev_priv->runtime_info, &p); }@@ -1638,7 +1638,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_runtime_device_info *runtime_info; -struct intel_device_info *device_info; +const struct intel_device_info *device_info;struct drm_i915_private *i915;int err;@@ -1654,12 +1654,9 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent) i915->drm.pdev = pdev; i915->drm.dev_private = i915; + i915->info = device_info = match_info;pci_set_drvdata (pdev, &i915->drm); -/* Setup the write-once "constant" device info */ - device_info =mkwrite_device_info (i915); -memcpy (device_info, match_info,sizeof (*device_info)); -BUILD_BUG_ON (INTEL_MAX_PLATFORMS >BITS_PER_TYPE (device_info->platform_mask));BUG_ON (device_info->__gen >BITS_PER_TYPE (device_info->gen_mask));drivers/gpu/drm/i915/i915_drv.h +47
-60@@ -1588,7 +1588,7 @@ struct drm_i915_private {struct kmem_cache *dependencies;struct kmem_cache *priorities; -const struct intel_device_info info; +const struct intel_device_info *info;struct intel_runtime_device_info runtime_info;struct intel_driver_caps caps;@@ -2349,13 +2349,7 @@ static inline unsigned int i915_sg_segment_size(void)return size; } -static inline const struct intel_device_info * -intel_info (const struct drm_i915_private *dev_priv) -{ -return &dev_priv->info; -} - -#define INTEL_INFO (dev_priv) intel_info((dev_priv)) +#define INTEL_INFO (dev_priv) ((dev_priv)->info)#define DRIVER_CAPS (dev_priv) (&(dev_priv)->caps)#define INTEL_GEN (dev_priv) ((dev_priv)->runtime_info.gen)@@ -2371,7 +2365,7 @@ intel_info(const struct drm_i915_private *dev_priv)/* Returns true if Gen is in inclusive range [Start, End] */ #define IS_GEN (dev_priv, s, e) \ - (!!((dev_priv)->info.gen_mask & INTEL_GEN_MASK((s), (e)))) + (!!(INTEL_INFO(dev_priv)->gen_mask & INTEL_GEN_MASK((s), (e))))/* * Return true if revision is in range [since,until] inclusive. @@ -2381,7 +2375,7 @@ intel_info(const struct drm_i915_private *dev_priv)#define IS_REVID (p, since, until) \ (INTEL_REVID(p) >= (since) && INTEL_REVID(p) <= (until)) -#define IS_PLATFORM (dev_priv, p) ((dev_priv)->info.platform_mask & BIT(p)) +#define IS_PLATFORM (dev_priv, p) (INTEL_INFO(dev_priv)->platform_mask & BIT(p))#define IS_I830 (dev_priv) IS_PLATFORM(dev_priv, INTEL_I830)#define IS_I845G (dev_priv) IS_PLATFORM(dev_priv, INTEL_I845G)@@ -2403,7 +2397,7 @@ intel_info(const struct drm_i915_private *dev_priv)#define IS_IRONLAKE_M (dev_priv) (INTEL_DEVID(dev_priv) == 0x0046)#define IS_IVYBRIDGE (dev_priv) IS_PLATFORM(dev_priv, INTEL_IVYBRIDGE)#define IS_IVB_GT1 (dev_priv) (IS_IVYBRIDGE(dev_priv) && \ - (dev_priv)->info.gt == 1) + INTEL_INFO(dev_priv)->gt == 1)#define IS_VALLEYVIEW (dev_priv) IS_PLATFORM(dev_priv, INTEL_VALLEYVIEW)#define IS_CHERRYVIEW (dev_priv) IS_PLATFORM(dev_priv, INTEL_CHERRYVIEW)#define IS_HASWELL (dev_priv) IS_PLATFORM(dev_priv, INTEL_HASWELL)@@ -2415,7 +2409,7 @@ intel_info(const struct drm_i915_private *dev_priv)#define IS_COFFEELAKE (dev_priv) IS_PLATFORM(dev_priv, INTEL_COFFEELAKE)#define IS_CANNONLAKE (dev_priv) IS_PLATFORM(dev_priv, INTEL_CANNONLAKE)#define IS_ICELAKE (dev_priv) IS_PLATFORM(dev_priv, INTEL_ICELAKE) -#define IS_MOBILE (dev_priv) ((dev_priv)->info.is_mobile) +#define IS_MOBILE (dev_priv) (INTEL_INFO(dev_priv)->is_mobile)#define IS_HSW_EARLY_SDV (dev_priv) (IS_HASWELL(dev_priv) && \ (INTEL_DEVID(dev_priv) & 0xFF00) == 0x0C00)#define IS_BDW_ULT (dev_priv) (IS_BROADWELL(dev_priv) && \@@ -2426,11 +2420,11 @@ intel_info(const struct drm_i915_private *dev_priv)#define IS_BDW_ULX (dev_priv) (IS_BROADWELL(dev_priv) && \ (INTEL_DEVID(dev_priv) & 0xf) == 0xe)#define IS_BDW_GT3 (dev_priv) (IS_BROADWELL(dev_priv) && \ - (dev_priv)->info.gt == 3) + INTEL_INFO(dev_priv)->gt == 3)#define IS_HSW_ULT (dev_priv) (IS_HASWELL(dev_priv) && \ (INTEL_DEVID(dev_priv) & 0xFF00) == 0x0A00)#define IS_HSW_GT3 (dev_priv) (IS_HASWELL(dev_priv) && \ - (dev_priv)->info.gt == 3) + INTEL_INFO(dev_priv)->gt == 3)/* ULX machines are also considered ULT. */ #define IS_HSW_ULX (dev_priv) (INTEL_DEVID(dev_priv) == 0x0A0E || \ INTEL_DEVID(dev_priv) == 0x0A1E)@@ -2453,21 +2447,21 @@ intel_info(const struct drm_i915_private *dev_priv)#define IS_AML_ULX (dev_priv) (INTEL_DEVID(dev_priv) == 0x591C || \ INTEL_DEVID(dev_priv) == 0x87C0)#define IS_SKL_GT2 (dev_priv) (IS_SKYLAKE(dev_priv) && \ - (dev_priv)->info.gt == 2) + INTEL_INFO(dev_priv)->gt == 2)#define IS_SKL_GT3 (dev_priv) (IS_SKYLAKE(dev_priv) && \ - (dev_priv)->info.gt == 3) + INTEL_INFO(dev_priv)->gt == 3)#define IS_SKL_GT4 (dev_priv) (IS_SKYLAKE(dev_priv) && \ - (dev_priv)->info.gt == 4) + INTEL_INFO(dev_priv)->gt == 4)#define IS_KBL_GT2 (dev_priv) (IS_KABYLAKE(dev_priv) && \ - (dev_priv)->info.gt == 2) + INTEL_INFO(dev_priv)->gt == 2)#define IS_KBL_GT3 (dev_priv) (IS_KABYLAKE(dev_priv) && \ - (dev_priv)->info.gt == 3) + INTEL_INFO(dev_priv)->gt == 3)#define IS_CFL_ULT (dev_priv) (IS_COFFEELAKE(dev_priv) && \ (INTEL_DEVID(dev_priv) & 0x00F0) == 0x00A0)#define IS_CFL_GT2 (dev_priv) (IS_COFFEELAKE(dev_priv) && \ - (dev_priv)->info.gt == 2) + INTEL_INFO(dev_priv)->gt == 2)#define IS_CFL_GT3 (dev_priv) (IS_COFFEELAKE(dev_priv) && \ - (dev_priv)->info.gt == 3) + INTEL_INFO(dev_priv)->gt == 3)#define IS_CNL_WITH_PORT_F (dev_priv) (IS_CANNONLAKE(dev_priv) && \ (INTEL_DEVID(dev_priv) & 0x0004) == 0x0004)@@ -2530,16 +2524,16 @@ intel_info(const struct drm_i915_private *dev_priv)* have their own (e.g. HAS_PCH_SPLIT for ILK+ display, IS_foo for particular * chips, etc.). */ -#define IS_GEN2 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(1))) -#define IS_GEN3 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(2))) -#define IS_GEN4 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(3))) -#define IS_GEN5 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(4))) -#define IS_GEN6 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(5))) -#define IS_GEN7 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(6))) -#define IS_GEN8 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(7))) -#define IS_GEN9 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(8))) -#define IS_GEN10 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(9))) -#define IS_GEN11 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(10))) +#define IS_GEN2 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(1))) +#define IS_GEN3 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(2))) +#define IS_GEN4 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(3))) +#define IS_GEN5 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(4))) +#define IS_GEN6 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(5))) +#define IS_GEN7 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(6))) +#define IS_GEN8 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(7))) +#define IS_GEN9 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(8))) +#define IS_GEN10 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(9))) +#define IS_GEN11 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(10)))#define IS_LP (dev_priv) (INTEL_INFO(dev_priv)->is_lp)#define IS_GEN9_LP (dev_priv) (IS_GEN9(dev_priv) && IS_LP(dev_priv))@@ -2566,20 +2560,20 @@ intel_info(const struct drm_i915_private *dev_priv)#define HAS_LEGACY_SEMAPHORES (dev_priv) IS_GEN7(dev_priv) -#define HAS_LLC (dev_priv) ((dev_priv)->info.has_llc) -#define HAS_SNOOP (dev_priv) ((dev_priv)->info.has_snoop) +#define HAS_LLC (dev_priv) (INTEL_INFO(dev_priv)->has_llc) +#define HAS_SNOOP (dev_priv) (INTEL_INFO(dev_priv)->has_snoop)#define HAS_EDRAM (dev_priv) (!!((dev_priv)->edram_cap & EDRAM_ENABLED))#define HAS_WT (dev_priv) ((IS_HASWELL(dev_priv) || \ IS_BROADWELL(dev_priv)) && HAS_EDRAM(dev_priv)) -#define HWS_NEEDS_PHYSICAL (dev_priv) ((dev_priv)->info.hws_needs_physical) +#define HWS_NEEDS_PHYSICAL (dev_priv) (INTEL_INFO(dev_priv)->hws_needs_physical)#define HAS_LOGICAL_RING_CONTEXTS (dev_priv) \ - ((dev_priv)->info.has_logical_ring_contexts) + (INTEL_INFO(dev_priv)->has_logical_ring_contexts)#define HAS_LOGICAL_RING_ELSQ (dev_priv) \ - ((dev_priv)->info.has_logical_ring_elsq) + (INTEL_INFO(dev_priv)->has_logical_ring_elsq)#define HAS_LOGICAL_RING_PREEMPTION (dev_priv) \ - ((dev_priv)->info.has_logical_ring_preemption) + (INTEL_INFO(dev_priv)->has_logical_ring_preemption)#define HAS_EXECLISTS (dev_priv) HAS_LOGICAL_RING_CONTEXTS(dev_priv)@@ -2596,9 +2590,9 @@ intel_info(const struct drm_i915_private *dev_priv) ((sizes) & ~(dev_priv)->runtime_info.page_sizes) ==0 ; \ }) -#define HAS_OVERLAY (dev_priv) ((dev_priv)->info.has_overlay) +#define HAS_OVERLAY (dev_priv) (INTEL_INFO(dev_priv)->has_overlay)#define OVERLAY_NEEDS_PHYSICAL (dev_priv) \ - ((dev_priv)->info.overlay_needs_physical) + (INTEL_INFO(dev_priv)->overlay_needs_physical)/* Early gen2 have a totally busted CS tlb and require pinned batches. */ #define HAS_BROKEN_CS_TLB (dev_priv) (IS_I830(dev_priv) || IS_I845G(dev_priv))@@ -2619,8 +2613,8 @@ intel_info(const struct drm_i915_private *dev_priv)#define HAS_128_BYTE_Y_TILING (dev_priv) (!IS_GEN2(dev_priv) && \ !(IS_I915G(dev_priv) || \ IS_I915GM(dev_priv))) -#define SUPPORTS_TV (dev_priv) ((dev_priv)->info.supports_tv) -#define I915_HAS_HOTPLUG (dev_priv) ((dev_priv)->info.has_hotplug) +#define SUPPORTS_TV (dev_priv) (INTEL_INFO(dev_priv)->supports_tv) +#define I915_HAS_HOTPLUG (dev_priv) (INTEL_INFO(dev_priv)->has_hotplug)#define HAS_FW_BLC (dev_priv) (INTEL_GEN(dev_priv) > 2)#define HAS_FBC (dev_priv) ((dev_priv)->runtime_info.has_fbc)@@ -2628,30 +2622,30 @@ intel_info(const struct drm_i915_private *dev_priv)#define HAS_IPS (dev_priv) (IS_HSW_ULT(dev_priv) || IS_BROADWELL(dev_priv)) -#define HAS_DP_MST (dev_priv) ((dev_priv)->info.has_dp_mst) +#define HAS_DP_MST (dev_priv) (INTEL_INFO(dev_priv)->has_dp_mst) -#define HAS_DDI (dev_priv) ((dev_priv)->info.has_ddi) -#define HAS_FPGA_DBG_UNCLAIMED (dev_priv) ((dev_priv)->info.has_fpga_dbg) -#define HAS_PSR (dev_priv) ((dev_priv)->info.has_psr) +#define HAS_DDI (dev_priv) (INTEL_INFO(dev_priv)->has_ddi) +#define HAS_FPGA_DBG_UNCLAIMED (dev_priv) (INTEL_INFO(dev_priv)->has_fpga_dbg) +#define HAS_PSR (dev_priv) (INTEL_INFO(dev_priv)->has_psr)#define HAS_RC6 (dev_priv) ((dev_priv)->runtime_info.has_rc6)#define HAS_RC6p (dev_priv) ((dev_priv)->runtime_info.has_rc6p)#define HAS_RC6pp (dev_priv) (false)/* HW was never validated */ -#define HAS_CSR (dev_priv) ((dev_priv)->info.has_csr) +#define HAS_CSR (dev_priv) (INTEL_INFO(dev_priv)->has_csr) -#define HAS_RUNTIME_PM (dev_priv) ((dev_priv)->info.has_runtime_pm) -#define HAS_64BIT_RELOC (dev_priv) ((dev_priv)->info.has_64bit_reloc) +#define HAS_RUNTIME_PM (dev_priv) (INTEL_INFO(dev_priv)->has_runtime_pm) +#define HAS_64BIT_RELOC (dev_priv) (INTEL_INFO(dev_priv)->has_64bit_reloc) -#define HAS_IPC (dev_priv) ((dev_priv)->info.has_ipc) +#define HAS_IPC (dev_priv) (INTEL_INFO(dev_priv)->has_ipc)/* * For now, anything with a GuC requires uCode loading, and then supports * command submission once loaded. But these are logically independent * properties, so we have separate macros to test them. */ -#define HAS_GUC (dev_priv) ((dev_priv)->info.has_guc) -#define HAS_GUC_CT (dev_priv) ((dev_priv)->info.has_guc_ct) +#define HAS_GUC (dev_priv) (INTEL_INFO(dev_priv)->has_guc) +#define HAS_GUC_CT (dev_priv) (INTEL_INFO(dev_priv)->has_guc_ct)#define HAS_GUC_UCODE (dev_priv) (HAS_GUC(dev_priv))#define HAS_GUC_SCHED (dev_priv) (HAS_GUC(dev_priv))@@ -2704,12 +2698,12 @@ intel_info(const struct drm_i915_private *dev_priv)#define HAS_PCH_NOP (dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_NOP)#define HAS_PCH_SPLIT (dev_priv) (INTEL_PCH_TYPE(dev_priv) != PCH_NONE) -#define HAS_GMCH_DISPLAY (dev_priv) ((dev_priv)->info.has_gmch_display) +#define HAS_GMCH_DISPLAY (dev_priv) (INTEL_INFO(dev_priv)->has_gmch_display)#define HAS_LSPCON (dev_priv) (INTEL_GEN(dev_priv) >= 9)/* DPF == dynamic parity feature */ -#define HAS_L3_DPF (dev_priv) ((dev_priv)->info.has_l3_dpf) +#define HAS_L3_DPF (dev_priv) (INTEL_INFO(dev_priv)->has_l3_dpf)#define NUM_L3_SLICES (dev_priv) (IS_HSW_GT3(dev_priv) ? \ 2 : HAS_L3_DPF(dev_priv))@@ -3465,13 +3459,6 @@ static inline void intel_register_dsm_handler(void) { return; }static inline void intel_unregister_dsm_handler (void ) {return ; }#endif /* CONFIG_ACPI */ -/* intel_device_info.c */ -static inline struct intel_device_info * -mkwrite_device_info (struct drm_i915_private *dev_priv) -{ -return (struct intel_device_info *)&dev_priv->info; -} -/* modesetting */ extern void intel_modeset_init_hw (struct drm_device *dev);extern int intel_modeset_init (struct drm_device *dev);drivers/gpu/drm/i915/i915_reg.h +95
-95@@ -179,15 +179,15 @@ static inline bool i915_mmio_reg_valid(i915_reg_t reg)* Device info offset array based helpers for groups of registers with unevenly * spaced base offsets. */ -#define _MMIO_PIPE2 (pipe, reg) _MMIO(dev_priv->info.pipe_offsets[pipe] - \ - dev_priv->info.pipe_offsets[PIPE_A] + (reg) + \ - dev_priv->info.display_mmio_offset) -#define _MMIO_TRANS2 (pipe, reg) _MMIO(dev_priv->info.trans_offsets[(pipe)] - \ - dev_priv->info.trans_offsets[TRANSCODER_A] + (reg) + \ - dev_priv->info.display_mmio_offset) -#define _CURSOR2 (pipe, reg) _MMIO(dev_priv->info.cursor_offsets[(pipe)] - \ - dev_priv->info.cursor_offsets[PIPE_A] + (reg) + \ - dev_priv->info.display_mmio_offset) +#define _MMIO_PIPE2 (pipe, reg) _MMIO(INTEL_INFO(dev_priv)->pipe_offsets[pipe] - \ + INTEL_INFO(dev_priv)->pipe_offsets[PIPE_A] + (reg) + \ + INTEL_INFO(dev_priv)->display_mmio_offset) +#define _MMIO_TRANS2 (pipe, reg) _MMIO(INTEL_INFO(dev_priv)->trans_offsets[(pipe)] - \ + INTEL_INFO(dev_priv)->trans_offsets[TRANSCODER_A] + (reg) + \ + INTEL_INFO(dev_priv)->display_mmio_offset) +#define _CURSOR2 (pipe, reg) _MMIO(INTEL_INFO(dev_priv)->cursor_offsets[(pipe)] - \ + INTEL_INFO(dev_priv)->cursor_offsets[PIPE_A] + (reg) + \ + INTEL_INFO(dev_priv)->display_mmio_offset)#define __MASKED_FIELD (mask, value) ((mask) << 16 | (value))#define _MASKED_FIELD (mask, value) ({ \@@ -3153,9 +3153,9 @@ enum i915_power_well_id {/* * Clock control & power management */ -#define _DPLL_A (dev_priv->info.display_mmio_offset + 0x6014) -#define _DPLL_B (dev_priv->info.display_mmio_offset + 0x6018) -#define _CHV_DPLL_C (dev_priv->info.display_mmio_offset + 0x6030) +#define _DPLL_A (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6014) +#define _DPLL_B (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6018) +#define _CHV_DPLL_C (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6030)#define DPLL (pipe) _MMIO_PIPE3((pipe), _DPLL_A, _DPLL_B, _CHV_DPLL_C)#define VGA0 _MMIO(0x6000)@@ -3252,9 +3252,9 @@ enum i915_power_well_id {#define SDVO_MULTIPLIER_SHIFT_HIRES 4#define SDVO_MULTIPLIER_SHIFT_VGA 0 -#define _DPLL_A_MD (dev_priv->info.display_mmio_offset + 0x601c) -#define _DPLL_B_MD (dev_priv->info.display_mmio_offset + 0x6020) -#define _CHV_DPLL_C_MD (dev_priv->info.display_mmio_offset + 0x603c) +#define _DPLL_A_MD (INTEL_INFO(dev_priv)->display_mmio_offset + 0x601c) +#define _DPLL_B_MD (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6020) +#define _CHV_DPLL_C_MD (INTEL_INFO(dev_priv)->display_mmio_offset + 0x603c)#define DPLL_MD (pipe) _MMIO_PIPE3((pipe), _DPLL_A_MD, _DPLL_B_MD, _CHV_DPLL_C_MD)/* @@ -3326,7 +3326,7 @@ enum i915_power_well_id {#define DSTATE_PLL_D3_OFF (1 << 3)#define DSTATE_GFX_CLOCK_GATING (1 << 1)#define DSTATE_DOT_CLOCK_GATING (1 << 0) -#define DSPCLK_GATE_D _MMIO(dev_priv->info.display_mmio_offset + 0x6200) +#define DSPCLK_GATE_D _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x6200)# define DPUNIT_B_CLOCK_GATE_DISABLE (1 << 30)/* 965 */ # define VSUNIT_CLOCK_GATE_DISABLE (1 << 29)/* 965 */ # define VRHUNIT_CLOCK_GATE_DISABLE (1 << 28)/* 965 */ @@ -3466,7 +3466,7 @@ enum i915_power_well_id {#define _PALETTE_A 0xa000#define _PALETTE_B 0xa800#define _CHV_PALETTE_C 0xc000 -#define PALETTE (pipe, i) _MMIO(dev_priv->info.display_mmio_offset + \ +#define PALETTE (pipe, i) _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + \ _PICK((pipe), _PALETTE_A, \ _PALETTE_B, _CHV_PALETTE_C) + \ (i) * 4)@@ -4295,7 +4295,7 @@ enum {/* Hotplug control (945+ only) */ -#define PORT_HOTPLUG_EN _MMIO(dev_priv->info.display_mmio_offset + 0x61110) +#define PORT_HOTPLUG_EN _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x61110)#define PORTB_HOTPLUG_INT_EN (1 << 29)#define PORTC_HOTPLUG_INT_EN (1 << 28)#define PORTD_HOTPLUG_INT_EN (1 << 27)@@ -4325,7 +4325,7 @@ enum {#define CRT_HOTPLUG_DETECT_VOLTAGE_325MV (0 << 2)#define CRT_HOTPLUG_DETECT_VOLTAGE_475MV (1 << 2) -#define PORT_HOTPLUG_STAT _MMIO(dev_priv->info.display_mmio_offset + 0x61114) +#define PORT_HOTPLUG_STAT _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x61114)/* * HDMI/DP bits are g4x+ * @@ -4407,7 +4407,7 @@ enum {#define PORT_DFT_I9XX _MMIO(0x61150)#define DC_BALANCE_RESET (1 << 25) -#define PORT_DFT2_G4X _MMIO(dev_priv->info.display_mmio_offset + 0x61154) +#define PORT_DFT2_G4X _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x61154)#define DC_BALANCE_RESET_VLV (1 << 31)#define PIPE_SCRAMBLE_RESET_MASK ((1 << 14) | (0x3 << 0))#define PIPE_C_SCRAMBLE_RESET (1 << 14)/* chv */ @@ -4680,7 +4680,7 @@ enum {#define PANEL_POWER_CYCLE_DELAY_SHIFT 0/* Panel fitting */ -#define PFIT_CONTROL _MMIO(dev_priv->info.display_mmio_offset + 0x61230) +#define PFIT_CONTROL _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x61230)#define PFIT_ENABLE (1 << 31)#define PFIT_PIPE_MASK (3 << 29)#define PFIT_PIPE_SHIFT 29@@ -4698,7 +4698,7 @@ enum {#define PFIT_SCALING_PROGRAMMED (1 << 26)#define PFIT_SCALING_PILLAR (2 << 26)#define PFIT_SCALING_LETTER (3 << 26) -#define PFIT_PGM_RATIOS _MMIO(dev_priv->info.display_mmio_offset + 0x61234) +#define PFIT_PGM_RATIOS _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x61234)/* Pre-965 */ #define PFIT_VERT_SCALE_SHIFT 20#define PFIT_VERT_SCALE_MASK 0xfff00000@@ -4710,25 +4710,25 @@ enum {#define PFIT_HORIZ_SCALE_SHIFT_965 0#define PFIT_HORIZ_SCALE_MASK_965 0x00001fff -#define PFIT_AUTO_RATIOS _MMIO(dev_priv->info.display_mmio_offset + 0x61238) +#define PFIT_AUTO_RATIOS _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x61238) -#define _VLV_BLC_PWM_CTL2_A (dev_priv->info.display_mmio_offset + 0x61250) -#define _VLV_BLC_PWM_CTL2_B (dev_priv->info.display_mmio_offset + 0x61350) +#define _VLV_BLC_PWM_CTL2_A (INTEL_INFO(dev_priv)->display_mmio_offset + 0x61250) +#define _VLV_BLC_PWM_CTL2_B (INTEL_INFO(dev_priv)->display_mmio_offset + 0x61350)#define VLV_BLC_PWM_CTL2 (pipe) _MMIO_PIPE(pipe, _VLV_BLC_PWM_CTL2_A, \ _VLV_BLC_PWM_CTL2_B) -#define _VLV_BLC_PWM_CTL_A (dev_priv->info.display_mmio_offset + 0x61254) -#define _VLV_BLC_PWM_CTL_B (dev_priv->info.display_mmio_offset + 0x61354) +#define _VLV_BLC_PWM_CTL_A (INTEL_INFO(dev_priv)->display_mmio_offset + 0x61254) +#define _VLV_BLC_PWM_CTL_B (INTEL_INFO(dev_priv)->display_mmio_offset + 0x61354)#define VLV_BLC_PWM_CTL (pipe) _MMIO_PIPE(pipe, _VLV_BLC_PWM_CTL_A, \ _VLV_BLC_PWM_CTL_B) -#define _VLV_BLC_HIST_CTL_A (dev_priv->info.display_mmio_offset + 0x61260) -#define _VLV_BLC_HIST_CTL_B (dev_priv->info.display_mmio_offset + 0x61360) +#define _VLV_BLC_HIST_CTL_A (INTEL_INFO(dev_priv)->display_mmio_offset + 0x61260) +#define _VLV_BLC_HIST_CTL_B (INTEL_INFO(dev_priv)->display_mmio_offset + 0x61360)#define VLV_BLC_HIST_CTL (pipe) _MMIO_PIPE(pipe, _VLV_BLC_HIST_CTL_A, \ _VLV_BLC_HIST_CTL_B)/* Backlight control */ -#define BLC_PWM_CTL2 _MMIO(dev_priv->info.display_mmio_offset + 0x61250)/* 965+ only */ +#define BLC_PWM_CTL2 _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x61250)/* 965+ only */ #define BLM_PWM_ENABLE (1 << 31)#define BLM_COMBINATION_MODE (1 << 30)/* gen4 only */ #define BLM_PIPE_SELECT (1 << 29)@@ -4751,7 +4751,7 @@ enum {#define BLM_PHASE_IN_COUNT_MASK (0xff << 8)#define BLM_PHASE_IN_INCR_SHIFT (0)#define BLM_PHASE_IN_INCR_MASK (0xff << 0) -#define BLC_PWM_CTL _MMIO(dev_priv->info.display_mmio_offset + 0x61254) +#define BLC_PWM_CTL _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x61254)/* * This is the most significant 15 bits of the number of backlight cycles in a * complete cycle of the modulated backlight control. @@ -4773,7 +4773,7 @@ enum {#define BACKLIGHT_DUTY_CYCLE_MASK_PNV (0xfffe)#define BLM_POLARITY_PNV (1 << 0)/* pnv only */ -#define BLC_HIST_CTL _MMIO(dev_priv->info.display_mmio_offset + 0x61260) +#define BLC_HIST_CTL _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x61260)#define BLM_HISTOGRAM_ENABLE (1 << 31)/* New registers for PCH-split platforms. Safe where new bits show up, the @@ -5397,47 +5397,47 @@ enum {* is 20 bytes in each direction, hence the 5 fixed * data registers */ -#define _DPA_AUX_CH_CTL (dev_priv->info.display_mmio_offset + 0x64010) -#define _DPA_AUX_CH_DATA1 (dev_priv->info.display_mmio_offset + 0x64014) -#define _DPA_AUX_CH_DATA2 (dev_priv->info.display_mmio_offset + 0x64018) -#define _DPA_AUX_CH_DATA3 (dev_priv->info.display_mmio_offset + 0x6401c) -#define _DPA_AUX_CH_DATA4 (dev_priv->info.display_mmio_offset + 0x64020) -#define _DPA_AUX_CH_DATA5 (dev_priv->info.display_mmio_offset + 0x64024) - -#define _DPB_AUX_CH_CTL (dev_priv->info.display_mmio_offset + 0x64110) -#define _DPB_AUX_CH_DATA1 (dev_priv->info.display_mmio_offset + 0x64114) -#define _DPB_AUX_CH_DATA2 (dev_priv->info.display_mmio_offset + 0x64118) -#define _DPB_AUX_CH_DATA3 (dev_priv->info.display_mmio_offset + 0x6411c) -#define _DPB_AUX_CH_DATA4 (dev_priv->info.display_mmio_offset + 0x64120) -#define _DPB_AUX_CH_DATA5 (dev_priv->info.display_mmio_offset + 0x64124) - -#define _DPC_AUX_CH_CTL (dev_priv->info.display_mmio_offset + 0x64210) -#define _DPC_AUX_CH_DATA1 (dev_priv->info.display_mmio_offset + 0x64214) -#define _DPC_AUX_CH_DATA2 (dev_priv->info.display_mmio_offset + 0x64218) -#define _DPC_AUX_CH_DATA3 (dev_priv->info.display_mmio_offset + 0x6421c) -#define _DPC_AUX_CH_DATA4 (dev_priv->info.display_mmio_offset + 0x64220) -#define _DPC_AUX_CH_DATA5 (dev_priv->info.display_mmio_offset + 0x64224) - -#define _DPD_AUX_CH_CTL (dev_priv->info.display_mmio_offset + 0x64310) -#define _DPD_AUX_CH_DATA1 (dev_priv->info.display_mmio_offset + 0x64314) -#define _DPD_AUX_CH_DATA2 (dev_priv->info.display_mmio_offset + 0x64318) -#define _DPD_AUX_CH_DATA3 (dev_priv->info.display_mmio_offset + 0x6431c) -#define _DPD_AUX_CH_DATA4 (dev_priv->info.display_mmio_offset + 0x64320) -#define _DPD_AUX_CH_DATA5 (dev_priv->info.display_mmio_offset + 0x64324) - -#define _DPE_AUX_CH_CTL (dev_priv->info.display_mmio_offset + 0x64410) -#define _DPE_AUX_CH_DATA1 (dev_priv->info.display_mmio_offset + 0x64414) -#define _DPE_AUX_CH_DATA2 (dev_priv->info.display_mmio_offset + 0x64418) -#define _DPE_AUX_CH_DATA3 (dev_priv->info.display_mmio_offset + 0x6441c) -#define _DPE_AUX_CH_DATA4 (dev_priv->info.display_mmio_offset + 0x64420) -#define _DPE_AUX_CH_DATA5 (dev_priv->info.display_mmio_offset + 0x64424) - -#define _DPF_AUX_CH_CTL (dev_priv->info.display_mmio_offset + 0x64510) -#define _DPF_AUX_CH_DATA1 (dev_priv->info.display_mmio_offset + 0x64514) -#define _DPF_AUX_CH_DATA2 (dev_priv->info.display_mmio_offset + 0x64518) -#define _DPF_AUX_CH_DATA3 (dev_priv->info.display_mmio_offset + 0x6451c) -#define _DPF_AUX_CH_DATA4 (dev_priv->info.display_mmio_offset + 0x64520) -#define _DPF_AUX_CH_DATA5 (dev_priv->info.display_mmio_offset + 0x64524) +#define _DPA_AUX_CH_CTL (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64010) +#define _DPA_AUX_CH_DATA1 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64014) +#define _DPA_AUX_CH_DATA2 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64018) +#define _DPA_AUX_CH_DATA3 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6401c) +#define _DPA_AUX_CH_DATA4 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64020) +#define _DPA_AUX_CH_DATA5 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64024) + +#define _DPB_AUX_CH_CTL (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64110) +#define _DPB_AUX_CH_DATA1 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64114) +#define _DPB_AUX_CH_DATA2 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64118) +#define _DPB_AUX_CH_DATA3 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6411c) +#define _DPB_AUX_CH_DATA4 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64120) +#define _DPB_AUX_CH_DATA5 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64124) + +#define _DPC_AUX_CH_CTL (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64210) +#define _DPC_AUX_CH_DATA1 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64214) +#define _DPC_AUX_CH_DATA2 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64218) +#define _DPC_AUX_CH_DATA3 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6421c) +#define _DPC_AUX_CH_DATA4 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64220) +#define _DPC_AUX_CH_DATA5 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64224) + +#define _DPD_AUX_CH_CTL (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64310) +#define _DPD_AUX_CH_DATA1 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64314) +#define _DPD_AUX_CH_DATA2 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64318) +#define _DPD_AUX_CH_DATA3 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6431c) +#define _DPD_AUX_CH_DATA4 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64320) +#define _DPD_AUX_CH_DATA5 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64324) + +#define _DPE_AUX_CH_CTL (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64410) +#define _DPE_AUX_CH_DATA1 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64414) +#define _DPE_AUX_CH_DATA2 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64418) +#define _DPE_AUX_CH_DATA3 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6441c) +#define _DPE_AUX_CH_DATA4 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64420) +#define _DPE_AUX_CH_DATA5 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64424) + +#define _DPF_AUX_CH_CTL (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64510) +#define _DPF_AUX_CH_DATA1 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64514) +#define _DPF_AUX_CH_DATA2 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64518) +#define _DPF_AUX_CH_DATA3 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6451c) +#define _DPF_AUX_CH_DATA4 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64520) +#define _DPF_AUX_CH_DATA5 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64524)#define DP_AUX_CH_CTL (aux_ch) _MMIO_PORT(aux_ch, _DPA_AUX_CH_CTL, _DPB_AUX_CH_CTL)#define DP_AUX_CH_DATA (aux_ch, i) _MMIO(_PORT(aux_ch, _DPA_AUX_CH_DATA1, _DPB_AUX_CH_DATA1) + (i) * 4)/* 5 registers */ @@ -5713,7 +5713,7 @@ enum {#define DPINVGTT_STATUS_MASK 0xff#define DPINVGTT_STATUS_MASK_CHV 0xfff -#define DSPARB _MMIO(dev_priv->info.display_mmio_offset + 0x70030) +#define DSPARB _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x70030)#define DSPARB_CSTART_MASK (0x7f << 7)#define DSPARB_CSTART_SHIFT 7#define DSPARB_BSTART_MASK (0x7f)@@ -5748,7 +5748,7 @@ enum {#define DSPARB_SPRITEF_MASK_VLV (0xff << 8)/* pnv/gen4/g4x/vlv/chv */ -#define DSPFW1 _MMIO(dev_priv->info.display_mmio_offset + 0x70034) +#define DSPFW1 _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x70034)#define DSPFW_SR_SHIFT 23#define DSPFW_SR_MASK (0x1ff << 23)#define DSPFW_CURSORB_SHIFT 16@@ -5759,7 +5759,7 @@ enum {#define DSPFW_PLANEA_SHIFT 0#define DSPFW_PLANEA_MASK (0x7f << 0)#define DSPFW_PLANEA_MASK_VLV (0xff << 0)/* vlv/chv */ -#define DSPFW2 _MMIO(dev_priv->info.display_mmio_offset + 0x70038) +#define DSPFW2 _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x70038)#define DSPFW_FBC_SR_EN (1 << 31)/* g4x */ #define DSPFW_FBC_SR_SHIFT 28#define DSPFW_FBC_SR_MASK (0x7 << 28)/* g4x */ @@ -5775,7 +5775,7 @@ enum {#define DSPFW_SPRITEA_SHIFT 0#define DSPFW_SPRITEA_MASK (0x7f << 0)/* g4x */ #define DSPFW_SPRITEA_MASK_VLV (0xff << 0)/* vlv/chv */ -#define DSPFW3 _MMIO(dev_priv->info.display_mmio_offset + 0x7003c) +#define DSPFW3 _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x7003c)#define DSPFW_HPLL_SR_EN (1 << 31)#define PINEVIEW_SELF_REFRESH_EN (1 << 30)#define DSPFW_CURSOR_SR_SHIFT 24@@ -6191,35 +6191,35 @@ enum {* [10:1f] all * [30:32] all */ -#define SWF0 (i) _MMIO(dev_priv->info.display_mmio_offset + 0x70410 + (i) * 4) -#define SWF1 (i) _MMIO(dev_priv->info.display_mmio_offset + 0x71410 + (i) * 4) -#define SWF3 (i) _MMIO(dev_priv->info.display_mmio_offset + 0x72414 + (i) * 4) +#define SWF0 (i) _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x70410 + (i) * 4) +#define SWF1 (i) _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x71410 + (i) * 4) +#define SWF3 (i) _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x72414 + (i) * 4)#define SWF_ILK (i) _MMIO(0x4F000 + (i) * 4)/* Pipe B */ -#define _PIPEBDSL (dev_priv->info.display_mmio_offset + 0x71000) -#define _PIPEBCONF (dev_priv->info.display_mmio_offset + 0x71008) -#define _PIPEBSTAT (dev_priv->info.display_mmio_offset + 0x71024) +#define _PIPEBDSL (INTEL_INFO(dev_priv)->display_mmio_offset + 0x71000) +#define _PIPEBCONF (INTEL_INFO(dev_priv)->display_mmio_offset + 0x71008) +#define _PIPEBSTAT (INTEL_INFO(dev_priv)->display_mmio_offset + 0x71024)#define _PIPEBFRAMEHIGH 0x71040#define _PIPEBFRAMEPIXEL 0x71044 -#define _PIPEB_FRMCOUNT_G4X (dev_priv->info.display_mmio_offset + 0x71040) -#define _PIPEB_FLIPCOUNT_G4X (dev_priv->info.display_mmio_offset + 0x71044) +#define _PIPEB_FRMCOUNT_G4X (INTEL_INFO(dev_priv)->display_mmio_offset + 0x71040) +#define _PIPEB_FLIPCOUNT_G4X (INTEL_INFO(dev_priv)->display_mmio_offset + 0x71044)/* Display B control */ -#define _DSPBCNTR (dev_priv->info.display_mmio_offset + 0x71180) +#define _DSPBCNTR (INTEL_INFO(dev_priv)->display_mmio_offset + 0x71180)#define DISPPLANE_ALPHA_TRANS_ENABLE (1 << 15)#define DISPPLANE_ALPHA_TRANS_DISABLE 0#define DISPPLANE_SPRITE_ABOVE_DISPLAY 0#define DISPPLANE_SPRITE_ABOVE_OVERLAY (1) -#define _DSPBADDR (dev_priv->info.display_mmio_offset + 0x71184) -#define _DSPBSTRIDE (dev_priv->info.display_mmio_offset + 0x71188) -#define _DSPBPOS (dev_priv->info.display_mmio_offset + 0x7118C) -#define _DSPBSIZE (dev_priv->info.display_mmio_offset + 0x71190) -#define _DSPBSURF (dev_priv->info.display_mmio_offset + 0x7119C) -#define _DSPBTILEOFF (dev_priv->info.display_mmio_offset + 0x711A4) -#define _DSPBOFFSET (dev_priv->info.display_mmio_offset + 0x711A4) -#define _DSPBSURFLIVE (dev_priv->info.display_mmio_offset + 0x711AC) +#define _DSPBADDR (INTEL_INFO(dev_priv)->display_mmio_offset + 0x71184) +#define _DSPBSTRIDE (INTEL_INFO(dev_priv)->display_mmio_offset + 0x71188) +#define _DSPBPOS (INTEL_INFO(dev_priv)->display_mmio_offset + 0x7118C) +#define _DSPBSIZE (INTEL_INFO(dev_priv)->display_mmio_offset + 0x71190) +#define _DSPBSURF (INTEL_INFO(dev_priv)->display_mmio_offset + 0x7119C) +#define _DSPBTILEOFF (INTEL_INFO(dev_priv)->display_mmio_offset + 0x711A4) +#define _DSPBOFFSET (INTEL_INFO(dev_priv)->display_mmio_offset + 0x711A4) +#define _DSPBSURFLIVE (INTEL_INFO(dev_priv)->display_mmio_offset + 0x711AC)/* ICL DSI 0 and 1 */ #define _PIPEDSI0CONF 0x7b008@@ -8773,7 +8773,7 @@ enum {#define GEN9_ENABLE_GPGPU_PREEMPTION (1 << 2)/* Audio */ -#define G4X_AUD_VID_DID _MMIO(dev_priv->info.display_mmio_offset + 0x62020) +#define G4X_AUD_VID_DID _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x62020)#define INTEL_AUDIO_DEVCL 0x808629FB#define INTEL_AUDIO_DEVBLC 0x80862801#define INTEL_AUDIO_DEVCTG 0x80862802drivers/gpu/drm/i915/intel_device_info.c +4
-7@@ -121,19 +121,16 @@ intel_device_info_dump_runtime(const struct intel_runtime_device_info *info,intel_runtime_device_info_dump_flags (info, p); } -void intel_device_info_dump (const struct intel_device_info *info, +void intel_device_info_dump (struct drm_i915_private *dev_priv,struct drm_printer *p) { -struct drm_i915_private *dev_priv = - container_of(info, struct drm_i915_private, info); -drm_printf (p,"pciid=0x%04x rev=0x%02x platform=%s gen=%i\n" ,INTEL_DEVID (dev_priv),INTEL_REVID (dev_priv), -intel_platform_name (info->platform), - info->__gen); +intel_platform_name (INTEL_INFO (dev_priv)->platform), +INTEL_INFO (dev_priv)->__gen); -intel_device_info_dump_flags (info, p); +intel_device_info_dump_flags (INTEL_INFO (dev_priv), p); } void intel_device_info_dump_topology(const struct sseu_dev_info *sseu,drivers/gpu/drm/i915/intel_device_info.h +1
-1@@ -270,7 +270,7 @@ static inline void sseu_set_eus(struct sseu_dev_info *sseu,const char *intel_platform_name (enum intel_platform platform);void intel_device_info_runtime_init (struct drm_i915_private *dev_priv); -void intel_device_info_dump (const struct intel_device_info *info, +void intel_device_info_dump (struct drm_i915_private *dev_priv,struct drm_printer *p);void intel_device_info_dump_flags (const struct intel_device_info *info,struct drm_printer *p);drivers/gpu/drm/i915/intel_uncore.c +1
-1@@ -2256,7 +2256,7 @@ bool intel_has_gpu_reset(struct drm_i915_private *dev_priv)bool intel_has_reset_engine (struct drm_i915_private *dev_priv) { -return (dev_priv->info.has_reset_engine && +return (INTEL_INFO (dev_priv)->has_reset_engine && i915_modparams.reset >=2 ); }
Signature · 5 lines
Jani Nikula, Intel Open Source Graphics Center _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 4/7] drm/i915: Remove mkwrite_device_info
Quoted 11 lines · Jani Nikula
Quoted 9 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
Now that we are down to one caller, which does not even modify copied device info, we can remove the
mkwrite_device_infohelper and convert the device info pointer itself to be a pointer to static table instead of a copy.Only unfortnate thing is that we need to convert all callsites which were referencing the device info directly to using the
INTEL_INFOhelper.
Quoted 8 lines
I'm not sure if that's all that bad. When I was toying around with
mkwrite_device_inforemoval, I actually started off with changing all device info references toINTEL_INFO. It's a big patch, but it nicely centralizes many of the other changes instead of splattering all over the place.I'd actually like to see
RUNTIME_INFOor similar macro as well, just to be able to change the way it's handled later on.
Oh, and it would actually be possible to start off with a RUNTIME_INFO macro that's just INTEL_INFO, and change all use sites of runtime info first. Everything still pointing at the same place. Could then proceed with a runtime copy, and then with actual splitting off of the structs.
Just food for thought, and definitely not a request to restructure the series. But it might simplify some of the steps.
BR,
Jani.
Quoted 718 lines
BR,
Jani.Quoted 713 lines
Signed-off-by Tvrtko Ursulin <[email protected]>Cc Chris Wilson <[email protected]>Cc Jani Nikula <[email protected]>--- drivers/gpu/drm/i915/i915_drv.c | 9 +- drivers/gpu/drm/i915/i915_drv.h | 107 ++++++------- drivers/gpu/drm/i915/i915_reg.h | 190 +++++++++++------------ drivers/gpu/drm/i915/intel_device_info.c | 11 +- drivers/gpu/drm/i915/intel_device_info.h | 2 +- drivers/gpu/drm/i915/intel_uncore.c | 2 +- 6 files changed, 151 insertions(+), 170 deletions(-)drivers/gpu/drm/i915/i915_drv.c +3
-6@@ -1620,7 +1620,7 @@ static void i915_welcome_messages(struct drm_i915_private *dev_priv)if (drm_debug &DRM_UT_DRIVER ) {struct drm_printer p =drm_debug_printer ("i915 device info:" ); -intel_device_info_dump (&dev_priv->info, &p); +intel_device_info_dump (dev_priv, &p);intel_device_info_dump_runtime (&dev_priv->runtime_info, &p); }@@ -1638,7 +1638,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_runtime_device_info *runtime_info; -struct intel_device_info *device_info; +const struct intel_device_info *device_info;struct drm_i915_private *i915;int err;@@ -1654,12 +1654,9 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent) i915->drm.pdev = pdev; i915->drm.dev_private = i915; + i915->info = device_info = match_info;pci_set_drvdata (pdev, &i915->drm); -/* Setup the write-once "constant" device info */ - device_info =mkwrite_device_info (i915); -memcpy (device_info, match_info,sizeof (*device_info)); -BUILD_BUG_ON (INTEL_MAX_PLATFORMS >BITS_PER_TYPE (device_info->platform_mask));BUG_ON (device_info->__gen >BITS_PER_TYPE (device_info->gen_mask));drivers/gpu/drm/i915/i915_drv.h +47
-60@@ -1588,7 +1588,7 @@ struct drm_i915_private {struct kmem_cache *dependencies;struct kmem_cache *priorities; -const struct intel_device_info info; +const struct intel_device_info *info;struct intel_runtime_device_info runtime_info;struct intel_driver_caps caps;@@ -2349,13 +2349,7 @@ static inline unsigned int i915_sg_segment_size(void)return size; } -static inline const struct intel_device_info * -intel_info (const struct drm_i915_private *dev_priv) -{ -return &dev_priv->info; -} - -#define INTEL_INFO (dev_priv) intel_info((dev_priv)) +#define INTEL_INFO (dev_priv) ((dev_priv)->info)#define DRIVER_CAPS (dev_priv) (&(dev_priv)->caps)#define INTEL_GEN (dev_priv) ((dev_priv)->runtime_info.gen)@@ -2371,7 +2365,7 @@ intel_info(const struct drm_i915_private *dev_priv)/* Returns true if Gen is in inclusive range [Start, End] */ #define IS_GEN (dev_priv, s, e) \ - (!!((dev_priv)->info.gen_mask & INTEL_GEN_MASK((s), (e)))) + (!!(INTEL_INFO(dev_priv)->gen_mask & INTEL_GEN_MASK((s), (e))))/* * Return true if revision is in range [since,until] inclusive. @@ -2381,7 +2375,7 @@ intel_info(const struct drm_i915_private *dev_priv)#define IS_REVID (p, since, until) \ (INTEL_REVID(p) >= (since) && INTEL_REVID(p) <= (until)) -#define IS_PLATFORM (dev_priv, p) ((dev_priv)->info.platform_mask & BIT(p)) +#define IS_PLATFORM (dev_priv, p) (INTEL_INFO(dev_priv)->platform_mask & BIT(p))#define IS_I830 (dev_priv) IS_PLATFORM(dev_priv, INTEL_I830)#define IS_I845G (dev_priv) IS_PLATFORM(dev_priv, INTEL_I845G)@@ -2403,7 +2397,7 @@ intel_info(const struct drm_i915_private *dev_priv)#define IS_IRONLAKE_M (dev_priv) (INTEL_DEVID(dev_priv) == 0x0046)#define IS_IVYBRIDGE (dev_priv) IS_PLATFORM(dev_priv, INTEL_IVYBRIDGE)#define IS_IVB_GT1 (dev_priv) (IS_IVYBRIDGE(dev_priv) && \ - (dev_priv)->info.gt == 1) + INTEL_INFO(dev_priv)->gt == 1)#define IS_VALLEYVIEW (dev_priv) IS_PLATFORM(dev_priv, INTEL_VALLEYVIEW)#define IS_CHERRYVIEW (dev_priv) IS_PLATFORM(dev_priv, INTEL_CHERRYVIEW)#define IS_HASWELL (dev_priv) IS_PLATFORM(dev_priv, INTEL_HASWELL)@@ -2415,7 +2409,7 @@ intel_info(const struct drm_i915_private *dev_priv)#define IS_COFFEELAKE (dev_priv) IS_PLATFORM(dev_priv, INTEL_COFFEELAKE)#define IS_CANNONLAKE (dev_priv) IS_PLATFORM(dev_priv, INTEL_CANNONLAKE)#define IS_ICELAKE (dev_priv) IS_PLATFORM(dev_priv, INTEL_ICELAKE) -#define IS_MOBILE (dev_priv) ((dev_priv)->info.is_mobile) +#define IS_MOBILE (dev_priv) (INTEL_INFO(dev_priv)->is_mobile)#define IS_HSW_EARLY_SDV (dev_priv) (IS_HASWELL(dev_priv) && \ (INTEL_DEVID(dev_priv) & 0xFF00) == 0x0C00)#define IS_BDW_ULT (dev_priv) (IS_BROADWELL(dev_priv) && \@@ -2426,11 +2420,11 @@ intel_info(const struct drm_i915_private *dev_priv)#define IS_BDW_ULX (dev_priv) (IS_BROADWELL(dev_priv) && \ (INTEL_DEVID(dev_priv) & 0xf) == 0xe)#define IS_BDW_GT3 (dev_priv) (IS_BROADWELL(dev_priv) && \ - (dev_priv)->info.gt == 3) + INTEL_INFO(dev_priv)->gt == 3)#define IS_HSW_ULT (dev_priv) (IS_HASWELL(dev_priv) && \ (INTEL_DEVID(dev_priv) & 0xFF00) == 0x0A00)#define IS_HSW_GT3 (dev_priv) (IS_HASWELL(dev_priv) && \ - (dev_priv)->info.gt == 3) + INTEL_INFO(dev_priv)->gt == 3)/* ULX machines are also considered ULT. */ #define IS_HSW_ULX (dev_priv) (INTEL_DEVID(dev_priv) == 0x0A0E || \ INTEL_DEVID(dev_priv) == 0x0A1E)@@ -2453,21 +2447,21 @@ intel_info(const struct drm_i915_private *dev_priv)#define IS_AML_ULX (dev_priv) (INTEL_DEVID(dev_priv) == 0x591C || \ INTEL_DEVID(dev_priv) == 0x87C0)#define IS_SKL_GT2 (dev_priv) (IS_SKYLAKE(dev_priv) && \ - (dev_priv)->info.gt == 2) + INTEL_INFO(dev_priv)->gt == 2)#define IS_SKL_GT3 (dev_priv) (IS_SKYLAKE(dev_priv) && \ - (dev_priv)->info.gt == 3) + INTEL_INFO(dev_priv)->gt == 3)#define IS_SKL_GT4 (dev_priv) (IS_SKYLAKE(dev_priv) && \ - (dev_priv)->info.gt == 4) + INTEL_INFO(dev_priv)->gt == 4)#define IS_KBL_GT2 (dev_priv) (IS_KABYLAKE(dev_priv) && \ - (dev_priv)->info.gt == 2) + INTEL_INFO(dev_priv)->gt == 2)#define IS_KBL_GT3 (dev_priv) (IS_KABYLAKE(dev_priv) && \ - (dev_priv)->info.gt == 3) + INTEL_INFO(dev_priv)->gt == 3)#define IS_CFL_ULT (dev_priv) (IS_COFFEELAKE(dev_priv) && \ (INTEL_DEVID(dev_priv) & 0x00F0) == 0x00A0)#define IS_CFL_GT2 (dev_priv) (IS_COFFEELAKE(dev_priv) && \ - (dev_priv)->info.gt == 2) + INTEL_INFO(dev_priv)->gt == 2)#define IS_CFL_GT3 (dev_priv) (IS_COFFEELAKE(dev_priv) && \ - (dev_priv)->info.gt == 3) + INTEL_INFO(dev_priv)->gt == 3)#define IS_CNL_WITH_PORT_F (dev_priv) (IS_CANNONLAKE(dev_priv) && \ (INTEL_DEVID(dev_priv) & 0x0004) == 0x0004)@@ -2530,16 +2524,16 @@ intel_info(const struct drm_i915_private *dev_priv)* have their own (e.g. HAS_PCH_SPLIT for ILK+ display, IS_foo for particular * chips, etc.). */ -#define IS_GEN2 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(1))) -#define IS_GEN3 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(2))) -#define IS_GEN4 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(3))) -#define IS_GEN5 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(4))) -#define IS_GEN6 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(5))) -#define IS_GEN7 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(6))) -#define IS_GEN8 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(7))) -#define IS_GEN9 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(8))) -#define IS_GEN10 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(9))) -#define IS_GEN11 (dev_priv) (!!((dev_priv)->info.gen_mask & BIT(10))) +#define IS_GEN2 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(1))) +#define IS_GEN3 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(2))) +#define IS_GEN4 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(3))) +#define IS_GEN5 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(4))) +#define IS_GEN6 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(5))) +#define IS_GEN7 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(6))) +#define IS_GEN8 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(7))) +#define IS_GEN9 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(8))) +#define IS_GEN10 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(9))) +#define IS_GEN11 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(10)))#define IS_LP (dev_priv) (INTEL_INFO(dev_priv)->is_lp)#define IS_GEN9_LP (dev_priv) (IS_GEN9(dev_priv) && IS_LP(dev_priv))@@ -2566,20 +2560,20 @@ intel_info(const struct drm_i915_private *dev_priv)#define HAS_LEGACY_SEMAPHORES (dev_priv) IS_GEN7(dev_priv) -#define HAS_LLC (dev_priv) ((dev_priv)->info.has_llc) -#define HAS_SNOOP (dev_priv) ((dev_priv)->info.has_snoop) +#define HAS_LLC (dev_priv) (INTEL_INFO(dev_priv)->has_llc) +#define HAS_SNOOP (dev_priv) (INTEL_INFO(dev_priv)->has_snoop)#define HAS_EDRAM (dev_priv) (!!((dev_priv)->edram_cap & EDRAM_ENABLED))#define HAS_WT (dev_priv) ((IS_HASWELL(dev_priv) || \ IS_BROADWELL(dev_priv)) && HAS_EDRAM(dev_priv)) -#define HWS_NEEDS_PHYSICAL (dev_priv) ((dev_priv)->info.hws_needs_physical) +#define HWS_NEEDS_PHYSICAL (dev_priv) (INTEL_INFO(dev_priv)->hws_needs_physical)#define HAS_LOGICAL_RING_CONTEXTS (dev_priv) \ - ((dev_priv)->info.has_logical_ring_contexts) + (INTEL_INFO(dev_priv)->has_logical_ring_contexts)#define HAS_LOGICAL_RING_ELSQ (dev_priv) \ - ((dev_priv)->info.has_logical_ring_elsq) + (INTEL_INFO(dev_priv)->has_logical_ring_elsq)#define HAS_LOGICAL_RING_PREEMPTION (dev_priv) \ - ((dev_priv)->info.has_logical_ring_preemption) + (INTEL_INFO(dev_priv)->has_logical_ring_preemption)#define HAS_EXECLISTS (dev_priv) HAS_LOGICAL_RING_CONTEXTS(dev_priv)@@ -2596,9 +2590,9 @@ intel_info(const struct drm_i915_private *dev_priv) ((sizes) & ~(dev_priv)->runtime_info.page_sizes) ==0 ; \ }) -#define HAS_OVERLAY (dev_priv) ((dev_priv)->info.has_overlay) +#define HAS_OVERLAY (dev_priv) (INTEL_INFO(dev_priv)->has_overlay)#define OVERLAY_NEEDS_PHYSICAL (dev_priv) \ - ((dev_priv)->info.overlay_needs_physical) + (INTEL_INFO(dev_priv)->overlay_needs_physical)/* Early gen2 have a totally busted CS tlb and require pinned batches. */ #define HAS_BROKEN_CS_TLB (dev_priv) (IS_I830(dev_priv) || IS_I845G(dev_priv))@@ -2619,8 +2613,8 @@ intel_info(const struct drm_i915_private *dev_priv)#define HAS_128_BYTE_Y_TILING (dev_priv) (!IS_GEN2(dev_priv) && \ !(IS_I915G(dev_priv) || \ IS_I915GM(dev_priv))) -#define SUPPORTS_TV (dev_priv) ((dev_priv)->info.supports_tv) -#define I915_HAS_HOTPLUG (dev_priv) ((dev_priv)->info.has_hotplug) +#define SUPPORTS_TV (dev_priv) (INTEL_INFO(dev_priv)->supports_tv) +#define I915_HAS_HOTPLUG (dev_priv) (INTEL_INFO(dev_priv)->has_hotplug)#define HAS_FW_BLC (dev_priv) (INTEL_GEN(dev_priv) > 2)#define HAS_FBC (dev_priv) ((dev_priv)->runtime_info.has_fbc)@@ -2628,30 +2622,30 @@ intel_info(const struct drm_i915_private *dev_priv)#define HAS_IPS (dev_priv) (IS_HSW_ULT(dev_priv) || IS_BROADWELL(dev_priv)) -#define HAS_DP_MST (dev_priv) ((dev_priv)->info.has_dp_mst) +#define HAS_DP_MST (dev_priv) (INTEL_INFO(dev_priv)->has_dp_mst) -#define HAS_DDI (dev_priv) ((dev_priv)->info.has_ddi) -#define HAS_FPGA_DBG_UNCLAIMED (dev_priv) ((dev_priv)->info.has_fpga_dbg) -#define HAS_PSR (dev_priv) ((dev_priv)->info.has_psr) +#define HAS_DDI (dev_priv) (INTEL_INFO(dev_priv)->has_ddi) +#define HAS_FPGA_DBG_UNCLAIMED (dev_priv) (INTEL_INFO(dev_priv)->has_fpga_dbg) +#define HAS_PSR (dev_priv) (INTEL_INFO(dev_priv)->has_psr)#define HAS_RC6 (dev_priv) ((dev_priv)->runtime_info.has_rc6)#define HAS_RC6p (dev_priv) ((dev_priv)->runtime_info.has_rc6p)#define HAS_RC6pp (dev_priv) (false)/* HW was never validated */ -#define HAS_CSR (dev_priv) ((dev_priv)->info.has_csr) +#define HAS_CSR (dev_priv) (INTEL_INFO(dev_priv)->has_csr) -#define HAS_RUNTIME_PM (dev_priv) ((dev_priv)->info.has_runtime_pm) -#define HAS_64BIT_RELOC (dev_priv) ((dev_priv)->info.has_64bit_reloc) +#define HAS_RUNTIME_PM (dev_priv) (INTEL_INFO(dev_priv)->has_runtime_pm) +#define HAS_64BIT_RELOC (dev_priv) (INTEL_INFO(dev_priv)->has_64bit_reloc) -#define HAS_IPC (dev_priv) ((dev_priv)->info.has_ipc) +#define HAS_IPC (dev_priv) (INTEL_INFO(dev_priv)->has_ipc)/* * For now, anything with a GuC requires uCode loading, and then supports * command submission once loaded. But these are logically independent * properties, so we have separate macros to test them. */ -#define HAS_GUC (dev_priv) ((dev_priv)->info.has_guc) -#define HAS_GUC_CT (dev_priv) ((dev_priv)->info.has_guc_ct) +#define HAS_GUC (dev_priv) (INTEL_INFO(dev_priv)->has_guc) +#define HAS_GUC_CT (dev_priv) (INTEL_INFO(dev_priv)->has_guc_ct)#define HAS_GUC_UCODE (dev_priv) (HAS_GUC(dev_priv))#define HAS_GUC_SCHED (dev_priv) (HAS_GUC(dev_priv))@@ -2704,12 +2698,12 @@ intel_info(const struct drm_i915_private *dev_priv)#define HAS_PCH_NOP (dev_priv) (INTEL_PCH_TYPE(dev_priv) == PCH_NOP)#define HAS_PCH_SPLIT (dev_priv) (INTEL_PCH_TYPE(dev_priv) != PCH_NONE) -#define HAS_GMCH_DISPLAY (dev_priv) ((dev_priv)->info.has_gmch_display) +#define HAS_GMCH_DISPLAY (dev_priv) (INTEL_INFO(dev_priv)->has_gmch_display)#define HAS_LSPCON (dev_priv) (INTEL_GEN(dev_priv) >= 9)/* DPF == dynamic parity feature */ -#define HAS_L3_DPF (dev_priv) ((dev_priv)->info.has_l3_dpf) +#define HAS_L3_DPF (dev_priv) (INTEL_INFO(dev_priv)->has_l3_dpf)#define NUM_L3_SLICES (dev_priv) (IS_HSW_GT3(dev_priv) ? \ 2 : HAS_L3_DPF(dev_priv))@@ -3465,13 +3459,6 @@ static inline void intel_register_dsm_handler(void) { return; }static inline void intel_unregister_dsm_handler (void ) {return ; }#endif /* CONFIG_ACPI */ -/* intel_device_info.c */ -static inline struct intel_device_info * -mkwrite_device_info (struct drm_i915_private *dev_priv) -{ -return (struct intel_device_info *)&dev_priv->info; -} -/* modesetting */ extern void intel_modeset_init_hw (struct drm_device *dev);extern int intel_modeset_init (struct drm_device *dev);drivers/gpu/drm/i915/i915_reg.h +95
-95@@ -179,15 +179,15 @@ static inline bool i915_mmio_reg_valid(i915_reg_t reg)* Device info offset array based helpers for groups of registers with unevenly * spaced base offsets. */ -#define _MMIO_PIPE2 (pipe, reg) _MMIO(dev_priv->info.pipe_offsets[pipe] - \ - dev_priv->info.pipe_offsets[PIPE_A] + (reg) + \ - dev_priv->info.display_mmio_offset) -#define _MMIO_TRANS2 (pipe, reg) _MMIO(dev_priv->info.trans_offsets[(pipe)] - \ - dev_priv->info.trans_offsets[TRANSCODER_A] + (reg) + \ - dev_priv->info.display_mmio_offset) -#define _CURSOR2 (pipe, reg) _MMIO(dev_priv->info.cursor_offsets[(pipe)] - \ - dev_priv->info.cursor_offsets[PIPE_A] + (reg) + \ - dev_priv->info.display_mmio_offset) +#define _MMIO_PIPE2 (pipe, reg) _MMIO(INTEL_INFO(dev_priv)->pipe_offsets[pipe] - \ + INTEL_INFO(dev_priv)->pipe_offsets[PIPE_A] + (reg) + \ + INTEL_INFO(dev_priv)->display_mmio_offset) +#define _MMIO_TRANS2 (pipe, reg) _MMIO(INTEL_INFO(dev_priv)->trans_offsets[(pipe)] - \ + INTEL_INFO(dev_priv)->trans_offsets[TRANSCODER_A] + (reg) + \ + INTEL_INFO(dev_priv)->display_mmio_offset) +#define _CURSOR2 (pipe, reg) _MMIO(INTEL_INFO(dev_priv)->cursor_offsets[(pipe)] - \ + INTEL_INFO(dev_priv)->cursor_offsets[PIPE_A] + (reg) + \ + INTEL_INFO(dev_priv)->display_mmio_offset)#define __MASKED_FIELD (mask, value) ((mask) << 16 | (value))#define _MASKED_FIELD (mask, value) ({ \@@ -3153,9 +3153,9 @@ enum i915_power_well_id {/* * Clock control & power management */ -#define _DPLL_A (dev_priv->info.display_mmio_offset + 0x6014) -#define _DPLL_B (dev_priv->info.display_mmio_offset + 0x6018) -#define _CHV_DPLL_C (dev_priv->info.display_mmio_offset + 0x6030) +#define _DPLL_A (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6014) +#define _DPLL_B (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6018) +#define _CHV_DPLL_C (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6030)#define DPLL (pipe) _MMIO_PIPE3((pipe), _DPLL_A, _DPLL_B, _CHV_DPLL_C)#define VGA0 _MMIO(0x6000)@@ -3252,9 +3252,9 @@ enum i915_power_well_id {#define SDVO_MULTIPLIER_SHIFT_HIRES 4#define SDVO_MULTIPLIER_SHIFT_VGA 0 -#define _DPLL_A_MD (dev_priv->info.display_mmio_offset + 0x601c) -#define _DPLL_B_MD (dev_priv->info.display_mmio_offset + 0x6020) -#define _CHV_DPLL_C_MD (dev_priv->info.display_mmio_offset + 0x603c) +#define _DPLL_A_MD (INTEL_INFO(dev_priv)->display_mmio_offset + 0x601c) +#define _DPLL_B_MD (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6020) +#define _CHV_DPLL_C_MD (INTEL_INFO(dev_priv)->display_mmio_offset + 0x603c)#define DPLL_MD (pipe) _MMIO_PIPE3((pipe), _DPLL_A_MD, _DPLL_B_MD, _CHV_DPLL_C_MD)/* @@ -3326,7 +3326,7 @@ enum i915_power_well_id {#define DSTATE_PLL_D3_OFF (1 << 3)#define DSTATE_GFX_CLOCK_GATING (1 << 1)#define DSTATE_DOT_CLOCK_GATING (1 << 0) -#define DSPCLK_GATE_D _MMIO(dev_priv->info.display_mmio_offset + 0x6200) +#define DSPCLK_GATE_D _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x6200)# define DPUNIT_B_CLOCK_GATE_DISABLE (1 << 30)/* 965 */ # define VSUNIT_CLOCK_GATE_DISABLE (1 << 29)/* 965 */ # define VRHUNIT_CLOCK_GATE_DISABLE (1 << 28)/* 965 */ @@ -3466,7 +3466,7 @@ enum i915_power_well_id {#define _PALETTE_A 0xa000#define _PALETTE_B 0xa800#define _CHV_PALETTE_C 0xc000 -#define PALETTE (pipe, i) _MMIO(dev_priv->info.display_mmio_offset + \ +#define PALETTE (pipe, i) _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + \ _PICK((pipe), _PALETTE_A, \ _PALETTE_B, _CHV_PALETTE_C) + \ (i) * 4)@@ -4295,7 +4295,7 @@ enum {/* Hotplug control (945+ only) */ -#define PORT_HOTPLUG_EN _MMIO(dev_priv->info.display_mmio_offset + 0x61110) +#define PORT_HOTPLUG_EN _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x61110)#define PORTB_HOTPLUG_INT_EN (1 << 29)#define PORTC_HOTPLUG_INT_EN (1 << 28)#define PORTD_HOTPLUG_INT_EN (1 << 27)@@ -4325,7 +4325,7 @@ enum {#define CRT_HOTPLUG_DETECT_VOLTAGE_325MV (0 << 2)#define CRT_HOTPLUG_DETECT_VOLTAGE_475MV (1 << 2) -#define PORT_HOTPLUG_STAT _MMIO(dev_priv->info.display_mmio_offset + 0x61114) +#define PORT_HOTPLUG_STAT _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x61114)/* * HDMI/DP bits are g4x+ * @@ -4407,7 +4407,7 @@ enum {#define PORT_DFT_I9XX _MMIO(0x61150)#define DC_BALANCE_RESET (1 << 25) -#define PORT_DFT2_G4X _MMIO(dev_priv->info.display_mmio_offset + 0x61154) +#define PORT_DFT2_G4X _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x61154)#define DC_BALANCE_RESET_VLV (1 << 31)#define PIPE_SCRAMBLE_RESET_MASK ((1 << 14) | (0x3 << 0))#define PIPE_C_SCRAMBLE_RESET (1 << 14)/* chv */ @@ -4680,7 +4680,7 @@ enum {#define PANEL_POWER_CYCLE_DELAY_SHIFT 0/* Panel fitting */ -#define PFIT_CONTROL _MMIO(dev_priv->info.display_mmio_offset + 0x61230) +#define PFIT_CONTROL _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x61230)#define PFIT_ENABLE (1 << 31)#define PFIT_PIPE_MASK (3 << 29)#define PFIT_PIPE_SHIFT 29@@ -4698,7 +4698,7 @@ enum {#define PFIT_SCALING_PROGRAMMED (1 << 26)#define PFIT_SCALING_PILLAR (2 << 26)#define PFIT_SCALING_LETTER (3 << 26) -#define PFIT_PGM_RATIOS _MMIO(dev_priv->info.display_mmio_offset + 0x61234) +#define PFIT_PGM_RATIOS _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x61234)/* Pre-965 */ #define PFIT_VERT_SCALE_SHIFT 20#define PFIT_VERT_SCALE_MASK 0xfff00000@@ -4710,25 +4710,25 @@ enum {#define PFIT_HORIZ_SCALE_SHIFT_965 0#define PFIT_HORIZ_SCALE_MASK_965 0x00001fff -#define PFIT_AUTO_RATIOS _MMIO(dev_priv->info.display_mmio_offset + 0x61238) +#define PFIT_AUTO_RATIOS _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x61238) -#define _VLV_BLC_PWM_CTL2_A (dev_priv->info.display_mmio_offset + 0x61250) -#define _VLV_BLC_PWM_CTL2_B (dev_priv->info.display_mmio_offset + 0x61350) +#define _VLV_BLC_PWM_CTL2_A (INTEL_INFO(dev_priv)->display_mmio_offset + 0x61250) +#define _VLV_BLC_PWM_CTL2_B (INTEL_INFO(dev_priv)->display_mmio_offset + 0x61350)#define VLV_BLC_PWM_CTL2 (pipe) _MMIO_PIPE(pipe, _VLV_BLC_PWM_CTL2_A, \ _VLV_BLC_PWM_CTL2_B) -#define _VLV_BLC_PWM_CTL_A (dev_priv->info.display_mmio_offset + 0x61254) -#define _VLV_BLC_PWM_CTL_B (dev_priv->info.display_mmio_offset + 0x61354) +#define _VLV_BLC_PWM_CTL_A (INTEL_INFO(dev_priv)->display_mmio_offset + 0x61254) +#define _VLV_BLC_PWM_CTL_B (INTEL_INFO(dev_priv)->display_mmio_offset + 0x61354)#define VLV_BLC_PWM_CTL (pipe) _MMIO_PIPE(pipe, _VLV_BLC_PWM_CTL_A, \ _VLV_BLC_PWM_CTL_B) -#define _VLV_BLC_HIST_CTL_A (dev_priv->info.display_mmio_offset + 0x61260) -#define _VLV_BLC_HIST_CTL_B (dev_priv->info.display_mmio_offset + 0x61360) +#define _VLV_BLC_HIST_CTL_A (INTEL_INFO(dev_priv)->display_mmio_offset + 0x61260) +#define _VLV_BLC_HIST_CTL_B (INTEL_INFO(dev_priv)->display_mmio_offset + 0x61360)#define VLV_BLC_HIST_CTL (pipe) _MMIO_PIPE(pipe, _VLV_BLC_HIST_CTL_A, \ _VLV_BLC_HIST_CTL_B)/* Backlight control */ -#define BLC_PWM_CTL2 _MMIO(dev_priv->info.display_mmio_offset + 0x61250)/* 965+ only */ +#define BLC_PWM_CTL2 _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x61250)/* 965+ only */ #define BLM_PWM_ENABLE (1 << 31)#define BLM_COMBINATION_MODE (1 << 30)/* gen4 only */ #define BLM_PIPE_SELECT (1 << 29)@@ -4751,7 +4751,7 @@ enum {#define BLM_PHASE_IN_COUNT_MASK (0xff << 8)#define BLM_PHASE_IN_INCR_SHIFT (0)#define BLM_PHASE_IN_INCR_MASK (0xff << 0) -#define BLC_PWM_CTL _MMIO(dev_priv->info.display_mmio_offset + 0x61254) +#define BLC_PWM_CTL _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x61254)/* * This is the most significant 15 bits of the number of backlight cycles in a * complete cycle of the modulated backlight control. @@ -4773,7 +4773,7 @@ enum {#define BACKLIGHT_DUTY_CYCLE_MASK_PNV (0xfffe)#define BLM_POLARITY_PNV (1 << 0)/* pnv only */ -#define BLC_HIST_CTL _MMIO(dev_priv->info.display_mmio_offset + 0x61260) +#define BLC_HIST_CTL _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x61260)#define BLM_HISTOGRAM_ENABLE (1 << 31)/* New registers for PCH-split platforms. Safe where new bits show up, the @@ -5397,47 +5397,47 @@ enum {* is 20 bytes in each direction, hence the 5 fixed * data registers */ -#define _DPA_AUX_CH_CTL (dev_priv->info.display_mmio_offset + 0x64010) -#define _DPA_AUX_CH_DATA1 (dev_priv->info.display_mmio_offset + 0x64014) -#define _DPA_AUX_CH_DATA2 (dev_priv->info.display_mmio_offset + 0x64018) -#define _DPA_AUX_CH_DATA3 (dev_priv->info.display_mmio_offset + 0x6401c) -#define _DPA_AUX_CH_DATA4 (dev_priv->info.display_mmio_offset + 0x64020) -#define _DPA_AUX_CH_DATA5 (dev_priv->info.display_mmio_offset + 0x64024) - -#define _DPB_AUX_CH_CTL (dev_priv->info.display_mmio_offset + 0x64110) -#define _DPB_AUX_CH_DATA1 (dev_priv->info.display_mmio_offset + 0x64114) -#define _DPB_AUX_CH_DATA2 (dev_priv->info.display_mmio_offset + 0x64118) -#define _DPB_AUX_CH_DATA3 (dev_priv->info.display_mmio_offset + 0x6411c) -#define _DPB_AUX_CH_DATA4 (dev_priv->info.display_mmio_offset + 0x64120) -#define _DPB_AUX_CH_DATA5 (dev_priv->info.display_mmio_offset + 0x64124) - -#define _DPC_AUX_CH_CTL (dev_priv->info.display_mmio_offset + 0x64210) -#define _DPC_AUX_CH_DATA1 (dev_priv->info.display_mmio_offset + 0x64214) -#define _DPC_AUX_CH_DATA2 (dev_priv->info.display_mmio_offset + 0x64218) -#define _DPC_AUX_CH_DATA3 (dev_priv->info.display_mmio_offset + 0x6421c) -#define _DPC_AUX_CH_DATA4 (dev_priv->info.display_mmio_offset + 0x64220) -#define _DPC_AUX_CH_DATA5 (dev_priv->info.display_mmio_offset + 0x64224) - -#define _DPD_AUX_CH_CTL (dev_priv->info.display_mmio_offset + 0x64310) -#define _DPD_AUX_CH_DATA1 (dev_priv->info.display_mmio_offset + 0x64314) -#define _DPD_AUX_CH_DATA2 (dev_priv->info.display_mmio_offset + 0x64318) -#define _DPD_AUX_CH_DATA3 (dev_priv->info.display_mmio_offset + 0x6431c) -#define _DPD_AUX_CH_DATA4 (dev_priv->info.display_mmio_offset + 0x64320) -#define _DPD_AUX_CH_DATA5 (dev_priv->info.display_mmio_offset + 0x64324) - -#define _DPE_AUX_CH_CTL (dev_priv->info.display_mmio_offset + 0x64410) -#define _DPE_AUX_CH_DATA1 (dev_priv->info.display_mmio_offset + 0x64414) -#define _DPE_AUX_CH_DATA2 (dev_priv->info.display_mmio_offset + 0x64418) -#define _DPE_AUX_CH_DATA3 (dev_priv->info.display_mmio_offset + 0x6441c) -#define _DPE_AUX_CH_DATA4 (dev_priv->info.display_mmio_offset + 0x64420) -#define _DPE_AUX_CH_DATA5 (dev_priv->info.display_mmio_offset + 0x64424) - -#define _DPF_AUX_CH_CTL (dev_priv->info.display_mmio_offset + 0x64510) -#define _DPF_AUX_CH_DATA1 (dev_priv->info.display_mmio_offset + 0x64514) -#define _DPF_AUX_CH_DATA2 (dev_priv->info.display_mmio_offset + 0x64518) -#define _DPF_AUX_CH_DATA3 (dev_priv->info.display_mmio_offset + 0x6451c) -#define _DPF_AUX_CH_DATA4 (dev_priv->info.display_mmio_offset + 0x64520) -#define _DPF_AUX_CH_DATA5 (dev_priv->info.display_mmio_offset + 0x64524) +#define _DPA_AUX_CH_CTL (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64010) +#define _DPA_AUX_CH_DATA1 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64014) +#define _DPA_AUX_CH_DATA2 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64018) +#define _DPA_AUX_CH_DATA3 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6401c) +#define _DPA_AUX_CH_DATA4 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64020) +#define _DPA_AUX_CH_DATA5 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64024) + +#define _DPB_AUX_CH_CTL (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64110) +#define _DPB_AUX_CH_DATA1 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64114) +#define _DPB_AUX_CH_DATA2 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64118) +#define _DPB_AUX_CH_DATA3 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6411c) +#define _DPB_AUX_CH_DATA4 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64120) +#define _DPB_AUX_CH_DATA5 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64124) + +#define _DPC_AUX_CH_CTL (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64210) +#define _DPC_AUX_CH_DATA1 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64214) +#define _DPC_AUX_CH_DATA2 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64218) +#define _DPC_AUX_CH_DATA3 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6421c) +#define _DPC_AUX_CH_DATA4 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64220) +#define _DPC_AUX_CH_DATA5 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64224) + +#define _DPD_AUX_CH_CTL (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64310) +#define _DPD_AUX_CH_DATA1 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64314) +#define _DPD_AUX_CH_DATA2 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64318) +#define _DPD_AUX_CH_DATA3 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6431c) +#define _DPD_AUX_CH_DATA4 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64320) +#define _DPD_AUX_CH_DATA5 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64324) + +#define _DPE_AUX_CH_CTL (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64410) +#define _DPE_AUX_CH_DATA1 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64414) +#define _DPE_AUX_CH_DATA2 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64418) +#define _DPE_AUX_CH_DATA3 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6441c) +#define _DPE_AUX_CH_DATA4 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64420) +#define _DPE_AUX_CH_DATA5 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64424) + +#define _DPF_AUX_CH_CTL (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64510) +#define _DPF_AUX_CH_DATA1 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64514) +#define _DPF_AUX_CH_DATA2 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64518) +#define _DPF_AUX_CH_DATA3 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x6451c) +#define _DPF_AUX_CH_DATA4 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64520) +#define _DPF_AUX_CH_DATA5 (INTEL_INFO(dev_priv)->display_mmio_offset + 0x64524)#define DP_AUX_CH_CTL (aux_ch) _MMIO_PORT(aux_ch, _DPA_AUX_CH_CTL, _DPB_AUX_CH_CTL)#define DP_AUX_CH_DATA (aux_ch, i) _MMIO(_PORT(aux_ch, _DPA_AUX_CH_DATA1, _DPB_AUX_CH_DATA1) + (i) * 4)/* 5 registers */ @@ -5713,7 +5713,7 @@ enum {#define DPINVGTT_STATUS_MASK 0xff#define DPINVGTT_STATUS_MASK_CHV 0xfff -#define DSPARB _MMIO(dev_priv->info.display_mmio_offset + 0x70030) +#define DSPARB _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x70030)#define DSPARB_CSTART_MASK (0x7f << 7)#define DSPARB_CSTART_SHIFT 7#define DSPARB_BSTART_MASK (0x7f)@@ -5748,7 +5748,7 @@ enum {#define DSPARB_SPRITEF_MASK_VLV (0xff << 8)/* pnv/gen4/g4x/vlv/chv */ -#define DSPFW1 _MMIO(dev_priv->info.display_mmio_offset + 0x70034) +#define DSPFW1 _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x70034)#define DSPFW_SR_SHIFT 23#define DSPFW_SR_MASK (0x1ff << 23)#define DSPFW_CURSORB_SHIFT 16@@ -5759,7 +5759,7 @@ enum {#define DSPFW_PLANEA_SHIFT 0#define DSPFW_PLANEA_MASK (0x7f << 0)#define DSPFW_PLANEA_MASK_VLV (0xff << 0)/* vlv/chv */ -#define DSPFW2 _MMIO(dev_priv->info.display_mmio_offset + 0x70038) +#define DSPFW2 _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x70038)#define DSPFW_FBC_SR_EN (1 << 31)/* g4x */ #define DSPFW_FBC_SR_SHIFT 28#define DSPFW_FBC_SR_MASK (0x7 << 28)/* g4x */ @@ -5775,7 +5775,7 @@ enum {#define DSPFW_SPRITEA_SHIFT 0#define DSPFW_SPRITEA_MASK (0x7f << 0)/* g4x */ #define DSPFW_SPRITEA_MASK_VLV (0xff << 0)/* vlv/chv */ -#define DSPFW3 _MMIO(dev_priv->info.display_mmio_offset + 0x7003c) +#define DSPFW3 _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x7003c)#define DSPFW_HPLL_SR_EN (1 << 31)#define PINEVIEW_SELF_REFRESH_EN (1 << 30)#define DSPFW_CURSOR_SR_SHIFT 24@@ -6191,35 +6191,35 @@ enum {* [10:1f] all * [30:32] all */ -#define SWF0 (i) _MMIO(dev_priv->info.display_mmio_offset + 0x70410 + (i) * 4) -#define SWF1 (i) _MMIO(dev_priv->info.display_mmio_offset + 0x71410 + (i) * 4) -#define SWF3 (i) _MMIO(dev_priv->info.display_mmio_offset + 0x72414 + (i) * 4) +#define SWF0 (i) _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x70410 + (i) * 4) +#define SWF1 (i) _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x71410 + (i) * 4) +#define SWF3 (i) _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x72414 + (i) * 4)#define SWF_ILK (i) _MMIO(0x4F000 + (i) * 4)/* Pipe B */ -#define _PIPEBDSL (dev_priv->info.display_mmio_offset + 0x71000) -#define _PIPEBCONF (dev_priv->info.display_mmio_offset + 0x71008) -#define _PIPEBSTAT (dev_priv->info.display_mmio_offset + 0x71024) +#define _PIPEBDSL (INTEL_INFO(dev_priv)->display_mmio_offset + 0x71000) +#define _PIPEBCONF (INTEL_INFO(dev_priv)->display_mmio_offset + 0x71008) +#define _PIPEBSTAT (INTEL_INFO(dev_priv)->display_mmio_offset + 0x71024)#define _PIPEBFRAMEHIGH 0x71040#define _PIPEBFRAMEPIXEL 0x71044 -#define _PIPEB_FRMCOUNT_G4X (dev_priv->info.display_mmio_offset + 0x71040) -#define _PIPEB_FLIPCOUNT_G4X (dev_priv->info.display_mmio_offset + 0x71044) +#define _PIPEB_FRMCOUNT_G4X (INTEL_INFO(dev_priv)->display_mmio_offset + 0x71040) +#define _PIPEB_FLIPCOUNT_G4X (INTEL_INFO(dev_priv)->display_mmio_offset + 0x71044)/* Display B control */ -#define _DSPBCNTR (dev_priv->info.display_mmio_offset + 0x71180) +#define _DSPBCNTR (INTEL_INFO(dev_priv)->display_mmio_offset + 0x71180)#define DISPPLANE_ALPHA_TRANS_ENABLE (1 << 15)#define DISPPLANE_ALPHA_TRANS_DISABLE 0#define DISPPLANE_SPRITE_ABOVE_DISPLAY 0#define DISPPLANE_SPRITE_ABOVE_OVERLAY (1) -#define _DSPBADDR (dev_priv->info.display_mmio_offset + 0x71184) -#define _DSPBSTRIDE (dev_priv->info.display_mmio_offset + 0x71188) -#define _DSPBPOS (dev_priv->info.display_mmio_offset + 0x7118C) -#define _DSPBSIZE (dev_priv->info.display_mmio_offset + 0x71190) -#define _DSPBSURF (dev_priv->info.display_mmio_offset + 0x7119C) -#define _DSPBTILEOFF (dev_priv->info.display_mmio_offset + 0x711A4) -#define _DSPBOFFSET (dev_priv->info.display_mmio_offset + 0x711A4) -#define _DSPBSURFLIVE (dev_priv->info.display_mmio_offset + 0x711AC) +#define _DSPBADDR (INTEL_INFO(dev_priv)->display_mmio_offset + 0x71184) +#define _DSPBSTRIDE (INTEL_INFO(dev_priv)->display_mmio_offset + 0x71188) +#define _DSPBPOS (INTEL_INFO(dev_priv)->display_mmio_offset + 0x7118C) +#define _DSPBSIZE (INTEL_INFO(dev_priv)->display_mmio_offset + 0x71190) +#define _DSPBSURF (INTEL_INFO(dev_priv)->display_mmio_offset + 0x7119C) +#define _DSPBTILEOFF (INTEL_INFO(dev_priv)->display_mmio_offset + 0x711A4) +#define _DSPBOFFSET (INTEL_INFO(dev_priv)->display_mmio_offset + 0x711A4) +#define _DSPBSURFLIVE (INTEL_INFO(dev_priv)->display_mmio_offset + 0x711AC)/* ICL DSI 0 and 1 */ #define _PIPEDSI0CONF 0x7b008@@ -8773,7 +8773,7 @@ enum {#define GEN9_ENABLE_GPGPU_PREEMPTION (1 << 2)/* Audio */ -#define G4X_AUD_VID_DID _MMIO(dev_priv->info.display_mmio_offset + 0x62020) +#define G4X_AUD_VID_DID _MMIO(INTEL_INFO(dev_priv)->display_mmio_offset + 0x62020)#define INTEL_AUDIO_DEVCL 0x808629FB#define INTEL_AUDIO_DEVBLC 0x80862801#define INTEL_AUDIO_DEVCTG 0x80862802drivers/gpu/drm/i915/intel_device_info.c +4
-7@@ -121,19 +121,16 @@ intel_device_info_dump_runtime(const struct intel_runtime_device_info *info,intel_runtime_device_info_dump_flags (info, p); } -void intel_device_info_dump (const struct intel_device_info *info, +void intel_device_info_dump (struct drm_i915_private *dev_priv,struct drm_printer *p) { -struct drm_i915_private *dev_priv = - container_of(info, struct drm_i915_private, info); -drm_printf (p,"pciid=0x%04x rev=0x%02x platform=%s gen=%i\n" ,INTEL_DEVID (dev_priv),INTEL_REVID (dev_priv), -intel_platform_name (info->platform), - info->__gen); +intel_platform_name (INTEL_INFO (dev_priv)->platform), +INTEL_INFO (dev_priv)->__gen); -intel_device_info_dump_flags (info, p); +intel_device_info_dump_flags (INTEL_INFO (dev_priv), p); } void intel_device_info_dump_topology(const struct sseu_dev_info *sseu,drivers/gpu/drm/i915/intel_device_info.h +1
-1@@ -270,7 +270,7 @@ static inline void sseu_set_eus(struct sseu_dev_info *sseu,const char *intel_platform_name (enum intel_platform platform);void intel_device_info_runtime_init (struct drm_i915_private *dev_priv); -void intel_device_info_dump (const struct intel_device_info *info, +void intel_device_info_dump (struct drm_i915_private *dev_priv,struct drm_printer *p);void intel_device_info_dump_flags (const struct intel_device_info *info,struct drm_printer *p);drivers/gpu/drm/i915/intel_uncore.c +1
-1@@ -2256,7 +2256,7 @@ bool intel_has_gpu_reset(struct drm_i915_private *dev_priv)bool intel_has_reset_engine (struct drm_i915_private *dev_priv) { -return (dev_priv->info.has_reset_engine && +return (INTEL_INFO (dev_priv)->has_reset_engine && i915_modparams.reset >=2 ); }
Signature · 5 lines
Jani Nikula, Intel Open Source Graphics Center _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 4/7] drm/i915: Remove mkwrite_device_info
In reply to Jani NikulaQuoting Jani Nikula (2018-11-13 11:45:02)
Quoted 8 lines · Tvrtko Ursulin
Quoted 7 lines
From: Tvrtko Ursulin <[email protected]>
Now that we are down to one caller, which does not even modify copied device info, we can remove the
mkwrite_device_infohelper and convert the device info pointer itself to be a pointer to static table instead of a copy.
Quoted 8 lines
Quoted 2 lines
Only unfortnate thing is that we need to convert all callsites which were referencing the device info directly to using the
INTEL_INFOhelper.I'm not sure if that's all that bad. When I was toying around with
mkwrite_device_inforemoval, I actually started off with changing all device info references toINTEL_INFO. It's a big patch, but it nicely centralizes many of the other changes instead of splattering all over the place.
Fwiw, replacing all the static i915->info accesses with INTEL_INFO (or DEVICE_INFO since STATIC_INFO I think is too confusing with C, and INTEL_INFO is not distinct enough from RUNTIME_INFO) is perhaps a pre-requisite for single platform DCE. Along the lines of
#define INTEL_INFO(i915) (&skylake_gt3_info)
-Chris
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 4/7] drm/i915: Remove mkwrite_device_info
Quoted 18 lines · Chris Wilson
Quoting Jani Nikula (2018-11-13 11:45:02)
Quoted 8 lines · Tvrtko Ursulin
Quoted 7 lines
From: Tvrtko Ursulin <[email protected]>
Now that we are down to one caller, which does not even modify copied device info, we can remove the
mkwrite_device_infohelper and convert the device info pointer itself to be a pointer to static table instead of a copy.Quoted 8 lines
Quoted 2 lines
Only unfortnate thing is that we need to convert all callsites which were referencing the device info directly to using the
INTEL_INFOhelper.I'm not sure if that's all that bad. When I was toying around with
mkwrite_device_inforemoval, I actually started off with changing all device info references toINTEL_INFO. It's a big patch, but it nicely centralizes many of the other changes instead of splattering all over the place.
Quoted 3 lines
Fwiw, replacing all the static
i915->infoaccesses withINTEL_INFO(orDEVICE_INFOsinceSTATIC_INFOI think is too confusing with C, andINTEL_INFOis not distinct enough fromRUNTIME_INFO) is perhaps a
You propose DEVICE_INFO for the static part and RUNTIME_INFO for dynamic, all with INTEL_ prefix?
Quoted 2 lines
pre-requisite for single platform DCE. Along the lines of
#define INTEL_INFO(i915) (&skylake_gt3_info)
Definitely, and I think this patch changed them all. There weren't that many.
We also need to minimize the runtime portion for best DCE results. But AFAIR it was quite good already with just IS_GEN and IS_PLATFORM changes and not even LTO.
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 4/7] drm/i915: Remove mkwrite_device_info
Quoting Tvrtko Ursulin (2018-11-13 17:33:38)
Quoted 20 lines · Chris Wilson
Quoted 18 lines
Quoting Jani Nikula (2018-11-13 11:45:02)
Quoted 16 lines · Tvrtko Ursulin
Quoted 9 lines
From: Tvrtko Ursulin <[email protected]>
Now that we are down to one caller, which does not even modify copied device info, we can remove the
mkwrite_device_infohelper and convert the device info pointer itself to be a pointer to static table instead of a copy.Only unfortnate thing is that we need to convert all callsites which were referencing the device info directly to using the
INTEL_INFOhelper.I'm not sure if that's all that bad. When I was toying around with
mkwrite_device_inforemoval, I actually started off with changing all device info references toINTEL_INFO. It's a big patch, but it nicely centralizes many of the other changes instead of splattering all over the place.
Quoted 6 lines
Quoted 3 lines
Fwiw, replacing all the static
i915->infoaccesses withINTEL_INFO(orDEVICE_INFOsinceSTATIC_INFOI think is too confusing with C, andINTEL_INFOis not distinct enough fromRUNTIME_INFO) is perhaps aYou propose
DEVICE_INFOfor the static part andRUNTIME_INFOfor dynamic, all withINTEL_prefix?
INTEL_DEVICE_INFO()INTEL_RUNTIME_INFO()
is getting unwieldy?
I just used DEVICE_INFO() and RUNTIME_INFO(). Although, there aren't that many direct users of INTEL_*_INFO() so I guess it's not that bad, and any that are, merit a shorter helper.
-Chris
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 4/7] drm/i915: Remove mkwrite_device_info
In reply to Jani NikulaQuoted 8 lines · Jani Nikula
Quoted 7 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
Now that we are down to one caller, which does not even modify copied device info, we can remove the
mkwrite_device_infohelper and convert the device info pointer itself to be a pointer to static table instead of a copy.
Quoted 8 lines
Quoted 2 lines
Only unfortnate thing is that we need to convert all callsites which were referencing the device info directly to using the
INTEL_INFOhelper.I'm not sure if that's all that bad. When I was toying around with
mkwrite_device_inforemoval, I actually started off with changing all device info references toINTEL_INFO. It's a big patch, but it nicely centralizes many of the other changes instead of splattering all over the place.
Yes, but then you still need to splat all over the place to change the same use sites to RUNTIME_INFO or equivalent.
Quoted 2 lines
I'd actually like to see
RUNTIME_INFOor similar macro as well, just to be able to change the way it's handled later on.
I actually started of with introducing INTEL_RUNTIME_INFO but ended up backing off with that idea since it looked to "uppercasey". Not saying that the sprinkle of dev_priv->runtime_info.something is that much better, but at least it did not hurt my eyes so much. Don't know.. I am happy to go with popular vote here.
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
RFC 5/7 drm/i915: Move gen and platform mask to runtime device info
In reply to Tvrtko UrsulinFrom: Tvrtko Ursulin <[email protected]>
It is more space efficient to store these two at the runtime copy since both are trivially derived from the static data.
--- drivers/gpu/drm/i915/i915_drv.c | 15 +++++++++---- drivers/gpu/drm/i915/i915_drv.h | 28 ++++++++++++++---------- drivers/gpu/drm/i915/i915_pci.c | 4 ++-- drivers/gpu/drm/i915/intel_device_info.h | 6 ++--- drivers/gpu/drm/i915/intel_uncore.c | 2 +- 5 files changed, 33 insertions(+), 22 deletions(-)
drivers/gpu/drm/i915/i915_drv.c +11 -4
@@ -1657,10 +1657,6 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent) i915->info = device_info = match_info;pci_set_drvdata (pdev, &i915->drm); -BUILD_BUG_ON (INTEL_MAX_PLATFORMS > -BITS_PER_TYPE (device_info->platform_mask)); -BUG_ON (device_info->__gen >BITS_PER_TYPE (device_info->gen_mask)); -/* * Early setup of the runtime device info. */
@@ -1681,6 +1677,17 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent) runtime_info->ring_mask = device_info->__ring_mask; runtime_info->num_pipes = device_info->__num_pipes; +/* +* Initialize GEN and platform masks. +*/ +BUILD_BUG_ON (INTEL_MAX_PLATFORMS > +BITS_PER_TYPE (runtime_info->platform_mask)); + +BUG_ON (INTEL_GEN (i915) >BITS_PER_TYPE (runtime_info->gen_mask)); + + runtime_info->gen_mask =BIT (INTEL_GEN (i915) -1 ); + runtime_info->platform_mask =BIT (device_info->platform); +return i915; }
drivers/gpu/drm/i915/i915_drv.h +16 -12
@@ -2365,7 +2365,7 @@ static inline unsigned int i915_sg_segment_size(void)/* Returns true if Gen is in inclusive range [Start, End] */ #define IS_GEN (dev_priv, s, e) \ - (!!(INTEL_INFO(dev_priv)->gen_mask & INTEL_GEN_MASK((s), (e)))) + (!!((dev_priv)->runtime_info.gen_mask & INTEL_GEN_MASK((s), (e))))/* * Return true if revision is in range [since,until] inclusive.
@@ -2375,7 +2375,8 @@ static inline unsigned int i915_sg_segment_size(void)#define IS_REVID (p, since, until) \ (INTEL_REVID(p) >= (since) && INTEL_REVID(p) <= (until)) -#define IS_PLATFORM (dev_priv, p) (INTEL_INFO(dev_priv)->platform_mask & BIT(p)) +#define IS_PLATFORM (dev_priv, p) \ + ((dev_priv)->runtime_info.platform_mask & BIT(p))#define IS_I830 (dev_priv) IS_PLATFORM(dev_priv, INTEL_I830)#define IS_I845G (dev_priv) IS_PLATFORM(dev_priv, INTEL_I845G)
@@ -2524,16 +2525,19 @@ static inline unsigned int i915_sg_segment_size(void)* have their own (e.g. HAS_PCH_SPLIT for ILK+ display, IS_foo for particular * chips, etc.). */ -#define IS_GEN2 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(1))) -#define IS_GEN3 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(2))) -#define IS_GEN4 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(3))) -#define IS_GEN5 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(4))) -#define IS_GEN6 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(5))) -#define IS_GEN7 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(6))) -#define IS_GEN8 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(7))) -#define IS_GEN9 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(8))) -#define IS_GEN10 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(9))) -#define IS_GEN11 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(10))) +#define __IS_GEN (dev_priv, g) \ + (!!((dev_priv)->runtime_info.gen_mask & BIT((g) - 1))) + +#define IS_GEN2 (dev_priv) __IS_GEN(dev_priv, 2) +#define IS_GEN3 (dev_priv) __IS_GEN(dev_priv, 3) +#define IS_GEN4 (dev_priv) __IS_GEN(dev_priv, 4) +#define IS_GEN5 (dev_priv) __IS_GEN(dev_priv, 5) +#define IS_GEN6 (dev_priv) __IS_GEN(dev_priv, 6) +#define IS_GEN7 (dev_priv) __IS_GEN(dev_priv, 7) +#define IS_GEN8 (dev_priv) __IS_GEN(dev_priv, 8) +#define IS_GEN9 (dev_priv) __IS_GEN(dev_priv, 9) +#define IS_GEN10 (dev_priv) __IS_GEN(dev_priv, 10) +#define IS_GEN11 (dev_priv) __IS_GEN(dev_priv, 11)#define IS_LP (dev_priv) (INTEL_INFO(dev_priv)->is_lp)#define IS_GEN9_LP (dev_priv) (IS_GEN9(dev_priv) && IS_LP(dev_priv))
drivers/gpu/drm/i915/i915_pci.c +2 -2
@@ -29,8 +29,8 @@#include "i915_drv.h" #include "i915_selftest.h" -#define PLATFORM (x) .platform = (x), .platform_mask = BIT(x) -#define GEN (x) .__gen = (x), .gen_mask = BIT((x) - 1) +#define PLATFORM (x) .platform = (x) +#define GEN (x) .__gen = (x)#define GEN_DEFAULT_PIPEOFFSETS \ .pipe_offsets = { PIPE_A_OFFSET, PIPE_B_OFFSET, \
drivers/gpu/drm/i915/intel_device_info.h +3 -3
@@ -148,15 +148,12 @@ struct sseu_dev_info {typedef u8 intel_ring_mask_t ;struct intel_device_info { -u16 gen_mask; -u8 __gen;u8 gt;/* GT number, 0 if undefined */ intel_ring_mask_t __ring_mask;/* Rings supported by the HW */ u8 __num_pipes;enum intel_platform platform; -u32 platform_mask;enum intel_ppgtt __ppgtt;unsigned int __page_sizes;/* page sizes supported by the HW */
@@ -188,11 +185,14 @@ struct intel_device_info {struct intel_runtime_device_info {int gen; +u32 platform_mask; +unsigned int num_rings;enum intel_ppgtt ppgtt;unsigned int page_sizes;/* page sizes supported by the HW */ +u16 gen_mask;u16 device_id;intel_ring_mask_t ring_mask;/* Rings supported by the HW */
drivers/gpu/drm/i915/intel_uncore.c +1 -1
@@ -1683,7 +1683,7 @@ int i915_reg_read_ioctl(struct drm_device *dev,GEM_BUG_ON (entry->size >8 );GEM_BUG_ON (entry_offset & (entry->size -1 )); -if (INTEL_INFO (dev_priv)->gen_mask & entry->gen_mask && +if (dev_priv->runtime_info.gen_mask & entry->gen_mask && entry_offset == (reg->offset & -entry->size))break ; entry++;
Signature · 6 lines
2.19.1 _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 5/7] drm/i915: Move gen and platform mask to runtime device info
Quoted 4 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
It is more space efficient to store these two at the runtime copy since both are trivially derived from the static data.
Any consideration for potential future config option for reduced number of supported device infos, and compiler optimization on const gen?
BR,
Jani.
Quoted 161 lines
Signed-off-by Tvrtko Ursulin <[email protected]>Cc Chris Wilson <[email protected]>Cc Jani Nikula <[email protected]>--- drivers/gpu/drm/i915/i915_drv.c | 15 +++++++++---- drivers/gpu/drm/i915/i915_drv.h | 28 ++++++++++++++---------- drivers/gpu/drm/i915/i915_pci.c | 4 ++-- drivers/gpu/drm/i915/intel_device_info.h | 6 ++--- drivers/gpu/drm/i915/intel_uncore.c | 2 +- 5 files changed, 33 insertions(+), 22 deletions(-)drivers/gpu/drm/i915/i915_drv.c +11
-4@@ -1657,10 +1657,6 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent) i915->info = device_info = match_info;pci_set_drvdata (pdev, &i915->drm); -BUILD_BUG_ON (INTEL_MAX_PLATFORMS > -BITS_PER_TYPE (device_info->platform_mask)); -BUG_ON (device_info->__gen >BITS_PER_TYPE (device_info->gen_mask)); -/* * Early setup of the runtime device info. */ @@ -1681,6 +1677,17 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent) runtime_info->ring_mask = device_info->__ring_mask; runtime_info->num_pipes = device_info->__num_pipes; +/* +* Initialize GEN and platform masks. +*/ +BUILD_BUG_ON (INTEL_MAX_PLATFORMS > +BITS_PER_TYPE (runtime_info->platform_mask)); + +BUG_ON (INTEL_GEN (i915) >BITS_PER_TYPE (runtime_info->gen_mask)); + + runtime_info->gen_mask =BIT (INTEL_GEN (i915) -1 ); + runtime_info->platform_mask =BIT (device_info->platform); +return i915; }drivers/gpu/drm/i915/i915_drv.h +16
-12@@ -2365,7 +2365,7 @@ static inline unsigned int i915_sg_segment_size(void)/* Returns true if Gen is in inclusive range [Start, End] */ #define IS_GEN (dev_priv, s, e) \ - (!!(INTEL_INFO(dev_priv)->gen_mask & INTEL_GEN_MASK((s), (e)))) + (!!((dev_priv)->runtime_info.gen_mask & INTEL_GEN_MASK((s), (e))))/* * Return true if revision is in range [since,until] inclusive. @@ -2375,7 +2375,8 @@ static inline unsigned int i915_sg_segment_size(void)#define IS_REVID (p, since, until) \ (INTEL_REVID(p) >= (since) && INTEL_REVID(p) <= (until)) -#define IS_PLATFORM (dev_priv, p) (INTEL_INFO(dev_priv)->platform_mask & BIT(p)) +#define IS_PLATFORM (dev_priv, p) \ + ((dev_priv)->runtime_info.platform_mask & BIT(p))#define IS_I830 (dev_priv) IS_PLATFORM(dev_priv, INTEL_I830)#define IS_I845G (dev_priv) IS_PLATFORM(dev_priv, INTEL_I845G)@@ -2524,16 +2525,19 @@ static inline unsigned int i915_sg_segment_size(void)* have their own (e.g. HAS_PCH_SPLIT for ILK+ display, IS_foo for particular * chips, etc.). */ -#define IS_GEN2 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(1))) -#define IS_GEN3 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(2))) -#define IS_GEN4 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(3))) -#define IS_GEN5 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(4))) -#define IS_GEN6 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(5))) -#define IS_GEN7 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(6))) -#define IS_GEN8 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(7))) -#define IS_GEN9 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(8))) -#define IS_GEN10 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(9))) -#define IS_GEN11 (dev_priv) (!!(INTEL_INFO(dev_priv)->gen_mask & BIT(10))) +#define __IS_GEN (dev_priv, g) \ + (!!((dev_priv)->runtime_info.gen_mask & BIT((g) - 1))) + +#define IS_GEN2 (dev_priv) __IS_GEN(dev_priv, 2) +#define IS_GEN3 (dev_priv) __IS_GEN(dev_priv, 3) +#define IS_GEN4 (dev_priv) __IS_GEN(dev_priv, 4) +#define IS_GEN5 (dev_priv) __IS_GEN(dev_priv, 5) +#define IS_GEN6 (dev_priv) __IS_GEN(dev_priv, 6) +#define IS_GEN7 (dev_priv) __IS_GEN(dev_priv, 7) +#define IS_GEN8 (dev_priv) __IS_GEN(dev_priv, 8) +#define IS_GEN9 (dev_priv) __IS_GEN(dev_priv, 9) +#define IS_GEN10 (dev_priv) __IS_GEN(dev_priv, 10) +#define IS_GEN11 (dev_priv) __IS_GEN(dev_priv, 11)#define IS_LP (dev_priv) (INTEL_INFO(dev_priv)->is_lp)#define IS_GEN9_LP (dev_priv) (IS_GEN9(dev_priv) && IS_LP(dev_priv))drivers/gpu/drm/i915/i915_pci.c +2
-2@@ -29,8 +29,8 @@#include "i915_drv.h" #include "i915_selftest.h" -#define PLATFORM (x) .platform = (x), .platform_mask = BIT(x) -#define GEN (x) .__gen = (x), .gen_mask = BIT((x) - 1) +#define PLATFORM (x) .platform = (x) +#define GEN (x) .__gen = (x)#define GEN_DEFAULT_PIPEOFFSETS \ .pipe_offsets = { PIPE_A_OFFSET, PIPE_B_OFFSET, \drivers/gpu/drm/i915/intel_device_info.h +3
-3@@ -148,15 +148,12 @@ struct sseu_dev_info {typedef u8 intel_ring_mask_t ;struct intel_device_info { -u16 gen_mask; -u8 __gen;u8 gt;/* GT number, 0 if undefined */ intel_ring_mask_t __ring_mask;/* Rings supported by the HW */ u8 __num_pipes;enum intel_platform platform; -u32 platform_mask;enum intel_ppgtt __ppgtt;unsigned int __page_sizes;/* page sizes supported by the HW */ @@ -188,11 +185,14 @@ struct intel_device_info {struct intel_runtime_device_info {int gen; +u32 platform_mask; +unsigned int num_rings;enum intel_ppgtt ppgtt;unsigned int page_sizes;/* page sizes supported by the HW */ +u16 gen_mask;u16 device_id;intel_ring_mask_t ring_mask;/* Rings supported by the HW */ drivers/gpu/drm/i915/intel_uncore.c +1
-1@@ -1683,7 +1683,7 @@ int i915_reg_read_ioctl(struct drm_device *dev,GEM_BUG_ON (entry->size >8 );GEM_BUG_ON (entry_offset & (entry->size -1 )); -if (INTEL_INFO (dev_priv)->gen_mask & entry->gen_mask && +if (dev_priv->runtime_info.gen_mask & entry->gen_mask && entry_offset == (reg->offset & -entry->size))break ; entry++;
Signature · 5 lines
Jani Nikula, Intel Open Source Graphics Center _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 5/7] drm/i915: Move gen and platform mask to runtime device info
Quoted 8 lines · Jani Nikula
Quoted 4 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
It is more space efficient to store these two at the runtime copy since both are trivially derived from the static data.
Any consideration for potential future config option for reduced number of supported device infos, and compiler optimization on const gen?
I of all people should have remember that detail!
Thanks,
Tvrtko
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 5/7] drm/i915: Move gen and platform mask to runtime device info
Quoted 5 lines · Tvrtko Ursulin
Quoted 3 lines · Jani Nikula
Quoted 2 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
Quoted 7 lines
Quoted 5 lines
Quoted 2 lines
It is more space efficient to store these two at the runtime copy since both are trivially derived from the static data.
Any consideration for potential future config option for reduced number of supported device infos, and compiler optimization on const gen?
I of all people should have remember that detail!
Remembered... but actually.. AFAIR the Kconfig platform/gen selection worked on the IS_xxx macro level so that would still work. It wasn't able to compile time optimize against the runtime device info copy anyway. So I think this does not interfere. Will keep it in mind.
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
RFC 6/7 drm/i915: Introduce subplatform concept
In reply to Tvrtko UrsulinFrom: Tvrtko Ursulin <[email protected]>
Introduce subplatform mask to eliminate throughout the code devid checking sprinkle, mostly courtesy of IS_*_UL[TX] macros.
Subplatform mask initialization is done at runtime device info init.
v2: Fixed IS_SUBPLATFORM. Updated commit msg.
v3: Chris was right, there is an ordering problem.
v4: Drop mask sharing, rename title, rebase.
--- drivers/gpu/drm/i915/i915_drv.c | 2 + drivers/gpu/drm/i915/i915_drv.h | 59 +++++++++------------ drivers/gpu/drm/i915/intel_device_info.c | 65 ++++++++++++++++++++++++ drivers/gpu/drm/i915/intel_device_info.h | 18 +++++++ 4 files changed, 108 insertions(+), 36 deletions(-)
drivers/gpu/drm/i915/i915_drv.c +2 -0
@@ -1688,6 +1688,8 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent) runtime_info->gen_mask =BIT (INTEL_GEN (i915) -1 ); runtime_info->platform_mask =BIT (device_info->platform); +intel_device_info_subplatform_init (i915); +return i915; }
drivers/gpu/drm/i915/i915_drv.h +23 -36
94 lines not on this page · raw message
drivers/gpu/drm/i915/intel_device_info.c +65 -0
77 lines not on this page · raw message
drivers/gpu/drm/i915/intel_device_info.h +18 -0
@@ -182,10 +182,27 @@ struct intel_device_info {func (has_rc6); \func (has_rc6p); \ +/* +* Subplatform bits share the same namespace per parent platform. In other words +* it is fine for the same bit to be used on multiple parent platform. +*/ +#define INTEL_SUBPLATFORM_IRONLAKE_M (0) + +#define INTEL_SUBPLATFORM_PINEVIEW_G (0) +#define INTEL_SUBPLATFORM_PINEVIEW_M (1) + +/* SKL/KBL */ +#define INTEL_SUBPLATFORM_ULT (0) +#define INTEL_SUBPLATFORM_ULX (1) +#define INTEL_SUBPLATFORM_AML (2) + +#define INTEL_SUBPLATFORM_PORTF (0) +struct intel_runtime_device_info {int gen;u32 platform_mask; +u32 subplatform_mask;unsigned int num_rings;
@@ -270,6 +287,7 @@ static inline void sseu_set_eus(struct sseu_dev_info *sseu,const char *intel_platform_name (enum intel_platform platform);void intel_device_info_runtime_init (struct drm_i915_private *dev_priv); +void intel_device_info_subplatform_init (struct drm_i915_private *dev_priv);void intel_device_info_dump (struct drm_i915_private *dev_priv,struct drm_printer *p); void intel_device_info_dump_flags(const struct intel_device_info *info,
Signature · 6 lines
2.19.1 _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 6/7] drm/i915: Introduce subplatform concept
Quoting Tvrtko Ursulin (2018-11-12 17:12:41)
drivers/gpu/drm/i915/intel_device_info.c intel_device_info_dump_runtime(const struct intel_runtime_device_info *info, · line 121
Quoted 9 lines
drivers/gpu/drm/i915/intel_device_info.c +1
-0@@ -118,6 +118,8 @@ intel_device_info_dump_runtime(const struct intel_runtime_device_info *info,drm_printf (p,"CS timestamp frequency: %u kHz\n" , info->cs_timestamp_frequency_khz); +drm_printf (p,"Subplatform mask: %x\n" , info->subplatform_mask);
Any chance for a magic decoder ring? Quick identification of ult/ulx I think would be very nice.
-Chris
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 6/7] drm/i915: Introduce subplatform concept
Quoted 9 lines · Chris Wilson
Quoting Tvrtko Ursulin (2018-11-12 17:12:41)
Quoted 8 lines
drivers/gpu/drm/i915/intel_device_info.c +0
-0@@ -118,6 +118,8 @@ intel_device_info_dump_runtime(const struct intel_runtime_device_info *info,drm_printf (p,"CS timestamp frequency: %u kHz\n" , info->cs_timestamp_frequency_khz);
Quoted 4 lines
drivers/gpu/drm/i915/intel_device_info.c intel_device_info_dump_runtime(const struct intel_runtime_device_info *info, · line 121
Quoted 1 line
drivers/gpu/drm/i915/intel_device_info.c +1
-0+drm_printf (p,"Subplatform mask: %x\n" , info->subplatform_mask);Any chance for a magic decoder ring? Quick identification of ult/ulx I think would be very nice.
Yes I wasn't happy with not doing that myself. So I think it is definitely needed.
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 6/7] drm/i915: Introduce subplatform concept
In reply to Tvrtko UrsulinQuoted 6 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
Introduce subplatform mask to eliminate throughout the code devid checking sprinkle, mostly courtesy of IS_*_UL[TX] macros.
Subplatform mask initialization is done at runtime device info init.
I kind of like the concept, and I like the centralization of devid checks in one function, but I've always wanted to take this to one step
further: only specify device ids in i915_pciids.h, and *nowhere* else.
It's perhaps too much duplication to create a device info for all these variants, but I think it would be possible to make the subplatform info table driven using macros defined in i915_pciids.h.
I think Rodrigo had patches to define CNL port F in terms of num_ports, but perhaps the subplatform approach works better for that.
BR,
Jani.
Quoted 254 lines
v2: Fixed
IS_SUBPLATFORM. Updated commit msg.
v3: Chris was right, there is an ordering problem.
v4: Drop mask sharing, rename title, rebase.Signed-off-by Tvrtko Ursulin <[email protected]>Suggested-by Chris Wilson <[email protected]>Cc Chris Wilson <[email protected]>Cc Jani Nikula <[email protected]>--- drivers/gpu/drm/i915/i915_drv.c | 2 + drivers/gpu/drm/i915/i915_drv.h | 59 +++++++++------------ drivers/gpu/drm/i915/intel_device_info.c | 65 ++++++++++++++++++++++++ drivers/gpu/drm/i915/intel_device_info.h | 18 +++++++ 4 files changed, 108 insertions(+), 36 deletions(-)drivers/gpu/drm/i915/i915_drv.c +2
-0@@ -1688,6 +1688,8 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent) runtime_info->gen_mask =BIT (INTEL_GEN (i915) -1 ); runtime_info->platform_mask =BIT (device_info->platform); +intel_device_info_subplatform_init (i915); +return i915; }drivers/gpu/drm/i915/i915_drv.h +23
-36@@ -2377,6 +2377,10 @@ static inline unsigned int i915_sg_segment_size(void)#define IS_PLATFORM (dev_priv, p) \ ((dev_priv)->runtime_info.platform_mask & BIT(p)) +#define IS_SUBPLATFORM (dev_priv, p, s) \ + (IS_PLATFORM(dev_priv, p) && \ + ((dev_priv)->runtime_info.subplatform_mask & \ + BIT(INTEL_SUBPLATFORM_##s)))#define IS_I830 (dev_priv) IS_PLATFORM(dev_priv, INTEL_I830)#define IS_I845G (dev_priv) IS_PLATFORM(dev_priv, INTEL_I845G)@@ -2391,11 +2395,15 @@ static inline unsigned int i915_sg_segment_size(void)#define IS_G45 (dev_priv) IS_PLATFORM(dev_priv, INTEL_G45)#define IS_GM45 (dev_priv) IS_PLATFORM(dev_priv, INTEL_GM45)#define IS_G4X (dev_priv) (IS_G45(dev_priv) || IS_GM45(dev_priv)) -#define IS_PINEVIEW_G (dev_priv) (INTEL_DEVID(dev_priv) == 0xa001) -#define IS_PINEVIEW_M (dev_priv) (INTEL_DEVID(dev_priv) == 0xa011) +#define IS_PINEVIEW_G (dev_priv) \ + IS_SUBPLATFORM(dev_priv, INTEL_PINEVIEW, PINEVIEW_G) +#define IS_PINEVIEW_M (dev_priv) \ + IS_SUBPLATFORM(dev_priv, INTEL_PINEVIEW, PINEVIEW_M)#define IS_PINEVIEW (dev_priv) IS_PLATFORM(dev_priv, INTEL_PINEVIEW)#define IS_G33 (dev_priv) IS_PLATFORM(dev_priv, INTEL_G33) -#define IS_IRONLAKE_M (dev_priv) (INTEL_DEVID(dev_priv) == 0x0046) +#define IS_IRONLAKE (dev_priv) IS_PLATFORM(dev_priv, INTEL_IRONLAKE) +#define IS_IRONLAKE_M (dev_priv) \ + IS_SUBPLATFORM(dev_priv, INTEL_IRONLAKE, IRONLAKE_M)#define IS_IVYBRIDGE (dev_priv) IS_PLATFORM(dev_priv, INTEL_IVYBRIDGE)#define IS_IVB_GT1 (dev_priv) (IS_IVYBRIDGE(dev_priv) && \ INTEL_INFO(dev_priv)->gt == 1)@@ -2413,40 +2421,20 @@ static inline unsigned int i915_sg_segment_size(void)#define IS_MOBILE (dev_priv) (INTEL_INFO(dev_priv)->is_mobile)#define IS_HSW_EARLY_SDV (dev_priv) (IS_HASWELL(dev_priv) && \ (INTEL_DEVID(dev_priv) & 0xFF00) == 0x0C00) -#define IS_BDW_ULT (dev_priv) (IS_BROADWELL(dev_priv) && \ - ((INTEL_DEVID(dev_priv) & 0xf) == 0x6 || \ - (INTEL_DEVID(dev_priv) & 0xf) == 0xb || \ - (INTEL_DEVID(dev_priv) & 0xf) == 0xe)) -/* ULX machines are also considered ULT. */ -#define IS_BDW_ULX (dev_priv) (IS_BROADWELL(dev_priv) && \ - (INTEL_DEVID(dev_priv) & 0xf) == 0xe) +#define IS_BDW_ULT (dev_priv) IS_SUBPLATFORM(dev_priv, INTEL_BROADWELL, ULT) +#define IS_BDW_ULX (dev_priv) IS_SUBPLATFORM(dev_priv, INTEL_BROADWELL, ULX)#define IS_BDW_GT3 (dev_priv) (IS_BROADWELL(dev_priv) && \ INTEL_INFO(dev_priv)->gt == 3) -#define IS_HSW_ULT (dev_priv) (IS_HASWELL(dev_priv) && \ - (INTEL_DEVID(dev_priv) & 0xFF00) == 0x0A00) +#define IS_HSW_ULT (dev_priv) IS_SUBPLATFORM(dev_priv, INTEL_HASWELL, ULT)#define IS_HSW_GT3 (dev_priv) (IS_HASWELL(dev_priv) && \ INTEL_INFO(dev_priv)->gt == 3)/* ULX machines are also considered ULT. */ -#define IS_HSW_ULX (dev_priv) (INTEL_DEVID(dev_priv) == 0x0A0E || \ - INTEL_DEVID(dev_priv) == 0x0A1E) -#define IS_SKL_ULT (dev_priv) (INTEL_DEVID(dev_priv) == 0x1906 || \ - INTEL_DEVID(dev_priv) == 0x1913 || \ - INTEL_DEVID(dev_priv) == 0x1916 || \ - INTEL_DEVID(dev_priv) == 0x1921 || \ - INTEL_DEVID(dev_priv) == 0x1926) -#define IS_SKL_ULX (dev_priv) (INTEL_DEVID(dev_priv) == 0x190E || \ - INTEL_DEVID(dev_priv) == 0x1915 || \ - INTEL_DEVID(dev_priv) == 0x191E) -#define IS_KBL_ULT (dev_priv) (INTEL_DEVID(dev_priv) == 0x5906 || \ - INTEL_DEVID(dev_priv) == 0x5913 || \ - INTEL_DEVID(dev_priv) == 0x5916 || \ - INTEL_DEVID(dev_priv) == 0x5921 || \ - INTEL_DEVID(dev_priv) == 0x5926) -#define IS_KBL_ULX (dev_priv) (INTEL_DEVID(dev_priv) == 0x590E || \ - INTEL_DEVID(dev_priv) == 0x5915 || \ - INTEL_DEVID(dev_priv) == 0x591E) -#define IS_AML_ULX (dev_priv) (INTEL_DEVID(dev_priv) == 0x591C || \ - INTEL_DEVID(dev_priv) == 0x87C0) +#define IS_HSW_ULX (dev_priv) IS_SUBPLATFORM(dev_priv, INTEL_HASWELL, ULX) +#define IS_SKL_ULT (dev_priv) IS_SUBPLATFORM(dev_priv, INTEL_SKYLAKE, ULT) +#define IS_SKL_ULX (dev_priv) IS_SUBPLATFORM(dev_priv, INTEL_SKYLAKE, ULX) +#define IS_KBL_ULT (dev_priv) IS_SUBPLATFORM(dev_priv, INTEL_KABYLAKE, ULT) +#define IS_KBL_ULX (dev_priv) IS_SUBPLATFORM(dev_priv, INTEL_KABYLAKE, ULX) +#define IS_AML_ULX (dev_priv) IS_SUBPLATFORM(dev_priv, INTEL_KABYLAKE, AML)#define IS_SKL_GT2 (dev_priv) (IS_SKYLAKE(dev_priv) && \ INTEL_INFO(dev_priv)->gt == 2)#define IS_SKL_GT3 (dev_priv) (IS_SKYLAKE(dev_priv) && \@@ -2457,14 +2445,13 @@ static inline unsigned int i915_sg_segment_size(void) INTEL_INFO(dev_priv)->gt == 2)#define IS_KBL_GT3 (dev_priv) (IS_KABYLAKE(dev_priv) && \ INTEL_INFO(dev_priv)->gt == 3) -#define IS_CFL_ULT (dev_priv) (IS_COFFEELAKE(dev_priv) && \ - (INTEL_DEVID(dev_priv) & 0x00F0) == 0x00A0) +#define IS_CFL_ULT (dev_priv) IS_SUBPLATFORM(dev_priv, INTEL_COFFEELAKE, ULT)#define IS_CFL_GT2 (dev_priv) (IS_COFFEELAKE(dev_priv) && \ INTEL_INFO(dev_priv)->gt == 2)#define IS_CFL_GT3 (dev_priv) (IS_COFFEELAKE(dev_priv) && \ INTEL_INFO(dev_priv)->gt == 3) -#define IS_CNL_WITH_PORT_F (dev_priv) (IS_CANNONLAKE(dev_priv) && \ - (INTEL_DEVID(dev_priv) & 0x0004) == 0x0004) +#define IS_CNL_WITH_PORT_F (dev_priv) \ + IS_SUBPLATFORM(dev_priv, INTEL_CANNONLAKE, PORTF)#define IS_ALPHA_SUPPORT (intel_info) ((intel_info)->is_alpha_support)drivers/gpu/drm/i915/intel_device_info.c +65
-0@@ -118,6 +118,8 @@ intel_device_info_dump_runtime(const struct intel_runtime_device_info *info,drm_printf (p,"CS timestamp frequency: %u kHz\n" , info->cs_timestamp_frequency_khz); +drm_printf (p,"Subplatform mask: %x\n" , info->subplatform_mask); +intel_runtime_device_info_dump_flags (info, p); }@@ -727,6 +729,69 @@ static u32 read_timestamp_frequency(struct drm_i915_private *dev_priv)return 0 ; } +void intel_device_info_subplatform_init (struct drm_i915_private *i915) +{ +struct intel_runtime_device_info *info = &i915->runtime_info; +u16 devid =INTEL_DEVID (i915); + +if (IS_PINEVIEW (i915)) { +if (devid ==0xa001 ) + info->subplatform_mask = +BIT (INTEL_SUBPLATFORM_PINEVIEW_G ); +else if (devid ==0xa011 ) + info->subplatform_mask = +BIT (INTEL_SUBPLATFORM_PINEVIEW_M ); + }else if (IS_IRONLAKE (i915) && devid ==0x0046 ) { + info->subplatform_mask = +BIT (INTEL_SUBPLATFORM_IRONLAKE_M ); + }else if (IS_HASWELL (i915)) { +if ((devid &0xFF00 ) ==0x0A00 ) + info->subplatform_mask =BIT (INTEL_SUBPLATFORM_ULT ); +/* ULX machines are also considered ULT. */ +if (devid ==0x0A0E || devid ==0x0A1E ) + info->subplatform_mask |=BIT (INTEL_SUBPLATFORM_ULX ); + }else if (IS_BROADWELL (i915)) { +if ((devid &0xf ) ==0x6 || + (devid &0xf ) ==0xb || + (devid &0xf ) ==0xe ) + info->subplatform_mask =BIT (INTEL_SUBPLATFORM_ULT ); +/* ULX machines are also considered ULT. */ +if ((devid &0xf ) ==0xe ) + info->subplatform_mask |=BIT (INTEL_SUBPLATFORM_ULX ); + }else if (IS_SKYLAKE (i915)) { +if (devid ==0x1906 || + devid ==0x1913 || + devid ==0x1916 || + devid ==0x1921 || + devid ==0x1926 ) + info->subplatform_mask =BIT (INTEL_SUBPLATFORM_ULT ); +else if (devid ==0x190E || + devid ==0x1915 || + devid ==0x191E ) + info->subplatform_mask =BIT (INTEL_SUBPLATFORM_ULX ); + }else if (IS_KABYLAKE (i915)) { +if (devid ==0x591c || + devid ==0x87c0 ) + info->subplatform_mask =BIT (INTEL_SUBPLATFORM_AML ); +else if (devid ==0x5906 || + devid ==0x5913 || + devid ==0x5916 || + devid ==0x5921 || + devid ==0x5926 ) + info->subplatform_mask =BIT (INTEL_SUBPLATFORM_ULT ); +else if (devid ==0x590E || + devid ==0x5915 || + devid ==0x591E ) + info->subplatform_mask =BIT (INTEL_SUBPLATFORM_ULX ); + }else if (IS_COFFEELAKE (i915)) { +if ((devid &0x00F0 ) ==0x00A0 ) + info->subplatform_mask =BIT (INTEL_SUBPLATFORM_ULT ); + }else if (IS_CANNONLAKE (i915)) { +if ((devid &0x0004 ) ==0x0004 ) + info->subplatform_mask =BIT (INTEL_SUBPLATFORM_PORTF ); + } +} +/** * intel_device_info_runtime_init - initialize runtime info * @info: intel device info struct drivers/gpu/drm/i915/intel_device_info.h +18
-0@@ -182,10 +182,27 @@ struct intel_device_info {func (has_rc6); \func (has_rc6p); \ +/* +* Subplatform bits share the same namespace per parent platform. In other words +* it is fine for the same bit to be used on multiple parent platform. +*/ +#define INTEL_SUBPLATFORM_IRONLAKE_M (0) + +#define INTEL_SUBPLATFORM_PINEVIEW_G (0) +#define INTEL_SUBPLATFORM_PINEVIEW_M (1) + +/* SKL/KBL */ +#define INTEL_SUBPLATFORM_ULT (0) +#define INTEL_SUBPLATFORM_ULX (1) +#define INTEL_SUBPLATFORM_AML (2) + +#define INTEL_SUBPLATFORM_PORTF (0) +struct intel_runtime_device_info {int gen;u32 platform_mask; +u32 subplatform_mask;unsigned int num_rings;@@ -270,6 +287,7 @@ static inline void sseu_set_eus(struct sseu_dev_info *sseu,const char *intel_platform_name (enum intel_platform platform);void intel_device_info_runtime_init (struct drm_i915_private *dev_priv); +void intel_device_info_subplatform_init (struct drm_i915_private *dev_priv);void intel_device_info_dump (struct drm_i915_private *dev_priv,struct drm_printer *p); void intel_device_info_dump_flags(const struct intel_device_info *info,
Signature · 5 lines
Jani Nikula, Intel Open Source Graphics Center _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 6/7] drm/i915: Introduce subplatform concept
Quoted 8 lines · Jani Nikula
Quoted 6 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
Introduce subplatform mask to eliminate throughout the code devid checking sprinkle, mostly courtesy of IS_*_UL[TX] macros.
Subplatform mask initialization is done at runtime device info init.
Quoted 7 lines
I kind of like the concept, and I like the centralization of devid checks in one function, but I've always wanted to take this to one step
further: only specify device ids ini915_pciids.h, and *nowhere* else.It's perhaps too much duplication to create a device info for all these variants, but I think it would be possible to make the subplatform info table driven using macros defined in
i915_pciids.h.
It would be much nicer, but how would you do it? Perhaps my imagination is just strong enough today.
Simply by splitting the id's into subplatform parts, for instance where we have today:
#define INTEL_BDW_GT1_IDS(info) \
INTEL_VGA_DEVICE(0x1602, info), /* GT1 ULT */ \
INTEL_VGA_DEVICE(0x1606, info), /* GT1 ULT */ \
INTEL_VGA_DEVICE(0x160B, info), /* GT1 Iris */ \
INTEL_VGA_DEVICE(0x160E, info), /* GT1 ULX */ \
INTEL_VGA_DEVICE(0x160A, info), /* GT1 Server */ \
INTEL_VGA_DEVICE(0x160D, info) /* GT1 Workstation */We'd split to:
#define INTEL_BDW_GT1_ULT_IDS(info) \
INTEL_VGA_DEVICE(0x1602, info), /* GT1 ULT */ \
INTEL_VGA_DEVICE(0x1606, info), /* GT1 ULT */ \#define INTEL_BDW_GT1_ULX_IDS(info) \
INTEL_VGA_DEVICE(0x160E, info), /* GT1 ULX */ \#define INTEL_BDW_GT1_IDS(info) \
INTEL_VGA_DEVICE(0x160B, info), /* GT1 Iris */ \
INTEL_VGA_DEVICE(0x160A, info), /* GT1 Server */ \
INTEL_VGA_DEVICE(0x160D, info) /* GT1 Workstation */Then in i915_pci.c, instead of:
... INTEL_BDW_GT1_IDS(&intel_broadwell_gt1_info), ...
We'd have:
... INTEL_BDW_GT1_ULT_IDS(&intel_broadwell_gt1_info), INTEL_BDW_GT1_ULX_IDS(&intel_broadwell_gt1_info), INTEL_BDW_GT1_IDS(&intel_broadwell_gt1_info), ...
And a separate table to map the id's to subplatform values.
Hmm, but we would probably need to extrac the id's from the INTEL_BDW1_GT_IDS like macros so they can be used in this second site without the info parameter. Something like the trick for device info flags, but can it be made to generate a macro? I think not..
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 6/7] drm/i915: Introduce subplatform concept
Quoted 13 lines · Tvrtko Ursulin
Quoted 12 lines · Jani Nikula
Quoted 6 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
Introduce subplatform mask to eliminate throughout the code devid checking sprinkle, mostly courtesy of IS_*_UL[TX] macros.
Subplatform mask initialization is done at runtime device info init.
I kind of like the concept, and I like the centralization of devid checks in one function, but I've always wanted to take this to one step
further: only specify device ids ini915_pciids.h, and *nowhere* else.
Quoted 6 lines
Quoted 3 lines
It's perhaps too much duplication to create a device info for all these variants, but I think it would be possible to make the subplatform info table driven using macros defined in
i915_pciids.h.It would be much nicer, but how would you do it? Perhaps my imagination is just strong enough today.
So here's an idea.
Quoted 12 lines
Simply by splitting the id's into subplatform parts, for instance where we have today:
#define INTEL_BDW_GT1_IDS(info) \ INTEL_VGA_DEVICE(0x1602, info), /* GT1 ULT */ \ INTEL_VGA_DEVICE(0x1606, info), /* GT1 ULT */ \ INTEL_VGA_DEVICE(0x160B, info), /* GT1 Iris */ \ INTEL_VGA_DEVICE(0x160E, info), /* GT1 ULX */ \ INTEL_VGA_DEVICE(0x160A, info), /* GT1 Server */ \ INTEL_VGA_DEVICE(0x160D, info) /* GT1 Workstation */
Quoted 8 lines
We'd split to:
#define INTEL_BDW_GT1_ULT_IDS(info) \ INTEL_VGA_DEVICE(0x1602, info), /* GT1 ULT */ \ INTEL_VGA_DEVICE(0x1606, info), /* GT1 ULT */ \#define INTEL_BDW_GT1_ULX_IDS(info) \ INTEL_VGA_DEVICE(0x160E, info), /* GT1 ULX */ \
So far so good.
Quoted 5 lines
#define INTEL_BDW_GT1_IDS(info) \
INTEL_VGA_DEVICE(0x160B, info), /* GT1 Iris */ \
INTEL_VGA_DEVICE(0x160A, info), /* GT1 Server */ \
INTEL_VGA_DEVICE(0x160D, info) /* GT1 Workstation */Now include INTEL_BDW_GT1_ULT_IDS(info) and INTEL_BDW_GT1_ULX_IDS(info) to the above...
Quoted 7 lines
Then in
i915_pci.c, instead of:... INTEL_BDW_GT1_IDS(&intel_broadwell_gt1_info), ...
Quoted 7 lines
We'd have:
... INTEL_BDW_GT1_ULT_IDS(&intel_broadwell_gt1_info), INTEL_BDW_GT1_ULX_IDS(&intel_broadwell_gt1_info), INTEL_BDW_GT1_IDS(&intel_broadwell_gt1_info), ...
...so you don't need to make this change at all. But that's a minor detail.
Quoted 6 lines
And a separate table to map the id's to subplatform values.
Hmm, but we would probably need to extrac the id's from the
INTEL_BDW1_GT_IDSlike macros so they can be used in this second site without the info parameter. Something like the trick for device info flags, but can it be made to generate a macro? I think not..
Are we shy of macro magic? Pfft.
#undef INTEL_VGA_DEVICE
#define INTEL_VGA_DEVICE(id, info) (id)
static const u32 bdw_ult_ids[] = {
INTEL_BDW_GT1_ULT_IDS(0),
};static const u32 bdw_ulx_ids[] = {
INTEL_BDW_GT1_ULX_IDS(0),
};#undef INTEL_VGA_DEVICE
Now you can add another mapping on top with pointers to similar arrays as above and corresponding subplatform bits. Just need to order the code to not clobber the real INTEL_VGA_DEVICE needs.
We don't need to split the ult/ulx tables by platform either if we only care about the subplatform ult/ulx here, just need to remember add all ult/ulx in corresponding arrays.
BR,
Jani.
Signature · 5 lines
Jani Nikula, Intel Open Source Graphics Center _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 6/7] drm/i915: Introduce subplatform concept
Quoted 64 lines · Jani Nikula
Quoted 13 lines · Tvrtko Ursulin
Quoted 12 lines · Jani Nikula
Quoted 6 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
Introduce subplatform mask to eliminate throughout the code devid checking sprinkle, mostly courtesy of IS_*_UL[TX] macros.
Subplatform mask initialization is done at runtime device info init.
I kind of like the concept, and I like the centralization of devid checks in one function, but I've always wanted to take this to one step
further: only specify device ids ini915_pciids.h, and *nowhere* else.Quoted 6 lines
Quoted 3 lines
It's perhaps too much duplication to create a device info for all these variants, but I think it would be possible to make the subplatform info table driven using macros defined in
i915_pciids.h.It would be much nicer, but how would you do it? Perhaps my imagination is just strong enough today.
So here's an idea.
Quoted 12 lines
Simply by splitting the id's into subplatform parts, for instance where we have today:
#define INTEL_BDW_GT1_IDS(info) \ INTEL_VGA_DEVICE(0x1602, info), /* GT1 ULT */ \ INTEL_VGA_DEVICE(0x1606, info), /* GT1 ULT */ \ INTEL_VGA_DEVICE(0x160B, info), /* GT1 Iris */ \ INTEL_VGA_DEVICE(0x160E, info), /* GT1 ULX */ \ INTEL_VGA_DEVICE(0x160A, info), /* GT1 Server */ \ INTEL_VGA_DEVICE(0x160D, info) /* GT1 Workstation */Quoted 8 lines
We'd split to:
#define INTEL_BDW_GT1_ULT_IDS(info) \ INTEL_VGA_DEVICE(0x1602, info), /* GT1 ULT */ \ INTEL_VGA_DEVICE(0x1606, info), /* GT1 ULT */ \#define INTEL_BDW_GT1_ULX_IDS(info) \ INTEL_VGA_DEVICE(0x160E, info), /* GT1 ULX */ \So far so good.
Quoted 5 lines
#define INTEL_BDW_GT1_IDS(info) \ INTEL_VGA_DEVICE(0x160B, info), /* GT1 Iris */ \ INTEL_VGA_DEVICE(0x160A, info), /* GT1 Server */ \ INTEL_VGA_DEVICE(0x160D, info) /* GT1 Workstation */Now include
INTEL_BDW_GT1_ULT_IDS(info)andINTEL_BDW_GT1_ULX_IDS(info)to the above...Quoted 9 lines
Then in
i915_pci.c, instead of:... INTEL_BDW_GT1_IDS(&intel_broadwell_gt1_info), ...We'd have:
Quoted 8 lines
Quoted 5 lines
... INTEL_BDW_GT1_ULT_IDS(&intel_broadwell_gt1_info), INTEL_BDW_GT1_ULX_IDS(&intel_broadwell_gt1_info), INTEL_BDW_GT1_IDS(&intel_broadwell_gt1_info), ......so you don't need to make this change at all. But that's a minor detail.
Indeed, makes the change less intrusive.
Quoted 22 lines
Quoted 6 lines
And a separate table to map the id's to subplatform values.
Hmm, but we would probably need to extrac the id's from the
INTEL_BDW1_GT_IDSlike macros so they can be used in this second site without the info parameter. Something like the trick for device info flags, but can it be made to generate a macro? I think not..Are we shy of macro magic? Pfft.
#undef
INTEL_VGA_DEVICE
#defineINTEL_VGA_DEVICE(id, info)(id)static const u32 bdw_ult_ids[] = { INTEL_BDW_GT1_ULT_IDS(0), };static const u32 bdw_ulx_ids[] = { INTEL_BDW_GT1_ULX_IDS(0), };#undef
INTEL_VGA_DEVICE
Quoted 7 lines
Now you can add another mapping on top with pointers to similar arrays as above and corresponding subplatform bits. Just need to order the code to not clobber the real
INTEL_VGA_DEVICEneeds.We don't need to split the ult/ulx tables by platform either if we only care about the subplatform ult/ulx here, just need to remember add all ult/ulx in corresponding arrays.
Nice and simple, thank you!
I am marking this for when I get round updating the series.
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [RFC 6/7] drm/i915: Introduce subplatform concept
In reply to Jani NikulaQuoted 95 lines · Jani Nikula
Quoted 13 lines · Tvrtko Ursulin
Quoted 12 lines · Jani Nikula
Quoted 6 lines · Tvrtko Ursulin
From: Tvrtko Ursulin <[email protected]>
Introduce subplatform mask to eliminate throughout the code devid checking sprinkle, mostly courtesy of IS_*_UL[TX] macros.
Subplatform mask initialization is done at runtime device info init.
I kind of like the concept, and I like the centralization of devid checks in one function, but I've always wanted to take this to one step
further: only specify device ids ini915_pciids.h, and *nowhere* else.Quoted 6 lines
Quoted 3 lines
It's perhaps too much duplication to create a device info for all these variants, but I think it would be possible to make the subplatform info table driven using macros defined in
i915_pciids.h.It would be much nicer, but how would you do it? Perhaps my imagination is just strong enough today.
So here's an idea.
Quoted 12 lines
Simply by splitting the id's into subplatform parts, for instance where we have today:
#define INTEL_BDW_GT1_IDS(info) \ INTEL_VGA_DEVICE(0x1602, info), /* GT1 ULT */ \ INTEL_VGA_DEVICE(0x1606, info), /* GT1 ULT */ \ INTEL_VGA_DEVICE(0x160B, info), /* GT1 Iris */ \ INTEL_VGA_DEVICE(0x160E, info), /* GT1 ULX */ \ INTEL_VGA_DEVICE(0x160A, info), /* GT1 Server */ \ INTEL_VGA_DEVICE(0x160D, info) /* GT1 Workstation */Quoted 8 lines
We'd split to:
#define INTEL_BDW_GT1_ULT_IDS(info) \ INTEL_VGA_DEVICE(0x1602, info), /* GT1 ULT */ \ INTEL_VGA_DEVICE(0x1606, info), /* GT1 ULT */ \#define INTEL_BDW_GT1_ULX_IDS(info) \ INTEL_VGA_DEVICE(0x160E, info), /* GT1 ULX */ \So far so good.
Quoted 5 lines
#define INTEL_BDW_GT1_IDS(info) \ INTEL_VGA_DEVICE(0x160B, info), /* GT1 Iris */ \ INTEL_VGA_DEVICE(0x160A, info), /* GT1 Server */ \ INTEL_VGA_DEVICE(0x160D, info) /* GT1 Workstation */Now include
INTEL_BDW_GT1_ULT_IDS(info)andINTEL_BDW_GT1_ULX_IDS(info)to the above...Quoted 7 lines
Then in
i915_pci.c, instead of:... INTEL_BDW_GT1_IDS(&intel_broadwell_gt1_info), ...Quoted 7 lines
We'd have:
... INTEL_BDW_GT1_ULT_IDS(&intel_broadwell_gt1_info), INTEL_BDW_GT1_ULX_IDS(&intel_broadwell_gt1_info), INTEL_BDW_GT1_IDS(&intel_broadwell_gt1_info), ......so you don't need to make this change at all. But that's a minor detail.
Quoted 6 lines
And a separate table to map the id's to subplatform values.
Hmm, but we would probably need to extrac the id's from the
INTEL_BDW1_GT_IDSlike macros so they can be used in this second site without the info parameter. Something like the trick for device info flags, but can it be made to generate a macro? I think not..Are we shy of macro magic? Pfft.
#undef
INTEL_VGA_DEVICE
#defineINTEL_VGA_DEVICE(id, info)(id)static const u32 bdw_ult_ids[] = { INTEL_BDW_GT1_ULT_IDS(0), };static const u32 bdw_ulx_ids[] = { INTEL_BDW_GT1_ULX_IDS(0), };#undef
INTEL_VGA_DEVICE
Quoted 7 lines
Now you can add another mapping on top with pointers to similar arrays as above and corresponding subplatform bits. Just need to order the code to not clobber the real
INTEL_VGA_DEVICEneeds.We don't need to split the ult/ulx tables by platform either if we only care about the subplatform ult/ulx here, just need to remember add all ult/ulx in corresponding arrays.
I eventually remember this thread/idea and have incorporated it into the latest series. Only on trybot for now, but you can have a peek if you want to see if it matches your expectations.
Regards,
Tvrtko
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
RFC 7/7 drm/i915: Remove double underscore from static device info member names
In reply to Tvrtko UrsulinFrom: Tvrtko Ursulin <[email protected]>
Now that the device info data is truly const and all call sites have been converted we can rely on read-only protection to notify us of any mistakes.
---
Or it may be a good idea to leave the double underscore in for protecting the in flight patches or in fact any future work.
--- drivers/gpu/drm/i915/i915_drv.c | 18 ++-- drivers/gpu/drm/i915/i915_pci.c | 114 +++++++++++------------ drivers/gpu/drm/i915/intel_device_info.c | 2 +- drivers/gpu/drm/i915/intel_device_info.h | 16 ++-- 4 files changed, 75 insertions(+), 75 deletions(-)
drivers/gpu/drm/i915/i915_drv.c +9 -9
@@ -1668,14 +1668,14 @@ i915_driver_create(struct pci_dev *pdev, const struct pci_device_id *ent)* Copy over entries that are both set statically but can also be * modified at runtime. */ - runtime_info->gen = device_info->__gen; - runtime_info->has_fbc = device_info->__has_fbc; - runtime_info->has_rc6 = device_info->__has_rc6; - runtime_info->has_rc6p = device_info->__has_rc6p; - runtime_info->ppgtt = device_info->__ppgtt; - runtime_info->page_sizes = device_info->__page_sizes; - runtime_info->ring_mask = device_info->__ring_mask; - runtime_info->num_pipes = device_info->__num_pipes; + runtime_info->gen = device_info->gen; + runtime_info->has_fbc = device_info->has_fbc; + runtime_info->has_rc6 = device_info->has_rc6; + runtime_info->has_rc6p = device_info->has_rc6p; + runtime_info->ppgtt = device_info->ppgtt; + runtime_info->page_sizes = device_info->page_sizes; + runtime_info->ring_mask = device_info->ring_mask; + runtime_info->num_pipes = device_info->num_pipes;/* * Initialize GEN and platform masks.
@@ -1727,7 +1727,7 @@ int i915_driver_load(struct pci_dev *pdev, const struct pci_device_id *ent)return PTR_ERR (dev_priv);/* Disable nuclear pageflip by default on pre-ILK */ -if (!i915_modparams.nuclear_pageflip && match_info->__gen <5 ) +if (!i915_modparams.nuclear_pageflip && match_info->gen <5 ) dev_priv->drm.driver_features &= ~DRIVER_ATOMIC ; ret =pci_enable_device (pdev);
drivers/gpu/drm/i915/i915_pci.c +57 -57
319 lines not on this page · raw message
drivers/gpu/drm/i915/intel_device_info.c +1 -1
@@ -130,7 +130,7 @@ void intel_device_info_dump(struct drm_i915_private *dev_priv,INTEL_DEVID (dev_priv),INTEL_REVID (dev_priv),intel_platform_name (INTEL_INFO (dev_priv)->platform), - INTEL_INFO(dev_priv)->__gen); + INTEL_GEN(dev_priv));intel_device_info_dump_flags (INTEL_INFO (dev_priv), p); }
drivers/gpu/drm/i915/intel_device_info.h +8 -8
@@ -93,7 +93,7 @@ enum intel_ppgtt {func (has_ddi); \func (has_dp_mst); \func (has_reset_engine); \ -func (__has_fbc); \ +func (has_fbc); \func (has_fpga_dbg); \func (has_gmch_display); \func (has_guc); \
@@ -106,8 +106,8 @@ enum intel_ppgtt {func (has_logical_ring_preemption); \func (has_overlay); \func (has_psr); \ -func (__has_rc6); \ -func (__has_rc6p); \ +func (has_rc6); \ +func (has_rc6p); \func (has_runtime_pm); \func (has_snoop); \func (has_coherent_ggtt); \
@@ -148,15 +148,15 @@ struct sseu_dev_info {typedef u8 intel_ring_mask_t ;struct intel_device_info { -u8 __gen; +u8 gen;u8 gt;/* GT number, 0 if undefined */ -intel_ring_mask_t __ring_mask;/* Rings supported by the HW */ -u8 __num_pipes; +intel_ring_mask_t ring_mask;/* Rings supported by the HW */ +u8 num_pipes;enum intel_platform platform; -enum intel_ppgtt __ppgtt; -unsigned int __page_sizes;/* page sizes supported by the HW */ +enum intel_ppgtt ppgtt; +unsigned int page_sizes;/* page sizes supported by the HW */ u32 display_mmio_offset;
Signature · 6 lines
2.19.1 _______________________________________________ Intel-gfx mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Patchwork
CI✗ Fi.CI.CHECKPATCH: warning for mkwrite_device_info removal
In reply to Tvrtko Ursulin== Series Details ==
== Series Details ==
Series: mkwrite_device_info removal
URL : https://patchwork.freedesktop.org/series/52381/
State : warning
== Summary ==
$ dim checkpatch origin/drm-tip 5d13c3c4a414 drm/i915: Remove has_pooled_eu static initializer fb31d94b767b drm/i915: Introduce runtime device info -:315: CHECK:MACRO_ARG_PRECEDENCE: Macro argument 'name' may be better as '(name)' to avoid precedence issues #315: FILE: drivers/gpu/drm/i915/intel_device_info.c:86: +#define PRINT_FLAG(name) drm_printf(p, "%s: %s\n", #name, yesno(info->name));
-:315: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon #315: FILE: drivers/gpu/drm/i915/intel_device_info.c:86:
+#define PRINT_FLAG(name) drm_printf(p, "%s: %s\n", #name, yesno(info->name));
-:571: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon #571: FILE: drivers/gpu/drm/i915/intel_device_info.h:183:
+#define DEV_RUNTIME_INFO_FOR_EACH_FLAG(func) \
+ func(has_pooled_eu); \
+
-:639: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'p' - possible side-effects? #639: FILE: drivers/gpu/drm/i915/intel_display.h:108:
+#define sprite_name(p, s) ((p) * dev_priv->runtime_info.num_sprites[(p)] + (s) + 'A')
total: 0 errors, 2 warnings, 2 checks, 709 lines checked4048ffe0db39 drm/i915: Move all runtime modified device info fields into runtime info -:9: WARNING:TYPO_SPELLING: 'overriden' may be misspelled - perhaps 'overridden'? #9:
there, but can be overriden at runtime.
-:113: WARNING:AVOID_BUG: Avoid crashing the kernel - try using WARN_ON & recovery code rather than BUG() or BUG_ON() #113: FILE: drivers/gpu/drm/i915/i915_drv.c:1665:
+ BUG_ON(device_info->__gen > BITS_PER_TYPE(device_info->gen_mask));
-:275: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'x' - possible side-effects? #275: FILE: drivers/gpu/drm/i915/i915_pci.c:33:
+#define GEN(x) .__gen = (x), .gen_mask = BIT((x) - 1)
total: 0 errors, 2 warnings, 1 checks, 972 lines checked 0f083e1ac103 drm/i915: Remove mkwrite_device_info
-:44: CHECK:MULTIPLE_ASSIGNMENTS: multiple assignments should be avoided #44: FILE: drivers/gpu/drm/i915/i915_drv.c:1657:
+ i915->info = device_info = match_info;
-:329: WARNING:LONG_LINE: line over 100 characters #329: FILE: drivers/gpu/drm/i915/i915_reg.h:186:
+ INTEL_INFO(dev_priv)->trans_offsets[TRANSCODER_A] + (reg) + \
-:332: WARNING:LONG_LINE: line over 100 characters #332: FILE: drivers/gpu/drm/i915/i915_reg.h:189:
+ INTEL_INFO(dev_priv)->cursor_offsets[PIPE_A] + (reg) + \
total: 0 errors, 2 warnings, 1 checks, 636 lines checked5df06a41ec00 drm/i915: Move gen and platform mask to runtime device info
-:38: WARNING:AVOID_BUG: Avoid crashing the kernel - try using WARN_ON & recovery code rather than BUG() or BUG_ON() #38: FILE: drivers/gpu/drm/i915/i915_drv.c:1686:
+ BUG_ON(INTEL_GEN(i915) > BITS_PER_TYPE(runtime_info->gen_mask));
total: 0 errors, 1 warnings, 0 checks, 120 lines checkedf2178767efa7 drm/i915: Introduce subplatform concept
-:41: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'dev_priv' - possible side-effects? #41: FILE: drivers/gpu/drm/i915/i915_drv.h:2380:
+#define IS_SUBPLATFORM(dev_priv, p, s) \
+ (IS_PLATFORM(dev_priv, p) && \
+ ((dev_priv)->runtime_info.subplatform_mask & \
+ BIT(INTEL_SUBPLATFORM_##s)))
-:164: WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (8, 24) #164: FILE: drivers/gpu/drm/i915/intel_device_info.c:744:
+ } else if (IS_IRONLAKE(i915) && devid == 0x0046) {
+ info->subplatform_mask =
total: 0 errors, 1 warnings, 1 checks, 213 lines checkeda5943656b1ec drm/i915: Remove double underscore from static device info member names
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Patchwork
CI✗ Fi.CI.SPARSE: warning for mkwrite_device_info removal
In reply to Tvrtko Ursulin== Series Details ==
== Series Details ==
Series: mkwrite_device_info removal
URL : https://patchwork.freedesktop.org/series/52381/
State : warning
== Summary ==
$ dim sparse origin/drm-tip Sparse version: v0.5.2 Commit: drm/i915: Remove has_pooled_eu static initializer Okay!
Commit: drm/i915: Introduce runtime device info+drivers/gpu/drm/i915/intel_device_info.c:83:1: warning: symbol 'intel_runtime_device_info_dump_flags' was not declared. Should it be static? -drivers/gpu/drm/i915/selftests/../i915_drv.h:3714:16: warning: expression using sizeof(void) +drivers/gpu/drm/i915/selftests/../i915_drv.h:3715:16: warning: expression using sizeof(void)
Commit: drm/i915: Move all runtime modified device info fields into runtime info Okay!
Commit: drm/i915: Remove mkwrite_device_info -drivers/gpu/drm/i915/selftests/../i915_drv.h:3715:16: warning: expression using sizeof(void) +drivers/gpu/drm/i915/selftests/../i915_drv.h:3702:16: warning: expression using sizeof(void)
Commit: drm/i915: Move gen and platform mask to runtime device info -drivers/gpu/drm/i915/selftests/../i915_drv.h:3702:16: warning: expression using sizeof(void) +drivers/gpu/drm/i915/selftests/../i915_drv.h:3706:16: warning: expression using sizeof(void)
Commit: drm/i915: Introduce subplatform concept -drivers/gpu/drm/i915/selftests/../i915_drv.h:3706:16: warning: expression using sizeof(void) +drivers/gpu/drm/i915/selftests/../i915_drv.h:3693:16: warning: expression using sizeof(void)
Commit: drm/i915: Remove double underscore from static device info member names Okay!
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Patchwork
CI✗ Fi.CI.BAT: failure for mkwrite_device_info removal
In reply to Tvrtko Ursulin== Series Details ==
== Series Details ==
Series: mkwrite_device_info removal
URL : https://patchwork.freedesktop.org/series/52381/
State : failure
== Summary ==
= CI Bug Log - changes from CI_DRM_5126 -> Patchwork_10807 =
== Summary - FAILURE ==
Serious unknown changes coming with Patchwork_10807 absolutely need to be verified manually.
If you think the reported changes have nothing to do with the changes introduced in Patchwork_10807, please notify your bug team to allow them to document this new failure mode, which will reduce false positives in CI.
External URL: https://patchwork.freedesktop.org/api/1.0/series/52381/revisions/1/mbox/
== Possible new issues ==
Here are the unknown changes that may have been introduced in Patchwork_10807:
=== IGT changes ===
==== Possible regressions ====
igt@drv_selftest@live_hangcheck:
fi-bwr-2160: PASS -> DMESG-FAIL== Known issues ==
Here are the changes found in Patchwork_10807 that come from known issues:
=== IGT changes ===
==== Issues hit ====
igt@gem_exec_suspend@basic-s3:
fi-blb-e6850: PASS -> INCOMPLETE (fdo#107718)
fi-icl-u: PASS -> INCOMPLETE (fdo#107713)
igt@kms_chamelium@common-hpd-after-suspend:
fi-skl-6700k2: PASS -> WARN (fdo#108680)
==== Possible fixes ====
igt@kms_pipe_crc_basic@nonblocking-crc-pipe-b-frame-sequence:
fi-byt-clapper: FAIL (fdo#103191, fdo#107362) -> PASS fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
fdo#107362 https://bugs.freedesktop.org/show_bug.cgi?id=107362
fdo#107713 https://bugs.freedesktop.org/show_bug.cgi?id=107713
fdo#107718 https://bugs.freedesktop.org/show_bug.cgi?id=107718
fdo#108680 https://bugs.freedesktop.org/show_bug.cgi?id=108680
== Participating hosts (51 -> 46) ==
Missing (5): fi-kbl-soraka fi-ilk-m540 fi-byt-squawks fi-bsw-cyan fi-ctg-p8600
== Build changes ==
* Linux: CI_DRM_5126 -> Patchwork_10807
CI_DRM_5126: 1465b00c43e237ca0064d75283ef305eea5549a4 @ git://anongit.freedesktop.org/gfx-ci/linux
IGT_4714: cab148ca3ec904a94d0cd43476cf7e1f8663f906 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
Patchwork_10807: a5943656b1ec6860caeb895d33ec25a8ae44b583 @ git://anongit.freedesktop.org/gfx-ci/linux
== Linux commits ==
a5943656b1ec drm/i915: Remove double underscore from static device info member names f2178767efa7 drm/i915: Introduce subplatform concept5df06a41ec00 drm/i915: Move gen and platform mask to runtime device info 0f083e1ac103 drm/i915: Remove mkwrite_device_info4048ffe0db39 drm/i915: Move all runtime modified device info fields into runtime info fb31d94b767b drm/i915: Introduce runtime device info5d13c3c4a414 drm/i915: Remove has_pooled_eu static initializer
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_10807/issues.html
_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx