mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 10:34:43 +03:00
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
86 lines
3.3 KiB
C
86 lines
3.3 KiB
C
/*
|
|
* Copyright (c) 2014-2019, NVIDIA CORPORATION. All rights reserved.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
* copy of this software and associated documentation files (the "Software"),
|
|
* to deal in the Software without restriction, including without limitation
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
* Software is furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
* DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
|
|
#ifndef NVGPU_PBDMA_GM20B_H
|
|
#define NVGPU_PBDMA_GM20B_H
|
|
|
|
#include <nvgpu/types.h>
|
|
|
|
struct gk20a;
|
|
struct nvgpu_debug_context;
|
|
struct nvgpu_channel_dump_info;
|
|
struct nvgpu_gpfifo_entry;
|
|
struct nvgpu_pbdma_status_info;
|
|
|
|
bool gm20b_pbdma_handle_intr_0(struct gk20a *g, u32 pbdma_id,
|
|
u32 pbdma_intr_0, u32 *error_notifier);
|
|
bool gm20b_pbdma_handle_intr(struct gk20a *g, u32 pbdma_id,
|
|
u32 *error_notifier,
|
|
struct nvgpu_pbdma_status_info *pbdma_status);
|
|
|
|
u32 gm20b_pbdma_read_data(struct gk20a *g, u32 pbdma_id);
|
|
void gm20b_pbdma_reset_header(struct gk20a *g, u32 pbdma_id);
|
|
void gm20b_pbdma_reset_method(struct gk20a *g, u32 pbdma_id,
|
|
u32 pbdma_method_index);
|
|
u32 gm20b_pbdma_acquire_val(u64 timeout);
|
|
|
|
void gm20b_pbdma_format_gpfifo_entry(struct gk20a *g,
|
|
struct nvgpu_gpfifo_entry *gpfifo_entry,
|
|
u64 pb_gpu_va, u32 method_size);
|
|
|
|
u32 gm20b_pbdma_device_fatal_0_intr_descs(void);
|
|
u32 gm20b_pbdma_restartable_0_intr_descs(void);
|
|
|
|
void gm20b_pbdma_clear_all_intr(struct gk20a *g, u32 pbdma_id);
|
|
void gm20b_pbdma_disable_and_clear_all_intr(struct gk20a *g);
|
|
|
|
u32 gm20b_pbdma_get_gp_base(u64 gpfifo_base);
|
|
u32 gm20b_pbdma_get_gp_base_hi(u64 gpfifo_base, u32 gpfifo_entry);
|
|
|
|
u32 gm20b_pbdma_get_fc_subdevice(void);
|
|
u32 gm20b_pbdma_get_fc_target(void);
|
|
u32 gm20b_pbdma_get_ctrl_hce_priv_mode_yes(void);
|
|
u32 gm20b_pbdma_get_userd_aperture_mask(struct gk20a *g, struct nvgpu_mem *mem);
|
|
u32 gm20b_pbdma_get_userd_addr(u32 addr_lo);
|
|
u32 gm20b_pbdma_get_userd_hi_addr(u32 addr_hi);
|
|
bool gm20b_pbdma_find_for_runlist(struct gk20a *g,
|
|
u32 runlist_id, u32 *pbdma_mask);
|
|
|
|
#ifdef CONFIG_NVGPU_HAL_NON_FUSA
|
|
void gm20b_pbdma_intr_enable(struct gk20a *g, bool enable);
|
|
|
|
bool gm20b_pbdma_handle_intr_1(struct gk20a *g, u32 pbdma_id,
|
|
u32 pbdma_intr_1, u32 *error_notifier);
|
|
u32 gm20b_pbdma_get_signature(struct gk20a *g);
|
|
u32 gm20b_pbdma_channel_fatal_0_intr_descs(void);
|
|
|
|
void gm20b_pbdma_syncpoint_debug_dump(struct gk20a *g,
|
|
struct nvgpu_debug_context *o,
|
|
struct nvgpu_channel_dump_info *info);
|
|
void gm20b_pbdma_setup_hw(struct gk20a *g);
|
|
u32 gm20b_pbdma_get_fc_formats(void);
|
|
u32 gm20b_pbdma_get_fc_pb_header(void);
|
|
void gm20b_pbdma_dump_status(struct gk20a *g, struct nvgpu_debug_context *o);
|
|
#endif
|
|
|
|
#endif /* NVGPU_PBDMA_GM20B_H */
|