diff options
Diffstat (limited to 'include/nvgpu')
| -rw-r--r-- | include/nvgpu/acr/nvgpu_acr.h | 6 | ||||
| -rw-r--r-- | include/nvgpu/bug.h | 20 | ||||
| -rw-r--r-- | include/nvgpu/enabled.h | 9 | ||||
| -rw-r--r-- | include/nvgpu/gk20a.h | 8 | ||||
| -rw-r--r-- | include/nvgpu/hw/gk20a/hw_gr_gk20a.h | 61 | ||||
| -rw-r--r-- | include/nvgpu/hw/gm20b/hw_gr_gm20b.h | 14 | ||||
| -rw-r--r-- | include/nvgpu/hw/gp106/hw_gr_gp106.h | 4 | ||||
| -rw-r--r-- | include/nvgpu/hw/gp10b/hw_gr_gp10b.h | 4 | ||||
| -rw-r--r-- | include/nvgpu/hw/gv100/hw_gr_gv100.h | 4 | ||||
| -rw-r--r-- | include/nvgpu/hw/gv11b/hw_gr_gv11b.h | 4 | ||||
| -rw-r--r-- | include/nvgpu/log.h | 3 | ||||
| -rw-r--r-- | include/nvgpu/nvgpu_err.h | 359 | ||||
| -rw-r--r-- | include/nvgpu/nvlink.h | 2 | ||||
| -rw-r--r-- | include/nvgpu/pmu.h | 20 | ||||
| -rw-r--r-- | include/nvgpu/pmuif/gpmuif_pg.h | 14 | ||||
| -rw-r--r-- | include/nvgpu/tsg.h | 4 |
16 files changed, 523 insertions, 13 deletions
diff --git a/include/nvgpu/acr/nvgpu_acr.h b/include/nvgpu/acr/nvgpu_acr.h index 7a0143e..cdb7bb8 100644 --- a/include/nvgpu/acr/nvgpu_acr.h +++ b/include/nvgpu/acr/nvgpu_acr.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (c) 2016-2018, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2016-2021, NVIDIA CORPORATION. All rights reserved. |
| 3 | * | 3 | * |
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
| 5 | * copy of this software and associated documentation files (the "Software"), | 5 | * copy of this software and associated documentation files (the "Software"), |
| @@ -39,7 +39,11 @@ struct hs_acr; | |||
| 39 | struct nvgpu_acr; | 39 | struct nvgpu_acr; |
| 40 | 40 | ||
| 41 | #define HSBIN_ACR_BL_UCODE_IMAGE "pmu_bl.bin" | 41 | #define HSBIN_ACR_BL_UCODE_IMAGE "pmu_bl.bin" |
| 42 | #define GM20B_HSBIN_ACR_PROD_UCODE "nv_acr_ucode_prod.bin" | ||
| 43 | #define GM20B_HSBIN_ACR_DBG_UCODE "nv_acr_ucode_dbg.bin" | ||
| 42 | #define HSBIN_ACR_UCODE_IMAGE "acr_ucode.bin" | 44 | #define HSBIN_ACR_UCODE_IMAGE "acr_ucode.bin" |
| 45 | #define HSBIN_ACR_PROD_UCODE "acr_ucode_prod.bin" | ||
| 46 | #define HSBIN_ACR_DBG_UCODE "acr_ucode_dbg.bin" | ||
| 43 | #define HSBIN_ACR_AHESASC_PROD_UCODE "acr_ahesasc_prod_ucode.bin" | 47 | #define HSBIN_ACR_AHESASC_PROD_UCODE "acr_ahesasc_prod_ucode.bin" |
| 44 | #define HSBIN_ACR_ASB_PROD_UCODE "acr_asb_prod_ucode.bin" | 48 | #define HSBIN_ACR_ASB_PROD_UCODE "acr_asb_prod_ucode.bin" |
| 45 | #define HSBIN_ACR_AHESASC_DBG_UCODE "acr_ahesasc_dbg_ucode.bin" | 49 | #define HSBIN_ACR_AHESASC_DBG_UCODE "acr_ahesasc_dbg_ucode.bin" |
diff --git a/include/nvgpu/bug.h b/include/nvgpu/bug.h index 3d139b7..82d641b 100644 --- a/include/nvgpu/bug.h +++ b/include/nvgpu/bug.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (c) 2017-2018, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2017-2021, NVIDIA CORPORATION. All rights reserved. |
| 3 | * | 3 | * |
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
| 5 | * copy of this software and associated documentation files (the "Software"), | 5 | * copy of this software and associated documentation files (the "Software"), |
| @@ -24,6 +24,24 @@ | |||
| 24 | 24 | ||
| 25 | #ifdef __KERNEL__ | 25 | #ifdef __KERNEL__ |
| 26 | #include <linux/bug.h> | 26 | #include <linux/bug.h> |
| 27 | /* | ||
| 28 | * Define an assert macro that code within nvgpu can use. | ||
| 29 | * | ||
| 30 | * The goal of this macro is for debugging but what that means varies from OS | ||
| 31 | * to OS. On Linux wee don't want to BUG() for general driver misbehaving. BUG() | ||
| 32 | * is a very heavy handed tool - in fact there's probably no where within the | ||
| 33 | * nvgpu core code where it makes sense to use a BUG() when running under Linux. | ||
| 34 | * | ||
| 35 | * However, on QNX (and POSIX) BUG() will just kill the current process. This | ||
| 36 | * means we can use it for handling bugs in nvgpu. | ||
| 37 | * | ||
| 38 | * As a result this macro varies depending on platform. | ||
| 39 | */ | ||
| 40 | #define nvgpu_assert(cond) ((void) WARN_ON(!(cond))) | ||
| 41 | #define nvgpu_do_assert_print(g, fmt, arg...) \ | ||
| 42 | do { \ | ||
| 43 | nvgpu_err(g, fmt, ##arg); \ | ||
| 44 | } while (false) | ||
| 27 | #elif defined(__NVGPU_POSIX__) | 45 | #elif defined(__NVGPU_POSIX__) |
| 28 | #include <nvgpu/posix/bug.h> | 46 | #include <nvgpu/posix/bug.h> |
| 29 | #else | 47 | #else |
diff --git a/include/nvgpu/enabled.h b/include/nvgpu/enabled.h index ef55dad..51e9358 100644 --- a/include/nvgpu/enabled.h +++ b/include/nvgpu/enabled.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (c) 2017-2020, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2017-2022, NVIDIA CORPORATION. All rights reserved. |
| 3 | * | 3 | * |
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
| 5 | * copy of this software and associated documentation files (the "Software"), | 5 | * copy of this software and associated documentation files (the "Software"), |
| @@ -85,7 +85,12 @@ struct gk20a; | |||
| 85 | #define NVGPU_MM_USE_PHYSICAL_SG 27 | 85 | #define NVGPU_MM_USE_PHYSICAL_SG 27 |
| 86 | /* WAR for gm20b chips. */ | 86 | /* WAR for gm20b chips. */ |
| 87 | #define NVGPU_MM_FORCE_128K_PMU_VM 28 | 87 | #define NVGPU_MM_FORCE_128K_PMU_VM 28 |
| 88 | 88 | /* SW ERRATA to disable L3 alloc Bit of the physical address. | |
| 89 | * Bit number varies between SOCs. | ||
| 90 | * E.g. 64GB physical RAM support for gv11b requires this SW errata | ||
| 91 | * to be enabled. | ||
| 92 | */ | ||
| 93 | #define NVGPU_DISABLE_L3_SUPPORT 29 | ||
| 89 | /* | 94 | /* |
| 90 | * Host flags | 95 | * Host flags |
| 91 | */ | 96 | */ |
diff --git a/include/nvgpu/gk20a.h b/include/nvgpu/gk20a.h index aa95969..19bfaee 100644 --- a/include/nvgpu/gk20a.h +++ b/include/nvgpu/gk20a.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (c) 2011-2020, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2011-2022, NVIDIA CORPORATION. All rights reserved. |
| 3 | * | 3 | * |
| 4 | * GK20A Graphics | 4 | * GK20A Graphics |
| 5 | * | 5 | * |
| @@ -517,6 +517,7 @@ struct gpu_ops { | |||
| 517 | u32 *priv_addr_table, | 517 | u32 *priv_addr_table, |
| 518 | u32 *priv_addr_table_index); | 518 | u32 *priv_addr_table_index); |
| 519 | u32 (*fecs_ctxsw_mailbox_size)(void); | 519 | u32 (*fecs_ctxsw_mailbox_size)(void); |
| 520 | u32 (*gpc0_gpccs_ctxsw_mailbox_size)(void); | ||
| 520 | int (*init_sw_bundle64)(struct gk20a *g); | 521 | int (*init_sw_bundle64)(struct gk20a *g); |
| 521 | int (*alloc_global_ctx_buffers)(struct gk20a *g); | 522 | int (*alloc_global_ctx_buffers)(struct gk20a *g); |
| 522 | int (*map_global_ctx_buffers)(struct gk20a *g, | 523 | int (*map_global_ctx_buffers)(struct gk20a *g, |
| @@ -719,7 +720,7 @@ struct gpu_ops { | |||
| 719 | struct ch_state *ch_state); | 720 | struct ch_state *ch_state); |
| 720 | u32 (*intr_0_error_mask)(struct gk20a *g); | 721 | u32 (*intr_0_error_mask)(struct gk20a *g); |
| 721 | int (*is_preempt_pending)(struct gk20a *g, u32 id, | 722 | int (*is_preempt_pending)(struct gk20a *g, u32 id, |
| 722 | unsigned int id_type); | 723 | unsigned int id_type, bool preempt_retries_left); |
| 723 | void (*init_pbdma_intr_descs)(struct fifo_gk20a *f); | 724 | void (*init_pbdma_intr_descs)(struct fifo_gk20a *f); |
| 724 | int (*reset_enable_hw)(struct gk20a *g); | 725 | int (*reset_enable_hw)(struct gk20a *g); |
| 725 | int (*setup_userd)(struct channel_gk20a *c); | 726 | int (*setup_userd)(struct channel_gk20a *c); |
| @@ -1079,6 +1080,7 @@ struct gpu_ops { | |||
| 1079 | u32 (*pmu_pg_supported_engines_list)(struct gk20a *g); | 1080 | u32 (*pmu_pg_supported_engines_list)(struct gk20a *g); |
| 1080 | u32 (*pmu_pg_engines_feature_list)(struct gk20a *g, | 1081 | u32 (*pmu_pg_engines_feature_list)(struct gk20a *g, |
| 1081 | u32 pg_engine_id); | 1082 | u32 pg_engine_id); |
| 1083 | int (*pmu_process_pg_event)(struct gk20a *g, void *pmumsg); | ||
| 1082 | bool (*pmu_is_lpwr_feature_supported)(struct gk20a *g, | 1084 | bool (*pmu_is_lpwr_feature_supported)(struct gk20a *g, |
| 1083 | u32 feature_id); | 1085 | u32 feature_id); |
| 1084 | int (*pmu_lpwr_enable_pg)(struct gk20a *g, bool pstate_lock); | 1086 | int (*pmu_lpwr_enable_pg)(struct gk20a *g, bool pstate_lock); |
| @@ -1793,6 +1795,8 @@ bool gk20a_check_poweron(struct gk20a *g); | |||
| 1793 | int gk20a_prepare_poweroff(struct gk20a *g); | 1795 | int gk20a_prepare_poweroff(struct gk20a *g); |
| 1794 | int gk20a_finalize_poweron(struct gk20a *g); | 1796 | int gk20a_finalize_poweron(struct gk20a *g); |
| 1795 | 1797 | ||
| 1798 | int nvgpu_wait_for_stall_interrupts(struct gk20a *g, u32 timeout); | ||
| 1799 | int nvgpu_wait_for_nonstall_interrupts(struct gk20a *g, u32 timeout); | ||
| 1796 | void nvgpu_wait_for_deferred_interrupts(struct gk20a *g); | 1800 | void nvgpu_wait_for_deferred_interrupts(struct gk20a *g); |
| 1797 | 1801 | ||
| 1798 | struct gk20a * __must_check gk20a_get(struct gk20a *g); | 1802 | struct gk20a * __must_check gk20a_get(struct gk20a *g); |
diff --git a/include/nvgpu/hw/gk20a/hw_gr_gk20a.h b/include/nvgpu/hw/gk20a/hw_gr_gk20a.h index 826108f..376cc8f 100644 --- a/include/nvgpu/hw/gk20a/hw_gr_gk20a.h +++ b/include/nvgpu/hw/gk20a/hw_gr_gk20a.h | |||
| @@ -1380,6 +1380,10 @@ static inline u32 gr_gpc0_gpccs_ctxsw_status_1_r(void) | |||
| 1380 | { | 1380 | { |
| 1381 | return 0x00502400U; | 1381 | return 0x00502400U; |
| 1382 | } | 1382 | } |
| 1383 | static inline u32 gr_gpc0_gpccs_ctxsw_mailbox__size_1_v(void) | ||
| 1384 | { | ||
| 1385 | return 0x00000010U; | ||
| 1386 | } | ||
| 1383 | static inline u32 gr_fecs_ctxsw_idlestate_r(void) | 1387 | static inline u32 gr_fecs_ctxsw_idlestate_r(void) |
| 1384 | { | 1388 | { |
| 1385 | return 0x00409420U; | 1389 | return 0x00409420U; |
| @@ -3804,4 +3808,61 @@ static inline u32 gr_gpcs_tpcs_sm_dbgr_control0_run_trigger_task_f(void) | |||
| 3804 | { | 3808 | { |
| 3805 | return 0x40000000U; | 3809 | return 0x40000000U; |
| 3806 | } | 3810 | } |
| 3811 | |||
| 3812 | static inline u32 gr_gpc0_gpccs_falcon_irqstat_r(void) | ||
| 3813 | { | ||
| 3814 | return 0x00502008U; | ||
| 3815 | } | ||
| 3816 | static inline u32 gr_gpc0_gpccs_falcon_irqmode_r(void) | ||
| 3817 | { | ||
| 3818 | return 0x0050200cU; | ||
| 3819 | } | ||
| 3820 | static inline u32 gr_gpc0_gpccs_falcon_irqmask_r(void) | ||
| 3821 | { | ||
| 3822 | return 0x00502018U; | ||
| 3823 | } | ||
| 3824 | static inline u32 gr_gpc0_gpccs_falcon_irqdest_r(void) | ||
| 3825 | { | ||
| 3826 | return 0x0050201cU; | ||
| 3827 | } | ||
| 3828 | static inline u32 gr_gpc0_gpccs_falcon_debug1_r(void) | ||
| 3829 | { | ||
| 3830 | return 0x00502090U; | ||
| 3831 | } | ||
| 3832 | static inline u32 gr_gpc0_gpccs_falcon_debuginfo_r(void) | ||
| 3833 | { | ||
| 3834 | return 0x00502094U; | ||
| 3835 | } | ||
| 3836 | static inline u32 gr_gpc0_gpccs_falcon_engctl_r(void) | ||
| 3837 | { | ||
| 3838 | return 0x005020a4U; | ||
| 3839 | } | ||
| 3840 | static inline u32 gr_gpc0_gpccs_falcon_curctx_r(void) | ||
| 3841 | { | ||
| 3842 | return 0x00502050U; | ||
| 3843 | } | ||
| 3844 | static inline u32 gr_gpc0_gpccs_falcon_nxtctx_r(void) | ||
| 3845 | { | ||
| 3846 | return 0x00502054U; | ||
| 3847 | } | ||
| 3848 | static inline u32 gr_gpc0_gpccs_ctxsw_mailbox_r(u32 i) | ||
| 3849 | { | ||
| 3850 | return 0x00502800U + i*4U; | ||
| 3851 | } | ||
| 3852 | static inline u32 gr_gpc0_gpccs_falcon_icd_cmd_r(void) | ||
| 3853 | { | ||
| 3854 | return 0x00502200U; | ||
| 3855 | } | ||
| 3856 | static inline u32 gr_gpc0_gpccs_falcon_icd_cmd_opc_rreg_f(void) | ||
| 3857 | { | ||
| 3858 | return 0x8U; | ||
| 3859 | } | ||
| 3860 | static inline u32 gr_gpc0_gpccs_falcon_icd_cmd_idx_f(u32 v) | ||
| 3861 | { | ||
| 3862 | return (v & 0x1fU) << 8U; | ||
| 3863 | } | ||
| 3864 | static inline u32 gr_gpc_gpccs_falcon_icd_rdata_r(void) | ||
| 3865 | { | ||
| 3866 | return 0x0050220cU; | ||
| 3867 | } | ||
| 3807 | #endif | 3868 | #endif |
diff --git a/include/nvgpu/hw/gm20b/hw_gr_gm20b.h b/include/nvgpu/hw/gm20b/hw_gr_gm20b.h index 5bbb3b9..79ad326 100644 --- a/include/nvgpu/hw/gm20b/hw_gr_gm20b.h +++ b/include/nvgpu/hw/gm20b/hw_gr_gm20b.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (c) 2014-2018, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2014-2023, NVIDIA CORPORATION. All rights reserved. |
| 3 | * | 3 | * |
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
| 5 | * copy of this software and associated documentation files (the "Software"), | 5 | * copy of this software and associated documentation files (the "Software"), |
| @@ -1396,6 +1396,10 @@ static inline u32 gr_gpc0_gpccs_ctxsw_status_1_r(void) | |||
| 1396 | { | 1396 | { |
| 1397 | return 0x00502400U; | 1397 | return 0x00502400U; |
| 1398 | } | 1398 | } |
| 1399 | static inline u32 gr_gpc0_gpccs_ctxsw_mailbox__size_1_v(void) | ||
| 1400 | { | ||
| 1401 | return 0x00000010U; | ||
| 1402 | } | ||
| 1399 | static inline u32 gr_fecs_ctxsw_idlestate_r(void) | 1403 | static inline u32 gr_fecs_ctxsw_idlestate_r(void) |
| 1400 | { | 1404 | { |
| 1401 | return 0x00409420U; | 1405 | return 0x00409420U; |
| @@ -2344,6 +2348,14 @@ static inline u32 gr_gpcs_tpcs_tex_m_dbg2_su_rd_coalesce_en_m(void) | |||
| 2344 | { | 2348 | { |
| 2345 | return 0x1U << 4U; | 2349 | return 0x1U << 4U; |
| 2346 | } | 2350 | } |
| 2351 | static inline u32 gr_gpcs_tpcs_tex_m_dbg2_tex_rd_coalesce_en_f(u32 v) | ||
| 2352 | { | ||
| 2353 | return (v & 0x1U) << 5U; | ||
| 2354 | } | ||
| 2355 | static inline u32 gr_gpcs_tpcs_tex_m_dbg2_tex_rd_coalesce_en_m(void) | ||
| 2356 | { | ||
| 2357 | return 0x1U << 5U; | ||
| 2358 | } | ||
| 2347 | static inline u32 gr_gpccs_falcon_addr_r(void) | 2359 | static inline u32 gr_gpccs_falcon_addr_r(void) |
| 2348 | { | 2360 | { |
| 2349 | return 0x0041a0acU; | 2361 | return 0x0041a0acU; |
diff --git a/include/nvgpu/hw/gp106/hw_gr_gp106.h b/include/nvgpu/hw/gp106/hw_gr_gp106.h index 3ebed7e..ac82901 100644 --- a/include/nvgpu/hw/gp106/hw_gr_gp106.h +++ b/include/nvgpu/hw/gp106/hw_gr_gp106.h | |||
| @@ -1508,6 +1508,10 @@ static inline u32 gr_gpc0_gpccs_ctxsw_status_1_r(void) | |||
| 1508 | { | 1508 | { |
| 1509 | return 0x00502400U; | 1509 | return 0x00502400U; |
| 1510 | } | 1510 | } |
| 1511 | static inline u32 gr_gpc0_gpccs_ctxsw_mailbox__size_1_v(void) | ||
| 1512 | { | ||
| 1513 | return 0x00000010U; | ||
| 1514 | } | ||
| 1511 | static inline u32 gr_fecs_ctxsw_idlestate_r(void) | 1515 | static inline u32 gr_fecs_ctxsw_idlestate_r(void) |
| 1512 | { | 1516 | { |
| 1513 | return 0x00409420U; | 1517 | return 0x00409420U; |
diff --git a/include/nvgpu/hw/gp10b/hw_gr_gp10b.h b/include/nvgpu/hw/gp10b/hw_gr_gp10b.h index f7bc4c2..89c6bba 100644 --- a/include/nvgpu/hw/gp10b/hw_gr_gp10b.h +++ b/include/nvgpu/hw/gp10b/hw_gr_gp10b.h | |||
| @@ -1584,6 +1584,10 @@ static inline u32 gr_gpc0_gpccs_ctxsw_status_1_r(void) | |||
| 1584 | { | 1584 | { |
| 1585 | return 0x00502400U; | 1585 | return 0x00502400U; |
| 1586 | } | 1586 | } |
| 1587 | static inline u32 gr_gpc0_gpccs_ctxsw_mailbox__size_1_v(void) | ||
| 1588 | { | ||
| 1589 | return 0x00000010U; | ||
| 1590 | } | ||
| 1587 | static inline u32 gr_fecs_ctxsw_idlestate_r(void) | 1591 | static inline u32 gr_fecs_ctxsw_idlestate_r(void) |
| 1588 | { | 1592 | { |
| 1589 | return 0x00409420U; | 1593 | return 0x00409420U; |
diff --git a/include/nvgpu/hw/gv100/hw_gr_gv100.h b/include/nvgpu/hw/gv100/hw_gr_gv100.h index 0f83d6b..3955a63 100644 --- a/include/nvgpu/hw/gv100/hw_gr_gv100.h +++ b/include/nvgpu/hw/gv100/hw_gr_gv100.h | |||
| @@ -1816,6 +1816,10 @@ static inline u32 gr_gpc0_gpccs_ctxsw_status_1_r(void) | |||
| 1816 | { | 1816 | { |
| 1817 | return 0x00502400U; | 1817 | return 0x00502400U; |
| 1818 | } | 1818 | } |
| 1819 | static inline u32 gr_gpc0_gpccs_ctxsw_mailbox__size_1_v(void) | ||
| 1820 | { | ||
| 1821 | return 0x00000010U; | ||
| 1822 | } | ||
| 1819 | static inline u32 gr_fecs_ctxsw_idlestate_r(void) | 1823 | static inline u32 gr_fecs_ctxsw_idlestate_r(void) |
| 1820 | { | 1824 | { |
| 1821 | return 0x00409420U; | 1825 | return 0x00409420U; |
diff --git a/include/nvgpu/hw/gv11b/hw_gr_gv11b.h b/include/nvgpu/hw/gv11b/hw_gr_gv11b.h index f7d8089..4a3da79 100644 --- a/include/nvgpu/hw/gv11b/hw_gr_gv11b.h +++ b/include/nvgpu/hw/gv11b/hw_gr_gv11b.h | |||
| @@ -2420,6 +2420,10 @@ static inline u32 gr_gpc0_gpccs_ctxsw_status_1_r(void) | |||
| 2420 | { | 2420 | { |
| 2421 | return 0x00502400U; | 2421 | return 0x00502400U; |
| 2422 | } | 2422 | } |
| 2423 | static inline u32 gr_gpc0_gpccs_ctxsw_mailbox__size_1_v(void) | ||
| 2424 | { | ||
| 2425 | return 0x00000010U; | ||
| 2426 | } | ||
| 2423 | static inline u32 gr_fecs_ctxsw_idlestate_r(void) | 2427 | static inline u32 gr_fecs_ctxsw_idlestate_r(void) |
| 2424 | { | 2428 | { |
| 2425 | return 0x00409420U; | 2429 | return 0x00409420U; |
diff --git a/include/nvgpu/log.h b/include/nvgpu/log.h index 70a1676..2bcca33 100644 --- a/include/nvgpu/log.h +++ b/include/nvgpu/log.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (c) 2017-2018, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2017-2021, NVIDIA CORPORATION. All rights reserved. |
| 3 | * | 3 | * |
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
| 5 | * copy of this software and associated documentation files (the "Software"), | 5 | * copy of this software and associated documentation files (the "Software"), |
| @@ -80,6 +80,7 @@ void __nvgpu_log_dbg(struct gk20a *g, u64 log_mask, | |||
| 80 | #define gpu_dbg_vidmem BIT(24) /* VIDMEM tracing. */ | 80 | #define gpu_dbg_vidmem BIT(24) /* VIDMEM tracing. */ |
| 81 | #define gpu_dbg_nvlink BIT(25) /* nvlink Operation tracing. */ | 81 | #define gpu_dbg_nvlink BIT(25) /* nvlink Operation tracing. */ |
| 82 | #define gpu_dbg_clk_arb BIT(26) /* Clk arbiter debugging. */ | 82 | #define gpu_dbg_clk_arb BIT(26) /* Clk arbiter debugging. */ |
| 83 | #define gpu_dbg_ecc BIT(27) /* Print ECC Info Logs. */ | ||
| 83 | #define gpu_dbg_mem BIT(31) /* memory accesses; very verbose. */ | 84 | #define gpu_dbg_mem BIT(31) /* memory accesses; very verbose. */ |
| 84 | 85 | ||
| 85 | /** | 86 | /** |
diff --git a/include/nvgpu/nvgpu_err.h b/include/nvgpu/nvgpu_err.h new file mode 100644 index 0000000..0595faf --- /dev/null +++ b/include/nvgpu/nvgpu_err.h | |||
| @@ -0,0 +1,359 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. | ||
| 3 | * | ||
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
| 5 | * copy of this software and associated documentation files (the "Software"), | ||
| 6 | * to deal in the Software without restriction, including without limitation | ||
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
| 8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
| 9 | * Software is furnished to do so, subject to the following conditions: | ||
| 10 | * | ||
| 11 | * The above copyright notice and this permission notice shall be included in | ||
| 12 | * all copies or substantial portions of the Software. | ||
| 13 | * | ||
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 17 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||
| 19 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
| 20 | * DEALINGS IN THE SOFTWARE. | ||
| 21 | */ | ||
| 22 | |||
| 23 | #ifndef NVGPU_NVGPU_ERR_H | ||
| 24 | #define NVGPU_NVGPU_ERR_H | ||
| 25 | |||
| 26 | /** | ||
| 27 | * @file | ||
| 28 | * | ||
| 29 | * Define indices for HW units and errors. Define structures used to carry error | ||
| 30 | * information. Declare prototype for APIs that are used to report GPU HW errors | ||
| 31 | * to the Safety_Services framework. | ||
| 32 | */ | ||
| 33 | |||
| 34 | #include <nvgpu/types.h> | ||
| 35 | #include <nvgpu/atomic.h> | ||
| 36 | |||
| 37 | struct gk20a; | ||
| 38 | |||
| 39 | /** | ||
| 40 | * @defgroup INDICES_FOR_GPU_HW_UNITS | ||
| 41 | * Macros used to assign unique index to GPU HW units. | ||
| 42 | * @{ | ||
| 43 | */ | ||
| 44 | #define NVGPU_ERR_MODULE_SM (0U) | ||
| 45 | #define NVGPU_ERR_MODULE_FECS (1U) | ||
| 46 | #define NVGPU_ERR_MODULE_PMU (2U) | ||
| 47 | /** | ||
| 48 | * @} | ||
| 49 | */ | ||
| 50 | |||
| 51 | /** | ||
| 52 | * @defgroup LIST_OF_ERRORS_REPORTED_FROM_SM | ||
| 53 | * Macros used to assign unique index to errors reported from the SM unit. | ||
| 54 | * @{ | ||
| 55 | */ | ||
| 56 | #define GPU_SM_L1_TAG_ECC_CORRECTED (0U) | ||
| 57 | #define GPU_SM_L1_TAG_ECC_UNCORRECTED (1U) | ||
| 58 | #define GPU_SM_CBU_ECC_UNCORRECTED (3U) | ||
| 59 | #define GPU_SM_LRF_ECC_UNCORRECTED (5U) | ||
| 60 | #define GPU_SM_L1_DATA_ECC_UNCORRECTED (7U) | ||
| 61 | #define GPU_SM_ICACHE_L0_DATA_ECC_UNCORRECTED (9U) | ||
| 62 | #define GPU_SM_ICACHE_L1_DATA_ECC_UNCORRECTED (11U) | ||
| 63 | #define GPU_SM_ICACHE_L0_PREDECODE_ECC_UNCORRECTED (13U) | ||
| 64 | #define GPU_SM_L1_TAG_MISS_FIFO_ECC_UNCORRECTED (15U) | ||
| 65 | #define GPU_SM_L1_TAG_S2R_PIXPRF_ECC_UNCORRECTED (17U) | ||
| 66 | #define GPU_SM_ICACHE_L1_PREDECODE_ECC_UNCORRECTED (20U) | ||
| 67 | /** | ||
| 68 | * @} | ||
| 69 | */ | ||
| 70 | |||
| 71 | /** | ||
| 72 | * @defgroup LIST_OF_ERRORS_REPORTED_FROM_FECS | ||
| 73 | * Macros used to assign unique index to errors reported from the FECS unit. | ||
| 74 | * @{ | ||
| 75 | */ | ||
| 76 | #define GPU_FECS_FALCON_IMEM_ECC_CORRECTED (0U) | ||
| 77 | #define GPU_FECS_FALCON_IMEM_ECC_UNCORRECTED (1U) | ||
| 78 | #define GPU_FECS_FALCON_DMEM_ECC_UNCORRECTED (3U) | ||
| 79 | /** | ||
| 80 | * @} | ||
| 81 | */ | ||
| 82 | |||
| 83 | /** | ||
| 84 | * @defgroup LIST_OF_ERRORS_REPORTED_FROM_GPCCS | ||
| 85 | * Macros used to assign unique index to errors reported from the GPCCS unit. | ||
| 86 | * @{ | ||
| 87 | */ | ||
| 88 | #define GPU_GPCCS_FALCON_IMEM_ECC_CORRECTED (0U) | ||
| 89 | #define GPU_GPCCS_FALCON_IMEM_ECC_UNCORRECTED (1U) | ||
| 90 | #define GPU_GPCCS_FALCON_DMEM_ECC_UNCORRECTED (3U) | ||
| 91 | /** | ||
| 92 | * @} | ||
| 93 | */ | ||
| 94 | |||
| 95 | /** | ||
| 96 | * @defgroup LIST_OF_ERRORS_REPORTED_FROM_MMU | ||
| 97 | * Macros used to assign unique index to errors reported from the MMU unit. | ||
| 98 | * @{ | ||
| 99 | */ | ||
| 100 | #define GPU_MMU_L1TLB_SA_DATA_ECC_UNCORRECTED (1U) | ||
| 101 | #define GPU_MMU_L1TLB_FA_DATA_ECC_UNCORRECTED (3U) | ||
| 102 | /** | ||
| 103 | * @} | ||
| 104 | */ | ||
| 105 | |||
| 106 | /** | ||
| 107 | * @defgroup LIST_OF_ERRORS_REPORTED_FROM_GCC | ||
| 108 | * Macros used to assign unique index to errors reported from the GCC unit. | ||
| 109 | * @{ | ||
| 110 | */ | ||
| 111 | #define GPU_GCC_L15_ECC_UNCORRECTED (1U) | ||
| 112 | /** | ||
| 113 | * @} | ||
| 114 | */ | ||
| 115 | |||
| 116 | |||
| 117 | /** | ||
| 118 | * @defgroup LIST_OF_ERRORS_REPORTED_FROM_PMU | ||
| 119 | * Macros used to assign unique index to errors reported from the PMU unit. | ||
| 120 | * @{ | ||
| 121 | */ | ||
| 122 | #define GPU_PMU_FALCON_IMEM_ECC_CORRECTED (0U) | ||
| 123 | #define GPU_PMU_FALCON_IMEM_ECC_UNCORRECTED (1U) | ||
| 124 | #define GPU_PMU_FALCON_DMEM_ECC_UNCORRECTED (3U) | ||
| 125 | /** | ||
| 126 | * @} | ||
| 127 | */ | ||
| 128 | |||
| 129 | /** | ||
| 130 | * @defgroup LIST_OF_ERRORS_REPORTED_FROM_LTC | ||
| 131 | * Macros used to assign unique index to errors reported from the LTC unit. | ||
| 132 | * @{ | ||
| 133 | */ | ||
| 134 | #define GPU_LTC_CACHE_DSTG_ECC_CORRECTED (0U) | ||
| 135 | #define GPU_LTC_CACHE_DSTG_ECC_UNCORRECTED (1U) | ||
| 136 | #define GPU_LTC_CACHE_TSTG_ECC_UNCORRECTED (3U) | ||
| 137 | #define GPU_LTC_CACHE_DSTG_BE_ECC_UNCORRECTED (7U) | ||
| 138 | /** | ||
| 139 | * @} | ||
| 140 | */ | ||
| 141 | |||
| 142 | /** | ||
| 143 | * @defgroup LIST_OF_ERRORS_REPORTED_FROM_HUBMMU | ||
| 144 | * Macros used to assign unique index to errors reported from the HUBMMU unit. | ||
| 145 | * @{ | ||
| 146 | */ | ||
| 147 | #define GPU_HUBMMU_L2TLB_SA_DATA_ECC_UNCORRECTED (1U) | ||
| 148 | #define GPU_HUBMMU_TLB_SA_DATA_ECC_UNCORRECTED (3U) | ||
| 149 | #define GPU_HUBMMU_PTE_DATA_ECC_UNCORRECTED (5U) | ||
| 150 | #define GPU_HUBMMU_PDE0_DATA_ECC_UNCORRECTED (7U) | ||
| 151 | #define GPU_HUBMMU_PAGE_FAULT_ERROR (8U) | ||
| 152 | |||
| 153 | |||
| 154 | #ifdef CONFIG_NVGPU_SUPPORT_LINUX_ECC_ERROR_REPORTING | ||
| 155 | /** | ||
| 156 | * @} | ||
| 157 | */ | ||
| 158 | |||
| 159 | /** | ||
| 160 | * nvgpu_err_desc structure holds fields which describe an error along with | ||
| 161 | * function callback which can be used to inject the error. | ||
| 162 | */ | ||
| 163 | struct nvgpu_err_desc { | ||
| 164 | /** String representation of error. */ | ||
| 165 | const char *name; | ||
| 166 | |||
| 167 | /** Flag to classify an error as critical or non-critical. */ | ||
| 168 | bool is_critical; | ||
| 169 | |||
| 170 | /** | ||
| 171 | * Error Threshold: once this threshold value is reached, then the | ||
| 172 | * corresponding error counter will be reset to 0 and the error will be | ||
| 173 | * propagated to Safety_Services. | ||
| 174 | */ | ||
| 175 | int err_threshold; | ||
| 176 | |||
| 177 | /** | ||
| 178 | * Total number of times an error has occurred (since its last reset). | ||
| 179 | */ | ||
| 180 | nvgpu_atomic_t err_count; | ||
| 181 | |||
| 182 | /** Error ID. */ | ||
| 183 | u8 error_id; | ||
| 184 | }; | ||
| 185 | |||
| 186 | /** | ||
| 187 | * gpu_err_header structure holds fields which are required to identify the | ||
| 188 | * version of header, sub-error type, sub-unit id, error address and time stamp. | ||
| 189 | */ | ||
| 190 | struct gpu_err_header { | ||
| 191 | /** Version of GPU error header. */ | ||
| 192 | struct { | ||
| 193 | /** Major version number. */ | ||
| 194 | u16 major; | ||
| 195 | /** Minor version number. */ | ||
| 196 | u16 minor; | ||
| 197 | } version; | ||
| 198 | |||
| 199 | /** Sub error type corresponding to the error that is being reported. */ | ||
| 200 | u32 sub_err_type; | ||
| 201 | |||
| 202 | /** ID of the sub-unit in a HW unit which encountered an error. */ | ||
| 203 | u64 sub_unit_id; | ||
| 204 | |||
| 205 | /** Location of the error. */ | ||
| 206 | u64 address; | ||
| 207 | |||
| 208 | /** Timestamp in nano seconds. */ | ||
| 209 | u64 timestamp_ns; | ||
| 210 | }; | ||
| 211 | |||
| 212 | struct gpu_ecc_error_info { | ||
| 213 | struct gpu_err_header header; | ||
| 214 | |||
| 215 | /** Number of ECC errors. */ | ||
| 216 | u64 err_cnt; | ||
| 217 | }; | ||
| 218 | |||
| 219 | /** | ||
| 220 | * nvgpu_err_hw_module structure holds fields which describe the h/w modules | ||
| 221 | * error reporting capabilities. | ||
| 222 | */ | ||
| 223 | struct nvgpu_err_hw_module { | ||
| 224 | /** String representation of a given HW unit. */ | ||
| 225 | const char *name; | ||
| 226 | |||
| 227 | /** HW unit ID. */ | ||
| 228 | u32 hw_unit; | ||
| 229 | |||
| 230 | /** Total number of errors reported from a given HW unit. */ | ||
| 231 | u32 num_errs; | ||
| 232 | |||
| 233 | u32 base_ecc_service_id; | ||
| 234 | |||
| 235 | /** Used to get error description from look-up table. */ | ||
| 236 | struct nvgpu_err_desc *errs; | ||
| 237 | }; | ||
| 238 | |||
| 239 | struct nvgpu_ecc_reporting_ops { | ||
| 240 | void (*report_ecc_err)(struct gk20a *g, u32 hw_unit, u32 inst, | ||
| 241 | u32 err_id, u64 err_addr, u64 err_count); | ||
| 242 | }; | ||
| 243 | |||
| 244 | struct nvgpu_ecc_reporting { | ||
| 245 | struct nvgpu_spinlock lock; | ||
| 246 | /* This flag is protected by the above spinlock */ | ||
| 247 | bool ecc_reporting_service_enabled; | ||
| 248 | const struct nvgpu_ecc_reporting_ops *ops; | ||
| 249 | }; | ||
| 250 | |||
| 251 | /** | ||
| 252 | * This macro is used to initialize the members of nvgpu_err_desc struct. | ||
| 253 | */ | ||
| 254 | #define GPU_ERR(err, critical, id, threshold, ecount) \ | ||
| 255 | { \ | ||
| 256 | .name = (err), \ | ||
| 257 | .is_critical = (critical), \ | ||
| 258 | .error_id = (id), \ | ||
| 259 | .err_threshold = (threshold), \ | ||
| 260 | .err_count = NVGPU_ATOMIC_INIT(ecount), \ | ||
| 261 | } | ||
| 262 | |||
| 263 | /** | ||
| 264 | * This macro is used to initialize critical errors. | ||
| 265 | */ | ||
| 266 | #define GPU_CRITERR(err, id, threshold, ecount) \ | ||
| 267 | GPU_ERR(err, true, id, threshold, ecount) | ||
| 268 | |||
| 269 | /** | ||
| 270 | * This macro is used to initialize non-critical errors. | ||
| 271 | */ | ||
| 272 | #define GPU_NONCRITERR(err, id, threshold, ecount) \ | ||
| 273 | GPU_ERR(err, false, id, threshold, ecount) | ||
| 274 | |||
| 275 | /** | ||
| 276 | * @brief GPU HW errors need to be reported to Safety_Services via SDL unit. | ||
| 277 | * This function provides an interface to report ECC erros to SDL unit. | ||
| 278 | * | ||
| 279 | * @param g [in] - The GPU driver struct. | ||
| 280 | * @param hw_unit [in] - Index of HW unit. | ||
| 281 | * - List of valid HW unit IDs | ||
| 282 | * - NVGPU_ERR_MODULE_SM | ||
| 283 | * - NVGPU_ERR_MODULE_FECS | ||
| 284 | * - NVGPU_ERR_MODULE_GPCCS | ||
| 285 | * - NVGPU_ERR_MODULE_MMU | ||
| 286 | * - NVGPU_ERR_MODULE_GCC | ||
| 287 | * - NVGPU_ERR_MODULE_PMU | ||
| 288 | * - NVGPU_ERR_MODULE_LTC | ||
| 289 | * - NVGPU_ERR_MODULE_HUBMMU | ||
| 290 | * @param inst [in] - Instance ID. | ||
| 291 | * - In case of multiple instances of the same HW | ||
| 292 | * unit (e.g., there are multiple instances of | ||
| 293 | * SM), it is used to identify the instance | ||
| 294 | * that encountered a fault. | ||
| 295 | * @param err_id [in] - Error index. | ||
| 296 | * - For SM: | ||
| 297 | * - Min: GPU_SM_L1_TAG_ECC_CORRECTED | ||
| 298 | * - Max: GPU_SM_ICACHE_L1_PREDECODE_ECC_UNCORRECTED | ||
| 299 | * - For FECS: | ||
| 300 | * - Min: GPU_FECS_FALCON_IMEM_ECC_CORRECTED | ||
| 301 | * - Max: GPU_FECS_INVALID_ERROR | ||
| 302 | * - For GPCCS: | ||
| 303 | * - Min: GPU_GPCCS_FALCON_IMEM_ECC_CORRECTED | ||
| 304 | * - Max: GPU_GPCCS_FALCON_DMEM_ECC_UNCORRECTED | ||
| 305 | * - For MMU: | ||
| 306 | * - Min: GPU_MMU_L1TLB_SA_DATA_ECC_UNCORRECTED | ||
| 307 | * - Max: GPU_MMU_L1TLB_FA_DATA_ECC_UNCORRECTED | ||
| 308 | * - For GCC: | ||
| 309 | * - Min: GPU_GCC_L15_ECC_UNCORRECTED | ||
| 310 | * - Max: GPU_GCC_L15_ECC_UNCORRECTED | ||
| 311 | * - For PMU: | ||
| 312 | * - Min: GPU_PMU_FALCON_IMEM_ECC_CORRECTED | ||
| 313 | * - Max: GPU_PMU_FALCON_DMEM_ECC_UNCORRECTED | ||
| 314 | * - For LTC: | ||
| 315 | * - Min: GPU_LTC_CACHE_DSTG_ECC_CORRECTED | ||
| 316 | * - Max: GPU_LTC_CACHE_DSTG_BE_ECC_UNCORRECTED | ||
| 317 | * - For HUBMMU: | ||
| 318 | * - Min: GPU_HUBMMU_L2TLB_SA_DATA_ECC_UNCORRECTED | ||
| 319 | * - Max: GPU_HUBMMU_PDE0_DATA_ECC_UNCORRECTED | ||
| 320 | * @param err_addr [in] - Error address. | ||
| 321 | * - This is the location at which correctable or | ||
| 322 | * uncorrectable error has occurred. | ||
| 323 | * @param err_count [in] - Error count. | ||
| 324 | * | ||
| 325 | * - Checks whether SDL is supported in the current GPU platform. If SDL is not | ||
| 326 | * supported, it simply returns. | ||
| 327 | * - Validates both \a hw_unit and \a err_id indices. In case of a failure, | ||
| 328 | * invokes #nvgpu_sdl_handle_report_failure() api. | ||
| 329 | * - Gets the current time of a clock. In case of a failure, invokes | ||
| 330 | * #nvgpu_sdl_handle_report_failure() api. | ||
| 331 | * - Gets error description from internal look-up table using \a hw_unit and | ||
| 332 | * \a err_id indices. | ||
| 333 | * - Forms error packet using details such as time-stamp, \a hw_unit, \a err_id, | ||
| 334 | * criticality of the error, \a inst, \a err_addr, \a err_count, error | ||
| 335 | * description, and size of the error packet. | ||
| 336 | * - Performs compile-time assert check to ensure that the size of the error | ||
| 337 | * packet does not exceed the maximum allowable size specified in | ||
| 338 | * #MAX_ERR_MSG_SIZE. | ||
| 339 | * | ||
| 340 | * @return None | ||
| 341 | */ | ||
| 342 | void nvgpu_report_ecc_err(struct gk20a *g, u32 hw_unit, u32 inst, | ||
| 343 | u32 err_id, u64 err_addr, u64 err_count); | ||
| 344 | |||
| 345 | void nvgpu_init_ecc_reporting(struct gk20a *g); | ||
| 346 | void nvgpu_enable_ecc_reporting(struct gk20a *g); | ||
| 347 | void nvgpu_disable_ecc_reporting(struct gk20a *g); | ||
| 348 | void nvgpu_deinit_ecc_reporting(struct gk20a *g); | ||
| 349 | |||
| 350 | #else | ||
| 351 | |||
| 352 | static inline void nvgpu_report_ecc_err(struct gk20a *g, u32 hw_unit, u32 inst, | ||
| 353 | u32 err_id, u64 err_addr, u64 err_count) { | ||
| 354 | |||
| 355 | } | ||
| 356 | |||
| 357 | #endif /* CONFIG_NVGPU_SUPPORT_LINUX_ECC_ERROR_REPORTING */ | ||
| 358 | |||
| 359 | #endif /* NVGPU_NVGPU_ERR_H */ \ No newline at end of file | ||
diff --git a/include/nvgpu/nvlink.h b/include/nvgpu/nvlink.h index 26c83f1..a74111c 100644 --- a/include/nvgpu/nvlink.h +++ b/include/nvgpu/nvlink.h | |||
| @@ -26,7 +26,7 @@ | |||
| 26 | #include <nvgpu/types.h> | 26 | #include <nvgpu/types.h> |
| 27 | 27 | ||
| 28 | #ifdef __KERNEL__ | 28 | #ifdef __KERNEL__ |
| 29 | //#include <nvgpu/linux/nvlink.h> | 29 | #include <nvgpu/linux/nvlink.h> |
| 30 | #elif defined(__NVGPU_POSIX__) | 30 | #elif defined(__NVGPU_POSIX__) |
| 31 | #include <nvgpu/posix/nvlink.h> | 31 | #include <nvgpu/posix/nvlink.h> |
| 32 | #else | 32 | #else |
diff --git a/include/nvgpu/pmu.h b/include/nvgpu/pmu.h index 2b745c7..fb1b016 100644 --- a/include/nvgpu/pmu.h +++ b/include/nvgpu/pmu.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (c) 2017-2019, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2017-2022, NVIDIA CORPORATION. All rights reserved. |
| 3 | * | 3 | * |
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
| 5 | * copy of this software and associated documentation files (the "Software"), | 5 | * copy of this software and associated documentation files (the "Software"), |
| @@ -94,6 +94,23 @@ | |||
| 94 | #define PMU_STATE_STARTED 7U /* Fully unitialized */ | 94 | #define PMU_STATE_STARTED 7U /* Fully unitialized */ |
| 95 | #define PMU_STATE_EXIT 8U /* Exit PMU state machine */ | 95 | #define PMU_STATE_EXIT 8U /* Exit PMU state machine */ |
| 96 | 96 | ||
| 97 | /* state transition : | ||
| 98 | * OFF => [OFF_ON_PENDING optional] => ON_PENDING => ON => OFF | ||
| 99 | * ON => OFF is always synchronized | ||
| 100 | */ | ||
| 101 | /* elpg is off */ | ||
| 102 | #define PMU_ELPG_STAT_OFF 0U | ||
| 103 | /* elpg is on */ | ||
| 104 | #define PMU_ELPG_STAT_ON 1U | ||
| 105 | /* elpg is off, ALLOW cmd has been sent, wait for ack */ | ||
| 106 | #define PMU_ELPG_STAT_ON_PENDING 2U | ||
| 107 | /* elpg is on, DISALLOW cmd has been sent, wait for ack */ | ||
| 108 | #define PMU_ELPG_STAT_OFF_PENDING 3U | ||
| 109 | /* elpg is off, caller has requested on, but ALLOW | ||
| 110 | * cmd hasn't been sent due to ENABLE_ALLOW delay | ||
| 111 | */ | ||
| 112 | #define PMU_ELPG_STAT_OFF_ON_PENDING 4U | ||
| 113 | |||
| 97 | #define GK20A_PMU_UCODE_NB_MAX_OVERLAY 32U | 114 | #define GK20A_PMU_UCODE_NB_MAX_OVERLAY 32U |
| 98 | #define GK20A_PMU_UCODE_NB_MAX_DATE_LENGTH 64U | 115 | #define GK20A_PMU_UCODE_NB_MAX_DATE_LENGTH 64U |
| 99 | 116 | ||
| @@ -351,6 +368,7 @@ struct nvgpu_pmu { | |||
| 351 | u32 stat_dmem_offset[PMU_PG_ELPG_ENGINE_ID_INVALID_ENGINE]; | 368 | u32 stat_dmem_offset[PMU_PG_ELPG_ENGINE_ID_INVALID_ENGINE]; |
| 352 | 369 | ||
| 353 | u32 elpg_stat; | 370 | u32 elpg_stat; |
| 371 | u32 disallow_state; | ||
| 354 | 372 | ||
| 355 | u32 mscg_stat; | 373 | u32 mscg_stat; |
| 356 | u32 mscg_transition_state; | 374 | u32 mscg_transition_state; |
diff --git a/include/nvgpu/pmuif/gpmuif_pg.h b/include/nvgpu/pmuif/gpmuif_pg.h index 69a7ea4..58311ae 100644 --- a/include/nvgpu/pmuif/gpmuif_pg.h +++ b/include/nvgpu/pmuif/gpmuif_pg.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (c) 2017-2018, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2017-2022, NVIDIA CORPORATION. All rights reserved. |
| 3 | * | 3 | * |
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
| 5 | * copy of this software and associated documentation files (the "Software"), | 5 | * copy of this software and associated documentation files (the "Software"), |
| @@ -33,6 +33,11 @@ | |||
| 33 | #define PMU_PG_ELPG_ENGINE_ID_INVALID_ENGINE (0x00000005U) | 33 | #define PMU_PG_ELPG_ENGINE_ID_INVALID_ENGINE (0x00000005U) |
| 34 | #define PMU_PG_ELPG_ENGINE_MAX PMU_PG_ELPG_ENGINE_ID_INVALID_ENGINE | 34 | #define PMU_PG_ELPG_ENGINE_MAX PMU_PG_ELPG_ENGINE_ID_INVALID_ENGINE |
| 35 | 35 | ||
| 36 | /* Async PG message IDs */ | ||
| 37 | enum { | ||
| 38 | PMU_PG_MSG_ASYNC_CMD_DISALLOW, | ||
| 39 | }; | ||
| 40 | |||
| 36 | /* PG message */ | 41 | /* PG message */ |
| 37 | enum { | 42 | enum { |
| 38 | PMU_PG_ELPG_MSG_INIT_ACK, | 43 | PMU_PG_ELPG_MSG_INIT_ACK, |
| @@ -73,12 +78,19 @@ struct pmu_pg_msg_eng_buf_stat { | |||
| 73 | u8 status; | 78 | u8 status; |
| 74 | }; | 79 | }; |
| 75 | 80 | ||
| 81 | struct pmu_pg_msg_async_cmd_resp { | ||
| 82 | u8 msg_type; | ||
| 83 | u8 ctrl_id; | ||
| 84 | u8 msg_id; | ||
| 85 | }; | ||
| 86 | |||
| 76 | struct pmu_pg_msg { | 87 | struct pmu_pg_msg { |
| 77 | union { | 88 | union { |
| 78 | u8 msg_type; | 89 | u8 msg_type; |
| 79 | struct pmu_pg_msg_elpg_msg elpg_msg; | 90 | struct pmu_pg_msg_elpg_msg elpg_msg; |
| 80 | struct pmu_pg_msg_stat stat; | 91 | struct pmu_pg_msg_stat stat; |
| 81 | struct pmu_pg_msg_eng_buf_stat eng_buf_stat; | 92 | struct pmu_pg_msg_eng_buf_stat eng_buf_stat; |
| 93 | struct pmu_pg_msg_async_cmd_resp async_cmd_resp; | ||
| 82 | /* TBD: other pg messages */ | 94 | /* TBD: other pg messages */ |
| 83 | union pmu_ap_msg ap_msg; | 95 | union pmu_ap_msg ap_msg; |
| 84 | struct nv_pmu_rppg_msg rppg_msg; | 96 | struct nv_pmu_rppg_msg rppg_msg; |
diff --git a/include/nvgpu/tsg.h b/include/nvgpu/tsg.h index 7cd97c9..f5391e7 100644 --- a/include/nvgpu/tsg.h +++ b/include/nvgpu/tsg.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (c) 2014-2020, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2014-2021, NVIDIA CORPORATION. All rights reserved. |
| 3 | * | 3 | * |
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
| 5 | * copy of this software and associated documentation files (the "Software"), | 5 | * copy of this software and associated documentation files (the "Software"), |
| @@ -90,7 +90,7 @@ int gk20a_enable_tsg(struct tsg_gk20a *tsg); | |||
| 90 | int gk20a_disable_tsg(struct tsg_gk20a *tsg); | 90 | int gk20a_disable_tsg(struct tsg_gk20a *tsg); |
| 91 | int gk20a_tsg_bind_channel(struct tsg_gk20a *tsg, | 91 | int gk20a_tsg_bind_channel(struct tsg_gk20a *tsg, |
| 92 | struct channel_gk20a *ch); | 92 | struct channel_gk20a *ch); |
| 93 | int gk20a_tsg_unbind_channel(struct channel_gk20a *ch); | 93 | int gk20a_tsg_unbind_channel(struct channel_gk20a *ch, bool force); |
| 94 | 94 | ||
| 95 | void gk20a_tsg_event_id_post_event(struct tsg_gk20a *tsg, | 95 | void gk20a_tsg_event_id_post_event(struct tsg_gk20a *tsg, |
| 96 | int event_id); | 96 | int event_id); |
