0026-v6.7-cpufreq-qcom-nvmem-add-support-for-IPQ8074.patch 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. From 0b9cd949136f1b63f7aa9424b6e583a1ab261e36 Mon Sep 17 00:00:00 2001
  2. From: Robert Marko <[email protected]>
  3. Date: Fri, 13 Oct 2023 19:20:02 +0200
  4. Subject: [PATCH] cpufreq: qcom-nvmem: add support for IPQ8074
  5. IPQ8074 comes in 3 families:
  6. * IPQ8070A/IPQ8071A (Acorn) up to 1.4GHz
  7. * IPQ8172/IPQ8173/IPQ8174 (Oak) up to 1.4GHz
  8. * IPQ8072A/IPQ8074A/IPQ8076A/IPQ8078A (Hawkeye) up to 2.2GHz
  9. So, in order to be able to share one OPP table lets add support for IPQ8074
  10. family based of SMEM SoC ID-s as speedbin fuse is always 0 on IPQ8074.
  11. IPQ8074 compatible is blacklisted from DT platdev as the cpufreq device
  12. will get created by NVMEM CPUFreq driver.
  13. Signed-off-by: Robert Marko <[email protected]>
  14. Acked-by: Konrad Dybcio <[email protected]>
  15. [ Viresh: Fixed rebase conflict. ]
  16. Signed-off-by: Viresh Kumar <[email protected]>
  17. ---
  18. drivers/cpufreq/cpufreq-dt-platdev.c | 1 +
  19. drivers/cpufreq/qcom-cpufreq-nvmem.c | 48 ++++++++++++++++++++++++++++
  20. 2 files changed, 49 insertions(+)
  21. --- a/drivers/cpufreq/cpufreq-dt-platdev.c
  22. +++ b/drivers/cpufreq/cpufreq-dt-platdev.c
  23. @@ -179,6 +179,7 @@ static const struct of_device_id blockli
  24. { .compatible = "qcom,ipq6018", },
  25. { .compatible = "qcom,ipq8064", },
  26. + { .compatible = "qcom,ipq8074", },
  27. { .compatible = "qcom,apq8064", },
  28. { .compatible = "qcom,msm8974", },
  29. { .compatible = "qcom,msm8960", },
  30. --- a/drivers/cpufreq/qcom-cpufreq-nvmem.c
  31. +++ b/drivers/cpufreq/qcom-cpufreq-nvmem.c
  32. @@ -32,6 +32,11 @@
  33. #define IPQ6000_VERSION BIT(2)
  34. +enum ipq8074_versions {
  35. + IPQ8074_HAWKEYE_VERSION = 0,
  36. + IPQ8074_ACORN_VERSION,
  37. +};
  38. +
  39. struct qcom_cpufreq_drv;
  40. struct qcom_cpufreq_match_data {
  41. @@ -256,6 +261,44 @@ static int qcom_cpufreq_ipq6018_name_ver
  42. return 0;
  43. }
  44. +static int qcom_cpufreq_ipq8074_name_version(struct device *cpu_dev,
  45. + struct nvmem_cell *speedbin_nvmem,
  46. + char **pvs_name,
  47. + struct qcom_cpufreq_drv *drv)
  48. +{
  49. + u32 msm_id;
  50. + int ret;
  51. + *pvs_name = NULL;
  52. +
  53. + ret = qcom_smem_get_soc_id(&msm_id);
  54. + if (ret)
  55. + return ret;
  56. +
  57. + switch (msm_id) {
  58. + case QCOM_ID_IPQ8070A:
  59. + case QCOM_ID_IPQ8071A:
  60. + case QCOM_ID_IPQ8172:
  61. + case QCOM_ID_IPQ8173:
  62. + case QCOM_ID_IPQ8174:
  63. + drv->versions = BIT(IPQ8074_ACORN_VERSION);
  64. + break;
  65. + case QCOM_ID_IPQ8072A:
  66. + case QCOM_ID_IPQ8074A:
  67. + case QCOM_ID_IPQ8076A:
  68. + case QCOM_ID_IPQ8078A:
  69. + drv->versions = BIT(IPQ8074_HAWKEYE_VERSION);
  70. + break;
  71. + default:
  72. + dev_err(cpu_dev,
  73. + "SoC ID %u is not part of IPQ8074 family, limiting to 1.4GHz!\n",
  74. + msm_id);
  75. + drv->versions = BIT(IPQ8074_ACORN_VERSION);
  76. + break;
  77. + }
  78. +
  79. + return 0;
  80. +}
  81. +
  82. static const struct qcom_cpufreq_match_data match_data_kryo = {
  83. .get_version = qcom_cpufreq_kryo_name_version,
  84. };
  85. @@ -274,6 +317,10 @@ static const struct qcom_cpufreq_match_d
  86. .get_version = qcom_cpufreq_ipq6018_name_version,
  87. };
  88. +static const struct qcom_cpufreq_match_data match_data_ipq8074 = {
  89. + .get_version = qcom_cpufreq_ipq8074_name_version,
  90. +};
  91. +
  92. static int qcom_cpufreq_probe(struct platform_device *pdev)
  93. {
  94. struct qcom_cpufreq_drv *drv;
  95. @@ -418,6 +465,7 @@ static const struct of_device_id qcom_cp
  96. { .compatible = "qcom,qcs404", .data = &match_data_qcs404 },
  97. { .compatible = "qcom,ipq6018", .data = &match_data_ipq6018 },
  98. { .compatible = "qcom,ipq8064", .data = &match_data_krait },
  99. + { .compatible = "qcom,ipq8074", .data = &match_data_ipq8074 },
  100. { .compatible = "qcom,apq8064", .data = &match_data_krait },
  101. { .compatible = "qcom,msm8974", .data = &match_data_krait },
  102. { .compatible = "qcom,msm8960", .data = &match_data_krait },