git-subtree-dir: qcom/opensource/mm-sys-kernel git-subtree-mainline:99d06628db
git-subtree-split:88eb9646a4
Change-Id: repo: https://git.codelinaro.org/clo/la/platform/vendor/opensource/mm-sys-kernel tag: LA.VENDOR.14.3.0.r1-17300-lanai.QSSI15.0
74 lines
2.4 KiB
C
74 lines
2.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
*/
|
|
|
|
#ifndef __UBWCP_HW_H_
|
|
#define __UBWCP_HW_H_
|
|
|
|
#define HW_BUFFER_FORMAT_RGBA 0x0
|
|
#define HW_BUFFER_FORMAT_NV12 0x2
|
|
#define HW_BUFFER_FORMAT_NV124R 0x4
|
|
#define HW_BUFFER_FORMAT_P010 0x6
|
|
#define HW_BUFFER_FORMAT_TP10 0x8
|
|
#define HW_BUFFER_FORMAT_P016 0xA
|
|
#define HW_BUFFER_FORMAT_LINEAR 0xF
|
|
|
|
/* interrupt id. also bit location for set/clear */
|
|
#define INTERRUPT_READ_ERROR 0
|
|
#define INTERRUPT_WRITE_ERROR 1
|
|
#define INTERRUPT_DECODE_ERROR 2
|
|
#define INTERRUPT_ENCODE_ERROR 3
|
|
|
|
/**
|
|
* struct msm_ubwcp_- UBWCP hardware instance
|
|
* dev:UBWCP device
|
|
* irq:Interrupt number
|
|
* clk:The bus clock for this IOMMU hardware instance
|
|
* pclk:The clock for the IOMMU IOMMU bus interconnect
|
|
*/
|
|
struct ubwcp_dev {
|
|
void __iomem *base;
|
|
struct device *dev;
|
|
int irq;
|
|
struct clk *clk;
|
|
struct clk *pclk;
|
|
/* TBD:
|
|
* struct list_head dev_node;
|
|
* struct list_head dom_node;
|
|
* struct list_head ctx_list;
|
|
* DECLARE_BITMAP(context_map, IOMMU_MAX_CBS)
|
|
* struct iommu_device iommu;
|
|
*/
|
|
};
|
|
|
|
|
|
struct __packed ubwcp_hw_meta_metadata {
|
|
u64 uv_start_addr : 48; /* uv start address */
|
|
u16 format : 16; /* format */
|
|
u16 stride; /* image stride (bytes) */
|
|
u16 stride_ubwcp; /* p010 stride for tp10 image (bytes) */
|
|
u32 metadata_base_y; /* 24-bit page address */
|
|
u32 metadata_base_uv; /* 24-bit page address */
|
|
u16 buffer_y_offset; /* 4KB offset from meta_data_base_y */
|
|
u16 buffer_uv_offset; /* 4KB offset from meta_data_base_y */
|
|
u32 width_height; /* image width (bytes) */
|
|
};
|
|
|
|
void ubwcp_hw_version(void __iomem *base, u32 *major, u32 *minor);
|
|
void ubwcp_hw_set_buf_desc(void __iomem *base, u64 desc_addr, u16 desc_stride);
|
|
void ubwcp_hw_enable_range_check(void __iomem *base, u16 index);
|
|
int ubwcp_hw_disable_range_check_with_flush(void __iomem *base, u16 index);
|
|
void ubwcp_hw_set_range_check(void __iomem *base, u16 index, phys_addr_t pa, size_t size);
|
|
u64 ubwcp_hw_interrupt_src_address(void __iomem *base, u16 interrupt);
|
|
void ubwcp_hw_interrupt_clear(void __iomem *base, u16 interrupt);
|
|
void ubwcp_hw_interrupt_enable(void __iomem *base, u16 interrupt, bool enable);
|
|
void ubwcp_hw_power_on(void __iomem *pwr_ctrl, bool power_on);
|
|
void ubwcp_hw_one_time_init(void __iomem *base);
|
|
int ubwcp_hw_flush(void __iomem *base);
|
|
void ubwcp_hw_trace_set(bool value);
|
|
void ubwcp_hw_trace_get(bool *value);
|
|
void ubwcp_hw_single_tile(void __iomem *base, bool en);
|
|
|
|
#endif /* __UBWCP_HW_H_ */
|