hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/usb/dwc3/debugfs.c
....@@ -2,7 +2,7 @@
22 /**
33 * debugfs.c - DesignWare USB3 DRD Controller DebugFS file
44 *
5
- * Copyright (C) 2010-2011 Texas Instruments Incorporated - http://www.ti.com
5
+ * Copyright (C) 2010-2011 Texas Instruments Incorporated - https://www.ti.com
66 *
77 * Authors: Felipe Balbi <balbi@ti.com>,
88 * Sebastian Andrzej Siewior <bigeasy@linutronix.de>
....@@ -327,6 +327,11 @@
327327 unsigned int current_mode;
328328 unsigned long flags;
329329 u32 reg;
330
+ int ret;
331
+
332
+ ret = pm_runtime_resume_and_get(dwc->dev);
333
+ if (ret < 0)
334
+ return ret;
330335
331336 spin_lock_irqsave(&dwc->lock, flags);
332337 reg = dwc3_readl(dwc->regs, DWC3_GSTS);
....@@ -344,6 +349,8 @@
344349 break;
345350 }
346351 spin_unlock_irqrestore(&dwc->lock, flags);
352
+
353
+ pm_runtime_put_sync(dwc->dev);
347354
348355 return 0;
349356 }
....@@ -390,6 +397,11 @@
390397 struct dwc3 *dwc = s->private;
391398 unsigned long flags;
392399 u32 reg;
400
+ int ret;
401
+
402
+ ret = pm_runtime_resume_and_get(dwc->dev);
403
+ if (ret < 0)
404
+ return ret;
393405
394406 spin_lock_irqsave(&dwc->lock, flags);
395407 reg = dwc3_readl(dwc->regs, DWC3_GCTL);
....@@ -397,17 +409,19 @@
397409
398410 switch (DWC3_GCTL_PRTCAP(reg)) {
399411 case DWC3_GCTL_PRTCAP_HOST:
400
- seq_printf(s, "host\n");
412
+ seq_puts(s, "host\n");
401413 break;
402414 case DWC3_GCTL_PRTCAP_DEVICE:
403
- seq_printf(s, "device\n");
415
+ seq_puts(s, "device\n");
404416 break;
405417 case DWC3_GCTL_PRTCAP_OTG:
406
- seq_printf(s, "otg\n");
418
+ seq_puts(s, "otg\n");
407419 break;
408420 default:
409421 seq_printf(s, "UNKNOWN %08x\n", DWC3_GCTL_PRTCAP(reg));
410422 }
423
+
424
+ pm_runtime_put_sync(dwc->dev);
411425
412426 return 0;
413427 }
....@@ -428,6 +442,9 @@
428442 if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))
429443 return -EFAULT;
430444
445
+ if (dwc->dr_mode != USB_DR_MODE_OTG)
446
+ return count;
447
+
431448 if (!strncmp(buf, "host", 4))
432449 mode = DWC3_GCTL_PRTCAP_HOST;
433450
....@@ -436,6 +453,10 @@
436453
437454 if (!strncmp(buf, "otg", 3))
438455 mode = DWC3_GCTL_PRTCAP_OTG;
456
+
457
+#if defined(CONFIG_ARCH_ROCKCHIP) && defined(CONFIG_NO_GKI)
458
+ dwc->desired_role_sw_mode = mode;
459
+#endif
439460
440461 dwc3_set_mode(dwc, mode);
441462
....@@ -455,6 +476,11 @@
455476 struct dwc3 *dwc = s->private;
456477 unsigned long flags;
457478 u32 reg;
479
+ int ret;
480
+
481
+ ret = pm_runtime_resume_and_get(dwc->dev);
482
+ if (ret < 0)
483
+ return ret;
458484
459485 spin_lock_irqsave(&dwc->lock, flags);
460486 reg = dwc3_readl(dwc->regs, DWC3_DCTL);
....@@ -464,26 +490,28 @@
464490
465491 switch (reg) {
466492 case 0:
467
- seq_printf(s, "no test\n");
493
+ seq_puts(s, "no test\n");
468494 break;
469
- case TEST_J:
470
- seq_printf(s, "test_j\n");
495
+ case USB_TEST_J:
496
+ seq_puts(s, "test_j\n");
471497 break;
472
- case TEST_K:
473
- seq_printf(s, "test_k\n");
498
+ case USB_TEST_K:
499
+ seq_puts(s, "test_k\n");
474500 break;
475
- case TEST_SE0_NAK:
476
- seq_printf(s, "test_se0_nak\n");
501
+ case USB_TEST_SE0_NAK:
502
+ seq_puts(s, "test_se0_nak\n");
477503 break;
478
- case TEST_PACKET:
479
- seq_printf(s, "test_packet\n");
504
+ case USB_TEST_PACKET:
505
+ seq_puts(s, "test_packet\n");
480506 break;
481
- case TEST_FORCE_EN:
482
- seq_printf(s, "test_force_enable\n");
507
+ case USB_TEST_FORCE_ENABLE:
508
+ seq_puts(s, "test_force_enable\n");
483509 break;
484510 default:
485511 seq_printf(s, "UNKNOWN %d\n", reg);
486512 }
513
+
514
+ pm_runtime_put_sync(dwc->dev);
487515
488516 return 0;
489517 }
....@@ -501,26 +529,33 @@
501529 unsigned long flags;
502530 u32 testmode = 0;
503531 char buf[32];
532
+ int ret;
504533
505534 if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))
506535 return -EFAULT;
507536
508537 if (!strncmp(buf, "test_j", 6))
509
- testmode = TEST_J;
538
+ testmode = USB_TEST_J;
510539 else if (!strncmp(buf, "test_k", 6))
511
- testmode = TEST_K;
540
+ testmode = USB_TEST_K;
512541 else if (!strncmp(buf, "test_se0_nak", 12))
513
- testmode = TEST_SE0_NAK;
542
+ testmode = USB_TEST_SE0_NAK;
514543 else if (!strncmp(buf, "test_packet", 11))
515
- testmode = TEST_PACKET;
544
+ testmode = USB_TEST_PACKET;
516545 else if (!strncmp(buf, "test_force_enable", 17))
517
- testmode = TEST_FORCE_EN;
546
+ testmode = USB_TEST_FORCE_ENABLE;
518547 else
519548 testmode = 0;
549
+
550
+ ret = pm_runtime_resume_and_get(dwc->dev);
551
+ if (ret < 0)
552
+ return ret;
520553
521554 spin_lock_irqsave(&dwc->lock, flags);
522555 dwc3_gadget_set_test_mode(dwc, testmode);
523556 spin_unlock_irqrestore(&dwc->lock, flags);
557
+
558
+ pm_runtime_put_sync(dwc->dev);
524559
525560 return count;
526561 }
....@@ -540,12 +575,18 @@
540575 enum dwc3_link_state state;
541576 u32 reg;
542577 u8 speed;
578
+ int ret;
579
+
580
+ ret = pm_runtime_resume_and_get(dwc->dev);
581
+ if (ret < 0)
582
+ return ret;
543583
544584 spin_lock_irqsave(&dwc->lock, flags);
545585 reg = dwc3_readl(dwc->regs, DWC3_GSTS);
546586 if (DWC3_GSTS_CURMOD(reg) != DWC3_GSTS_CURMOD_DEVICE) {
547587 seq_puts(s, "Not available\n");
548588 spin_unlock_irqrestore(&dwc->lock, flags);
589
+ pm_runtime_put_sync(dwc->dev);
549590 return 0;
550591 }
551592
....@@ -557,6 +598,8 @@
557598 dwc3_gadget_link_string(state) :
558599 dwc3_gadget_hs_link_string(state));
559600 spin_unlock_irqrestore(&dwc->lock, flags);
601
+
602
+ pm_runtime_put_sync(dwc->dev);
560603
561604 return 0;
562605 }
....@@ -576,6 +619,7 @@
576619 char buf[32];
577620 u32 reg;
578621 u8 speed;
622
+ int ret;
579623
580624 if (copy_from_user(&buf, ubuf, min_t(size_t, sizeof(buf) - 1, count)))
581625 return -EFAULT;
....@@ -595,10 +639,15 @@
595639 else
596640 return -EINVAL;
597641
642
+ ret = pm_runtime_resume_and_get(dwc->dev);
643
+ if (ret < 0)
644
+ return ret;
645
+
598646 spin_lock_irqsave(&dwc->lock, flags);
599647 reg = dwc3_readl(dwc->regs, DWC3_GSTS);
600648 if (DWC3_GSTS_CURMOD(reg) != DWC3_GSTS_CURMOD_DEVICE) {
601649 spin_unlock_irqrestore(&dwc->lock, flags);
650
+ pm_runtime_put_sync(dwc->dev);
602651 return -EINVAL;
603652 }
604653
....@@ -608,11 +657,14 @@
608657 if (speed < DWC3_DSTS_SUPERSPEED &&
609658 state != DWC3_LINK_STATE_RECOV) {
610659 spin_unlock_irqrestore(&dwc->lock, flags);
660
+ pm_runtime_put_sync(dwc->dev);
611661 return -EINVAL;
612662 }
613663
614664 dwc3_gadget_set_link_state(dwc, state);
615665 spin_unlock_irqrestore(&dwc->lock, flags);
666
+
667
+ pm_runtime_put_sync(dwc->dev);
616668
617669 return count;
618670 }
....@@ -635,16 +687,26 @@
635687 struct dwc3_ep *dep = s->private;
636688 struct dwc3 *dwc = dep->dwc;
637689 unsigned long flags;
690
+ u32 mdwidth;
638691 u32 val;
692
+ int ret;
693
+
694
+ ret = pm_runtime_resume_and_get(dwc->dev);
695
+ if (ret < 0)
696
+ return ret;
639697
640698 spin_lock_irqsave(&dwc->lock, flags);
641699 val = dwc3_core_fifo_space(dep, DWC3_TXFIFO);
642700
643701 /* Convert to bytes */
644
- val *= DWC3_MDWIDTH(dwc->hwparams.hwparams0);
702
+ mdwidth = dwc3_mdwidth(dwc);
703
+
704
+ val *= mdwidth;
645705 val >>= 3;
646706 seq_printf(s, "%u\n", val);
647707 spin_unlock_irqrestore(&dwc->lock, flags);
708
+
709
+ pm_runtime_put_sync(dwc->dev);
648710
649711 return 0;
650712 }
....@@ -654,16 +716,26 @@
654716 struct dwc3_ep *dep = s->private;
655717 struct dwc3 *dwc = dep->dwc;
656718 unsigned long flags;
719
+ u32 mdwidth;
657720 u32 val;
721
+ int ret;
722
+
723
+ ret = pm_runtime_resume_and_get(dwc->dev);
724
+ if (ret < 0)
725
+ return ret;
658726
659727 spin_lock_irqsave(&dwc->lock, flags);
660728 val = dwc3_core_fifo_space(dep, DWC3_RXFIFO);
661729
662730 /* Convert to bytes */
663
- val *= DWC3_MDWIDTH(dwc->hwparams.hwparams0);
731
+ mdwidth = dwc3_mdwidth(dwc);
732
+
733
+ val *= mdwidth;
664734 val >>= 3;
665735 seq_printf(s, "%u\n", val);
666736 spin_unlock_irqrestore(&dwc->lock, flags);
737
+
738
+ pm_runtime_put_sync(dwc->dev);
667739
668740 return 0;
669741 }
....@@ -674,11 +746,18 @@
674746 struct dwc3 *dwc = dep->dwc;
675747 unsigned long flags;
676748 u32 val;
749
+ int ret;
750
+
751
+ ret = pm_runtime_resume_and_get(dwc->dev);
752
+ if (ret < 0)
753
+ return ret;
677754
678755 spin_lock_irqsave(&dwc->lock, flags);
679756 val = dwc3_core_fifo_space(dep, DWC3_TXREQQ);
680757 seq_printf(s, "%u\n", val);
681758 spin_unlock_irqrestore(&dwc->lock, flags);
759
+
760
+ pm_runtime_put_sync(dwc->dev);
682761
683762 return 0;
684763 }
....@@ -689,11 +768,18 @@
689768 struct dwc3 *dwc = dep->dwc;
690769 unsigned long flags;
691770 u32 val;
771
+ int ret;
772
+
773
+ ret = pm_runtime_resume_and_get(dwc->dev);
774
+ if (ret < 0)
775
+ return ret;
692776
693777 spin_lock_irqsave(&dwc->lock, flags);
694778 val = dwc3_core_fifo_space(dep, DWC3_RXREQQ);
695779 seq_printf(s, "%u\n", val);
696780 spin_unlock_irqrestore(&dwc->lock, flags);
781
+
782
+ pm_runtime_put_sync(dwc->dev);
697783
698784 return 0;
699785 }
....@@ -704,11 +790,18 @@
704790 struct dwc3 *dwc = dep->dwc;
705791 unsigned long flags;
706792 u32 val;
793
+ int ret;
794
+
795
+ ret = pm_runtime_resume_and_get(dwc->dev);
796
+ if (ret < 0)
797
+ return ret;
707798
708799 spin_lock_irqsave(&dwc->lock, flags);
709800 val = dwc3_core_fifo_space(dep, DWC3_RXINFOQ);
710801 seq_printf(s, "%u\n", val);
711802 spin_unlock_irqrestore(&dwc->lock, flags);
803
+
804
+ pm_runtime_put_sync(dwc->dev);
712805
713806 return 0;
714807 }
....@@ -719,11 +812,18 @@
719812 struct dwc3 *dwc = dep->dwc;
720813 unsigned long flags;
721814 u32 val;
815
+ int ret;
816
+
817
+ ret = pm_runtime_resume_and_get(dwc->dev);
818
+ if (ret < 0)
819
+ return ret;
722820
723821 spin_lock_irqsave(&dwc->lock, flags);
724822 val = dwc3_core_fifo_space(dep, DWC3_DESCFETCHQ);
725823 seq_printf(s, "%u\n", val);
726824 spin_unlock_irqrestore(&dwc->lock, flags);
825
+
826
+ pm_runtime_put_sync(dwc->dev);
727827
728828 return 0;
729829 }
....@@ -734,11 +834,18 @@
734834 struct dwc3 *dwc = dep->dwc;
735835 unsigned long flags;
736836 u32 val;
837
+ int ret;
838
+
839
+ ret = pm_runtime_resume_and_get(dwc->dev);
840
+ if (ret < 0)
841
+ return ret;
737842
738843 spin_lock_irqsave(&dwc->lock, flags);
739844 val = dwc3_core_fifo_space(dep, DWC3_EVENTQ);
740845 seq_printf(s, "%u\n", val);
741846 spin_unlock_irqrestore(&dwc->lock, flags);
847
+
848
+ pm_runtime_put_sync(dwc->dev);
742849
743850 return 0;
744851 }
....@@ -750,27 +857,26 @@
750857 unsigned long flags;
751858
752859 spin_lock_irqsave(&dwc->lock, flags);
753
- if (!(dep->flags & DWC3_EP_ENABLED) ||
754
- !dep->endpoint.desc) {
755
- seq_printf(s, "--\n");
860
+ if (!(dep->flags & DWC3_EP_ENABLED) || !dep->endpoint.desc) {
861
+ seq_puts(s, "--\n");
756862 goto out;
757863 }
758864
759865 switch (usb_endpoint_type(dep->endpoint.desc)) {
760866 case USB_ENDPOINT_XFER_CONTROL:
761
- seq_printf(s, "control\n");
867
+ seq_puts(s, "control\n");
762868 break;
763869 case USB_ENDPOINT_XFER_ISOC:
764
- seq_printf(s, "isochronous\n");
870
+ seq_puts(s, "isochronous\n");
765871 break;
766872 case USB_ENDPOINT_XFER_BULK:
767
- seq_printf(s, "bulk\n");
873
+ seq_puts(s, "bulk\n");
768874 break;
769875 case USB_ENDPOINT_XFER_INT:
770
- seq_printf(s, "interrupt\n");
876
+ seq_puts(s, "interrupt\n");
771877 break;
772878 default:
773
- seq_printf(s, "--\n");
879
+ seq_puts(s, "--\n");
774880 }
775881
776882 out:
....@@ -785,14 +891,19 @@
785891 struct dwc3 *dwc = dep->dwc;
786892 unsigned long flags;
787893 int i;
894
+ int ret;
895
+
896
+ ret = pm_runtime_resume_and_get(dwc->dev);
897
+ if (ret < 0)
898
+ return ret;
788899
789900 spin_lock_irqsave(&dwc->lock, flags);
790901 if (dep->number <= 1) {
791
- seq_printf(s, "--\n");
902
+ seq_puts(s, "--\n");
792903 goto out;
793904 }
794905
795
- seq_printf(s, "buffer_addr,size,type,ioc,isp_imi,csp,chn,lst,hwo\n");
906
+ seq_puts(s, "buffer_addr,size,type,ioc,isp_imi,csp,chn,lst,hwo\n");
796907
797908 for (i = 0; i < DWC3_TRB_NUM; i++) {
798909 struct dwc3_trb *trb = &dep->trb_pool[i];
....@@ -814,6 +925,8 @@
814925 out:
815926 spin_unlock_irqrestore(&dwc->lock, flags);
816927
928
+ pm_runtime_put_sync(dwc->dev);
929
+
817930 return 0;
818931 }
819932
....@@ -826,6 +939,11 @@
826939 u32 lower_32_bits;
827940 u32 upper_32_bits;
828941 u32 reg;
942
+ int ret;
943
+
944
+ ret = pm_runtime_resume_and_get(dwc->dev);
945
+ if (ret < 0)
946
+ return ret;
829947
830948 spin_lock_irqsave(&dwc->lock, flags);
831949 reg = DWC3_GDBGLSPMUX_EPSELECT(dep->number);
....@@ -837,6 +955,8 @@
837955 ep_info = ((u64)upper_32_bits << 32) | lower_32_bits;
838956 seq_printf(s, "0x%016llx\n", ep_info);
839957 spin_unlock_irqrestore(&dwc->lock, flags);
958
+
959
+ pm_runtime_put_sync(dwc->dev);
840960
841961 return 0;
842962 }
....@@ -874,7 +994,7 @@
874994 const struct file_operations *fops = dwc3_ep_file_map[i].fops;
875995 const char *name = dwc3_ep_file_map[i].name;
876996
877
- debugfs_create_file(name, S_IRUGO, parent, dep, fops);
997
+ debugfs_create_file(name, 0444, parent, dep, fops);
878998 }
879999 }
8801000
....@@ -899,25 +1019,23 @@
8991019 dwc->regset->regs = dwc3_regs;
9001020 dwc->regset->nregs = ARRAY_SIZE(dwc3_regs);
9011021 dwc->regset->base = dwc->regs - DWC3_GLOBALS_REGS_START;
1022
+ dwc->regset->dev = dwc->dev;
9021023
903
- root = debugfs_create_dir(dev_name(dwc->dev), NULL);
1024
+ root = debugfs_create_dir(dev_name(dwc->dev), usb_debug_root);
9041025 dwc->root = root;
9051026
906
- debugfs_create_regset32("regdump", S_IRUGO, root, dwc->regset);
1027
+ debugfs_create_regset32("regdump", 0444, root, dwc->regset);
1028
+ debugfs_create_file("lsp_dump", 0644, root, dwc, &dwc3_lsp_fops);
9071029
908
- debugfs_create_file("lsp_dump", S_IRUGO | S_IWUSR, root, dwc,
909
- &dwc3_lsp_fops);
910
-
911
- if (IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE)) {
912
- debugfs_create_file("mode", S_IRUGO | S_IWUSR, root, dwc,
1030
+ if (IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE))
1031
+ debugfs_create_file("mode", 0644, root, dwc,
9131032 &dwc3_mode_fops);
914
- }
9151033
9161034 if (IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE) ||
9171035 IS_ENABLED(CONFIG_USB_DWC3_GADGET)) {
918
- debugfs_create_file("testmode", S_IRUGO | S_IWUSR, root, dwc,
919
- &dwc3_testmode_fops);
920
- debugfs_create_file("link_state", S_IRUGO | S_IWUSR, root, dwc,
1036
+ debugfs_create_file("testmode", 0644, root, dwc,
1037
+ &dwc3_testmode_fops);
1038
+ debugfs_create_file("link_state", 0644, root, dwc,
9211039 &dwc3_link_state_fops);
9221040 }
9231041 }