From c5f8edd8bf3ee5e4fe446b1886767ede0a28f276 Mon Sep 17 00:00:00 2001 From: Thomas Fleury Date: Fri, 22 Mar 2019 14:39:49 -0700 Subject: [PATCH] gpu: nvgpu: add compatible VBIOS version for PG189 Compatible VBIOS version for PG189 is .5A, but it must still boot with VBIOS .18 and higher. Added a vbios_compatible_version field in platform descriptor. Do not boot if VBIOS version is < vbios_min_version. Otherwise, warn if VBIOS version is not vbios_compatible_version. Bug 2500899 Change-Id: Ib6be2d1da96221def7784c28f362b904ce770231 Signed-off-by: Thomas Fleury Reviewed-on: https://git-master.nvidia.com/r/2079527 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/gp106/bios_gp106.c | 8 ++++++++ drivers/gpu/nvgpu/include/nvgpu/gk20a.h | 1 + drivers/gpu/nvgpu/os/linux/driver_common.c | 1 + drivers/gpu/nvgpu/os/linux/pci.c | 1 + drivers/gpu/nvgpu/os/linux/platform_gk20a.h | 9 ++++++++- 5 files changed, 19 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/nvgpu/gp106/bios_gp106.c b/drivers/gpu/nvgpu/gp106/bios_gp106.c index 625bbe540..0024de2a9 100644 --- a/drivers/gpu/nvgpu/gp106/bios_gp106.c +++ b/drivers/gpu/nvgpu/gp106/bios_gp106.c @@ -249,6 +249,14 @@ int gp106_bios_init(struct gk20a *g) nvgpu_info(g, "VBIOS version %08x", g->bios.vbios_version); } + if ((g->vbios_compatible_version != 0U) && + (g->bios.vbios_version != g->vbios_compatible_version)) { + nvgpu_err(g, "VBIOS version %08x is not officially supported.", + g->bios.vbios_version); + nvgpu_err(g, "Update to VBIOS %08x, or use at your own risks.", + g->vbios_compatible_version); + } + nvgpu_log_fn(g, "done"); if (g->ops.bios.devinit != NULL) { diff --git a/drivers/gpu/nvgpu/include/nvgpu/gk20a.h b/drivers/gpu/nvgpu/include/nvgpu/gk20a.h index ed60496f9..20431ae41 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/gk20a.h +++ b/drivers/gpu/nvgpu/include/nvgpu/gk20a.h @@ -2092,6 +2092,7 @@ struct gk20a { /* The minimum VBIOS version supported */ u32 vbios_min_version; + u32 vbios_compatible_version; /* memory training sequence and mclk switch scripts */ u32 mem_config_idx; diff --git a/drivers/gpu/nvgpu/os/linux/driver_common.c b/drivers/gpu/nvgpu/os/linux/driver_common.c index 79a6dca0f..78b0da588 100644 --- a/drivers/gpu/nvgpu/os/linux/driver_common.c +++ b/drivers/gpu/nvgpu/os/linux/driver_common.c @@ -212,6 +212,7 @@ static void nvgpu_init_vbios_vars(struct gk20a *g) nvgpu_set_enabled(g, NVGPU_PMU_RUN_PREOS, platform->run_preos); g->vbios_min_version = platform->vbios_min_version; + g->vbios_compatible_version = platform->vbios_compatible_version; } static void nvgpu_init_ltc_vars(struct gk20a *g) diff --git a/drivers/gpu/nvgpu/os/linux/pci.c b/drivers/gpu/nvgpu/os/linux/pci.c index dbdde9047..d7b8c46c4 100644 --- a/drivers/gpu/nvgpu/os/linux/pci.c +++ b/drivers/gpu/nvgpu/os/linux/pci.c @@ -286,6 +286,7 @@ static struct gk20a_platform nvgpu_pci_device[] = { .honors_aperture = true, .dma_mask = DMA_BIT_MASK(40), .vbios_min_version = 0x90041800, + .vbios_compatible_version = 0x90045A00, .hardcode_sw_threshold = false, .has_syncpoints = true, }, diff --git a/drivers/gpu/nvgpu/os/linux/platform_gk20a.h b/drivers/gpu/nvgpu/os/linux/platform_gk20a.h index 1e7591cb4..0e4423073 100644 --- a/drivers/gpu/nvgpu/os/linux/platform_gk20a.h +++ b/drivers/gpu/nvgpu/os/linux/platform_gk20a.h @@ -274,9 +274,16 @@ struct gk20a_platform { */ u64 dma_mask; - /* minimum supported VBIOS version */ + /* minimum supported VBIOS version. + * nvgpu driver is not loaded if VBIOS < min VBIOS version + */ u32 vbios_min_version; + /* blessed VBIOS version + * if defined, a warning is given if VBIOS differs. + */ + u32 vbios_compatible_version; + /* true if we run preos microcode on this board */ bool run_preos;