第26讲 Camera SMMU软件框架

本讲是Camera KMD ISP子系统专题的第26讲,我们讲解Camera KMD ISP子系统之Camear SMMU软件框架。

更多资源:

资源 描述
在线课程 极客笔记在线课程
知识星球 星球名称:深入浅出Android Camera
星球ID: 17296815
Wechat 极客笔记圈

什么是StreamId, STE, CD

StreamID

  • device 通过物理线连接到SMMU ,这个StreamID就是用来标识SMMU上连接的设备。Smmu驱动会为各个streamid创建页表

STE(Stream Table Entry)

  • STE: stream Table Entry,可以理解为SMMU页表转换的第一级索引,每一个streamID代表着一个STE,通过这个STE指向的链接可以找到真正的虚地址==》物理地址转换的页表。

CD(Context Descriptor)

  • CD: Context Descriptor, stage 1的页表配置项,它其中的TTB0指向了真正的页表信息,比如PGD

StreamId与STE

StreamId与STE

StreamId,STE,CD与页表

StreamId,STE,CD与页表

StreamId在何处

    msm_cam_smmu_ipe {
        compatible = "qcom,msm-cam-smmu-cb";
        iommus = <&apps_smmu 0x820 0x00>;
    }//ipe的streamid为0x820

高通Camera Smmu驱动框架

高通Camera Smmu驱动框架

struct cam_iommu_cb_set

//代表一组cb,是qcom camera smmu驱动的主要入口
//对应dts里compatible = "qcom,msm-cam-smmu";的设备
struct cam_iommu_cb_set {
    struct cam_context_bank_info *cb_info;//存储了多个cb,每个cb对应smmu一套页表转换结构
    u32 cb_num;//有多少个cb
    u32 cb_init_count;//已经初始化几个cb了
}

struct cam_context_bank_info

//代表一个cb,对应arm smmu里面的一套页表转换结构。如果map一个buffer到该设备,通过这个cb到arm smmu去创建页表转换关系
//对应dts里compatible = "qcom,msm-cam-smmu-cb";的设备
struct cam_context_bank_info {
    struct device *dev;// io设备句柄
    struct iommu_domain *domain;// 该设备对应的domain,不同domain iommu spec不同,例如order
    struct list_head smmu_buf_list;//当前cb已经map了哪些buffer
    struct list_head smmu_buf_kernel_list;//当前cb已经map了哪些kernel buffer,只看到icp在用
}

Qcom camera memory与cb的关系

Qcom camera memory与cb的关系

Camera io device与arm smmu driver的千丝万缕

Camera io device与arm smmu driver的千丝万缕

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程