Xilinx ZynqMP Ultrascale+ DisplayPort 子系统¶
此子系统处理 ZynqMP 上的 DisplayPort 视频和音频输出。它支持使用 DisplayPort DMA 控制器 (xilinx-dpdma) 的内存帧缓冲区,以及来自可编程逻辑 (PL) 的“实时”视频和音频。此子系统可以执行多种转换,包括颜色空间转换、Alpha 混合和音频混合,但并非所有功能当前都受支持。
debugfs¶
为了支持调试和合规性测试,可以通过 debugfs 启用多种测试模式。以下位于 /sys/kernel/debug/dri/X/DP-1/test/ 中的文件控制 DisplayPort 测试模式
- active
向此文件写入 1 将激活测试模式,写入 0 将停用测试模式。当测试模式已激活/停用时写入 1 或 0 将重新激活/重新停用测试模式。当测试模式处于非活动状态时,对其他文件所做的更改将不会有(立即)影响,但这些设置将保存起来,以便在激活测试模式时使用。当测试模式处于活动状态时,对其他文件所做的更改将立即生效。
- custom
自定义测试图案值
- downspread
通过写入 1/0 启用/禁用时钟降频(扩频时钟)
- enhanced
启用/禁用增强帧
- ignore_aux_errors
设置为 1 时忽略 AUX 错误。写入此文件会立即生效(无论测试模式是否处于活动状态),并影响所有 AUX 传输。
- ignore_hpd
设置为 1 时忽略热插拔事件(例如电缆移除或显示器链路重新训练请求)。写入此文件会立即生效(无论测试模式是否处于活动状态)。
- laneX_preemphasis
通道 X 的预加重,从 0(最低)到 2(最高)
- laneX_swing
通道 X 的电压摆幅,从 0(最低)到 3(最高)
- lanes
要使用的通道数(1、2 或 4)
- pattern
测试图案。可以是以下之一
- video
使用常规视频输入
- symbol-error
符号错误测量图案
- prbs7
PRBS7 (x^7 + x^6 + 1) 多项式的输出
- 80bit-custom
一个自定义的 80 位图案
- cp2520
HBR2 合规眼图
- tps1
链路训练符号图案 TPS1 (/D10.2/)
- tps2
链路训练符号图案 TPS2
- tps3
链路训练符号图案 TPS3(用于 HBR2)
- rate
速率,以赫兹为单位。以下之一
5400000000 (HBR2)
2700000000 (HBR)
1620000000 (RBR)
您可以使用以下命令转储 displayport 测试设置
for prop in /sys/kernel/debug/dri/1/DP-1/test/*; do
printf '%-17s ' ${prop##*/}
if [ ${prop##*/} = custom ]; then
hexdump -C $prop | head -1
else
cat $prop
fi
done
输出可能如下所示
active 1
custom 00000000 00 00 00 00 00 00 00 00 00 00 |..........|
downspread 0
enhanced 1
ignore_aux_errors 1
ignore_hpd 1
lane0_preemphasis 0
lane0_swing 3
lane1_preemphasis 0
lane1_swing 3
lanes 2
pattern prbs7
rate 1620000000
建议的测试步骤是将电路板连接到显示器,配置测试模式,激活测试模式,然后断开电缆并将其连接到您选择的测试设备。例如,一个命令序列可以是
echo 1 > /sys/kernel/debug/dri/1/DP-1/test/enhanced
echo tps1 > /sys/kernel/debug/dri/1/DP-1/test/pattern
echo 1620000000 > /sys/kernel/debug/dri/1/DP-1/test/rate
echo 1 > /sys/kernel/debug/dri/1/DP-1/test/ignore_aux_errors
echo 1 > /sys/kernel/debug/dri/1/DP-1/test/ignore_hpd
echo 1 > /sys/kernel/debug/dri/1/DP-1/test/active
此时可以将电缆从显示器上断开。
内部结构¶
-
enum zynqmp_dpsub_layer_id¶
图层标识符
常量
ZYNQMP_DPSUB_LAYER_VID
视频层
ZYNQMP_DPSUB_LAYER_GFX
图形层
-
struct zynqmp_dpsub¶
ZynqMP DisplayPort 子系统
定义:
struct zynqmp_dpsub {
struct device *dev;
struct clk *apb_clk;
struct clk *vid_clk;
bool vid_clk_from_ps;
struct clk *aud_clk;
bool aud_clk_from_ps;
unsigned int connected_ports;
bool dma_enabled;
struct zynqmp_dpsub_drm *drm;
struct drm_bridge *bridge;
struct zynqmp_disp *disp;
struct zynqmp_disp_layer *layers[ZYNQMP_DPSUB_NUM_LAYERS];
struct zynqmp_dp *dp;
unsigned int dma_align;
};
成员
dev
物理设备
apb_clk
APB 时钟
vid_clk
视频时钟
vid_clk_from_ps
如果视频时钟来自 PS,则为真,如果来自 PL,则为假
aud_clk
音频时钟
aud_clk_from_ps
如果音频时钟来自 PS,则为真,如果来自 PL,则为假
connected_ports
设备树中连接的端口的位掩码
dma_enabled
如果启用了 DMA 接口,则为真,如果 DPSUB 由实时输入驱动,则为假
drm
DRM/KMS 设备数据
bridge
DP 编码器桥
disp
显示控制器
layers
视频和图形层
dp
DisplayPort 控制器
dma_align
DMA 对齐约束(必须是 2 的幂)
-
struct zynqmp_dpsub_drm¶
ZynqMP DisplayPort 子系统 DRM/KMS 数据
定义:
struct zynqmp_dpsub_drm {
struct zynqmp_dpsub *dpsub;
struct drm_device dev;
struct drm_plane planes[ZYNQMP_DPSUB_NUM_LAYERS];
struct drm_crtc crtc;
struct drm_encoder encoder;
};
成员
dpsub
指向 DisplayPort 子系统的反向指针
dev
DRM/KMS 设备
planes
DRM 平面
crtc
DRM CRTC
encoder
虚拟 DRM 编码器
-
enum zynqmp_dpsub_layer_mode¶
图层模式
常量
ZYNQMP_DPSUB_LAYER_NONLIVE
非实时(内存)模式
ZYNQMP_DPSUB_LAYER_LIVE
实时(流)模式
-
struct zynqmp_disp_format¶
显示子系统格式信息
定义:
struct zynqmp_disp_format {
u32 drm_fmt;
u32 bus_fmt;
u32 buf_fmt;
bool swap;
const u32 *sf;
};
成员
drm_fmt
DRM 格式 (4CC)
bus_fmt
媒体总线格式
buf_fmt
AV 缓冲区格式
swap
用于交换 RGB 格式的 R & B 以及 YUV 格式的 U & V 的标志
sf
颜色分量的缩放因子
-
struct zynqmp_disp_layer_dma¶
图层的一个数据平面的 DMA 通道
定义:
struct zynqmp_disp_layer_dma {
struct dma_chan *chan;
struct dma_interleaved_template xt;
struct data_chunk sgl;
};
成员
chan
DMA 通道
xt
交错 DMA 描述符模板
sgl
dma_interleaved_template 的数据块
-
struct zynqmp_disp_layer_info¶
静态图层信息
定义:
struct zynqmp_disp_layer_info {
const struct zynqmp_disp_format *formats;
unsigned int num_formats;
unsigned int num_channels;
};
成员
formats
支持的格式数组
num_formats
formats 数组中的格式数量
num_channels
DMA 通道数
-
struct zynqmp_disp_layer¶
显示层
定义:
struct zynqmp_disp_layer {
enum zynqmp_dpsub_layer_id id;
struct zynqmp_disp *disp;
const struct zynqmp_disp_layer_info *info;
struct zynqmp_disp_layer_dma dmas[ZYNQMP_DISP_MAX_NUM_SUB_PLANES];
const struct zynqmp_disp_format *disp_fmt;
const struct drm_format_info *drm_fmt;
enum zynqmp_dpsub_layer_mode mode;
};
成员
id
图层 ID
disp
指向
struct zynqmp_disp
的反向指针info
静态图层信息
dmas
DMA 通道
disp_fmt
当前格式信息
drm_fmt
当前 DRM 格式信息
mode
当前操作模式
-
struct zynqmp_disp¶
显示控制器
定义:
struct zynqmp_disp {
struct device *dev;
struct zynqmp_dpsub *dpsub;
void __iomem *blend;
void __iomem *avbuf;
void __iomem *audio;
struct zynqmp_disp_layer layers[ZYNQMP_DPSUB_NUM_LAYERS];
};
成员
dev
设备结构
dpsub
显示子系统
blend
混合器的寄存器 I/O 基址
avbuf
音频/视频缓冲区管理器的寄存器 I/O 基址
audio
音频混合器的寄存器 I/O 基址
layers
图层(平面)
-
void zynqmp_disp_avbuf_set_format(struct zynqmp_disp *disp, struct zynqmp_disp_layer *layer, const struct zynqmp_disp_format *fmt)¶
设置图层的输入格式
参数
struct zynqmp_disp *disp
显示控制器
struct zynqmp_disp_layer *layer
该图层
const struct zynqmp_disp_format *fmt
格式信息
描述
将 layer 的视频缓冲区管理器格式设置为 fmt。
-
void zynqmp_disp_avbuf_set_clocks_sources(struct zynqmp_disp *disp, bool video_from_ps, bool audio_from_ps, bool timings_internal)¶
设置时钟源
参数
struct zynqmp_disp *disp
显示控制器
bool video_from_ps
如果视频时钟源自 PS,则为 True
bool audio_from_ps
如果音频时钟源自 PS,则为 True
bool timings_internal
如果视频时序在内部生成,则为 True
描述
设置视频和音频时钟以及视频时序的来源。时钟可以源自 PS 或 PL,时序可以在内部或外部生成。
-
void zynqmp_disp_avbuf_enable_channels(struct zynqmp_disp *disp)¶
启用缓冲区通道
参数
struct zynqmp_disp *disp
显示控制器
描述
启用所有(视频和音频)缓冲区通道。
-
void zynqmp_disp_avbuf_disable_channels(struct zynqmp_disp *disp)¶
禁用缓冲区通道
参数
struct zynqmp_disp *disp
显示控制器
描述
禁用所有(视频和音频)缓冲区通道。
-
void zynqmp_disp_avbuf_enable_audio(struct zynqmp_disp *disp)¶
启用音频
参数
struct zynqmp_disp *disp
显示控制器
描述
启用所有具有非实时(内存)源的音频缓冲区。
-
void zynqmp_disp_avbuf_disable_audio(struct zynqmp_disp *disp)¶
禁用音频
参数
struct zynqmp_disp *disp
显示控制器
描述
禁用所有音频缓冲区。
-
void zynqmp_disp_avbuf_enable_video(struct zynqmp_disp *disp, struct zynqmp_disp_layer *layer)¶
启用视频层
参数
struct zynqmp_disp *disp
显示控制器
struct zynqmp_disp_layer *layer
该图层
描述
为 layer 启用视频/图形缓冲区。
-
void zynqmp_disp_avbuf_disable_video(struct zynqmp_disp *disp, struct zynqmp_disp_layer *layer)¶
禁用视频层
参数
struct zynqmp_disp *disp
显示控制器
struct zynqmp_disp_layer *layer
该图层
描述
禁用 layer 的视频/图形缓冲区。
-
void zynqmp_disp_avbuf_enable(struct zynqmp_disp *disp)¶
启用视频管道
参数
struct zynqmp_disp *disp
显示控制器
描述
取消置位视频管道复位。
-
void zynqmp_disp_avbuf_disable(struct zynqmp_disp *disp)¶
禁用视频管道
参数
struct zynqmp_disp *disp
显示控制器
描述
置位视频管道复位。
-
void zynqmp_disp_blend_set_output_format(struct zynqmp_disp *disp, enum zynqmp_dpsub_format format)¶
设置混合器的输出格式
参数
struct zynqmp_disp *disp
显示控制器
enum zynqmp_dpsub_format format
输出格式
描述
将混合器的输出格式设置为 format。
-
void zynqmp_disp_blend_set_bg_color(struct zynqmp_disp *disp, u32 rcr, u32 gy, u32 bcb)¶
设置背景颜色
参数
struct zynqmp_disp *disp
显示控制器
u32 rcr
红色/Cr 颜色分量
u32 gy
绿色/Y 颜色分量
u32 bcb
蓝色/Cb 颜色分量
描述
将背景颜色设置为 (rcr, gy, bcb),分别对应于所选输出格式的 R、G 和 B 或 Cr、Y 和 Cb 分量。
-
void zynqmp_disp_blend_set_global_alpha(struct zynqmp_disp *disp, bool enable, u32 alpha)¶
配置全局 Alpha 混合
参数
struct zynqmp_disp *disp
显示控制器
bool enable
True 以启用全局 Alpha 混合
u32 alpha
全局 Alpha 值(如果 enabled 为 false,则忽略)
-
void zynqmp_disp_blend_layer_set_csc(struct zynqmp_disp *disp, struct zynqmp_disp_layer *layer, const u16 *coeffs, const u32 *offsets)¶
配置图层的色彩空间转换
参数
struct zynqmp_disp *disp
显示控制器
struct zynqmp_disp_layer *layer
该图层
const u16 *coeffs
色彩空间转换矩阵
const u32 *offsets
色彩空间转换偏移
描述
为 layer 配置输入色彩空间转换矩阵和偏移。矩阵的列根据输入格式自动交换,以处理 RGB 和 YCrCb 分量的排列。
-
void zynqmp_disp_blend_layer_enable(struct zynqmp_disp *disp, struct zynqmp_disp_layer *layer)¶
启用图层
参数
struct zynqmp_disp *disp
显示控制器
struct zynqmp_disp_layer *layer
该图层
-
void zynqmp_disp_blend_layer_disable(struct zynqmp_disp *disp, struct zynqmp_disp_layer *layer)¶
禁用图层
参数
struct zynqmp_disp *disp
显示控制器
struct zynqmp_disp_layer *layer
该图层
-
void zynqmp_disp_audio_enable(struct zynqmp_disp *disp)¶
启用音频混音器
参数
struct zynqmp_disp *disp
显示控制器
描述
通过取消软复位来启用音频混音器。音频状态由复位设置为默认值,显式设置默认混音器音量。
-
void zynqmp_disp_audio_disable(struct zynqmp_disp *disp)¶
禁用音频混音器
参数
struct zynqmp_disp *disp
显示控制器
描述
通过断言其软复位来禁用音频混音器。
-
const struct zynqmp_disp_format *zynqmp_disp_layer_find_format(struct zynqmp_disp_layer *layer, u32 drm_fmt)¶
查找 DRM 格式的格式信息
参数
struct zynqmp_disp_layer *layer
该图层
u32 drm_fmt
要搜索的 DRM 格式
描述
搜索与给定 DRM 格式 drm_fmt 对应的显示子系统格式信息,用于 layer,并返回指向格式描述符的指针。
返回
如果找到,则返回指向格式描述符的指针,否则返回 NULL
-
const struct zynqmp_disp_format *zynqmp_disp_layer_find_live_format(struct zynqmp_disp_layer *layer, u32 media_bus_format)¶
查找给定媒体总线格式的格式信息
参数
struct zynqmp_disp_layer *layer
该图层
u32 media_bus_format
要搜索的媒体总线格式
描述
搜索与给定媒体总线格式 media_bus_format 对应的显示子系统格式信息,用于 layer,并返回指向格式描述符的指针。
返回
如果找到,则返回指向格式描述符的指针,否则返回 NULL
-
u32 *zynqmp_disp_layer_drm_formats(struct zynqmp_disp_layer *layer, unsigned int *num_formats)¶
返回图层支持的 DRM 格式
参数
struct zynqmp_disp_layer *layer
该图层
unsigned int *num_formats
指向返回的格式数量的指针
注意
此函数对于实时视频图层没有意义,在这些情况下将始终返回空列表。应使用 zynqmp_disp_live_layer_formats()
查询实时视频输入图层支持的媒体总线格式列表。
返回
新分配的 u32 数组,用于存储该图层支持的所有 DRM 格式。数组中的格式数量通过 num_formats 参数返回。
-
u32 *zynqmp_disp_live_layer_formats(struct zynqmp_disp_layer *layer, unsigned int *num_formats)¶
返回实时视频图层支持的媒体总线格式
参数
struct zynqmp_disp_layer *layer
该图层
unsigned int *num_formats
指向返回的格式数量的指针
注意
此函数仅应用于实时视频输入图层。
返回
新分配的 u32 数组,其中包含该图层支持的媒体总线格式。数组中的格式数量通过 num_formats 参数返回。
-
void zynqmp_disp_layer_enable(struct zynqmp_disp_layer *layer)¶
启用图层
参数
struct zynqmp_disp_layer *layer
该图层
描述
在音频/视频缓冲区管理器和混合器中启用 layer。DMA 通道由 zynqmp_disp_layer_update()
单独启动。
-
void zynqmp_disp_layer_disable(struct zynqmp_disp_layer *layer)¶
禁用图层
参数
struct zynqmp_disp_layer *layer
该图层
描述
通过停止其 DMA 通道并在音频/视频缓冲区管理器和混合器中禁用该图层来禁用该图层。
-
void zynqmp_disp_layer_set_format(struct zynqmp_disp_layer *layer, const struct drm_format_info *info)¶
设置图层格式
参数
struct zynqmp_disp_layer *layer
该图层
const struct drm_format_info *info
格式信息
注意
使用 zynqmp_disp_layer_set_live_format()
为实时视频图层设置媒体总线格式。
描述
将 layer 的格式设置为 info。必须禁用该图层。
-
void zynqmp_disp_layer_set_live_format(struct zynqmp_disp_layer *layer, u32 media_bus_format)¶
设置实时视频图层格式
参数
struct zynqmp_disp_layer *layer
该图层
u32 media_bus_format
要设置的媒体总线格式
注意
此函数不应用于设置非实时视频图层的格式。请改用 zynqmp_disp_layer_set_format()
。
描述
设置实时 layer 的显示格式。必须禁用该图层。
-
int zynqmp_disp_layer_update(struct zynqmp_disp_layer *layer, struct drm_plane_state *state)¶
更新图层帧缓冲
参数
struct zynqmp_disp_layer *layer
该图层
struct drm_plane_state *state
平面状态
描述
通过为新的帧缓冲发出新的 DMA 引擎事务来更新图层的帧缓冲。
返回
成功时返回 0,否则返回 DMA 描述符失败错误
-
void zynqmp_disp_layer_release_dma(struct zynqmp_disp *disp, struct zynqmp_disp_layer *layer)¶
释放图层的 DMA 通道
参数
struct zynqmp_disp *disp
显示控制器
struct zynqmp_disp_layer *layer
该图层
描述
释放与 layer 关联的 DMA 通道。
-
void zynqmp_disp_destroy_layers(struct zynqmp_disp *disp)¶
销毁所有图层
参数
struct zynqmp_disp *disp
显示控制器
-
int zynqmp_disp_layer_request_dma(struct zynqmp_disp *disp, struct zynqmp_disp_layer *layer)¶
为图层请求 DMA 通道
参数
struct zynqmp_disp *disp
显示控制器
struct zynqmp_disp_layer *layer
该图层
描述
请求 layer 所需的所有 DMA 引擎通道。
返回
成功返回 0,否则返回 DMA 通道请求错误
-
int zynqmp_disp_create_layers(struct zynqmp_disp *disp)¶
创建并初始化所有图层
参数
struct zynqmp_disp *disp
显示控制器
返回
成功返回 0,否则返回 DMA 通道请求错误
-
void zynqmp_disp_enable(struct zynqmp_disp *disp)¶
启用显示控制器
参数
struct zynqmp_disp *disp
显示控制器
-
void zynqmp_disp_disable(struct zynqmp_disp *disp)¶
禁用显示控制器
参数
struct zynqmp_disp *disp
显示控制器
-
int zynqmp_disp_setup_clock(struct zynqmp_disp *disp, unsigned long mode_clock)¶
配置显示控制器像素时钟速率
参数
struct zynqmp_disp *disp
显示控制器
unsigned long mode_clock
像素时钟速率,单位为 Hz
返回
成功返回 0,否则返回负的时钟错误
-
struct zynqmp_dp_link_config¶
源和接收器之间的公共链路配置
定义:
struct zynqmp_dp_link_config {
int max_rate;
u8 max_lanes;
};
成员
max_rate
最大链路速率
max_lanes
最大通道数
-
struct zynqmp_dp_mode¶
DisplayPort 的配置模式
定义:
struct zynqmp_dp_mode {
const char *fmt;
int pclock;
u8 bw_code;
u8 lane_cnt;
};
成员
fmt
格式标识符字符串
pclock
当前模式的像素时钟频率
bw_code
带宽(链路速率)代码
lane_cnt
通道数
-
struct zynqmp_dp_config¶
来自 DTS 的 DisplayPort 配置
定义:
struct zynqmp_dp_config {
u8 misc0;
u8 misc1;
u8 bpp;
};
成员
misc0
misc0 配置(每个 DP v1.2 规范)
misc1
misc1 配置(每个 DP v1.2 规范)
bpp
每像素位数
-
enum test_pattern¶
用于测试的测试模式
常量
TEST_VIDEO
使用常规视频输入
TEST_TPS1
链路训练符号图案 TPS1 (/D10.2/)
TEST_TPS2
链路训练符号图案 TPS2
TEST_TPS3
链路训练符号图案 TPS3(用于 HBR2)
TEST_SYMBOL_ERROR
符号错误测量图案
TEST_PRBS7
PRBS7 (x^7 + x^6 + 1) 多项式的输出
TEST_80BIT_CUSTOM
一个自定义的 80 位图案
TEST_CP2520
HBR2 合规眼图
-
struct zynqmp_dp_test¶
测试模式配置
定义:
struct zynqmp_dp_test {
enum test_pattern pattern;
bool enhanced, downspread, active;
u8 custom[10];
u8 train_set[ZYNQMP_DP_MAX_LANES];
u8 bw_code;
u8 link_cnt;
};
成员
pattern
测试模式
enhanced
使用增强的成帧
downspread
使用 SSC
active
测试模式是否处于活动状态
custom
用于
TEST_80BIT_CUSTOM
的自定义模式train_set
电压/预加重设置
bw_code
链路的带宽代码
link_cnt
通道数
-
struct zynqmp_dp_train_set_priv¶
train_set debugfs 文件的私有数据
定义:
struct zynqmp_dp_train_set_priv {
struct zynqmp_dp *dp;
int lane;
};
成员
dp
DisplayPort IP 核结构
lane
此文件的通道
-
struct zynqmp_dp¶
Xilinx DisplayPort 核
定义:
struct zynqmp_dp {
struct drm_dp_aux aux;
struct drm_bridge bridge;
struct work_struct hpd_work;
struct work_struct hpd_irq_work;
struct completion aux_done;
struct mutex lock;
struct drm_bridge *next_bridge;
struct device *dev;
struct zynqmp_dpsub *dpsub;
void __iomem *iomem;
struct reset_control *reset;
struct phy *phy[ZYNQMP_DP_MAX_LANES];
enum drm_connector_status status;
int irq;
bool enabled;
bool ignore_aux_errors;
bool ignore_hpd;
struct zynqmp_dp_train_set_priv debugfs_train_set[ZYNQMP_DP_MAX_LANES];
struct zynqmp_dp_mode mode;
struct zynqmp_dp_link_config link_config;
struct zynqmp_dp_test test;
struct zynqmp_dp_config config;
u8 dpcd[DP_RECEIVER_CAP_SIZE];
u8 train_set[ZYNQMP_DP_MAX_LANES];
u8 num_lanes;
};
成员
aux
辅助通道
bridge
DP 编码器的 DRM 桥
hpd_work
热插拔检测工作线程
hpd_irq_work
热插拔检测 IRQ 工作线程
aux_done
当我们收到 AUX 回复或超时时完成
lock
保护此结构和寄存器访问的互斥锁(但不包括 AUX)
next_bridge
下游桥
dev
设备结构
dpsub
显示子系统
iomem
用于寄存器访问的设备 I/O 内存
reset
复位控制器
phy
DP 通道的 PHY 句柄
status
连接状态
irq
irq
enabled
指示设备是否已启用的标志
ignore_aux_errors
如果设置,则会禁止 AUX 错误
ignore_hpd
如果设置,则会忽略 HPD 事件和 IRQ
debugfs_train_set
train_set 的 Debugfs 私有数据
mode
IP 核和接收器设备之间的当前模式
link_config
IP 核和接收器设备之间的公共链路配置
test
测试模式配置
config
来自 DTS 的 IP 核配置
dpcd
来自当前连接的接收器设备的 DP 配置数据
train_set
训练数据组
num_lanes
启用的 PHY 通道数
描述
lock 涵盖此结构中的链路配置和设备的寄存器。它不涵盖 aux 或 ignore_aux_errors。对于仅在探测/删除时修改的任何成员(例如 dev),它不是严格要求的。
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
描述
初始化 PHY。
返回
如果正确初始化 PHY 实例,则返回 0,否则返回被调用函数返回的错误代码。
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
描述
退出 PHY。
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
描述
探测所有通道的 PHY。可用的 PHY 可能少于通道数,只要找到至少一个 PHY,就不认为这是一个错误。调用者可以检查 dp->num_lanes 来检查找到了多少个 PHY。
返回
0 - 成功
- -ENXIO
未找到 PHY
- -EPROBE_DEFER
请求探测延迟
其他负值 - PHY 检索失败
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
描述
检查 PHY 是否就绪。如果 PHY 未就绪,请等待 1 毫秒,检查 100 次。IP 设计人员建议使用此延迟量。
返回
如果 PHY 就绪,则返回 0,如果 PHY 未就绪,则返回 -ENODEV。
-
int zynqmp_dp_max_rate(int link_rate, u8 lane_num, u8 bpp)¶
计算并返回可用的最大像素时钟频率。
参数
int link_rate
链路速率(千字节/秒)
u8 lane_num
通道数
u8 bpp
每像素位数
返回
当前链路配置支持的最大像素时钟频率(千赫兹)。
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
int pclock
所请求的显示模式的像素时钟频率。
u8 current_bw
当前链路速率。
描述
查找所请求的像素时钟频率 **pclock** 的链路配置值、速率和通道数。 **pclock** 存储在模式中,以便在以后的其他函数中使用。 返回的速率是从当前速率 **current_bw** 降低后的速率。
返回
当前链路速率代码,或 -EINVAL。
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
u8 link_status[DP_LINK_STATUS_SIZE]
来自接收器的链路状态,其中包含请求的训练值。
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
u8 *train_set
一组训练值。
描述
根据接收器的请求更新训练值。映射值是预定义的,并且值(vs、pe、pc)来自设备手册。
返回
如果 vs 和 emph 更新成功,则返回 0,否则返回 drm_dp_dpcd_write()
返回的错误代码。
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
返回
如果时钟恢复训练成功完成,则返回 0,否则返回相应的错误代码。
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
返回
如果通道均衡训练成功完成,则返回 0,否则返回相应的错误代码。
-
int zynqmp_dp_setup(struct zynqmp_dp *dp, u8 bw_code, u8 lane_cnt, bool enhanced, bool downspread)¶
设置主要的链路参数。
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
u8 bw_code
链路带宽,以 270 MHz 的倍数表示。
u8 lane_cnt
要使用的通道数。
bool enhanced
使用增强的成帧
bool downspread
启用扩频时钟。
返回
成功时返回 0,失败时返回 -errno。
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
返回
如果所有训练都成功完成,则返回 0,否则返回相应的错误代码。
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
描述
如果训练不成功,则通过降低链路速率来训练链路。
-
int zynqmp_dp_aux_cmd_submit(struct zynqmp_dp *dp, u32 cmd, u16 addr, u8 *buf, u8 bytes, u8 *reply)¶
提交 AUX 命令。
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
u32 cmd
AUX 命令。
u16 addr
AUX 地址。
u8 *buf
命令数据缓冲区。
u8 bytes
**buf** 的字节数。
u8 *reply
要返回的回复代码。
描述
提交 AUX 命令。所有 AUX 相关命令,无论是本机命令还是 I2C AUX 读取/写入命令,都通过此函数提交。此函数映射到 struct drm_dp_aux
的传输函数。此函数涉及多次寄存器读取/写入,因此需要同步,它由 drm_dp_helper 使用 **hw_mutex** 完成。如果命令提交后没有立即回复,则调用线程将进入睡眠状态。如果 **reply** != NULL,则回复代码将返回到 **reply**。
返回
如果命令提交正确,则返回 0;否则返回相应的错误代码:-EBUSY 表示已经有请求正在处理,-ETIMEDOUT 表示接收回复超时,-EIO 表示接收到的字节数少于请求的字节数。
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
描述
对 AUX 时钟分频器和滤波器进行编程,并注册 DP AUX 适配器。
返回
成功时返回 0,否则返回错误值。
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
描述
注销 DP AUX 适配器。
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
描述
misc 寄存器值存储在结构中,此函数将这些值应用到寄存器中。
-
int zynqmp_dp_set_format(struct zynqmp_dp *dp, const struct drm_display_info *info, enum zynqmp_dpsub_format format, unsigned int bpc)¶
设置输入格式
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
const struct drm_display_info *info
显示信息
enum zynqmp_dpsub_format format
输入格式
unsigned int bpc
每个分量的位数
描述
根据输入的 format 和 bpc 更新 misc 寄存器值。
返回
成功返回 0,失败返回 -EINVAL。
-
void zynqmp_dp_encoder_mode_set_transfer_unit(struct zynqmp_dp *dp, const struct drm_display_mode *mode)¶
设置传输单元值
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
const struct drm_display_mode *mode
请求的显示模式
描述
设置传输单元,并计算所有与传输单元大小相关的值。计算基于 DP 和 IP 核规范。
-
void zynqmp_dp_encoder_mode_set_stream(struct zynqmp_dp *dp, const struct drm_display_mode *mode)¶
配置主数据流
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
const struct drm_display_mode *mode
请求的显示模式
描述
根据请求的模式 mode 配置主数据流。计算基于 IP 核规范。
-
struct zynqmp_disp_layer *zynqmp_dp_disp_connected_live_layer(struct zynqmp_dp *dp)¶
返回第一个连接的活动图层
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
返回
第一个连接的活动显示图层,如果没有连接的活动图层,则返回 NULL。
-
int zynqmp_dp_set_test_pattern(struct zynqmp_dp *dp, enum test_pattern pattern, u8 *const custom)¶
配置用于测试模式的链路
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
enum test_pattern pattern
要配置的测试模式
u8 *const custom
如果 pattern 为
TEST_80BIT_CUSTOM
,则使用自定义模式
返回
成功返回 0,失败返回负 errno (DPCD) 值
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
描述
启用垂直消隐中断
参数
struct zynqmp_dp *dp
DisplayPort IP 核结构
描述
禁用垂直消隐中断
-
bool zynqmp_dpsub_audio_enabled(struct zynqmp_dpsub *dpsub)¶
如果音频已启用
参数
struct zynqmp_dpsub *dpsub
DisplayPort 子系统
描述
根据音频时钟返回音频是否已启用。
返回
如果音频已启用则返回 true,否则返回 false。
-
unsigned int zynqmp_dpsub_get_audio_clk_rate(struct zynqmp_dpsub *dpsub)¶
获取当前音频时钟频率
参数
struct zynqmp_dpsub *dpsub
DisplayPort 子系统
返回
当前音频时钟频率。
-
void zynqmp_dpsub_drm_handle_vblank(struct zynqmp_dpsub *dpsub)¶
处理垂直消隐事件
参数
struct zynqmp_dpsub *dpsub
DisplayPort 子系统
描述
此函数处理垂直消隐中断,并向 CRTC 对象发送一个事件。这将由 DP 垂直消隐中断处理程序调用。