summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gp106/bios_gp106.c
diff options
context:
space:
mode:
authorDavid Nieto <dmartineznie@nvidia.com>2017-08-08 15:50:55 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-10-10 15:05:42 -0400
commit7c5cf70268ca038f85686fbdec29729d1a9024c1 (patch)
treebc30b8e724addb367b50fbd1cd4eaa994fa30bb4 /drivers/gpu/nvgpu/gp106/bios_gp106.c
parentbf8dca77aee16b98a89e8ef5491907f2a791f1ff (diff)
gpu: nvgpu: add support for pre-os FW
Pre-os firmware takes care, among others, of the control of FAN till the driver takes over its control. On some GPUs not enabling this FW can lead tp physical board damage, hence it is needed to run this firmware. JIRA: NVGPUGV100-9 Change-Id: I18d54cfd5eb64ecec79c5dae67ac8d5bb1facf36 Signed-off-by: David Nieto <dmartineznie@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1549035 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> Reviewed-by: svccoveritychecker <svccoveritychecker@nvidia.com> Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com> Reviewed-by: Konsta Holtta <kholtta@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gp106/bios_gp106.c')
-rw-r--r--drivers/gpu/nvgpu/gp106/bios_gp106.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/gpu/nvgpu/gp106/bios_gp106.c b/drivers/gpu/nvgpu/gp106/bios_gp106.c
index b7e031c6..3178ae53 100644
--- a/drivers/gpu/nvgpu/gp106/bios_gp106.c
+++ b/drivers/gpu/nvgpu/gp106/bios_gp106.c
@@ -135,6 +135,16 @@ out:
135 return err; 135 return err;
136} 136}
137 137
138int gp106_bios_preos_wait_for_halt(struct gk20a *g)
139{
140 int err = 0;
141
142 if (nvgpu_flcn_wait_for_halt(g->pmu.flcn, PMU_BOOT_TIMEOUT_MAX / 1000))
143 err = -ETIMEDOUT;
144
145 return err;
146}
147
138static int gp106_bios_preos(struct gk20a *g) 148static int gp106_bios_preos(struct gk20a *g)
139{ 149{
140 int err = 0; 150 int err = 0;
@@ -146,6 +156,9 @@ static int gp106_bios_preos(struct gk20a *g)
146 goto out; 156 goto out;
147 } 157 }
148 158
159 if (g->ops.bios.preos_reload_check)
160 g->ops.bios.preos_reload_check(g);
161
149 upload_code(g, g->bios.preos.bootloader_phys_base, 162 upload_code(g, g->bios.preos.bootloader_phys_base,
150 g->bios.preos.bootloader, 163 g->bios.preos.bootloader,
151 g->bios.preos.bootloader_size, 164 g->bios.preos.bootloader_size,
@@ -161,11 +174,7 @@ static int gp106_bios_preos(struct gk20a *g)
161 174
162 nvgpu_flcn_bootstrap(g->pmu.flcn, g->bios.preos.code_entry_point); 175 nvgpu_flcn_bootstrap(g->pmu.flcn, g->bios.preos.code_entry_point);
163 176
164 if (nvgpu_flcn_wait_for_halt(g->pmu.flcn, 177 err = g->ops.bios.preos_wait_for_halt(g);
165 PMU_BOOT_TIMEOUT_MAX / 1000)) {
166 err = -ETIMEDOUT;
167 goto out;
168 }
169 178
170 nvgpu_flcn_clear_halt_intr_status(g->pmu.flcn, 179 nvgpu_flcn_clear_halt_intr_status(g->pmu.flcn,
171 gk20a_get_gr_idle_timeout(g)); 180 gk20a_get_gr_idle_timeout(g));