123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- /*
- * Copyright (c) 2017-2020, NVIDIA CORPORATION. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- #ifndef BPMP_INTF_H
- #define BPMP_INTF_H
- /**
- * Flags used in IPC req
- */
- #define FLAG_DO_ACK (U(1) << 0)
- #define FLAG_RING_DOORBELL (U(1) << 1)
- /* Bit 1 is designated for CCPlex in secure world */
- #define HSP_MASTER_CCPLEX_BIT (U(1) << 1)
- /* Bit 19 is designated for BPMP in non-secure world */
- #define HSP_MASTER_BPMP_BIT (U(1) << 19)
- /* Timeout to receive response from BPMP is 1 sec */
- #define TIMEOUT_RESPONSE_FROM_BPMP_US U(1000000) /* in microseconds */
- /**
- * IVC protocol defines and command/response frame
- */
- /**
- * IVC specific defines
- */
- #define IVC_CMD_SZ_BYTES U(128)
- #define IVC_DATA_SZ_BYTES U(120)
- /**
- * Holds frame data for an IPC request
- */
- struct frame_data {
- /* Identification as to what kind of data is being transmitted */
- uint32_t mrq;
- /* Flags for slave as to how to respond back */
- uint32_t flags;
- /* Actual data being sent */
- uint8_t data[IVC_DATA_SZ_BYTES];
- };
- /**
- * Commands send to the BPMP firmware
- */
- /**
- * MRQ command codes
- */
- #define MRQ_RESET U(20)
- #define MRQ_CLK U(22)
- /**
- * Reset sub-commands
- */
- #define CMD_RESET_ASSERT U(1)
- #define CMD_RESET_DEASSERT U(2)
- #define CMD_RESET_MODULE U(3)
- /**
- * Used by the sender of an #MRQ_RESET message to request BPMP to
- * assert or deassert a given reset line.
- */
- struct __attribute__((packed)) mrq_reset_request {
- /* reset action to perform (mrq_reset_commands) */
- uint32_t cmd;
- /* id of the reset to affected */
- uint32_t reset_id;
- };
- /**
- * MRQ_CLK sub-commands
- *
- */
- enum {
- CMD_CLK_GET_RATE = U(1),
- CMD_CLK_SET_RATE = U(2),
- CMD_CLK_ROUND_RATE = U(3),
- CMD_CLK_GET_PARENT = U(4),
- CMD_CLK_SET_PARENT = U(5),
- CMD_CLK_IS_ENABLED = U(6),
- CMD_CLK_ENABLE = U(7),
- CMD_CLK_DISABLE = U(8),
- CMD_CLK_GET_ALL_INFO = U(14),
- CMD_CLK_GET_MAX_CLK_ID = U(15),
- CMD_CLK_MAX,
- };
- /**
- * Used by the sender of an #MRQ_CLK message to control clocks. The
- * clk_request is split into several sub-commands. Some sub-commands
- * require no additional data. Others have a sub-command specific
- * payload
- *
- * |sub-command |payload |
- * |----------------------------|-----------------------|
- * |CMD_CLK_GET_RATE |- |
- * |CMD_CLK_SET_RATE |clk_set_rate |
- * |CMD_CLK_ROUND_RATE |clk_round_rate |
- * |CMD_CLK_GET_PARENT |- |
- * |CMD_CLK_SET_PARENT |clk_set_parent |
- * |CMD_CLK_IS_ENABLED |- |
- * |CMD_CLK_ENABLE |- |
- * |CMD_CLK_DISABLE |- |
- * |CMD_CLK_GET_ALL_INFO |- |
- * |CMD_CLK_GET_MAX_CLK_ID |- |
- *
- */
- struct mrq_clk_request {
- /**
- * sub-command and clock id concatenated to 32-bit word.
- * - bits[31..24] is the sub-cmd.
- * - bits[23..0] is the clock id
- */
- uint32_t cmd_and_id;
- };
- /**
- * Macro to prepare the MRQ_CLK sub-command
- */
- #define make_mrq_clk_cmd(cmd, id) (((cmd) << 24) | (id & 0xFFFFFF))
- #endif /* BPMP_INTF_H */
|