mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-22 17:36:20 +03:00
gpu: nvgpu: ltc: doxygen for common.ltc hals
Moved ltc hals from gk20a.h to newly created file gops_ltc.h. Added doxygen documentation for ltc hal functions. JIRA NVGPU-2417 Change-Id: I2b793d7cc27bd54722f37f09af8aea70b5f0dff9 Signed-off-by: Seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/2220582 GVS: Gerrit_Virtual_Submit Reviewed-by: Vinod Gopalakrishnakurup <vinodg@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
Alex Waterman
parent
d59bd99a7e
commit
3d179bb2e8
@@ -92,6 +92,7 @@ ltc:
|
|||||||
safe: yes
|
safe: yes
|
||||||
owner: Seshendra G
|
owner: Seshendra G
|
||||||
sources: [ common/ltc/ltc.c,
|
sources: [ common/ltc/ltc.c,
|
||||||
|
include/nvgpu/gops_ltc.h,
|
||||||
include/nvgpu/ltc.h ]
|
include/nvgpu/ltc.h ]
|
||||||
|
|
||||||
cbc:
|
cbc:
|
||||||
|
|||||||
@@ -46,6 +46,7 @@
|
|||||||
* - @ref unit-cg
|
* - @ref unit-cg
|
||||||
* - @ref unit-pmu
|
* - @ref unit-pmu
|
||||||
* - @ref unit-common-nvgpu
|
* - @ref unit-common-nvgpu
|
||||||
|
* - @ref unit-common-ltc
|
||||||
* - Etc, etc.
|
* - Etc, etc.
|
||||||
*
|
*
|
||||||
* NVGPU Software Unit Design Documentation
|
* NVGPU Software Unit Design Documentation
|
||||||
@@ -136,6 +137,7 @@ enum nvgpu_unit;
|
|||||||
#include <nvgpu/gops_gr.h>
|
#include <nvgpu/gops_gr.h>
|
||||||
#include <nvgpu/gops_fifo.h>
|
#include <nvgpu/gops_fifo.h>
|
||||||
#include <nvgpu/gops_fuse.h>
|
#include <nvgpu/gops_fuse.h>
|
||||||
|
#include <nvgpu/gops_ltc.h>
|
||||||
#include <nvgpu/gops_ramfc.h>
|
#include <nvgpu/gops_ramfc.h>
|
||||||
#include <nvgpu/gops_ramin.h>
|
#include <nvgpu/gops_ramin.h>
|
||||||
#include <nvgpu/gops_runlist.h>
|
#include <nvgpu/gops_runlist.h>
|
||||||
@@ -251,44 +253,8 @@ struct gpu_ops {
|
|||||||
int (*acr_init)(struct gk20a *g);
|
int (*acr_init)(struct gk20a *g);
|
||||||
int (*acr_construct_execute)(struct gk20a *g);
|
int (*acr_construct_execute)(struct gk20a *g);
|
||||||
} acr;
|
} acr;
|
||||||
struct {
|
|
||||||
int (*init_ltc_support)(struct gk20a *g);
|
struct gops_ltc ltc;
|
||||||
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);
|
|
||||||
void (*set_enabled)(struct gk20a *g, bool enabled);
|
|
||||||
void (*init_fs_state)(struct gk20a *g);
|
|
||||||
void (*flush)(struct gk20a *g);
|
|
||||||
#ifdef CONFIG_NVGPU_GRAPHICS
|
|
||||||
void (*set_zbc_color_entry)(struct gk20a *g,
|
|
||||||
u32 *color_val_l2,
|
|
||||||
u32 index);
|
|
||||||
void (*set_zbc_depth_entry)(struct gk20a *g,
|
|
||||||
u32 depth_val,
|
|
||||||
u32 index);
|
|
||||||
void (*set_zbc_s_entry)(struct gk20a *g,
|
|
||||||
u32 s_val,
|
|
||||||
u32 index);
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_NVGPU_DEBUGGER
|
|
||||||
bool (*pri_is_ltc_addr)(struct gk20a *g, u32 addr);
|
|
||||||
bool (*is_ltcs_ltss_addr)(struct gk20a *g, u32 addr);
|
|
||||||
bool (*is_ltcn_ltss_addr)(struct gk20a *g, u32 addr);
|
|
||||||
void (*split_lts_broadcast_addr)(struct gk20a *g, u32 addr,
|
|
||||||
u32 *priv_addr_table,
|
|
||||||
u32 *priv_addr_table_index);
|
|
||||||
void (*split_ltc_broadcast_addr)(struct gk20a *g, u32 addr,
|
|
||||||
u32 *priv_addr_table,
|
|
||||||
u32 *priv_addr_table_index);
|
|
||||||
#endif
|
|
||||||
struct {
|
|
||||||
void (*configure)(struct gk20a *g);
|
|
||||||
void (*isr)(struct gk20a *g, u32 ltc);
|
|
||||||
void (*en_illegal_compstat)(struct gk20a *g,
|
|
||||||
bool enable);
|
|
||||||
} intr;
|
|
||||||
} ltc;
|
|
||||||
#ifdef CONFIG_NVGPU_COMPRESSION
|
#ifdef CONFIG_NVGPU_COMPRESSION
|
||||||
struct {
|
struct {
|
||||||
int (*cbc_init_support)(struct gk20a *g);
|
int (*cbc_init_support)(struct gk20a *g);
|
||||||
|
|||||||
148
drivers/gpu/nvgpu/include/nvgpu/gops_ltc.h
Normal file
148
drivers/gpu/nvgpu/include/nvgpu/gops_ltc.h
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 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_GOPS_LTC_H
|
||||||
|
#define NVGPU_GOPS_LTC_H
|
||||||
|
|
||||||
|
#include <nvgpu/types.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
*
|
||||||
|
* common.ltc interface.
|
||||||
|
*/
|
||||||
|
struct gk20a;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* common.ltc intr subunit hal operations.
|
||||||
|
*
|
||||||
|
* This structure stores common.ltc interrupt subunit hal pointers.
|
||||||
|
*
|
||||||
|
* @see gpu_ops
|
||||||
|
*/
|
||||||
|
struct gops_ltc_intr {
|
||||||
|
/**
|
||||||
|
* @brief ISR for handling ltc interrupts.
|
||||||
|
*
|
||||||
|
* @param g [in] Pointer to GPU driver struct.
|
||||||
|
* @param ltc [in] LTC unit number
|
||||||
|
*
|
||||||
|
* This function handles ltc related ecc interrupts.
|
||||||
|
*/
|
||||||
|
void (*isr)(struct gk20a *g, u32 ltc);
|
||||||
|
|
||||||
|
/** @cond DOXYGEN_SHOULD_SKIP_THIS */
|
||||||
|
void (*configure)(struct gk20a *g);
|
||||||
|
void (*en_illegal_compstat)(struct gk20a *g, bool enable);
|
||||||
|
/** @endcond DOXYGEN_SHOULD_SKIP_THIS */
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* common.ltc unit hal operations.
|
||||||
|
*
|
||||||
|
* This structure stores common.ltc unit hal pointers.
|
||||||
|
*
|
||||||
|
* @see gpu_ops
|
||||||
|
*/
|
||||||
|
struct gops_ltc {
|
||||||
|
/**
|
||||||
|
* @brief Initialize LTC support.
|
||||||
|
*
|
||||||
|
* @param g [in] Pointer to GPU driver struct.
|
||||||
|
*
|
||||||
|
* This function reads ltc unit info from GPU h/w and stores
|
||||||
|
* it in #nvgpu_ltc structure.
|
||||||
|
*
|
||||||
|
* @return 0 in case of success, < 0 in case of failure.
|
||||||
|
* @retval -ENOMEM if memory allocation fails for #nvgpu_ltc.
|
||||||
|
*/
|
||||||
|
int (*init_ltc_support)(struct gk20a *g);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Remove LTC support.
|
||||||
|
*
|
||||||
|
* @param g [in] Pointer to GPU driver struct.
|
||||||
|
*
|
||||||
|
* This function will free memory allocated for #nvgpu_ltc structure.
|
||||||
|
*/
|
||||||
|
void (*ltc_remove_support)(struct gk20a *g);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns GPU L2 cache size.
|
||||||
|
*
|
||||||
|
* @param g [in] Pointer to GPU driver struct.
|
||||||
|
*
|
||||||
|
* This function returns GPU L2 cache size by reading h/w ltc
|
||||||
|
* config register.
|
||||||
|
*
|
||||||
|
* @return Size of L2 cache in bytes.
|
||||||
|
*/
|
||||||
|
u64 (*determine_L2_size_bytes)(struct gk20a *g);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Flush GPU L2 cache.
|
||||||
|
*
|
||||||
|
* @param g [in] Pointer to GPU driver struct.
|
||||||
|
*
|
||||||
|
* This function flushes all L2 cache data to main memory by cleaning
|
||||||
|
* and invaliding all cache sub-units. s/w will poll for completion of
|
||||||
|
* each ltc unit cache cleaning/invalidation for 5 msec. This 5 msec
|
||||||
|
* time out is based on following calculations:
|
||||||
|
* Lowest EMC clock rate will be around 102MHz and thus available
|
||||||
|
* bandwidth is 64b * 2 * 102MHz = 1.3GB/s. Of that bandwidth, GPU
|
||||||
|
* will likely get about half, so 650MB/s at worst. Assuming at most
|
||||||
|
* 1MB of GPU L2 cache, worst case it will take 1MB/650MB/s = 1.5ms.
|
||||||
|
* So 5ms timeout here should be more than enough.
|
||||||
|
*/
|
||||||
|
void (*flush)(struct gk20a *g);
|
||||||
|
|
||||||
|
/** This structure stores ltc interrupt subunit hal pointers. */
|
||||||
|
struct gops_ltc_intr intr;
|
||||||
|
|
||||||
|
/** @cond DOXYGEN_SHOULD_SKIP_THIS */
|
||||||
|
void (*init_fs_state)(struct gk20a *g);
|
||||||
|
void (*set_enabled)(struct gk20a *g, bool enabled);
|
||||||
|
struct nvgpu_hw_err_inject_info_desc * (*get_ltc_err_desc)
|
||||||
|
(struct gk20a *g);
|
||||||
|
#ifdef CONFIG_NVGPU_GRAPHICS
|
||||||
|
void (*set_zbc_color_entry)(struct gk20a *g,
|
||||||
|
u32 *color_val_l2, u32 index);
|
||||||
|
void (*set_zbc_depth_entry)(struct gk20a *g,
|
||||||
|
u32 depth_val, u32 index);
|
||||||
|
void (*set_zbc_s_entry)(struct gk20a *g,
|
||||||
|
u32 s_val, u32 index);
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_NVGPU_DEBUGGER
|
||||||
|
bool (*pri_is_ltc_addr)(struct gk20a *g, u32 addr);
|
||||||
|
bool (*is_ltcs_ltss_addr)(struct gk20a *g, u32 addr);
|
||||||
|
bool (*is_ltcn_ltss_addr)(struct gk20a *g, u32 addr);
|
||||||
|
void (*split_lts_broadcast_addr)(struct gk20a *g, u32 addr,
|
||||||
|
u32 *priv_addr_table,
|
||||||
|
u32 *priv_addr_table_index);
|
||||||
|
void (*split_ltc_broadcast_addr)(struct gk20a *g, u32 addr,
|
||||||
|
u32 *priv_addr_table,
|
||||||
|
u32 *priv_addr_table_index);
|
||||||
|
#endif
|
||||||
|
/** @endcond DOXYGEN_SHOULD_SKIP_THIS */
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* NVGPU_GOPS_LTC_H */
|
||||||
Reference in New Issue
Block a user