Skip to content

Commit 2952134

Browse files
committed
Merge tag 'renesas-clk-for-v6.7-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers into clk-renesas
Pull Renesas clk driver updates from Geert Uytterhoeven: - Miscellaneous fixes and improvements * tag 'renesas-clk-for-v6.7-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers: clk: renesas: r8a7795: Constify r8a7795_*_clks clk: renesas: r9a06g032: Name anonymous structs clk: renesas: r9a06g032: Fix kerneldoc warning clk: renesas: rzg2l: Use u32 for flag and mux_flags clk: renesas: rzg2l: Use FIELD_GET() for PLL register fields clk: renesas: rzg2l: Simplify the logic in rzg2l_mod_clock_endisable() clk: renesas: rzg2l: Use core->name for clock name clk: renesas: r9a06g032: Use for_each_compatible_node()
2 parents 0bb80ec + 8788252 commit 2952134

File tree

4 files changed

+48
-46
lines changed

4 files changed

+48
-46
lines changed

drivers/clk/renesas/r8a7795-cpg-mssr.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ enum clk_ids {
5151
MOD_CLK_BASE
5252
};
5353

54-
static struct cpg_core_clk r8a7795_core_clks[] __initdata = {
54+
static const struct cpg_core_clk r8a7795_core_clks[] __initconst = {
5555
/* External Clock Inputs */
5656
DEF_INPUT("extal", CLK_EXTAL),
5757
DEF_INPUT("extalr", CLK_EXTALR),
@@ -128,7 +128,7 @@ static struct cpg_core_clk r8a7795_core_clks[] __initdata = {
128128
DEF_BASE("r", R8A7795_CLK_R, CLK_TYPE_GEN3_R, CLK_RINT),
129129
};
130130

131-
static struct mssr_mod_clk r8a7795_mod_clks[] __initdata = {
131+
static const struct mssr_mod_clk r8a7795_mod_clks[] __initconst = {
132132
DEF_MOD("3dge", 112, R8A7795_CLK_ZG),
133133
DEF_MOD("fdp1-1", 118, R8A7795_CLK_S0D1),
134134
DEF_MOD("fdp1-0", 119, R8A7795_CLK_S0D1),

drivers/clk/renesas/r9a06g032-clocks.c

Lines changed: 36 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -102,19 +102,22 @@ enum gate_type {
102102
* @source: the ID+1 of the parent clock element.
103103
* Root clock uses ID of ~0 (PARENT_ID);
104104
* @gate: clock enable/disable
105-
* @div_min: smallest permitted clock divider
106-
* @div_max: largest permitted clock divider
107-
* @reg: clock divider register offset, in 32-bit words
108-
* @div_table: optional list of fixed clock divider values;
105+
* @div: substructure for clock divider
106+
* @div.min: smallest permitted clock divider
107+
* @div.max: largest permitted clock divider
108+
* @div.reg: clock divider register offset, in 32-bit words
109+
* @div.table: optional list of fixed clock divider values;
109110
* must be in ascending order, zero for unused
110-
* @div: divisor for fixed-factor clock
111-
* @mul: multiplier for fixed-factor clock
112-
* @group: UART group, 0=UART0/1/2, 1=UART3/4/5/6/7
113-
* @sel: select either g1/r1 or g2/r2 as clock source
114-
* @g1: 1st source gate (clock enable/disable)
115-
* @r1: 1st source reset (module reset)
116-
* @g2: 2nd source gate (clock enable/disable)
117-
* @r2: 2nd source reset (module reset)
111+
* @ffc: substructure for fixed-factor clocks
112+
* @ffc.div: divisor for fixed-factor clock
113+
* @ffc.mul: multiplier for fixed-factor clock
114+
* @dual: substructure for dual clock gates
115+
* @dual.group: UART group, 0=UART0/1/2, 1=UART3/4/5/6/7
116+
* @dual.sel: select either g1/r1 or g2/r2 as clock source
117+
* @dual.g1: 1st source gate (clock enable/disable)
118+
* @dual.r1: 1st source reset (module reset)
119+
* @dual.g2: 2nd source gate (clock enable/disable)
120+
* @dual.r2: 2nd source reset (module reset)
118121
*
119122
* Describes a single element in the clock tree hierarchy.
120123
* As there are quite a large number of clock elements, this
@@ -131,13 +134,13 @@ struct r9a06g032_clkdesc {
131134
struct r9a06g032_gate gate;
132135
/* type = K_DIV */
133136
struct {
134-
unsigned int div_min:10, div_max:10, reg:10;
135-
u16 div_table[4];
136-
};
137+
unsigned int min:10, max:10, reg:10;
138+
u16 table[4];
139+
} div;
137140
/* type = K_FFC */
138141
struct {
139142
u16 div, mul;
140-
};
143+
} ffc;
141144
/* type = K_DUALGATE */
142145
struct {
143146
uint16_t group:1;
@@ -178,26 +181,26 @@ struct r9a06g032_clkdesc {
178181
.type = K_FFC, \
179182
.index = R9A06G032_##_idx, \
180183
.name = _n, \
181-
.div = _div, \
182-
.mul = _mul \
184+
.ffc.div = _div, \
185+
.ffc.mul = _mul \
183186
}
184187
#define D_FFC(_idx, _n, _src, _div) { \
185188
.type = K_FFC, \
186189
.index = R9A06G032_##_idx, \
187190
.source = 1 + R9A06G032_##_src, \
188191
.name = _n, \
189-
.div = _div, \
190-
.mul = 1 \
192+
.ffc.div = _div, \
193+
.ffc.mul = 1 \
191194
}
192195
#define D_DIV(_idx, _n, _src, _reg, _min, _max, ...) { \
193196
.type = K_DIV, \
194197
.index = R9A06G032_##_idx, \
195198
.source = 1 + R9A06G032_##_src, \
196199
.name = _n, \
197-
.reg = _reg, \
198-
.div_min = _min, \
199-
.div_max = _max, \
200-
.div_table = { __VA_ARGS__ } \
200+
.div.reg = _reg, \
201+
.div.min = _min, \
202+
.div.max = _max, \
203+
.div.table = { __VA_ARGS__ } \
201204
}
202205
#define D_UGATE(_idx, _n, _src, _g, _g1, _r1, _g2, _r2) { \
203206
.type = K_DUALGATE, \
@@ -1063,14 +1066,14 @@ r9a06g032_register_div(struct r9a06g032_priv *clocks,
10631066

10641067
div->clocks = clocks;
10651068
div->index = desc->index;
1066-
div->reg = desc->reg;
1069+
div->reg = desc->div.reg;
10671070
div->hw.init = &init;
1068-
div->min = desc->div_min;
1069-
div->max = desc->div_max;
1071+
div->min = desc->div.min;
1072+
div->max = desc->div.max;
10701073
/* populate (optional) divider table fixed values */
10711074
for (i = 0; i < ARRAY_SIZE(div->table) &&
1072-
i < ARRAY_SIZE(desc->div_table) && desc->div_table[i]; i++) {
1073-
div->table[div->table_size++] = desc->div_table[i];
1075+
i < ARRAY_SIZE(desc->div.table) && desc->div.table[i]; i++) {
1076+
div->table[div->table_size++] = desc->div.table[i];
10741077
}
10751078

10761079
clk = clk_register(NULL, &div->hw);
@@ -1269,11 +1272,10 @@ static void r9a06g032_clocks_del_clk_provider(void *data)
12691272

12701273
static void __init r9a06g032_init_h2mode(struct r9a06g032_priv *clocks)
12711274
{
1272-
struct device_node *usbf_np = NULL;
1275+
struct device_node *usbf_np;
12731276
u32 usb;
12741277

1275-
while ((usbf_np = of_find_compatible_node(usbf_np, NULL,
1276-
"renesas,rzn1-usbf"))) {
1278+
for_each_compatible_node(usbf_np, NULL, "renesas,rzn1-usbf") {
12771279
if (of_device_is_available(usbf_np))
12781280
break;
12791281
}
@@ -1333,7 +1335,8 @@ static int __init r9a06g032_clocks_probe(struct platform_device *pdev)
13331335
case K_FFC:
13341336
clk = clk_register_fixed_factor(NULL, d->name,
13351337
parent_name, 0,
1336-
d->mul, d->div);
1338+
d->ffc.mul,
1339+
d->ffc.div);
13371340
break;
13381341
case K_GATE:
13391342
clk = r9a06g032_register_gate(clocks, parent_name, d);

drivers/clk/renesas/rzg2l-cpg.c

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
* Copyright (C) 2015 Renesas Electronics Corp.
1212
*/
1313

14+
#include <linux/bitfield.h>
1415
#include <linux/clk.h>
1516
#include <linux/clk-provider.h>
1617
#include <linux/clk/renesas.h>
@@ -38,14 +39,13 @@
3839
#define WARN_DEBUG(x) do { } while (0)
3940
#endif
4041

41-
#define DIV_RSMASK(v, s, m) ((v >> s) & m)
4242
#define GET_SHIFT(val) ((val >> 12) & 0xff)
4343
#define GET_WIDTH(val) ((val >> 8) & 0xf)
4444

45-
#define KDIV(val) DIV_RSMASK(val, 16, 0xffff)
46-
#define MDIV(val) DIV_RSMASK(val, 6, 0x3ff)
47-
#define PDIV(val) DIV_RSMASK(val, 0, 0x3f)
48-
#define SDIV(val) DIV_RSMASK(val, 0, 0x7)
45+
#define KDIV(val) FIELD_GET(GENMASK(31, 16), val)
46+
#define MDIV(val) FIELD_GET(GENMASK(15, 6), val)
47+
#define PDIV(val) FIELD_GET(GENMASK(5, 0), val)
48+
#define SDIV(val) FIELD_GET(GENMASK(2, 0), val)
4949

5050
#define CLK_ON_R(reg) (reg)
5151
#define CLK_MON_R(reg) (0x180 + (reg))
@@ -265,7 +265,7 @@ rzg2l_cpg_sd_mux_clk_register(const struct cpg_core_clk *core,
265265
clk_hw_data->priv = priv;
266266
clk_hw_data->conf = core->conf;
267267

268-
init.name = GET_SHIFT(core->conf) ? "sd1" : "sd0";
268+
init.name = core->name;
269269
init.ops = &rzg2l_cpg_sd_clk_mux_ops;
270270
init.flags = 0;
271271
init.num_parents = core->num_parents;
@@ -909,10 +909,9 @@ static int rzg2l_mod_clock_endisable(struct clk_hw *hw, bool enable)
909909
enable ? "ON" : "OFF");
910910
spin_lock_irqsave(&priv->rmw_lock, flags);
911911

912+
value = bitmask << 16;
912913
if (enable)
913-
value = (bitmask << 16) | bitmask;
914-
else
915-
value = bitmask << 16;
914+
value |= bitmask;
916915
writel(value, priv->base + CLK_ON_R(reg));
917916

918917
spin_unlock_irqrestore(&priv->rmw_lock, flags);

drivers/clk/renesas/rzg2l-cpg.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ struct cpg_core_clk {
9292
unsigned int conf;
9393
const struct clk_div_table *dtable;
9494
const char * const *parent_names;
95-
int flag;
96-
int mux_flags;
95+
u32 flag;
96+
u32 mux_flags;
9797
int num_parents;
9898
};
9999

0 commit comments

Comments
 (0)