diff options
Diffstat (limited to 'drivers/gpu/nvgpu/include')
8 files changed, 286 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/include/nvgpu/gk20a.h b/drivers/gpu/nvgpu/include/nvgpu/gk20a.h index dfa4aaf2..aa435638 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/gk20a.h +++ b/drivers/gpu/nvgpu/include/nvgpu/gk20a.h | |||
@@ -1050,6 +1050,8 @@ struct gpu_ops { | |||
1050 | void (*pmu_init_perfmon_counter)(struct gk20a *g); | 1050 | void (*pmu_init_perfmon_counter)(struct gk20a *g); |
1051 | void (*pmu_pg_idle_counter_config)(struct gk20a *g, u32 pg_engine_id); | 1051 | void (*pmu_pg_idle_counter_config)(struct gk20a *g, u32 pg_engine_id); |
1052 | u32 (*pmu_read_idle_counter)(struct gk20a *g, u32 counter_id); | 1052 | u32 (*pmu_read_idle_counter)(struct gk20a *g, u32 counter_id); |
1053 | u32 (*pmu_read_idle_intr_status)(struct gk20a *g); | ||
1054 | void (*pmu_clear_idle_intr_status)(struct gk20a *g); | ||
1053 | void (*pmu_reset_idle_counter)(struct gk20a *g, u32 counter_id); | 1055 | void (*pmu_reset_idle_counter)(struct gk20a *g, u32 counter_id); |
1054 | void (*pmu_dump_elpg_stats)(struct nvgpu_pmu *pmu); | 1056 | void (*pmu_dump_elpg_stats)(struct nvgpu_pmu *pmu); |
1055 | void (*pmu_dump_falcon_stats)(struct nvgpu_pmu *pmu); | 1057 | void (*pmu_dump_falcon_stats)(struct nvgpu_pmu *pmu); |
diff --git a/drivers/gpu/nvgpu/include/nvgpu/hw/gk20a/hw_pwr_gk20a.h b/drivers/gpu/nvgpu/include/nvgpu/hw/gk20a/hw_pwr_gk20a.h index 71b73d2a..28457634 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/hw/gk20a/hw_pwr_gk20a.h +++ b/drivers/gpu/nvgpu/include/nvgpu/hw/gk20a/hw_pwr_gk20a.h | |||
@@ -672,6 +672,46 @@ static inline u32 pwr_pmu_idle_ctrl_filter_disabled_f(void) | |||
672 | { | 672 | { |
673 | return 0x0U; | 673 | return 0x0U; |
674 | } | 674 | } |
675 | static inline u32 pwr_pmu_idle_threshold_r(u32 i) | ||
676 | { | ||
677 | return 0x0010a8a0U + i*4U; | ||
678 | } | ||
679 | static inline u32 pwr_pmu_idle_threshold_value_f(u32 v) | ||
680 | { | ||
681 | return (v & 0x7fffffffU) << 0U; | ||
682 | } | ||
683 | static inline u32 pwr_pmu_idle_intr_r(void) | ||
684 | { | ||
685 | return 0x0010a9e8U; | ||
686 | } | ||
687 | static inline u32 pwr_pmu_idle_intr_en_f(u32 v) | ||
688 | { | ||
689 | return (v & 0x1U) << 0U; | ||
690 | } | ||
691 | static inline u32 pwr_pmu_idle_intr_en_disabled_v(void) | ||
692 | { | ||
693 | return 0x00000000U; | ||
694 | } | ||
695 | static inline u32 pwr_pmu_idle_intr_en_enabled_v(void) | ||
696 | { | ||
697 | return 0x00000001U; | ||
698 | } | ||
699 | static inline u32 pwr_pmu_idle_intr_status_r(void) | ||
700 | { | ||
701 | return 0x0010a9ecU; | ||
702 | } | ||
703 | static inline u32 pwr_pmu_idle_intr_status_intr_f(u32 v) | ||
704 | { | ||
705 | return (v & 0x1U) << 0U; | ||
706 | } | ||
707 | static inline u32 pwr_pmu_idle_intr_status_intr_m(void) | ||
708 | { | ||
709 | return U32(0x1U) << 0U; | ||
710 | } | ||
711 | static inline u32 pwr_pmu_idle_intr_status_intr_v(u32 r) | ||
712 | { | ||
713 | return (r >> 0U) & 0x1U; | ||
714 | } | ||
675 | static inline u32 pwr_pmu_idle_mask_supp_r(u32 i) | 715 | static inline u32 pwr_pmu_idle_mask_supp_r(u32 i) |
676 | { | 716 | { |
677 | return 0x0010a9f0U + i*8U; | 717 | return 0x0010a9f0U + i*8U; |
diff --git a/drivers/gpu/nvgpu/include/nvgpu/hw/gm20b/hw_pwr_gm20b.h b/drivers/gpu/nvgpu/include/nvgpu/hw/gm20b/hw_pwr_gm20b.h index fa232644..2ca1f02b 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/hw/gm20b/hw_pwr_gm20b.h +++ b/drivers/gpu/nvgpu/include/nvgpu/hw/gm20b/hw_pwr_gm20b.h | |||
@@ -716,6 +716,54 @@ static inline u32 pwr_pmu_idle_ctrl_filter_disabled_f(void) | |||
716 | { | 716 | { |
717 | return 0x0U; | 717 | return 0x0U; |
718 | } | 718 | } |
719 | static inline u32 pwr_pmu_idle_threshold_r(u32 i) | ||
720 | { | ||
721 | return 0x0010a8a0U + i*4U; | ||
722 | } | ||
723 | static inline u32 pwr_pmu_idle_threshold_value_f(u32 v) | ||
724 | { | ||
725 | return (v & 0x7fffffffU) << 0U; | ||
726 | } | ||
727 | static inline u32 pwr_pmu_idle_intr_r(void) | ||
728 | { | ||
729 | return 0x0010a9e8U; | ||
730 | } | ||
731 | static inline u32 pwr_pmu_idle_intr_en_f(u32 v) | ||
732 | { | ||
733 | return (v & 0x1U) << 0U; | ||
734 | } | ||
735 | static inline u32 pwr_pmu_idle_intr_en_disabled_v(void) | ||
736 | { | ||
737 | return 0x00000000U; | ||
738 | } | ||
739 | static inline u32 pwr_pmu_idle_intr_en_enabled_v(void) | ||
740 | { | ||
741 | return 0x00000001U; | ||
742 | } | ||
743 | static inline u32 pwr_pmu_idle_intr_status_r(void) | ||
744 | { | ||
745 | return 0x0010a9ecU; | ||
746 | } | ||
747 | static inline u32 pwr_pmu_idle_intr_status_intr_f(u32 v) | ||
748 | { | ||
749 | return (v & 0x1U) << 0U; | ||
750 | } | ||
751 | static inline u32 pwr_pmu_idle_intr_status_intr_m(void) | ||
752 | { | ||
753 | return U32(0x1U) << 0U; | ||
754 | } | ||
755 | static inline u32 pwr_pmu_idle_intr_status_intr_v(u32 r) | ||
756 | { | ||
757 | return (r >> 0U) & 0x1U; | ||
758 | } | ||
759 | static inline u32 pwr_pmu_idle_intr_status_intr_pending_v(void) | ||
760 | { | ||
761 | return 0x00000001U; | ||
762 | } | ||
763 | static inline u32 pwr_pmu_idle_intr_status_intr_clear_v(void) | ||
764 | { | ||
765 | return 0x00000001U; | ||
766 | } | ||
719 | static inline u32 pwr_pmu_idle_mask_supp_r(u32 i) | 767 | static inline u32 pwr_pmu_idle_mask_supp_r(u32 i) |
720 | { | 768 | { |
721 | return 0x0010a9f0U + i*8U; | 769 | return 0x0010a9f0U + i*8U; |
diff --git a/drivers/gpu/nvgpu/include/nvgpu/hw/gp106/hw_pwr_gp106.h b/drivers/gpu/nvgpu/include/nvgpu/hw/gp106/hw_pwr_gp106.h index a9fbbd10..2e75fa6e 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/hw/gp106/hw_pwr_gp106.h +++ b/drivers/gpu/nvgpu/include/nvgpu/hw/gp106/hw_pwr_gp106.h | |||
@@ -724,6 +724,54 @@ static inline u32 pwr_pmu_idle_ctrl_filter_disabled_f(void) | |||
724 | { | 724 | { |
725 | return 0x0U; | 725 | return 0x0U; |
726 | } | 726 | } |
727 | static inline u32 pwr_pmu_idle_threshold_r(u32 i) | ||
728 | { | ||
729 | return 0x0010a8a0U + i*4U; | ||
730 | } | ||
731 | static inline u32 pwr_pmu_idle_threshold_value_f(u32 v) | ||
732 | { | ||
733 | return (v & 0x7fffffffU) << 0U; | ||
734 | } | ||
735 | static inline u32 pwr_pmu_idle_intr_r(void) | ||
736 | { | ||
737 | return 0x0010a9e8U; | ||
738 | } | ||
739 | static inline u32 pwr_pmu_idle_intr_en_f(u32 v) | ||
740 | { | ||
741 | return (v & 0x1U) << 0U; | ||
742 | } | ||
743 | static inline u32 pwr_pmu_idle_intr_en_disabled_v(void) | ||
744 | { | ||
745 | return 0x00000000U; | ||
746 | } | ||
747 | static inline u32 pwr_pmu_idle_intr_en_enabled_v(void) | ||
748 | { | ||
749 | return 0x00000001U; | ||
750 | } | ||
751 | static inline u32 pwr_pmu_idle_intr_status_r(void) | ||
752 | { | ||
753 | return 0x0010a9ecU; | ||
754 | } | ||
755 | static inline u32 pwr_pmu_idle_intr_status_intr_f(u32 v) | ||
756 | { | ||
757 | return (v & 0x1U) << 0U; | ||
758 | } | ||
759 | static inline u32 pwr_pmu_idle_intr_status_intr_m(void) | ||
760 | { | ||
761 | return U32(0x1U) << 0U; | ||
762 | } | ||
763 | static inline u32 pwr_pmu_idle_intr_status_intr_v(u32 r) | ||
764 | { | ||
765 | return (r >> 0U) & 0x1U; | ||
766 | } | ||
767 | static inline u32 pwr_pmu_idle_intr_status_intr_pending_v(void) | ||
768 | { | ||
769 | return 0x00000001U; | ||
770 | } | ||
771 | static inline u32 pwr_pmu_idle_intr_status_intr_clear_v(void) | ||
772 | { | ||
773 | return 0x00000001U; | ||
774 | } | ||
727 | static inline u32 pwr_pmu_idle_mask_supp_r(u32 i) | 775 | static inline u32 pwr_pmu_idle_mask_supp_r(u32 i) |
728 | { | 776 | { |
729 | return 0x0010a9f0U + i*8U; | 777 | return 0x0010a9f0U + i*8U; |
diff --git a/drivers/gpu/nvgpu/include/nvgpu/hw/gp10b/hw_pwr_gp10b.h b/drivers/gpu/nvgpu/include/nvgpu/hw/gp10b/hw_pwr_gp10b.h index 73a5c45c..c160e897 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/hw/gp10b/hw_pwr_gp10b.h +++ b/drivers/gpu/nvgpu/include/nvgpu/hw/gp10b/hw_pwr_gp10b.h | |||
@@ -720,6 +720,54 @@ static inline u32 pwr_pmu_idle_ctrl_filter_disabled_f(void) | |||
720 | { | 720 | { |
721 | return 0x0U; | 721 | return 0x0U; |
722 | } | 722 | } |
723 | static inline u32 pwr_pmu_idle_threshold_r(u32 i) | ||
724 | { | ||
725 | return 0x0010a8a0U + i*4U; | ||
726 | } | ||
727 | static inline u32 pwr_pmu_idle_threshold_value_f(u32 v) | ||
728 | { | ||
729 | return (v & 0x7fffffffU) << 0U; | ||
730 | } | ||
731 | static inline u32 pwr_pmu_idle_intr_r(void) | ||
732 | { | ||
733 | return 0x0010a9e8U; | ||
734 | } | ||
735 | static inline u32 pwr_pmu_idle_intr_en_f(u32 v) | ||
736 | { | ||
737 | return (v & 0x1U) << 0U; | ||
738 | } | ||
739 | static inline u32 pwr_pmu_idle_intr_en_disabled_v(void) | ||
740 | { | ||
741 | return 0x00000000U; | ||
742 | } | ||
743 | static inline u32 pwr_pmu_idle_intr_en_enabled_v(void) | ||
744 | { | ||
745 | return 0x00000001U; | ||
746 | } | ||
747 | static inline u32 pwr_pmu_idle_intr_status_r(void) | ||
748 | { | ||
749 | return 0x0010a9ecU; | ||
750 | } | ||
751 | static inline u32 pwr_pmu_idle_intr_status_intr_f(u32 v) | ||
752 | { | ||
753 | return (v & 0x1U) << 0U; | ||
754 | } | ||
755 | static inline u32 pwr_pmu_idle_intr_status_intr_m(void) | ||
756 | { | ||
757 | return U32(0x1U) << 0U; | ||
758 | } | ||
759 | static inline u32 pwr_pmu_idle_intr_status_intr_v(u32 r) | ||
760 | { | ||
761 | return (r >> 0U) & 0x1U; | ||
762 | } | ||
763 | static inline u32 pwr_pmu_idle_intr_status_intr_pending_v(void) | ||
764 | { | ||
765 | return 0x00000001U; | ||
766 | } | ||
767 | static inline u32 pwr_pmu_idle_intr_status_intr_clear_v(void) | ||
768 | { | ||
769 | return 0x00000001U; | ||
770 | } | ||
723 | static inline u32 pwr_pmu_idle_mask_supp_r(u32 i) | 771 | static inline u32 pwr_pmu_idle_mask_supp_r(u32 i) |
724 | { | 772 | { |
725 | return 0x0010a9f0U + i*8U; | 773 | return 0x0010a9f0U + i*8U; |
diff --git a/drivers/gpu/nvgpu/include/nvgpu/hw/gv100/hw_pwr_gv100.h b/drivers/gpu/nvgpu/include/nvgpu/hw/gv100/hw_pwr_gv100.h index 4b0b0326..c719226c 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/hw/gv100/hw_pwr_gv100.h +++ b/drivers/gpu/nvgpu/include/nvgpu/hw/gv100/hw_pwr_gv100.h | |||
@@ -824,6 +824,54 @@ static inline u32 pwr_pmu_idle_ctrl_filter_disabled_f(void) | |||
824 | { | 824 | { |
825 | return 0x0U; | 825 | return 0x0U; |
826 | } | 826 | } |
827 | static inline u32 pwr_pmu_idle_threshold_r(u32 i) | ||
828 | { | ||
829 | return 0x0010a8a0U + i*4U; | ||
830 | } | ||
831 | static inline u32 pwr_pmu_idle_threshold_value_f(u32 v) | ||
832 | { | ||
833 | return (v & 0x7fffffffU) << 0U; | ||
834 | } | ||
835 | static inline u32 pwr_pmu_idle_intr_r(void) | ||
836 | { | ||
837 | return 0x0010a9e8U; | ||
838 | } | ||
839 | static inline u32 pwr_pmu_idle_intr_en_f(u32 v) | ||
840 | { | ||
841 | return (v & 0x1U) << 0U; | ||
842 | } | ||
843 | static inline u32 pwr_pmu_idle_intr_en_disabled_v(void) | ||
844 | { | ||
845 | return 0x00000000U; | ||
846 | } | ||
847 | static inline u32 pwr_pmu_idle_intr_en_enabled_v(void) | ||
848 | { | ||
849 | return 0x00000001U; | ||
850 | } | ||
851 | static inline u32 pwr_pmu_idle_intr_status_r(void) | ||
852 | { | ||
853 | return 0x0010a9ecU; | ||
854 | } | ||
855 | static inline u32 pwr_pmu_idle_intr_status_intr_f(u32 v) | ||
856 | { | ||
857 | return (v & 0x1U) << 0U; | ||
858 | } | ||
859 | static inline u32 pwr_pmu_idle_intr_status_intr_m(void) | ||
860 | { | ||
861 | return U32(0x1U) << 0U; | ||
862 | } | ||
863 | static inline u32 pwr_pmu_idle_intr_status_intr_v(u32 r) | ||
864 | { | ||
865 | return (r >> 0U) & 0x1U; | ||
866 | } | ||
867 | static inline u32 pwr_pmu_idle_intr_status_intr_pending_v(void) | ||
868 | { | ||
869 | return 0x00000001U; | ||
870 | } | ||
871 | static inline u32 pwr_pmu_idle_intr_status_intr_clear_v(void) | ||
872 | { | ||
873 | return 0x00000001U; | ||
874 | } | ||
827 | static inline u32 pwr_pmu_idle_mask_supp_r(u32 i) | 875 | static inline u32 pwr_pmu_idle_mask_supp_r(u32 i) |
828 | { | 876 | { |
829 | return 0x0010a9f0U + i*8U; | 877 | return 0x0010a9f0U + i*8U; |
diff --git a/drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_pwr_gv11b.h b/drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_pwr_gv11b.h index c16d44f1..295c6e95 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_pwr_gv11b.h +++ b/drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_pwr_gv11b.h | |||
@@ -880,6 +880,54 @@ static inline u32 pwr_pmu_idle_ctrl_filter_disabled_f(void) | |||
880 | { | 880 | { |
881 | return 0x0U; | 881 | return 0x0U; |
882 | } | 882 | } |
883 | static inline u32 pwr_pmu_idle_threshold_r(u32 i) | ||
884 | { | ||
885 | return 0x0010a8a0U + i*4U; | ||
886 | } | ||
887 | static inline u32 pwr_pmu_idle_threshold_value_f(u32 v) | ||
888 | { | ||
889 | return (v & 0x7fffffffU) << 0U; | ||
890 | } | ||
891 | static inline u32 pwr_pmu_idle_intr_r(void) | ||
892 | { | ||
893 | return 0x0010a9e8U; | ||
894 | } | ||
895 | static inline u32 pwr_pmu_idle_intr_en_f(u32 v) | ||
896 | { | ||
897 | return (v & 0x1U) << 0U; | ||
898 | } | ||
899 | static inline u32 pwr_pmu_idle_intr_en_disabled_v(void) | ||
900 | { | ||
901 | return 0x00000000U; | ||
902 | } | ||
903 | static inline u32 pwr_pmu_idle_intr_en_enabled_v(void) | ||
904 | { | ||
905 | return 0x00000001U; | ||
906 | } | ||
907 | static inline u32 pwr_pmu_idle_intr_status_r(void) | ||
908 | { | ||
909 | return 0x0010a9ecU; | ||
910 | } | ||
911 | static inline u32 pwr_pmu_idle_intr_status_intr_f(u32 v) | ||
912 | { | ||
913 | return (v & 0x1U) << 0U; | ||
914 | } | ||
915 | static inline u32 pwr_pmu_idle_intr_status_intr_m(void) | ||
916 | { | ||
917 | return U32(0x1U) << 0U; | ||
918 | } | ||
919 | static inline u32 pwr_pmu_idle_intr_status_intr_v(u32 r) | ||
920 | { | ||
921 | return (r >> 0U) & 0x1U; | ||
922 | } | ||
923 | static inline u32 pwr_pmu_idle_intr_status_intr_pending_v(void) | ||
924 | { | ||
925 | return 0x00000001U; | ||
926 | } | ||
927 | static inline u32 pwr_pmu_idle_intr_status_intr_clear_v(void) | ||
928 | { | ||
929 | return 0x00000001U; | ||
930 | } | ||
883 | static inline u32 pwr_pmu_idle_mask_supp_r(u32 i) | 931 | static inline u32 pwr_pmu_idle_mask_supp_r(u32 i) |
884 | { | 932 | { |
885 | return 0x0010a9f0U + i*8U; | 933 | return 0x0010a9f0U + i*8U; |
diff --git a/drivers/gpu/nvgpu/include/nvgpu/pmu.h b/drivers/gpu/nvgpu/include/nvgpu/pmu.h index 7283755a..00194ec0 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/pmu.h +++ b/drivers/gpu/nvgpu/include/nvgpu/pmu.h | |||
@@ -144,6 +144,9 @@ enum { | |||
144 | #define APCTRL_POWER_BREAKEVEN_DEFAULT_US (2000) | 144 | #define APCTRL_POWER_BREAKEVEN_DEFAULT_US (2000) |
145 | #define APCTRL_CYCLES_PER_SAMPLE_MAX_DEFAULT (200) | 145 | #define APCTRL_CYCLES_PER_SAMPLE_MAX_DEFAULT (200) |
146 | 146 | ||
147 | /* pmu load const defines */ | ||
148 | #define PMU_BUSY_CYCLES_NORM_MAX (1000U) | ||
149 | |||
147 | /* RPC */ | 150 | /* RPC */ |
148 | #define PMU_RPC_EXECUTE(_stat, _pmu, _unit, _func, _prpc, _size)\ | 151 | #define PMU_RPC_EXECUTE(_stat, _pmu, _unit, _func, _prpc, _size)\ |
149 | do { \ | 152 | do { \ |
@@ -449,6 +452,7 @@ int nvgpu_pmu_handle_perfmon_event(struct nvgpu_pmu *pmu, | |||
449 | int nvgpu_pmu_init_perfmon_rpc(struct nvgpu_pmu *pmu); | 452 | int nvgpu_pmu_init_perfmon_rpc(struct nvgpu_pmu *pmu); |
450 | int nvgpu_pmu_load_norm(struct gk20a *g, u32 *load); | 453 | int nvgpu_pmu_load_norm(struct gk20a *g, u32 *load); |
451 | int nvgpu_pmu_load_update(struct gk20a *g); | 454 | int nvgpu_pmu_load_update(struct gk20a *g); |
455 | int nvgpu_pmu_busy_cycles_norm(struct gk20a *g, u32 *norm); | ||
452 | void nvgpu_pmu_reset_load_counters(struct gk20a *g); | 456 | void nvgpu_pmu_reset_load_counters(struct gk20a *g); |
453 | void nvgpu_pmu_get_load_counters(struct gk20a *g, u32 *busy_cycles, | 457 | void nvgpu_pmu_get_load_counters(struct gk20a *g, u32 *busy_cycles, |
454 | u32 *total_cycles); | 458 | u32 *total_cycles); |