summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gp106/sec2_gp106.c
diff options
context:
space:
mode:
authorMahantesh Kumbar <mkumbar@nvidia.com>2018-06-20 14:42:01 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-07-10 02:40:10 -0400
commit4cd59404a2d4ab1c31605d96cff848dd4e93c3b4 (patch)
tree24884407db02f117d90cccb28b9e713731f18274 /drivers/gpu/nvgpu/gp106/sec2_gp106.c
parent876953fbb85f9440bbcc1d7d59435593886b53c4 (diff)
gpu: nvgpu: falcon code cleanup
-Created common falcon function nvgpu_flcn_bl_bootstrap() to bootstrap falcon bootloader -Created HAL gk20a_falcon_bl_bootstrap() which does actual bootloader bootstrap by fetching parameters and loading code/parameters as needed. -Created HAL ops bl_bootstrap under nvgpu_falcon_ops. -Created struct nvgpu_falcon_bl_info to hold info required for bootloader to pass to common function -Removed falcons bootstrap code in multiple file & made changes to fill struct nvgpu_falcon_bl_info & call nvgpu_flcn_bl_bootstrap(). Change-Id: Iee275233915ff11f9afb5207ac0c3338ca9dacc1 Signed-off-by: Mahantesh Kumbar <mkumbar@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1756104 Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> Reviewed-by: svc-misra-checker <svc-misra-checker@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gp106/sec2_gp106.c')
-rw-r--r--drivers/gpu/nvgpu/gp106/sec2_gp106.c30
1 files changed, 7 insertions, 23 deletions
diff --git a/drivers/gpu/nvgpu/gp106/sec2_gp106.c b/drivers/gpu/nvgpu/gp106/sec2_gp106.c
index d480d875..29fc2df0 100644
--- a/drivers/gpu/nvgpu/gp106/sec2_gp106.c
+++ b/drivers/gpu/nvgpu/gp106/sec2_gp106.c
@@ -82,12 +82,9 @@ int bl_bootstrap_sec2(struct nvgpu_pmu *pmu,
82 void *desc, u32 bl_sz) 82 void *desc, u32 bl_sz)
83{ 83{
84 struct gk20a *g = gk20a_from_pmu(pmu); 84 struct gk20a *g = gk20a_from_pmu(pmu);
85 struct acr_desc *acr = &g->acr;
86 struct mm_gk20a *mm = &g->mm; 85 struct mm_gk20a *mm = &g->mm;
87 u32 virt_addr = 0; 86 struct nvgpu_falcon_bl_info bl_info;
88 struct hsflcn_bl_desc *pmu_bl_gm10x_desc = g->acr.pmu_hsbl_desc;
89 u32 data = 0; 87 u32 data = 0;
90 u32 dst;
91 88
92 nvgpu_log_fn(g, " "); 89 nvgpu_log_fn(g, " ");
93 90
@@ -113,25 +110,12 @@ int bl_bootstrap_sec2(struct nvgpu_pmu *pmu,
113 data |= (1 << 3); 110 data |= (1 << 3);
114 gk20a_writel(g, psec_falcon_engctl_r(), data); 111 gk20a_writel(g, psec_falcon_engctl_r(), data);
115 112
116 /*copy bootloader interface structure to dmem*/ 113 bl_info.bl_src = g->acr.hsbl_ucode.cpu_va;
117 nvgpu_flcn_copy_to_dmem(&g->sec2_flcn, 0, (u8 *)desc, 114 bl_info.bl_desc = desc;
118 sizeof(struct flcn_bl_dmem_desc), 0); 115 bl_info.bl_desc_size = sizeof(struct flcn_bl_dmem_desc_v1);
119 116 bl_info.bl_size = bl_sz;
120 /* copy bootloader to TOP of IMEM */ 117 bl_info.bl_start_tag = g->acr.pmu_hsbl_desc->bl_start_tag;
121 dst = (psec_falcon_hwcfg_imem_size_v( 118 nvgpu_flcn_bl_bootstrap(&g->sec2_flcn, &bl_info);
122 gk20a_readl(g, psec_falcon_hwcfg_r())) << 8) - bl_sz;
123
124 nvgpu_flcn_copy_to_imem(&g->sec2_flcn, dst,
125 (u8 *)(acr->hsbl_ucode.cpu_va), bl_sz, 0, 0,
126 pmu_bl_gm10x_desc->bl_start_tag);
127
128 gm20b_dbg_pmu(g, "Before starting falcon with BL\n");
129
130 gk20a_writel(g, psec_falcon_mailbox0_r(), 0xDEADA5A5);
131
132 virt_addr = pmu_bl_gm10x_desc->bl_start_tag << 8;
133
134 nvgpu_flcn_bootstrap(&g->sec2_flcn, virt_addr);
135 119
136 return 0; 120 return 0;
137} 121}