4747#define SDIV (val ) DIV_RSMASK(val, 0, 0x7)
4848
4949#define CLK_ON_R (reg ) (reg)
50- #define CLK_MON_R (reg ) (0x680 - 0x500 + (reg))
51- #define CLK_RST_R (reg ) (0x800 - 0x500 + ( reg) )
52- #define CLK_MRST_R (reg ) (0x980 - 0x500 + (reg))
50+ #define CLK_MON_R (reg ) (0x180 + (reg))
51+ #define CLK_RST_R (reg ) (reg)
52+ #define CLK_MRST_R (reg ) (0x180 + (reg))
5353
5454#define GET_REG_OFFSET (val ) ((val >> 20) & 0xfff)
5555#define GET_REG_SAMPLL_CLK1 (val ) ((val >> 22) & 0xfff)
@@ -78,6 +78,7 @@ struct rzg2l_cpg_priv {
7878 struct clk * * clks ;
7979 unsigned int num_core_clks ;
8080 unsigned int num_mod_clks ;
81+ unsigned int num_resets ;
8182 unsigned int last_dt_core_clk ;
8283
8384 struct raw_notifier_head notifiers ;
@@ -315,15 +316,13 @@ rzg2l_cpg_register_core_clk(const struct cpg_core_clk *core,
315316 *
316317 * @hw: handle between common and hardware-specific interfaces
317318 * @off: register offset
318- * @onoff: ON/MON bits
319- * @reset: reset bits
319+ * @bit: ON/MON bit
320320 * @priv: CPG/MSTP private data
321321 */
322322struct mstp_clock {
323323 struct clk_hw hw ;
324324 u16 off ;
325- u8 onoff ;
326- u8 reset ;
325+ u8 bit ;
327326 struct rzg2l_cpg_priv * priv ;
328327};
329328
@@ -337,6 +336,7 @@ static int rzg2l_mod_clock_endisable(struct clk_hw *hw, bool enable)
337336 struct device * dev = priv -> dev ;
338337 unsigned long flags ;
339338 unsigned int i ;
339+ u32 bitmask = BIT (clock -> bit );
340340 u32 value ;
341341
342342 if (!clock -> off ) {
@@ -349,9 +349,9 @@ static int rzg2l_mod_clock_endisable(struct clk_hw *hw, bool enable)
349349 spin_lock_irqsave (& priv -> rmw_lock , flags );
350350
351351 if (enable )
352- value = (clock -> onoff << 16 ) | clock -> onoff ;
352+ value = (bitmask << 16 ) | bitmask ;
353353 else
354- value = clock -> onoff << 16 ;
354+ value = bitmask << 16 ;
355355 writel (value , priv -> base + CLK_ON_R (reg ));
356356
357357 spin_unlock_irqrestore (& priv -> rmw_lock , flags );
@@ -360,7 +360,7 @@ static int rzg2l_mod_clock_endisable(struct clk_hw *hw, bool enable)
360360 return 0 ;
361361
362362 for (i = 1000 ; i > 0 ; -- i ) {
363- if (((readl (priv -> base + CLK_MON_R (reg ))) & clock -> onoff ))
363+ if (((readl (priv -> base + CLK_MON_R (reg ))) & bitmask ))
364364 break ;
365365 cpu_relax ();
366366 }
@@ -388,6 +388,7 @@ static int rzg2l_mod_clock_is_enabled(struct clk_hw *hw)
388388{
389389 struct mstp_clock * clock = to_mod_clock (hw );
390390 struct rzg2l_cpg_priv * priv = clock -> priv ;
391+ u32 bitmask = BIT (clock -> bit );
391392 u32 value ;
392393
393394 if (!clock -> off ) {
@@ -397,7 +398,7 @@ static int rzg2l_mod_clock_is_enabled(struct clk_hw *hw)
397398
398399 value = readl (priv -> base + CLK_MON_R (clock -> off ));
399400
400- return !(value & clock -> onoff );
401+ return !(value & bitmask );
401402}
402403
403404static const struct clk_ops rzg2l_mod_clock_ops = {
@@ -457,8 +458,7 @@ rzg2l_cpg_register_mod_clk(const struct rzg2l_mod_clk *mod,
457458 init .num_parents = 1 ;
458459
459460 clock -> off = mod -> off ;
460- clock -> onoff = mod -> onoff ;
461- clock -> reset = mod -> reset ;
461+ clock -> bit = mod -> bit ;
462462 clock -> priv = priv ;
463463 clock -> hw .init = & init ;
464464
@@ -483,12 +483,11 @@ static int rzg2l_cpg_reset(struct reset_controller_dev *rcdev,
483483{
484484 struct rzg2l_cpg_priv * priv = rcdev_to_priv (rcdev );
485485 const struct rzg2l_cpg_info * info = priv -> info ;
486- unsigned int reg = info -> mod_clks [id ].off ;
487- u32 dis = info -> mod_clks [id ].reset ;
486+ unsigned int reg = info -> resets [id ].off ;
487+ u32 dis = BIT ( info -> resets [id ].bit ) ;
488488 u32 we = dis << 16 ;
489489
490- dev_dbg (rcdev -> dev , "reset name:%s id:%ld offset:0x%x\n" ,
491- info -> mod_clks [id ].name , id , CLK_RST_R (reg ));
490+ dev_dbg (rcdev -> dev , "reset id:%ld offset:0x%x\n" , id , CLK_RST_R (reg ));
492491
493492 /* Reset module */
494493 writel (we , priv -> base + CLK_RST_R (reg ));
@@ -507,11 +506,10 @@ static int rzg2l_cpg_assert(struct reset_controller_dev *rcdev,
507506{
508507 struct rzg2l_cpg_priv * priv = rcdev_to_priv (rcdev );
509508 const struct rzg2l_cpg_info * info = priv -> info ;
510- unsigned int reg = info -> mod_clks [id ].off ;
511- u32 value = info -> mod_clks [id ].reset << 16 ;
509+ unsigned int reg = info -> resets [id ].off ;
510+ u32 value = BIT ( info -> resets [id ].bit ) << 16 ;
512511
513- dev_dbg (rcdev -> dev , "assert name:%s id:%ld offset:0x%x\n" ,
514- info -> mod_clks [id ].name , id , CLK_RST_R (reg ));
512+ dev_dbg (rcdev -> dev , "assert id:%ld offset:0x%x\n" , id , CLK_RST_R (reg ));
515513
516514 writel (value , priv -> base + CLK_RST_R (reg ));
517515 return 0 ;
@@ -522,12 +520,12 @@ static int rzg2l_cpg_deassert(struct reset_controller_dev *rcdev,
522520{
523521 struct rzg2l_cpg_priv * priv = rcdev_to_priv (rcdev );
524522 const struct rzg2l_cpg_info * info = priv -> info ;
525- unsigned int reg = info -> mod_clks [id ].off ;
526- u32 dis = info -> mod_clks [id ].reset ;
523+ unsigned int reg = info -> resets [id ].off ;
524+ u32 dis = BIT ( info -> resets [id ].bit ) ;
527525 u32 value = (dis << 16 ) | dis ;
528526
529- dev_dbg (rcdev -> dev , "deassert name:%s id:%ld offset:0x%x\n" ,
530- info -> mod_clks [ id ]. name , id , CLK_RST_R (reg ));
527+ dev_dbg (rcdev -> dev , "deassert id:%ld offset:0x%x\n" , id ,
528+ CLK_RST_R (reg ));
531529
532530 writel (value , priv -> base + CLK_RST_R (reg ));
533531 return 0 ;
@@ -538,8 +536,8 @@ static int rzg2l_cpg_status(struct reset_controller_dev *rcdev,
538536{
539537 struct rzg2l_cpg_priv * priv = rcdev_to_priv (rcdev );
540538 const struct rzg2l_cpg_info * info = priv -> info ;
541- unsigned int reg = info -> mod_clks [id ].off ;
542- u32 bitmask = info -> mod_clks [id ].reset ;
539+ unsigned int reg = info -> resets [id ].off ;
540+ u32 bitmask = BIT ( info -> resets [id ].bit ) ;
543541
544542 return !(readl (priv -> base + CLK_MRST_R (reg )) & bitmask );
545543}
@@ -554,9 +552,11 @@ static const struct reset_control_ops rzg2l_cpg_reset_ops = {
554552static int rzg2l_cpg_reset_xlate (struct reset_controller_dev * rcdev ,
555553 const struct of_phandle_args * reset_spec )
556554{
555+ struct rzg2l_cpg_priv * priv = rcdev_to_priv (rcdev );
556+ const struct rzg2l_cpg_info * info = priv -> info ;
557557 unsigned int id = reset_spec -> args [0 ];
558558
559- if (id >= rcdev -> nr_resets ) {
559+ if (id >= rcdev -> nr_resets || ! info -> resets [ id ]. off ) {
560560 dev_err (rcdev -> dev , "Invalid reset index %u\n" , id );
561561 return - EINVAL ;
562562 }
@@ -571,7 +571,7 @@ static int rzg2l_cpg_reset_controller_register(struct rzg2l_cpg_priv *priv)
571571 priv -> rcdev .dev = priv -> dev ;
572572 priv -> rcdev .of_reset_n_cells = 1 ;
573573 priv -> rcdev .of_xlate = rzg2l_cpg_reset_xlate ;
574- priv -> rcdev .nr_resets = priv -> num_mod_clks ;
574+ priv -> rcdev .nr_resets = priv -> num_resets ;
575575
576576 return devm_reset_controller_register (priv -> dev , & priv -> rcdev );
577577}
@@ -699,6 +699,7 @@ static int __init rzg2l_cpg_probe(struct platform_device *pdev)
699699 priv -> clks = clks ;
700700 priv -> num_core_clks = info -> num_total_core_clks ;
701701 priv -> num_mod_clks = info -> num_hw_mod_clks ;
702+ priv -> num_resets = info -> num_resets ;
702703 priv -> last_dt_core_clk = info -> last_dt_core_clk ;
703704
704705 for (i = 0 ; i < nclks ; i ++ )
0 commit comments