mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-11 16:56:14 -04:00
drm/i915/wm: move remaining watermark code out of intel_pm.c
Add new files intel_wm.[ch] and i9xx_wm.[ch] under display/ to hold generic and pre-SKL watermark code, respectively. SKL+ watermark code has already been split out to skl_watermark.[ch]. Use the _wm.[ch] naming for brevity; we may want to rename skl_watermark.[ch] later accordingly. Add new intel_wm_init() to call either skl_wm_init() or i9xx_wm_init(i915) depending on the platform, the latter comprising of the remains of intel_init_pm(). Sprinkle in some minor checkpatch fixes while moving the code. v2: - Rebase - Fix copyright year Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/ddf04a07a37f0368b3fef85d4ebb924082fec6cd.1676317696.git.jani.nikula@intel.com
This commit is contained in:
@@ -269,7 +269,9 @@ i915-y += \
|
||||
display/intel_tc.o \
|
||||
display/intel_vblank.o \
|
||||
display/intel_vga.o \
|
||||
display/intel_wm.o \
|
||||
display/i9xx_plane.o \
|
||||
display/i9xx_wm.o \
|
||||
display/skl_scaler.o \
|
||||
display/skl_universal_plane.o \
|
||||
display/skl_watermark.o
|
||||
|
||||
3922
drivers/gpu/drm/i915/display/i9xx_wm.c
Normal file
3922
drivers/gpu/drm/i915/display/i9xx_wm.c
Normal file
File diff suppressed because it is too large
Load Diff
25
drivers/gpu/drm/i915/display/i9xx_wm.h
Normal file
25
drivers/gpu/drm/i915/display/i9xx_wm.h
Normal file
@@ -0,0 +1,25 @@
|
||||
/* SPDX-License-Identifier: MIT */
|
||||
/*
|
||||
* Copyright © 2023 Intel Corporation
|
||||
*/
|
||||
|
||||
#ifndef __I9XX_WM_H__
|
||||
#define __I9XX_WM_H__
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct drm_i915_private;
|
||||
struct intel_crtc_state;
|
||||
struct intel_plane_state;
|
||||
|
||||
int ilk_wm_max_level(const struct drm_i915_private *i915);
|
||||
void g4x_wm_get_hw_state(struct drm_i915_private *i915);
|
||||
void vlv_wm_get_hw_state(struct drm_i915_private *i915);
|
||||
void ilk_wm_get_hw_state(struct drm_i915_private *i915);
|
||||
void g4x_wm_sanitize(struct drm_i915_private *i915);
|
||||
void vlv_wm_sanitize(struct drm_i915_private *i915);
|
||||
bool ilk_disable_lp_wm(struct drm_i915_private *i915);
|
||||
bool intel_set_memory_cxsr(struct drm_i915_private *i915, bool enable);
|
||||
void i9xx_wm_init(struct drm_i915_private *i915);
|
||||
|
||||
#endif /* __I9XX_WM_H__ */
|
||||
@@ -55,6 +55,7 @@
|
||||
#include "i915_reg.h"
|
||||
#include "i915_utils.h"
|
||||
#include "i9xx_plane.h"
|
||||
#include "i9xx_wm.h"
|
||||
#include "icl_dsi.h"
|
||||
#include "intel_acpi.h"
|
||||
#include "intel_atomic.h"
|
||||
@@ -117,6 +118,7 @@
|
||||
#include "intel_vdsc.h"
|
||||
#include "intel_vga.h"
|
||||
#include "intel_vrr.h"
|
||||
#include "intel_wm.h"
|
||||
#include "skl_scaler.h"
|
||||
#include "skl_universal_plane.h"
|
||||
#include "skl_watermark.h"
|
||||
@@ -8699,7 +8701,7 @@ int intel_modeset_init_nogem(struct drm_i915_private *i915)
|
||||
if (!HAS_DISPLAY(i915))
|
||||
return 0;
|
||||
|
||||
intel_init_pm(i915);
|
||||
intel_wm_init(i915);
|
||||
|
||||
intel_panel_sanitize_ssc(i915);
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "i915_debugfs.h"
|
||||
#include "i915_irq.h"
|
||||
#include "i915_reg.h"
|
||||
#include "i9xx_wm.h"
|
||||
#include "intel_de.h"
|
||||
#include "intel_display_debugfs.h"
|
||||
#include "intel_display_power.h"
|
||||
|
||||
@@ -1505,17 +1505,6 @@ struct intel_watermark_params {
|
||||
u8 cacheline_size;
|
||||
};
|
||||
|
||||
struct cxsr_latency {
|
||||
bool is_desktop : 1;
|
||||
bool is_ddr3 : 1;
|
||||
u16 fsb_freq;
|
||||
u16 mem_freq;
|
||||
u16 display_sr;
|
||||
u16 display_hpll_disable;
|
||||
u16 cursor_sr;
|
||||
u16 cursor_hpll_disable;
|
||||
};
|
||||
|
||||
#define to_intel_atomic_state(x) container_of(x, struct intel_atomic_state, base)
|
||||
#define to_intel_crtc(x) container_of(x, struct intel_crtc, base)
|
||||
#define to_intel_crtc_state(x) container_of(x, struct intel_crtc_state, uapi)
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
#include "i915_drv.h"
|
||||
#include "i915_reg.h"
|
||||
#include "i9xx_wm.h"
|
||||
#include "intel_atomic.h"
|
||||
#include "intel_bw.h"
|
||||
#include "intel_color.h"
|
||||
|
||||
71
drivers/gpu/drm/i915/display/intel_wm.c
Normal file
71
drivers/gpu/drm/i915/display/intel_wm.c
Normal file
@@ -0,0 +1,71 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
/*
|
||||
* Copyright © 2023 Intel Corporation
|
||||
*/
|
||||
|
||||
#include "i915_drv.h"
|
||||
#include "i9xx_wm.h"
|
||||
#include "intel_display_types.h"
|
||||
#include "intel_wm.h"
|
||||
#include "skl_watermark.h"
|
||||
|
||||
bool intel_wm_plane_visible(const struct intel_crtc_state *crtc_state,
|
||||
const struct intel_plane_state *plane_state)
|
||||
{
|
||||
struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
|
||||
|
||||
/* FIXME check the 'enable' instead */
|
||||
if (!crtc_state->hw.active)
|
||||
return false;
|
||||
|
||||
/*
|
||||
* Treat cursor with fb as always visible since cursor updates
|
||||
* can happen faster than the vrefresh rate, and the current
|
||||
* watermark code doesn't handle that correctly. Cursor updates
|
||||
* which set/clear the fb or change the cursor size are going
|
||||
* to get throttled by intel_legacy_cursor_update() to work
|
||||
* around this problem with the watermark code.
|
||||
*/
|
||||
if (plane->id == PLANE_CURSOR)
|
||||
return plane_state->hw.fb != NULL;
|
||||
else
|
||||
return plane_state->uapi.visible;
|
||||
}
|
||||
|
||||
void intel_print_wm_latency(struct drm_i915_private *dev_priv,
|
||||
const char *name, const u16 wm[])
|
||||
{
|
||||
int level;
|
||||
|
||||
for (level = 0; level < dev_priv->display.wm.num_levels; level++) {
|
||||
unsigned int latency = wm[level];
|
||||
|
||||
if (latency == 0) {
|
||||
drm_dbg_kms(&dev_priv->drm,
|
||||
"%s WM%d latency not provided\n",
|
||||
name, level);
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* - latencies are in us on gen9.
|
||||
* - before then, WM1+ latency values are in 0.5us units
|
||||
*/
|
||||
if (DISPLAY_VER(dev_priv) >= 9)
|
||||
latency *= 10;
|
||||
else if (level > 0)
|
||||
latency *= 5;
|
||||
|
||||
drm_dbg_kms(&dev_priv->drm,
|
||||
"%s WM%d latency %u (%u.%u usec)\n", name, level,
|
||||
wm[level], latency / 10, latency % 10);
|
||||
}
|
||||
}
|
||||
|
||||
void intel_wm_init(struct drm_i915_private *i915)
|
||||
{
|
||||
if (DISPLAY_VER(i915) >= 9)
|
||||
skl_wm_init(i915);
|
||||
else
|
||||
i9xx_wm_init(i915);
|
||||
}
|
||||
21
drivers/gpu/drm/i915/display/intel_wm.h
Normal file
21
drivers/gpu/drm/i915/display/intel_wm.h
Normal file
@@ -0,0 +1,21 @@
|
||||
/* SPDX-License-Identifier: MIT */
|
||||
/*
|
||||
* Copyright © 2023 Intel Corporation
|
||||
*/
|
||||
|
||||
#ifndef __INTEL_WM_H__
|
||||
#define __INTEL_WM_H__
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
struct drm_i915_private;
|
||||
struct intel_crtc_state;
|
||||
struct intel_plane_state;
|
||||
|
||||
bool intel_wm_plane_visible(const struct intel_crtc_state *crtc_state,
|
||||
const struct intel_plane_state *plane_state);
|
||||
void intel_print_wm_latency(struct drm_i915_private *i915,
|
||||
const char *name, const u16 wm[]);
|
||||
void intel_wm_init(struct drm_i915_private *i915);
|
||||
|
||||
#endif /* __INTEL_WM_H__ */
|
||||
@@ -5,6 +5,10 @@
|
||||
|
||||
#include <drm/drm_blend.h>
|
||||
|
||||
#include "i915_drv.h"
|
||||
#include "i915_fixed.h"
|
||||
#include "i915_reg.h"
|
||||
#include "i9xx_wm.h"
|
||||
#include "intel_atomic.h"
|
||||
#include "intel_atomic_plane.h"
|
||||
#include "intel_bw.h"
|
||||
@@ -13,13 +17,10 @@
|
||||
#include "intel_display_power.h"
|
||||
#include "intel_display_types.h"
|
||||
#include "intel_fb.h"
|
||||
#include "skl_watermark.h"
|
||||
|
||||
#include "i915_drv.h"
|
||||
#include "i915_fixed.h"
|
||||
#include "i915_reg.h"
|
||||
#include "intel_pcode.h"
|
||||
#include "intel_pm.h"
|
||||
#include "intel_wm.h"
|
||||
#include "skl_watermark.h"
|
||||
|
||||
static void skl_sagv_disable(struct drm_i915_private *i915);
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -14,20 +14,7 @@ struct intel_plane_state;
|
||||
|
||||
void intel_init_clock_gating(struct drm_i915_private *dev_priv);
|
||||
void intel_suspend_hw(struct drm_i915_private *dev_priv);
|
||||
void intel_init_pm(struct drm_i915_private *dev_priv);
|
||||
void intel_init_clock_gating_hooks(struct drm_i915_private *dev_priv);
|
||||
void intel_pm_setup(struct drm_i915_private *dev_priv);
|
||||
void g4x_wm_get_hw_state(struct drm_i915_private *dev_priv);
|
||||
void vlv_wm_get_hw_state(struct drm_i915_private *dev_priv);
|
||||
void ilk_wm_get_hw_state(struct drm_i915_private *dev_priv);
|
||||
void g4x_wm_sanitize(struct drm_i915_private *dev_priv);
|
||||
void vlv_wm_sanitize(struct drm_i915_private *dev_priv);
|
||||
bool ilk_disable_lp_wm(struct drm_i915_private *dev_priv);
|
||||
bool intel_wm_plane_visible(const struct intel_crtc_state *crtc_state,
|
||||
const struct intel_plane_state *plane_state);
|
||||
void intel_print_wm_latency(struct drm_i915_private *dev_priv,
|
||||
const char *name, const u16 wm[]);
|
||||
|
||||
bool intel_set_memory_cxsr(struct drm_i915_private *dev_priv, bool enable);
|
||||
|
||||
#endif /* __INTEL_PM_H__ */
|
||||
|
||||
Reference in New Issue
Block a user