197fb5e8dSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 225fdd593SJeykumar Sankaran /* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved. 325fdd593SJeykumar Sankaran */ 425fdd593SJeykumar Sankaran 525fdd593SJeykumar Sankaran #ifndef _DPU_HW_VBIF_H 625fdd593SJeykumar Sankaran #define _DPU_HW_VBIF_H 725fdd593SJeykumar Sankaran 825fdd593SJeykumar Sankaran #include "dpu_hw_catalog.h" 925fdd593SJeykumar Sankaran #include "dpu_hw_mdss.h" 1025fdd593SJeykumar Sankaran #include "dpu_hw_util.h" 1125fdd593SJeykumar Sankaran 1225fdd593SJeykumar Sankaran struct dpu_hw_vbif; 1325fdd593SJeykumar Sankaran 1425fdd593SJeykumar Sankaran /** 1525fdd593SJeykumar Sankaran * struct dpu_hw_vbif_ops : Interface to the VBIF hardware driver functions 1625fdd593SJeykumar Sankaran * Assumption is these functions will be called after clocks are enabled 1725fdd593SJeykumar Sankaran */ 1825fdd593SJeykumar Sankaran struct dpu_hw_vbif_ops { 1925fdd593SJeykumar Sankaran /** 2025fdd593SJeykumar Sankaran * set_limit_conf - set transaction limit config 2125fdd593SJeykumar Sankaran * @vbif: vbif context driver 2225fdd593SJeykumar Sankaran * @xin_id: client interface identifier 2325fdd593SJeykumar Sankaran * @rd: true for read limit; false for write limit 2425fdd593SJeykumar Sankaran * @limit: outstanding transaction limit 2525fdd593SJeykumar Sankaran */ 2625fdd593SJeykumar Sankaran void (*set_limit_conf)(struct dpu_hw_vbif *vbif, 2725fdd593SJeykumar Sankaran u32 xin_id, bool rd, u32 limit); 2825fdd593SJeykumar Sankaran 2925fdd593SJeykumar Sankaran /** 3025fdd593SJeykumar Sankaran * get_limit_conf - get transaction limit config 3125fdd593SJeykumar Sankaran * @vbif: vbif context driver 3225fdd593SJeykumar Sankaran * @xin_id: client interface identifier 3325fdd593SJeykumar Sankaran * @rd: true for read limit; false for write limit 3425fdd593SJeykumar Sankaran * @return: outstanding transaction limit 3525fdd593SJeykumar Sankaran */ 3625fdd593SJeykumar Sankaran u32 (*get_limit_conf)(struct dpu_hw_vbif *vbif, 3725fdd593SJeykumar Sankaran u32 xin_id, bool rd); 3825fdd593SJeykumar Sankaran 3925fdd593SJeykumar Sankaran /** 4025fdd593SJeykumar Sankaran * set_halt_ctrl - set halt control 4125fdd593SJeykumar Sankaran * @vbif: vbif context driver 4225fdd593SJeykumar Sankaran * @xin_id: client interface identifier 4325fdd593SJeykumar Sankaran * @enable: halt control enable 4425fdd593SJeykumar Sankaran */ 4525fdd593SJeykumar Sankaran void (*set_halt_ctrl)(struct dpu_hw_vbif *vbif, 4625fdd593SJeykumar Sankaran u32 xin_id, bool enable); 4725fdd593SJeykumar Sankaran 4825fdd593SJeykumar Sankaran /** 4925fdd593SJeykumar Sankaran * get_halt_ctrl - get halt control 5025fdd593SJeykumar Sankaran * @vbif: vbif context driver 5125fdd593SJeykumar Sankaran * @xin_id: client interface identifier 5225fdd593SJeykumar Sankaran * @return: halt control enable 5325fdd593SJeykumar Sankaran */ 5425fdd593SJeykumar Sankaran bool (*get_halt_ctrl)(struct dpu_hw_vbif *vbif, 5525fdd593SJeykumar Sankaran u32 xin_id); 5625fdd593SJeykumar Sankaran 5725fdd593SJeykumar Sankaran /** 5825fdd593SJeykumar Sankaran * set_qos_remap - set QoS priority remap 5925fdd593SJeykumar Sankaran * @vbif: vbif context driver 6025fdd593SJeykumar Sankaran * @xin_id: client interface identifier 6125fdd593SJeykumar Sankaran * @level: priority level 6225fdd593SJeykumar Sankaran * @remap_level: remapped level 6325fdd593SJeykumar Sankaran */ 6425fdd593SJeykumar Sankaran void (*set_qos_remap)(struct dpu_hw_vbif *vbif, 6525fdd593SJeykumar Sankaran u32 xin_id, u32 level, u32 remap_level); 6625fdd593SJeykumar Sankaran 6725fdd593SJeykumar Sankaran /** 6825fdd593SJeykumar Sankaran * set_mem_type - set memory type 6925fdd593SJeykumar Sankaran * @vbif: vbif context driver 7025fdd593SJeykumar Sankaran * @xin_id: client interface identifier 7125fdd593SJeykumar Sankaran * @value: memory type value 7225fdd593SJeykumar Sankaran */ 7325fdd593SJeykumar Sankaran void (*set_mem_type)(struct dpu_hw_vbif *vbif, 7425fdd593SJeykumar Sankaran u32 xin_id, u32 value); 7525fdd593SJeykumar Sankaran 7625fdd593SJeykumar Sankaran /** 7725fdd593SJeykumar Sankaran * clear_errors - clear any vbif errors 7825fdd593SJeykumar Sankaran * This function clears any detected pending/source errors 7925fdd593SJeykumar Sankaran * on the VBIF interface, and optionally returns the detected 8025fdd593SJeykumar Sankaran * error mask(s). 8125fdd593SJeykumar Sankaran * @vbif: vbif context driver 8225fdd593SJeykumar Sankaran * @pnd_errors: pointer to pending error reporting variable 8325fdd593SJeykumar Sankaran * @src_errors: pointer to source error reporting variable 8425fdd593SJeykumar Sankaran */ 8525fdd593SJeykumar Sankaran void (*clear_errors)(struct dpu_hw_vbif *vbif, 8625fdd593SJeykumar Sankaran u32 *pnd_errors, u32 *src_errors); 8725fdd593SJeykumar Sankaran 8825fdd593SJeykumar Sankaran /** 8925fdd593SJeykumar Sankaran * set_write_gather_en - set write_gather enable 9025fdd593SJeykumar Sankaran * @vbif: vbif context driver 9125fdd593SJeykumar Sankaran * @xin_id: client interface identifier 9225fdd593SJeykumar Sankaran */ 9325fdd593SJeykumar Sankaran void (*set_write_gather_en)(struct dpu_hw_vbif *vbif, u32 xin_id); 9425fdd593SJeykumar Sankaran }; 9525fdd593SJeykumar Sankaran 9625fdd593SJeykumar Sankaran struct dpu_hw_vbif { 9725fdd593SJeykumar Sankaran /* base */ 9825fdd593SJeykumar Sankaran struct dpu_hw_blk_reg_map hw; 9925fdd593SJeykumar Sankaran 10025fdd593SJeykumar Sankaran /* vbif */ 10125fdd593SJeykumar Sankaran enum dpu_vbif idx; 10225fdd593SJeykumar Sankaran const struct dpu_vbif_cfg *cap; 10325fdd593SJeykumar Sankaran 10425fdd593SJeykumar Sankaran /* ops */ 10525fdd593SJeykumar Sankaran struct dpu_hw_vbif_ops ops; 10625fdd593SJeykumar Sankaran }; 10725fdd593SJeykumar Sankaran 10825fdd593SJeykumar Sankaran /** 109*babdb815SMarijn Suijten * dpu_hw_vbif_init() - Initializes the VBIF driver for the passed 110*babdb815SMarijn Suijten * VBIF catalog entry. 111*babdb815SMarijn Suijten * @cfg: VBIF catalog entry for which driver object is required 11225fdd593SJeykumar Sankaran * @addr: Mapped register io address of MDSS 11325fdd593SJeykumar Sankaran */ 114*babdb815SMarijn Suijten struct dpu_hw_vbif *dpu_hw_vbif_init(const struct dpu_vbif_cfg *cfg, 115*babdb815SMarijn Suijten void __iomem *addr); 11625fdd593SJeykumar Sankaran 11725fdd593SJeykumar Sankaran void dpu_hw_vbif_destroy(struct dpu_hw_vbif *vbif); 11825fdd593SJeykumar Sankaran 11925fdd593SJeykumar Sankaran #endif /*_DPU_HW_VBIF_H */ 120