diff options
author | Supriya <ssharatkumar@nvidia.com> | 2015-02-06 02:16:05 -0500 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-04-04 21:06:41 -0400 |
commit | dbc46f0bf2dc4f6f03f53427fe0595fd8909e2db (patch) | |
tree | c1accb0db6e7f444533782ec5dfd86dd130937e6 /drivers/gpu/nvgpu/gm20b | |
parent | 3d9a83eb5a59f12412b2f08ba88a32244fd195ca (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')
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/acr_gm20b.c | 10 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/acr_gm20b.h | 3 |
2 files changed, 7 insertions, 6 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: | |||
1325 | int pmu_wait_for_halt(struct gk20a *g, unsigned int timeout) | 1328 | int 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()) |
diff --git a/drivers/gpu/nvgpu/gm20b/acr_gm20b.h b/drivers/gpu/nvgpu/gm20b/acr_gm20b.h index 5fd5c39b..e5d126f8 100644 --- a/drivers/gpu/nvgpu/gm20b/acr_gm20b.h +++ b/drivers/gpu/nvgpu/gm20b/acr_gm20b.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * GM20B ACR | 2 | * GM20B ACR |
3 | * | 3 | * |
4 | * Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved. | 4 | * Copyright (c) 2015, NVIDIA CORPORATION. All rights reserved. |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify it | 6 | * This program is free software; you can redistribute it and/or modify it |
7 | * under the terms and conditions of the GNU General Public License, | 7 | * under the terms and conditions of the GNU General Public License, |
@@ -380,6 +380,7 @@ struct acr_gm20b { | |||
380 | struct acr_fw_header *fw_hdr; | 380 | struct acr_fw_header *fw_hdr; |
381 | u32 pmu_args; | 381 | u32 pmu_args; |
382 | const struct firmware *acr_fw; | 382 | const struct firmware *acr_fw; |
383 | struct flcn_acr_desc *acr_dmem_desc; | ||
383 | struct pmu_mem_desc acr_ucode; | 384 | struct pmu_mem_desc acr_ucode; |
384 | const struct firmware *hsbl_fw; | 385 | const struct firmware *hsbl_fw; |
385 | struct pmu_mem_desc hsbl_ucode; | 386 | struct pmu_mem_desc hsbl_ucode; |