summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
diff options
context:
space:
mode:
authorVijayakumar <vsubbu@nvidia.com>2014-09-30 10:49:44 -0400
committerDan Willemsen <dwillemsen@nvidia.com>2015-03-18 15:11:52 -0400
commit748475df20bbe6843bdf4fbc02384dc5aa28866e (patch)
tree700012cf758d6731017b8b23153abae4311bf065 /drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
parent4739499f07b29282ee1031d08adaa76c238da2a6 (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.h90
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
295enum { 294enum {
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
647enum {
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 */
655struct 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 */
665struct 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
674struct 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 */
703struct pmu_acr_msg_bootstrap_falcon {
704 u8 msg_type;
705 union {
706 u32 errorcode;
707 u32 falconid;
708 };
709};
710
711struct 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,
1145int gk20a_aelpg_init(struct gk20a *g); 1229int gk20a_aelpg_init(struct gk20a *g);
1146int gk20a_aelpg_init_and_enable(struct gk20a *g, u8 ctrl_id); 1230int gk20a_aelpg_init_and_enable(struct gk20a *g, u8 ctrl_id);
1147void pmu_enable_irq(struct pmu_gk20a *pmu, bool enable); 1231void pmu_enable_irq(struct pmu_gk20a *pmu, bool enable);
1232int 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__*/