@@ -50,6 +50,7 @@ struct mpfs_msspll_hw_clock {
50
50
#define to_mpfs_msspll_clk (_hw ) container_of(_hw, struct mpfs_msspll_hw_clock, hw)
51
51
52
52
struct mpfs_cfg_clock {
53
+ void __iomem * reg ;
53
54
const struct clk_div_table * table ;
54
55
u8 shift ;
55
56
u8 width ;
@@ -58,7 +59,6 @@ struct mpfs_cfg_clock {
58
59
59
60
struct mpfs_cfg_hw_clock {
60
61
struct mpfs_cfg_clock cfg ;
61
- void __iomem * sys_base ;
62
62
struct clk_hw hw ;
63
63
struct clk_init_data init ;
64
64
unsigned int id ;
@@ -68,12 +68,12 @@ struct mpfs_cfg_hw_clock {
68
68
#define to_mpfs_cfg_clk (_hw ) container_of(_hw, struct mpfs_cfg_hw_clock, hw)
69
69
70
70
struct mpfs_periph_clock {
71
+ void __iomem * reg ;
71
72
u8 shift ;
72
73
};
73
74
74
75
struct mpfs_periph_hw_clock {
75
76
struct mpfs_periph_clock periph ;
76
- void __iomem * sys_base ;
77
77
struct clk_hw hw ;
78
78
unsigned int id ;
79
79
};
@@ -212,14 +212,13 @@ static int mpfs_clk_register_msspll(struct device *dev, struct mpfs_msspll_hw_cl
212
212
static int mpfs_clk_register_mssplls (struct device * dev , struct mpfs_msspll_hw_clock * msspll_hws ,
213
213
unsigned int num_clks , struct mpfs_clock_data * data )
214
214
{
215
- void __iomem * base = data -> msspll_base ;
216
215
unsigned int i ;
217
216
int ret ;
218
217
219
218
for (i = 0 ; i < num_clks ; i ++ ) {
220
219
struct mpfs_msspll_hw_clock * msspll_hw = & msspll_hws [i ];
221
220
222
- ret = mpfs_clk_register_msspll (dev , msspll_hw , base );
221
+ ret = mpfs_clk_register_msspll (dev , msspll_hw , data -> msspll_base );
223
222
if (ret )
224
223
return dev_err_probe (dev , ret , "failed to register msspll id: %d\n" ,
225
224
CLK_MSSPLL );
@@ -238,10 +237,9 @@ static unsigned long mpfs_cfg_clk_recalc_rate(struct clk_hw *hw, unsigned long p
238
237
{
239
238
struct mpfs_cfg_hw_clock * cfg_hw = to_mpfs_cfg_clk (hw );
240
239
struct mpfs_cfg_clock * cfg = & cfg_hw -> cfg ;
241
- void __iomem * base_addr = cfg_hw -> sys_base ;
242
240
u32 val ;
243
241
244
- val = readl_relaxed (base_addr + cfg_hw -> reg_offset ) >> cfg -> shift ;
242
+ val = readl_relaxed (cfg -> reg ) >> cfg -> shift ;
245
243
val &= clk_div_mask (cfg -> width );
246
244
247
245
return divider_recalc_rate (hw , prate , val , cfg -> table , cfg -> flags , cfg -> width );
@@ -259,7 +257,6 @@ static int mpfs_cfg_clk_set_rate(struct clk_hw *hw, unsigned long rate, unsigned
259
257
{
260
258
struct mpfs_cfg_hw_clock * cfg_hw = to_mpfs_cfg_clk (hw );
261
259
struct mpfs_cfg_clock * cfg = & cfg_hw -> cfg ;
262
- void __iomem * base_addr = cfg_hw -> sys_base ;
263
260
unsigned long flags ;
264
261
u32 val ;
265
262
int divider_setting ;
@@ -270,10 +267,10 @@ static int mpfs_cfg_clk_set_rate(struct clk_hw *hw, unsigned long rate, unsigned
270
267
return divider_setting ;
271
268
272
269
spin_lock_irqsave (& mpfs_clk_lock , flags );
273
- val = readl_relaxed (base_addr + cfg_hw -> reg_offset );
270
+ val = readl_relaxed (cfg -> reg );
274
271
val &= ~(clk_div_mask (cfg -> width ) << cfg_hw -> cfg .shift );
275
272
val |= divider_setting << cfg -> shift ;
276
- writel_relaxed (val , base_addr + cfg_hw -> reg_offset );
273
+ writel_relaxed (val , cfg -> reg );
277
274
278
275
spin_unlock_irqrestore (& mpfs_clk_lock , flags );
279
276
@@ -321,24 +318,23 @@ static struct mpfs_cfg_hw_clock mpfs_cfg_clks[] = {
321
318
};
322
319
323
320
static int mpfs_clk_register_cfg (struct device * dev , struct mpfs_cfg_hw_clock * cfg_hw ,
324
- void __iomem * sys_base )
321
+ void __iomem * base )
325
322
{
326
- cfg_hw -> sys_base = sys_base ;
323
+ cfg_hw -> cfg . reg = base + cfg_hw -> reg_offset ;
327
324
328
325
return devm_clk_hw_register (dev , & cfg_hw -> hw );
329
326
}
330
327
331
328
static int mpfs_clk_register_cfgs (struct device * dev , struct mpfs_cfg_hw_clock * cfg_hws ,
332
329
unsigned int num_clks , struct mpfs_clock_data * data )
333
330
{
334
- void __iomem * sys_base = data -> base ;
335
331
unsigned int i , id ;
336
332
int ret ;
337
333
338
334
for (i = 0 ; i < num_clks ; i ++ ) {
339
335
struct mpfs_cfg_hw_clock * cfg_hw = & cfg_hws [i ];
340
336
341
- ret = mpfs_clk_register_cfg (dev , cfg_hw , sys_base );
337
+ ret = mpfs_clk_register_cfg (dev , cfg_hw , data -> base );
342
338
if (ret )
343
339
return dev_err_probe (dev , ret , "failed to register clock id: %d\n" ,
344
340
cfg_hw -> id );
@@ -358,15 +354,14 @@ static int mpfs_periph_clk_enable(struct clk_hw *hw)
358
354
{
359
355
struct mpfs_periph_hw_clock * periph_hw = to_mpfs_periph_clk (hw );
360
356
struct mpfs_periph_clock * periph = & periph_hw -> periph ;
361
- void __iomem * base_addr = periph_hw -> sys_base ;
362
357
u32 reg , val ;
363
358
unsigned long flags ;
364
359
365
360
spin_lock_irqsave (& mpfs_clk_lock , flags );
366
361
367
- reg = readl_relaxed (base_addr + REG_SUBBLK_CLOCK_CR );
362
+ reg = readl_relaxed (periph -> reg );
368
363
val = reg | (1u << periph -> shift );
369
- writel_relaxed (val , base_addr + REG_SUBBLK_CLOCK_CR );
364
+ writel_relaxed (val , periph -> reg );
370
365
371
366
spin_unlock_irqrestore (& mpfs_clk_lock , flags );
372
367
@@ -377,15 +372,14 @@ static void mpfs_periph_clk_disable(struct clk_hw *hw)
377
372
{
378
373
struct mpfs_periph_hw_clock * periph_hw = to_mpfs_periph_clk (hw );
379
374
struct mpfs_periph_clock * periph = & periph_hw -> periph ;
380
- void __iomem * base_addr = periph_hw -> sys_base ;
381
375
u32 reg , val ;
382
376
unsigned long flags ;
383
377
384
378
spin_lock_irqsave (& mpfs_clk_lock , flags );
385
379
386
- reg = readl_relaxed (base_addr + REG_SUBBLK_CLOCK_CR );
380
+ reg = readl_relaxed (periph -> reg );
387
381
val = reg & ~(1u << periph -> shift );
388
- writel_relaxed (val , base_addr + REG_SUBBLK_CLOCK_CR );
382
+ writel_relaxed (val , periph -> reg );
389
383
390
384
spin_unlock_irqrestore (& mpfs_clk_lock , flags );
391
385
}
@@ -394,10 +388,9 @@ static int mpfs_periph_clk_is_enabled(struct clk_hw *hw)
394
388
{
395
389
struct mpfs_periph_hw_clock * periph_hw = to_mpfs_periph_clk (hw );
396
390
struct mpfs_periph_clock * periph = & periph_hw -> periph ;
397
- void __iomem * base_addr = periph_hw -> sys_base ;
398
391
u32 reg ;
399
392
400
- reg = readl_relaxed (base_addr + REG_SUBBLK_CLOCK_CR );
393
+ reg = readl_relaxed (periph -> reg );
401
394
if (reg & (1u << periph -> shift ))
402
395
return 1 ;
403
396
@@ -466,24 +459,23 @@ static struct mpfs_periph_hw_clock mpfs_periph_clks[] = {
466
459
};
467
460
468
461
static int mpfs_clk_register_periph (struct device * dev , struct mpfs_periph_hw_clock * periph_hw ,
469
- void __iomem * sys_base )
462
+ void __iomem * base )
470
463
{
471
- periph_hw -> sys_base = sys_base ;
464
+ periph_hw -> periph . reg = base + REG_SUBBLK_CLOCK_CR ;
472
465
473
466
return devm_clk_hw_register (dev , & periph_hw -> hw );
474
467
}
475
468
476
469
static int mpfs_clk_register_periphs (struct device * dev , struct mpfs_periph_hw_clock * periph_hws ,
477
470
int num_clks , struct mpfs_clock_data * data )
478
471
{
479
- void __iomem * sys_base = data -> base ;
480
472
unsigned int i , id ;
481
473
int ret ;
482
474
483
475
for (i = 0 ; i < num_clks ; i ++ ) {
484
476
struct mpfs_periph_hw_clock * periph_hw = & periph_hws [i ];
485
477
486
- ret = mpfs_clk_register_periph (dev , periph_hw , sys_base );
478
+ ret = mpfs_clk_register_periph (dev , periph_hw , data -> base );
487
479
if (ret )
488
480
return dev_err_probe (dev , ret , "failed to register clock id: %d\n" ,
489
481
periph_hw -> id );
0 commit comments