Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved
  4 */
  5
  6#ifndef _DPU_HW_WB_H
  7#define _DPU_HW_WB_H
  8
  9#include "dpu_hw_catalog.h"
 10#include "dpu_hw_mdss.h"
 11#include "dpu_hw_top.h"
 12#include "dpu_hw_util.h"
 13#include "dpu_hw_pingpong.h"
 14
 15struct dpu_hw_wb;
 16
 17struct dpu_hw_wb_cfg {
 18	struct dpu_hw_fmt_layout dest;
 19	enum dpu_intf_mode intf_mode;
 20	struct drm_rect roi;
 21	struct drm_rect crop;
 22};
 23
 24/**
 25 * enum CDP preload ahead address size
 26 */
 27enum {
 28	DPU_WB_CDP_PRELOAD_AHEAD_32,
 29	DPU_WB_CDP_PRELOAD_AHEAD_64
 30};
 31
 32/**
 33 * struct dpu_hw_wb_qos_cfg : Writeback pipe QoS configuration
 34 * @danger_lut: LUT for generate danger level based on fill level
 35 * @safe_lut: LUT for generate safe level based on fill level
 36 * @creq_lut: LUT for generate creq level based on fill level
 37 * @danger_safe_en: enable danger safe generation
 38 */
 39struct dpu_hw_wb_qos_cfg {
 40	u32 danger_lut;
 41	u32 safe_lut;
 42	u64 creq_lut;
 43	bool danger_safe_en;
 44};
 45
 46/**
 47 *
 48 * struct dpu_hw_wb_ops : Interface to the wb hw driver functions
 49 *  Assumption is these functions will be called after clocks are enabled
 50 *  @setup_outaddress: setup output address from the writeback job
 51 *  @setup_outformat: setup output format of writeback block from writeback job
 52 *  @setup_qos_lut:   setup qos LUT for writeback block based on input
 53 *  @setup_cdp:       setup chroma down prefetch block for writeback block
 54 *  @bind_pingpong_blk: enable/disable the connection with ping-pong block
 55 */
 56struct dpu_hw_wb_ops {
 57	void (*setup_outaddress)(struct dpu_hw_wb *ctx,
 58			struct dpu_hw_wb_cfg *wb);
 59
 60	void (*setup_outformat)(struct dpu_hw_wb *ctx,
 61			struct dpu_hw_wb_cfg *wb);
 62
 63	void (*setup_roi)(struct dpu_hw_wb *ctx,
 64			struct dpu_hw_wb_cfg *wb);
 65
 66	void (*setup_qos_lut)(struct dpu_hw_wb *ctx,
 67			struct dpu_hw_wb_qos_cfg *cfg);
 68
 69	void (*setup_cdp)(struct dpu_hw_wb *ctx,
 70			struct dpu_hw_cdp_cfg *cfg);
 71
 72	void (*bind_pingpong_blk)(struct dpu_hw_wb *ctx,
 73			bool enable, const enum dpu_pingpong pp);
 74};
 75
 76/**
 77 * struct dpu_hw_wb : WB driver object
 78 * @hw: block hardware details
 79 * @mdp: pointer to associated mdp portion of the catalog
 80 * @idx: hardware index number within type
 81 * @wb_hw_caps: hardware capabilities
 82 * @ops: function pointers
 83 * @hw_mdp: MDP top level hardware block
 84 */
 85struct dpu_hw_wb {
 86	struct dpu_hw_blk_reg_map hw;
 87	const struct dpu_mdp_cfg *mdp;
 88
 89	/* wb path */
 90	int idx;
 91	const struct dpu_wb_cfg *caps;
 92
 93	/* ops */
 94	struct dpu_hw_wb_ops ops;
 95
 96	struct dpu_hw_mdp *hw_mdp;
 97};
 98
 99/**
100 * dpu_hw_wb_init(): Initializes and return writeback hw driver object.
101 * @idx:  wb_path index for which driver object is required
102 * @addr: mapped register io address of MDP
103 * @m :   pointer to mdss catalog data
104 */
105struct dpu_hw_wb *dpu_hw_wb_init(enum dpu_wb idx,
106		void __iomem *addr,
107		const struct dpu_mdss_cfg *m);
108
109/**
110 * dpu_hw_wb_destroy(): Destroy writeback hw driver object.
111 * @hw_wb:  Pointer to writeback hw driver object
112 */
113void dpu_hw_wb_destroy(struct dpu_hw_wb *hw_wb);
114
115#endif /*_DPU_HW_WB_H */