Files
linux-nvgpu/drivers/gpu/nvgpu/include/nvgpu/mmu_fault.h
Seema Khowala 68caee196a gpu: nvgpu: add mm.mmu_fault.parse_mmu_fault_info gops
Add mm.mmu_fault.parse_mmu_fault_info gops. This is required
for nvgpu-next.
Also add mmu_engine_id type in mmu_fault structure. This variable
will be set in parse_mmu_fault_info hal so that
gv11b_mm_mmu_fault_handle_other_fault_notify does not depend
upon any chip specific h/w header. This is needed because
BAR2 mmu engine id has changed in nvgpu-next.

JIRA NVGPU-5032

Change-Id: I0c5e9ef607aff5b105f59582013cbfb31396290a
Signed-off-by: Seema Khowala <seemaj@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2330693
Reviewed-by: automaticguardword <automaticguardword@nvidia.com>
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
Reviewed-by: svc-mobile-misra <svc-mobile-misra@nvidia.com>
Reviewed-by: svc-mobile-cert <svc-mobile-cert@nvidia.com>
Reviewed-by: Lakshmanan M <lm@nvidia.com>
Reviewed-by: Alex Waterman <alexw@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: Lakshmanan M <lm@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
GVS: Gerrit_Virtual_Submit
2020-12-15 14:13:28 -06:00

233 lines
7.0 KiB
C

/*
* Copyright (c) 2017-2020, 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_MMU_FAULT_H
#define NVGPU_MMU_FAULT_H
/**
* @file
*
* GMMU fault buffer information.
*/
#include <nvgpu/types.h>
/** Index of non-replayable faults in GMMU fault information buffer. */
#define NVGPU_MMU_FAULT_NONREPLAY_INDX 0U
/** Index of replayable faults in GMMU fault information buffer. */
#define NVGPU_MMU_FAULT_REPLAY_INDX 1U
/** Maximum number of valid index in GMMU fault information buffer. */
#define NVGPU_MMU_FAULT_TYPE_NUM 2U
/** Register index of non-replayable faults in BAR0 aperture. */
#define NVGPU_MMU_FAULT_NONREPLAY_REG_INDX 0U
/** Register index of replayable faults in BAR0 aperture. */
#define NVGPU_MMU_FAULT_REPLAY_REG_INDX 1U
/** State which is used for disabling the GMMU fault hardware support. */
#define NVGPU_MMU_FAULT_BUF_DISABLED 0U
/** State which is used for enabling the GMMU fault hardware support. */
#define NVGPU_MMU_FAULT_BUF_ENABLED 1U
/** S/w defined mmu engine id type. */
#define NVGPU_MMU_ENGINE_ID_TYPE_OTHER 0U
/** S/w defined mmu engine id type. */
#define NVGPU_MMU_ENGINE_ID_TYPE_BAR2 1U
/** S/w defined mmu engine id type. */
#define NVGPU_MMU_ENGINE_ID_TYPE_PHYSICAL 2U
/**
* Forward declared opaque placeholder type that does not really exist, but
* helps the compiler about getting types right.
*/
struct nvgpu_channel;
/**
* This structure describes the various debug information reported
* by GMMU during MMU fault exceptions.
*
*Fault buffer format
*-------------------
*
* 31 28 24 23 16 15 8 7 4 0
*.-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-.
*| inst_lo |0 0|apr|0 0 0 0 0 0 0 0|
*`-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-'
*| inst_hi |
*`-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-'
*| addr_31_12 | |AP |
*`-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-'
*| addr_63_32 |
*`-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-'
*| timestamp_lo |
*`-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-'
*| timestamp_hi |
*`-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-'
*| (reserved) | engine_id |
*`-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-'
*|V|R|P| gpc_id |0 0 0|t|0|acctp|0| client |RF0 0|faulttype|
*
*/
struct mmu_fault_info {
/** The faulting context's instance pointer physical address. */
u64 inst_ptr;
/**
* Aperture (SYSMEM or VIDMEM) of faulting context's
* instance pointer.
*/
u32 inst_aperture;
/** Faulting GMMU virtual address. */
u64 fault_addr;
/** Aperture (SYSMEM or VIDMEM) of faulting GMMU virtual address. */
u32 fault_addr_aperture;
/**
* The time instant at which the fault has occurred. This variable
* contains the LSB 32-bit value of actual gpu time.
*/
u32 timestamp_lo;
/**
* The time instant at which the fault has occurred. This variable
* contains the MSB 32-bit value of actual gpu time.
*/
u32 timestamp_hi;
/**
* The MMU engine ID's (i.e. virtual address spaces) has experienced
* a GMMU fault (i.e. GRAPHICS, CE0, HOST0, ...).
*/
u32 mmu_engine_id;
/**
* The s/w defined mmu_engine_id type (BAR2, PHYSICAL).
*/
u32 mmu_engine_id_type;
/** GPC id if client type is gpc. For gv11b, NUM_GPCS = 1. */
u32 gpc_id;
/**
* Client type indicates whether the faulting request originated
* in a GPC, or if it came from another type of HUB client.
*/
u32 client_type;
/**
* Indicates which MMU client generated the faulting request.
* Index in #gv11b_gpc_client_descs/#gv11b_hub_client_descs
* const string array which tells the user understandable string of
* faulting engine and subengine information
* (i.e. gr copy, ce shim, pe 0, ...).
*/
u32 client_id;
/**
* The fault_type field indicates whether the faulting request was
* a read or a write.
*/
u32 fault_type;
/**
* Indicates the type of the faulting request.
* Index in #gv11b_fault_access_type_descs
* const string array which tells the user understandable string of
* access type information
* (i.e. virt read, virt write, phys read, phys write, ...).
*/
u32 access_type;
/**
* This fault indicates an illegal access to a protected region.
*/
u32 protected_mode;
/**
* This fault indicates whether the fault type is replayable or
* non-replayable.
*/
bool replayable_fault;
/**
* Set to true if replayable fault is enabled for any client in the
* instance block. It does not indicate whether the fault is
* replayable.
*/
u32 replay_fault_en;
/**
* Indicates that this current buffer entry is valid or not.
*/
bool valid;
/** PBDMA id if faulting MMU client is a PBDMA. */
u32 faulted_pbdma;
/** Engine id if faulting MMU client is an engine (GR, CE, ...). */
u32 faulted_engine;
/**
* Sub engine id if faulting MMU client is an engine
* (i.e. GPC_L1_0, GPC_PE_0, ...).
*/
u32 faulted_subid;
/** Faulting channel identifier. */
u32 chid;
/** Pointer to a faulting channel structure. */
struct nvgpu_channel *refch;
/**
* Pointer to a client type description in
* #gv11b_fault_client_type_descs const string array
* (gpc and hub).
*/
const char *client_type_desc;
/**
* Pointer to a client access type description in
* #gv11b_fault_access_type_descs const string array
* (i.e. virt read, virt write, phys read, phys write, ...).
*/
const char *fault_type_desc;
/**
* Pointer to a client type description in
* #gv11b_gpc_client_descs/#gv11b_hub_client_descs const string array
* (i.e. gr copy, ce shim, pe 0, ...).
*/
const char *client_id_desc;
};
#endif /* NVGPU_MMU_FAULT_H */