Loading arch/arm64/boot/dts/qcom/sdm845.dtsi +10 −4 Original line number Diff line number Diff line Loading @@ -2793,7 +2793,7 @@ qcom,smmu-s1-bypass; qcom,bandwidth-vote-for-ipa; qcom,msm-bus,name = "ipa"; qcom,msm-bus,num-cases = <4>; qcom,msm-bus,num-cases = <5>; qcom,msm-bus,num-paths = <4>; qcom,msm-bus,vectors-KBps = /* No vote */ Loading @@ -2801,22 +2801,28 @@ <90 585 0 0>, <1 676 0 0>, <143 777 0 0>, /* SVS2 */ <90 512 80000 600000>, <90 585 80000 350000>, <1 676 40000 40000>, /*gcc_config_noc_clk_src */ <143 777 0 75>, /* IB defined for IPA2X_clk in MHz*/ /* SVS */ <90 512 80000 640000>, <90 585 80000 640000>, <1 676 80000 80000>, <143 777 0 150>, /* IB defined for IPA clk in MHz*/ <143 777 0 150>, /* IB defined for IPA2X_clk in MHz*/ /* NOMINAL */ <90 512 206000 960000>, <90 585 206000 960000>, <1 676 206000 160000>, <143 777 0 300>, /* IB defined for IPA clk in MHz*/ <143 777 0 300>, /* IB defined for IPA2X_clk in MHz*/ /* TURBO */ <90 512 206000 3600000>, <90 585 206000 3600000>, <1 676 206000 300000>, <143 777 0 355>; /* IB defined for IPA clk in MHz*/ qcom,bus-vector-names = "MIN", "SVS", "NOMINAL", "TURBO"; qcom,bus-vector-names = "MIN", "SVS2", "SVS", "NOMINAL", "TURBO"; /* IPA RAM mmap */ qcom,ipa-ram-mmap = < Loading drivers/platform/msm/ipa/ipa_clients/ipa_usb.c +2 −2 Original line number Diff line number Diff line Loading @@ -716,7 +716,7 @@ static int ipa3_usb_create_rm_resources(enum ipa3_usb_transport_type ttype) rm_ctx->prod_params.name = IPA3_USB_IS_TTYPE_DPL(ttype) ? IPA_RM_RESOURCE_USB_DPL_DUMMY_PROD : IPA_RM_RESOURCE_USB_PROD; rm_ctx->prod_params.floor_voltage = IPA_VOLTAGE_SVS; rm_ctx->prod_params.floor_voltage = IPA_VOLTAGE_SVS2; rm_ctx->prod_params.reg_params.user_data = NULL; rm_ctx->prod_params.reg_params.notify_cb = IPA3_USB_IS_TTYPE_DPL(ttype) ? Loading @@ -741,7 +741,7 @@ static int ipa3_usb_create_rm_resources(enum ipa3_usb_transport_type ttype) rm_ctx->cons_params.name = IPA3_USB_IS_TTYPE_DPL(ttype) ? IPA_RM_RESOURCE_USB_DPL_CONS : IPA_RM_RESOURCE_USB_CONS; rm_ctx->cons_params.floor_voltage = IPA_VOLTAGE_SVS; rm_ctx->cons_params.floor_voltage = IPA_VOLTAGE_SVS2; rm_ctx->cons_params.reg_params.user_data = NULL; rm_ctx->cons_params.reg_params.notify_cb = NULL; rm_ctx->cons_params.request_resource = Loading drivers/platform/msm/ipa/ipa_v3/ipa.c +13 −8 Original line number Diff line number Diff line Loading @@ -3294,21 +3294,20 @@ static unsigned int ipa3_get_bus_vote(void) { unsigned int idx = 1; if (ipa3_ctx->curr_ipa_clk_rate == ipa3_ctx->ctrl->ipa_clk_rate_svs) { if (ipa3_ctx->curr_ipa_clk_rate == ipa3_ctx->ctrl->ipa_clk_rate_svs2) { idx = 1; } else if (ipa3_ctx->curr_ipa_clk_rate == ipa3_ctx->ctrl->ipa_clk_rate_nominal) { if (ipa3_ctx->ctrl->msm_bus_data_ptr->num_usecases <= 2) idx = 1; else ipa3_ctx->ctrl->ipa_clk_rate_svs) { idx = 2; } else if (ipa3_ctx->curr_ipa_clk_rate == ipa3_ctx->ctrl->ipa_clk_rate_nominal) { idx = 3; } else if (ipa3_ctx->curr_ipa_clk_rate == ipa3_ctx->ctrl->ipa_clk_rate_turbo) { idx = ipa3_ctx->ctrl->msm_bus_data_ptr->num_usecases - 1; } else { WARN_ON(1); } IPADBG("curr %d idx %d\n", ipa3_ctx->curr_ipa_clk_rate, idx); return idx; Loading Loading @@ -3699,8 +3698,11 @@ int ipa3_set_required_perf_profile(enum ipa_voltage_level floor_voltage, else if (bandwidth_mbps >= ipa3_ctx->ctrl->clock_scaling_bw_threshold_nominal) needed_voltage = IPA_VOLTAGE_NOMINAL; else else if (bandwidth_mbps >= ipa3_ctx->ctrl->clock_scaling_bw_threshold_svs) needed_voltage = IPA_VOLTAGE_SVS; else needed_voltage = IPA_VOLTAGE_SVS2; } else { IPADBG_LOW("Clock scaling is disabled\n"); needed_voltage = IPA_VOLTAGE_NOMINAL; Loading @@ -3708,6 +3710,9 @@ int ipa3_set_required_perf_profile(enum ipa_voltage_level floor_voltage, needed_voltage = max(needed_voltage, floor_voltage); switch (needed_voltage) { case IPA_VOLTAGE_SVS2: clk_rate = ipa3_ctx->ctrl->ipa_clk_rate_svs2; break; case IPA_VOLTAGE_SVS: clk_rate = ipa3_ctx->ctrl->ipa_clk_rate_svs; break; Loading drivers/platform/msm/ipa/ipa_v3/ipa_i.h +2 −0 Original line number Diff line number Diff line Loading @@ -1560,8 +1560,10 @@ struct ipa3_controller { u32 ipa_clk_rate_turbo; u32 ipa_clk_rate_nominal; u32 ipa_clk_rate_svs; u32 ipa_clk_rate_svs2; u32 clock_scaling_bw_threshold_turbo; u32 clock_scaling_bw_threshold_nominal; u32 clock_scaling_bw_threshold_svs; u32 ipa_reg_base_ofst; u32 max_holb_tmr_val; void (*ipa_sram_read_settings)(void); Loading drivers/platform/msm/ipa/ipa_v3/ipa_utils.c +9 −0 Original line number Diff line number Diff line Loading @@ -24,14 +24,17 @@ #include "ipahal/ipahal_hw_stats.h" #include "../ipa_rm_i.h" #define IPA_V3_0_CLK_RATE_SVS2 (37.5 * 1000 * 1000UL) #define IPA_V3_0_CLK_RATE_SVS (75 * 1000 * 1000UL) #define IPA_V3_0_CLK_RATE_NOMINAL (150 * 1000 * 1000UL) #define IPA_V3_0_CLK_RATE_TURBO (200 * 1000 * 1000UL) #define IPA_V3_5_CLK_RATE_SVS2 (100 * 1000 * 1000UL) #define IPA_V3_5_CLK_RATE_SVS (200 * 1000 * 1000UL) #define IPA_V3_5_CLK_RATE_NOMINAL (400 * 1000 * 1000UL) #define IPA_V3_5_CLK_RATE_TURBO (42640 * 10 * 1000UL) #define IPA_V4_0_CLK_RATE_SVS2 (60 * 1000 * 1000UL) #define IPA_V4_0_CLK_RATE_SVS (125 * 1000 * 1000UL) #define IPA_V4_0_CLK_RATE_NOMINAL (220 * 1000 * 1000UL) #define IPA_V4_0_CLK_RATE_TURBO (250 * 1000 * 1000UL) Loading @@ -40,6 +43,7 @@ #define IPA_V3_0_BW_THRESHOLD_TURBO_MBPS (1000) #define IPA_V3_0_BW_THRESHOLD_NOMINAL_MBPS (600) #define IPA_V3_0_BW_THRESHOLD_SVS_MBPS (310) #define IPA_ENDP_INIT_HDR_METADATA_n_MUX_ID_BMASK 0xFF0000 #define IPA_ENDP_INIT_HDR_METADATA_n_MUX_ID_SHFT 0x10 Loading Loading @@ -3733,14 +3737,17 @@ int ipa3_controller_static_bind(struct ipa3_controller *ctrl, ctrl->ipa_clk_rate_turbo = IPA_V4_0_CLK_RATE_TURBO; ctrl->ipa_clk_rate_nominal = IPA_V4_0_CLK_RATE_NOMINAL; ctrl->ipa_clk_rate_svs = IPA_V4_0_CLK_RATE_SVS; ctrl->ipa_clk_rate_svs2 = IPA_V4_0_CLK_RATE_SVS2; } else if (hw_type >= IPA_HW_v3_5) { ctrl->ipa_clk_rate_turbo = IPA_V3_5_CLK_RATE_TURBO; ctrl->ipa_clk_rate_nominal = IPA_V3_5_CLK_RATE_NOMINAL; ctrl->ipa_clk_rate_svs = IPA_V3_5_CLK_RATE_SVS; ctrl->ipa_clk_rate_svs2 = IPA_V3_5_CLK_RATE_SVS2; } else { ctrl->ipa_clk_rate_turbo = IPA_V3_0_CLK_RATE_TURBO; ctrl->ipa_clk_rate_nominal = IPA_V3_0_CLK_RATE_NOMINAL; ctrl->ipa_clk_rate_svs = IPA_V3_0_CLK_RATE_SVS; ctrl->ipa_clk_rate_svs2 = IPA_V3_0_CLK_RATE_SVS2; } ctrl->ipa_init_rt4 = _ipa_init_rt4_v3; Loading @@ -3754,6 +3761,8 @@ int ipa3_controller_static_bind(struct ipa3_controller *ctrl, ctrl->ipa3_enable_clks = _ipa_enable_clks_v3_0; ctrl->ipa3_disable_clks = _ipa_disable_clks_v3_0; ctrl->msm_bus_data_ptr = &ipa_bus_client_pdata_v3_0; ctrl->clock_scaling_bw_threshold_svs = IPA_V3_0_BW_THRESHOLD_SVS_MBPS; ctrl->clock_scaling_bw_threshold_nominal = IPA_V3_0_BW_THRESHOLD_NOMINAL_MBPS; ctrl->clock_scaling_bw_threshold_turbo = Loading Loading
arch/arm64/boot/dts/qcom/sdm845.dtsi +10 −4 Original line number Diff line number Diff line Loading @@ -2793,7 +2793,7 @@ qcom,smmu-s1-bypass; qcom,bandwidth-vote-for-ipa; qcom,msm-bus,name = "ipa"; qcom,msm-bus,num-cases = <4>; qcom,msm-bus,num-cases = <5>; qcom,msm-bus,num-paths = <4>; qcom,msm-bus,vectors-KBps = /* No vote */ Loading @@ -2801,22 +2801,28 @@ <90 585 0 0>, <1 676 0 0>, <143 777 0 0>, /* SVS2 */ <90 512 80000 600000>, <90 585 80000 350000>, <1 676 40000 40000>, /*gcc_config_noc_clk_src */ <143 777 0 75>, /* IB defined for IPA2X_clk in MHz*/ /* SVS */ <90 512 80000 640000>, <90 585 80000 640000>, <1 676 80000 80000>, <143 777 0 150>, /* IB defined for IPA clk in MHz*/ <143 777 0 150>, /* IB defined for IPA2X_clk in MHz*/ /* NOMINAL */ <90 512 206000 960000>, <90 585 206000 960000>, <1 676 206000 160000>, <143 777 0 300>, /* IB defined for IPA clk in MHz*/ <143 777 0 300>, /* IB defined for IPA2X_clk in MHz*/ /* TURBO */ <90 512 206000 3600000>, <90 585 206000 3600000>, <1 676 206000 300000>, <143 777 0 355>; /* IB defined for IPA clk in MHz*/ qcom,bus-vector-names = "MIN", "SVS", "NOMINAL", "TURBO"; qcom,bus-vector-names = "MIN", "SVS2", "SVS", "NOMINAL", "TURBO"; /* IPA RAM mmap */ qcom,ipa-ram-mmap = < Loading
drivers/platform/msm/ipa/ipa_clients/ipa_usb.c +2 −2 Original line number Diff line number Diff line Loading @@ -716,7 +716,7 @@ static int ipa3_usb_create_rm_resources(enum ipa3_usb_transport_type ttype) rm_ctx->prod_params.name = IPA3_USB_IS_TTYPE_DPL(ttype) ? IPA_RM_RESOURCE_USB_DPL_DUMMY_PROD : IPA_RM_RESOURCE_USB_PROD; rm_ctx->prod_params.floor_voltage = IPA_VOLTAGE_SVS; rm_ctx->prod_params.floor_voltage = IPA_VOLTAGE_SVS2; rm_ctx->prod_params.reg_params.user_data = NULL; rm_ctx->prod_params.reg_params.notify_cb = IPA3_USB_IS_TTYPE_DPL(ttype) ? Loading @@ -741,7 +741,7 @@ static int ipa3_usb_create_rm_resources(enum ipa3_usb_transport_type ttype) rm_ctx->cons_params.name = IPA3_USB_IS_TTYPE_DPL(ttype) ? IPA_RM_RESOURCE_USB_DPL_CONS : IPA_RM_RESOURCE_USB_CONS; rm_ctx->cons_params.floor_voltage = IPA_VOLTAGE_SVS; rm_ctx->cons_params.floor_voltage = IPA_VOLTAGE_SVS2; rm_ctx->cons_params.reg_params.user_data = NULL; rm_ctx->cons_params.reg_params.notify_cb = NULL; rm_ctx->cons_params.request_resource = Loading
drivers/platform/msm/ipa/ipa_v3/ipa.c +13 −8 Original line number Diff line number Diff line Loading @@ -3294,21 +3294,20 @@ static unsigned int ipa3_get_bus_vote(void) { unsigned int idx = 1; if (ipa3_ctx->curr_ipa_clk_rate == ipa3_ctx->ctrl->ipa_clk_rate_svs) { if (ipa3_ctx->curr_ipa_clk_rate == ipa3_ctx->ctrl->ipa_clk_rate_svs2) { idx = 1; } else if (ipa3_ctx->curr_ipa_clk_rate == ipa3_ctx->ctrl->ipa_clk_rate_nominal) { if (ipa3_ctx->ctrl->msm_bus_data_ptr->num_usecases <= 2) idx = 1; else ipa3_ctx->ctrl->ipa_clk_rate_svs) { idx = 2; } else if (ipa3_ctx->curr_ipa_clk_rate == ipa3_ctx->ctrl->ipa_clk_rate_nominal) { idx = 3; } else if (ipa3_ctx->curr_ipa_clk_rate == ipa3_ctx->ctrl->ipa_clk_rate_turbo) { idx = ipa3_ctx->ctrl->msm_bus_data_ptr->num_usecases - 1; } else { WARN_ON(1); } IPADBG("curr %d idx %d\n", ipa3_ctx->curr_ipa_clk_rate, idx); return idx; Loading Loading @@ -3699,8 +3698,11 @@ int ipa3_set_required_perf_profile(enum ipa_voltage_level floor_voltage, else if (bandwidth_mbps >= ipa3_ctx->ctrl->clock_scaling_bw_threshold_nominal) needed_voltage = IPA_VOLTAGE_NOMINAL; else else if (bandwidth_mbps >= ipa3_ctx->ctrl->clock_scaling_bw_threshold_svs) needed_voltage = IPA_VOLTAGE_SVS; else needed_voltage = IPA_VOLTAGE_SVS2; } else { IPADBG_LOW("Clock scaling is disabled\n"); needed_voltage = IPA_VOLTAGE_NOMINAL; Loading @@ -3708,6 +3710,9 @@ int ipa3_set_required_perf_profile(enum ipa_voltage_level floor_voltage, needed_voltage = max(needed_voltage, floor_voltage); switch (needed_voltage) { case IPA_VOLTAGE_SVS2: clk_rate = ipa3_ctx->ctrl->ipa_clk_rate_svs2; break; case IPA_VOLTAGE_SVS: clk_rate = ipa3_ctx->ctrl->ipa_clk_rate_svs; break; Loading
drivers/platform/msm/ipa/ipa_v3/ipa_i.h +2 −0 Original line number Diff line number Diff line Loading @@ -1560,8 +1560,10 @@ struct ipa3_controller { u32 ipa_clk_rate_turbo; u32 ipa_clk_rate_nominal; u32 ipa_clk_rate_svs; u32 ipa_clk_rate_svs2; u32 clock_scaling_bw_threshold_turbo; u32 clock_scaling_bw_threshold_nominal; u32 clock_scaling_bw_threshold_svs; u32 ipa_reg_base_ofst; u32 max_holb_tmr_val; void (*ipa_sram_read_settings)(void); Loading
drivers/platform/msm/ipa/ipa_v3/ipa_utils.c +9 −0 Original line number Diff line number Diff line Loading @@ -24,14 +24,17 @@ #include "ipahal/ipahal_hw_stats.h" #include "../ipa_rm_i.h" #define IPA_V3_0_CLK_RATE_SVS2 (37.5 * 1000 * 1000UL) #define IPA_V3_0_CLK_RATE_SVS (75 * 1000 * 1000UL) #define IPA_V3_0_CLK_RATE_NOMINAL (150 * 1000 * 1000UL) #define IPA_V3_0_CLK_RATE_TURBO (200 * 1000 * 1000UL) #define IPA_V3_5_CLK_RATE_SVS2 (100 * 1000 * 1000UL) #define IPA_V3_5_CLK_RATE_SVS (200 * 1000 * 1000UL) #define IPA_V3_5_CLK_RATE_NOMINAL (400 * 1000 * 1000UL) #define IPA_V3_5_CLK_RATE_TURBO (42640 * 10 * 1000UL) #define IPA_V4_0_CLK_RATE_SVS2 (60 * 1000 * 1000UL) #define IPA_V4_0_CLK_RATE_SVS (125 * 1000 * 1000UL) #define IPA_V4_0_CLK_RATE_NOMINAL (220 * 1000 * 1000UL) #define IPA_V4_0_CLK_RATE_TURBO (250 * 1000 * 1000UL) Loading @@ -40,6 +43,7 @@ #define IPA_V3_0_BW_THRESHOLD_TURBO_MBPS (1000) #define IPA_V3_0_BW_THRESHOLD_NOMINAL_MBPS (600) #define IPA_V3_0_BW_THRESHOLD_SVS_MBPS (310) #define IPA_ENDP_INIT_HDR_METADATA_n_MUX_ID_BMASK 0xFF0000 #define IPA_ENDP_INIT_HDR_METADATA_n_MUX_ID_SHFT 0x10 Loading Loading @@ -3733,14 +3737,17 @@ int ipa3_controller_static_bind(struct ipa3_controller *ctrl, ctrl->ipa_clk_rate_turbo = IPA_V4_0_CLK_RATE_TURBO; ctrl->ipa_clk_rate_nominal = IPA_V4_0_CLK_RATE_NOMINAL; ctrl->ipa_clk_rate_svs = IPA_V4_0_CLK_RATE_SVS; ctrl->ipa_clk_rate_svs2 = IPA_V4_0_CLK_RATE_SVS2; } else if (hw_type >= IPA_HW_v3_5) { ctrl->ipa_clk_rate_turbo = IPA_V3_5_CLK_RATE_TURBO; ctrl->ipa_clk_rate_nominal = IPA_V3_5_CLK_RATE_NOMINAL; ctrl->ipa_clk_rate_svs = IPA_V3_5_CLK_RATE_SVS; ctrl->ipa_clk_rate_svs2 = IPA_V3_5_CLK_RATE_SVS2; } else { ctrl->ipa_clk_rate_turbo = IPA_V3_0_CLK_RATE_TURBO; ctrl->ipa_clk_rate_nominal = IPA_V3_0_CLK_RATE_NOMINAL; ctrl->ipa_clk_rate_svs = IPA_V3_0_CLK_RATE_SVS; ctrl->ipa_clk_rate_svs2 = IPA_V3_0_CLK_RATE_SVS2; } ctrl->ipa_init_rt4 = _ipa_init_rt4_v3; Loading @@ -3754,6 +3761,8 @@ int ipa3_controller_static_bind(struct ipa3_controller *ctrl, ctrl->ipa3_enable_clks = _ipa_enable_clks_v3_0; ctrl->ipa3_disable_clks = _ipa_disable_clks_v3_0; ctrl->msm_bus_data_ptr = &ipa_bus_client_pdata_v3_0; ctrl->clock_scaling_bw_threshold_svs = IPA_V3_0_BW_THRESHOLD_SVS_MBPS; ctrl->clock_scaling_bw_threshold_nominal = IPA_V3_0_BW_THRESHOLD_NOMINAL_MBPS; ctrl->clock_scaling_bw_threshold_turbo = Loading