diff options
author | Tejal Kudav <tkudav@nvidia.com> | 2018-05-29 07:40:44 -0400 |
---|---|---|
committer | Tejal Kudav <tkudav@nvidia.com> | 2018-06-14 09:44:07 -0400 |
commit | 2ca8332eb7fd3a701dec04ecb6abf3587ca834e5 (patch) | |
tree | 09a8cfa8f88ed4773feda599280de67db5bb93f0 | |
parent | dec8625b88d1430f4bf3eac37954fbb732de3f1a (diff) |
gpu: nvgpu: nvlink: Read sublink state when needed
On nvlink 2.2, we poll for sublink substate to be stable before checking
sublink primary state. Currently, we read both TX and RX sublink state
during set_sublink_mode() irrespective of which sublink mode is changed.
This is not correct when we are polling on substate value while getting
sublink state.
JIRA NVLINK-164
Change-Id: I474705f059dbf41e5fb7e45bef455c33ee21aa95
Signed-off-by: Tejal Kudav <tkudav@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1734539
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
-rw-r--r-- | drivers/gpu/nvgpu/gv100/nvlink_gv100.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/gpu/nvgpu/gv100/nvlink_gv100.c b/drivers/gpu/nvgpu/gv100/nvlink_gv100.c index 7e25c946..c87a3ce9 100644 --- a/drivers/gpu/nvgpu/gv100/nvlink_gv100.c +++ b/drivers/gpu/nvgpu/gv100/nvlink_gv100.c | |||
@@ -2482,7 +2482,8 @@ int gv100_nvlink_link_set_sublink_mode(struct gk20a *g, u32 link_id, | |||
2482 | bool is_rx_sublink, u32 mode) | 2482 | bool is_rx_sublink, u32 mode) |
2483 | { | 2483 | { |
2484 | int err = 0; | 2484 | int err = 0; |
2485 | u32 rx_sublink_state, tx_sublink_state; | 2485 | u32 rx_sublink_state = nvgpu_nvlink_sublink_rx__last; |
2486 | u32 tx_sublink_state = nvgpu_nvlink_sublink_tx__last; | ||
2486 | u32 reg; | 2487 | u32 reg; |
2487 | 2488 | ||
2488 | if (!(BIT(link_id) & g->nvlink.enabled_links)) | 2489 | if (!(BIT(link_id) & g->nvlink.enabled_links)) |
@@ -2492,8 +2493,12 @@ int gv100_nvlink_link_set_sublink_mode(struct gk20a *g, u32 link_id, | |||
2492 | if (err) | 2493 | if (err) |
2493 | return err; | 2494 | return err; |
2494 | 2495 | ||
2495 | rx_sublink_state = g->ops.nvlink.get_rx_sublink_state(g, link_id); | 2496 | if (is_rx_sublink) |
2496 | tx_sublink_state = g->ops.nvlink.get_tx_sublink_state(g, link_id); | 2497 | rx_sublink_state = g->ops.nvlink.get_rx_sublink_state(g, |
2498 | link_id); | ||
2499 | else | ||
2500 | tx_sublink_state = g->ops.nvlink.get_tx_sublink_state(g, | ||
2501 | link_id); | ||
2497 | 2502 | ||
2498 | switch (mode) { | 2503 | switch (mode) { |
2499 | case nvgpu_nvlink_sublink_tx_hs: | 2504 | case nvgpu_nvlink_sublink_tx_hs: |
@@ -2656,7 +2661,7 @@ u32 gv100_nvlink_link_get_sublink_mode(struct gk20a *g, u32 link_id, | |||
2656 | return nvgpu_nvlink_sublink_tx_safe; | 2661 | return nvgpu_nvlink_sublink_tx_safe; |
2657 | if (state == nvl_sl0_slsm_status_tx_primary_state_off_v()) | 2662 | if (state == nvl_sl0_slsm_status_tx_primary_state_off_v()) |
2658 | return nvgpu_nvlink_sublink_tx_off; | 2663 | return nvgpu_nvlink_sublink_tx_off; |
2659 | return nvgpu_nvlink_sublink_tx_off; | 2664 | return nvgpu_nvlink_sublink_tx__last; |
2660 | } else { | 2665 | } else { |
2661 | state = g->ops.nvlink.get_rx_sublink_state(g, link_id); | 2666 | state = g->ops.nvlink.get_rx_sublink_state(g, link_id); |
2662 | if (state == nvl_sl1_slsm_status_rx_primary_state_hs_v()) | 2667 | if (state == nvl_sl1_slsm_status_rx_primary_state_hs_v()) |
@@ -2667,7 +2672,7 @@ u32 gv100_nvlink_link_get_sublink_mode(struct gk20a *g, u32 link_id, | |||
2667 | return nvgpu_nvlink_sublink_rx_safe; | 2672 | return nvgpu_nvlink_sublink_rx_safe; |
2668 | if (state == nvl_sl1_slsm_status_rx_primary_state_off_v()) | 2673 | if (state == nvl_sl1_slsm_status_rx_primary_state_off_v()) |
2669 | return nvgpu_nvlink_sublink_rx_off; | 2674 | return nvgpu_nvlink_sublink_rx_off; |
2670 | return nvgpu_nvlink_sublink_rx_off; | 2675 | return nvgpu_nvlink_sublink_rx__last; |
2671 | } | 2676 | } |
2672 | return nvgpu_nvlink_sublink_tx__last; | 2677 | return nvgpu_nvlink_sublink_tx__last; |
2673 | } | 2678 | } |