On 8/6/26 18:12, Balaji Selvanathan wrote:
sa8775p was being handled by the generic clock stub, which just
no-ops every request. Give it a real driver that provides support for
get/set rate.
Signed-off-by: Balaji Selvanathan <[email protected]>
---
drivers/clk/clk-stub.c | 1 -
drivers/clk/qcom/clock-sa8775p.c | 46 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 46 insertions(+), 1 deletion(-)
diff --git a/drivers/clk/clk-stub.c b/drivers/clk/clk-stub.c
index 4a6c71016da..f7d42892423 100644
--- a/drivers/clk/clk-stub.c
+++ b/drivers/clk/clk-stub.c
@@ -51,7 +51,6 @@ static struct clk_ops stub_clk_ops = {
static const struct udevice_id stub_clk_ids[] = {
{ .compatible = "qcom,qcs615-rpmh-clk" },
{ .compatible = "qcom,rpmcc" },
- { .compatible = "qcom,sa8775p-rpmh-clk" },
{ .compatible = "qcom,sc7180-rpmh-clk" },
{ .compatible = "qcom,sc7280-rpmh-clk" },
{ .compatible = "qcom,sdm670-rpmh-clk" },
diff --git a/drivers/clk/qcom/clock-sa8775p.c b/drivers/clk/qcom/clock-sa8775p.c
index 7eec4aeae48..49b94078a41 100644
--- a/drivers/clk/qcom/clock-sa8775p.c
+++ b/drivers/clk/qcom/clock-sa8775p.c
@@ -13,8 +13,14 @@
#include <linux/bug.h>
#include <linux/bitops.h>
#include <dt-bindings/clock/qcom,sa8775p-gcc.h>
+#include <dt-bindings/clock/qcom,rpmh.h>
#include "clock-qcom.h"
+#define TCXO_RATE 38400000
+
+/* RPMH_CXO_CLK = bi_tcxo_div2 on sa8775p */
+#define TCXO_DIV2_RATE (TCXO_RATE / 2)
Actually this is valid since SM8550, so perhaps it should be a separate
standalone driver
for sm8550/sm8650/sa8775p...
Neil
+
#define USB30_PRIM_MOCK_UTMI_CLK_CMD_RCGR 0x1b040
#define USB30_PRIM_MASTER_CLK_CMD_RCGR 0x1b028
#define USB3_PRIM_PHY_AUX_CMD_RCGR 0x1b06c
@@ -275,3 +281,43 @@ U_BOOT_DRIVER(gcc_sa8775p) = {
.bind = qcom_cc_bind,
.flags = DM_FLAG_PRE_RELOC | DM_FLAG_DEFAULT_PD_CTRL_OFF,
};
+
+static ulong sa8775p_rpmh_clk_set_rate(struct clk *clk, ulong rate)
+{
+ return (clk->rate = rate);
+}
+
+static ulong sa8775p_rpmh_clk_get_rate(struct clk *clk)
+{
+ switch (clk->id) {
+ case RPMH_CXO_CLK:
+ return TCXO_DIV2_RATE;
+ default:
+ return clk->rate;
+ }
+}
+
+static int sa8775p_rpmh_clk_nop(struct clk *clk)
+{
+ return 0;
+}
+
+static struct clk_ops sa8775p_rpmh_clk_ops = {
+ .set_rate = sa8775p_rpmh_clk_set_rate,
+ .get_rate = sa8775p_rpmh_clk_get_rate,
+ .enable = sa8775p_rpmh_clk_nop,
+ .disable = sa8775p_rpmh_clk_nop,
+};
+
+static const struct udevice_id sa8775p_rpmh_clk_ids[] = {
+ { .compatible = "qcom,sa8775p-rpmh-clk" },
+ { }
+};
+
+U_BOOT_DRIVER(sa8775p_rpmh_clk) = {
+ .name = "sa8775p_rpmh_clk",
+ .id = UCLASS_CLK,
+ .of_match = sa8775p_rpmh_clk_ids,
+ .ops = &sa8775p_rpmh_clk_ops,
+ .flags = DM_FLAG_DEFAULT_PD_CTRL_OFF,
+};