| /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
| /* |
| * |
| * (C) COPYRIGHT 2020-2022 ARM Limited. All rights reserved. |
| * |
| * This program is free software and is provided to you under the terms of the |
| * GNU General Public License version 2 as published by the Free Software |
| * Foundation, and any use by you of this program is subject to the terms |
| * of such GNU license. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, you can access it online at |
| * http://www.gnu.org/licenses/gpl-2.0.html. |
| * |
| */ |
| |
| #ifndef _KUTF_CLK_RATE_TRACE_TEST_H_ |
| #define _KUTF_CLK_RATE_TRACE_TEST_H_ |
| |
| #define CLK_RATE_TRACE_APP_NAME "clk_rate_trace" |
| #define CLK_RATE_TRACE_SUITE_NAME "rate_trace" |
| #define CLK_RATE_TRACE_PORTAL "portal" |
| |
| /** |
| * enum kbasep_clk_rate_trace_req - request command to the clock rate trace |
| * service portal. |
| * |
| * @PORTAL_CMD_GET_PLATFORM: Request the platform that the tests are |
| * to be run on. |
| * @PORTAL_CMD_GET_CLK_RATE_MGR: Request the clock trace manager internal |
| * data record. On a positive acknowledgement |
| * the prevailing clock rates and the GPU idle |
| * condition flag are returned. |
| * @PORTAL_CMD_GET_CLK_RATE_TRACE: Request the clock trace portal to return its |
| * data record. On a positive acknowledgement |
| * the last trace recorded clock rates and the |
| * GPU idle condition flag are returned. |
| * @PORTAL_CMD_GET_TRACE_SNAPSHOT: Request the clock trace portal to return its |
| * current snapshot data record. On a positive |
| * acknowledgement the snapshot array matching |
| * the number of clocks are returned. It also |
| * starts a fresh snapshot inside the clock |
| * trace portal. |
| * @PORTAL_CMD_INC_PM_CTX_CNT: Request the clock trace portal to increase |
| * its internal PM_CTX_COUNT. If this increase |
| * yielded a count of 0 -> 1 change, the portal |
| * will initiate a PM_CTX_ACTIVE call to the |
| * Kbase power management. Further increase |
| * requests will limit to only affect the |
| * portal internal count value. |
| * @PORTAL_CMD_DEC_PM_CTX_CNT: Request the clock trace portal to decrease |
| * its internal PM_CTX_COUNT. If this decrease |
| * yielded a count of 1 -> 0 change, the portal |
| * will initiate a PM_CTX_IDLE call to the |
| * Kbase power management. |
| * @PORTAL_CMD_CLOSE_PORTAL: Inform the clock trace portal service the |
| * client has completed its session. The portal |
| * will start the close down action. If no |
| * error has occurred during the dynamic |
| * interactive session, an inherent basic test |
| * carrying out some sanity check on the clock |
| * trace is undertaken. |
| * @PORTAL_CMD_INVOKE_NOTIFY_42KHZ: Invokes all clock rate trace manager callbacks |
| * for the top clock domain with a new GPU frequency |
| * set to 42 kHZ. |
| * @PORTAL_CMD_INVALID: Valid commands termination marker. Must be |
| * the highest enumeration value, as it |
| * represents valid command array size. |
| * @PORTAL_TOTAL_CMDS: Alias of PORTAL_CMD_INVALID. |
| */ |
| /* PORTAL_CMD_INVALID must be the last one, serving the size */ |
| enum kbasep_clk_rate_trace_req { |
| PORTAL_CMD_GET_PLATFORM, |
| PORTAL_CMD_GET_CLK_RATE_MGR, |
| PORTAL_CMD_GET_CLK_RATE_TRACE, |
| PORTAL_CMD_GET_TRACE_SNAPSHOT, |
| PORTAL_CMD_INC_PM_CTX_CNT, |
| PORTAL_CMD_DEC_PM_CTX_CNT, |
| PORTAL_CMD_CLOSE_PORTAL, |
| PORTAL_CMD_INVOKE_NOTIFY_42KHZ, |
| PORTAL_CMD_INVALID, |
| PORTAL_TOTAL_CMDS = PORTAL_CMD_INVALID, |
| }; |
| |
| /** |
| * DOC: Portal service request command names. |
| * |
| * The portal request consists of a kutf named u64-value. |
| * For those above enumerated PORTAL_CMD, the names defined |
| * here are used to mark the name and then followed with a sequence number |
| * value. Example (manual script here for illustration): |
| * exec 5<>run # open the portal kutf run as fd-5 |
| * echo GET_CLK_RATE_MGR=1 >&5 # send the cmd and sequence number 1 |
| * head -n 1 <&5 # read back the 1-line server response |
| * ACK="{SEQ:1, RATE:[0x1ad27480], GPU_IDLE:1}" # response string |
| * echo GET_TRACE_SNAPSHOT=1 >&5 # send the cmd and sequence number 1 |
| * head -n 1 <&5 # read back the 1-line server response |
| * ACK="{SEQ:1, SNAPSHOT_ARRAY:[(0x0, 0x1ad27480, 1, 0)]}" |
| * echo CLOSE_PORTAL=1 >&5 # close the portal |
| * cat <&5 # read back all the response lines |
| * ACK="{SEQ:1, PM_CTX_CNT:0}" # response to close command |
| * KUTF_RESULT_PASS:(explicit pass) # internal sanity test passed. |
| * exec 5>&- # close the service portal fd. |
| * |
| * Expected request command return format: |
| * GET_CLK_RATE_MGR: ACK="{SEQ:12, RATE:[1080, 1280], GPU_IDLE:1}" |
| * Note, the above contains 2-clock with rates in [], GPU idle |
| * GET_CLK_RATE_TRACE: ACK="{SEQ:6, RATE:[0x1ad27480], GPU_IDLE:0}" |
| * Note, 1-clock with rate in [], GPU not idle |
| * GET_TRACE_SNAPSHOT: ACK="{SEQ:8, SNAPSHOT_ARRAY:[(0x0, 0x1ad27480, 1, 0)]}" |
| * Note, 1-clock, (start_rate : 0, last_rate : 0x1ad27480, |
| * trace_rate_up_count: 1, trace_rate_down_count : 0) |
| * For the specific sample case here, there is a single rate_trace event |
| * that yielded a rate increase change. No rate drop event recorded in the |
| * reporting snapshot duration. |
| * INC_PM_CTX_CNT: ACK="{SEQ:1, PM_CTX_CNT:1}" |
| * Note, after the increment, M_CTX_CNT is 1. (i.e. 0 -> 1) |
| * DEC_PM_CTX_CNT: ACK="{SEQ:3, PM_CTX_CNT:0}" |
| * Note, after the decrement, PM_CTX_CNT is 0. (i.e. 1 -> 0) |
| * CLOSE_PORTAL: ACK="{SEQ:1, PM_CTX_CNT:1}" |
| * Note, at the close, PM_CTX_CNT is 1. The PM_CTX_CNT will internally be |
| * dropped down to 0 as part of the portal close clean up. |
| */ |
| #define GET_PLATFORM "GET_PLATFORM" |
| #define GET_CLK_RATE_MGR "GET_CLK_RATE_MGR" |
| #define GET_CLK_RATE_TRACE "GET_CLK_RATE_TRACE" |
| #define GET_TRACE_SNAPSHOT "GET_TRACE_SNAPSHOT" |
| #define INC_PM_CTX_CNT "INC_PM_CTX_CNT" |
| #define DEC_PM_CTX_CNT "DEC_PM_CTX_CNT" |
| #define CLOSE_PORTAL "CLOSE_PORTAL" |
| #define INVOKE_NOTIFY_42KHZ "INVOKE_NOTIFY_42KHZ" |
| |
| /** |
| * DOC: Portal service response tag names. |
| * |
| * The response consists of a kutf named string-value. |
| * In case of a 'NACK' (negative acknowledgment), it can be one of the two formats: |
| * 1. NACK="{SEQ:2, MSG:xyzed}" # NACK on command with sequence tag-2. |
| * Note, the portal has received a valid name and valid sequence number |
| * but can't carry-out the request, reason in the MSG field. |
| * 2. NACK="Failing-message" |
| * Note, unable to parse a valid name or valid sequence number, |
| * or some internal error condition. Reason in the quoted string. |
| */ |
| #define ACK "ACK" |
| #define NACK "NACK" |
| #define MAX_REPLY_NAME_LEN 32 |
| |
| #endif /* _KUTF_CLK_RATE_TRACE_TEST_H_ */ |