summaryrefslogtreecommitdiff
path: root/plat/xilinx
diff options
context:
space:
mode:
authorJolly Shah <jollys@xilinx.com>2019-01-02 12:49:21 -0800
committerJolly Shah <jollys@xilinx.com>2019-01-04 11:43:16 -0800
commita5ae5a72fa71ceb4e14d23dc478d451ae7cfe834 (patch)
tree32436c9989efe8c405b64f2f9b734454639d1e9a /plat/xilinx
parent8975f317e7608c832192b71531901602dc625484 (diff)
zynqmp: pm: Return the buffered PLL mode through IOCTL PLL get mode API
When linux calls pm_ioctl_get_pll_frac_mode() it doesn't expect the actual mode to be read from hardware, but the value that it is intending to program. Therefore, we return the buffered value to linux. 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.c37
-rw-r--r--plat/xilinx/zynqmp/pm_service/pm_api_clock.h4
-rw-r--r--plat/xilinx/zynqmp/pm_service/pm_api_ioctl.c4
3 files changed, 15 insertions, 30 deletions
diff --git a/plat/xilinx/zynqmp/pm_service/pm_api_clock.c b/plat/xilinx/zynqmp/pm_service/pm_api_clock.c
index 8cdc0e43..1fab38fa 100644
--- a/plat/xilinx/zynqmp/pm_service/pm_api_clock.c
+++ b/plat/xilinx/zynqmp/pm_service/pm_api_clock.c
@@ -3153,37 +3153,22 @@ enum pm_ret_status pm_clock_set_pll_mode(enum clock_id clock_id,
}
/**
- * pm_ioctl_get_pll_mode() - Get PLL mode
- * @pll PLL id
- * @mode Mode fraction/integar
+ * pm_clock_get_pll_mode() - Get PLL mode
+ * @clock_id PLL clock id
+ * @mode Location to store the mode (fractional/integer)
*
- * This function returns current PLL mode.
+ * This function returns buffered PLL mode.
*
- * @return Returns status, either success or error+reason
+ * @return Success if mode is stored or error if an argument is invalid
*/
-enum pm_ret_status pm_api_clk_get_pll_mode(unsigned int pll,
- unsigned int *mode)
+enum pm_ret_status pm_clock_get_pll_mode(enum clock_id clock_id,
+ unsigned int *mode)
{
- enum pm_ret_status ret = PM_RET_SUCCESS;
- unsigned int val, reg;
+ struct pm_pll *pll = pm_clock_get_pll(clock_id);
- if (!pm_clock_valid(pll))
+ if (!pll || !mode)
return PM_RET_ERROR_ARGS;
+ *mode = pll->mode;
- if (pm_clock_type(pll) != CLK_TYPE_OUTPUT)
- return PM_RET_ERROR_NOTSUPPORTED;
-
- if (!ISPLL(pll))
- return PM_RET_ERROR_NOTSUPPORTED;
-
- reg = clocks[pll].control_reg + PLL_FRAC_OFFSET;
-
- ret = pm_mmio_read(reg, &val);
- val = val & PLL_FRAC_MODE_MASK;
- if (val == 0)
- *mode = PLL_INT_MODE;
- else
- *mode = PLL_FRAC_MODE;
-
- return ret;
+ return PM_RET_SUCCESS;
}
diff --git a/plat/xilinx/zynqmp/pm_service/pm_api_clock.h b/plat/xilinx/zynqmp/pm_service/pm_api_clock.h
index bf42d950..3a70036f 100644
--- a/plat/xilinx/zynqmp/pm_service/pm_api_clock.h
+++ b/plat/xilinx/zynqmp/pm_service/pm_api_clock.h
@@ -310,7 +310,7 @@ enum pm_ret_status pm_api_clock_getparent(unsigned int clock_id,
unsigned int *parent_idx);
enum pm_ret_status pm_clock_set_pll_mode(enum clock_id clock_id,
unsigned int mode);
-enum pm_ret_status pm_api_clk_get_pll_mode(unsigned int pll,
- unsigned int *mode);
+enum pm_ret_status pm_clock_get_pll_mode(enum clock_id clock_id,
+ unsigned int *mode);
#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 284d9015..3e368971 100644
--- a/plat/xilinx/zynqmp/pm_service/pm_api_ioctl.c
+++ b/plat/xilinx/zynqmp/pm_service/pm_api_ioctl.c
@@ -348,7 +348,7 @@ static enum pm_ret_status pm_ioctl_set_pll_frac_mode
/**
* pm_ioctl_get_pll_frac_mode() - Ioctl function for
* getting pll mode
- * @pll PLL id
+ * @pll PLL clock id
* @mode Mode fraction/integar
*
* This function return current PLL mode
@@ -358,7 +358,7 @@ static enum pm_ret_status pm_ioctl_set_pll_frac_mode
static enum pm_ret_status pm_ioctl_get_pll_frac_mode
(unsigned int pll, unsigned int *mode)
{
- return pm_api_clk_get_pll_mode(pll, mode);
+ return pm_clock_get_pll_mode(pll, mode);
}
/**