全志H3 DE(Display Engine)数据传输链

overview:

0x01. 个人理解,全志H3的display engine和mali-400 mp2 GPU之间不是关联的,而是各自独立工作的,GPU负责渲染任务,DE负责显示image layer,用户空间的开源lima驱动实现GPU的调用,然后通过drm驱动将数据传输到de进行显示,两者之间是完全依赖软件层进行连接的。
0x02. 如果需要实现GPU加速,首先需要drm驱动的支持,drm实际上驱动的是全志H3的display engine(DE),安装成功drm驱动后,会出现drm设备 /dev/dri/card0(注意:不是card0 + renderD128),成功加载lima驱动(Lima驱动支持mali-400和mali-450)后会出现/dev/dri/card1 和/dev/dri/renderD128 这两个设备,此时只需要安装支持lima驱动的用户空间opengl库就可以实现GPU加速了,如较新版本的mesa库,之后可通过安装kmscube进行测试,H3渲染帧率在50-60fps,执行后会打印openGL库信息,注意看渲染器栏,正常是Mali-400,如果是llvm…,则GPU驱动或opengl库有问题,导致采用的软件渲染。

0x01 传输链

1. DE传输到mixer0 ,mixer0 传输到 tcon0。

de: display-engine {
	compatible = "allwinner,sun8i-h3-display-engine";
    allwinner,pipelines = <&mixer0>;  // 这里的pipeline是数据去向,连接到了mixer0 
    status = "okay";
};

mixer0: mixer@1100000 {
    compatible = "allwinner,sun8i-h3-de2-mixer-0";
    reg = <0x01100000 0x100000>;
    clocks = <&display_clocks CLK_BUS_MIXER0>,<&display_clocks CLK_MIXER0>;
    clock-names = "bus","mod";
    resets = <&display_clocks RST_MIXER0>;
    ports {
           #address-cells = <1>;
           #size-cells = <0>;

           mixer0_out: port@1 {  // mixer0 的输出
               	reg = <1>;
				mixer0_out_tcon0: endpoint {
	                remote-endpoint = <&tcon0_in_mixer0>; // mixer0的输出端连接到了 tcon0 的输入端
                };
           };
    };
};

2. tcon0传输到hdmi。

tcon0: lcd-controller@1c0c000 {
	compatible = "allwinner,sun8i-h3-tcon-tv",
             	 "allwinner,sun8i-a83t-tcon-tv";
	reg = <0x01c0c000 0x1000>;
    interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
    clocks = <&ccu CLK_BUS_TCON0>, <&ccu CLK_TCON0>;
    clock-names = "ahb", "tcon-ch1";
    resets = <&ccu RST_BUS_TCON0>;
    reset-names = "lcd";
    
    ports {
         #address-cells = <1>;
         #size-cells = <0>;

         tcon0_in: port@0 {
             reg = <0>;
             tcon0_in_mixer0: endpoint {
                   remote-endpoint = <&mixer0_out_tcon0>;  // mixer0 输入到这里
             };
         };

         tcon0_out: port@1 {
         	#address-cells = <1>;
            #size-cells = <0>;
            reg = <1>;
            tcon0_out_hdmi: endpoint@1 {
                reg = <1>;
                remote-endpoint = <&hdmi_in_tcon0>;  // tcon0 输出到hdmi
            };
         };
    };
};

2. hdmi传输到connector(接口)。

hdmi: hdmi@1ee0000 {
    compatible = "allwinner,sun8i-h3-dw-hdmi","allwinner,sun8i-a83t-dw-hdmi";
    reg = <0x01ee0000 0x10000>;
    reg-io-width = <1>;
    interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>;
    clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI_DDC>,<&ccu CLK_HDMI>, <&rtc 0>;
    clock-names = "iahb", "isfr", "tmds", "cec";
    resets = <&ccu RST_BUS_HDMI1>;
    reset-names = "ctrl";
    phys = <&hdmi_phy>;
    phy-names = "phy";
    status = "disabled";

    ports {
         #address-cells = <1>;
         #size-cells = <0>;

         hdmi_in: port@0 {
             reg = <0>;

             hdmi_in_tcon0: endpoint {
                 remote-endpoint = <&tcon0_out_hdmi>; // tcon输入到这里
             };
         };

         hdmi_out: port@1 {
             reg = <1>;
             remote-endpoint = <&hdmi_con_in>; // hdmi输出到connector
         };
   };
};

connector {
    compatible = "hdmi-connector";
    type = "a";

    port {
        hdmi_con_in: endpoint {
            remote-endpoint = <&hdmi_out_con>;
        };
    };
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值