summaryrefslogtreecommitdiff
path: root/plat/xilinx
diff options
context:
space:
mode:
authorJolly Shah <jollys@xilinx.com>2019-01-02 12:42:56 -0800
committerJolly Shah <jollys@xilinx.com>2019-01-04 11:40:27 -0800
commitcf1769b5922f725486ff1776d685eb5b68081ee7 (patch)
treef806ad8a45f7a8b05c0fb3700aa3a330a472f37c /plat/xilinx
parent1e3fb352b7415ed53bdb6e439970870e3828bc64 (diff)
zynqmp: pm: Set PLL fractional data using PLL set parameter EEMI API
Fractional data should be set using PLL set parameter EEMI API. This stands for system-level communication (APU to PMU). Since linux already uses a specific IOCTL function to do this and we need to keep it that way, the pll clock ID given by linux has to be mapped to the pll node ID that is communicated at the system-level (argument of PLL set parameter API). With this modification the function pm_api_clk_set_pll_frac_data is removed from pm_api_clock.c/h because it became unused. Signed-off-by: Mirela Simonovic <mirela.simonovic@aggios.com> Acked-by: Will Wong <WILLW@xilinx.com> Signed-off-by: Jolly Shah <jollys@xilinx.com>
Diffstat (limited to 'plat/xilinx')
-rw-r--r--plat/xilinx/zynqmp/pm_service/pm_api_clock.c39
-rw-r--r--plat/xilinx/zynqmp/pm_service/pm_api_clock.h2
-rw-r--r--plat/xilinx/zynqmp/pm_service/pm_api_ioctl.c12
3 files changed, 10 insertions, 43 deletions
diff --git a/plat/xilinx/zynqmp/pm_service/pm_api_clock.c b/plat/xilinx/zynqmp/pm_service/pm_api_clock.c
index 723ad401..a09c9e5f 100644
--- a/plat/xilinx/zynqmp/pm_service/pm_api_clock.c
+++ b/plat/xilinx/zynqmp/pm_service/pm_api_clock.c
@@ -3199,42 +3199,3 @@ enum pm_ret_status pm_api_clk_get_pll_mode(unsigned int pll,
return ret;
}
-
-/**
- * pm_api_clk_set_pll_frac_data() - Set PLL fraction data
- * @pll PLL id
- * @data fraction data
- *
- * This function sets fraction data. It is valid for fraction
- * mode only.
- *
- * @return Returns status, either success or error+reason
- */
-enum pm_ret_status pm_api_clk_set_pll_frac_data(unsigned int pll,
- unsigned int data)
-{
- enum pm_ret_status ret = PM_RET_SUCCESS;
- unsigned int val, reg, mode = 0;
-
- if (!pm_clock_valid(pll))
- return PM_RET_ERROR_ARGS;
-
- if (pm_clock_type(pll) != CLK_TYPE_OUTPUT)
- return PM_RET_ERROR_NOTSUPPORTED;
-
- if (!ISPLL(pll))
- return PM_RET_ERROR_NOTSUPPORTED;
-
- ret = pm_api_clk_get_pll_mode(pll, &mode);
- if (ret != PM_RET_SUCCESS)
- return ret;
- if (mode == PLL_FRAC_MODE) {
- reg = clocks[pll].control_reg + PLL_FRAC_OFFSET;
- val = data << PLL_FRAC_DATA_SHIFT;
- ret = pm_mmio_write(reg, PLL_FRAC_DATA_MASK, val);
- } else {
- return PM_RET_ERROR_ARGS;
- }
-
- return ret;
-}
diff --git a/plat/xilinx/zynqmp/pm_service/pm_api_clock.h b/plat/xilinx/zynqmp/pm_service/pm_api_clock.h
index ebada774..482662d7 100644
--- a/plat/xilinx/zynqmp/pm_service/pm_api_clock.h
+++ b/plat/xilinx/zynqmp/pm_service/pm_api_clock.h
@@ -312,7 +312,5 @@ enum pm_ret_status pm_api_clk_set_pll_mode(unsigned int pll,
unsigned int mode);
enum pm_ret_status pm_api_clk_get_pll_mode(unsigned int pll,
unsigned int *mode);
-enum pm_ret_status pm_api_clk_set_pll_frac_data(unsigned int pll,
- unsigned int data);
#endif /* PM_API_CLOCK_H */
diff --git a/plat/xilinx/zynqmp/pm_service/pm_api_ioctl.c b/plat/xilinx/zynqmp/pm_service/pm_api_ioctl.c
index 87c3f7de..235d8824 100644
--- a/plat/xilinx/zynqmp/pm_service/pm_api_ioctl.c
+++ b/plat/xilinx/zynqmp/pm_service/pm_api_ioctl.c
@@ -364,7 +364,7 @@ static enum pm_ret_status pm_ioctl_get_pll_frac_mode
/**
* pm_ioctl_set_pll_frac_data() - Ioctl function for
* setting pll fraction data
- * @pll PLL id
+ * @pll PLL clock id
* @data fraction data
*
* This function sets fraction data.
@@ -375,7 +375,15 @@ static enum pm_ret_status pm_ioctl_get_pll_frac_mode
static enum pm_ret_status pm_ioctl_set_pll_frac_data
(unsigned int pll, unsigned int data)
{
- return pm_api_clk_set_pll_frac_data(pll, data);
+ enum pm_node_id pll_nid;
+ enum pm_ret_status status;
+
+ /* Get PLL node ID using PLL clock ID */
+ status = pm_clock_get_pll_node_id(pll, &pll_nid);
+ if (status != PM_RET_SUCCESS)
+ return status;
+
+ return pm_pll_set_parameter(pll_nid, PM_PLL_PARAM_DATA, data);
}
/**