summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a
diff options
context:
space:
mode:
authorSupriya <ssharatkumar@nvidia.com>2015-12-10 02:26:59 -0500
committerTerje Bergstrom <tbergstrom@nvidia.com>2016-02-26 15:29:55 -0500
commit640cb6642fdb0ad5a4039aacf6c46e1ac30537a3 (patch)
tree338997402fccd97f28b7b653d1f1b64ca15678db /drivers/gpu/nvgpu/gk20a
parent6d585840ad5887407512dd292698100df50e5eed (diff)
gpu: nvgpu: LRF, TEX, LTC, DRAM override
- Adding support for FECS mem overrides Bug 1699676 Change-Id: I6c9ddcd98d57b29059513ee508c6f92b194c4fc7 Signed-off-by: Supriya <ssharatkumar@nvidia.com> Reviewed-on: http://git-master/r/921253 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.c16
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h3
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c1
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.c1
-rw-r--r--drivers/gpu/nvgpu/gk20a/pmu_gk20a.h48
5 files changed, 60 insertions, 9 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c
index d5f12f2b..54010a8e 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.c
@@ -1429,14 +1429,6 @@ static int gk20a_probe(struct platform_device *dev)
1429 if (IS_ENABLED(CONFIG_GK20A_DEVFREQ)) 1429 if (IS_ENABLED(CONFIG_GK20A_DEVFREQ))
1430 gk20a_scale_init(dev); 1430 gk20a_scale_init(dev);
1431 1431
1432 if (platform->late_probe) {
1433 err = platform->late_probe(dev);
1434 if (err) {
1435 dev_err(&dev->dev, "late probe failed");
1436 return err;
1437 }
1438 }
1439
1440 /* Set DMA parameters to allow larger sgt lists */ 1432 /* Set DMA parameters to allow larger sgt lists */
1441 dev->dev.dma_parms = &gk20a->dma_parms; 1433 dev->dev.dma_parms = &gk20a->dma_parms;
1442 dma_set_max_seg_size(&dev->dev, UINT_MAX); 1434 dma_set_max_seg_size(&dev->dev, UINT_MAX);
@@ -1475,6 +1467,14 @@ static int gk20a_probe(struct platform_device *dev)
1475 gk20a->pmu.aelpg_param[3] = APCTRL_POWER_BREAKEVEN_DEFAULT_US; 1467 gk20a->pmu.aelpg_param[3] = APCTRL_POWER_BREAKEVEN_DEFAULT_US;
1476 gk20a->pmu.aelpg_param[4] = APCTRL_CYCLES_PER_SAMPLE_MAX_DEFAULT; 1468 gk20a->pmu.aelpg_param[4] = APCTRL_CYCLES_PER_SAMPLE_MAX_DEFAULT;
1477 1469
1470 if (platform->late_probe) {
1471 err = platform->late_probe(dev);
1472 if (err) {
1473 dev_err(&dev->dev, "late probe failed");
1474 return err;
1475 }
1476 }
1477
1478 gk20a_create_sysfs(dev); 1478 gk20a_create_sysfs(dev);
1479 1479
1480#ifdef CONFIG_DEBUG_FS 1480#ifdef CONFIG_DEBUG_FS
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index 01d1a167..340f358a 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -207,6 +207,7 @@ struct gpu_ops {
207 int (*handle_tex_exception)(struct gk20a *g, u32 gpc, u32 tpc, 207 int (*handle_tex_exception)(struct gk20a *g, u32 gpc, u32 tpc,
208 bool *post_event); 208 bool *post_event);
209 void (*create_gr_sysfs)(struct platform_device *dev); 209 void (*create_gr_sysfs)(struct platform_device *dev);
210 u32 (*get_lrf_tex_ltc_dram_override)(struct gk20a *g);
210 } gr; 211 } gr;
211 const char *name; 212 const char *name;
212 struct { 213 struct {
@@ -434,6 +435,8 @@ struct gpu_ops {
434 u32 *gating_cnt); 435 u32 *gating_cnt);
435 int (*pmu_pg_grinit_param)(struct gk20a *g, 436 int (*pmu_pg_grinit_param)(struct gk20a *g,
436 u8 grfeaturemask); 437 u8 grfeaturemask);
438 int (*send_lrf_tex_ltc_dram_overide_en_dis_cmd)
439 (struct gk20a *g, u32 mask);
437 u32 lspmuwprinitdone; 440 u32 lspmuwprinitdone;
438 u32 lsfloadedfalconid; 441 u32 lsfloadedfalconid;
439 bool fecsbootstrapdone; 442 bool fecsbootstrapdone;
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index 6c0e0539..187c9c0e 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -7637,4 +7637,5 @@ void gk20a_init_gr_ops(struct gpu_ops *gops)
7637 gops->gr.mask_hww_warp_esr = gk20a_mask_hww_warp_esr; 7637 gops->gr.mask_hww_warp_esr = gk20a_mask_hww_warp_esr;
7638 gops->gr.handle_sm_exception = gr_gk20a_handle_sm_exception; 7638 gops->gr.handle_sm_exception = gr_gk20a_handle_sm_exception;
7639 gops->gr.handle_tex_exception = gr_gk20a_handle_tex_exception; 7639 gops->gr.handle_tex_exception = gr_gk20a_handle_tex_exception;
7640 gops->gr.get_lrf_tex_ltc_dram_override = NULL;
7640} 7641}
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
index f73706a2..30592ee2 100644
--- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c
@@ -2771,6 +2771,7 @@ void gk20a_init_pmu_ops(struct gpu_ops *gops)
2771 gops->pmu.write_dmatrfbase = gk20a_write_dmatrfbase; 2771 gops->pmu.write_dmatrfbase = gk20a_write_dmatrfbase;
2772 gops->pmu.pmu_elpg_statistics = gk20a_pmu_elpg_statistics; 2772 gops->pmu.pmu_elpg_statistics = gk20a_pmu_elpg_statistics;
2773 gops->pmu.pmu_pg_grinit_param = NULL; 2773 gops->pmu.pmu_pg_grinit_param = NULL;
2774 gops->pmu.send_lrf_tex_ltc_dram_overide_en_dis_cmd = NULL;
2774} 2775}
2775 2776
2776int gk20a_init_pmu_support(struct gk20a *g) 2777int gk20a_init_pmu_support(struct gk20a *g)
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
index bf581b90..54d01947 100644
--- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.h
@@ -50,7 +50,7 @@
50#define PMU_AP_IDLE_MASK_GRAPHICS (PMU_AP_IDLE_MASK_HIST_IDX_1) 50#define PMU_AP_IDLE_MASK_GRAPHICS (PMU_AP_IDLE_MASK_HIST_IDX_1)
51 51
52#define APP_VERSION_NC_1 20313802 52#define APP_VERSION_NC_1 20313802
53#define APP_VERSION_NC_0 20120791 53#define APP_VERSION_NC_0 20360931
54#define APP_VERSION_GM20B_4 19008461 54#define APP_VERSION_GM20B_4 19008461
55#define APP_VERSION_GM20B_3 18935575 55#define APP_VERSION_GM20B_3 18935575
56#define APP_VERSION_GM20B_2 18694072 56#define APP_VERSION_GM20B_2 18694072
@@ -451,6 +451,8 @@ struct pmu_ucode_desc {
451#define PMU_UNIT_PERFMON_T18X (0x11) 451#define PMU_UNIT_PERFMON_T18X (0x11)
452#define PMU_UNIT_PERFMON (0x12) 452#define PMU_UNIT_PERFMON (0x12)
453#define PMU_UNIT_RC (0x1F) 453#define PMU_UNIT_RC (0x1F)
454#define PMU_UNIT_FECS_MEM_OVERRIDE (0x1E)
455
454#define PMU_UNIT_END (0x23) 456#define PMU_UNIT_END (0x23)
455 457
456#define PMU_UNIT_TEST_START (0xFE) 458#define PMU_UNIT_TEST_START (0xFE)
@@ -814,6 +816,47 @@ struct pmu_acr_msg {
814#define PMU_DOMAIN_GROUP_GPC2CLK 1 816#define PMU_DOMAIN_GROUP_GPC2CLK 1
815#define PMU_DOMAIN_GROUP_NUM 2 817#define PMU_DOMAIN_GROUP_NUM 2
816 818
819/* FECS mem override command*/
820
821#define PMU_LRF_TEX_LTC_DRAM_CMD_ID_EN_DIS 0
822
823/*!
824 * Enable/Disable FECS error feature
825 */
826struct pmu_cmd_lrf_tex_ltc_dram_en_dis {
827 /*Command type must be first*/
828 u8 cmd_type;
829 /*unit bitmask*/
830 u8 en_dis_mask;
831};
832
833struct pmu_lrf_tex_ltc_dram_cmd {
834 union {
835 u8 cmd_type;
836 struct pmu_cmd_lrf_tex_ltc_dram_en_dis en_dis;
837 };
838};
839
840/* FECS mem override messages*/
841#define PMU_LRF_TEX_LTC_DRAM_MSG_ID_EN_DIS 0
842
843struct pmu_msg_lrf_tex_ltc_dram_en_dis {
844 /*!
845 * Must be at start
846 */
847 u8 msg_type;
848 u8 en_fail_mask;
849 u8 dis_fail_mask;
850 u32 pmu_status;
851};
852
853struct pmu_lrf_tex_ltc_dram_msg {
854 union {
855 u8 msg_type;
856 struct pmu_msg_lrf_tex_ltc_dram_en_dis en_dis;
857 };
858};
859
817/* TBD: smart strategy */ 860/* TBD: smart strategy */
818#define PMU_PERFMON_PCT_TO_INC 58 861#define PMU_PERFMON_PCT_TO_INC 58
819#define PMU_PERFMON_PCT_TO_DEC 23 862#define PMU_PERFMON_PCT_TO_DEC 23
@@ -958,6 +1001,7 @@ struct pmu_cmd {
958 struct pmu_pg_cmd pg; 1001 struct pmu_pg_cmd pg;
959 struct pmu_zbc_cmd zbc; 1002 struct pmu_zbc_cmd zbc;
960 struct pmu_acr_cmd acr; 1003 struct pmu_acr_cmd acr;
1004 struct pmu_lrf_tex_ltc_dram_cmd lrf_tex_ltc_dram;
961 } cmd; 1005 } cmd;
962}; 1006};
963 1007
@@ -969,6 +1013,7 @@ struct pmu_msg {
969 struct pmu_pg_msg pg; 1013 struct pmu_pg_msg pg;
970 struct pmu_rc_msg rc; 1014 struct pmu_rc_msg rc;
971 struct pmu_acr_msg acr; 1015 struct pmu_acr_msg acr;
1016 struct pmu_lrf_tex_ltc_dram_msg lrf_tex_ltc_dram;
972 } msg; 1017 } msg;
973}; 1018};
974 1019
@@ -1318,6 +1363,7 @@ struct pmu_gk20a {
1318 u8 pmu_mode; /*Added for GM20b, and ACR*/ 1363 u8 pmu_mode; /*Added for GM20b, and ACR*/
1319 u32 falcon_id; 1364 u32 falcon_id;
1320 u32 aelpg_param[5]; 1365 u32 aelpg_param[5];
1366 u32 override_done;
1321}; 1367};
1322 1368
1323int gk20a_init_pmu_support(struct gk20a *g); 1369int gk20a_init_pmu_support(struct gk20a *g);