Commit f28ec6f4 authored by Imre Deak's avatar Imre Deak

drm/i915: Constify power well descriptors

It makes sense to keep unchanging data const. Extract such fields from
the i915_power_well struct into a new i915_power_well_desc struct that
we initialize during compile time. For the rest of the dynamic
fields allocate an array of i915_power_well objects in i915 dev_priv,
and link to each of these objects their corresponding
i915_power_well_desc object.

v2:
- Fix checkpatch warnings about missing param name in fn declaration and
  lines over 80 chars. (Paulo)
- Move check for unique IDs to __set_power_wells().

Cc: Ville Syrjala <ville.syrjala@linux.intel.com>
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarImre Deak <imre.deak@intel.com>
[Fixed checkpatch warn in __set_power_wells()]
Reviewed-by: default avatarPaulo Zanoni <paulo.r.zanoni@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180806095843.13294-5-imre.deak@intel.com
parent 3ae27f7e
...@@ -2845,10 +2845,10 @@ static int i915_power_domain_info(struct seq_file *m, void *unused) ...@@ -2845,10 +2845,10 @@ static int i915_power_domain_info(struct seq_file *m, void *unused)
enum intel_display_power_domain power_domain; enum intel_display_power_domain power_domain;
power_well = &power_domains->power_wells[i]; power_well = &power_domains->power_wells[i];
seq_printf(m, "%-25s %d\n", power_well->name, seq_printf(m, "%-25s %d\n", power_well->desc->name,
power_well->count); power_well->count);
for_each_power_domain(power_domain, power_well->domains) for_each_power_domain(power_domain, power_well->desc->domains)
seq_printf(m, " %-23s %d\n", seq_printf(m, " %-23s %d\n",
intel_display_power_domain_str(power_domain), intel_display_power_domain_str(power_domain),
power_domains->domain_use_count[power_domain]); power_domains->domain_use_count[power_domain]);
......
...@@ -924,7 +924,9 @@ static int i915_driver_init_early(struct drm_i915_private *dev_priv, ...@@ -924,7 +924,9 @@ static int i915_driver_init_early(struct drm_i915_private *dev_priv,
intel_uc_init_early(dev_priv); intel_uc_init_early(dev_priv);
intel_pm_setup(dev_priv); intel_pm_setup(dev_priv);
intel_init_dpio(dev_priv); intel_init_dpio(dev_priv);
intel_power_domains_init(dev_priv); ret = intel_power_domains_init(dev_priv);
if (ret < 0)
goto err_uc;
intel_irq_init(dev_priv); intel_irq_init(dev_priv);
intel_hangcheck_init(dev_priv); intel_hangcheck_init(dev_priv);
intel_init_display_hooks(dev_priv); intel_init_display_hooks(dev_priv);
...@@ -936,6 +938,9 @@ static int i915_driver_init_early(struct drm_i915_private *dev_priv, ...@@ -936,6 +938,9 @@ static int i915_driver_init_early(struct drm_i915_private *dev_priv,
return 0; return 0;
err_uc:
intel_uc_cleanup_early(dev_priv);
i915_gem_cleanup_early(dev_priv);
err_workqueues: err_workqueues:
i915_workqueues_cleanup(dev_priv); i915_workqueues_cleanup(dev_priv);
err_engines: err_engines:
...@@ -950,6 +955,7 @@ static int i915_driver_init_early(struct drm_i915_private *dev_priv, ...@@ -950,6 +955,7 @@ static int i915_driver_init_early(struct drm_i915_private *dev_priv,
static void i915_driver_cleanup_early(struct drm_i915_private *dev_priv) static void i915_driver_cleanup_early(struct drm_i915_private *dev_priv)
{ {
intel_irq_fini(dev_priv); intel_irq_fini(dev_priv);
intel_power_domains_cleanup(dev_priv);
intel_uc_cleanup_early(dev_priv); intel_uc_cleanup_early(dev_priv);
i915_gem_cleanup_early(dev_priv); i915_gem_cleanup_early(dev_priv);
i915_workqueues_cleanup(dev_priv); i915_workqueues_cleanup(dev_priv);
......
...@@ -868,13 +868,9 @@ struct i915_power_well_ops { ...@@ -868,13 +868,9 @@ struct i915_power_well_ops {
}; };
/* Power well structure for haswell */ /* Power well structure for haswell */
struct i915_power_well { struct i915_power_well_desc {
const char *name; const char *name;
bool always_on; bool always_on;
/* power well enable/disable usage count */
int count;
/* cached hw enabled state */
bool hw_enabled;
u64 domains; u64 domains;
/* unique identifier for this power well */ /* unique identifier for this power well */
enum i915_power_well_id id; enum i915_power_well_id id;
...@@ -897,6 +893,14 @@ struct i915_power_well { ...@@ -897,6 +893,14 @@ struct i915_power_well {
const struct i915_power_well_ops *ops; const struct i915_power_well_ops *ops;
}; };
struct i915_power_well {
const struct i915_power_well_desc *desc;
/* power well enable/disable usage count */
int count;
/* cached hw enabled state */
bool hw_enabled;
};
struct i915_power_domains { struct i915_power_domains {
/* /*
* Power wells needed for initialization at driver init and suspend * Power wells needed for initialization at driver init and suspend
......
...@@ -329,11 +329,11 @@ struct intel_link_m_n { ...@@ -329,11 +329,11 @@ struct intel_link_m_n {
#define for_each_power_domain_well(__dev_priv, __power_well, __domain_mask) \ #define for_each_power_domain_well(__dev_priv, __power_well, __domain_mask) \
for_each_power_well(__dev_priv, __power_well) \ for_each_power_well(__dev_priv, __power_well) \
for_each_if((__power_well)->domains & (__domain_mask)) for_each_if((__power_well)->desc->domains & (__domain_mask))
#define for_each_power_domain_well_rev(__dev_priv, __power_well, __domain_mask) \ #define for_each_power_domain_well_rev(__dev_priv, __power_well, __domain_mask) \
for_each_power_well_rev(__dev_priv, __power_well) \ for_each_power_well_rev(__dev_priv, __power_well) \
for_each_if((__power_well)->domains & (__domain_mask)) for_each_if((__power_well)->desc->domains & (__domain_mask))
#define for_each_new_intel_plane_in_state(__state, plane, new_plane_state, __i) \ #define for_each_new_intel_plane_in_state(__state, plane, new_plane_state, __i) \
for ((__i) = 0; \ for ((__i) = 0; \
......
...@@ -1948,6 +1948,7 @@ int intel_psr_wait_for_idle(const struct intel_crtc_state *new_crtc_state); ...@@ -1948,6 +1948,7 @@ int intel_psr_wait_for_idle(const struct intel_crtc_state *new_crtc_state);
/* intel_runtime_pm.c */ /* intel_runtime_pm.c */
int intel_power_domains_init(struct drm_i915_private *); int intel_power_domains_init(struct drm_i915_private *);
void intel_power_domains_cleanup(struct drm_i915_private *dev_priv);
void intel_power_domains_init_hw(struct drm_i915_private *dev_priv, bool resume); void intel_power_domains_init_hw(struct drm_i915_private *dev_priv, bool resume);
void intel_power_domains_fini_hw(struct drm_i915_private *dev_priv); void intel_power_domains_fini_hw(struct drm_i915_private *dev_priv);
void intel_power_domains_suspend(struct drm_i915_private *dev_priv); void intel_power_domains_suspend(struct drm_i915_private *dev_priv);
......
...@@ -57,9 +57,9 @@ static bool hdcp_key_loadable(struct drm_i915_private *dev_priv) ...@@ -57,9 +57,9 @@ static bool hdcp_key_loadable(struct drm_i915_private *dev_priv)
/* PG1 (power well #1) needs to be enabled */ /* PG1 (power well #1) needs to be enabled */
for_each_power_well(dev_priv, power_well) { for_each_power_well(dev_priv, power_well) {
if (power_well->id == id) { if (power_well->desc->id == id) {
enabled = power_well->ops->is_enabled(dev_priv, enabled = power_well->desc->ops->is_enabled(dev_priv,
power_well); power_well);
break; break;
} }
} }
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment