summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gm20b/acr_gm20b.c
diff options
context:
space:
mode:
authorSupriya <ssharatkumar@nvidia.com>2015-02-06 02:16:05 -0500
committerDan Willemsen <dwillemsen@nvidia.com>2015-04-04 21:06:41 -0400
commitdbc46f0bf2dc4f6f03f53427fe0595fd8909e2db (patch)
treec1accb0db6e7f444533782ec5dfd86dd130937e6 /drivers/gpu/nvgpu/gm20b/acr_gm20b.c
parent3d9a83eb5a59f12412b2f08ba88a32244fd195ca (diff)
gpu: nvgpu: gm20b: WPR size 0, on railgate exit
Bug 200066741 ACR ucode has mechanism to skip WPR blob copy for second time, in case WPR size is sent as 0 to acr ucode. With above there is a saving of around 0.5 ms, but, in conjunction with acr change to disable LS sig verification, and scrubbing empty spaces in WPR sections to 0. This change can reduce railgate exit latency by 4ms ACR ucodes to be checked in main, as a different CL, and after getting prod signs for ACR Change-Id: I9d662027abf0b2615176d17433ff3ec3ae53d78a Signed-off-by: Supriya <ssharatkumar@nvidia.com> Reviewed-on: http://git-master/r/681892 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gm20b/acr_gm20b.c')
-rw-r--r--drivers/gpu/nvgpu/gm20b/acr_gm20b.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/gpu/nvgpu/gm20b/acr_gm20b.c b/drivers/gpu/nvgpu/gm20b/acr_gm20b.c
index 677f4eb4..a58f726a 100644
--- a/drivers/gpu/nvgpu/gm20b/acr_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/acr_gm20b.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved. 2 * Copyright (c) 2015, NVIDIA CORPORATION. All rights reserved.
3 * 3 *
4 * This program is free software; you can redistribute it and/or modify it 4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms and conditions of the GNU General Public License, 5 * under the terms and conditions of the GNU General Public License,
@@ -952,6 +952,8 @@ int gm20b_bootstrap_hs_flcn(struct gk20a *g)
952 acr_dmem = (u64 *) 952 acr_dmem = (u64 *)
953 &(((u8 *)acr_ucode_data_t210_load)[ 953 &(((u8 *)acr_ucode_data_t210_load)[
954 acr_ucode_header_t210_load[2]]); 954 acr_ucode_header_t210_load[2]]);
955 acr->acr_dmem_desc = (struct flcn_acr_desc *)((u8 *)(
956 pacr_ucode_cpuva) + acr_ucode_header_t210_load[2]);
955 ((struct flcn_acr_desc *)acr_dmem)->nonwpr_ucode_blob_start = 957 ((struct flcn_acr_desc *)acr_dmem)->nonwpr_ucode_blob_start =
956 start; 958 start;
957 ((struct flcn_acr_desc *)acr_dmem)->nonwpr_ucode_blob_size = 959 ((struct flcn_acr_desc *)acr_dmem)->nonwpr_ucode_blob_size =
@@ -993,7 +995,8 @@ int gm20b_bootstrap_hs_flcn(struct gk20a *g)
993 bl_dmem_desc->data_size = acr_ucode_header_t210_load[3]; 995 bl_dmem_desc->data_size = acr_ucode_header_t210_load[3];
994 gk20a_free_sgtable(&sgt_pmu_ucode); 996 gk20a_free_sgtable(&sgt_pmu_ucode);
995 sgt_pmu_ucode = NULL; 997 sgt_pmu_ucode = NULL;
996 } 998 } else
999 acr->acr_dmem_desc->nonwpr_ucode_blob_size = 0;
997 status = pmu_exec_gen_bl(g, bl_dmem_desc, 1); 1000 status = pmu_exec_gen_bl(g, bl_dmem_desc, 1);
998 if (status != 0) { 1001 if (status != 0) {
999 err = status; 1002 err = status;
@@ -1325,9 +1328,6 @@ err_done:
1325int pmu_wait_for_halt(struct gk20a *g, unsigned int timeout) 1328int pmu_wait_for_halt(struct gk20a *g, unsigned int timeout)
1326{ 1329{
1327 u32 data = 0; 1330 u32 data = 0;
1328 udelay(10);
1329 data = gk20a_readl(g, pwr_falcon_cpuctl_r());
1330 gm20b_dbg_pmu("bef while cpuctl %xi, timeout %d\n", data, timeout);
1331 while (timeout != 0) { 1331 while (timeout != 0) {
1332 data = gk20a_readl(g, pwr_falcon_cpuctl_r()); 1332 data = gk20a_readl(g, pwr_falcon_cpuctl_r());
1333 if (data & pwr_falcon_cpuctl_halt_intr_m()) 1333 if (data & pwr_falcon_cpuctl_halt_intr_m())