aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc2/debugfs.c
diff options
context:
space:
mode:
authorJohn Youn <John.Youn@synopsys.com>2017-01-23 17:58:09 -0500
committerFelipe Balbi <felipe.balbi@linux.intel.com>2017-01-24 09:19:07 -0500
commit4bd1ac641c7c76ab7f74810c28c74d2b993248bc (patch)
treec3e4cbc6a1f0c7b81b4fce259634405b4f03e89e /drivers/usb/dwc2/debugfs.c
parent06e75df1b98eda998ec693e7eaa79f61cdf2d4b3 (diff)
usb: dwc2: Add debugfs file to show params
Show the core params and hardware params. Signed-off-by: John Youn <johnyoun@synopsys.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Diffstat (limited to 'drivers/usb/dwc2/debugfs.c')
-rw-r--r--drivers/usb/dwc2/debugfs.c127
1 files changed, 127 insertions, 0 deletions
diff --git a/drivers/usb/dwc2/debugfs.c b/drivers/usb/dwc2/debugfs.c
index cad621f02972..57747b0df595 100644
--- a/drivers/usb/dwc2/debugfs.c
+++ b/drivers/usb/dwc2/debugfs.c
@@ -725,6 +725,120 @@ static const struct debugfs_reg32 dwc2_regs[] = {
725 dump_register(HCDMAB(15)), 725 dump_register(HCDMAB(15)),
726}; 726};
727 727
728#define print_param(_seq, _ptr, _param) \
729seq_printf((_seq), "%-30s: %d\n", #_param, (_ptr)->_param)
730
731#define print_param_hex(_seq, _ptr, _param) \
732seq_printf((_seq), "%-30s: 0x%x\n", #_param, (_ptr)->_param)
733
734static int params_show(struct seq_file *seq, void *v)
735{
736 struct dwc2_hsotg *hsotg = seq->private;
737 struct dwc2_core_params *p = &hsotg->params;
738 int i;
739
740 print_param(seq, p, otg_cap);
741 print_param(seq, p, dma_desc_enable);
742 print_param(seq, p, dma_desc_fs_enable);
743 print_param(seq, p, speed);
744 print_param(seq, p, enable_dynamic_fifo);
745 print_param(seq, p, en_multiple_tx_fifo);
746 print_param(seq, p, host_rx_fifo_size);
747 print_param(seq, p, host_nperio_tx_fifo_size);
748 print_param(seq, p, host_perio_tx_fifo_size);
749 print_param(seq, p, max_transfer_size);
750 print_param(seq, p, max_packet_count);
751 print_param(seq, p, host_channels);
752 print_param(seq, p, phy_type);
753 print_param(seq, p, phy_utmi_width);
754 print_param(seq, p, phy_ulpi_ddr);
755 print_param(seq, p, phy_ulpi_ext_vbus);
756 print_param(seq, p, i2c_enable);
757 print_param(seq, p, ulpi_fs_ls);
758 print_param(seq, p, host_support_fs_ls_low_power);
759 print_param(seq, p, host_ls_low_power_phy_clk);
760 print_param(seq, p, ts_dline);
761 print_param(seq, p, reload_ctl);
762 print_param_hex(seq, p, ahbcfg);
763 print_param(seq, p, uframe_sched);
764 print_param(seq, p, external_id_pin_ctl);
765 print_param(seq, p, hibernation);
766 print_param(seq, p, host_dma);
767 print_param(seq, p, g_dma);
768 print_param(seq, p, g_dma_desc);
769 print_param(seq, p, g_rx_fifo_size);
770 print_param(seq, p, g_np_tx_fifo_size);
771
772 for (i = 0; i < MAX_EPS_CHANNELS; i++) {
773 char str[32];
774
775 snprintf(str, 32, "g_tx_fifo_size[%d]", i);
776 seq_printf(seq, "%-30s: %d\n", str, p->g_tx_fifo_size[i]);
777 }
778
779 return 0;
780}
781
782static int params_open(struct inode *inode, struct file *file)
783{
784 return single_open(file, params_show, inode->i_private);
785}
786
787static const struct file_operations params_fops = {
788 .owner = THIS_MODULE,
789 .open = params_open,
790 .read = seq_read,
791 .llseek = seq_lseek,
792 .release = single_release,
793};
794
795static int hw_params_show(struct seq_file *seq, void *v)
796{
797 struct dwc2_hsotg *hsotg = seq->private;
798 struct dwc2_hw_params *hw = &hsotg->hw_params;
799
800 print_param(seq, hw, op_mode);
801 print_param(seq, hw, arch);
802 print_param(seq, hw, dma_desc_enable);
803 print_param(seq, hw, enable_dynamic_fifo);
804 print_param(seq, hw, en_multiple_tx_fifo);
805 print_param(seq, hw, rx_fifo_size);
806 print_param(seq, hw, host_nperio_tx_fifo_size);
807 print_param(seq, hw, dev_nperio_tx_fifo_size);
808 print_param(seq, hw, host_perio_tx_fifo_size);
809 print_param(seq, hw, nperio_tx_q_depth);
810 print_param(seq, hw, host_perio_tx_q_depth);
811 print_param(seq, hw, dev_token_q_depth);
812 print_param(seq, hw, max_transfer_size);
813 print_param(seq, hw, max_packet_count);
814 print_param(seq, hw, host_channels);
815 print_param(seq, hw, hs_phy_type);
816 print_param(seq, hw, fs_phy_type);
817 print_param(seq, hw, i2c_enable);
818 print_param(seq, hw, num_dev_ep);
819 print_param(seq, hw, num_dev_perio_in_ep);
820 print_param(seq, hw, total_fifo_size);
821 print_param(seq, hw, power_optimized);
822 print_param(seq, hw, utmi_phy_data_width);
823 print_param_hex(seq, hw, snpsid);
824 print_param_hex(seq, hw, dev_ep_dirs);
825
826 return 0;
827}
828
829static int hw_params_open(struct inode *inode, struct file *file)
830{
831 return single_open(file, hw_params_show, inode->i_private);
832}
833
834static const struct file_operations hw_params_fops = {
835 .owner = THIS_MODULE,
836 .open = hw_params_open,
837 .read = seq_read,
838 .llseek = seq_lseek,
839 .release = single_release,
840};
841
728int dwc2_debugfs_init(struct dwc2_hsotg *hsotg) 842int dwc2_debugfs_init(struct dwc2_hsotg *hsotg)
729{ 843{
730 int ret; 844 int ret;
@@ -736,6 +850,19 @@ int dwc2_debugfs_init(struct dwc2_hsotg *hsotg)
736 goto err0; 850 goto err0;
737 } 851 }
738 852
853 file = debugfs_create_file("params", 0444,
854 hsotg->debug_root,
855 hsotg, &params_fops);
856 if (IS_ERR(file))
857 dev_err(hsotg->dev, "%s: failed to create params\n", __func__);
858
859 file = debugfs_create_file("hw_params", 0444,
860 hsotg->debug_root,
861 hsotg, &hw_params_fops);
862 if (IS_ERR(file))
863 dev_err(hsotg->dev, "%s: failed to create hw_params\n",
864 __func__);
865
739 /* Add gadget debugfs nodes */ 866 /* Add gadget debugfs nodes */
740 dwc2_hsotg_create_debug(hsotg); 867 dwc2_hsotg_create_debug(hsotg);
741 868