diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index 74bb64b3d..3b6c3660d 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h @@ -1198,6 +1198,8 @@ struct gpu_ops { int (*isr)(struct gk20a *g); int (*rxdet)(struct gk20a *g, u32 link_id); int (*setup_pll)(struct gk20a *g, unsigned long link_mask); + int (*minion_data_ready_en)(struct gk20a *g, + unsigned long link_mask, bool sync); /* API */ int (*link_early_init)(struct gk20a *g, unsigned long mask); u32 (*link_get_mode)(struct gk20a *g, u32 link_id); diff --git a/drivers/gpu/nvgpu/gv100/hal_gv100.c b/drivers/gpu/nvgpu/gv100/hal_gv100.c index 2f5cf7f3d..5e42ba9f5 100644 --- a/drivers/gpu/nvgpu/gv100/hal_gv100.c +++ b/drivers/gpu/nvgpu/gv100/hal_gv100.c @@ -842,6 +842,7 @@ static const struct gpu_ops gv100_ops = { .isr = gv100_nvlink_isr, .rxdet = NULL, .setup_pll = gv100_nvlink_setup_pll, + .minion_data_ready_en = gv100_nvlink_minion_data_ready_en, /* API */ .link_early_init = gv100_nvlink_link_early_init, .link_get_state = gv100_nvlink_link_get_state, diff --git a/drivers/gpu/nvgpu/gv100/nvlink_gv100.c b/drivers/gpu/nvgpu/gv100/nvlink_gv100.c index c87a3ce9a..cae4f9bd8 100644 --- a/drivers/gpu/nvgpu/gv100/nvlink_gv100.c +++ b/drivers/gpu/nvgpu/gv100/nvlink_gv100.c @@ -221,8 +221,6 @@ static const char *__gv100_device_type_to_str(u32 type) */ static u32 __gv100_nvlink_get_link_reset_mask(struct gk20a *g); static u32 gv100_nvlink_rxcal_en(struct gk20a *g, unsigned long mask); -static u32 gv100_nvlink_minion_data_ready_en(struct gk20a *g, - unsigned long mask, bool sync); /* @@ -876,31 +874,32 @@ static u32 gv100_nvlink_minion_configure_ac_coupling(struct gk20a *g, /* * Set Data ready */ -static u32 gv100_nvlink_minion_data_ready_en(struct gk20a *g, - unsigned long mask, bool sync) +int gv100_nvlink_minion_data_ready_en(struct gk20a *g, + unsigned long link_mask, bool sync) { - u32 err = 0; - u32 i; + int ret = 0; + u32 link_id; - for_each_set_bit(i, &mask, 32) { - err = gv100_nvlink_minion_send_command(g, i, + for_each_set_bit(link_id, &link_mask, 32) { + ret = gv100_nvlink_minion_send_command(g, link_id, minion_nvlink_dl_cmd_command_initlaneenable_v(), 0, sync); - if (err) { - nvgpu_err(g, "Failed init lane enable on minion"); - return err; + if (ret) { + nvgpu_err(g, "Failed initlaneenable on link %u", + link_id); + return ret; } } - for_each_set_bit(i, &mask, 32) { - err = gv100_nvlink_minion_send_command(g, i, + for_each_set_bit(link_id, &link_mask, 32) { + ret = gv100_nvlink_minion_send_command(g, link_id, minion_nvlink_dl_cmd_command_initdlpl_v(), 0, sync); - if (err) { - nvgpu_err(g, "Failed init DLPL on minion"); - return err; + if (ret) { + nvgpu_err(g, "Failed initdlpl on link %u", link_id); + return ret; } } - return err; + return ret; } /* diff --git a/drivers/gpu/nvgpu/gv100/nvlink_gv100.h b/drivers/gpu/nvgpu/gv100/nvlink_gv100.h index 0c58438c5..bf923d4b9 100644 --- a/drivers/gpu/nvgpu/gv100/nvlink_gv100.h +++ b/drivers/gpu/nvgpu/gv100/nvlink_gv100.h @@ -32,6 +32,8 @@ int gv100_nvlink_isr(struct gk20a *g); int gv100_nvlink_minion_send_command(struct gk20a *g, u32 link_id, u32 command, u32 scratch_0, bool sync); int gv100_nvlink_setup_pll(struct gk20a *g, unsigned long link_mask); +int gv100_nvlink_minion_data_ready_en(struct gk20a *g, + unsigned long link_mask, bool sync); /* API */ int gv100_nvlink_link_early_init(struct gk20a *g, unsigned long mask); u32 gv100_nvlink_link_get_mode(struct gk20a *g, u32 link_id);