summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/include/nvgpu/hw
diff options
context:
space:
mode:
authorPeng Liu <pengliu@nvidia.com>2018-10-30 16:45:43 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2019-04-01 18:27:17 -0400
commit3a11883f7f4399ae8dffbea00c1842e3c2095937 (patch)
tree82d36197046e73c13432250ec4ebce0da21791d5 /drivers/gpu/nvgpu/include/nvgpu/hw
parentf1be222687a853b0218a5700a213f3d34d8ccc4f (diff)
gpu: nvgpu: using pmu counters for load estimate
PMU counters #0 and #4 are used to count total cycles and busy cycles. These counts are used by podgov to estimate GPU load. PMU idle intr status register is used to monitor overflow. Overflow rarely occurs because frequency governor reads and resets the counters at a high cadence. When overflow occurs, 100% work load is reported to frequency governor. Bug 1963732 Change-Id: I046480ebde162e6eda24577932b96cfd91b77c69 Signed-off-by: Peng Liu <pengliu@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1939547 (cherry picked from commit 34df0035194e0203f68f679acdd84e5533a48149) Reviewed-on: https://git-master.nvidia.com/r/1979495 Reviewed-by: Aaron Tian <atian@nvidia.com> Tested-by: Aaron Tian <atian@nvidia.com> Reviewed-by: Rajkumar Kasirajan <rkasirajan@nvidia.com> Tested-by: Rajkumar Kasirajan <rkasirajan@nvidia.com> Reviewed-by: Bibek Basu <bbasu@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/include/nvgpu/hw')
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/hw/gk20a/hw_pwr_gk20a.h40
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/hw/gm20b/hw_pwr_gm20b.h48
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/hw/gp106/hw_pwr_gp106.h48
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/hw/gp10b/hw_pwr_gp10b.h48
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/hw/gv100/hw_pwr_gv100.h48
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_pwr_gv11b.h48
6 files changed, 280 insertions, 0 deletions
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}
675static inline u32 pwr_pmu_idle_threshold_r(u32 i)
676{
677 return 0x0010a8a0U + i*4U;
678}
679static inline u32 pwr_pmu_idle_threshold_value_f(u32 v)
680{
681 return (v & 0x7fffffffU) << 0U;
682}
683static inline u32 pwr_pmu_idle_intr_r(void)
684{
685 return 0x0010a9e8U;
686}
687static inline u32 pwr_pmu_idle_intr_en_f(u32 v)
688{
689 return (v & 0x1U) << 0U;
690}
691static inline u32 pwr_pmu_idle_intr_en_disabled_v(void)
692{
693 return 0x00000000U;
694}
695static inline u32 pwr_pmu_idle_intr_en_enabled_v(void)
696{
697 return 0x00000001U;
698}
699static inline u32 pwr_pmu_idle_intr_status_r(void)
700{
701 return 0x0010a9ecU;
702}
703static inline u32 pwr_pmu_idle_intr_status_intr_f(u32 v)
704{
705 return (v & 0x1U) << 0U;
706}
707static inline u32 pwr_pmu_idle_intr_status_intr_m(void)
708{
709 return U32(0x1U) << 0U;
710}
711static inline u32 pwr_pmu_idle_intr_status_intr_v(u32 r)
712{
713 return (r >> 0U) & 0x1U;
714}
675static inline u32 pwr_pmu_idle_mask_supp_r(u32 i) 715static 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}
719static inline u32 pwr_pmu_idle_threshold_r(u32 i)
720{
721 return 0x0010a8a0U + i*4U;
722}
723static inline u32 pwr_pmu_idle_threshold_value_f(u32 v)
724{
725 return (v & 0x7fffffffU) << 0U;
726}
727static inline u32 pwr_pmu_idle_intr_r(void)
728{
729 return 0x0010a9e8U;
730}
731static inline u32 pwr_pmu_idle_intr_en_f(u32 v)
732{
733 return (v & 0x1U) << 0U;
734}
735static inline u32 pwr_pmu_idle_intr_en_disabled_v(void)
736{
737 return 0x00000000U;
738}
739static inline u32 pwr_pmu_idle_intr_en_enabled_v(void)
740{
741 return 0x00000001U;
742}
743static inline u32 pwr_pmu_idle_intr_status_r(void)
744{
745 return 0x0010a9ecU;
746}
747static inline u32 pwr_pmu_idle_intr_status_intr_f(u32 v)
748{
749 return (v & 0x1U) << 0U;
750}
751static inline u32 pwr_pmu_idle_intr_status_intr_m(void)
752{
753 return U32(0x1U) << 0U;
754}
755static inline u32 pwr_pmu_idle_intr_status_intr_v(u32 r)
756{
757 return (r >> 0U) & 0x1U;
758}
759static inline u32 pwr_pmu_idle_intr_status_intr_pending_v(void)
760{
761 return 0x00000001U;
762}
763static inline u32 pwr_pmu_idle_intr_status_intr_clear_v(void)
764{
765 return 0x00000001U;
766}
719static inline u32 pwr_pmu_idle_mask_supp_r(u32 i) 767static 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}
727static inline u32 pwr_pmu_idle_threshold_r(u32 i)
728{
729 return 0x0010a8a0U + i*4U;
730}
731static inline u32 pwr_pmu_idle_threshold_value_f(u32 v)
732{
733 return (v & 0x7fffffffU) << 0U;
734}
735static inline u32 pwr_pmu_idle_intr_r(void)
736{
737 return 0x0010a9e8U;
738}
739static inline u32 pwr_pmu_idle_intr_en_f(u32 v)
740{
741 return (v & 0x1U) << 0U;
742}
743static inline u32 pwr_pmu_idle_intr_en_disabled_v(void)
744{
745 return 0x00000000U;
746}
747static inline u32 pwr_pmu_idle_intr_en_enabled_v(void)
748{
749 return 0x00000001U;
750}
751static inline u32 pwr_pmu_idle_intr_status_r(void)
752{
753 return 0x0010a9ecU;
754}
755static inline u32 pwr_pmu_idle_intr_status_intr_f(u32 v)
756{
757 return (v & 0x1U) << 0U;
758}
759static inline u32 pwr_pmu_idle_intr_status_intr_m(void)
760{
761 return U32(0x1U) << 0U;
762}
763static inline u32 pwr_pmu_idle_intr_status_intr_v(u32 r)
764{
765 return (r >> 0U) & 0x1U;
766}
767static inline u32 pwr_pmu_idle_intr_status_intr_pending_v(void)
768{
769 return 0x00000001U;
770}
771static inline u32 pwr_pmu_idle_intr_status_intr_clear_v(void)
772{
773 return 0x00000001U;
774}
727static inline u32 pwr_pmu_idle_mask_supp_r(u32 i) 775static 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}
723static inline u32 pwr_pmu_idle_threshold_r(u32 i)
724{
725 return 0x0010a8a0U + i*4U;
726}
727static inline u32 pwr_pmu_idle_threshold_value_f(u32 v)
728{
729 return (v & 0x7fffffffU) << 0U;
730}
731static inline u32 pwr_pmu_idle_intr_r(void)
732{
733 return 0x0010a9e8U;
734}
735static inline u32 pwr_pmu_idle_intr_en_f(u32 v)
736{
737 return (v & 0x1U) << 0U;
738}
739static inline u32 pwr_pmu_idle_intr_en_disabled_v(void)
740{
741 return 0x00000000U;
742}
743static inline u32 pwr_pmu_idle_intr_en_enabled_v(void)
744{
745 return 0x00000001U;
746}
747static inline u32 pwr_pmu_idle_intr_status_r(void)
748{
749 return 0x0010a9ecU;
750}
751static inline u32 pwr_pmu_idle_intr_status_intr_f(u32 v)
752{
753 return (v & 0x1U) << 0U;
754}
755static inline u32 pwr_pmu_idle_intr_status_intr_m(void)
756{
757 return U32(0x1U) << 0U;
758}
759static inline u32 pwr_pmu_idle_intr_status_intr_v(u32 r)
760{
761 return (r >> 0U) & 0x1U;
762}
763static inline u32 pwr_pmu_idle_intr_status_intr_pending_v(void)
764{
765 return 0x00000001U;
766}
767static inline u32 pwr_pmu_idle_intr_status_intr_clear_v(void)
768{
769 return 0x00000001U;
770}
723static inline u32 pwr_pmu_idle_mask_supp_r(u32 i) 771static 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}
827static inline u32 pwr_pmu_idle_threshold_r(u32 i)
828{
829 return 0x0010a8a0U + i*4U;
830}
831static inline u32 pwr_pmu_idle_threshold_value_f(u32 v)
832{
833 return (v & 0x7fffffffU) << 0U;
834}
835static inline u32 pwr_pmu_idle_intr_r(void)
836{
837 return 0x0010a9e8U;
838}
839static inline u32 pwr_pmu_idle_intr_en_f(u32 v)
840{
841 return (v & 0x1U) << 0U;
842}
843static inline u32 pwr_pmu_idle_intr_en_disabled_v(void)
844{
845 return 0x00000000U;
846}
847static inline u32 pwr_pmu_idle_intr_en_enabled_v(void)
848{
849 return 0x00000001U;
850}
851static inline u32 pwr_pmu_idle_intr_status_r(void)
852{
853 return 0x0010a9ecU;
854}
855static inline u32 pwr_pmu_idle_intr_status_intr_f(u32 v)
856{
857 return (v & 0x1U) << 0U;
858}
859static inline u32 pwr_pmu_idle_intr_status_intr_m(void)
860{
861 return U32(0x1U) << 0U;
862}
863static inline u32 pwr_pmu_idle_intr_status_intr_v(u32 r)
864{
865 return (r >> 0U) & 0x1U;
866}
867static inline u32 pwr_pmu_idle_intr_status_intr_pending_v(void)
868{
869 return 0x00000001U;
870}
871static inline u32 pwr_pmu_idle_intr_status_intr_clear_v(void)
872{
873 return 0x00000001U;
874}
827static inline u32 pwr_pmu_idle_mask_supp_r(u32 i) 875static 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}
883static inline u32 pwr_pmu_idle_threshold_r(u32 i)
884{
885 return 0x0010a8a0U + i*4U;
886}
887static inline u32 pwr_pmu_idle_threshold_value_f(u32 v)
888{
889 return (v & 0x7fffffffU) << 0U;
890}
891static inline u32 pwr_pmu_idle_intr_r(void)
892{
893 return 0x0010a9e8U;
894}
895static inline u32 pwr_pmu_idle_intr_en_f(u32 v)
896{
897 return (v & 0x1U) << 0U;
898}
899static inline u32 pwr_pmu_idle_intr_en_disabled_v(void)
900{
901 return 0x00000000U;
902}
903static inline u32 pwr_pmu_idle_intr_en_enabled_v(void)
904{
905 return 0x00000001U;
906}
907static inline u32 pwr_pmu_idle_intr_status_r(void)
908{
909 return 0x0010a9ecU;
910}
911static inline u32 pwr_pmu_idle_intr_status_intr_f(u32 v)
912{
913 return (v & 0x1U) << 0U;
914}
915static inline u32 pwr_pmu_idle_intr_status_intr_m(void)
916{
917 return U32(0x1U) << 0U;
918}
919static inline u32 pwr_pmu_idle_intr_status_intr_v(u32 r)
920{
921 return (r >> 0U) & 0x1U;
922}
923static inline u32 pwr_pmu_idle_intr_status_intr_pending_v(void)
924{
925 return 0x00000001U;
926}
927static inline u32 pwr_pmu_idle_intr_status_intr_clear_v(void)
928{
929 return 0x00000001U;
930}
883static inline u32 pwr_pmu_idle_mask_supp_r(u32 i) 931static inline u32 pwr_pmu_idle_mask_supp_r(u32 i)
884{ 932{
885 return 0x0010a9f0U + i*8U; 933 return 0x0010a9f0U + i*8U;