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;
struct zynqmp_dpsub_audio *audio;
};
成員
dev物理裝置
apb_clkAPB 時鐘
vid_clk影片時鐘
vid_clk_from_ps如果影片時鐘來自 PS,則為 True;如果來自 PL,則為 false
aud_clk音訊時鐘
aud_clk_from_ps如果音訊時鐘來自 PS,則為 True;如果來自 PL,則為 false
connected_ports裝置樹中已連線埠的位掩碼
dma_enabled如果啟用了 DMA 介面,則為 True;如果 DPSUB 由即時輸入驅動,則為 false
drmDRM/KMS 裝置資料
bridgeDP 編碼器橋
disp顯示控制器
layers影片和圖形圖層
dpDisplayPort 控制器
dma_alignDMA 對齊約束(必須是 2 的冪)
audioDP 音訊資料
-
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 子系統的指標
devDRM/KMS 裝置
planesDRM 平面
crtcDRM 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_fmtDRM 格式 (4CC)
bus_fmt媒體匯流排格式
buf_fmtAV 緩衝區格式
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;
};
成員
chanDMA 通道
xt交錯 DMA 描述符模板
sgldma_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_formatsformats 陣列中的格式數
num_channelsDMA 通道數
-
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靜態圖層資訊
dmasDMA 通道
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;
struct zynqmp_disp_layer layers[ZYNQMP_DPSUB_NUM_LAYERS];
};
成員
dev裝置結構
dpsub顯示子系統
blend混合器的暫存器 I/O 基地址
avbuf音訊/影片緩衝區管理器的暫存器 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如果啟用全域性 alpha 混合,則為 True
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圖層
-
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 格式
描述
搜尋與 layer 的給定 DRM 格式 drm_fmt 對應的顯示子系統格式資訊,並返回指向格式描述符的指標。
返回值
如果找到,則返回指向格式描述符的指標;否則返回 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要搜尋的媒體匯流排格式
描述
搜尋與 layer 的給定媒體匯流排格式 media_bus_format 對應的顯示子系統格式資訊,並返回指向格式描述符的指標。
返回值
如果找到,則返回指向格式描述符的指標;否則返回 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;
};
成員
misc0misc0 配置(根據 DP v1.2 規範)
misc1misc1 配置(根據 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_PRBS7PRBS7 (x^7 + x^6 + 1) 多項式的輸出
TEST_80BIT_CUSTOM自定義 80 位模式
TEST_CP2520HBR2 合規性眼圖
-
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;
};
成員
dpDisplayPort 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輔助通道
bridgeDP 編碼器的 DRM 橋
hpd_work熱插拔檢測工作程式
hpd_irq_work熱插拔檢測 IRQ 工作程式
aux_done在我們獲得 AUX 回覆或超時時完成
lock保護此結構和暫存器訪問的互斥鎖(但不包括 AUX)
next_bridge下游橋
dev裝置結構
dpsub顯示子系統
iomem用於暫存器訪問的裝置 I/O 記憶體
reset重置控制器
phyDP 通道的 PHY 控制代碼
status連線狀態
irqirq
enabled指示裝置是否已啟用的標誌
ignore_aux_errors如果設定,則會禁止 AUX 錯誤
ignore_hpd如果設定,則會忽略 HPD 事件和 IRQ
debugfs_train_settrain_set 的 Debugfs 私有資料
modeIP 核和接收器裝置之間的當前模式
link_configIP 核和接收器裝置之間的公共鏈路配置
test測試模式的配置
config來自 DTS 的 IP 核配置
dpcd來自當前連線的接收器裝置的 DP 配置資料
train_set訓練資料集
num_lanes已啟用 phy 通道的數量
描述
lock 涵蓋此結構和裝置的暫存器中的鏈路配置。 它不涵蓋 aux 或 ignore_aux_errors。 對於僅在探測/移除時修改的任何成員(例如 dev),它不是嚴格必需的。
引數
struct zynqmp_dp *dpDisplayPort IP 核結構
描述
初始化 phy。
返回值
如果正確初始化 phy 例項,則返回 0,否則返回被呼叫函式返回的錯誤程式碼。
引數
struct zynqmp_dp *dpDisplayPort IP 核結構
描述
退出 phy。
引數
struct zynqmp_dp *dpDisplayPort IP 核結構
描述
探測所有通道的 PHY。 可用的 PHY 可能少於通道數,只要找到至少一個 PHY,就不被視為錯誤。 呼叫方可以檢查 dp->num_lanes 以檢查詢到的 PHY 數量。
返回值
0 - 成功
- -ENXIO
未找到 PHY
- -EPROBE_DEFER
請求了探測延遲
其他負值 - PHY 檢索失敗
引數
struct zynqmp_dp *dpDisplayPort 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每畫素位數
返回值
當前鏈路配置支援的最大畫素時鐘 (KHz)。
引數
struct zynqmp_dp *dpDisplayPort IP 核結構
int pclock請求的顯示模式的畫素時鐘
u8 current_bw當前鏈路速率
描述
查詢請求的畫素時鐘 pclock 的鏈路配置值、速率和通道計數。 pclock 儲存在模式中,以供稍後在其他函式中使用。 返回的速率從當前速率 current_bw 中降低。
返回值
當前鏈路速率程式碼,或 -EINVAL。
引數
struct zynqmp_dp *dpDisplayPort IP 核結構
u8 link_status[DP_LINK_STATUS_SIZE]來自接收器的鏈路狀態,其中包含請求的訓練值
引數
struct zynqmp_dp *dpDisplayPort IP 核結構
u8 *train_set一組訓練值
描述
根據來自接收器的請求更新訓練值。 對映值是預定義的,值 (vs, pe, pc) 來自裝置手冊。
返回值
如果 vs 和 emph 成功更新,則返回 0,否則返回 drm_dp_dpcd_write() 返回的錯誤程式碼。
引數
struct zynqmp_dp *dpDisplayPort IP 核結構
返回值
如果時鐘恢復訓練成功完成,則返回 0,否則返回相應的錯誤程式碼。
引數
struct zynqmp_dp *dpDisplayPort IP 核結構
返回值
如果通道均衡訓練成功完成,則返回 0,否則返回相應的錯誤程式碼。
-
int zynqmp_dp_setup(struct zynqmp_dp *dp, u8 bw_code, u8 lane_cnt, bool enhanced, bool downspread)¶
設定主要鏈路引數
引數
struct zynqmp_dp *dpDisplayPort IP 核結構
u8 bw_code鏈路頻寬,以 270 MHz 的倍數表示
u8 lane_cnt要使用的通道數
bool enhanced使用增強型成幀
bool downspread啟用擴頻時鐘
返回值
成功時返回 0,失敗時返回 -errno
引數
struct zynqmp_dp *dpDisplayPort IP 核結構
返回值
如果所有訓練都成功完成,則返回 0,否則返回相應的錯誤程式碼。
引數
struct zynqmp_dp *dpDisplayPort 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 *dpDisplayPort IP 核結構
u32 cmdaux 命令
u16 addraux 地址
u8 *buf命令資料的緩衝區
u8 bytesbuf 的位元組數
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 *dpDisplayPort IP 核結構
描述
對 AUX 時鐘分頻器和過濾器進行程式設計,並註冊 DP AUX 介面卡。
返回值
成功時返回 0,否則返回錯誤值
引數
struct zynqmp_dp *dpDisplayPort IP 核結構
描述
登出 DP AUX 介面卡。
引數
struct zynqmp_dp *dpDisplayPort 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 *dpDisplayPort 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 *dpDisplayPort 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 *dpDisplayPort 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 *dpDisplayPort IP 核結構
返回值
第一個連線的即時顯示圖層,如果沒有任何即時圖層連線,則返回 NULL。
-
int zynqmp_dp_set_test_pattern(struct zynqmp_dp *dp, enum test_pattern pattern, u8 *const custom)¶
配置鏈路以進行測試模式
引數
struct zynqmp_dp *dpDisplayPort IP 核結構
enum test_pattern pattern要配置的測試模式
u8 *const custom如果 pattern 為
TEST_80BIT_CUSTOM,則要使用的自定義模式
返回值
成功時返回 0,失敗時返回負 errno (DPCD)
引數
struct zynqmp_dp *dpDisplayPort IP 核結構
描述
啟用 vblank 中斷
引數
struct zynqmp_dp *dpDisplayPort IP 核結構
描述
停用 vblank 中斷
-
void zynqmp_dpsub_drm_handle_vblank(struct zynqmp_dpsub *dpsub)¶
處理 vblank 事件
引數
struct zynqmp_dpsub *dpsubDisplayPort 子系統
描述
此函式處理 vblank 中斷,並將事件傳送到 CRTC 物件。 這將由 DP vblank 中斷處理程式呼叫。