Skip to content

Commit 1b09c30

Browse files
rajanv-xilinxbebarino
authored andcommitted
clk: zynqmp: Use firmware specific divider clock flags
Use ZynqMP specific divider clock flags instead of using CCF flags. Signed-off-by: Rajan Vaja <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Stephen Boyd <[email protected]>
1 parent 610a5d8 commit 1b09c30

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

drivers/clk/zynqmp/clk-zynqmp.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@
2424
/* do not gate, ever */
2525
#define ZYNQMP_CLK_IS_CRITICAL BIT(11)
2626

27+
/* Type Flags for divider clock */
28+
#define ZYNQMP_CLK_DIVIDER_ONE_BASED BIT(0)
29+
#define ZYNQMP_CLK_DIVIDER_POWER_OF_TWO BIT(1)
30+
#define ZYNQMP_CLK_DIVIDER_ALLOW_ZERO BIT(2)
31+
#define ZYNQMP_CLK_DIVIDER_HIWORD_MASK BIT(3)
32+
#define ZYNQMP_CLK_DIVIDER_ROUND_CLOSEST BIT(4)
33+
#define ZYNQMP_CLK_DIVIDER_READ_ONLY BIT(5)
34+
#define ZYNQMP_CLK_DIVIDER_MAX_AT_ZERO BIT(6)
35+
2736
enum topology_type {
2837
TYPE_INVALID,
2938
TYPE_MUX,

drivers/clk/zynqmp/divider.c

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,29 @@ static u32 zynqmp_clk_get_max_divisor(u32 clk_id, u32 type)
284284
return ret_payload[1];
285285
}
286286

287+
static inline unsigned long zynqmp_clk_map_divider_ccf_flags(
288+
const u32 zynqmp_type_flag)
289+
{
290+
unsigned long ccf_flag = 0;
291+
292+
if (zynqmp_type_flag & ZYNQMP_CLK_DIVIDER_ONE_BASED)
293+
ccf_flag |= CLK_DIVIDER_ONE_BASED;
294+
if (zynqmp_type_flag & ZYNQMP_CLK_DIVIDER_POWER_OF_TWO)
295+
ccf_flag |= CLK_DIVIDER_POWER_OF_TWO;
296+
if (zynqmp_type_flag & ZYNQMP_CLK_DIVIDER_ALLOW_ZERO)
297+
ccf_flag |= CLK_DIVIDER_ALLOW_ZERO;
298+
if (zynqmp_type_flag & ZYNQMP_CLK_DIVIDER_POWER_OF_TWO)
299+
ccf_flag |= CLK_DIVIDER_HIWORD_MASK;
300+
if (zynqmp_type_flag & ZYNQMP_CLK_DIVIDER_ROUND_CLOSEST)
301+
ccf_flag |= CLK_DIVIDER_ROUND_CLOSEST;
302+
if (zynqmp_type_flag & ZYNQMP_CLK_DIVIDER_READ_ONLY)
303+
ccf_flag |= CLK_DIVIDER_READ_ONLY;
304+
if (zynqmp_type_flag & ZYNQMP_CLK_DIVIDER_MAX_AT_ZERO)
305+
ccf_flag |= CLK_DIVIDER_MAX_AT_ZERO;
306+
307+
return ccf_flag;
308+
}
309+
287310
/**
288311
* zynqmp_clk_register_divider() - Register a divider clock
289312
* @name: Name of this clock
@@ -321,7 +344,7 @@ struct clk_hw *zynqmp_clk_register_divider(const char *name,
321344
/* struct clk_divider assignments */
322345
div->is_frac = !!((nodes->flag & CLK_FRAC) |
323346
(nodes->custom_type_flag & CUSTOM_FLAG_CLK_FRAC));
324-
div->flags = nodes->type_flag;
347+
div->flags = zynqmp_clk_map_divider_ccf_flags(nodes->type_flag);
325348
div->hw.init = &init;
326349
div->clk_id = clk_id;
327350
div->div_type = nodes->type;

0 commit comments

Comments
 (0)