mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-15 17:14:21 +00:00

Add the basic support for i.MX8ULP. The i.MX 8ULP family of processors features NXP’s advanced implementation of the dual Arm Cortex-A35 cores alongside an Arm Cortex-M33. This combined architecture enables the device to run a rich operating system (such as Linux) on the Cortex-A35 core and an RTOS (such as FreeRTOS) on the Cortex-M33 core. It also includes a Cadence Tensilica Fusion DSP for low-power audio and a HiFi4 DSP for advanced audio and machine learning applications. Signed-off-by: Peng Fan <peng.fan@nxp.com> Signed-off-by: Ye Li <ye.li@nxp.com> Signed-off-by: Jacky Bai <ping.bai@nxp.com> Change-Id: I12df622b95960bcdf7da52e4c66470a700690e36
139 lines
4.5 KiB
C
139 lines
4.5 KiB
C
/*
|
|
* Copyright (c) 2015-2024, Arm Limited and Contributors. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*
|
|
* Description:
|
|
* System Control and Management Interface (SCMI) support.
|
|
*/
|
|
|
|
#ifndef INTERNAL_SCMI_SENSOR_H
|
|
#define INTERNAL_SCMI_SENSOR_H
|
|
|
|
#include <stdint.h>
|
|
|
|
#define SCMI_PROTOCOL_VERSION_SENSOR UINT32_C(0x10000)
|
|
|
|
/*
|
|
* PROTOCOL_ATTRIBUTES
|
|
*/
|
|
struct scmi_sensor_protocol_attributes_p2a {
|
|
int32_t status;
|
|
uint32_t attributes;
|
|
uint32_t sensor_reg_address_low;
|
|
uint32_t sensor_reg_address_high;
|
|
uint32_t sensor_reg_len;
|
|
};
|
|
|
|
/*
|
|
* SENSOR_READING_GET
|
|
*/
|
|
#define SCMI_SENSOR_PROTOCOL_READING_GET_ASYNC_FLAG_MASK (1 << 0)
|
|
|
|
struct scmi_sensor_protocol_reading_get_a2p {
|
|
uint32_t sensor_id;
|
|
uint32_t flags;
|
|
};
|
|
|
|
struct scmi_sensor_protocol_reading_get_p2a {
|
|
int32_t status;
|
|
uint32_t sensor_value_low;
|
|
uint32_t sensor_value_high;
|
|
};
|
|
|
|
/*
|
|
* SENSOR_DESCRIPTION_GET
|
|
*/
|
|
#define SCMI_SENSOR_DESCS_MAX(MAILBOX_SIZE) \
|
|
((sizeof(struct scmi_sensor_protocol_description_get_p2a) < MAILBOX_SIZE) \
|
|
? ((MAILBOX_SIZE - \
|
|
sizeof(struct scmi_sensor_protocol_description_get_p2a)) \
|
|
/ sizeof(struct scmi_sensor_desc)) \
|
|
: 0)
|
|
|
|
#define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_POS 0
|
|
#define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_POS 11
|
|
#define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_POS 22
|
|
#define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_POS 27
|
|
|
|
#define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_MASK \
|
|
(UINT32_C(0xFF) << SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_POS)
|
|
#define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MASK \
|
|
(UINT32_C(0x1F) << SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_POS)
|
|
#define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MASK \
|
|
(UINT32_C(0x1F) << \
|
|
SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_POS)
|
|
#define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_MASK \
|
|
(UINT32_C(0x1F) << SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_POS)
|
|
|
|
#define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MAX \
|
|
(int32_t)(SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MASK >> 1)
|
|
#define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MIN \
|
|
(-(SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MAX + 1))
|
|
|
|
#define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MAX \
|
|
(int32_t)(SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_MASK >> 1)
|
|
#define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MIN \
|
|
(-(SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MAX + 1))
|
|
|
|
#define SCMI_SENSOR_DESC_ATTRIBUTES_HIGH(SENSOR_TYPE, UNIT_MULTIPLIER, \
|
|
UPDATE_MULTIPLIER, UPDATE_INTERVAL) \
|
|
( \
|
|
(((SENSOR_TYPE) << \
|
|
SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_POS) & \
|
|
SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_MASK) | \
|
|
(((UNIT_MULTIPLIER) << \
|
|
SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_POS) & \
|
|
SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MASK) | \
|
|
(((UPDATE_MULTIPLIER) << \
|
|
SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_POS) & \
|
|
SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MASK) | \
|
|
(((UPDATE_INTERVAL) << \
|
|
SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_POS) & \
|
|
SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_MASK) \
|
|
)
|
|
|
|
#define SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_POS 0
|
|
#define SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_POS 16
|
|
|
|
#define SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_MASK \
|
|
(UINT32_C(0xFFF) << SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_POS)
|
|
#define SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_MASK \
|
|
(UINT32_C(0xFFFF) << SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_POS)
|
|
|
|
#define SCMI_SENSOR_NUM_SENSOR_FLAGS(NUM_DESCS, NUM_REMAINING_DESCS) \
|
|
( \
|
|
(((NUM_DESCS) << \
|
|
SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_POS) & \
|
|
SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_MASK) | \
|
|
(((NUM_REMAINING_DESCS) << \
|
|
SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_POS) & \
|
|
SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_MASK) \
|
|
)
|
|
|
|
#define SCMI_SENSOR_NAME_LEN 16
|
|
|
|
struct scmi_sensor_desc {
|
|
uint32_t sensor_id;
|
|
uint32_t sensor_attributes_low;
|
|
uint32_t sensor_attributes_high;
|
|
char sensor_name[SCMI_SENSOR_NAME_LEN];
|
|
};
|
|
|
|
struct scmi_sensor_protocol_description_get_a2p {
|
|
uint32_t desc_index;
|
|
};
|
|
|
|
struct scmi_sensor_protocol_description_get_p2a {
|
|
int32_t status;
|
|
uint32_t num_sensor_flags;
|
|
struct scmi_sensor_desc sensor_desc[];
|
|
};
|
|
|
|
/* Event indices */
|
|
enum scmi_sensor_api_idx {
|
|
SCMI_SENSOR_EVENT_IDX_REQUEST,
|
|
SCMI_SENSOR_EVENT_IDX_COUNT,
|
|
};
|
|
|
|
#endif /* INTERNAL_SCMI_SENSOR_H */
|