sizeof(struct intel_dmc) > 1024 bytes, allocated on all platforms as part of struct drm_i915_private, whether they have DMC or not. Allocate struct intel_dmc dynamically, and hide all the dmc details behind an opaque pointer in intel_dmc.c. Care must be taken to take into account all cases: DMC not supported on the platform, DMC supported but not initialized, and DMC initialized but not loaded. For the second case, we need to move the wakeref out of struct intel_dmc. v2: - Rebase to kzalloc dmc after runtime pm get (Imre) Cc: Imre Deak <imre.deak@intel.com> Reviewed-by: Imre Deak <imre.deak@intel.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20230301122944.1298929-4-jani.nikula@intel.com
30 lines
1 KiB
C
30 lines
1 KiB
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright © 2019 Intel Corporation
|
|
*/
|
|
|
|
#ifndef __INTEL_DMC_H__
|
|
#define __INTEL_DMC_H__
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct drm_i915_error_state_buf;
|
|
struct drm_i915_private;
|
|
enum pipe;
|
|
|
|
void intel_dmc_init(struct drm_i915_private *i915);
|
|
void intel_dmc_load_program(struct drm_i915_private *i915);
|
|
void intel_dmc_disable_program(struct drm_i915_private *i915);
|
|
void intel_dmc_enable_pipe(struct drm_i915_private *i915, enum pipe pipe);
|
|
void intel_dmc_disable_pipe(struct drm_i915_private *i915, enum pipe pipe);
|
|
void intel_dmc_fini(struct drm_i915_private *i915);
|
|
void intel_dmc_suspend(struct drm_i915_private *i915);
|
|
void intel_dmc_resume(struct drm_i915_private *i915);
|
|
bool intel_dmc_has_payload(struct drm_i915_private *i915);
|
|
void intel_dmc_debugfs_register(struct drm_i915_private *i915);
|
|
void intel_dmc_print_error_state(struct drm_i915_error_state_buf *m,
|
|
struct drm_i915_private *i915);
|
|
|
|
void assert_dmc_loaded(struct drm_i915_private *i915);
|
|
|
|
#endif /* __INTEL_DMC_H__ */
|