msm: camera: utils: Add support for LowSVS_D1
Currently, lowest clk voting level supported is LowSVS, this change will add support to a lower voting level, LowSVS_D1. CRs-Fixed: 3480799 Change-Id: Ibdfe9d1d05aa45439a537cebe828cceea83f39d4 Signed-off-by: Atiya Kailany <quic_akailany@quicinc.com>
This commit is contained in:

committed by
Camera Software Integration

parent
06420c01fc
commit
57f43538c7
@@ -34,7 +34,7 @@ int cam_cdm_util_cpas_start(struct cam_hw_info *cdm_hw)
|
||||
core = (struct cam_cdm *)cdm_hw->core_info;
|
||||
|
||||
ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_VOTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
axi_vote.num_paths = 1;
|
||||
axi_vote.axi_path[0].path_data_type = CAM_AXI_PATH_DATA_ALL;
|
||||
axi_vote.axi_path[0].transac_type = CAM_AXI_TRANSACTION_READ;
|
||||
|
@@ -1894,7 +1894,7 @@ int cam_hw_cdm_get_cdm_config(struct cam_hw_info *cdm_hw)
|
||||
core = (struct cam_cdm *)cdm_hw->core_info;
|
||||
soc_info = &cdm_hw->soc_info;
|
||||
rc = cam_soc_util_enable_platform_resource(soc_info, CAM_CLK_SW_CLIENT_IDX, true,
|
||||
CAM_SVS_VOTE, true);
|
||||
soc_info->lowest_clk_level, true);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_CDM, "Enable platform failed for dev %s",
|
||||
soc_info->dev_name);
|
||||
@@ -1997,7 +1997,7 @@ int cam_hw_cdm_init(void *hw_priv,
|
||||
cdm_core = (struct cam_cdm *)cdm_hw->core_info;
|
||||
|
||||
rc = cam_soc_util_enable_platform_resource(soc_info, CAM_CLK_SW_CLIENT_IDX, true,
|
||||
CAM_SVS_VOTE, true);
|
||||
soc_info->lowest_clk_level, true);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_CDM, "Enable platform failed for %s%d",
|
||||
soc_info->label_name, soc_info->index);
|
||||
|
@@ -523,7 +523,7 @@ static int cam_cpas_util_vote_default_ahb_axi(struct cam_hw_info *cpas_hw,
|
||||
uint64_t applied_ab_bw = 0, applied_ib_bw = 0;
|
||||
|
||||
rc = cam_cpas_util_vote_bus_client_level(&cpas_core->ahb_bus_client,
|
||||
(enable == true) ? CAM_SVS_VOTE : CAM_SUSPEND_VOTE);
|
||||
(enable == true) ? CAM_LOWSVS_D1_VOTE : CAM_SUSPEND_VOTE);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_CPAS, "Failed in AHB vote, enable=%d, rc=%d",
|
||||
enable, rc);
|
||||
@@ -2118,7 +2118,7 @@ static int cam_cpas_util_get_ahb_level(struct cam_hw_info *cpas_hw,
|
||||
(struct cam_cpas_private_soc *) cpas_hw->soc_info.soc_private;
|
||||
struct dev_pm_opp *opp;
|
||||
unsigned int corner;
|
||||
enum cam_vote_level level = CAM_SVS_VOTE;
|
||||
enum cam_vote_level level = CAM_LOWSVS_D1_VOTE;
|
||||
unsigned long corner_freq = freq;
|
||||
int i;
|
||||
|
||||
@@ -2245,7 +2245,7 @@ static int cam_cpas_hw_update_ahb_vote(struct cam_hw_info *cpas_hw,
|
||||
CAM_DBG(CAM_CPAS, "0 ahb vote from client %d",
|
||||
client_handle);
|
||||
ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
ahb_vote.vote.level = CAM_SVS_VOTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
}
|
||||
|
||||
if (!CAM_CPAS_CLIENT_VALID(client_indx))
|
||||
@@ -2329,7 +2329,7 @@ static int cam_cpas_hw_start(void *hw_priv, void *start_args,
|
||||
struct cam_ahb_vote *ahb_vote;
|
||||
struct cam_ahb_vote remove_ahb;
|
||||
struct cam_axi_vote axi_vote = {0};
|
||||
enum cam_vote_level applied_level = CAM_SVS_VOTE;
|
||||
enum cam_vote_level applied_level = CAM_LOWSVS_D1_VOTE;
|
||||
int rc, i = 0, err_val = 0;
|
||||
struct cam_cpas_private_soc *soc_private = NULL;
|
||||
bool invalid_start = true;
|
||||
@@ -4697,7 +4697,8 @@ int cam_cpas_hw_probe(struct platform_device *pdev,
|
||||
if (rc)
|
||||
goto axi_cleanup;
|
||||
|
||||
rc = cam_cpas_soc_enable_resources(&cpas_hw->soc_info, CAM_SVS_VOTE);
|
||||
rc = cam_cpas_soc_enable_resources(&cpas_hw->soc_info,
|
||||
cpas_hw->soc_info.lowest_clk_level);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_CPAS, "failed in soc_enable_resources, rc=%d", rc);
|
||||
goto remove_default_vote;
|
||||
|
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/of.h>
|
||||
@@ -156,7 +156,7 @@ int cam_cre_init_hw(void *device_priv,
|
||||
}
|
||||
|
||||
cpas_vote->ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
cpas_vote->ahb_vote.vote.level = CAM_SVS_VOTE;
|
||||
cpas_vote->ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
cpas_vote->axi_vote.num_paths = 1;
|
||||
cpas_vote->axi_vote.axi_path[0].path_data_type =
|
||||
CAM_AXI_PATH_DATA_ALL;
|
||||
@@ -480,7 +480,7 @@ int cam_cre_process_cmd(void *device_priv, uint32_t cmd_type,
|
||||
|
||||
if (!core_info->clk_enable) {
|
||||
rc = cam_soc_util_clk_enable_default(soc_info, CAM_CLK_SW_CLIENT_IDX,
|
||||
CAM_SVS_VOTE);
|
||||
soc_info->lowest_clk_level);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_CRE, "Clock enable is failed");
|
||||
return rc;
|
||||
|
@@ -1,6 +1,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_device.h>
|
||||
@@ -187,7 +188,7 @@ static int cam_cre_component_bind(struct device *dev,
|
||||
goto enable_soc_failed;
|
||||
}
|
||||
cpas_vote.ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
cpas_vote.ahb_vote.vote.level = CAM_SVS_VOTE;
|
||||
cpas_vote.ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
cpas_vote.axi_vote.num_paths = 1;
|
||||
cpas_vote.axi_vote.axi_path[0].path_data_type =
|
||||
CAM_AXI_PATH_DATA_CRE_WR_OUT;
|
||||
|
@@ -40,7 +40,7 @@ int cam_cre_enable_soc_resources(struct cam_hw_soc_info *soc_info)
|
||||
int rc;
|
||||
|
||||
rc = cam_soc_util_enable_platform_resource(soc_info, CAM_CLK_SW_CLIENT_IDX, true,
|
||||
CAM_SVS_VOTE, true);
|
||||
soc_info->lowest_clk_level, true);
|
||||
if (rc)
|
||||
CAM_ERR(CAM_CRE, "enable platform failed %d", rc);
|
||||
|
||||
|
@@ -114,7 +114,7 @@ int cam_custom_hw_sub_mod_enable_soc_resources(struct cam_hw_soc_info *soc_info)
|
||||
struct cam_axi_vote axi_vote = {0};
|
||||
|
||||
ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_VOTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
axi_vote.num_paths = 2;
|
||||
axi_vote.axi_path[0].path_data_type = CAM_AXI_PATH_DATA_ALL;
|
||||
axi_vote.axi_path[0].transac_type = CAM_AXI_TRANSACTION_READ;
|
||||
@@ -135,7 +135,7 @@ int cam_custom_hw_sub_mod_enable_soc_resources(struct cam_hw_soc_info *soc_info)
|
||||
}
|
||||
|
||||
rc = cam_soc_util_enable_platform_resource(soc_info, CAM_CLK_SW_CLIENT_IDX, true,
|
||||
CAM_LOWSVS_VOTE, true);
|
||||
soc_info->lowest_clk_level, true);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_CUSTOM, "Error! enable platform failed rc=%d", rc);
|
||||
goto stop_cpas;
|
||||
|
@@ -111,7 +111,7 @@ int cam_fd_soc_enable_resources(struct cam_hw_soc_info *soc_info)
|
||||
int rc;
|
||||
|
||||
ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_VOTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
axi_vote.num_paths = 2;
|
||||
axi_vote.axi_path[0].path_data_type = CAM_AXI_PATH_DATA_ALL;
|
||||
axi_vote.axi_path[0].transac_type = CAM_AXI_TRANSACTION_READ;
|
||||
@@ -132,7 +132,7 @@ int cam_fd_soc_enable_resources(struct cam_hw_soc_info *soc_info)
|
||||
}
|
||||
|
||||
rc = cam_soc_util_enable_platform_resource(soc_info, CAM_CLK_SW_CLIENT_IDX, true,
|
||||
CAM_SVS_VOTE, true);
|
||||
soc_info->lowest_clk_level, true);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_FD, "Error enable platform failed, rc=%d", rc);
|
||||
goto stop_cpas;
|
||||
|
@@ -70,7 +70,7 @@ int cam_bps_init_hw(void *device_priv,
|
||||
}
|
||||
|
||||
cpas_vote.ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
cpas_vote.ahb_vote.vote.level = CAM_LOWSVS_VOTE;
|
||||
cpas_vote.ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
cpas_vote.axi_vote.num_paths = 1;
|
||||
cpas_vote.axi_vote.axi_path[0].path_data_type =
|
||||
CAM_BPS_DEFAULT_AXI_PATH;
|
||||
|
@@ -667,7 +667,7 @@ static int cam_icp_remove_ctx_bw(struct cam_icp_hw_mgr *hw_mgr,
|
||||
if (total_ab_bw == 0) {
|
||||
/* If no more contexts are active, reduce AHB vote to minimum */
|
||||
clk_update.ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
clk_update.ahb_vote.vote.level = CAM_LOWSVS_VOTE;
|
||||
clk_update.ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
clk_update.ahb_vote_valid = true;
|
||||
} else {
|
||||
clk_update.ahb_vote_valid = false;
|
||||
|
@@ -237,7 +237,7 @@ int cam_icp_soc_resources_enable(struct cam_hw_soc_info *soc_info)
|
||||
int rc = 0;
|
||||
|
||||
rc = cam_soc_util_enable_platform_resource(soc_info, CAM_CLK_SW_CLIENT_IDX, true,
|
||||
CAM_SVS_VOTE, true);
|
||||
soc_info->lowest_clk_level, true);
|
||||
if (rc)
|
||||
CAM_ERR(CAM_ICP, "failed to enable soc resources rc=%d", rc);
|
||||
|
||||
|
@@ -220,7 +220,7 @@ int cam_icp_v1_init_hw(void *device_priv, void *args,
|
||||
icp_v1_soc_info = soc_info->soc_private;
|
||||
|
||||
cpas_vote.ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
cpas_vote.ahb_vote.vote.level = CAM_LOWSVS_VOTE;
|
||||
cpas_vote.ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
cpas_vote.axi_vote.num_paths = 1;
|
||||
cpas_vote.axi_vote.axi_path[0].path_data_type =
|
||||
CAM_ICP_DEFAULT_AXI_PATH;
|
||||
|
@@ -172,7 +172,7 @@ static int cam_icp_v2_cpas_start(struct cam_icp_v2_core_info *core_info)
|
||||
struct cam_icp_cpas_vote vote;
|
||||
|
||||
vote.ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
vote.ahb_vote.vote.level = CAM_LOWSVS_VOTE;
|
||||
vote.ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
vote.axi_vote.num_paths = 1;
|
||||
|
||||
vote.axi_vote.axi_path[0].path_data_type = CAM_ICP_DEFAULT_AXI_PATH;
|
||||
|
@@ -68,7 +68,7 @@ int cam_ipe_init_hw(void *device_priv,
|
||||
}
|
||||
|
||||
cpas_vote.ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
cpas_vote.ahb_vote.vote.level = CAM_LOWSVS_VOTE;
|
||||
cpas_vote.ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
cpas_vote.axi_vote.num_paths = 1;
|
||||
cpas_vote.axi_vote.axi_path[0].path_data_type =
|
||||
CAM_IPE_DEFAULT_AXI_PATH;
|
||||
|
@@ -71,7 +71,7 @@ int cam_ofe_init_hw(void *device_priv,
|
||||
}
|
||||
|
||||
cpas_vote.ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
cpas_vote.ahb_vote.vote.level = CAM_LOWSVS_VOTE;
|
||||
cpas_vote.ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
cpas_vote.axi_vote.num_paths = 1;
|
||||
cpas_vote.axi_vote.axi_path[0].path_data_type =
|
||||
CAM_OFE_DEFAULT_AXI_PATH;
|
||||
|
@@ -4676,6 +4676,7 @@ static int cam_ife_csid_ver2_set_cesta_clk_rate(struct cam_ife_csid_ver2_hw *csi
|
||||
{
|
||||
struct cam_hw_soc_info *soc_info = &csid_hw->hw_info->soc_info;
|
||||
bool channel_switch = force_channel_switch;
|
||||
uint32_t lowest_clk_lvl = soc_info->lowest_clk_level;
|
||||
int rc = 0;
|
||||
|
||||
CAM_DBG(CAM_ISP, "CSID:%d clk_rate=%llu, channel_switch=%d, identifier=%s",
|
||||
@@ -4684,12 +4685,12 @@ static int cam_ife_csid_ver2_set_cesta_clk_rate(struct cam_ife_csid_ver2_hw *csi
|
||||
if (csid_hw->clk_rate) {
|
||||
rc = cam_soc_util_set_src_clk_rate(soc_info, csid_hw->hw_intf->hw_idx,
|
||||
csid_hw->clk_rate,
|
||||
soc_info->clk_rate[CAM_LOWSVS_VOTE][soc_info->src_clk_idx]);
|
||||
soc_info->clk_rate[lowest_clk_lvl][soc_info->src_clk_idx]);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_ISP,
|
||||
"Failed in setting cesta clk rates[high low]:[%ld %ld] client_idx:%d rc:%d",
|
||||
csid_hw->clk_rate,
|
||||
soc_info->clk_rate[CAM_LOWSVS_VOTE][soc_info->src_clk_idx],
|
||||
soc_info->clk_rate[lowest_clk_lvl][soc_info->src_clk_idx],
|
||||
csid_hw->hw_intf->hw_idx, rc);
|
||||
return rc;
|
||||
}
|
||||
@@ -7100,7 +7101,7 @@ int cam_ife_csid_ver2_irq_line_test(void *hw_priv)
|
||||
|
||||
mem_base = csid_hw->hw_info->soc_info.reg_map[CAM_IFE_CSID_CLC_MEM_BASE_ID].mem_base;
|
||||
csid_reg = csid_hw->core_info->csid_reg;
|
||||
rc = cam_ife_csid_enable_soc_resources(soc_info, CAM_LOWSVS_VOTE);
|
||||
rc = cam_ife_csid_enable_soc_resources(soc_info, soc_info->lowest_clk_level);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_ISP, "CSID[%u] Enable soc failed", csid_hw->hw_intf->hw_idx);
|
||||
return rc;
|
||||
|
@@ -167,7 +167,7 @@ int cam_ife_csid_enable_soc_resources(
|
||||
soc_private = soc_info->soc_private;
|
||||
|
||||
ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_VOTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
axi_vote.num_paths = 1;
|
||||
axi_vote.axi_path[0].path_data_type = CAM_AXI_PATH_DATA_ALL;
|
||||
axi_vote.axi_path[0].transac_type = CAM_AXI_TRANSACTION_WRITE;
|
||||
|
@@ -184,7 +184,7 @@ int cam_sfe_enable_soc_resources(struct cam_hw_soc_info *soc_info)
|
||||
soc_private = soc_info->soc_private;
|
||||
|
||||
ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_VOTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
axi_vote.num_paths = 1;
|
||||
axi_vote.axi_path[0].path_data_type = CAM_AXI_PATH_DATA_SFE_NRDI;
|
||||
axi_vote.axi_path[0].transac_type = CAM_AXI_TRANSACTION_WRITE;
|
||||
@@ -212,7 +212,7 @@ int cam_sfe_enable_soc_resources(struct cam_hw_soc_info *soc_info)
|
||||
*/
|
||||
rc = cam_soc_util_enable_platform_resource(soc_info,
|
||||
(soc_info->is_clk_drv_en ? soc_info->index : CAM_CLK_SW_CLIENT_IDX), true,
|
||||
CAM_LOWSVS_VOTE, true);
|
||||
soc_info->lowest_clk_level, true);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_SFE, "Enable platform failed rc=%d", rc);
|
||||
goto stop_cpas;
|
||||
|
@@ -178,10 +178,12 @@ static int cam_sfe_top_set_hw_clk_rate(struct cam_sfe_top_priv *top_priv,
|
||||
int rc = 0, clk_lvl = -1;
|
||||
unsigned long cesta_clk_rate_high, cesta_clk_rate_low;
|
||||
int cesta_client_idx = -1;
|
||||
uint32_t lowest_clk_lvl;
|
||||
|
||||
soc_info = top_priv->common_data.soc_info;
|
||||
soc_private = (struct cam_sfe_soc_private *)soc_info->soc_private;
|
||||
|
||||
lowest_clk_lvl = soc_info->lowest_clk_level;
|
||||
cesta_clk_rate_high = final_clk_rate;
|
||||
cesta_clk_rate_low = final_clk_rate;
|
||||
|
||||
@@ -189,7 +191,7 @@ static int cam_sfe_top_set_hw_clk_rate(struct cam_sfe_top_priv *top_priv,
|
||||
cesta_client_idx = top_priv->common_data.hw_intf->hw_idx;
|
||||
if (is_drv_config_en)
|
||||
cesta_clk_rate_low =
|
||||
soc_info->clk_rate[CAM_LOWSVS_VOTE][soc_info->src_clk_idx];
|
||||
soc_info->clk_rate[lowest_clk_lvl][soc_info->src_clk_idx];
|
||||
else
|
||||
cesta_clk_rate_low = final_clk_rate;
|
||||
}
|
||||
|
@@ -95,7 +95,7 @@ int cam_tfe_csid_enable_soc_resources(
|
||||
soc_private = soc_info->soc_private;
|
||||
|
||||
ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
ahb_vote.vote.level = CAM_SVS_VOTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
axi_vote.num_paths = 1;
|
||||
axi_vote.axi_path[0].path_data_type = CAM_AXI_PATH_DATA_ALL;
|
||||
axi_vote.axi_path[0].transac_type = CAM_AXI_TRANSACTION_WRITE;
|
||||
|
@@ -159,7 +159,7 @@ int cam_tfe_enable_soc_resources(struct cam_hw_soc_info *soc_info)
|
||||
soc_private = soc_info->soc_private;
|
||||
|
||||
ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
ahb_vote.vote.level = CAM_SVS_VOTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
axi_vote.num_paths = 1;
|
||||
axi_vote.axi_path[0].path_data_type = CAM_AXI_PATH_DATA_IFE_VID;
|
||||
axi_vote.axi_path[0].transac_type = CAM_AXI_TRANSACTION_WRITE;
|
||||
@@ -175,7 +175,7 @@ int cam_tfe_enable_soc_resources(struct cam_hw_soc_info *soc_info)
|
||||
}
|
||||
|
||||
rc = cam_soc_util_enable_platform_resource(soc_info, CAM_CLK_SW_CLIENT_IDXs, true,
|
||||
CAM_LOWSVS_VOTE, true);
|
||||
soc_info->lowest_clk_level, true);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_ISP, "Error! enable platform failed rc=%d", rc);
|
||||
goto stop_cpas;
|
||||
|
@@ -267,7 +267,7 @@ int cam_vfe_enable_soc_resources(struct cam_hw_soc_info *soc_info)
|
||||
|
||||
soc_private = soc_info->soc_private;
|
||||
ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_VOTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
axi_vote.num_paths = 1;
|
||||
if (soc_private->is_ife_lite) {
|
||||
axi_vote.axi_path[0].path_data_type = CAM_AXI_PATH_DATA_IFE_RDI1;
|
||||
@@ -298,7 +298,7 @@ int cam_vfe_enable_soc_resources(struct cam_hw_soc_info *soc_info)
|
||||
|
||||
rc = cam_soc_util_enable_platform_resource(soc_info,
|
||||
(soc_info->is_clk_drv_en ? soc_info->index : CAM_CLK_SW_CLIENT_IDX), true,
|
||||
CAM_LOWSVS_VOTE, true);
|
||||
soc_info->lowest_clk_level, true);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_ISP, "Error! enable platform failed rc=%d", rc);
|
||||
goto stop_cpas;
|
||||
|
@@ -93,10 +93,12 @@ static int cam_vfe_top_set_hw_clk_rate(struct cam_vfe_top_priv_common *top_commo
|
||||
int rc = 0, clk_lvl = -1;
|
||||
unsigned long cesta_clk_rate_high = 0, cesta_clk_rate_low = 0;
|
||||
int cesta_client_idx = -1;
|
||||
uint32_t lowest_clk_lvl;
|
||||
|
||||
soc_info = top_common->soc_info;
|
||||
soc_private = (struct cam_vfe_soc_private *)soc_info->soc_private;
|
||||
|
||||
lowest_clk_lvl = soc_info->lowest_clk_level;
|
||||
cesta_clk_rate_high = final_clk_rate;
|
||||
cesta_clk_rate_low = final_clk_rate;
|
||||
|
||||
@@ -104,7 +106,7 @@ static int cam_vfe_top_set_hw_clk_rate(struct cam_vfe_top_priv_common *top_commo
|
||||
cesta_client_idx = top_common->hw_idx;
|
||||
if (is_drv_config_en)
|
||||
cesta_clk_rate_low =
|
||||
soc_info->clk_rate[CAM_LOWSVS_VOTE][soc_info->src_clk_idx];
|
||||
soc_info->clk_rate[lowest_clk_lvl][soc_info->src_clk_idx];
|
||||
else
|
||||
cesta_clk_rate_low = final_clk_rate;
|
||||
}
|
||||
|
@@ -66,7 +66,7 @@ int cam_jpeg_dma_init_hw(void *device_priv,
|
||||
}
|
||||
|
||||
ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_VOTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
axi_vote.num_paths = 2;
|
||||
axi_vote.axi_path[0].path_data_type = CAM_AXI_PATH_DATA_ALL;
|
||||
axi_vote.axi_path[0].transac_type = CAM_AXI_TRANSACTION_READ;
|
||||
|
@@ -69,7 +69,7 @@ int cam_jpeg_enc_init_hw(void *device_priv,
|
||||
}
|
||||
|
||||
ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_VOTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
axi_vote.num_paths = 2;
|
||||
axi_vote.axi_path[0].path_data_type = CAM_AXI_PATH_DATA_ALL;
|
||||
axi_vote.axi_path[0].transac_type = CAM_AXI_TRANSACTION_READ;
|
||||
|
@@ -25,7 +25,7 @@ int cam_lrme_soc_enable_resources(struct cam_hw_info *lrme_hw)
|
||||
int rc = 0;
|
||||
|
||||
ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_VOTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
axi_vote.num_paths = 2;
|
||||
axi_vote.axi_path[0].path_data_type = CAM_AXI_PATH_DATA_ALL;
|
||||
axi_vote.axi_path[0].transac_type = CAM_AXI_TRANSACTION_READ;
|
||||
@@ -45,7 +45,7 @@ int cam_lrme_soc_enable_resources(struct cam_hw_info *lrme_hw)
|
||||
}
|
||||
|
||||
rc = cam_soc_util_enable_platform_resource(soc_info, CAM_CLK_SW_CLIENT_IDX, true,
|
||||
CAM_SVS_VOTE, true);
|
||||
soc_info->lowest_clk_level, true);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_LRME,
|
||||
"Failed to enable platform resource, rc %d", rc);
|
||||
|
@@ -203,7 +203,7 @@ int cam_ope_init_hw(void *device_priv,
|
||||
}
|
||||
|
||||
cpas_vote->ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
cpas_vote->ahb_vote.vote.level = CAM_SVS_VOTE;
|
||||
cpas_vote->ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
cpas_vote->axi_vote.num_paths = 1;
|
||||
cpas_vote->axi_vote.axi_path[0].path_data_type =
|
||||
CAM_AXI_PATH_DATA_ALL;
|
||||
|
@@ -1,7 +1,7 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2019-2021, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
@@ -199,7 +199,7 @@ static int cam_ope_component_bind(struct device *dev,
|
||||
goto enable_soc_failed;
|
||||
}
|
||||
cpas_vote.ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
cpas_vote.ahb_vote.vote.level = CAM_SVS_VOTE;
|
||||
cpas_vote.ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
cpas_vote.axi_vote.num_paths = 1;
|
||||
cpas_vote.axi_vote.axi_path[0].path_data_type =
|
||||
CAM_AXI_PATH_DATA_OPE_WR_VID;
|
||||
|
@@ -158,7 +158,7 @@ int cam_cci_init(struct v4l2_subdev *sd,
|
||||
}
|
||||
|
||||
ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_VOTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
axi_vote.num_paths = 1;
|
||||
axi_vote.axi_path[0].path_data_type = CAM_AXI_PATH_DATA_ALL;
|
||||
axi_vote.axi_path[0].transac_type = CAM_AXI_TRANSACTION_WRITE;
|
||||
@@ -177,7 +177,7 @@ int cam_cci_init(struct v4l2_subdev *sd,
|
||||
|
||||
/* Enable Regulators and IRQ*/
|
||||
rc = cam_soc_util_enable_platform_resource(soc_info, CAM_CLK_SW_CLIENT_IDX, true,
|
||||
CAM_LOWSVS_VOTE, true);
|
||||
soc_info->lowest_clk_level, true);
|
||||
if (rc < 0) {
|
||||
CAM_DBG(CAM_CCI, "CCI%d_I2C_M%d request platform resources failed, rc: %d",
|
||||
cci_dev->soc_info.index, master, rc);
|
||||
|
@@ -116,7 +116,7 @@ static int cam_csiphy_cpas_ops(
|
||||
|
||||
if (start) {
|
||||
ahb_vote.type = CAM_VOTE_ABSOLUTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_VOTE;
|
||||
ahb_vote.vote.level = CAM_LOWSVS_D1_VOTE;
|
||||
axi_vote.num_paths = 1;
|
||||
axi_vote.axi_path[0].path_data_type =
|
||||
CAM_AXI_PATH_DATA_ALL;
|
||||
@@ -2523,7 +2523,7 @@ int32_t cam_csiphy_core_cfg(void *phy_dev,
|
||||
|
||||
if (soc_info->is_clk_drv_en && param->use_hw_client_voting) {
|
||||
if (param->is_drv_config_en)
|
||||
clk_vote_level_low = CAM_LOWSVS_VOTE;
|
||||
clk_vote_level_low = soc_info->lowest_clk_level;
|
||||
|
||||
rc = cam_soc_util_set_clk_rate_level(&csiphy_dev->soc_info,
|
||||
param->conn_csid_idx, clk_vote_level_high,
|
||||
|
@@ -260,8 +260,9 @@ static void cam_csiphy_subdev_handle_message(struct v4l2_subdev *sd,
|
||||
phy_idx, clk_rate, rc);
|
||||
} else if (halt_resume_info->csid_state == CAM_SUBDEV_PHY_CSID_RESUME) {
|
||||
int32_t src_idx = csiphy_dev->soc_info.src_clk_idx;
|
||||
uint32_t lowest_clk_level = csiphy_dev->soc_info.lowest_clk_level;
|
||||
|
||||
clk_rate = csiphy_dev->soc_info.clk_rate[CAM_LOWSVS_VOTE][src_idx];
|
||||
clk_rate = csiphy_dev->soc_info.clk_rate[lowest_clk_level][src_idx];
|
||||
|
||||
rc = cam_soc_util_set_src_clk_rate(&csiphy_dev->soc_info,
|
||||
CAM_CLK_SW_CLIENT_IDX, clk_rate, 0);
|
||||
|
@@ -214,7 +214,7 @@ int32_t cam_csiphy_enable_hw(struct csiphy_device *csiphy_dev, int32_t index)
|
||||
|
||||
if (soc_info->is_clk_drv_en && param->use_hw_client_voting && param->is_drv_config_en) {
|
||||
int clk_vote_level_high = vote_level;
|
||||
int clk_vote_level_low = CAM_LOWSVS_VOTE;
|
||||
int clk_vote_level_low = soc_info->lowest_clk_level;
|
||||
|
||||
rc = cam_soc_util_set_clk_rate_level(soc_info, param->conn_csid_idx,
|
||||
clk_vote_level_high, clk_vote_level_low, false);
|
||||
|
@@ -1020,18 +1020,20 @@ const char *cam_soc_util_get_string_from_level(enum cam_vote_level level)
|
||||
return "";
|
||||
case CAM_MINSVS_VOTE:
|
||||
return "MINSVS[1]";
|
||||
case CAM_LOWSVS_D1_VOTE:
|
||||
return "LOWSVSD1[2]";
|
||||
case CAM_LOWSVS_VOTE:
|
||||
return "LOWSVS[2]";
|
||||
return "LOWSVS[3]";
|
||||
case CAM_SVS_VOTE:
|
||||
return "SVS[3]";
|
||||
return "SVS[4]";
|
||||
case CAM_SVSL1_VOTE:
|
||||
return "SVSL1[4]";
|
||||
return "SVSL1[5]";
|
||||
case CAM_NOMINAL_VOTE:
|
||||
return "NOM[5]";
|
||||
return "NOM[6]";
|
||||
case CAM_NOMINALL1_VOTE:
|
||||
return "NOML1[6]";
|
||||
return "NOML1[7]";
|
||||
case CAM_TURBO_VOTE:
|
||||
return "TURBO[7]";
|
||||
return "TURBO[8]";
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
@@ -1212,6 +1214,8 @@ int cam_soc_util_get_level_from_string(const char *string,
|
||||
*level = CAM_SUSPEND_VOTE;
|
||||
} else if (!strcmp(string, "minsvs")) {
|
||||
*level = CAM_MINSVS_VOTE;
|
||||
} else if (!strcmp(string, "lowsvsd1")) {
|
||||
*level = CAM_LOWSVS_D1_VOTE;
|
||||
} else if (!strcmp(string, "lowsvs")) {
|
||||
*level = CAM_LOWSVS_VOTE;
|
||||
} else if (!strcmp(string, "svs")) {
|
||||
@@ -2223,7 +2227,7 @@ int cam_soc_util_set_clk_rate_level(struct cam_hw_soc_info *soc_info,
|
||||
{
|
||||
int i, rc = 0;
|
||||
enum cam_vote_level apply_level_high;
|
||||
enum cam_vote_level apply_level_low = CAM_LOWSVS_VOTE;
|
||||
enum cam_vote_level apply_level_low = soc_info->lowest_clk_level;
|
||||
unsigned long applied_clk_rate;
|
||||
|
||||
if ((soc_info->num_clk == 0) ||
|
||||
|
@@ -68,17 +68,19 @@
|
||||
*
|
||||
* @CAM_SUSPEND_VOTE : Suspend vote
|
||||
* @CAM_MINSVS_VOTE : Min SVS vote
|
||||
* @CAM_LOWSVS_D1_VOTE : Low SVS D1 vote
|
||||
* @CAM_LOWSVS_VOTE : Low SVS vote
|
||||
* @CAM_SVS_VOTE : SVS vote
|
||||
* @CAM_SVSL1_VOTE : SVS Plus vote
|
||||
* @CAM_NOMINAL_VOTE : Nominal vote
|
||||
* @CAM_NOMINALL1_VOTE: Nominal plus vote
|
||||
* @CAM_NOMINALL1_VOTE : Nominal plus vote
|
||||
* @CAM_TURBO_VOTE : Turbo vote
|
||||
* @CAM_MAX_VOTE : Max voting level, This is invalid level.
|
||||
*/
|
||||
enum cam_vote_level {
|
||||
CAM_SUSPEND_VOTE,
|
||||
CAM_MINSVS_VOTE,
|
||||
CAM_LOWSVS_D1_VOTE,
|
||||
CAM_LOWSVS_VOTE,
|
||||
CAM_SVS_VOTE,
|
||||
CAM_SVSL1_VOTE,
|
||||
|
Reference in New Issue
Block a user