IPU(Image Process Unit)应该算是IMX的一个特色,值得仔细研究下,
下面主要是显示端口部分,IDMA CM有空再整理,
/****************
* Display port *
****************/
包含:
DC - a display controller,
DP - a display processor,
DMFC - a display multi-FIFO controller
DI - a display interface. The DI is instantiated twice to provide two symmetrical display
interfaces.
* Display ports channels (P2713)
用于fb driver 的主要有下面3个channel:
分别为 MEM_BG_SYNC(23),MEM_FG_SYNC(27),MEM_DC_SYNC(28)
以及各自对应的DC channel,IDMA channel,alpha channel
如下图:
* 共2的DI,每个最多接3个 display,但两个DI 最多可以接4个dispaly
每个DI 可以接两个的 异步设备,但只能有1个是串行传输数据的
每个DI 可以接1个同步设备,异步设备如果是同步访问的作为同步设备
* Display Dual Mode
这个mode 对同步接口的智能显示非常有用,数据只在它发生变化,或者DP 设置改变
时才传送.
* Data starvation errors
这种错误对于同步显示,发生在某个时间点需要位于DI的数据已经准备好,并被发生到显示器.
但是不正常的情况可能发生,当系统重载并且IDMAC 不能读SDRAM中的数据并且提供给DMFC
.Frame boundary errors
.Error within a frame
.Anti tearing errors
* Display port's restrictions (P2717)
通道使用的一些限制
/***************************
* DC - Display Controller *
***************************/
DC 控制和DI端口往来的flow,决定那些flow当前是active并且每个flow 在什么时候被active.
对于激活的flow,从预先定义的source取数据,然后发到正确的DI
DC core 使用微码(microcode),microcode是一组过程,过程中包含一些命令,并存储在template's memmory
对于诸如 new frame, endof frame ,new line 等事件发生时,特定的过程(routine)被执行.
这些过程指定DC 处理与display相关的data,address,commands 的方法
比如microcode可以包含,data的mapping, 波形的属性等等.
DC - Display Controller Block Diagram 图如下:
DC 模块中主要部分描述如下:
* New Frame control
对于异步flow ,的new frame 控制,
根据来自Frame Synchronization Unit(in CM sub-block)的请求完成调度
对于同步flow, 根据本地时钟(in DI)生成的触发器完成调度
* Antitearing control
anti tearing 机制就是使用1个信号指示display 刷新帧
* DI arbiter
它的arbitrate的优先级是固定的:sync flow是最优先,接下来是AHB,最后是IDMAC的异步流
同一优先级使用round-robin.
如果有两个sync flow 在不同DI 上,那么可以 设置某个DI优先,通过设置
DC General Register (IPU_DC_GEN) 的
SYNC_PRIORITY_1 & SYNC_PRIORITY_5来实现
DC channel 1和5必须有一个是high priotity (P3291)
* Source arbiter
如果source 和target DI 被选择好,该单元就将请求和信号发到正确的triple buffer和
正确的数据源
* Microcode processing unit(MPU)
到DC的数据可以被附加一些信息,比如new frame,new line,new addr, 这些信息被
MPU处理
Microcode address generator 这个单元用来计算template memory中关联的过程的地址,
并且arbitrate 同时发生的event,并选择event 进行处理
每个event的优先级可以根据CHAN_PRIORITY_CHAN 来设置各通道的各event的prority
* DC template's fields description (P2725)
Stop : 指示当前命令是过程的最后一条命令
OPCODE: 命令
OPRAND: 命令参数
MAPPING: 指定输入,输出bit的map,该map对应到每个byte的offset和Mask
WAVEFORM:
* DC template's commands description(P2727)
主要命令有 HLG,WRG,HLOA,WROA,HLOD,WORD,等等
* 显示控制的生成器 (Display control's generator)
总线映射单元(Bus Mapping Unit)
microcode 的MAPPING 字段的值 为0-30 指向
DC Mapping Configuration Register(IPU_DC_MAP_CONF_X)
的某1组 MAPPING_PNTR_BYTE0_X, MAPPING_PNTR_BYTE1_X,
MAPPING_PNTR_BYTE2_X
MAPPING的值:
0- no mapping . 32bit 按原来输出
1- MAPPING_PNTR_BYTE0_0, MAPPING_PNTR_BYTE1_0,
MAPPING_PNTR_BYTE2_0
对应X =0
30- 对应X=29
然后MAPPING_PNTR_BYTE0_X, MAPPING_PNTR_BYTE1_X,
MAPPING_PNTR_BYTE2_X , 每个都指向MD_OFFSET_和
MD_MASK_的组合
MD_OFFSET_和MD_MASK_的组合为mapping的格式
值位于register DC Mapping Configuration Register 15
(IPU_DC_MAP_CONF_15)开始
/**************************************
*DMFC - Display Multi FIFO Controller*
**************************************/
它的模块图如下:
管理多通道的FIFOs,主要有下面的client:
IDMAC - both read and write
DP - read only
DC - both read and write
IC - write only
AHB - both read and write
DP和DC 读通道是物理上连接到IDMAC或者IC 通道.
IC 只能写DMFC.
当输入来自IC,DMFc替换物理上连接到IDMAC的通道。
这些client 的关系从display port 图可以看得更清楚
下面对DMFC module 部分的描述:
* FIFO allocation to channels
物理内存被分为8段,对每个通道user必须使用DMFC_ST_ADDR定义在该段的start address。
每个通道的fifo的size 通过DMFC_FIFO_SIZE 参数来分配
如果fifo的size 大于IDMAC line的长度,这时对每个通道需要注意一些限制,
对于每个通道,DMFC 能够存储最大的EOL indication 数如表:
Table 45-25. DMFC's number of EOL indications(P2741)
IDMAC 通道23 ,最大fifo size 为IDMAC的3行数据
如果超过上面的的限制,必须设置wait4eot,但是这样的话会当DMFC 分析数据优先于
发送数据时,会有性能的影响。
通过设置DMFC_BURST_SIZE来设置IDMAC的burst size,必须对齐到2的指数值.
并且burst size不能大于fifo的size
* Arbitration between channels
在各通道间的arbitration 完全硬件控制,IDMAC 通道最高优先级,然后是同步通道和异步通道
* Watermark
对每个通道,DMFC 能够生成watermark 信号, 信号发送到IDMAC 并且动态增加通道的优先级在IDMAC 仲裁的时候
watermark功能通过DMFC_WM_EN使能,watermark信号在fifo 上的burst 加上已经请求的burst小于
DMFC_WM_SET bit 所指定的值时被设置,反之清除
* DMFC IC Interface Control Register (IPU_DMFC_IC_CTRL) 中dmfc_ic_in_portDMFC input port
当数据来自IC,那么IC通道替换IDMAC的通道连接到DMFC. 下面的值时可被IC通道替换的IDMAC通道
000 CH28
001 CH41
100 CH23
101 CH27
110 CH24
111 CH29
比如设置为ch23时,如果数据从IC发来时,原来连接到DMFC上的CH23被替换成IC通道
注意这句:
The burst size of the channel coming from the IC should always be programmed to 4 words.
/*********************
* Display Processor *
*********************/
DP处理图像发送到diplay的优先级别。
1. DP 主要任务是执行2平面的复合。DP有2个input FIFOs用来放
full plane和partial 平面。
2. DP 还执行一些图像增强功能,比如gamma校正,颜色空间转换(RGB<->YUV)
DP 模块图如下:
* The DP programming model
DP 支持3个flow,1个同步flow,2个异步flow. 每个flow有一组register.
DP_COM_CONF,
DP_COM_CONF_SYNC,
DP_COM_CONF_ASYNC0,
DP_COM_CONF_ASYNC1.
* full pannel 和partial pannel:
下图中关于partial and full pannel 通过IDMAC通道的FW,FH参数设置。
* Combining Unit
主要的复合操作有:
local alpha blending,
global alpha blending,
use of key color.
order of the planes (full is presented over the partial plane and vice versa)
通过DP_COM_CONF Register设置复合mode,
OP = BG*(1 - a) + FG*a
register中DP_GWSEL bit定义BG pixel是选择full 还是partial plane.
global Alpah被写到DP_GWAV field,
color keying 设置定义在 DP_GWCKR, DP_GWCKG, DP_GWCKB
* Color Space Conversion unit - CSC
S=Ax+B
x -> Clip(Round(S* 2^E)), S=Ax+B
E is an exponent, assuming one of the following values: -1,0,1,2 (allowing weights up to 8).
P2747 转换的矩阵和公式
* Gamut mapping
如果color 变换产生的值超过允许范围,就必须map回允许范围,支持2种算法,由 GAMUT_SAT_EN控制
* Gamma correction
DP_GAMMA_S_SYNC 和 DP_GAMMA_C_SYNC => gamma校正控制register
* DC interface
执行两个任务,
1. 通过得到来自DC的请求,然后经过DP启动flow ,并且当DP准备好了就发送new frame请求给IDMAC
2. 控制DP输出FIFO 并且通过握手机制发送数据到DC