aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc2/debugfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/dwc2/debugfs.c')
-rw-r--r--drivers/usb/dwc2/debugfs.c182
1 files changed, 169 insertions, 13 deletions
diff --git a/drivers/usb/dwc2/debugfs.c b/drivers/usb/dwc2/debugfs.c
index 0a130916a91c..794b959a7c8c 100644
--- a/drivers/usb/dwc2/debugfs.c
+++ b/drivers/usb/dwc2/debugfs.c
@@ -137,7 +137,7 @@ static int state_show(struct seq_file *seq, void *v)
137 int idx; 137 int idx;
138 138
139 seq_printf(seq, "DCFG=0x%08x, DCTL=0x%08x, DSTS=0x%08x\n", 139 seq_printf(seq, "DCFG=0x%08x, DCTL=0x%08x, DSTS=0x%08x\n",
140 dwc2_readl(regs + DCFG), 140 dwc2_readl(regs + DCFG),
141 dwc2_readl(regs + DCTL), 141 dwc2_readl(regs + DCTL),
142 dwc2_readl(regs + DSTS)); 142 dwc2_readl(regs + DSTS));
143 143
@@ -338,23 +338,23 @@ static void dwc2_hsotg_create_debug(struct dwc2_hsotg *hsotg)
338{ 338{
339 struct dentry *root; 339 struct dentry *root;
340 struct dentry *file; 340 struct dentry *file;
341 unsigned epidx; 341 unsigned int epidx;
342 342
343 root = hsotg->debug_root; 343 root = hsotg->debug_root;
344 344
345 /* create general state file */ 345 /* create general state file */
346 346
347 file = debugfs_create_file("state", S_IRUGO, root, hsotg, &state_fops); 347 file = debugfs_create_file("state", 0444, root, hsotg, &state_fops);
348 if (IS_ERR(file)) 348 if (IS_ERR(file))
349 dev_err(hsotg->dev, "%s: failed to create state\n", __func__); 349 dev_err(hsotg->dev, "%s: failed to create state\n", __func__);
350 350
351 file = debugfs_create_file("testmode", S_IRUGO | S_IWUSR, root, hsotg, 351 file = debugfs_create_file("testmode", 0644, root, hsotg,
352 &testmode_fops); 352 &testmode_fops);
353 if (IS_ERR(file)) 353 if (IS_ERR(file))
354 dev_err(hsotg->dev, "%s: failed to create testmode\n", 354 dev_err(hsotg->dev, "%s: failed to create testmode\n",
355 __func__); 355 __func__);
356 356
357 file = debugfs_create_file("fifo", S_IRUGO, root, hsotg, &fifo_fops); 357 file = debugfs_create_file("fifo", 0444, root, hsotg, &fifo_fops);
358 if (IS_ERR(file)) 358 if (IS_ERR(file))
359 dev_err(hsotg->dev, "%s: failed to create fifo\n", __func__); 359 dev_err(hsotg->dev, "%s: failed to create fifo\n", __func__);
360 360
@@ -364,8 +364,8 @@ static void dwc2_hsotg_create_debug(struct dwc2_hsotg *hsotg)
364 364
365 ep = hsotg->eps_out[epidx]; 365 ep = hsotg->eps_out[epidx];
366 if (ep) { 366 if (ep) {
367 file = debugfs_create_file(ep->name, S_IRUGO, 367 file = debugfs_create_file(ep->name, 0444,
368 root, ep, &ep_fops); 368 root, ep, &ep_fops);
369 if (IS_ERR(file)) 369 if (IS_ERR(file))
370 dev_err(hsotg->dev, "failed to create %s debug file\n", 370 dev_err(hsotg->dev, "failed to create %s debug file\n",
371 ep->name); 371 ep->name);
@@ -377,8 +377,8 @@ static void dwc2_hsotg_create_debug(struct dwc2_hsotg *hsotg)
377 377
378 ep = hsotg->eps_in[epidx]; 378 ep = hsotg->eps_in[epidx];
379 if (ep) { 379 if (ep) {
380 file = debugfs_create_file(ep->name, S_IRUGO, 380 file = debugfs_create_file(ep->name, 0444,
381 root, ep, &ep_fops); 381 root, ep, &ep_fops);
382 if (IS_ERR(file)) 382 if (IS_ERR(file))
383 dev_err(hsotg->dev, "failed to create %s debug file\n", 383 dev_err(hsotg->dev, "failed to create %s debug file\n",
384 ep->name); 384 ep->name);
@@ -725,6 +725,143 @@ 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
842static int dr_mode_show(struct seq_file *seq, void *v)
843{
844 struct dwc2_hsotg *hsotg = seq->private;
845 const char *dr_mode = "";
846
847 device_property_read_string(hsotg->dev, "dr_mode", &dr_mode);
848 seq_printf(seq, "%s\n", dr_mode);
849 return 0;
850}
851
852static int dr_mode_open(struct inode *inode, struct file *file)
853{
854 return single_open(file, dr_mode_show, inode->i_private);
855}
856
857static const struct file_operations dr_mode_fops = {
858 .owner = THIS_MODULE,
859 .open = dr_mode_open,
860 .read = seq_read,
861 .llseek = seq_lseek,
862 .release = single_release,
863};
864
728int dwc2_debugfs_init(struct dwc2_hsotg *hsotg) 865int dwc2_debugfs_init(struct dwc2_hsotg *hsotg)
729{ 866{
730 int ret; 867 int ret;
@@ -736,6 +873,25 @@ int dwc2_debugfs_init(struct dwc2_hsotg *hsotg)
736 goto err0; 873 goto err0;
737 } 874 }
738 875
876 file = debugfs_create_file("params", 0444,
877 hsotg->debug_root,
878 hsotg, &params_fops);
879 if (IS_ERR(file))
880 dev_err(hsotg->dev, "%s: failed to create params\n", __func__);
881
882 file = debugfs_create_file("hw_params", 0444,
883 hsotg->debug_root,
884 hsotg, &hw_params_fops);
885 if (IS_ERR(file))
886 dev_err(hsotg->dev, "%s: failed to create hw_params\n",
887 __func__);
888
889 file = debugfs_create_file("dr_mode", 0444,
890 hsotg->debug_root,
891 hsotg, &dr_mode_fops);
892 if (IS_ERR(file))
893 dev_err(hsotg->dev, "%s: failed to create dr_mode\n", __func__);
894
739 /* Add gadget debugfs nodes */ 895 /* Add gadget debugfs nodes */
740 dwc2_hsotg_create_debug(hsotg); 896 dwc2_hsotg_create_debug(hsotg);
741 897
@@ -750,8 +906,8 @@ int dwc2_debugfs_init(struct dwc2_hsotg *hsotg)
750 hsotg->regset->nregs = ARRAY_SIZE(dwc2_regs); 906 hsotg->regset->nregs = ARRAY_SIZE(dwc2_regs);
751 hsotg->regset->base = hsotg->regs; 907 hsotg->regset->base = hsotg->regs;
752 908
753 file = debugfs_create_regset32("regdump", S_IRUGO, hsotg->debug_root, 909 file = debugfs_create_regset32("regdump", 0444, hsotg->debug_root,
754 hsotg->regset); 910 hsotg->regset);
755 if (!file) { 911 if (!file) {
756 ret = -ENOMEM; 912 ret = -ENOMEM;
757 goto err1; 913 goto err1;