/* * Copyright (c) 2019 Rockchip Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #include "Isp20_module_dbg.h" #include "base/xcam_log.h" #include "rk_isp20_hw.h" #ifdef RUNTIME_MODULE_DEBUG /* bit 36 */ #define ALL_ISP_MODULES RK_ISP2X_MAX_ID /* bit 41 */ #define ALL_ISPP_MODULES RK_ISP2X_PP_MAX_ID /* bit 42 */ #define SENSOR_EXPOSURE_ID (ALL_ISPP_MODULES + 1) /* bit 43 */ #define ONLY_INIT_PARAMS (SENSOR_EXPOSURE_ID + 1) static const char* rkaiq_runtime_dbg_en = "rkaiq_runtime_dbg_en"; static const char* force_disable_modules_en = "force_disable_modules_en"; static const char* force_disable_modules_cfg_update = "force_disable_modules_cfg_update"; static const char* force_bypass_modules_params = "force_bypass_modules_params"; static const char* disable_algo_user_api_mask = "disable_algo_user_api_mask"; static unsigned long long g_disable_modules_en = 0x0; static unsigned long long g_disable_modules_cfg_update = 0x0; static unsigned long long g_bypass_module_params = 0; /* disable specific isp modules ennable or cfg_update */ unsigned long long g_disable_isp_modules_en = 0x0; unsigned long long g_disable_isp_modules_cfg_update = 0x0; /* disable specific ispp modules ennable or cfg_update */ int g_disable_ispp_modules_en = 0x0; int g_disable_ispp_modules_cfg_update = 0x0; /* not apply exposure params, including the first params */ int g_bypass_exp_params = 0; /* not apply isp params, including the first params */ int g_bypass_isp_params = 0; /* not apply ispp params, including the first params */ int g_bypass_ispp_params = 0; /* just apply the init params, and bypass the latter params */ int g_apply_init_params_only = 0; /* mask bit refer to RkAiqAlgoType_t in rk_aiq_algo_des.h */ uint64_t g_disable_algo_user_api_mask = 0x0ULL; int get_rkaiq_runtime_dbg() { unsigned long long rkaiq_runtime_dbg_en_tmp = 0x0; xcam_get_enviroment_value(rkaiq_runtime_dbg_en, &rkaiq_runtime_dbg_en_tmp); return (int)rkaiq_runtime_dbg_en_tmp; } void get_dbg_force_disable_mods_env() { unsigned long long tmp = 0; xcam_get_enviroment_value(disable_algo_user_api_mask, &tmp); g_disable_algo_user_api_mask = (int)tmp; xcam_get_enviroment_value(force_bypass_modules_params, &g_bypass_module_params); if (g_bypass_module_params & (1ULL << SENSOR_EXPOSURE_ID)) g_bypass_exp_params = 1; else g_bypass_exp_params = 0; if (g_bypass_module_params & (1ULL << ALL_ISP_MODULES)) g_bypass_isp_params = 1; else g_bypass_isp_params = 0; if (g_bypass_module_params & (1ULL << ALL_ISPP_MODULES)) g_bypass_ispp_params = 1; else g_bypass_ispp_params = 0; LOGI("ALL_ISP_MODULES %d, ALL_ISPP_MODULES %d,ONLY_INIT_PARAMS %d", ALL_ISP_MODULES, ALL_ISPP_MODULES, ONLY_INIT_PARAMS); LOGI("g_bypass_module_params 0x%llx", g_bypass_module_params); if (g_bypass_module_params & (1ULL << ONLY_INIT_PARAMS)) g_apply_init_params_only = 1; else g_apply_init_params_only = 0; xcam_get_enviroment_value(force_disable_modules_en, &g_disable_modules_en); if (g_disable_modules_en & (1ULL << ALL_ISP_MODULES)) { for (int i = 0; i < ALL_ISP_MODULES; i++) g_disable_isp_modules_en |= 1ULL << i; } else { for (int i = 0; i < ALL_ISP_MODULES; i++) { if (g_disable_modules_en & (1ULL << i)) g_disable_isp_modules_en |= 1ULL << i; else g_disable_isp_modules_en &= ~(1ULL << i); } } if (g_disable_modules_en & (1ULL << ALL_ISPP_MODULES)) { for (int i = 0; i < ALL_ISPP_MODULES - ALL_ISP_MODULES; i++) g_disable_ispp_modules_en |= 1ULL << i; } else { for (int i = 0; i < ALL_ISPP_MODULES - ALL_ISP_MODULES; i++) { if (g_disable_modules_en & (1ULL << (ALL_ISP_MODULES + 1 + i))) g_disable_ispp_modules_en |= 1ULL << i; else g_disable_ispp_modules_en &= ~(1ULL << i); } } xcam_get_enviroment_value(force_disable_modules_cfg_update, &g_disable_modules_cfg_update); if (g_disable_modules_cfg_update & (1ULL << ALL_ISP_MODULES)) { for (int i = 0; i < ALL_ISP_MODULES; i++) g_disable_isp_modules_cfg_update |= 1ULL << i; } else { for (int i = 0; i < ALL_ISP_MODULES; i++) { if (g_disable_modules_cfg_update & (1ULL << i)) g_disable_isp_modules_cfg_update |= 1ULL << i; else g_disable_isp_modules_cfg_update &= ~(1ULL << i); } } if (g_disable_modules_cfg_update & (1ULL << ALL_ISPP_MODULES)) { for (int i = 0; i < ALL_ISPP_MODULES - ALL_ISP_MODULES; i++) g_disable_ispp_modules_cfg_update |= 1 << i; } else { for (int i = 0; i < ALL_ISPP_MODULES - ALL_ISP_MODULES; i++) { if (g_disable_modules_cfg_update & (1ULL << (ALL_ISP_MODULES + 1 + i))) g_disable_ispp_modules_cfg_update |= 1 << i; else g_disable_ispp_modules_cfg_update &= ~(1 << i); } } LOGI("isp(en:0x%llx, cfg_up:0x%llx, bypass:%d),\n" "ispp(en:0x%x, cfg_up:0x%x, bypass:%d),\n" "exp_byapss:%d, init_params_only:%d", g_disable_isp_modules_en, g_disable_isp_modules_cfg_update, g_bypass_isp_params, g_disable_ispp_modules_en, g_disable_ispp_modules_cfg_update, g_bypass_ispp_params, g_bypass_exp_params, g_apply_init_params_only); } #endif