Hi Rob,
+ rockchip / dri email list back
On 03/23/2016 10:20 PM, Rob Herring wrote:
On Mon, Mar 21, 2016 at 05:40:06PM +0800, Yakir Yang wrote:
Rockchip RGA is a separate 2D raster graphic acceleration unit. It accelerates 2D graphics operations, such as point/line drawing, image scaling, rotation, BitBLT, alpha blending and image blur/sharpness.
The RGA driver is based on Exynos G2D driver, it is performed by two tasks simply.
- Configures the rendering parameters, such as foreground color and coordinates data by setting the drawing context registers.
- Start the rendering process by calling rga_exec() ioctl.
The RGA supports DMA mode as host interface. User can make command list to reduce HOST(ARM) loads. The contents of The command list is setted to relevant registers of RGA by DMA.
The command list is composed Header and command sets and Tail.
- Header: The number of command set(4Bytes)
- Command set: Register offset(4Bytes) + Register data(4Bytes)
- Tail: Pointer of base address of the other command list(4Bytes)
By Tail field, the G2D can process many command lists without halt at one go.
The G2D has following the rendering pipeline. ---> Color Fill ---> | | --> DMA (read) ---> Src Bitmap Process ----> Alpha/ROP ---> Format convert ---> DMA (Write) | | ---> Dst Bitmap Process --->
And supports various operations from the rendering pipeline.
- copy
- fast solid color fill
- rotation
- flip
- 4 operand raster operation(ROP4)
- alpha blending
- color key
- dithering
- etc
User should make the command list to data and registers needed by operation to use. The Rockchip RGA driver only manages the command lists received from user. Some registers needs memory base address(physical address) of image. User doesn't know its physical address, so fills the gem handle of that memory than address to command sets, then RGA driver converts it to memory base address.
We adds three ioctls for Rockchip RGA.
- ioctls
DRM_ROCKCHIP_RGA_GET_VER: get the RGA hardware version DRM_ROCKCHIP_RGA_SET_CMDLIST: set the command list from user to driver DRM_ROCKCHIP_RGA_EXEC: execute the command lists setted to driver
Signed-off-by: Yakir Yang ykk@rock-chips.com
.../bindings/display/rockchip/rockchip-rga.txt | 36 + drivers/gpu/drm/rockchip/Kconfig | 9 + drivers/gpu/drm/rockchip/Makefile | 1 + drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 35 +- drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 4 + drivers/gpu/drm/rockchip/rockchip_drm_rga.c | 977 +++++++++++++++++++++ drivers/gpu/drm/rockchip/rockchip_drm_rga.h | 108 +++ include/uapi/drm/rockchip_drm.h | 63 ++ 8 files changed, 1232 insertions(+), 1 deletion(-) create mode 100644 Documentation/devicetree/bindings/display/rockchip/rockchip-rga.txt create mode 100644 drivers/gpu/drm/rockchip/rockchip_drm_rga.c create mode 100644 drivers/gpu/drm/rockchip/rockchip_drm_rga.h create mode 100644 include/uapi/drm/rockchip_drm.h
diff --git a/Documentation/devicetree/bindings/display/rockchip/rockchip-rga.txt b/Documentation/devicetree/bindings/display/rockchip/rockchip-rga.txt new file mode 100644 index 0000000..0c606cb --- /dev/null +++ b/Documentation/devicetree/bindings/display/rockchip/rockchip-rga.txt @@ -0,0 +1,36 @@ +device-tree bindings for rockchip 2D raster graphic acceleration controller (RGA)
s/rockchip/RockChip/
Done
+RGA is a separate 2D raster graphic acceleration unit. It accelerates 2D +graphics operations, such as point/line drawing, image scaling, rotation, +BitBLT, alpha blending and image blur/sharpness.
+Required properties: +- compatible: value should be one of the following
"rockchip,rk3228-rga";
"rockchip,rk3288-rga";
"rockchip,rk3399-rga";
+- interrupts: RGA interrupt number.
+- clocks: phandle to RGA sclk/hclk/aclk clocks
+- clock-names: should be "aclk" "hclk" and "sclk"
comma ^
You have different orders for clocks and clock-names. Please be clear what the order is.
Okay
+- resets: Must contain an entry for each entry in reset-names.
- See ../reset/reset.txt for details.
+- reset-names: should be "aclk" "hclk" and "sclk"
Same as clocks?
I should rename them to "core", "axi" and "ahb"
+Example: +SoC specific DT entry:
- rga: rga@ff680000 {
gpu@... to be generic
Done
compatible = "rockchip,rk3399-rga";
reg = <0xff680000 0x10000>;
interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "rga";
Not documented. interrupt-names is pointless for single irq, so just drop it.
Okay
clocks = <&cru ACLK_RGA>, <&cru HCLK_RGA>, <&cru SCLK_RGA>;
clock-names = "aclk", "hclk", "sclk";
resets = <&cru SRST_A_RGA>, <&cru SRST_H_RGA>, <&cru SRST_RGA_CORE>;
reset-names = "aclk", "hclk", "sclk";
status = "disabled";
- };
dri-devel@lists.freedesktop.org