@@ -50,6 +50,7 @@ struct mpfs_msspll_hw_clock {
5050#define to_mpfs_msspll_clk (_hw ) container_of(_hw, struct mpfs_msspll_hw_clock, hw)
5151
5252struct mpfs_cfg_clock {
53+ void __iomem * reg ;
5354 const struct clk_div_table * table ;
5455 u8 shift ;
5556 u8 width ;
@@ -58,7 +59,6 @@ struct mpfs_cfg_clock {
5859
5960struct mpfs_cfg_hw_clock {
6061 struct mpfs_cfg_clock cfg ;
61- void __iomem * sys_base ;
6262 struct clk_hw hw ;
6363 struct clk_init_data init ;
6464 unsigned int id ;
@@ -68,12 +68,12 @@ struct mpfs_cfg_hw_clock {
6868#define to_mpfs_cfg_clk (_hw ) container_of(_hw, struct mpfs_cfg_hw_clock, hw)
6969
7070struct mpfs_periph_clock {
71+ void __iomem * reg ;
7172 u8 shift ;
7273};
7374
7475struct mpfs_periph_hw_clock {
7576 struct mpfs_periph_clock periph ;
76- void __iomem * sys_base ;
7777 struct clk_hw hw ;
7878 unsigned int id ;
7979};
@@ -212,14 +212,13 @@ static int mpfs_clk_register_msspll(struct device *dev, struct mpfs_msspll_hw_cl
212212static int mpfs_clk_register_mssplls (struct device * dev , struct mpfs_msspll_hw_clock * msspll_hws ,
213213 unsigned int num_clks , struct mpfs_clock_data * data )
214214{
215- void __iomem * base = data -> msspll_base ;
216215 unsigned int i ;
217216 int ret ;
218217
219218 for (i = 0 ; i < num_clks ; i ++ ) {
220219 struct mpfs_msspll_hw_clock * msspll_hw = & msspll_hws [i ];
221220
222- ret = mpfs_clk_register_msspll (dev , msspll_hw , base );
221+ ret = mpfs_clk_register_msspll (dev , msspll_hw , data -> msspll_base );
223222 if (ret )
224223 return dev_err_probe (dev , ret , "failed to register msspll id: %d\n" ,
225224 CLK_MSSPLL );
@@ -238,10 +237,9 @@ static unsigned long mpfs_cfg_clk_recalc_rate(struct clk_hw *hw, unsigned long p
238237{
239238 struct mpfs_cfg_hw_clock * cfg_hw = to_mpfs_cfg_clk (hw );
240239 struct mpfs_cfg_clock * cfg = & cfg_hw -> cfg ;
241- void __iomem * base_addr = cfg_hw -> sys_base ;
242240 u32 val ;
243241
244- val = readl_relaxed (base_addr + cfg_hw -> reg_offset ) >> cfg -> shift ;
242+ val = readl_relaxed (cfg -> reg ) >> cfg -> shift ;
245243 val &= clk_div_mask (cfg -> width );
246244
247245 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
259257{
260258 struct mpfs_cfg_hw_clock * cfg_hw = to_mpfs_cfg_clk (hw );
261259 struct mpfs_cfg_clock * cfg = & cfg_hw -> cfg ;
262- void __iomem * base_addr = cfg_hw -> sys_base ;
263260 unsigned long flags ;
264261 u32 val ;
265262 int divider_setting ;
@@ -270,10 +267,10 @@ static int mpfs_cfg_clk_set_rate(struct clk_hw *hw, unsigned long rate, unsigned
270267 return divider_setting ;
271268
272269 spin_lock_irqsave (& mpfs_clk_lock , flags );
273- val = readl_relaxed (base_addr + cfg_hw -> reg_offset );
270+ val = readl_relaxed (cfg -> reg );
274271 val &= ~(clk_div_mask (cfg -> width ) << cfg_hw -> cfg .shift );
275272 val |= divider_setting << cfg -> shift ;
276- writel_relaxed (val , base_addr + cfg_hw -> reg_offset );
273+ writel_relaxed (val , cfg -> reg );
277274
278275 spin_unlock_irqrestore (& mpfs_clk_lock , flags );
279276
@@ -321,24 +318,23 @@ static struct mpfs_cfg_hw_clock mpfs_cfg_clks[] = {
321318};
322319
323320static int mpfs_clk_register_cfg (struct device * dev , struct mpfs_cfg_hw_clock * cfg_hw ,
324- void __iomem * sys_base )
321+ void __iomem * base )
325322{
326- cfg_hw -> sys_base = sys_base ;
323+ cfg_hw -> cfg . reg = base + cfg_hw -> reg_offset ;
327324
328325 return devm_clk_hw_register (dev , & cfg_hw -> hw );
329326}
330327
331328static int mpfs_clk_register_cfgs (struct device * dev , struct mpfs_cfg_hw_clock * cfg_hws ,
332329 unsigned int num_clks , struct mpfs_clock_data * data )
333330{
334- void __iomem * sys_base = data -> base ;
335331 unsigned int i , id ;
336332 int ret ;
337333
338334 for (i = 0 ; i < num_clks ; i ++ ) {
339335 struct mpfs_cfg_hw_clock * cfg_hw = & cfg_hws [i ];
340336
341- ret = mpfs_clk_register_cfg (dev , cfg_hw , sys_base );
337+ ret = mpfs_clk_register_cfg (dev , cfg_hw , data -> base );
342338 if (ret )
343339 return dev_err_probe (dev , ret , "failed to register clock id: %d\n" ,
344340 cfg_hw -> id );
@@ -358,15 +354,14 @@ static int mpfs_periph_clk_enable(struct clk_hw *hw)
358354{
359355 struct mpfs_periph_hw_clock * periph_hw = to_mpfs_periph_clk (hw );
360356 struct mpfs_periph_clock * periph = & periph_hw -> periph ;
361- void __iomem * base_addr = periph_hw -> sys_base ;
362357 u32 reg , val ;
363358 unsigned long flags ;
364359
365360 spin_lock_irqsave (& mpfs_clk_lock , flags );
366361
367- reg = readl_relaxed (base_addr + REG_SUBBLK_CLOCK_CR );
362+ reg = readl_relaxed (periph -> reg );
368363 val = reg | (1u << periph -> shift );
369- writel_relaxed (val , base_addr + REG_SUBBLK_CLOCK_CR );
364+ writel_relaxed (val , periph -> reg );
370365
371366 spin_unlock_irqrestore (& mpfs_clk_lock , flags );
372367
@@ -377,15 +372,14 @@ static void mpfs_periph_clk_disable(struct clk_hw *hw)
377372{
378373 struct mpfs_periph_hw_clock * periph_hw = to_mpfs_periph_clk (hw );
379374 struct mpfs_periph_clock * periph = & periph_hw -> periph ;
380- void __iomem * base_addr = periph_hw -> sys_base ;
381375 u32 reg , val ;
382376 unsigned long flags ;
383377
384378 spin_lock_irqsave (& mpfs_clk_lock , flags );
385379
386- reg = readl_relaxed (base_addr + REG_SUBBLK_CLOCK_CR );
380+ reg = readl_relaxed (periph -> reg );
387381 val = reg & ~(1u << periph -> shift );
388- writel_relaxed (val , base_addr + REG_SUBBLK_CLOCK_CR );
382+ writel_relaxed (val , periph -> reg );
389383
390384 spin_unlock_irqrestore (& mpfs_clk_lock , flags );
391385}
@@ -394,10 +388,9 @@ static int mpfs_periph_clk_is_enabled(struct clk_hw *hw)
394388{
395389 struct mpfs_periph_hw_clock * periph_hw = to_mpfs_periph_clk (hw );
396390 struct mpfs_periph_clock * periph = & periph_hw -> periph ;
397- void __iomem * base_addr = periph_hw -> sys_base ;
398391 u32 reg ;
399392
400- reg = readl_relaxed (base_addr + REG_SUBBLK_CLOCK_CR );
393+ reg = readl_relaxed (periph -> reg );
401394 if (reg & (1u << periph -> shift ))
402395 return 1 ;
403396
@@ -466,24 +459,23 @@ static struct mpfs_periph_hw_clock mpfs_periph_clks[] = {
466459};
467460
468461static int mpfs_clk_register_periph (struct device * dev , struct mpfs_periph_hw_clock * periph_hw ,
469- void __iomem * sys_base )
462+ void __iomem * base )
470463{
471- periph_hw -> sys_base = sys_base ;
464+ periph_hw -> periph . reg = base + REG_SUBBLK_CLOCK_CR ;
472465
473466 return devm_clk_hw_register (dev , & periph_hw -> hw );
474467}
475468
476469static int mpfs_clk_register_periphs (struct device * dev , struct mpfs_periph_hw_clock * periph_hws ,
477470 int num_clks , struct mpfs_clock_data * data )
478471{
479- void __iomem * sys_base = data -> base ;
480472 unsigned int i , id ;
481473 int ret ;
482474
483475 for (i = 0 ; i < num_clks ; i ++ ) {
484476 struct mpfs_periph_hw_clock * periph_hw = & periph_hws [i ];
485477
486- ret = mpfs_clk_register_periph (dev , periph_hw , sys_base );
478+ ret = mpfs_clk_register_periph (dev , periph_hw , data -> base );
487479 if (ret )
488480 return dev_err_probe (dev , ret , "failed to register clock id: %d\n" ,
489481 periph_hw -> id );
0 commit comments