第27讲 ISP设备绑定到SMMU

2024年11月06日 第27讲 ISP设备绑定到SMMU 极客笔记

本讲是Camera KMD ISP子系统专题的第27讲,我们讲解Camera KMD ISP子系统之Camera ISP设备绑定到SMMU。

更多资源:

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

DTS里如何配置

iommus = <&apps_smmu 0x800>
  • apps_smmu:arm smmu驱动的phandle

  • 0x800: streamId

使用smmu的外设如何关联到arm smmu驱动

IO 设备初始化时进行DMA configure

初始化IO 设备在smmu的ste,cd,pgd

L2 STE长什么样

STE,CD,PGD的模型

STE 地址如何让smmu hw知道

arm_smmu_device_probe()
    arm_smmu_init_structures(smmu);
        arm_smmu_init_strtab(smmu);
            arm_smmu_init_strtab_2lvl(smmu);
                //分配num_l1_ents多个stream table entry内容
                strtab = dmam_alloc_coherent(smmu->dev, l1size, &cfg->strtab_dma, GFP_KERNEL | __GFP_ZERO);
                cfg->strtab = strtab;
                arm_smmu_init_l1_strtab(smmu);
         //分配num_l1_ents多个l1 desc,l1 desc为中间变量存储L2 ste 地址,最终l1 desc的内容会保存到cfg->strtab_dma[sid>>STRTAB_SPLIT]
                    cfg->l1_desc = devm_kzalloc(smmu->dev, size, GFP_KERNEL);
            /* Set the strtab base address */
            reg  = smmu->strtab_cfg.strtab_dma & STRTAB_BASE_ADDR_MASK;
            reg |= STRTAB_BASE_RA;
            smmu->strtab_cfg.strtab_base = reg;//把strtab_dma地址存到strtab_base里面
    arm_smmu_device_reset(smmu, bypass);//重启smmu设备
     //配置STE BASE地址到SMMU硬件寄存器,这样SMMU就可以通过这个基地址找到后面STE,CD,Page table了
        writeq_relaxed(smmu->strtab_cfg.strtab_base, smmu->base + ARM_SMMU_STRTAB_BASE);

初始化IO 设备domain的iova地址空间

本文链接:http://so.lmcjl.com/news/17177/

展开阅读全文