lipengfei28 commented on code in PR #16798:
URL: https://github.com/apache/nuttx/pull/16798#discussion_r2261837429


##########
arch/arm64/src/imx9/imx9_clockconfig.c:
##########
@@ -53,6 +55,135 @@
  * Private Functions
  ****************************************************************************/
 
+#ifdef CONFIG_IMX9_CLK_OVER_SCMI
+
+/****************************************************************************
+ * Name: imx9_sm_getipfreq
+ *
+ * Description:
+ *   This function get the clock rate
+ *
+ * Input Parameters:
+ *  sm_clk - The clock to be get the rate
+ *
+ * Returned Value:
+ *   rate is returned on success; a negated errno value is returned on
+ *   any failure.
+ *
+ ****************************************************************************/
+
+static int imx9_sm_getipfreq(scmi_clock_t *sm_clk)
+{
+  scmi_clock_rate_t rate =
+    {
+      0, 0
+    };
+
+  uint32_t channel  = sm_clk->channel;
+  uint32_t clock_id = sm_clk->clk_id;
+  uint32_t pclk_id  = sm_clk->pclk_id;
+  int status        = 0;
+
+  status = imx9_scmi_get_clock_parent(channel, clock_id, &pclk_id);
+  if (status < 0)
+    {
+      return status;
+    }
+
+  status = imx9_scmi_get_clock_rate(channel, clock_id, &rate);
+  if (status < 0)
+    {
+      return status;
+    }
+
+  return rate.lower;
+}
+
+/****************************************************************************
+ * Name: imx9_sm_setrootclock
+ *
+ * Description:
+ *   This function set root for clock
+ *
+ * Input Parameters:
+ *  sm_clk - The clock to be set root
+ *
+ * Returned Value:
+ *   Zero (OK) is returned on success; a negated errno value is returned on
+ *   any failure.
+ *
+ ****************************************************************************/
+
+static int imx9_sm_setrootclock(scmi_clock_t *sm_clk)
+{
+  scmi_clock_rate_t rate =
+    {
+      0, 0
+    };
+
+  uint32_t channel        = sm_clk->channel;
+  uint32_t clock_id       = sm_clk->clk_id;
+  uint32_t pclk_id        = sm_clk->pclk_id;
+  uint32_t div            = sm_clk->div;
+  uint32_t attributes     = sm_clk->attributes;
+  uint32_t oem_config_val = sm_clk->oem_config_val;
+  uint32_t flags          = sm_clk->flags;
+  uint32_t old_pclk_id    = 0; /* parent clock id */
+  uint64_t src_rate, root_rate;
+  int32_t status = -1;
+
+  if (div == 0)
+    {
+      return -EINVAL;
+    }
+
+  status = imx9_scmi_get_clock_parent(channel, clock_id, &old_pclk_id);
+  if (status != 0)
+    {
+      return status;
+    }
+
+  if (old_pclk_id != pclk_id)
+    {
+      status = imx9_scmi_set_clock_parent(channel, clock_id, pclk_id);
+      if (status != 0)
+        {
+          return status;
+        }
+    }
+
+  status = imx9_scmi_get_clock_rate(channel, pclk_id, &rate);
+  if (status != 0)
+    {
+      return status;
+    }
+
+  src_rate = rate.upper;
+  src_rate = (src_rate << 32);
+  src_rate |= rate.lower;
+
+  root_rate = src_rate / div;
+
+  rate.lower = root_rate & SCMI_CLOCK_RATE_MASK;
+  rate.upper = (root_rate >> 32) & SCMI_CLOCK_RATE_MASK;
+
+  status = imx9_scmi_clockrateset(channel, clock_id, flags, rate);
+  if (status != 0)
+    {
+      return status;
+    }
+
+  status = imx9_scmi_set_clock_config(channel, clock_id, attributes,
+                                    oem_config_val);
+  if (status != 0)
+    {
+      return status;
+    }
+
+  return OK;
+}
+
+#else

Review Comment:
   done



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to