forked from mirrors/linux
		
	clk: Allow clocks to be marked as CRITICAL
Critical clocks are those which must not be gated, else undefined or catastrophic failure would occur. Here we have chosen to ensure the prepare/enable counts are correctly incremented, so as not to confuse users with enabled clocks with no visible users. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Michael Turquette <mturquette@baylibre.com> Link: lkml.kernel.org/r/1455225554-13267-2-git-send-email-mturquette@baylibre.com
This commit is contained in:
		
							parent
							
								
									c0553d04f8
								
							
						
					
					
						commit
						32b9b10961
					
				
					 2 changed files with 6 additions and 0 deletions
				
			
		| 
						 | 
					@ -2397,6 +2397,11 @@ static int __clk_core_init(struct clk_core *core)
 | 
				
			||||||
	if (core->ops->init)
 | 
						if (core->ops->init)
 | 
				
			||||||
		core->ops->init(core->hw);
 | 
							core->ops->init(core->hw);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (core->flags & CLK_IS_CRITICAL) {
 | 
				
			||||||
 | 
							clk_core_prepare(core);
 | 
				
			||||||
 | 
							clk_core_enable(core);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	kref_init(&core->ref);
 | 
						kref_init(&core->ref);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	clk_prepare_unlock();
 | 
						clk_prepare_unlock();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,6 +32,7 @@
 | 
				
			||||||
#define CLK_GET_ACCURACY_NOCACHE BIT(8) /* do not use the cached clk accuracy */
 | 
					#define CLK_GET_ACCURACY_NOCACHE BIT(8) /* do not use the cached clk accuracy */
 | 
				
			||||||
#define CLK_RECALC_NEW_RATES	BIT(9) /* recalc rates after notifications */
 | 
					#define CLK_RECALC_NEW_RATES	BIT(9) /* recalc rates after notifications */
 | 
				
			||||||
#define CLK_SET_RATE_UNGATE	BIT(10) /* clock needs to run to set rate */
 | 
					#define CLK_SET_RATE_UNGATE	BIT(10) /* clock needs to run to set rate */
 | 
				
			||||||
 | 
					#define CLK_IS_CRITICAL		BIT(11) /* do not gate, ever */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct clk;
 | 
					struct clk;
 | 
				
			||||||
struct clk_hw;
 | 
					struct clk_hw;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue