【Camera KMD ISP SubSystem笔记】Request 流转与Bubble机制

embedded/2024/9/24 8:27:12/

ISP中断类型

    SOF: 一帧图像数据开始传输
    EOF: 一帧图像数据传输完成
    REG_UPDATE: ISP寄存器更新完成(每个reg group都有独立的这个中断)
    EPOCH: ISP某一行结尾(默认20)就会产生此中断
    BUFFER DONE: 一帧图像数据ISP完全写到DDR了


管理Isp request的几个List
struct cam_isp_context {
    struct list_head               active_req_list;//reg_upd中断将isp request保存到这里并等待buffer done中断
    struct list_head               pending_req_list;//umd submit的isp request保存到这里等待sof(epoch)时crm apply其到HW
    struct list_head               wait_req_list;//apply之后保存isp request到这个链表并且等待reg_upd中断
    struct list_head               free_req_list;//保存所有可用的isp request对象
}

Isp request在kernel里的生命周期图

Bubble Recovery
Isp bubble state request生命周期解析图

Isp bubble 恢复机制
cam_req_mgr_process_error(void *priv, void *data)
{
    switch (err_info->error) {
        case CRM_KMD_ERR_BUBBLE:
            idx = __cam_req_mgr_find_slot_for_req(in_q, err_info->req_id);//在in_q中找到bubble request对应下标
     __cam_req_mgr_tbl_set_all_skip_cnt(&link->req.l_tbl);//让bubble这次遍历skip掉pd 1的request
            in_q->rd_idx = idx;//重置rd_idx为bubble request对应的下标
            slot_diff = in_q->last_applied_idx - idx;//计算出最新applied request到 发生bubble request的下标偏差
            //把出现bubble request开始到last appiled之间的request都标为CRM_SLOT_STATUS_REQ_ADDED,
            //这些request都需要在SOF/EOF来时重新配置到realtime HW
            for (i = 0; i < slot_diff; i++) {
                __cam_req_mgr_inc_idx(&idx, 1, link->req.l_tbl->num_slots);
                if (in_q->slot[idx].status == CRM_SLOT_STATUS_REQ_APPLIED)
                    in_q->slot[idx].status = CRM_SLOT_STATUS_REQ_ADDED;
            }
            __cam_req_mgr_apply_on_bubble(link, err_info);//立刻重新配置pd 2的设备的request到hw
    }
}

正常流程:sof - applywithcf - Applied状态 - reg upd中断 - epoch状态 - bufdone中断
 
ISP bubble :Applied之后应该是reg upd 的中断,这时来了epoch中断,说明这张图无效,此时进入buffle状态,isp通知crm error

如果req5发生bubble,rd_idx会被移动到req5的位置,前面配置到ISP的5的buffer done不会返回到umd。等reapply到5的request,完成buffer done并且状态从bubble恢复之后才返回UMD。

req5在下一个SOF重新配置给ISP HW,如果这是bubbled req5 buf done还没到,就等下个sof再检查bubbled req5 buf done是否到达,到达就reapply req5到isp hw


http://www.ppmy.cn/embedded/21051.html

相关文章

美国言语听力学会(ASHA)关于非处方 (OTC) 助听器的媒体声明(翻译稿)

美国国会于 2021 年 4 月 13 日批准美国听力学会积极提供建议&#xff0c;并一直积极参与制定FDA关于非处方助听器销售的拟议法规。根据2017年通过的立法授权。学院积极参与帮助塑造授权立法&#xff0c;并就即将出台的条例分享了建议。 根据美国卫生与公众服务部NIH / NIDCD的…

K8S深度解析:从入门到精通的全方位指南

目录 一、Kubernetes简介 二、Kubernetes的核心作用 三、Kubernetes架构图例 四、Kubernetes核心概念 Harbor仓库概述&#xff1a; Master----管理组件&#xff1a; API Server&#xff08;集群之心&#xff09;&#xff1a; Scheduler&#xff08;调度大师&…

React的Key和diff

React的Key 先说说React组件的中Key,在渲染一个列表的时候,都要求设置一个唯一的Key,不然就会提示:Each child in a list should have a unique "key" prop. 意思是列表的每一个子元素都应该需要设置一个唯一的key值。在开发中一搬会以id作为key。比如 const …

微服务之并行与分布式计算

一、概述 1.1集中式系统vs分布式系统 集中式系统 集中式系统完全依赖于一台大型的中心计算机的处理能力&#xff0c;这台中心计算机称为主机&#xff08;Host 或 mainframe &#xff09;&#xff0c;与中心计算机相连的终端设备具有各不相同非常低的计算能力。实际上大多数终…

Java删除文件夹及文件夹下所有子目录及文件

代码 import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths;/** * 删除文件夹及文件夹下所有子目录及文件 */ public void deleteFolder() { // 路径 Path directory Paths.get("/your/delete/path"); try (Stream<Pa…

MongoDB的安装(Linux环境)

登录到Linux服务器执行 lsb_release -a &#xff0c;即可得知服务器的版本信息为&#xff1a;CentOS 7。 # CentOS安装lsb_release包 [rootlinux100 ~]# sudo yum install redhat-lsb# 查看Linux版本 [rootlinux100 ~]# lsb_release -a LSB Version: :core-4.1-amd64:core-…

hive创建hbase外部关联表实例

在cdh6.3.2已经做好hbase和hive相关配置&#xff0c;这里不阐述。 要创建上述的表结构&#xff0c;你需要先在HBase中创建相应的表&#xff0c;然后在Hive中创建一个EXTERNAL TABLE来映射到这个HBase表。以下是详细的步骤&#xff1a; 步骤1&#xff1a;在HBase中创建表 确定…

Java学习1:java入门

java入门 1.介绍Java java——sun公司——被甲骨文收购 一开始叫Oak&#xff0c;后期改名为java; java之父詹姆斯高斯林 企业级应用开发 JavaSE JavaEE JavaME 高级编程语言 2.搭建开发环境 JDK8&#xff0c;JDK11&#xff0c;JDK17————>LTS长期支持版 ps:在…