diff options
Diffstat (limited to 'drivers/usb/dwc3/debugfs.c')
| -rw-r--r-- | drivers/usb/dwc3/debugfs.c | 114 | 
1 files changed, 114 insertions, 0 deletions
diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c index 850df0e6bcab..ebf03468fac4 100644 --- a/drivers/usb/dwc3/debugfs.c +++ b/drivers/usb/dwc3/debugfs.c @@ -88,6 +88,9 @@ static const struct debugfs_reg32 dwc3_regs[] = {  	dump_register(GPRTBIMAP_HS1),  	dump_register(GPRTBIMAP_FS0),  	dump_register(GPRTBIMAP_FS1), +	dump_register(GUCTL2), +	dump_register(VER_NUMBER), +	dump_register(VER_TYPE),  	dump_register(GUSB2PHYCFG(0)),  	dump_register(GUSB2PHYCFG(1)), @@ -229,6 +232,8 @@ static const struct debugfs_reg32 dwc3_regs[] = {  	dump_register(GEVNTCOUNT(0)),  	dump_register(GHWPARAMS8), +	dump_register(GUCTL3), +	dump_register(GFLADJ),  	dump_register(DCFG),  	dump_register(DCTL),  	dump_register(DEVTEN), @@ -327,6 +332,11 @@ static int dwc3_lsp_show(struct seq_file *s, void *unused)  	unsigned int		current_mode;  	unsigned long		flags;  	u32			reg; +	int			ret; + +	ret = pm_runtime_resume_and_get(dwc->dev); +	if (ret < 0) +		return ret;  	spin_lock_irqsave(&dwc->lock, flags);  	reg = dwc3_readl(dwc->regs, DWC3_GSTS); @@ -345,6 +355,8 @@ static int dwc3_lsp_show(struct seq_file *s, void *unused)  	}  	spin_unlock_irqrestore(&dwc->lock, flags); +	pm_runtime_put_sync(dwc->dev); +  	return 0;  } @@ -390,6 +402,11 @@ static int dwc3_mode_show(struct seq_file *s, void *unused)  	struct dwc3		*dwc = s->private;  	unsigned long		flags;  	u32			reg; +	int			ret; + +	ret = pm_runtime_resume_and_get(dwc->dev); +	if (ret < 0) +		return ret;  	spin_lock_irqsave(&dwc->lock, flags);  	reg = dwc3_readl(dwc->regs, DWC3_GCTL); @@ -409,6 +426,8 @@ static int dwc3_mode_show(struct seq_file *s, void *unused)  		seq_printf(s, "UNKNOWN %08x\n", DWC3_GCTL_PRTCAP(reg));  	} +	pm_runtime_put_sync(dwc->dev); +  	return 0;  } @@ -458,6 +477,11 @@ static int dwc3_testmode_show(struct seq_file *s, void *unused)  	struct dwc3		*dwc = s->private;  	unsigned long		flags;  	u32			reg; +	int			ret; + +	ret = pm_runtime_resume_and_get(dwc->dev); +	if (ret < 0) +		return ret;  	spin_lock_irqsave(&dwc->lock, flags);  	reg = dwc3_readl(dwc->regs, DWC3_DCTL); @@ -488,6 +512,8 @@ static int dwc3_testmode_show(struct seq_file *s, void *unused)  		seq_printf(s, "UNKNOWN %d\n", reg);  	} +	pm_runtime_put_sync(dwc->dev); +  	return 0;  } @@ -504,6 +530,7 @@ static ssize_t dwc3_testmode_write(struct file *file,  	unsigned long		flags;  	u32			testmode = 0;  	char			buf[32]; +	int			ret;  	if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))  		return -EFAULT; @@ -521,10 +548,16 @@ static ssize_t dwc3_testmode_write(struct file *file,  	else  		testmode = 0; +	ret = pm_runtime_resume_and_get(dwc->dev); +	if (ret < 0) +		return ret; +  	spin_lock_irqsave(&dwc->lock, flags);  	dwc3_gadget_set_test_mode(dwc, testmode);  	spin_unlock_irqrestore(&dwc->lock, flags); +	pm_runtime_put_sync(dwc->dev); +  	return count;  } @@ -543,12 +576,18 @@ static int dwc3_link_state_show(struct seq_file *s, void *unused)  	enum dwc3_link_state	state;  	u32			reg;  	u8			speed; +	int			ret; + +	ret = pm_runtime_resume_and_get(dwc->dev); +	if (ret < 0) +		return ret;  	spin_lock_irqsave(&dwc->lock, flags);  	reg = dwc3_readl(dwc->regs, DWC3_GSTS);  	if (DWC3_GSTS_CURMOD(reg) != DWC3_GSTS_CURMOD_DEVICE) {  		seq_puts(s, "Not available\n");  		spin_unlock_irqrestore(&dwc->lock, flags); +		pm_runtime_put_sync(dwc->dev);  		return 0;  	} @@ -561,6 +600,8 @@ static int dwc3_link_state_show(struct seq_file *s, void *unused)  		   dwc3_gadget_hs_link_string(state));  	spin_unlock_irqrestore(&dwc->lock, flags); +	pm_runtime_put_sync(dwc->dev); +  	return 0;  } @@ -579,6 +620,7 @@ static ssize_t dwc3_link_state_write(struct file *file,  	char			buf[32];  	u32			reg;  	u8			speed; +	int			ret;  	if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))  		return -EFAULT; @@ -598,10 +640,15 @@ static ssize_t dwc3_link_state_write(struct file *file,  	else  		return -EINVAL; +	ret = pm_runtime_resume_and_get(dwc->dev); +	if (ret < 0) +		return ret; +  	spin_lock_irqsave(&dwc->lock, flags);  	reg = dwc3_readl(dwc->regs, DWC3_GSTS);  	if (DWC3_GSTS_CURMOD(reg) != DWC3_GSTS_CURMOD_DEVICE) {  		spin_unlock_irqrestore(&dwc->lock, flags); +		pm_runtime_put_sync(dwc->dev);  		return -EINVAL;  	} @@ -611,12 +658,15 @@ static ssize_t dwc3_link_state_write(struct file *file,  	if (speed < DWC3_DSTS_SUPERSPEED &&  	    state != DWC3_LINK_STATE_RECOV) {  		spin_unlock_irqrestore(&dwc->lock, flags); +		pm_runtime_put_sync(dwc->dev);  		return -EINVAL;  	}  	dwc3_gadget_set_link_state(dwc, state);  	spin_unlock_irqrestore(&dwc->lock, flags); +	pm_runtime_put_sync(dwc->dev); +  	return count;  } @@ -640,6 +690,11 @@ static int dwc3_tx_fifo_size_show(struct seq_file *s, void *unused)  	unsigned long		flags;  	u32			mdwidth;  	u32			val; +	int			ret; + +	ret = pm_runtime_resume_and_get(dwc->dev); +	if (ret < 0) +		return ret;  	spin_lock_irqsave(&dwc->lock, flags);  	val = dwc3_core_fifo_space(dep, DWC3_TXFIFO); @@ -652,6 +707,8 @@ static int dwc3_tx_fifo_size_show(struct seq_file *s, void *unused)  	seq_printf(s, "%u\n", val);  	spin_unlock_irqrestore(&dwc->lock, flags); +	pm_runtime_put_sync(dwc->dev); +  	return 0;  } @@ -662,6 +719,11 @@ static int dwc3_rx_fifo_size_show(struct seq_file *s, void *unused)  	unsigned long		flags;  	u32			mdwidth;  	u32			val; +	int			ret; + +	ret = pm_runtime_resume_and_get(dwc->dev); +	if (ret < 0) +		return ret;  	spin_lock_irqsave(&dwc->lock, flags);  	val = dwc3_core_fifo_space(dep, DWC3_RXFIFO); @@ -674,6 +736,8 @@ static int dwc3_rx_fifo_size_show(struct seq_file *s, void *unused)  	seq_printf(s, "%u\n", val);  	spin_unlock_irqrestore(&dwc->lock, flags); +	pm_runtime_put_sync(dwc->dev); +  	return 0;  } @@ -683,12 +747,19 @@ static int dwc3_tx_request_queue_show(struct seq_file *s, void *unused)  	struct dwc3		*dwc = dep->dwc;  	unsigned long		flags;  	u32			val; +	int			ret; + +	ret = pm_runtime_resume_and_get(dwc->dev); +	if (ret < 0) +		return ret;  	spin_lock_irqsave(&dwc->lock, flags);  	val = dwc3_core_fifo_space(dep, DWC3_TXREQQ);  	seq_printf(s, "%u\n", val);  	spin_unlock_irqrestore(&dwc->lock, flags); +	pm_runtime_put_sync(dwc->dev); +  	return 0;  } @@ -698,12 +769,19 @@ static int dwc3_rx_request_queue_show(struct seq_file *s, void *unused)  	struct dwc3		*dwc = dep->dwc;  	unsigned long		flags;  	u32			val; +	int			ret; + +	ret = pm_runtime_resume_and_get(dwc->dev); +	if (ret < 0) +		return ret;  	spin_lock_irqsave(&dwc->lock, flags);  	val = dwc3_core_fifo_space(dep, DWC3_RXREQQ);  	seq_printf(s, "%u\n", val);  	spin_unlock_irqrestore(&dwc->lock, flags); +	pm_runtime_put_sync(dwc->dev); +  	return 0;  } @@ -713,12 +791,19 @@ static int dwc3_rx_info_queue_show(struct seq_file *s, void *unused)  	struct dwc3		*dwc = dep->dwc;  	unsigned long		flags;  	u32			val; +	int			ret; + +	ret = pm_runtime_resume_and_get(dwc->dev); +	if (ret < 0) +		return ret;  	spin_lock_irqsave(&dwc->lock, flags);  	val = dwc3_core_fifo_space(dep, DWC3_RXINFOQ);  	seq_printf(s, "%u\n", val);  	spin_unlock_irqrestore(&dwc->lock, flags); +	pm_runtime_put_sync(dwc->dev); +  	return 0;  } @@ -728,12 +813,19 @@ static int dwc3_descriptor_fetch_queue_show(struct seq_file *s, void *unused)  	struct dwc3		*dwc = dep->dwc;  	unsigned long		flags;  	u32			val; +	int			ret; + +	ret = pm_runtime_resume_and_get(dwc->dev); +	if (ret < 0) +		return ret;  	spin_lock_irqsave(&dwc->lock, flags);  	val = dwc3_core_fifo_space(dep, DWC3_DESCFETCHQ);  	seq_printf(s, "%u\n", val);  	spin_unlock_irqrestore(&dwc->lock, flags); +	pm_runtime_put_sync(dwc->dev); +  	return 0;  } @@ -743,12 +835,19 @@ static int dwc3_event_queue_show(struct seq_file *s, void *unused)  	struct dwc3		*dwc = dep->dwc;  	unsigned long		flags;  	u32			val; +	int			ret; + +	ret = pm_runtime_resume_and_get(dwc->dev); +	if (ret < 0) +		return ret;  	spin_lock_irqsave(&dwc->lock, flags);  	val = dwc3_core_fifo_space(dep, DWC3_EVENTQ);  	seq_printf(s, "%u\n", val);  	spin_unlock_irqrestore(&dwc->lock, flags); +	pm_runtime_put_sync(dwc->dev); +  	return 0;  } @@ -793,6 +892,11 @@ static int dwc3_trb_ring_show(struct seq_file *s, void *unused)  	struct dwc3		*dwc = dep->dwc;  	unsigned long		flags;  	int			i; +	int			ret; + +	ret = pm_runtime_resume_and_get(dwc->dev); +	if (ret < 0) +		return ret;  	spin_lock_irqsave(&dwc->lock, flags);  	if (dep->number <= 1) { @@ -822,6 +926,8 @@ static int dwc3_trb_ring_show(struct seq_file *s, void *unused)  out:  	spin_unlock_irqrestore(&dwc->lock, flags); +	pm_runtime_put_sync(dwc->dev); +  	return 0;  } @@ -834,6 +940,11 @@ static int dwc3_ep_info_register_show(struct seq_file *s, void *unused)  	u32			lower_32_bits;  	u32			upper_32_bits;  	u32			reg; +	int			ret; + +	ret = pm_runtime_resume_and_get(dwc->dev); +	if (ret < 0) +		return ret;  	spin_lock_irqsave(&dwc->lock, flags);  	reg = DWC3_GDBGLSPMUX_EPSELECT(dep->number); @@ -846,6 +957,8 @@ static int dwc3_ep_info_register_show(struct seq_file *s, void *unused)  	seq_printf(s, "0x%016llx\n", ep_info);  	spin_unlock_irqrestore(&dwc->lock, flags); +	pm_runtime_put_sync(dwc->dev); +  	return 0;  } @@ -905,6 +1018,7 @@ void dwc3_debugfs_init(struct dwc3 *dwc)  	dwc->regset->regs = dwc3_regs;  	dwc->regset->nregs = ARRAY_SIZE(dwc3_regs);  	dwc->regset->base = dwc->regs - DWC3_GLOBALS_REGS_START; +	dwc->regset->dev = dwc->dev;  	root = debugfs_create_dir(dev_name(dwc->dev), usb_debug_root);  	dwc->debug_root = root;  |