mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 09:19:51 +00:00
![Animesh Manna](/assets/img/avatar_default.png)
Pre-allocate command buffer in atomic_commit using intel_dsb_prepare function which also includes pinning and map in cpu domain. No functional change is dsb write/commit functions. Now dsb get/put function is removed and ref-count mechanism is not needed. Below dsb api added to do respective job mentioned below. intel_dsb_prepare - Allocate, pin and map the buffer. intel_dsb_cleanup - Unpin and release the gem object. RFC: Initial patch for design review. v2: included _init() part in _prepare(). [Daniel, Ville] v3: dsb_cleanup called after cleanup_planes. [Daniel] v4: dsb structure is moved to intel_crtc_state from intel_crtc. [Maarten] v5: dsb get/put/ref-count mechanism removed. [Maarten] v6: Based on review feedback following changes are added, - replaced intel_dsb structure by pointer in intel_crtc_state. [Maarten] - passing intel_crtc_state to dsp-api to simplify the code. [Maarten] - few dsb functions prototype modified to simplify code. v7: added few cosmetic changes suggested by Jani and null check for crtc_state in dsb_cleanup removed as suggested by Maarten. v8: changed the function parameter to intel_crtc_state* of ivb_load_lut_ext_max() from intel_crtc. [Maarten] v9: error handling improved in _write() and prepare(). [Maarten] Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: Jani Nikula <jani.nikula@intel.com> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch> Reviewed-by: Maarten Lankhorst <maarten.lankhorst@intel.com> Signed-off-by: Animesh Manna <animesh.manna@intel.com> Signed-off-by: Uma Shankar <uma.shankar@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200520130737.11240-1-animesh.manna@intel.com
51 lines
1.1 KiB
C
51 lines
1.1 KiB
C
/* SPDX-License-Identifier: MIT
|
|
*
|
|
* Copyright © 2019 Intel Corporation
|
|
*/
|
|
|
|
#ifndef _INTEL_DSB_H
|
|
#define _INTEL_DSB_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
#include "i915_reg.h"
|
|
|
|
struct intel_crtc_state;
|
|
struct i915_vma;
|
|
|
|
enum dsb_id {
|
|
INVALID_DSB = -1,
|
|
DSB1,
|
|
DSB2,
|
|
DSB3,
|
|
MAX_DSB_PER_PIPE
|
|
};
|
|
|
|
struct intel_dsb {
|
|
enum dsb_id id;
|
|
u32 *cmd_buf;
|
|
struct i915_vma *vma;
|
|
|
|
/*
|
|
* free_pos will point the first free entry position
|
|
* and help in calculating tail of command buffer.
|
|
*/
|
|
int free_pos;
|
|
|
|
/*
|
|
* ins_start_offset will help to store start address of the dsb
|
|
* instuction and help in identifying the batch of auto-increment
|
|
* register.
|
|
*/
|
|
u32 ins_start_offset;
|
|
};
|
|
|
|
void intel_dsb_prepare(struct intel_crtc_state *crtc_state);
|
|
void intel_dsb_cleanup(struct intel_crtc_state *crtc_state);
|
|
void intel_dsb_reg_write(const struct intel_crtc_state *crtc_state,
|
|
i915_reg_t reg, u32 val);
|
|
void intel_dsb_indexed_reg_write(const struct intel_crtc_state *crtc_state,
|
|
i915_reg_t reg, u32 val);
|
|
void intel_dsb_commit(const struct intel_crtc_state *crtc_state);
|
|
|
|
#endif
|