diff options
author | Vijayakumar <vsubbu@nvidia.com> | 2014-09-30 10:49:44 -0400 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-03-18 15:11:52 -0400 |
commit | 748475df20bbe6843bdf4fbc02384dc5aa28866e (patch) | |
tree | 700012cf758d6731017b8b23153abae4311bf065 /drivers/gpu/nvgpu/gk20a/pmu_gk20a.h | |
parent | 4739499f07b29282ee1031d08adaa76c238da2a6 (diff) |
gpu: nvgpu: gm20b: Support secure FECS recovery
When falcons are secured use PMU commands to reload
FECS firmware.
Bug 200042729
Change-Id: I09f2472b16dac6a510dba067bce3950075973d5f
Signed-off-by: Vijayakumar <vsubbu@nvidia.com>
Reviewed-on: http://git-master/r/552544
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/pmu_gk20a.h')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/pmu_gk20a.h | 90 |
1 files changed, 88 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h index 6dd1ad3b..823f5484 100644 --- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h | |||
@@ -291,7 +291,6 @@ struct pmu_ap { | |||
291 | struct ap_ctrl ap_ctrl[PMU_AP_CTRL_ID_MAX]; | 291 | struct ap_ctrl ap_ctrl[PMU_AP_CTRL_ID_MAX]; |
292 | }; | 292 | }; |
293 | 293 | ||
294 | |||
295 | enum { | 294 | enum { |
296 | GK20A_PMU_DMAIDX_UCODE = 0, | 295 | GK20A_PMU_DMAIDX_UCODE = 0, |
297 | GK20A_PMU_DMAIDX_VIRT = 1, | 296 | GK20A_PMU_DMAIDX_VIRT = 1, |
@@ -390,7 +389,7 @@ struct pmu_ucode_desc { | |||
390 | #define PMU_UNIT_INIT (0x07) | 389 | #define PMU_UNIT_INIT (0x07) |
391 | #define PMU_UNIT_FBBA (0x08) | 390 | #define PMU_UNIT_FBBA (0x08) |
392 | #define PMU_UNIT_DIDLE (0x09) | 391 | #define PMU_UNIT_DIDLE (0x09) |
393 | #define PMU_UNIT_AVAILABLE3 (0x0A) | 392 | #define PMU_UNIT_ACR (0x0A) |
394 | #define PMU_UNIT_AVAILABLE4 (0x0B) | 393 | #define PMU_UNIT_AVAILABLE4 (0x0B) |
395 | #define PMU_UNIT_HDCP_MAIN (0x0C) | 394 | #define PMU_UNIT_HDCP_MAIN (0x0C) |
396 | #define PMU_UNIT_HDCP_V (0x0D) | 395 | #define PMU_UNIT_HDCP_V (0x0D) |
@@ -643,6 +642,89 @@ struct pmu_pg_cmd { | |||
643 | }; | 642 | }; |
644 | }; | 643 | }; |
645 | 644 | ||
645 | /* ACR Commands/Message structures */ | ||
646 | |||
647 | enum { | ||
648 | PMU_ACR_CMD_ID_INIT_WPR_REGION = 0x0 , | ||
649 | PMU_ACR_CMD_ID_BOOTSTRAP_FALCON, | ||
650 | }; | ||
651 | |||
652 | /* | ||
653 | * Initializes the WPR region details | ||
654 | */ | ||
655 | struct pmu_acr_cmd_init_wpr_details { | ||
656 | u8 cmd_type; | ||
657 | u32 regionid; | ||
658 | u32 wproffset; | ||
659 | |||
660 | }; | ||
661 | |||
662 | /* | ||
663 | * falcon ID to bootstrap | ||
664 | */ | ||
665 | struct pmu_acr_cmd_bootstrap_falcon { | ||
666 | u8 cmd_type; | ||
667 | u32 flags; | ||
668 | u32 falconid; | ||
669 | }; | ||
670 | |||
671 | #define PMU_ACR_CMD_BOOTSTRAP_FALCON_FLAGS_RESET_NO 1 | ||
672 | #define PMU_ACR_CMD_BOOTSTRAP_FALCON_FLAGS_RESET_YES 0 | ||
673 | |||
674 | struct pmu_acr_cmd { | ||
675 | union { | ||
676 | u8 cmd_type; | ||
677 | struct pmu_acr_cmd_bootstrap_falcon bootstrap_falcon; | ||
678 | struct pmu_acr_cmd_init_wpr_details init_wpr; | ||
679 | }; | ||
680 | }; | ||
681 | |||
682 | /* acr messages */ | ||
683 | |||
684 | /* | ||
685 | * returns the WPR region init information | ||
686 | */ | ||
687 | #define PMU_ACR_MSG_ID_INIT_WPR_REGION 0 | ||
688 | |||
689 | /* | ||
690 | * Returns the Bootstrapped falcon ID to RM | ||
691 | */ | ||
692 | #define PMU_ACR_MSG_ID_BOOTSTRAP_FALCON 1 | ||
693 | |||
694 | /* | ||
695 | * Returns the WPR init status | ||
696 | */ | ||
697 | #define PMU_ACR_SUCCESS 0 | ||
698 | #define PMU_ACR_ERROR 1 | ||
699 | |||
700 | /* | ||
701 | * PMU notifies about bootstrap status of falcon | ||
702 | */ | ||
703 | struct pmu_acr_msg_bootstrap_falcon { | ||
704 | u8 msg_type; | ||
705 | union { | ||
706 | u32 errorcode; | ||
707 | u32 falconid; | ||
708 | }; | ||
709 | }; | ||
710 | |||
711 | struct pmu_acr_msg { | ||
712 | union { | ||
713 | u8 msg_type; | ||
714 | struct pmu_acr_msg_bootstrap_falcon acrmsg; | ||
715 | }; | ||
716 | }; | ||
717 | |||
718 | /***************************** ACR ERROR CODES ******************************/ | ||
719 | /*! | ||
720 | * Error codes used in PMU-ACR Task | ||
721 | * | ||
722 | * LSF_ACR_INVALID_TRANSCFG_SETUP : Indicates that TRANSCFG Setup is not valid | ||
723 | * MAILBOX1 returns the CTXDMA ID of invalid setup | ||
724 | * | ||
725 | */ | ||
726 | #define ACR_ERROR_INVALID_TRANSCFG_SETUP (0xAC120001) | ||
727 | |||
646 | /* PERFMON */ | 728 | /* PERFMON */ |
647 | #define PMU_DOMAIN_GROUP_PSTATE 0 | 729 | #define PMU_DOMAIN_GROUP_PSTATE 0 |
648 | #define PMU_DOMAIN_GROUP_GPC2CLK 1 | 730 | #define PMU_DOMAIN_GROUP_GPC2CLK 1 |
@@ -770,6 +852,7 @@ struct pmu_cmd { | |||
770 | struct pmu_perfmon_cmd perfmon; | 852 | struct pmu_perfmon_cmd perfmon; |
771 | struct pmu_pg_cmd pg; | 853 | struct pmu_pg_cmd pg; |
772 | struct pmu_zbc_cmd zbc; | 854 | struct pmu_zbc_cmd zbc; |
855 | struct pmu_acr_cmd acr; | ||
773 | } cmd; | 856 | } cmd; |
774 | }; | 857 | }; |
775 | 858 | ||
@@ -780,6 +863,7 @@ struct pmu_msg { | |||
780 | struct pmu_perfmon_msg perfmon; | 863 | struct pmu_perfmon_msg perfmon; |
781 | struct pmu_pg_msg pg; | 864 | struct pmu_pg_msg pg; |
782 | struct pmu_rc_msg rc; | 865 | struct pmu_rc_msg rc; |
866 | struct pmu_acr_msg acr; | ||
783 | } msg; | 867 | } msg; |
784 | }; | 868 | }; |
785 | 869 | ||
@@ -1145,4 +1229,6 @@ int gk20a_pmu_ap_send_command(struct gk20a *g, | |||
1145 | int gk20a_aelpg_init(struct gk20a *g); | 1229 | int gk20a_aelpg_init(struct gk20a *g); |
1146 | int gk20a_aelpg_init_and_enable(struct gk20a *g, u8 ctrl_id); | 1230 | int gk20a_aelpg_init_and_enable(struct gk20a *g, u8 ctrl_id); |
1147 | void pmu_enable_irq(struct pmu_gk20a *pmu, bool enable); | 1231 | void pmu_enable_irq(struct pmu_gk20a *pmu, bool enable); |
1232 | int pmu_wait_message_cond(struct pmu_gk20a *pmu, u32 timeout, | ||
1233 | u32 *var, u32 val); | ||
1148 | #endif /*__PMU_GK20A_H__*/ | 1234 | #endif /*__PMU_GK20A_H__*/ |