forked from mirrors/linux
		
	debugfs: regset32: Add Runtime PM support
Hardware registers of devices under control of power management cannot be accessed at all times. If such a device is suspended, register accesses may lead to undefined behavior, like reading bogus values, or causing exceptions or system lock-ups. Extend struct debugfs_regset32 with an optional field to let device drivers specify the device the registers in the set belong to. This allows debugfs_show_regset32() to make sure the device is resumed while its registers are being read. Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
		
							parent
							
								
									9e00df7156
								
							
						
					
					
						commit
						30332eeefe
					
				
					 2 changed files with 9 additions and 0 deletions
				
			
		|  | @ -18,6 +18,7 @@ | |||
| #include <linux/slab.h> | ||||
| #include <linux/atomic.h> | ||||
| #include <linux/device.h> | ||||
| #include <linux/pm_runtime.h> | ||||
| #include <linux/poll.h> | ||||
| #include <linux/security.h> | ||||
| 
 | ||||
|  | @ -1060,7 +1061,14 @@ static int debugfs_show_regset32(struct seq_file *s, void *data) | |||
| { | ||||
| 	struct debugfs_regset32 *regset = s->private; | ||||
| 
 | ||||
| 	if (regset->dev) | ||||
| 		pm_runtime_get_sync(regset->dev); | ||||
| 
 | ||||
| 	debugfs_print_regs32(s, regset->regs, regset->nregs, regset->base, ""); | ||||
| 
 | ||||
| 	if (regset->dev) | ||||
| 		pm_runtime_put(regset->dev); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -35,6 +35,7 @@ struct debugfs_regset32 { | |||
| 	const struct debugfs_reg32 *regs; | ||||
| 	int nregs; | ||||
| 	void __iomem *base; | ||||
| 	struct device *dev;	/* Optional device for Runtime PM */ | ||||
| }; | ||||
| 
 | ||||
| extern struct dentry *arch_debugfs_dir; | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Geert Uytterhoeven
						Geert Uytterhoeven