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 */