diff options
author | David Nieto <dmartineznie@nvidia.com> | 2017-08-08 15:50:55 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-10-10 15:05:42 -0400 |
commit | 7c5cf70268ca038f85686fbdec29729d1a9024c1 (patch) | |
tree | bc30b8e724addb367b50fbd1cd4eaa994fa30bb4 /drivers/gpu/nvgpu/gp106/bios_gp106.c | |
parent | bf8dca77aee16b98a89e8ef5491907f2a791f1ff (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.c | 19 |
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 | ||
138 | int 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 | |||
138 | static int gp106_bios_preos(struct gk20a *g) | 148 | static 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)); |