mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 02:22:34 +03:00
gpu: nvgpu: init: make init functions pointers
Change the directly called init functions to function pointers in the HAL. This makes it more consistent. This also allows for writing more comprehensive unit tests for nvgpu.common.init. JIRA NVGPU-2239 Change-Id: I05d739a8f8a2e7d385322d93154206eb0bfddc10 Signed-off-by: Philip Elcan <pelcan@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/2173920 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
8ecbf67328
commit
52f80de033
@@ -28,24 +28,12 @@
|
||||
#include <nvgpu/timers.h>
|
||||
#include <nvgpu/soc.h>
|
||||
#include <nvgpu/enabled.h>
|
||||
#include <nvgpu/fifo.h>
|
||||
#include <nvgpu/acr.h>
|
||||
#include <nvgpu/pmu.h>
|
||||
#include <nvgpu/ce.h>
|
||||
#include <nvgpu/gmmu.h>
|
||||
#include <nvgpu/ltc.h>
|
||||
#include <nvgpu/cbc.h>
|
||||
#include <nvgpu/ecc.h>
|
||||
#include <nvgpu/fbp.h>
|
||||
#include <nvgpu/vidmem.h>
|
||||
#include <nvgpu/mm.h>
|
||||
#include <nvgpu/soc.h>
|
||||
#include <nvgpu/clk_arb.h>
|
||||
#include <nvgpu/therm.h>
|
||||
#include <nvgpu/mc.h>
|
||||
#include <nvgpu/gk20a.h>
|
||||
#include <nvgpu/channel_sync.h>
|
||||
#include <nvgpu/gr/gr.h>
|
||||
#include <nvgpu/nvgpu_init.h>
|
||||
|
||||
#ifdef CONFIG_NVGPU_TRACE
|
||||
@@ -101,45 +89,47 @@ int nvgpu_prepare_poweroff(struct gk20a *g)
|
||||
#ifdef CONFIG_NVGPU_LS_PMU
|
||||
/* disable elpg before gr or fifo suspend */
|
||||
if (g->support_ls_pmu) {
|
||||
ret = nvgpu_pmu_destroy(g, g->pmu);
|
||||
ret = g->ops.pmu.pmu_destroy(g, g->pmu);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
if (nvgpu_is_enabled(g, NVGPU_SUPPORT_SEC2_RTOS)) {
|
||||
tmp_ret = nvgpu_sec2_destroy(g);
|
||||
tmp_ret = g->ops.sec2.sec2_destroy(g);
|
||||
if ((tmp_ret != 0) && (ret == 0)) {
|
||||
ret = tmp_ret;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
tmp_ret = nvgpu_gr_suspend(g);
|
||||
tmp_ret = g->ops.gr.gr_suspend(g);
|
||||
if ((tmp_ret != 0) && (ret == 0)) {
|
||||
ret = tmp_ret;
|
||||
}
|
||||
tmp_ret = nvgpu_mm_suspend(g);
|
||||
tmp_ret = g->ops.mm.mm_suspend(g);
|
||||
if ((tmp_ret != 0) && (ret == 0)) {
|
||||
ret = tmp_ret;
|
||||
}
|
||||
tmp_ret = nvgpu_fifo_suspend(g);
|
||||
tmp_ret = g->ops.fifo.fifo_suspend(g);
|
||||
if ((tmp_ret != 0) && (ret == 0)) {
|
||||
ret = tmp_ret;
|
||||
}
|
||||
|
||||
nvgpu_falcon_sw_free(g, FALCON_ID_PMU);
|
||||
nvgpu_falcon_sw_free(g, FALCON_ID_FECS);
|
||||
g->ops.falcon.falcon_sw_free(g, FALCON_ID_PMU);
|
||||
g->ops.falcon.falcon_sw_free(g, FALCON_ID_FECS);
|
||||
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
nvgpu_falcon_sw_free(g, FALCON_ID_GSPLITE);
|
||||
nvgpu_falcon_sw_free(g, FALCON_ID_NVDEC);
|
||||
nvgpu_falcon_sw_free(g, FALCON_ID_SEC2);
|
||||
g->ops.falcon.falcon_sw_free(g, FALCON_ID_GSPLITE);
|
||||
g->ops.falcon.falcon_sw_free(g, FALCON_ID_NVDEC);
|
||||
g->ops.falcon.falcon_sw_free(g, FALCON_ID_SEC2);
|
||||
|
||||
nvgpu_ce_app_suspend(g);
|
||||
g->ops.ce.ce_app_suspend(g);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
/* deinit the bios */
|
||||
nvgpu_bios_sw_deinit(g, g->bios);
|
||||
if (g->ops.bios.bios_sw_deinit != NULL) {
|
||||
/* deinit the bios */
|
||||
g->ops.bios.bios_sw_deinit(g, g->bios);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Disable GPCPLL */
|
||||
@@ -189,45 +179,45 @@ int nvgpu_finalize_poweron(struct gk20a *g)
|
||||
* Do this early so any early VMs that get made are capable of mapping
|
||||
* buffers.
|
||||
*/
|
||||
err = nvgpu_pd_cache_init(g);
|
||||
err = g->ops.mm.pd_cache_init(g);
|
||||
if (err != 0) {
|
||||
return err;
|
||||
}
|
||||
|
||||
/* init interface layer support for PMU falcon */
|
||||
err = nvgpu_falcon_sw_init(g, FALCON_ID_PMU);
|
||||
err = g->ops.falcon.falcon_sw_init(g, FALCON_ID_PMU);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to sw init FALCON_ID_PMU");
|
||||
goto exit;
|
||||
}
|
||||
|
||||
err = nvgpu_falcon_sw_init(g, FALCON_ID_FECS);
|
||||
err = g->ops.falcon.falcon_sw_init(g, FALCON_ID_FECS);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to sw init FALCON_ID_FECS");
|
||||
goto done_pmu;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
err = nvgpu_falcon_sw_init(g, FALCON_ID_SEC2);
|
||||
err = g->ops.falcon.falcon_sw_init(g, FALCON_ID_SEC2);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to sw init FALCON_ID_SEC2");
|
||||
goto done_fecs;
|
||||
}
|
||||
|
||||
err = nvgpu_falcon_sw_init(g, FALCON_ID_NVDEC);
|
||||
err = g->ops.falcon.falcon_sw_init(g, FALCON_ID_NVDEC);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to sw init FALCON_ID_NVDEC");
|
||||
goto done_sec2;
|
||||
}
|
||||
|
||||
err = nvgpu_falcon_sw_init(g, FALCON_ID_GSPLITE);
|
||||
err = g->ops.falcon.falcon_sw_init(g, FALCON_ID_GSPLITE);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to sw init FALCON_ID_GSPLITE");
|
||||
goto done_nvdec;
|
||||
}
|
||||
#endif
|
||||
|
||||
err = nvgpu_pmu_early_init(g, &g->pmu);
|
||||
err = g->ops.pmu.pmu_early_init(g, &g->pmu);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to early init pmu sw");
|
||||
goto done;
|
||||
@@ -235,7 +225,7 @@ int nvgpu_finalize_poweron(struct gk20a *g)
|
||||
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
if (nvgpu_is_enabled(g, NVGPU_SUPPORT_SEC2_RTOS)) {
|
||||
err = nvgpu_init_sec2_setup_sw(g, &g->sec2);
|
||||
err = g->ops.sec2.init_sec2_setup_sw(g, &g->sec2);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to init sec2 sw setup");
|
||||
goto done;
|
||||
@@ -244,7 +234,7 @@ int nvgpu_finalize_poweron(struct gk20a *g)
|
||||
#endif
|
||||
if (nvgpu_is_enabled(g, NVGPU_SEC_PRIVSECURITY)) {
|
||||
/* Init chip specific ACR properties */
|
||||
err = nvgpu_acr_init(g, &g->acr);
|
||||
err = g->ops.acr.acr_init(g, &g->acr);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "ACR init failed %d", err);
|
||||
goto done;
|
||||
@@ -252,7 +242,7 @@ int nvgpu_finalize_poweron(struct gk20a *g)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
err = nvgpu_bios_sw_init(g, &g->bios);
|
||||
err = g->ops.bios.bios_sw_init(g, &g->bios);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "BIOS SW init failed %d", err);
|
||||
goto done;
|
||||
@@ -311,19 +301,19 @@ int nvgpu_finalize_poweron(struct gk20a *g)
|
||||
goto done;
|
||||
}
|
||||
|
||||
err = nvgpu_init_ltc_support(g);
|
||||
err = g->ops.ltc.init_ltc_support(g);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to init ltc");
|
||||
goto done;
|
||||
}
|
||||
|
||||
err = nvgpu_init_mm_support(g);
|
||||
err = g->ops.mm.init_mm_support(g);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to init gk20a mm");
|
||||
goto done;
|
||||
}
|
||||
|
||||
err = nvgpu_fifo_init_support(g);
|
||||
err = g->ops.fifo.fifo_init_support(g);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to init gk20a fifo");
|
||||
goto done;
|
||||
@@ -367,14 +357,14 @@ int nvgpu_finalize_poweron(struct gk20a *g)
|
||||
#endif
|
||||
|
||||
/* prepare portion of sw required for enable hw */
|
||||
err = nvgpu_gr_prepare_sw(g);
|
||||
err = g->ops.gr.gr_prepare_sw(g);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to prepare sw");
|
||||
nvgpu_mutex_release(&g->tpc_pg_lock);
|
||||
goto done;
|
||||
}
|
||||
|
||||
err = nvgpu_gr_enable_hw(g);
|
||||
err = g->ops.gr.gr_enable_hw(g);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to enable gr");
|
||||
nvgpu_mutex_release(&g->tpc_pg_lock);
|
||||
@@ -383,7 +373,7 @@ int nvgpu_finalize_poweron(struct gk20a *g)
|
||||
|
||||
if (nvgpu_is_enabled(g, NVGPU_SEC_PRIVSECURITY)) {
|
||||
/* construct ucode blob, load & bootstrap LSF's using HS ACR */
|
||||
err = nvgpu_acr_construct_execute(g, g->acr);
|
||||
err = g->ops.acr.acr_construct_execute(g, g->acr);
|
||||
if (err != 0) {
|
||||
nvgpu_mutex_release(&g->tpc_pg_lock);
|
||||
goto done;
|
||||
@@ -392,7 +382,7 @@ int nvgpu_finalize_poweron(struct gk20a *g)
|
||||
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
if (nvgpu_is_enabled(g, NVGPU_SUPPORT_SEC2_RTOS)) {
|
||||
err = nvgpu_init_sec2_support(g);
|
||||
err = g->ops.sec2.init_sec2_support(g);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to init sec2");
|
||||
nvgpu_mutex_release(&g->tpc_pg_lock);
|
||||
@@ -402,7 +392,7 @@ int nvgpu_finalize_poweron(struct gk20a *g)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_NVGPU_LS_PMU
|
||||
err = nvgpu_pmu_init(g, g->pmu);
|
||||
err = g->ops.pmu.pmu_init(g, g->pmu);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to init gk20a pmu");
|
||||
nvgpu_mutex_release(&g->tpc_pg_lock);
|
||||
@@ -410,39 +400,41 @@ int nvgpu_finalize_poweron(struct gk20a *g)
|
||||
}
|
||||
#endif
|
||||
|
||||
err = nvgpu_fbp_init_support(g);
|
||||
err = g->ops.fbp.fbp_init_support(g);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to init gk20a fbp");
|
||||
nvgpu_mutex_release(&g->tpc_pg_lock);
|
||||
goto done;
|
||||
}
|
||||
|
||||
err = nvgpu_gr_init_support(g);
|
||||
err = g->ops.gr.gr_init_support(g);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to init gk20a gr");
|
||||
nvgpu_mutex_release(&g->tpc_pg_lock);
|
||||
goto done;
|
||||
}
|
||||
|
||||
err = nvgpu_ecc_init_support(g);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to init ecc");
|
||||
nvgpu_mutex_release(&g->tpc_pg_lock);
|
||||
goto done;
|
||||
if (g->ops.gr.ecc.ecc_init_support != NULL) {
|
||||
err = g->ops.gr.ecc.ecc_init_support(g);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to init ecc");
|
||||
nvgpu_mutex_release(&g->tpc_pg_lock);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
nvgpu_mutex_release(&g->tpc_pg_lock);
|
||||
|
||||
#ifdef CONFIG_NVGPU_LS_PMU
|
||||
if (nvgpu_is_enabled(g, NVGPU_PMU_PSTATE)) {
|
||||
err = nvgpu_pmu_pstate_sw_setup(g);
|
||||
err = g->ops.pmu.pmu_pstate_sw_setup(g);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to init pstates");
|
||||
nvgpu_mutex_release(&g->tpc_pg_lock);
|
||||
goto done;
|
||||
}
|
||||
|
||||
err = nvgpu_pmu_pstate_pmu_setup(g);
|
||||
err = g->ops.pmu.pmu_pstate_pmu_setup(g);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to init pstates");
|
||||
goto done;
|
||||
@@ -460,7 +452,7 @@ int nvgpu_finalize_poweron(struct gk20a *g)
|
||||
#endif
|
||||
{
|
||||
#ifdef CONFIG_NVGPU_CLK_ARB
|
||||
err = nvgpu_clk_arb_init_arbiter(g);
|
||||
err = g->ops.clk_arb.clk_arb_init_arbiter(g);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to init clk arb");
|
||||
goto done;
|
||||
@@ -468,14 +460,14 @@ int nvgpu_finalize_poweron(struct gk20a *g)
|
||||
#endif
|
||||
}
|
||||
|
||||
err = nvgpu_init_therm_support(g);
|
||||
err = g->ops.therm.init_therm_support(g);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to init gk20a therm");
|
||||
goto done;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_NVGPU_COMPRESSION
|
||||
err = nvgpu_cbc_init_support(g);
|
||||
err = g->ops.cbc.cbc_init_support(g);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to init cbc");
|
||||
goto done;
|
||||
@@ -489,14 +481,14 @@ int nvgpu_finalize_poweron(struct gk20a *g)
|
||||
g->ops.fb.set_debug_mode(g, g->mmu_debug_ctrl);
|
||||
#endif
|
||||
|
||||
err = nvgpu_ce_init_support(g);
|
||||
err = g->ops.ce.ce_init_support(g);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to init ce");
|
||||
goto done;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
err = nvgpu_ce_app_init_support(g);
|
||||
err = g->ops.ce.ce_app_init_support(g);
|
||||
if (err != 0) {
|
||||
nvgpu_err(g, "failed to init ce app");
|
||||
goto done;
|
||||
@@ -552,16 +544,16 @@ int nvgpu_finalize_poweron(struct gk20a *g)
|
||||
|
||||
done:
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
nvgpu_falcon_sw_free(g, FALCON_ID_GSPLITE);
|
||||
g->ops.falcon.falcon_sw_free(g, FALCON_ID_GSPLITE);
|
||||
done_nvdec:
|
||||
nvgpu_falcon_sw_free(g, FALCON_ID_NVDEC);
|
||||
g->ops.falcon.falcon_sw_free(g, FALCON_ID_NVDEC);
|
||||
done_sec2:
|
||||
nvgpu_falcon_sw_free(g, FALCON_ID_SEC2);
|
||||
g->ops.falcon.falcon_sw_free(g, FALCON_ID_SEC2);
|
||||
done_fecs:
|
||||
#endif
|
||||
nvgpu_falcon_sw_free(g, FALCON_ID_FECS);
|
||||
g->ops.falcon.falcon_sw_free(g, FALCON_ID_FECS);
|
||||
done_pmu:
|
||||
nvgpu_falcon_sw_free(g, FALCON_ID_PMU);
|
||||
g->ops.falcon.falcon_sw_free(g, FALCON_ID_PMU);
|
||||
exit:
|
||||
if (err != 0) {
|
||||
g->power_on = false;
|
||||
@@ -653,20 +645,28 @@ static void gk20a_free_cb(struct nvgpu_ref *refcount)
|
||||
nvgpu_log(g, gpu_dbg_shutdown, "Freeing GK20A struct!");
|
||||
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
nvgpu_ce_app_destroy(g);
|
||||
if (g->ops.ce.ce_app_destroy != NULL) {
|
||||
g->ops.ce.ce_app_destroy(g);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_NVGPU_COMPRESSION
|
||||
nvgpu_cbc_remove_support(g);
|
||||
if (g->ops.cbc.cbc_remove_support != NULL) {
|
||||
g->ops.cbc.cbc_remove_support(g);
|
||||
}
|
||||
#endif
|
||||
|
||||
nvgpu_ecc_remove_support(g);
|
||||
if (g->ops.gr.ecc.ecc_remove_support != NULL) {
|
||||
g->ops.gr.ecc.ecc_remove_support(g);
|
||||
}
|
||||
|
||||
if (g->remove_support != NULL) {
|
||||
g->remove_support(g);
|
||||
}
|
||||
|
||||
nvgpu_ltc_remove_support(g);
|
||||
if (g->ops.ltc.ltc_remove_support != NULL) {
|
||||
g->ops.ltc.ltc_remove_support(g);
|
||||
}
|
||||
|
||||
if (g->gfree != NULL) {
|
||||
g->gfree(g);
|
||||
|
||||
@@ -45,6 +45,15 @@
|
||||
#endif
|
||||
#include <nvgpu/gr/fecs_trace.h>
|
||||
#include <nvgpu/nvgpu_init.h>
|
||||
#include <nvgpu/acr.h>
|
||||
#include <nvgpu/ce.h>
|
||||
#include <nvgpu/pmu.h>
|
||||
#ifdef CONFIG_NVGPU_LS_PMU
|
||||
#include <nvgpu/pmu/pmu_pstate.h>
|
||||
#endif
|
||||
#include <nvgpu/fbp.h>
|
||||
#include <nvgpu/therm.h>
|
||||
#include <nvgpu/clk_arb.h>
|
||||
|
||||
#include "hal/mm/mm_gk20a.h"
|
||||
#include "hal/mm/mm_gm20b.h"
|
||||
@@ -122,7 +131,18 @@
|
||||
#define PRIV_SECURITY_DISABLE 0x01
|
||||
|
||||
static const struct gpu_ops gm20b_ops = {
|
||||
.acr = {
|
||||
.acr_init = nvgpu_acr_init,
|
||||
.acr_construct_execute = nvgpu_acr_construct_execute,
|
||||
},
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
.bios = {
|
||||
.bios_sw_init = nvgpu_bios_sw_init,
|
||||
},
|
||||
#endif /* CONFIG_NVGPU_DGPU */
|
||||
.ltc = {
|
||||
.init_ltc_support = nvgpu_init_ltc_support,
|
||||
.ltc_remove_support = nvgpu_ltc_remove_support,
|
||||
.determine_L2_size_bytes = gm20b_determine_L2_size_bytes,
|
||||
.init_fs_state = gm20b_ltc_init_fs_state,
|
||||
.flush = gm20b_flush_ltc,
|
||||
@@ -146,6 +166,8 @@ static const struct gpu_ops gm20b_ops = {
|
||||
},
|
||||
#ifdef CONFIG_NVGPU_COMPRESSION
|
||||
.cbc = {
|
||||
.cbc_init_support = nvgpu_cbc_init_support,
|
||||
.cbc_remove_support = nvgpu_cbc_remove_support,
|
||||
.init = gm20b_cbc_init,
|
||||
.ctrl = gm20b_cbc_ctrl,
|
||||
.alloc_comptags = gm20b_cbc_alloc_comptags,
|
||||
@@ -153,10 +175,20 @@ static const struct gpu_ops gm20b_ops = {
|
||||
},
|
||||
#endif
|
||||
.ce = {
|
||||
.ce_init_support = nvgpu_ce_init_support,
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
.ce_app_init_support = nvgpu_ce_app_init_support,
|
||||
.ce_app_suspend = nvgpu_ce_app_suspend,
|
||||
.ce_app_destroy = nvgpu_ce_app_destroy,
|
||||
#endif
|
||||
.isr_stall = gk20a_ce2_stall_isr,
|
||||
.isr_nonstall = gk20a_ce2_nonstall_isr,
|
||||
},
|
||||
.gr = {
|
||||
.gr_prepare_sw = nvgpu_gr_prepare_sw,
|
||||
.gr_enable_hw = nvgpu_gr_enable_hw,
|
||||
.gr_init_support = nvgpu_gr_init_support,
|
||||
.gr_suspend = nvgpu_gr_suspend,
|
||||
#ifdef CONFIG_NVGPU_DEBUGGER
|
||||
.get_gr_status = gr_gm20b_get_gr_status,
|
||||
.set_alpha_circular_buffer_size =
|
||||
@@ -601,6 +633,8 @@ static const struct gpu_ops gm20b_ops = {
|
||||
gr_gm20b_pg_gr_load_gating_prod,
|
||||
},
|
||||
.fifo = {
|
||||
.fifo_init_support = nvgpu_fifo_init_support,
|
||||
.fifo_suspend = nvgpu_fifo_suspend,
|
||||
.init_fifo_setup_hw = gk20a_init_fifo_setup_hw,
|
||||
.preempt_channel = gk20a_fifo_preempt_channel,
|
||||
.preempt_tsg = gk20a_fifo_preempt_tsg,
|
||||
@@ -798,6 +832,9 @@ static const struct gpu_ops gm20b_ops = {
|
||||
.is_fw_defined = gm20b_netlist_is_firmware_defined,
|
||||
},
|
||||
.mm = {
|
||||
.init_mm_support = nvgpu_init_mm_support,
|
||||
.pd_cache_init = nvgpu_pd_cache_init,
|
||||
.mm_suspend = nvgpu_mm_suspend,
|
||||
.vm_bind_channel = nvgpu_vm_bind_channel,
|
||||
.setup_hw = nvgpu_mm_setup_hw,
|
||||
.is_bar1_supported = gm20b_mm_is_bar1_supported,
|
||||
@@ -825,6 +862,7 @@ static const struct gpu_ops gm20b_ops = {
|
||||
}
|
||||
},
|
||||
.therm = {
|
||||
.init_therm_support = nvgpu_init_therm_support,
|
||||
.init_therm_setup_hw = gm20b_init_therm_setup_hw,
|
||||
.init_elcg_mode = gm20b_therm_init_elcg_mode,
|
||||
.init_blcg_mode = gm20b_therm_init_blcg_mode,
|
||||
@@ -836,6 +874,13 @@ static const struct gpu_ops gm20b_ops = {
|
||||
},
|
||||
#ifdef CONFIG_NVGPU_LS_PMU
|
||||
.pmu = {
|
||||
/* Init */
|
||||
.pmu_init = nvgpu_pmu_init,
|
||||
.pmu_pstate_sw_setup = nvgpu_pmu_pstate_sw_setup,
|
||||
.pmu_pstate_pmu_setup = nvgpu_pmu_pstate_pmu_setup,
|
||||
.pmu_destroy = nvgpu_pmu_destroy,
|
||||
.pmu_early_init = nvgpu_pmu_early_init,
|
||||
|
||||
.is_pmu_supported = gm20b_is_pmu_supported,
|
||||
.falcon_base_addr = gk20a_pmu_falcon_base_addr,
|
||||
.pmu_reset = nvgpu_pmu_reset,
|
||||
@@ -876,6 +921,11 @@ static const struct gpu_ops gm20b_ops = {
|
||||
.setup_apertures = gm20b_pmu_setup_apertures,
|
||||
.secured_pmu_start = gm20b_secured_pmu_start,
|
||||
},
|
||||
#endif
|
||||
#ifdef CONFIG_NVGPU_CLK_ARB
|
||||
.clk_arb = {
|
||||
.clk_arb_init_arbiter = nvgpu_clk_arb_init_arbiter,
|
||||
},
|
||||
#endif
|
||||
.clk = {
|
||||
.init_clk_support = gm20b_init_clk_support,
|
||||
@@ -985,6 +1035,8 @@ static const struct gpu_ops gm20b_ops = {
|
||||
},
|
||||
#endif
|
||||
.falcon = {
|
||||
.falcon_sw_init = nvgpu_falcon_sw_init,
|
||||
.falcon_sw_free = nvgpu_falcon_sw_free,
|
||||
.reset = gk20a_falcon_reset,
|
||||
.is_falcon_cpu_halted = gk20a_is_falcon_cpu_halted,
|
||||
.is_falcon_idle = gk20a_is_falcon_idle,
|
||||
@@ -1008,6 +1060,9 @@ static const struct gpu_ops gm20b_ops = {
|
||||
.get_falcon_ctls = gk20a_falcon_get_ctls,
|
||||
#endif
|
||||
},
|
||||
.fbp = {
|
||||
.fbp_init_support = nvgpu_fbp_init_support,
|
||||
},
|
||||
.priv_ring = {
|
||||
.enable_priv_ring = gm20b_priv_ring_enable,
|
||||
.isr = gm20b_priv_ring_isr,
|
||||
@@ -1063,6 +1118,12 @@ int gm20b_init_hal(struct gk20a *g)
|
||||
return -EINVAL;
|
||||
#endif
|
||||
|
||||
gops->acr = gm20b_ops.acr;
|
||||
gops->bios = gm20b_ops.bios;
|
||||
gops->fbp = gm20b_ops.fbp;
|
||||
#ifdef CONFIG_NVGPU_CLK_ARB
|
||||
gops->clk_arb = gm20b_ops.clk_arb;
|
||||
#endif
|
||||
gops->ltc = gm20b_ops.ltc;
|
||||
#ifdef CONFIG_NVGPU_COMPRESSION
|
||||
gops->cbc = gm20b_ops.cbc;
|
||||
|
||||
@@ -45,6 +45,15 @@
|
||||
#include <nvgpu/pmu/pmu_perfmon.h>
|
||||
#endif
|
||||
#include <nvgpu/nvgpu_init.h>
|
||||
#include <nvgpu/acr.h>
|
||||
#include <nvgpu/ce.h>
|
||||
#include <nvgpu/pmu.h>
|
||||
#ifdef CONFIG_NVGPU_LS_PMU
|
||||
#include <nvgpu/pmu/pmu_pstate.h>
|
||||
#endif
|
||||
#include <nvgpu/fbp.h>
|
||||
#include <nvgpu/therm.h>
|
||||
#include <nvgpu/clk_arb.h>
|
||||
|
||||
#include "hal/mm/mm_gk20a.h"
|
||||
#include "hal/mm/mm_gm20b.h"
|
||||
@@ -151,7 +160,18 @@ static void gp10b_init_gpu_characteristics(struct gk20a *g)
|
||||
}
|
||||
|
||||
static const struct gpu_ops gp10b_ops = {
|
||||
.acr = {
|
||||
.acr_init = nvgpu_acr_init,
|
||||
.acr_construct_execute = nvgpu_acr_construct_execute,
|
||||
},
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
.bios = {
|
||||
.bios_sw_init = nvgpu_bios_sw_init,
|
||||
},
|
||||
#endif /* CONFIG_NVGPU_DGPU */
|
||||
.ltc = {
|
||||
.init_ltc_support = nvgpu_init_ltc_support,
|
||||
.ltc_remove_support = nvgpu_ltc_remove_support,
|
||||
.determine_L2_size_bytes = gp10b_determine_L2_size_bytes,
|
||||
.init_fs_state = gp10b_ltc_init_fs_state,
|
||||
.flush = gm20b_flush_ltc,
|
||||
@@ -175,6 +195,8 @@ static const struct gpu_ops gp10b_ops = {
|
||||
},
|
||||
#ifdef CONFIG_NVGPU_COMPRESSION
|
||||
.cbc = {
|
||||
.cbc_init_support = nvgpu_cbc_init_support,
|
||||
.cbc_remove_support = nvgpu_cbc_remove_support,
|
||||
.init = gm20b_cbc_init,
|
||||
.alloc_comptags = gp10b_cbc_alloc_comptags,
|
||||
.ctrl = gp10b_cbc_ctrl,
|
||||
@@ -182,10 +204,20 @@ static const struct gpu_ops gp10b_ops = {
|
||||
},
|
||||
#endif
|
||||
.ce = {
|
||||
.ce_init_support = nvgpu_ce_init_support,
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
.ce_app_init_support = nvgpu_ce_app_init_support,
|
||||
.ce_app_suspend = nvgpu_ce_app_suspend,
|
||||
.ce_app_destroy = nvgpu_ce_app_destroy,
|
||||
#endif
|
||||
.isr_stall = gp10b_ce_stall_isr,
|
||||
.isr_nonstall = gp10b_ce_nonstall_isr,
|
||||
},
|
||||
.gr = {
|
||||
.gr_prepare_sw = nvgpu_gr_prepare_sw,
|
||||
.gr_enable_hw = nvgpu_gr_enable_hw,
|
||||
.gr_init_support = nvgpu_gr_init_support,
|
||||
.gr_suspend = nvgpu_gr_suspend,
|
||||
#ifdef CONFIG_NVGPU_DEBUGGER
|
||||
.get_gr_status = gr_gm20b_get_gr_status,
|
||||
.set_alpha_circular_buffer_size =
|
||||
@@ -236,6 +268,8 @@ static const struct gpu_ops gp10b_ops = {
|
||||
.esr_bpt_pending_events = gm20b_gr_esr_bpt_pending_events,
|
||||
#endif /* CONFIG_NVGPU_DEBUGGER */
|
||||
.ecc = {
|
||||
.ecc_init_support = nvgpu_ecc_init_support,
|
||||
.ecc_remove_support = nvgpu_ecc_remove_support,
|
||||
.detect = gp10b_ecc_detect_enabled_units,
|
||||
.init = gp10b_ecc_init,
|
||||
},
|
||||
@@ -670,6 +704,8 @@ static const struct gpu_ops gp10b_ops = {
|
||||
gr_gp10b_pg_gr_load_gating_prod,
|
||||
},
|
||||
.fifo = {
|
||||
.fifo_init_support = nvgpu_fifo_init_support,
|
||||
.fifo_suspend = nvgpu_fifo_suspend,
|
||||
.init_fifo_setup_hw = gk20a_init_fifo_setup_hw,
|
||||
.preempt_channel = gk20a_fifo_preempt_channel,
|
||||
.preempt_tsg = gk20a_fifo_preempt_tsg,
|
||||
@@ -884,6 +920,9 @@ static const struct gpu_ops gp10b_ops = {
|
||||
.is_fw_defined = gp10b_netlist_is_firmware_defined,
|
||||
},
|
||||
.mm = {
|
||||
.init_mm_support = nvgpu_init_mm_support,
|
||||
.pd_cache_init = nvgpu_pd_cache_init,
|
||||
.mm_suspend = nvgpu_mm_suspend,
|
||||
.vm_bind_channel = nvgpu_vm_bind_channel,
|
||||
.setup_hw = nvgpu_mm_setup_hw,
|
||||
.is_bar1_supported = gm20b_mm_is_bar1_supported,
|
||||
@@ -913,6 +952,7 @@ static const struct gpu_ops gp10b_ops = {
|
||||
}
|
||||
},
|
||||
.therm = {
|
||||
.init_therm_support = nvgpu_init_therm_support,
|
||||
.init_therm_setup_hw = gp10b_init_therm_setup_hw,
|
||||
.init_elcg_mode = gm20b_therm_init_elcg_mode,
|
||||
.init_blcg_mode = gm20b_therm_init_blcg_mode,
|
||||
@@ -920,6 +960,12 @@ static const struct gpu_ops gp10b_ops = {
|
||||
},
|
||||
#ifdef CONFIG_NVGPU_LS_PMU
|
||||
.pmu = {
|
||||
/* Init */
|
||||
.pmu_early_init = nvgpu_pmu_early_init,
|
||||
.pmu_init = nvgpu_pmu_init,
|
||||
.pmu_pstate_sw_setup = nvgpu_pmu_pstate_sw_setup,
|
||||
.pmu_pstate_pmu_setup = nvgpu_pmu_pstate_pmu_setup,
|
||||
.pmu_destroy = nvgpu_pmu_destroy,
|
||||
.is_pmu_supported = gp10b_is_pmu_supported,
|
||||
.falcon_base_addr = gk20a_pmu_falcon_base_addr,
|
||||
.setup_apertures = gm20b_pmu_setup_apertures,
|
||||
@@ -963,6 +1009,7 @@ static const struct gpu_ops gp10b_ops = {
|
||||
#endif
|
||||
#ifdef CONFIG_NVGPU_CLK_ARB
|
||||
.clk_arb = {
|
||||
.clk_arb_init_arbiter = nvgpu_clk_arb_init_arbiter,
|
||||
.check_clk_arb_support = gp10b_check_clk_arb_support,
|
||||
.get_arbiter_clk_domains = gp10b_get_arbiter_clk_domains,
|
||||
.get_arbiter_f_points = gp10b_get_arbiter_f_points,
|
||||
@@ -1074,6 +1121,8 @@ static const struct gpu_ops gp10b_ops = {
|
||||
},
|
||||
#endif
|
||||
.falcon = {
|
||||
.falcon_sw_init = nvgpu_falcon_sw_init,
|
||||
.falcon_sw_free = nvgpu_falcon_sw_free,
|
||||
.reset = gk20a_falcon_reset,
|
||||
.is_falcon_cpu_halted = gk20a_is_falcon_cpu_halted,
|
||||
.is_falcon_idle = gk20a_is_falcon_idle,
|
||||
@@ -1097,6 +1146,9 @@ static const struct gpu_ops gp10b_ops = {
|
||||
.get_falcon_ctls = gk20a_falcon_get_ctls,
|
||||
#endif
|
||||
},
|
||||
.fbp = {
|
||||
.fbp_init_support = nvgpu_fbp_init_support,
|
||||
},
|
||||
.priv_ring = {
|
||||
.enable_priv_ring = gm20b_priv_ring_enable,
|
||||
.isr = gp10b_priv_ring_isr,
|
||||
@@ -1158,6 +1210,9 @@ int gp10b_init_hal(struct gk20a *g)
|
||||
return -EINVAL;
|
||||
#endif
|
||||
|
||||
gops->acr = gp10b_ops.acr;
|
||||
gops->bios = gp10b_ops.bios;
|
||||
gops->fbp = gp10b_ops.fbp;
|
||||
gops->ltc = gp10b_ops.ltc;
|
||||
#ifdef CONFIG_NVGPU_COMPRESSION
|
||||
gops->cbc = gp10b_ops.cbc;
|
||||
|
||||
@@ -22,6 +22,15 @@
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
#include <nvgpu/gk20a.h>
|
||||
#include <nvgpu/acr.h>
|
||||
#include <nvgpu/ce.h>
|
||||
#include <nvgpu/pmu.h>
|
||||
#ifdef CONFIG_NVGPU_LS_PMU
|
||||
#include <nvgpu/pmu/pmu_pstate.h>
|
||||
#endif
|
||||
#include <nvgpu/fbp.h>
|
||||
#include <nvgpu/therm.h>
|
||||
#include <nvgpu/clk_arb.h>
|
||||
#include <nvgpu/fuse.h>
|
||||
#include <nvgpu/pbdma.h>
|
||||
#include <nvgpu/engines.h>
|
||||
@@ -187,7 +196,18 @@ static void gv11b_init_gpu_characteristics(struct gk20a *g)
|
||||
}
|
||||
|
||||
static const struct gpu_ops gv11b_ops = {
|
||||
.acr = {
|
||||
.acr_init = nvgpu_acr_init,
|
||||
.acr_construct_execute = nvgpu_acr_construct_execute,
|
||||
},
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
.bios = {
|
||||
.bios_sw_init = nvgpu_bios_sw_init,
|
||||
},
|
||||
#endif /* CONFIG_NVGPU_DGPU */
|
||||
.ltc = {
|
||||
.init_ltc_support = nvgpu_init_ltc_support,
|
||||
.ltc_remove_support = nvgpu_ltc_remove_support,
|
||||
#ifdef CONFIG_NVGPU_INJECT_HWERR
|
||||
.get_ltc_err_desc =
|
||||
gv11b_ltc_get_err_desc,
|
||||
@@ -217,12 +237,20 @@ static const struct gpu_ops gv11b_ops = {
|
||||
},
|
||||
#ifdef CONFIG_NVGPU_COMPRESSION
|
||||
.cbc = {
|
||||
.cbc_init_support = nvgpu_cbc_init_support,
|
||||
.cbc_remove_support = nvgpu_cbc_remove_support,
|
||||
.init = gv11b_cbc_init,
|
||||
.alloc_comptags = gp10b_cbc_alloc_comptags,
|
||||
.ctrl = gp10b_cbc_ctrl,
|
||||
},
|
||||
#endif
|
||||
.ce = {
|
||||
.ce_init_support = nvgpu_ce_init_support,
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
.ce_app_init_support = nvgpu_ce_app_init_support,
|
||||
.ce_app_suspend = nvgpu_ce_app_suspend,
|
||||
.ce_app_destroy = nvgpu_ce_app_destroy,
|
||||
#endif
|
||||
.isr_stall = gv11b_ce_stall_isr,
|
||||
.isr_nonstall = gp10b_ce_nonstall_isr,
|
||||
.get_num_pce = gv11b_ce_get_num_pce,
|
||||
@@ -231,6 +259,10 @@ static const struct gpu_ops gv11b_ops = {
|
||||
.init_prod_values = gv11b_ce_init_prod_values,
|
||||
},
|
||||
.gr = {
|
||||
.gr_prepare_sw = nvgpu_gr_prepare_sw,
|
||||
.gr_enable_hw = nvgpu_gr_enable_hw,
|
||||
.gr_init_support = nvgpu_gr_init_support,
|
||||
.gr_suspend = nvgpu_gr_suspend,
|
||||
#ifdef CONFIG_NVGPU_DEBUGGER
|
||||
.get_gr_status = gr_gm20b_get_gr_status,
|
||||
.set_alpha_circular_buffer_size =
|
||||
@@ -293,6 +325,8 @@ static const struct gpu_ops gv11b_ops = {
|
||||
.esr_bpt_pending_events = gv11b_gr_esr_bpt_pending_events,
|
||||
#endif /* CONFIG_NVGPU_DEBUGGER */
|
||||
.ecc = {
|
||||
.ecc_init_support = nvgpu_ecc_init_support,
|
||||
.ecc_remove_support = nvgpu_ecc_remove_support,
|
||||
.detect = gv11b_ecc_detect_enabled_units,
|
||||
.init = gv11b_ecc_init,
|
||||
#ifdef CONFIG_NVGPU_INJECT_HWERR
|
||||
@@ -836,6 +870,8 @@ static const struct gpu_ops gv11b_ops = {
|
||||
gr_gv11b_pg_gr_load_gating_prod,
|
||||
},
|
||||
.fifo = {
|
||||
.fifo_init_support = nvgpu_fifo_init_support,
|
||||
.fifo_suspend = nvgpu_fifo_suspend,
|
||||
.init_fifo_setup_hw = gv11b_init_fifo_setup_hw,
|
||||
.preempt_channel = gv11b_fifo_preempt_channel,
|
||||
.preempt_tsg = gv11b_fifo_preempt_tsg,
|
||||
@@ -1058,6 +1094,9 @@ static const struct gpu_ops gv11b_ops = {
|
||||
.is_fw_defined = gv11b_netlist_is_firmware_defined,
|
||||
},
|
||||
.mm = {
|
||||
.init_mm_support = nvgpu_init_mm_support,
|
||||
.pd_cache_init = nvgpu_pd_cache_init,
|
||||
.mm_suspend = nvgpu_mm_suspend,
|
||||
.vm_bind_channel = nvgpu_vm_bind_channel,
|
||||
.setup_hw = nvgpu_mm_setup_hw,
|
||||
.is_bar1_supported = gv11b_mm_is_bar1_supported,
|
||||
@@ -1091,6 +1130,7 @@ static const struct gpu_ops gv11b_ops = {
|
||||
}
|
||||
},
|
||||
.therm = {
|
||||
.init_therm_support = nvgpu_init_therm_support,
|
||||
.init_therm_setup_hw = gv11b_init_therm_setup_hw,
|
||||
.init_elcg_mode = gv11b_therm_init_elcg_mode,
|
||||
.init_blcg_mode = gm20b_therm_init_blcg_mode,
|
||||
@@ -1107,6 +1147,7 @@ static const struct gpu_ops gv11b_ops = {
|
||||
* ops can be assigned/ignored as per build flag request
|
||||
*/
|
||||
/* Basic init ops */
|
||||
.pmu_early_init = nvgpu_pmu_early_init,
|
||||
.is_pmu_supported = gv11b_is_pmu_supported,
|
||||
.falcon_base_addr = gv11b_pmu_falcon_base_addr,
|
||||
.pmu_reset = nvgpu_pmu_reset,
|
||||
@@ -1122,6 +1163,11 @@ static const struct gpu_ops gv11b_ops = {
|
||||
.bar0_error_status = gv11b_pmu_bar0_error_status,
|
||||
.validate_mem_integrity = gv11b_pmu_validate_mem_integrity,
|
||||
#ifdef CONFIG_NVGPU_LS_PMU
|
||||
/* Init */
|
||||
.pmu_init = nvgpu_pmu_init,
|
||||
.pmu_pstate_sw_setup = nvgpu_pmu_pstate_sw_setup,
|
||||
.pmu_pstate_pmu_setup = nvgpu_pmu_pstate_pmu_setup,
|
||||
.pmu_destroy = nvgpu_pmu_destroy,
|
||||
/* ISR */
|
||||
.pmu_enable_irq = gk20a_pmu_enable_irq,
|
||||
.get_irqdest = gv11b_pmu_get_irqdest,
|
||||
@@ -1160,6 +1206,7 @@ static const struct gpu_ops gv11b_ops = {
|
||||
},
|
||||
#ifdef CONFIG_NVGPU_CLK_ARB
|
||||
.clk_arb = {
|
||||
.clk_arb_init_arbiter = nvgpu_clk_arb_init_arbiter,
|
||||
.check_clk_arb_support = gp10b_check_clk_arb_support,
|
||||
.get_arbiter_clk_domains = gp10b_get_arbiter_clk_domains,
|
||||
.get_arbiter_f_points = gp10b_get_arbiter_f_points,
|
||||
@@ -1274,6 +1321,8 @@ static const struct gpu_ops gv11b_ops = {
|
||||
},
|
||||
#endif
|
||||
.falcon = {
|
||||
.falcon_sw_init = nvgpu_falcon_sw_init,
|
||||
.falcon_sw_free = nvgpu_falcon_sw_free,
|
||||
.reset = gk20a_falcon_reset,
|
||||
.is_falcon_cpu_halted = gk20a_is_falcon_cpu_halted,
|
||||
.is_falcon_idle = gk20a_is_falcon_idle,
|
||||
@@ -1297,6 +1346,9 @@ static const struct gpu_ops gv11b_ops = {
|
||||
.get_falcon_ctls = gk20a_falcon_get_ctls,
|
||||
#endif
|
||||
},
|
||||
.fbp = {
|
||||
.fbp_init_support = nvgpu_fbp_init_support,
|
||||
},
|
||||
.priv_ring = {
|
||||
.enable_priv_ring = gm20b_priv_ring_enable,
|
||||
.isr = gp10b_priv_ring_isr,
|
||||
@@ -1354,6 +1406,9 @@ int gv11b_init_hal(struct gk20a *g)
|
||||
{
|
||||
struct gpu_ops *gops = &g->ops;
|
||||
|
||||
gops->acr = gv11b_ops.acr;
|
||||
gops->bios = gv11b_ops.bios;
|
||||
gops->fbp = gv11b_ops.fbp;
|
||||
gops->ltc = gv11b_ops.ltc;
|
||||
#ifdef CONFIG_NVGPU_COMPRESSION
|
||||
gops->cbc = gv11b_ops.cbc;
|
||||
|
||||
@@ -185,6 +185,14 @@
|
||||
|
||||
#include <nvgpu/ptimer.h>
|
||||
#include <nvgpu/error_notifier.h>
|
||||
#include <nvgpu/acr.h>
|
||||
#include <nvgpu/ce.h>
|
||||
#include <nvgpu/pmu.h>
|
||||
#ifdef CONFIG_NVGPU_LS_PMU
|
||||
#include <nvgpu/pmu/pmu_pstate.h>
|
||||
#endif
|
||||
#include <nvgpu/fbp.h>
|
||||
#include <nvgpu/therm.h>
|
||||
#include <nvgpu/clk_arb.h>
|
||||
#include <nvgpu/class.h>
|
||||
#include <nvgpu/debugger.h>
|
||||
@@ -226,10 +234,20 @@ static void tu104_init_gpu_characteristics(struct gk20a *g)
|
||||
|
||||
|
||||
static const struct gpu_ops tu104_ops = {
|
||||
.acr = {
|
||||
.acr_init = nvgpu_acr_init,
|
||||
.acr_construct_execute = nvgpu_acr_construct_execute,
|
||||
},
|
||||
.bios = {
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
.bios_sw_init = nvgpu_bios_sw_init,
|
||||
.bios_sw_deinit = nvgpu_bios_sw_deinit,
|
||||
#endif /* CONFIG_NVGPU_DGPU */
|
||||
.get_aon_secure_scratch_reg = tu104_get_aon_secure_scratch_reg,
|
||||
},
|
||||
.ltc = {
|
||||
.init_ltc_support = nvgpu_init_ltc_support,
|
||||
.ltc_remove_support = nvgpu_ltc_remove_support,
|
||||
.determine_L2_size_bytes = gp10b_determine_L2_size_bytes,
|
||||
.init_fs_state = ltc_tu104_init_fs_state,
|
||||
.flush = gm20b_flush_ltc,
|
||||
@@ -255,6 +273,8 @@ static const struct gpu_ops tu104_ops = {
|
||||
},
|
||||
#ifdef CONFIG_NVGPU_COMPRESSION
|
||||
.cbc = {
|
||||
.cbc_init_support = nvgpu_cbc_init_support,
|
||||
.cbc_remove_support = nvgpu_cbc_remove_support,
|
||||
.init = tu104_cbc_init,
|
||||
.get_base_divisor = tu104_cbc_get_base_divisor,
|
||||
.alloc_comptags = tu104_cbc_alloc_comptags,
|
||||
@@ -263,6 +283,12 @@ static const struct gpu_ops tu104_ops = {
|
||||
},
|
||||
#endif
|
||||
.ce = {
|
||||
.ce_init_support = nvgpu_ce_init_support,
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
.ce_app_init_support = nvgpu_ce_app_init_support,
|
||||
.ce_app_suspend = nvgpu_ce_app_suspend,
|
||||
.ce_app_destroy = nvgpu_ce_app_destroy,
|
||||
#endif
|
||||
.set_pce2lce_mapping = tu104_ce_set_pce2lce_mapping,
|
||||
.isr_stall = gv11b_ce_stall_isr,
|
||||
.isr_nonstall = NULL,
|
||||
@@ -272,6 +298,10 @@ static const struct gpu_ops tu104_ops = {
|
||||
.init_prod_values = gv11b_ce_init_prod_values,
|
||||
},
|
||||
.gr = {
|
||||
.gr_prepare_sw = nvgpu_gr_prepare_sw,
|
||||
.gr_enable_hw = nvgpu_gr_enable_hw,
|
||||
.gr_init_support = nvgpu_gr_init_support,
|
||||
.gr_suspend = nvgpu_gr_suspend,
|
||||
#ifdef CONFIG_NVGPU_DEBUGGER
|
||||
.get_gr_status = gr_gm20b_get_gr_status,
|
||||
.set_alpha_circular_buffer_size =
|
||||
@@ -333,6 +363,8 @@ static const struct gpu_ops tu104_ops = {
|
||||
.esr_bpt_pending_events = gv11b_gr_esr_bpt_pending_events,
|
||||
#endif /* CONFIG_NVGPU_DEBUGGER */
|
||||
.ecc = {
|
||||
.ecc_init_support = nvgpu_ecc_init_support,
|
||||
.ecc_remove_support = nvgpu_ecc_remove_support,
|
||||
.detect = NULL,
|
||||
.init = tu104_ecc_init,
|
||||
},
|
||||
@@ -864,6 +896,8 @@ static const struct gpu_ops tu104_ops = {
|
||||
tu104_blcg_hshub_load_gating_prod,
|
||||
},
|
||||
.fifo = {
|
||||
.fifo_init_support = nvgpu_fifo_init_support,
|
||||
.fifo_suspend = nvgpu_fifo_suspend,
|
||||
.init_fifo_setup_hw = tu104_init_fifo_setup_hw,
|
||||
.preempt_channel = gv11b_fifo_preempt_channel,
|
||||
.preempt_tsg = gv11b_fifo_preempt_tsg,
|
||||
@@ -1084,6 +1118,9 @@ static const struct gpu_ops tu104_ops = {
|
||||
.is_fw_defined = tu104_netlist_is_firmware_defined,
|
||||
},
|
||||
.mm = {
|
||||
.init_mm_support = nvgpu_init_mm_support,
|
||||
.pd_cache_init = nvgpu_pd_cache_init,
|
||||
.mm_suspend = nvgpu_mm_suspend,
|
||||
.vm_bind_channel = nvgpu_vm_bind_channel,
|
||||
.setup_hw = nvgpu_mm_setup_hw,
|
||||
.is_bar1_supported = gv11b_mm_is_bar1_supported,
|
||||
@@ -1117,6 +1154,7 @@ static const struct gpu_ops tu104_ops = {
|
||||
}
|
||||
},
|
||||
.therm = {
|
||||
.init_therm_support = nvgpu_init_therm_support,
|
||||
/* PROD values match with H/W INIT values */
|
||||
.init_elcg_mode = gv11b_therm_init_elcg_mode,
|
||||
.init_blcg_mode = gm20b_therm_init_blcg_mode,
|
||||
@@ -1130,6 +1168,13 @@ static const struct gpu_ops tu104_ops = {
|
||||
},
|
||||
#ifdef CONFIG_NVGPU_LS_PMU
|
||||
.pmu = {
|
||||
/* Init */
|
||||
.pmu_early_init = nvgpu_pmu_early_init,
|
||||
.pmu_init = nvgpu_pmu_init,
|
||||
.pmu_pstate_sw_setup = nvgpu_pmu_pstate_sw_setup,
|
||||
.pmu_pstate_pmu_setup = nvgpu_pmu_pstate_pmu_setup,
|
||||
.pmu_destroy = nvgpu_pmu_destroy,
|
||||
|
||||
.falcon_base_addr = tu104_pmu_falcon_base_addr,
|
||||
.pmu_queue_tail = gk20a_pmu_queue_tail,
|
||||
.pmu_get_queue_head = tu104_pmu_queue_head_r,
|
||||
@@ -1179,6 +1224,7 @@ static const struct gpu_ops tu104_ops = {
|
||||
},
|
||||
#ifdef CONFIG_NVGPU_CLK_ARB
|
||||
.clk_arb = {
|
||||
.clk_arb_init_arbiter = nvgpu_clk_arb_init_arbiter,
|
||||
.check_clk_arb_support = gv100_check_clk_arb_support,
|
||||
.get_arbiter_clk_domains = gv100_get_arbiter_clk_domains,
|
||||
.get_arbiter_f_points = gv100_get_arbiter_f_points,
|
||||
@@ -1312,6 +1358,8 @@ static const struct gpu_ops tu104_ops = {
|
||||
.disable_shadow_rom = NULL,
|
||||
},
|
||||
.falcon = {
|
||||
.falcon_sw_init = nvgpu_falcon_sw_init,
|
||||
.falcon_sw_free = nvgpu_falcon_sw_free,
|
||||
.reset = gk20a_falcon_reset,
|
||||
.is_falcon_cpu_halted = gk20a_is_falcon_cpu_halted,
|
||||
.is_falcon_idle = gk20a_is_falcon_idle,
|
||||
@@ -1335,6 +1383,9 @@ static const struct gpu_ops tu104_ops = {
|
||||
.get_falcon_ctls = gk20a_falcon_get_ctls,
|
||||
#endif
|
||||
},
|
||||
.fbp = {
|
||||
.fbp_init_support = nvgpu_fbp_init_support,
|
||||
},
|
||||
.priv_ring = {
|
||||
.enable_priv_ring = gm20b_priv_ring_enable,
|
||||
.isr = gp10b_priv_ring_isr,
|
||||
@@ -1416,6 +1467,9 @@ static const struct gpu_ops tu104_ops = {
|
||||
#endif
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
.sec2 = {
|
||||
.init_sec2_setup_sw = nvgpu_init_sec2_setup_sw,
|
||||
.init_sec2_support = nvgpu_init_sec2_support,
|
||||
.sec2_destroy = nvgpu_sec2_destroy,
|
||||
.secured_sec2_start = tu104_start_sec2_secure,
|
||||
.enable_irq = tu104_sec2_enable_irq,
|
||||
.is_interrupted = tu104_sec2_is_interrupted,
|
||||
@@ -1467,6 +1521,8 @@ int tu104_init_hal(struct gk20a *g)
|
||||
struct gpu_ops *gops = &g->ops;
|
||||
|
||||
gops->bios = tu104_ops.bios;
|
||||
gops->acr = tu104_ops.acr;
|
||||
gops->fbp = tu104_ops.fbp;
|
||||
gops->ltc = tu104_ops.ltc;
|
||||
#ifdef CONFIG_NVGPU_COMPRESSION
|
||||
gops->cbc = tu104_ops.cbc;
|
||||
|
||||
@@ -28,6 +28,15 @@
|
||||
#include <nvgpu/channel.h>
|
||||
#include <nvgpu/gr/gr.h>
|
||||
#include <nvgpu/gr/gr_intr.h>
|
||||
#include <nvgpu/acr.h>
|
||||
#include <nvgpu/ce.h>
|
||||
#include <nvgpu/pmu.h>
|
||||
#ifdef CONFIG_NVGPU_LS_PMU
|
||||
#include <nvgpu/pmu/pmu_pstate.h>
|
||||
#endif
|
||||
#include <nvgpu/fbp.h>
|
||||
#include <nvgpu/therm.h>
|
||||
#include <nvgpu/clk_arb.h>
|
||||
|
||||
#include <nvgpu/vgpu/ce_vgpu.h>
|
||||
#include <nvgpu/vgpu/vm_vgpu.h>
|
||||
@@ -106,7 +115,18 @@
|
||||
#include <nvgpu/hw/gp10b/hw_pwr_gp10b.h>
|
||||
|
||||
static const struct gpu_ops vgpu_gp10b_ops = {
|
||||
.acr = {
|
||||
.acr_init = nvgpu_acr_init,
|
||||
.acr_construct_execute = nvgpu_acr_construct_execute,
|
||||
},
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
.bios = {
|
||||
.bios_sw_init = nvgpu_bios_sw_init,
|
||||
},
|
||||
#endif /* CONFIG_NVGPU_DGPU */
|
||||
.ltc = {
|
||||
.init_ltc_support = nvgpu_init_ltc_support,
|
||||
.ltc_remove_support = nvgpu_ltc_remove_support,
|
||||
.determine_L2_size_bytes = vgpu_determine_L2_size_bytes,
|
||||
.init_fs_state = vgpu_ltc_init_fs_state,
|
||||
.flush = NULL,
|
||||
@@ -130,6 +150,8 @@ static const struct gpu_ops vgpu_gp10b_ops = {
|
||||
},
|
||||
#ifdef CONFIG_NVGPU_COMPRESSION
|
||||
.cbc = {
|
||||
.cbc_init_support = nvgpu_cbc_init_support,
|
||||
.cbc_remove_support = nvgpu_cbc_remove_support,
|
||||
.init = NULL,
|
||||
.alloc_comptags = vgpu_cbc_alloc_comptags,
|
||||
.ctrl = NULL,
|
||||
@@ -137,11 +159,21 @@ static const struct gpu_ops vgpu_gp10b_ops = {
|
||||
},
|
||||
#endif
|
||||
.ce = {
|
||||
.ce_init_support = nvgpu_ce_init_support,
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
.ce_app_init_support = nvgpu_ce_app_init_support,
|
||||
.ce_app_suspend = nvgpu_ce_app_suspend,
|
||||
.ce_app_destroy = nvgpu_ce_app_destroy,
|
||||
#endif
|
||||
.isr_stall = NULL,
|
||||
.isr_nonstall = NULL,
|
||||
.get_num_pce = vgpu_ce_get_num_pce,
|
||||
},
|
||||
.gr = {
|
||||
.gr_prepare_sw = nvgpu_gr_prepare_sw,
|
||||
.gr_enable_hw = nvgpu_gr_enable_hw,
|
||||
.gr_init_support = nvgpu_gr_init_support,
|
||||
.gr_suspend = nvgpu_gr_suspend,
|
||||
#ifdef CONFIG_NVGPU_DEBUGGER
|
||||
.set_alpha_circular_buffer_size = NULL,
|
||||
.set_circular_buffer_size = NULL,
|
||||
@@ -433,6 +465,8 @@ static const struct gpu_ops vgpu_gp10b_ops = {
|
||||
.pg_gr_load_gating_prod = NULL,
|
||||
},
|
||||
.fifo = {
|
||||
.fifo_init_support = nvgpu_fifo_init_support,
|
||||
.fifo_suspend = nvgpu_fifo_suspend,
|
||||
.init_fifo_setup_hw = vgpu_init_fifo_setup_hw,
|
||||
.preempt_channel = vgpu_fifo_preempt_channel,
|
||||
.preempt_tsg = vgpu_fifo_preempt_tsg,
|
||||
@@ -598,6 +632,9 @@ static const struct gpu_ops vgpu_gp10b_ops = {
|
||||
.is_fw_defined = gp10b_netlist_is_firmware_defined,
|
||||
},
|
||||
.mm = {
|
||||
.init_mm_support = nvgpu_init_mm_support,
|
||||
.pd_cache_init = nvgpu_pd_cache_init,
|
||||
.mm_suspend = nvgpu_mm_suspend,
|
||||
.vm_bind_channel = vgpu_vm_bind_channel,
|
||||
.setup_hw = NULL,
|
||||
.is_bar1_supported = gm20b_mm_is_bar1_supported,
|
||||
@@ -632,6 +669,7 @@ static const struct gpu_ops vgpu_gp10b_ops = {
|
||||
},
|
||||
#endif
|
||||
.therm = {
|
||||
.init_therm_support = nvgpu_init_therm_support,
|
||||
.init_therm_setup_hw = NULL,
|
||||
.init_elcg_mode = NULL,
|
||||
.init_blcg_mode = NULL,
|
||||
@@ -639,6 +677,11 @@ static const struct gpu_ops vgpu_gp10b_ops = {
|
||||
},
|
||||
#ifdef CONFIG_NVGPU_LS_PMU
|
||||
.pmu = {
|
||||
.pmu_early_init = nvgpu_pmu_early_init,
|
||||
.pmu_init = nvgpu_pmu_init,
|
||||
.pmu_pstate_sw_setup = nvgpu_pmu_pstate_sw_setup,
|
||||
.pmu_pstate_pmu_setup = nvgpu_pmu_pstate_pmu_setup,
|
||||
.pmu_destroy = nvgpu_pmu_destroy,
|
||||
.pmu_setup_elpg = NULL,
|
||||
.pmu_get_queue_head = NULL,
|
||||
.pmu_get_queue_head_size = NULL,
|
||||
@@ -669,6 +712,7 @@ static const struct gpu_ops vgpu_gp10b_ops = {
|
||||
},
|
||||
#endif
|
||||
.clk_arb = {
|
||||
.clk_arb_init_arbiter = nvgpu_clk_arb_init_arbiter,
|
||||
.check_clk_arb_support = gp10b_check_clk_arb_support,
|
||||
.get_arbiter_clk_domains = gp10b_get_arbiter_clk_domains,
|
||||
.get_arbiter_f_points = gp10b_get_arbiter_f_points,
|
||||
@@ -769,6 +813,13 @@ static const struct gpu_ops vgpu_gp10b_ops = {
|
||||
.get_max_buffer_size = vgpu_css_get_buffer_size,
|
||||
},
|
||||
#endif
|
||||
.falcon = {
|
||||
.falcon_sw_init = nvgpu_falcon_sw_init,
|
||||
.falcon_sw_free = nvgpu_falcon_sw_free,
|
||||
},
|
||||
.fbp = {
|
||||
.fbp_init_support = nvgpu_fbp_init_support,
|
||||
},
|
||||
.priv_ring = {
|
||||
.enable_priv_ring = NULL,
|
||||
.isr = NULL,
|
||||
@@ -804,6 +855,9 @@ int vgpu_gp10b_init_hal(struct gk20a *g)
|
||||
struct gpu_ops *gops = &g->ops;
|
||||
struct vgpu_priv_data *priv = vgpu_get_priv_data(g);
|
||||
|
||||
gops->acr = vgpu_gp10b_ops.acr;
|
||||
gops->bios = vgpu_gp10b_ops.bios;
|
||||
gops->fbp = vgpu_gp10b_ops.fbp;
|
||||
gops->ltc = vgpu_gp10b_ops.ltc;
|
||||
#ifdef CONFIG_NVGPU_COMPRESSION
|
||||
gops->cbc = vgpu_gp10b_ops.cbc;
|
||||
|
||||
@@ -96,6 +96,15 @@
|
||||
#include <nvgpu/gr/gr_intr.h>
|
||||
#include <nvgpu/vgpu/vgpu.h>
|
||||
#include <nvgpu/error_notifier.h>
|
||||
#include <nvgpu/acr.h>
|
||||
#include <nvgpu/ce.h>
|
||||
#include <nvgpu/pmu.h>
|
||||
#ifdef CONFIG_NVGPU_LS_PMU
|
||||
#include <nvgpu/pmu/pmu_pstate.h>
|
||||
#endif
|
||||
#include <nvgpu/fbp.h>
|
||||
#include <nvgpu/therm.h>
|
||||
#include <nvgpu/clk_arb.h>
|
||||
|
||||
#include "common/vgpu/init/init_vgpu.h"
|
||||
#include "common/vgpu/fifo/fifo_vgpu.h"
|
||||
@@ -153,7 +162,18 @@ static void vgpu_gv11b_init_gpu_characteristics(struct gk20a *g)
|
||||
}
|
||||
|
||||
static const struct gpu_ops vgpu_gv11b_ops = {
|
||||
.acr = {
|
||||
.acr_init = nvgpu_acr_init,
|
||||
.acr_construct_execute = nvgpu_acr_construct_execute,
|
||||
},
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
.bios = {
|
||||
.bios_sw_init = nvgpu_bios_sw_init,
|
||||
},
|
||||
#endif /* CONFIG_NVGPU_DGPU */
|
||||
.ltc = {
|
||||
.init_ltc_support = nvgpu_init_ltc_support,
|
||||
.ltc_remove_support = nvgpu_ltc_remove_support,
|
||||
.determine_L2_size_bytes = vgpu_determine_L2_size_bytes,
|
||||
.init_fs_state = vgpu_ltc_init_fs_state,
|
||||
.flush = NULL,
|
||||
@@ -178,17 +198,29 @@ static const struct gpu_ops vgpu_gv11b_ops = {
|
||||
},
|
||||
#ifdef CONFIG_NVGPU_COMPRESSION
|
||||
.cbc = {
|
||||
.cbc_init_support = nvgpu_cbc_init_support,
|
||||
.cbc_remove_support = nvgpu_cbc_remove_support,
|
||||
.init = NULL,
|
||||
.ctrl = NULL,
|
||||
.alloc_comptags = vgpu_cbc_alloc_comptags,
|
||||
},
|
||||
#endif
|
||||
.ce = {
|
||||
.ce_init_support = nvgpu_ce_init_support,
|
||||
#ifdef CONFIG_NVGPU_DGPU
|
||||
.ce_app_init_support = nvgpu_ce_app_init_support,
|
||||
.ce_app_suspend = nvgpu_ce_app_suspend,
|
||||
.ce_app_destroy = nvgpu_ce_app_destroy,
|
||||
#endif
|
||||
.isr_stall = NULL,
|
||||
.isr_nonstall = NULL,
|
||||
.get_num_pce = vgpu_ce_get_num_pce,
|
||||
},
|
||||
.gr = {
|
||||
.gr_prepare_sw = nvgpu_gr_prepare_sw,
|
||||
.gr_enable_hw = nvgpu_gr_enable_hw,
|
||||
.gr_init_support = nvgpu_gr_init_support,
|
||||
.gr_suspend = nvgpu_gr_suspend,
|
||||
#ifdef CONFIG_NVGPU_DEBUGGER
|
||||
.set_alpha_circular_buffer_size = NULL,
|
||||
.set_circular_buffer_size = NULL,
|
||||
@@ -544,6 +576,8 @@ static const struct gpu_ops vgpu_gv11b_ops = {
|
||||
.pg_gr_load_gating_prod = NULL,
|
||||
},
|
||||
.fifo = {
|
||||
.fifo_init_support = nvgpu_fifo_init_support,
|
||||
.fifo_suspend = nvgpu_fifo_suspend,
|
||||
.init_fifo_setup_hw = vgpu_gv11b_init_fifo_setup_hw,
|
||||
.preempt_channel = vgpu_fifo_preempt_channel,
|
||||
.preempt_tsg = vgpu_fifo_preempt_tsg,
|
||||
@@ -713,6 +747,9 @@ static const struct gpu_ops vgpu_gv11b_ops = {
|
||||
.is_fw_defined = gv11b_netlist_is_firmware_defined,
|
||||
},
|
||||
.mm = {
|
||||
.init_mm_support = nvgpu_init_mm_support,
|
||||
.pd_cache_init = nvgpu_pd_cache_init,
|
||||
.mm_suspend = nvgpu_mm_suspend,
|
||||
.vm_bind_channel = vgpu_vm_bind_channel,
|
||||
.setup_hw = NULL,
|
||||
.is_bar1_supported = gv11b_mm_is_bar1_supported,
|
||||
@@ -745,6 +782,7 @@ static const struct gpu_ops vgpu_gv11b_ops = {
|
||||
},
|
||||
},
|
||||
.therm = {
|
||||
.init_therm_support = nvgpu_init_therm_support,
|
||||
.init_therm_setup_hw = NULL,
|
||||
.init_elcg_mode = NULL,
|
||||
.init_blcg_mode = NULL,
|
||||
@@ -752,6 +790,11 @@ static const struct gpu_ops vgpu_gv11b_ops = {
|
||||
},
|
||||
#ifdef CONFIG_NVGPU_LS_PMU
|
||||
.pmu = {
|
||||
.pmu_early_init = nvgpu_pmu_early_init,
|
||||
.pmu_init = nvgpu_pmu_init,
|
||||
.pmu_pstate_sw_setup = nvgpu_pmu_pstate_sw_setup,
|
||||
.pmu_pstate_pmu_setup = nvgpu_pmu_pstate_pmu_setup,
|
||||
.pmu_destroy = nvgpu_pmu_destroy,
|
||||
.pmu_setup_elpg = NULL,
|
||||
.pmu_get_queue_head = NULL,
|
||||
.pmu_get_queue_head_size = NULL,
|
||||
@@ -784,6 +827,7 @@ static const struct gpu_ops vgpu_gv11b_ops = {
|
||||
},
|
||||
#endif
|
||||
.clk_arb = {
|
||||
.clk_arb_init_arbiter = nvgpu_clk_arb_init_arbiter,
|
||||
.check_clk_arb_support = gp10b_check_clk_arb_support,
|
||||
.get_arbiter_clk_domains = gp10b_get_arbiter_clk_domains,
|
||||
.get_arbiter_f_points = gp10b_get_arbiter_f_points,
|
||||
@@ -885,6 +929,13 @@ static const struct gpu_ops vgpu_gv11b_ops = {
|
||||
.get_max_buffer_size = vgpu_css_get_buffer_size,
|
||||
},
|
||||
#endif
|
||||
.falcon = {
|
||||
.falcon_sw_init = nvgpu_falcon_sw_init,
|
||||
.falcon_sw_free = nvgpu_falcon_sw_free,
|
||||
},
|
||||
.fbp = {
|
||||
.fbp_init_support = nvgpu_fbp_init_support,
|
||||
},
|
||||
.priv_ring = {
|
||||
.enable_priv_ring = NULL,
|
||||
.isr = NULL,
|
||||
@@ -919,6 +970,8 @@ int vgpu_gv11b_init_hal(struct gk20a *g)
|
||||
struct gpu_ops *gops = &g->ops;
|
||||
struct vgpu_priv_data *priv = vgpu_get_priv_data(g);
|
||||
|
||||
gops->acr = vgpu_gv11b_ops.acr;
|
||||
gops->fbp = vgpu_gv11b_ops.fbp;
|
||||
gops->ltc = vgpu_gv11b_ops.ltc;
|
||||
#ifdef CONFIG_NVGPU_COMPRESSION
|
||||
gops->cbc = vgpu_gv11b_ops.cbc;
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
*/
|
||||
|
||||
struct gk20a;
|
||||
struct nvgpu_acr;
|
||||
struct nvgpu_fifo;
|
||||
struct nvgpu_channel;
|
||||
struct nvgpu_gr;
|
||||
@@ -239,6 +240,13 @@ enum nvgpu_event_id_type {
|
||||
|
||||
struct gpu_ops {
|
||||
struct {
|
||||
int (*acr_init)(struct gk20a *g, struct nvgpu_acr **acr);
|
||||
int (*acr_construct_execute)(struct gk20a *g,
|
||||
struct nvgpu_acr *acr);
|
||||
} acr;
|
||||
struct {
|
||||
int (*init_ltc_support)(struct gk20a *g);
|
||||
void (*ltc_remove_support)(struct gk20a *g);
|
||||
u64 (*determine_L2_size_bytes)(struct gk20a *gk20a);
|
||||
struct nvgpu_hw_err_inject_info_desc * (*get_ltc_err_desc)
|
||||
(struct gk20a *g);
|
||||
@@ -276,6 +284,8 @@ struct gpu_ops {
|
||||
} ltc;
|
||||
#ifdef CONFIG_NVGPU_COMPRESSION
|
||||
struct {
|
||||
int (*cbc_init_support)(struct gk20a *g);
|
||||
void (*cbc_remove_support)(struct gk20a *g);
|
||||
void (*init)(struct gk20a *g, struct nvgpu_cbc *cbc);
|
||||
u64 (*get_base_divisor)(struct gk20a *g);
|
||||
int (*alloc_comptags)(struct gk20a *g,
|
||||
@@ -286,6 +296,10 @@ struct gpu_ops {
|
||||
} cbc;
|
||||
#endif
|
||||
struct {
|
||||
int (*ce_init_support)(struct gk20a *g);
|
||||
int (*ce_app_init_support)(struct gk20a *g);
|
||||
void (*ce_app_suspend)(struct gk20a *g);
|
||||
void (*ce_app_destroy)(struct gk20a *g);
|
||||
void (*set_pce2lce_mapping)(struct gk20a *g);
|
||||
void (*isr_stall)(struct gk20a *g, u32 inst_id, u32 pri_base);
|
||||
u32 (*isr_nonstall)(struct gk20a *g, u32 inst_id, u32 pri_base);
|
||||
@@ -294,6 +308,10 @@ struct gpu_ops {
|
||||
void (*init_prod_values)(struct gk20a *g);
|
||||
} ce;
|
||||
struct {
|
||||
int (*gr_prepare_sw)(struct gk20a *g);
|
||||
int (*gr_enable_hw)(struct gk20a *g);
|
||||
int (*gr_init_support)(struct gk20a *g);
|
||||
int (*gr_suspend)(struct gk20a *g);
|
||||
#ifdef CONFIG_NVGPU_DEBUGGER
|
||||
u32 (*get_gr_status)(struct gk20a *g);
|
||||
void (*access_smpc_reg)(struct gk20a *g, u32 quad, u32 offset);
|
||||
@@ -422,6 +440,8 @@ struct gpu_ops {
|
||||
#endif
|
||||
|
||||
struct {
|
||||
int (*ecc_init_support)(struct gk20a *g);
|
||||
void (*ecc_remove_support)(struct gk20a *g);
|
||||
void (*detect)(struct gk20a *g);
|
||||
int (*init)(struct gk20a *g);
|
||||
struct nvgpu_hw_err_inject_info_desc * (*get_mmu_err_desc)
|
||||
@@ -1041,6 +1061,8 @@ struct gpu_ops {
|
||||
void (*pg_gr_load_gating_prod)(struct gk20a *g, bool prod);
|
||||
} cg;
|
||||
struct {
|
||||
int (*fifo_init_support)(struct gk20a *g);
|
||||
int (*fifo_suspend)(struct gk20a *g);
|
||||
int (*setup_sw)(struct gk20a *g);
|
||||
void (*cleanup_sw)(struct gk20a *g);
|
||||
int (*init_fifo_setup_hw)(struct gk20a *g);
|
||||
@@ -1330,6 +1352,9 @@ struct gpu_ops {
|
||||
bool (*is_fw_defined)(void);
|
||||
} netlist;
|
||||
struct {
|
||||
int (*pd_cache_init)(struct gk20a *g);
|
||||
int (*init_mm_support)(struct gk20a *g);
|
||||
int (*mm_suspend)(struct gk20a *g);
|
||||
int (*vm_bind_channel)(struct vm_gk20a *vm,
|
||||
struct nvgpu_channel *ch);
|
||||
int (*setup_hw)(struct gk20a *g);
|
||||
@@ -1408,6 +1433,7 @@ struct gpu_ops {
|
||||
} pramin;
|
||||
#endif
|
||||
struct {
|
||||
int (*init_therm_support)(struct gk20a *g);
|
||||
int (*init_therm_setup_hw)(struct gk20a *g);
|
||||
void (*init_elcg_mode)(struct gk20a *g, u32 mode, u32 engine);
|
||||
void (*init_blcg_mode)(struct gk20a *g, u32 mode, u32 engine);
|
||||
@@ -1427,6 +1453,12 @@ struct gpu_ops {
|
||||
u32 (*idle_slowdown_disable)(struct gk20a *g);
|
||||
} therm;
|
||||
struct {
|
||||
int (*pmu_early_init)(struct gk20a *g,
|
||||
struct nvgpu_pmu **pmu_p);
|
||||
int (*pmu_init)(struct gk20a *g, struct nvgpu_pmu *pmu);
|
||||
int (*pmu_destroy)(struct gk20a *g, struct nvgpu_pmu *pmu);
|
||||
int (*pmu_pstate_sw_setup)(struct gk20a *g);
|
||||
int (*pmu_pstate_pmu_setup)(struct gk20a *g);
|
||||
struct nvgpu_hw_err_inject_info_desc * (*get_pmu_err_desc)
|
||||
(struct gk20a *g);
|
||||
bool (*is_pmu_supported)(struct gk20a *g);
|
||||
@@ -1535,6 +1567,7 @@ struct gpu_ops {
|
||||
} clk;
|
||||
#ifdef CONFIG_NVGPU_CLK_ARB
|
||||
struct {
|
||||
int (*clk_arb_init_arbiter)(struct gk20a *g);
|
||||
int (*arbiter_clk_init)(struct gk20a *g);
|
||||
bool (*check_clk_arb_support)(struct gk20a *g);
|
||||
u32 (*get_arbiter_clk_domains)(struct gk20a *g);
|
||||
@@ -1671,6 +1704,10 @@ struct gpu_ops {
|
||||
} ptimer;
|
||||
|
||||
struct {
|
||||
int (*bios_sw_init)(struct gk20a *g,
|
||||
struct nvgpu_bios **bios);
|
||||
void (*bios_sw_deinit)(struct gk20a *g,
|
||||
struct nvgpu_bios *bios);
|
||||
u32 (*get_aon_secure_scratch_reg)(struct gk20a *g, u32 i);
|
||||
} bios;
|
||||
|
||||
@@ -1713,6 +1750,8 @@ struct gpu_ops {
|
||||
} xve;
|
||||
#endif
|
||||
struct {
|
||||
int (*falcon_sw_init)(struct gk20a *g, u32 flcn_id);
|
||||
void (*falcon_sw_free)(struct gk20a *g, u32 flcn_id);
|
||||
void (*reset)(struct nvgpu_falcon *flcn);
|
||||
bool (*is_falcon_cpu_halted)(struct nvgpu_falcon *flcn);
|
||||
bool (*is_falcon_idle)(struct nvgpu_falcon *flcn);
|
||||
@@ -1748,6 +1787,9 @@ struct gpu_ops {
|
||||
u32 *sctl, u32 *cpuctl);
|
||||
#endif
|
||||
} falcon;
|
||||
struct {
|
||||
int (*fbp_init_support)(struct gk20a *g);
|
||||
} fbp;
|
||||
struct {
|
||||
void (*enable_priv_ring)(struct gk20a *g);
|
||||
void (*isr)(struct gk20a *g);
|
||||
@@ -1880,6 +1922,10 @@ struct gpu_ops {
|
||||
u32 value);
|
||||
} top;
|
||||
struct {
|
||||
int (*init_sec2_setup_sw)(struct gk20a *g,
|
||||
struct nvgpu_sec2 *sec2);
|
||||
int (*init_sec2_support)(struct gk20a *g);
|
||||
int (*sec2_destroy)(struct gk20a *g);
|
||||
void (*secured_sec2_start)(struct gk20a *g);
|
||||
void (*enable_irq)(struct nvgpu_sec2 *sec2, bool enable);
|
||||
bool (*is_interrupted)(struct nvgpu_sec2 *sec2);
|
||||
|
||||
Reference in New Issue
Block a user