diff options
author | David Nieto <dmartineznie@nvidia.com> | 2017-12-07 19:48:09 -0500 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2018-01-25 20:39:53 -0500 |
commit | fbdcc8a2d4c2b7f145b034ee7bde7105e66e0a4e (patch) | |
tree | 0bb7c6d0a1bbd723bf891f5c3287cb8abc315cd4 /drivers/gpu/nvgpu/common/vbios/bios.c | |
parent | 37b8298a48ec65ca78048e68c8c3e1a060b8fb63 (diff) |
gpu: nvgpu: Initial Nvlink driver skeleton
Adds the skeleton and integration of the GV100 endpoint driver to NVGPU
(1) Adds a OS abstraction layer for the internal nvlink structure.
(2) Adds linux specific integration with Nvlink core driver.
(3) Adds function pointers for nvlink api, initialization and isr process.
(4) Adds initial support for minion.
(5) Adds new GPU enable properties to handle NVLINK presence
(6) Adds new GPU enable properties for SG_PHY bypass (required for NVLINK over
PCI)
(7) Adds parsing of nvlink vbios structures.
(8) Adds logging defines for NVGPU
JIRA: EVLR-2328
Change-Id: I0720a165a15c7187892c8c1a0662ec598354ac06
Signed-off-by: David Nieto <dmartineznie@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1644708
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/common/vbios/bios.c')
-rw-r--r-- | drivers/gpu/nvgpu/common/vbios/bios.c | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/common/vbios/bios.c b/drivers/gpu/nvgpu/common/vbios/bios.c index fa700a66..52c0a798 100644 --- a/drivers/gpu/nvgpu/common/vbios/bios.c +++ b/drivers/gpu/nvgpu/common/vbios/bios.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2015-2017, NVIDIA CORPORATION. All rights reserved. | 2 | * Copyright (c) 2015-2018, NVIDIA CORPORATION. All rights reserved. |
3 | * | 3 | * |
4 | * Permission is hereby granted, free of charge, to any person obtaining a | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
5 | * copy of this software and associated documentation files (the "Software"), | 5 | * copy of this software and associated documentation files (the "Software"), |
@@ -74,6 +74,22 @@ struct bit { | |||
74 | #define TOKEN_ID_VIRT_PTRS 0x56 | 74 | #define TOKEN_ID_VIRT_PTRS 0x56 |
75 | #define TOKEN_ID_MEMORY_PTRS 0x4D | 75 | #define TOKEN_ID_MEMORY_PTRS 0x4D |
76 | 76 | ||
77 | #define NVLINK_CONFIG_DATA_HDR_VER_10 0x1 | ||
78 | #define NVLINK_CONFIG_DATA_HDR_10_SIZE 16 | ||
79 | #define NVLINK_CONFIG_DATA_HDR_11_SIZE 17 | ||
80 | #define NVLINK_CONFIG_DATA_HDR_12_SIZE 21 | ||
81 | |||
82 | struct nvlink_config_data_hdr_v1 { | ||
83 | u8 version; | ||
84 | u8 hdr_size; | ||
85 | u16 rsvd0; | ||
86 | u32 link_disable_mask; | ||
87 | u32 link_mode_mask; | ||
88 | u32 link_refclk_mask; | ||
89 | u8 train_at_boot; | ||
90 | u32 ac_coupling_mask; | ||
91 | } __packed; | ||
92 | |||
77 | #define MEMORY_PTRS_V1 1 | 93 | #define MEMORY_PTRS_V1 1 |
78 | #define MEMORY_PTRS_V2 2 | 94 | #define MEMORY_PTRS_V2 2 |
79 | 95 | ||
@@ -369,6 +385,41 @@ static void nvgpu_bios_parse_nvinit_ptrs(struct gk20a *g, int offset) | |||
369 | g->bios.bootscripts = &g->bios.data[nvinit_ptrs.bootscripts_ptr]; | 385 | g->bios.bootscripts = &g->bios.data[nvinit_ptrs.bootscripts_ptr]; |
370 | g->bios.bootscripts_size = nvinit_ptrs.bootscripts_size; | 386 | g->bios.bootscripts_size = nvinit_ptrs.bootscripts_size; |
371 | g->bios.condition_table_ptr = nvinit_ptrs.condition_table_ptr; | 387 | g->bios.condition_table_ptr = nvinit_ptrs.condition_table_ptr; |
388 | g->bios.nvlink_config_data_offset = nvinit_ptrs.nvlink_config_data_ptr; | ||
389 | } | ||
390 | |||
391 | u32 nvgpu_bios_get_nvlink_config_data(struct gk20a *g) | ||
392 | { | ||
393 | struct nvlink_config_data_hdr_v1 config; | ||
394 | |||
395 | if (g->bios.nvlink_config_data_offset == 0) | ||
396 | return -EINVAL; | ||
397 | |||
398 | memcpy(&config, &g->bios.data[g->bios.nvlink_config_data_offset], | ||
399 | sizeof(config)); | ||
400 | |||
401 | if (config.version != NVLINK_CONFIG_DATA_HDR_VER_10) { | ||
402 | nvgpu_err(g, "unsupported nvlink bios version: 0x%x", | ||
403 | config.version); | ||
404 | return -EINVAL; | ||
405 | } | ||
406 | |||
407 | switch (config.hdr_size) { | ||
408 | case NVLINK_CONFIG_DATA_HDR_12_SIZE: | ||
409 | g->nvlink.ac_coupling_mask = config.ac_coupling_mask; | ||
410 | case NVLINK_CONFIG_DATA_HDR_11_SIZE: | ||
411 | g->nvlink.train_at_boot = config.train_at_boot; | ||
412 | case NVLINK_CONFIG_DATA_HDR_10_SIZE: | ||
413 | g->nvlink.link_disable_mask = config.link_disable_mask; | ||
414 | g->nvlink.link_mode_mask = config.link_mode_mask; | ||
415 | g->nvlink.link_refclk_mask = config.link_refclk_mask; | ||
416 | break; | ||
417 | default: | ||
418 | nvgpu_err(g, "invalid nvlink bios config size"); | ||
419 | return -EINVAL; | ||
420 | } | ||
421 | |||
422 | return 0; | ||
372 | } | 423 | } |
373 | 424 | ||
374 | static void nvgpu_bios_parse_memory_ptrs(struct gk20a *g, int offset, u8 version) | 425 | static void nvgpu_bios_parse_memory_ptrs(struct gk20a *g, int offset, u8 version) |