gpu: nvgpu: Remove fifo->pbdma_map

The FIFO pbdma map is an array of bit maps that link PBDMAs to runlists.
This array allows other software to query what PBDMA(s) serves a given
runlist. The PBDMA map is read verbatim from an array of host registers.
These registers are stored in a kmalloc()'ed array.

This causes a problem for the device management code. The device
management initialization executes well before the rest of the FIFO
PBDMA initialization occurs. Thus, if the device management code
queries the PBDMA mapping for a given device/runlist, the mapping has
yet to be populated.

In the next patches in this series the engine management code is subsumed
into the device management code. In other words the device struct is
reused by the engine management and all host SW does is pull pointers to
the host managed devices from the device manager. This means that all
engine initialization that used to be done on top of the device
management needs to move to the device code.

So, long story short, the PBDMA map needs to be read from the registers
directly, instead of an array that gets allocated long after the device
code has run.

This patch removes the pbdma map array, deletes two HALs that managed
that, and instead provides a new HAL to query this map directly from
the registers so that the device code can use it.

JIRA NVGPU-5421

Change-Id: I5966d440903faee640e3b41494d2caf4cd177b6d
Signed-off-by: Alex Waterman <alexw@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2361134
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
Reviewed-by: svc-mobile-cert <svc-mobile-cert@nvidia.com>
Reviewed-by: svc-mobile-misra <svc-mobile-misra@nvidia.com>
Reviewed-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-by: Konsta Holtta <kholtta@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
GVS: Gerrit_Virtual_Submit
This commit is contained in:
Alex Waterman
2020-06-13 11:33:23 -05:00
parent 223d8522a1
commit fbb6a5bc1c
29 changed files with 88 additions and 275 deletions

View File

@@ -173,15 +173,8 @@ done:
#define F_ENGINE_INIT_INFO_GET_DEV_INFO_NULL BIT(0)
#define F_ENGINE_INIT_INFO_GET_DEV_INFO_FAIL BIT(1)
#define F_ENGINE_INIT_INFO_PBDMA_FIND_FAIL BIT(2)
#define F_ENGINE_INIT_INFO_INIT_CE_FAIL BIT(3)
#define F_ENGINE_INIT_INFO_LAST BIT(4)
static bool stub_pbdma_find_for_runlist_none(struct gk20a *g,
u32 runlist_id, u32 *pbdma_id)
{
return false;
}
#define F_ENGINE_INIT_INFO_INIT_CE_FAIL BIT(2)
#define F_ENGINE_INIT_INFO_LAST BIT(3)
static int stub_engine_init_ce_info_EINVAL(struct nvgpu_fifo *f)
{
@@ -200,12 +193,10 @@ int test_engine_init_info(struct unit_module *m,
u32 fail =
F_ENGINE_INIT_INFO_GET_DEV_INFO_NULL |
F_ENGINE_INIT_INFO_GET_DEV_INFO_FAIL |
F_ENGINE_INIT_INFO_PBDMA_FIND_FAIL |
F_ENGINE_INIT_INFO_INIT_CE_FAIL;
const char *labels[] = {
"get_dev_info_null",
"get_dev_info_fail",
"pbdma_find_fail",
"init_ce_fail",
};
u32 prune = fail;
@@ -221,11 +212,6 @@ int test_engine_init_info(struct unit_module *m,
unit_verbose(m, "%s branches=%s\n", __func__,
branches_str(branches, labels));
g->ops.pbdma.find_for_runlist =
branches & F_ENGINE_INIT_INFO_PBDMA_FIND_FAIL ?
stub_pbdma_find_for_runlist_none :
gops.pbdma.find_for_runlist;
g->ops.engine.init_ce_info =
branches & F_ENGINE_INIT_INFO_INIT_CE_FAIL ?
stub_engine_init_ce_info_EINVAL :