mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-22 09:12:24 +03:00
181 lines
5.6 KiB
C
181 lines
5.6 KiB
C
/*
|
|
* Copyright (c) 2019-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 UNIT_NVGPU_PTIMER_H
|
|
#define UNIT_NVGPU_PTIMER_H
|
|
|
|
struct gk20a;
|
|
struct unit_module;
|
|
|
|
/** @addtogroup SWUTS-ptimer
|
|
* @{
|
|
*
|
|
* Software Unit Test Specification for nvgpu.common.ptimer
|
|
*/
|
|
|
|
/**
|
|
* Test specification for: test_setup_env
|
|
*
|
|
* Description: Setup prerequisites for tests.
|
|
*
|
|
* Test Type: Other (setup)
|
|
*
|
|
* Input: None
|
|
*
|
|
* Steps:
|
|
* - Setup ptimer HAL function pointers.
|
|
* - Setup timer reg space in mockio.
|
|
*
|
|
* Output:
|
|
* - UNIT_FAIL if encounters an error creating reg space
|
|
* - UNIT_SUCCESS otherwise
|
|
*/
|
|
int test_setup_env(struct unit_module *m,
|
|
struct gk20a *g, void *args);
|
|
|
|
/**
|
|
* Test specification for: test_free_env
|
|
*
|
|
* Description: Release resources from test_setup_env()
|
|
*
|
|
* Test Type: Other (setup)
|
|
*
|
|
* Input: test_setup_env() has been executed.
|
|
*
|
|
* Steps:
|
|
* - Delete ptimer register space from mockio.
|
|
*
|
|
* Output:
|
|
* - UNIT_FAIL if encounters an error creating reg space
|
|
* - UNIT_SUCCESS otherwise
|
|
*/
|
|
int test_free_env(struct unit_module *m,
|
|
struct gk20a *g, void *args);
|
|
|
|
/**
|
|
* Test specification for: test_read_ptimer
|
|
*
|
|
* Description: Verify the read_ptimer API.
|
|
*
|
|
* Test Type: Feature Based
|
|
*
|
|
* Targets: gops_ptimer.read_ptimer, gk20a_read_ptimer
|
|
*
|
|
* Input: None
|
|
*
|
|
* Steps:
|
|
* - Test case where the ptimer time values do not wrap.
|
|
* - Write values to ptimer regs timer_time_0 and timer_time_1 in mockio
|
|
* register space.
|
|
* - Call read_timer API.
|
|
* - Verify the expected value is returned.
|
|
* - Test case where ptimer time values wrap once.
|
|
* - Configure mockio so that the timer_time_1 register reads a different
|
|
* value after the 1st read, but is consistent after 2nd read.
|
|
* - Call read_timer API.
|
|
* - Verify the expected value is returned.
|
|
* - Test case where ptimer time values wrap once.
|
|
* - Configure mockio so that the timer_time_1 register reads a different
|
|
* value for up to 4 reads.
|
|
* - Call read_timer API.
|
|
* - Verify API returns an error.
|
|
* - Test parameter checking of the API
|
|
* - Call read_timer API with a NULL pointer for the time parameter.
|
|
* - Verify API returns an error.
|
|
*
|
|
* Output:
|
|
* - UNIT_FAIL if encounters an error creating reg space
|
|
* - UNIT_SUCCESS otherwise
|
|
*/
|
|
int test_read_ptimer(struct unit_module *m,
|
|
struct gk20a *g, void *args);
|
|
|
|
/**
|
|
* Test specification for: test_ptimer_isr
|
|
*
|
|
* Description: Verify the ptimer isr API. The ISR only logs the errors and
|
|
* clears the ISR regs. This test verifies the code paths do not
|
|
* cause errors.
|
|
*
|
|
* Test Type: Feature Based
|
|
*
|
|
* Targets: gops_ptimer.isr, gk20a_ptimer_isr
|
|
*
|
|
* Input: None
|
|
*
|
|
* Steps:
|
|
* - Test isr with 0 register values.
|
|
* - Initialize registers to 0: pri_timeout_save_0, pri_timeout_save_1,
|
|
* pri_timeout_fecs_errcode.
|
|
* - Call isr API.
|
|
* - Verify the save_* regs were all set to 0.
|
|
* - Test with FECS bits set.
|
|
* - Set the fecs bit in the pri_timeout_save_0 reg and an error code in the
|
|
* pri_timeout_fecs_errcode reg.
|
|
* - Call isr API.
|
|
* - Verify the save_* regs were all set to 0.
|
|
* - Test with FECS bits set and verify priv_ring decode error HAL is invoked.
|
|
* - Set the fecs bit in the pri_timeout_save_0 reg and an error code in the
|
|
* pri_timeout_fecs_errcode reg.
|
|
* - Set the HAL priv_ring.decode_error_code to a mock function.
|
|
* - Call isr API.
|
|
* - Verify the fecs error code was passed to the decode_error_code mock
|
|
* function.
|
|
* - Verify the save_* regs were all set to 0.
|
|
* - Test branch for save0 timeout bit being set.
|
|
* - Set the timeout bit in the pri_timeout_save_0 reg.
|
|
* - Call isr API.
|
|
* - Verify the save_* regs were all set to 0.
|
|
*
|
|
* Output:
|
|
* - UNIT_FAIL if encounters an error creating reg space
|
|
* - UNIT_SUCCESS otherwise
|
|
*/
|
|
int test_ptimer_isr(struct unit_module *m,
|
|
struct gk20a *g, void *args);
|
|
|
|
/**
|
|
* Test specification for: test_ptimer_scaling
|
|
*
|
|
* Description: Verify the scale_ptimer() and ptimer_scalingfactor10x() APIs.
|
|
*
|
|
* Test Type: Feature Based, Boundary Values
|
|
*
|
|
* Targets: scale_ptimer, ptimer_scalingfactor10x
|
|
*
|
|
* Input: None
|
|
*
|
|
* Steps:
|
|
* - Call the scale_ptimer() API with various input values and verify the
|
|
* returned value.
|
|
* - Call the ptimer_scalingfactor10x() API with various input values and verify
|
|
* the returned value.
|
|
*
|
|
* Output:
|
|
* - UNIT_FAIL if encounters an error creating reg space
|
|
* - UNIT_SUCCESS otherwise
|
|
*/
|
|
int test_ptimer_scaling(struct unit_module *m,
|
|
struct gk20a *g, void *args);
|
|
|
|
#endif /* UNIT_NVGPU_PTIMER_H */
|