* [PATCH 1/2] drivers: clk: zynqmp: Add support for custom type flags
2020-03-02 21:30 [PATCH 0/2] drivers: clk: zynqmp: Update fraction clock check from custom type flags Jolly Shah
@ 2020-03-02 21:30 ` Jolly Shah
2020-03-02 21:30 ` [PATCH 2/2] drivers: clk: zynqmp: Update fraction clock check from " Jolly Shah
1 sibling, 0 replies; 3+ messages in thread
From: Jolly Shah @ 2020-03-02 21:30 UTC (permalink / raw)
To: olof, mturquette, sboyd, michal.simek, arm, linux-clk
Cc: rajanv, linux-arm-kernel, linux-kernel, Rajan Vaja, Tejas Patel,
Jolly Shah
From: Rajan Vaja <rajan.vaja@xilinx.com>
Store extra custom type flags received from firmware.
Signed-off-by: Rajan Vaja <rajan.vaja@xilinx.com>
Signed-off-by: Tejas Patel <tejas.patel@xilinx.com>
Signed-off-by: Jolly Shah <jolly.shah@xilinx.com>
---
drivers/clk/zynqmp/clk-zynqmp.h | 1 +
drivers/clk/zynqmp/clkc.c | 4 ++++
2 files changed, 5 insertions(+)
diff --git a/drivers/clk/zynqmp/clk-zynqmp.h b/drivers/clk/zynqmp/clk-zynqmp.h
index fec9a15..5beeb41 100644
--- a/drivers/clk/zynqmp/clk-zynqmp.h
+++ b/drivers/clk/zynqmp/clk-zynqmp.h
@@ -30,6 +30,7 @@ struct clock_topology {
u32 type;
u32 flag;
u32 type_flag;
+ u8 custom_type_flag;
};
struct clk_hw *zynqmp_clk_register_pll(const char *name, u32 clk_id,
diff --git a/drivers/clk/zynqmp/clkc.c b/drivers/clk/zynqmp/clkc.c
index 10e89f2..4dd8413 100644
--- a/drivers/clk/zynqmp/clkc.c
+++ b/drivers/clk/zynqmp/clkc.c
@@ -84,6 +84,7 @@ struct name_resp {
struct topology_resp {
#define CLK_TOPOLOGY_TYPE GENMASK(3, 0)
+#define CLK_TOPOLOGY_CUSTOM_TYPE_FLAGS GENMASK(7, 4)
#define CLK_TOPOLOGY_FLAGS GENMASK(23, 8)
#define CLK_TOPOLOGY_TYPE_FLAGS GENMASK(31, 24)
u32 topology[CLK_GET_TOPOLOGY_RESP_WORDS];
@@ -396,6 +397,9 @@ static int __zynqmp_clock_get_topology(struct clock_topology *topology,
topology[*nnodes].type_flag =
FIELD_GET(CLK_TOPOLOGY_TYPE_FLAGS,
response->topology[i]);
+ topology[*nnodes].custom_type_flag =
+ FIELD_GET(CLK_TOPOLOGY_CUSTOM_TYPE_FLAGS,
+ response->topology[i]);
(*nnodes)++;
}
--
2.7.4
^ permalink raw reply [flat|nested] 3+ messages in thread* [PATCH 2/2] drivers: clk: zynqmp: Update fraction clock check from custom type flags
2020-03-02 21:30 [PATCH 0/2] drivers: clk: zynqmp: Update fraction clock check from custom type flags Jolly Shah
2020-03-02 21:30 ` [PATCH 1/2] drivers: clk: zynqmp: Add support for " Jolly Shah
@ 2020-03-02 21:30 ` Jolly Shah
1 sibling, 0 replies; 3+ messages in thread
From: Jolly Shah @ 2020-03-02 21:30 UTC (permalink / raw)
To: olof, mturquette, sboyd, michal.simek, arm, linux-clk
Cc: rajanv, linux-arm-kernel, linux-kernel, Tejas Patel, Rajan Vaja,
Jolly Shah
From: Tejas Patel <tejas.patel@xilinx.com>
Older firmware version sets BIT(13) in clkflag to mark a
divider as fractional divider. Updated firmware version sets BIT(4)
in custom type flags to mark a divider as fractional divider since
BIT(13) is defined as CLK_DUTY_CYCLE_PARENT in the common clk
framework flags.
To support both old and new firmware version, consider BIT(13) from
clkflag and BIT(4) from type_flag to check if divider is fractional
or not.
To maintain compatibility BIT(13) of clkflag in firmware will not be
used in future for any purpose and will be marked as unused.
Signed-off-by: Tejas Patel <tejas.patel@xilinx.com>
Signed-off-by: Rajan Vaja <rajan.vaja@xilinx.com>
Signed-off-by: Jolly Shah <jolly.shah@xilinx.com>
---
drivers/clk/zynqmp/divider.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/clk/zynqmp/divider.c b/drivers/clk/zynqmp/divider.c
index 4be2cc7..973cdf0 100644
--- a/drivers/clk/zynqmp/divider.c
+++ b/drivers/clk/zynqmp/divider.c
@@ -25,7 +25,8 @@
#define to_zynqmp_clk_divider(_hw) \
container_of(_hw, struct zynqmp_clk_divider, hw)
-#define CLK_FRAC BIT(13) /* has a fractional parent */
+#define CLK_FRAC BIT(13) /* has a fractional parent */
+#define CUSTOM_FLAG_CLK_FRAC BIT(4) /* has a fractional parent in custom type flag */
/**
* struct zynqmp_clk_divider - adjustable divider clock
@@ -311,7 +312,8 @@ struct clk_hw *zynqmp_clk_register_divider(const char *name,
init.num_parents = 1;
/* struct clk_divider assignments */
- div->is_frac = !!(nodes->flag & CLK_FRAC);
+ div->is_frac = !!((nodes->flag & CLK_FRAC) |
+ (nodes->custom_type_flag & CUSTOM_FLAG_CLK_FRAC));
div->flags = nodes->type_flag;
div->hw.init = &init;
div->clk_id = clk_id;
--
2.7.4
^ permalink raw reply [flat|nested] 3+ messages in thread