From 4c27878f679ea948ceda9b35e97bd9a9260a4032 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Sat, 14 Dec 2024 11:50:49 -0800 Subject: [PATCH] camerad: prep for the BPS (#34244) prep Co-authored-by: Comma Device --- system/camerad/cameras/spectra.cc | 32 ++++++++++++++++--------------- system/camerad/cameras/spectra.h | 5 +++-- system/camerad/test/debug.sh | 6 +++--- system/camerad/test/icp_debug.sh | 13 +++++++++++++ 4 files changed, 36 insertions(+), 20 deletions(-) create mode 100755 system/camerad/test/icp_debug.sh diff --git a/system/camerad/cameras/spectra.cc b/system/camerad/cameras/spectra.cc index 83b331cf4a..3f41683901 100644 --- a/system/camerad/cameras/spectra.cc +++ b/system/camerad/cameras/spectra.cc @@ -196,9 +196,9 @@ void SpectraMaster::init() { assert(isp_fd >= 0); LOGD("opened isp"); - //icp_fd = open_v4l_by_name_and_index("cam-icp"); - //assert(icp_fd >= 0); - //LOGD("opened icp"); + icp_fd = open_v4l_by_name_and_index("cam-icp"); + assert(icp_fd >= 0); + LOGD("opened icp"); // query ISP for MMU handles LOG("-- Query for MMU handles"); @@ -215,7 +215,6 @@ void SpectraMaster::init() { cdm_iommu = isp_query_cap_cmd.cdm_iommu.non_secure; // query ICP for MMU handles - /* struct cam_icp_query_cap_cmd icp_query_cap_cmd = {0}; query_cap_cmd.caps_handle = (uint64_t)&icp_query_cap_cmd; query_cap_cmd.size = sizeof(icp_query_cap_cmd); @@ -223,7 +222,6 @@ void SpectraMaster::init() { assert(ret == 0); LOGD("using ICP MMU handle: %x", icp_query_cap_cmd.dev_iommu_handle.non_secure); icp_device_iommu = icp_query_cap_cmd.dev_iommu_handle.non_secure; - */ // subscribe LOG("-- Subscribing"); @@ -712,13 +710,13 @@ void SpectraCamera::enqueue_buffer(int i, bool dp) { } sync_objs[i] = sync_create.sync_obj; - /* - ret = do_cam_control(m->cam_sync_fd, CAM_SYNC_CREATE, &sync_create, sizeof(sync_create)); - if (ret != 0) { - LOGE("failed to create fence: %d %d", ret, sync_create.sync_obj); + if (icp_dev_handle > 0) { + ret = do_cam_control(m->cam_sync_fd, CAM_SYNC_CREATE, &sync_create, sizeof(sync_create)); + if (ret != 0) { + LOGE("failed to create fence: %d %d", ret, sync_create.sync_obj); + } + sync_objs_bps_out[i] = sync_create.sync_obj; } - sync_objs_bps_out[i] = sync_create.sync_obj; - */ // schedule request with camera request manager struct cam_req_mgr_sched_request req_mgr_sched_request = {0}; @@ -746,8 +744,10 @@ void SpectraCamera::camera_map_bufs() { mem_mgr_map_cmd.flags = CAM_MEM_FLAG_HW_READ_WRITE; mem_mgr_map_cmd.mmu_hdls[0] = m->device_iommu; mem_mgr_map_cmd.num_hdl = 1; - //mem_mgr_map_cmd.mmu_hdls[1] = m->icp_device_iommu; - //mem_mgr_map_cmd.num_hdl = 2; + if (icp_dev_handle > 0) { + mem_mgr_map_cmd.num_hdl = 2; + mem_mgr_map_cmd.mmu_hdls[1] = m->icp_device_iommu; + } if (is_raw) { // RAW bayer images @@ -899,8 +899,6 @@ void SpectraCamera::configISP() { } void SpectraCamera::configICP() { - if (!enabled) return; - /* Configures both the ICP and BPS. */ @@ -1048,6 +1046,10 @@ void SpectraCamera::camera_close() { // release devices LOGD("-- Release devices"); + if (icp_dev_handle > 0) { + ret = device_control(m->icp_fd, CAM_RELEASE_DEV, session_handle, icp_dev_handle); + LOGD("release icp: %d", ret); + } ret = device_control(m->isp_fd, CAM_RELEASE_DEV, session_handle, isp_dev_handle); LOGD("release isp: %d", ret); ret = device_control(csiphy_fd, CAM_RELEASE_DEV, session_handle, csiphy_dev_handle); diff --git a/system/camerad/cameras/spectra.h b/system/camerad/cameras/spectra.h index 476722b664..689fcb9cc3 100644 --- a/system/camerad/cameras/spectra.h +++ b/system/camerad/cameras/spectra.h @@ -22,8 +22,9 @@ const int MIPI_SETTLE_CNT = 33; // Calculated by camera_freqs.py // CSLDeviceType/CSLPacketOpcodesIFE from camx // cam_packet_header.op_code = (device << 24) | (opcode); -#define CSLDeviceTypeImageSensor (0x1 << 24) -#define CSLDeviceTypeIFE (0xF << 24) +#define CSLDeviceTypeImageSensor (0x01 << 24) +#define CSLDeviceTypeIFE (0x0F << 24) +#define CSLDeviceTypeBPS (0x10 << 24) #define OpcodesIFEInitialConfig 0x0 #define OpcodesIFEUpdate 0x1 diff --git a/system/camerad/test/debug.sh b/system/camerad/test/debug.sh index 44ff0ffa89..8bd8d9d4f0 100755 --- a/system/camerad/test/debug.sh +++ b/system/camerad/test/debug.sh @@ -10,7 +10,7 @@ echo 0 | sudo tee /sys/module/cam_debug_util/parameters/debug_mdl sudo dmesg -C scons -u -j8 --minimal . export DEBUG_FRAMES=1 -#export DISABLE_ROAD=1 DISABLE_WIDE_ROAD=1 -export DISABLE_DRIVER=1 -#export LOGPRINT=debug +export DISABLE_ROAD=1 DISABLE_WIDE_ROAD=1 +#export DISABLE_DRIVER=1 +export LOGPRINT=debug ./camerad diff --git a/system/camerad/test/icp_debug.sh b/system/camerad/test/icp_debug.sh new file mode 100755 index 0000000000..ebeef9bf8f --- /dev/null +++ b/system/camerad/test/icp_debug.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -e + +cd /sys/kernel/debug/tracing +echo "" > trace +echo 1 > tracing_on +#echo Y > /sys/kernel/debug/camera_icp/a5_debug_q +echo 0x1 > /sys/kernel/debug/camera_icp/a5_debug_type +echo 1 > /sys/kernel/debug/tracing/events/camera/enable +echo 0xffffffff > /sys/kernel/debug/camera_icp/a5_debug_lvl +echo 1 > /sys/kernel/debug/tracing/events/camera/cam_icp_fw_dbg/enable + +cat /sys/kernel/debug/tracing/trace_pipe