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
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			52 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
 |