diff --git a/drivers/gpu/nvgpu/include/nvgpu/posix/io.h b/drivers/gpu/nvgpu/include/nvgpu/posix/io.h index d23bee9b3..4e82dd985 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/posix/io.h +++ b/drivers/gpu/nvgpu/include/nvgpu/posix/io.h @@ -123,4 +123,17 @@ void nvgpu_posix_io_record_access(struct gk20a *g, bool nvgpu_posix_io_check_sequence(struct gk20a *g, struct nvgpu_reg_access *sequence, u32 size, bool strict); +#ifdef NVGPU_UNITTEST_FAULT_INJECTION_ENABLEMENT +/** + * @brief Get fault injection structure. + * + * @param void. + * + * Returns the reference to nvgpu_readl fault injection structure. + * + * @return Pointer to nvgpu_readl fault injection structure. + */ +struct nvgpu_posix_fault_inj *nvgpu_readl_get_fault_injection(void); +#endif + #endif diff --git a/drivers/gpu/nvgpu/libnvgpu-drv_safe.export b/drivers/gpu/nvgpu/libnvgpu-drv_safe.export index 8977e084d..b31d0104d 100644 --- a/drivers/gpu/nvgpu/libnvgpu-drv_safe.export +++ b/drivers/gpu/nvgpu/libnvgpu-drv_safe.export @@ -601,6 +601,7 @@ nvgpu_rbtree_search nvgpu_rbtree_unlink nvgpu_readl nvgpu_readl_impl +nvgpu_readl_get_fault_injection nvgpu_request_firmware nvgpu_runlist_cleanup_sw nvgpu_runlist_construct_locked diff --git a/drivers/gpu/nvgpu/os/posix/posix-io.c b/drivers/gpu/nvgpu/os/posix/posix-io.c index 4c19e5d8c..9e16703ab 100644 --- a/drivers/gpu/nvgpu/os/posix/posix-io.c +++ b/drivers/gpu/nvgpu/os/posix/posix-io.c @@ -25,10 +25,21 @@ #include #include +#include #include "os_posix.h" +#ifdef NVGPU_UNITTEST_FAULT_INJECTION_ENABLEMENT +struct nvgpu_posix_fault_inj *nvgpu_readl_get_fault_injection(void) +{ + struct nvgpu_posix_fault_inj_container *c = + nvgpu_posix_fault_injection_get_container(); + + return &c->nvgpu_readl_fi; +} +#endif + /* * This function sets the IO callbacks to the passed set of callbacks. It * returns the value of the old IO callback struct pointer. This function @@ -80,6 +91,13 @@ u32 nvgpu_readl(struct gk20a *g, u32 r) .value = 0L }; +#ifdef NVGPU_UNITTEST_FAULT_INJECTION_ENABLEMENT + if (nvgpu_posix_fault_injection_handle_call( + nvgpu_readl_get_fault_injection()) == true) { + return 0; + } +#endif + if (callbacks == NULL || callbacks->readl == NULL) { BUG(); }