msm: camera: cdm: Add support for different CDM hardware
Different CDM hardware have different capability and registers. With old register space, handling new features and operations would have been a complex task. This change takes care of old version of CDM and also changes the regspace to provide every register's access to CDM. This change further adds support for "arbitration" in case of multi-context CDMs. Exports reset functionality to clients, detection of CDM hang. Flushing the CDM requests and dumping the FIFO content for all contexts. It also adds submitting "debug_gen_irq" as BL_done IRQ is only an indication for availability of FIFO's. The AHB operations are completed can only be known if the added "debug_gen_irqs" gets executed and are received by the CDM. CRs-Fixed: 2594541 Change-Id: I9846b1c5320ba652c5d3b7d83d616d2dabc843e1 Signed-off-by: Abhilash Kumar <krabhi@codeaurora.org> Signed-off-by: Trishansh Bhardwaj <tbhardwa@codeaurora.org>
Este cometimento está contido em:
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#include "cam_lrme_hw_core.h"
|
||||
@@ -416,12 +416,14 @@ static int cam_lrme_hw_util_submit_req(struct cam_lrme_core *lrme_core,
|
||||
cdm_cmd->flag = false;
|
||||
cdm_cmd->userdata = NULL;
|
||||
cdm_cmd->cookie = 0;
|
||||
cdm_cmd->gen_irq_arb = false;
|
||||
|
||||
for (i = 0; i <= frame_req->num_hw_update_entries; i++) {
|
||||
cmd = (frame_req->hw_update_entries + i);
|
||||
cdm_cmd->cmd[i].bl_addr.mem_handle = cmd->handle;
|
||||
cdm_cmd->cmd[i].offset = cmd->offset;
|
||||
cdm_cmd->cmd[i].len = cmd->len;
|
||||
cdm_cmd->cmd[i].arbitrate = false;
|
||||
}
|
||||
|
||||
rc = cam_cdm_submit_bls(hw_cdm_info->cdm_handle, cdm_cmd);
|
||||
|
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
@@ -53,6 +53,7 @@ static int cam_lrme_hw_dev_util_cdm_acquire(struct cam_lrme_core *lrme_core,
|
||||
cdm_acquire.cam_cdm_callback = NULL;
|
||||
cdm_acquire.id = CAM_CDM_VIRTUAL;
|
||||
cdm_acquire.base_array_cnt = lrme_hw->soc_info.num_reg_map;
|
||||
cdm_acquire.priority = CAM_CDM_BL_FIFO_0;
|
||||
for (i = 0; i < lrme_hw->soc_info.num_reg_map; i++)
|
||||
cdm_acquire.base_array[i] = &lrme_hw->soc_info.reg_map[i];
|
||||
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador