summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/include
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/include')
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/gk20a.h2
-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
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/pmu.h4
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}
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;
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,
449int nvgpu_pmu_init_perfmon_rpc(struct nvgpu_pmu *pmu); 452int nvgpu_pmu_init_perfmon_rpc(struct nvgpu_pmu *pmu);
450int nvgpu_pmu_load_norm(struct gk20a *g, u32 *load); 453int nvgpu_pmu_load_norm(struct gk20a *g, u32 *load);
451int nvgpu_pmu_load_update(struct gk20a *g); 454int nvgpu_pmu_load_update(struct gk20a *g);
455int nvgpu_pmu_busy_cycles_norm(struct gk20a *g, u32 *norm);
452void nvgpu_pmu_reset_load_counters(struct gk20a *g); 456void nvgpu_pmu_reset_load_counters(struct gk20a *g);
453void nvgpu_pmu_get_load_counters(struct gk20a *g, u32 *busy_cycles, 457void nvgpu_pmu_get_load_counters(struct gk20a *g, u32 *busy_cycles,
454 u32 *total_cycles); 458 u32 *total_cycles);