Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

clk: qcom: smd-rpm: Keep one rpm handle for all clocks

For no apparent reason (as there's just one RPM per SoC), all clocks
currently store a copy of a pointer to smd_rpm. Introduce a single,
global one to save up on space in each clk definition.

bloat-o-meter reports:

Total: Before=41887, After=40843, chg -2.49%

Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Link: https://lore.kernel.org/r/20230501130400.107771-1-konrad.dybcio@linaro.org

authored by

Konrad Dybcio and committed by
Bjorn Andersson
caa2347d 3e4d1795

+12 -14
+12 -14
drivers/clk/qcom/clk-smd-rpm.c
··· 156 156 157 157 #define to_clk_smd_rpm(_hw) container_of(_hw, struct clk_smd_rpm, hw) 158 158 159 + static struct qcom_smd_rpm *rpmcc_smd_rpm; 160 + 159 161 struct clk_smd_rpm { 160 162 const int rpm_res_type; 161 163 const int rpm_key; ··· 168 166 struct clk_smd_rpm *peer; 169 167 struct clk_hw hw; 170 168 unsigned long rate; 171 - struct qcom_smd_rpm *rpm; 172 169 }; 173 170 174 171 struct clk_smd_rpm_req { ··· 192 191 .value = cpu_to_le32(r->branch ? 1 : INT_MAX), 193 192 }; 194 193 195 - ret = qcom_rpm_smd_write(r->rpm, QCOM_SMD_RPM_ACTIVE_STATE, 194 + ret = qcom_rpm_smd_write(rpmcc_smd_rpm, QCOM_SMD_RPM_ACTIVE_STATE, 196 195 r->rpm_res_type, r->rpm_clk_id, &req, 197 196 sizeof(req)); 198 197 if (ret) 199 198 return ret; 200 - ret = qcom_rpm_smd_write(r->rpm, QCOM_SMD_RPM_SLEEP_STATE, 199 + ret = qcom_rpm_smd_write(rpmcc_smd_rpm, QCOM_SMD_RPM_SLEEP_STATE, 201 200 r->rpm_res_type, r->rpm_clk_id, &req, 202 201 sizeof(req)); 203 202 if (ret) ··· 215 214 .value = cpu_to_le32(DIV_ROUND_UP(rate, 1000)), /* to kHz */ 216 215 }; 217 216 218 - return qcom_rpm_smd_write(r->rpm, QCOM_SMD_RPM_ACTIVE_STATE, 217 + return qcom_rpm_smd_write(rpmcc_smd_rpm, QCOM_SMD_RPM_ACTIVE_STATE, 219 218 r->rpm_res_type, r->rpm_clk_id, &req, 220 219 sizeof(req)); 221 220 } ··· 229 228 .value = cpu_to_le32(DIV_ROUND_UP(rate, 1000)), /* to kHz */ 230 229 }; 231 230 232 - return qcom_rpm_smd_write(r->rpm, QCOM_SMD_RPM_SLEEP_STATE, 231 + return qcom_rpm_smd_write(rpmcc_smd_rpm, QCOM_SMD_RPM_SLEEP_STATE, 233 232 r->rpm_res_type, r->rpm_clk_id, &req, 234 233 sizeof(req)); 235 234 } ··· 396 395 return r->rate; 397 396 } 398 397 399 - static int clk_smd_rpm_enable_scaling(struct qcom_smd_rpm *rpm) 398 + static int clk_smd_rpm_enable_scaling(void) 400 399 { 401 400 int ret; 402 401 struct clk_smd_rpm_req req = { ··· 405 404 .value = cpu_to_le32(1), 406 405 }; 407 406 408 - ret = qcom_rpm_smd_write(rpm, QCOM_SMD_RPM_SLEEP_STATE, 407 + ret = qcom_rpm_smd_write(rpmcc_smd_rpm, QCOM_SMD_RPM_SLEEP_STATE, 409 408 QCOM_SMD_RPM_MISC_CLK, 410 409 QCOM_RPM_SCALING_ENABLE_ID, &req, sizeof(req)); 411 410 if (ret) { ··· 413 412 return ret; 414 413 } 415 414 416 - ret = qcom_rpm_smd_write(rpm, QCOM_SMD_RPM_ACTIVE_STATE, 415 + ret = qcom_rpm_smd_write(rpmcc_smd_rpm, QCOM_SMD_RPM_ACTIVE_STATE, 417 416 QCOM_SMD_RPM_MISC_CLK, 418 417 QCOM_RPM_SCALING_ENABLE_ID, &req, sizeof(req)); 419 418 if (ret) { ··· 1302 1301 { 1303 1302 int ret; 1304 1303 size_t num_clks, i; 1305 - struct qcom_smd_rpm *rpm; 1306 1304 struct clk_smd_rpm **rpm_smd_clks; 1307 1305 const struct rpm_smd_clk_desc *desc; 1308 1306 1309 - rpm = dev_get_drvdata(pdev->dev.parent); 1310 - if (!rpm) { 1307 + rpmcc_smd_rpm = dev_get_drvdata(pdev->dev.parent); 1308 + if (!rpmcc_smd_rpm) { 1311 1309 dev_err(&pdev->dev, "Unable to retrieve handle to RPM\n"); 1312 1310 return -ENODEV; 1313 1311 } ··· 1322 1322 if (!rpm_smd_clks[i]) 1323 1323 continue; 1324 1324 1325 - rpm_smd_clks[i]->rpm = rpm; 1326 - 1327 1325 ret = clk_smd_rpm_handoff(rpm_smd_clks[i]); 1328 1326 if (ret) 1329 1327 goto err; 1330 1328 } 1331 1329 1332 - ret = clk_smd_rpm_enable_scaling(rpm); 1330 + ret = clk_smd_rpm_enable_scaling(); 1333 1331 if (ret) 1334 1332 goto err; 1335 1333