1*91f16700Schasinglulu /* SPDX-License-Identifier: BSD-3-Clause */ 2*91f16700Schasinglulu /* 3*91f16700Schasinglulu * Copyright (c) 2015-2019, Arm Limited and Contributors. All rights reserved. 4*91f16700Schasinglulu * Copyright (c) 2019, Linaro Limited 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu #ifndef SCMI_MSG_RESET_DOMAIN_H 7*91f16700Schasinglulu #define SCMI_MSG_RESET_DOMAIN_H 8*91f16700Schasinglulu 9*91f16700Schasinglulu #include <stdbool.h> 10*91f16700Schasinglulu #include <stdint.h> 11*91f16700Schasinglulu 12*91f16700Schasinglulu #include <lib/utils_def.h> 13*91f16700Schasinglulu 14*91f16700Schasinglulu #define SCMI_PROTOCOL_VERSION_RESET_DOMAIN 0x10000U 15*91f16700Schasinglulu 16*91f16700Schasinglulu #define SCMI_RESET_STATE_ARCH BIT(31) 17*91f16700Schasinglulu #define SCMI_RESET_STATE_IMPL 0U 18*91f16700Schasinglulu 19*91f16700Schasinglulu /* 20*91f16700Schasinglulu * Identifiers of the SCMI Reset Domain Management Protocol commands 21*91f16700Schasinglulu */ 22*91f16700Schasinglulu enum scmi_reset_domain_command_id { 23*91f16700Schasinglulu SCMI_RESET_DOMAIN_ATTRIBUTES = 0x03, 24*91f16700Schasinglulu SCMI_RESET_DOMAIN_REQUEST = 0x04, 25*91f16700Schasinglulu SCMI_RESET_DOMAIN_NOTIFY = 0x05, 26*91f16700Schasinglulu }; 27*91f16700Schasinglulu 28*91f16700Schasinglulu /* 29*91f16700Schasinglulu * Identifiers of the SCMI Reset Domain Management Protocol responses 30*91f16700Schasinglulu */ 31*91f16700Schasinglulu enum scmi_reset_domain_response_id { 32*91f16700Schasinglulu SCMI_RESET_ISSUED = 0x00, 33*91f16700Schasinglulu SCMI_RESET_COMPLETE = 0x04, 34*91f16700Schasinglulu }; 35*91f16700Schasinglulu 36*91f16700Schasinglulu /* 37*91f16700Schasinglulu * PROTOCOL_ATTRIBUTES 38*91f16700Schasinglulu */ 39*91f16700Schasinglulu 40*91f16700Schasinglulu #define SCMI_RESET_DOMAIN_COUNT_MASK GENMASK_32(15, 0) 41*91f16700Schasinglulu 42*91f16700Schasinglulu struct scmi_reset_domain_protocol_attributes_p2a { 43*91f16700Schasinglulu int32_t status; 44*91f16700Schasinglulu uint32_t attributes; 45*91f16700Schasinglulu }; 46*91f16700Schasinglulu 47*91f16700Schasinglulu /* Value for scmi_reset_domain_attributes_p2a:flags */ 48*91f16700Schasinglulu #define SCMI_RESET_DOMAIN_ATTR_ASYNC BIT(31) 49*91f16700Schasinglulu #define SCMI_RESET_DOMAIN_ATTR_NOTIF BIT(30) 50*91f16700Schasinglulu 51*91f16700Schasinglulu /* Value for scmi_reset_domain_attributes_p2a:latency */ 52*91f16700Schasinglulu #define SCMI_RESET_DOMAIN_ATTR_UNK_LAT 0x7fffffffU 53*91f16700Schasinglulu #define SCMI_RESET_DOMAIN_ATTR_MAX_LAT 0x7ffffffeU 54*91f16700Schasinglulu 55*91f16700Schasinglulu /* Macro for scmi_reset_domain_attributes_p2a:name */ 56*91f16700Schasinglulu #define SCMI_RESET_DOMAIN_ATTR_NAME_SZ 16U 57*91f16700Schasinglulu 58*91f16700Schasinglulu struct scmi_reset_domain_attributes_a2p { 59*91f16700Schasinglulu uint32_t domain_id; 60*91f16700Schasinglulu }; 61*91f16700Schasinglulu 62*91f16700Schasinglulu struct scmi_reset_domain_attributes_p2a { 63*91f16700Schasinglulu int32_t status; 64*91f16700Schasinglulu uint32_t flags; 65*91f16700Schasinglulu uint32_t latency; 66*91f16700Schasinglulu char name[SCMI_RESET_DOMAIN_ATTR_NAME_SZ]; 67*91f16700Schasinglulu }; 68*91f16700Schasinglulu 69*91f16700Schasinglulu /* 70*91f16700Schasinglulu * RESET 71*91f16700Schasinglulu */ 72*91f16700Schasinglulu 73*91f16700Schasinglulu /* Values for scmi_reset_domain_request_a2p:flags */ 74*91f16700Schasinglulu #define SCMI_RESET_DOMAIN_ASYNC BIT(2) 75*91f16700Schasinglulu #define SCMI_RESET_DOMAIN_EXPLICIT BIT(1) 76*91f16700Schasinglulu #define SCMI_RESET_DOMAIN_AUTO BIT(0) 77*91f16700Schasinglulu 78*91f16700Schasinglulu struct scmi_reset_domain_request_a2p { 79*91f16700Schasinglulu uint32_t domain_id; 80*91f16700Schasinglulu uint32_t flags; 81*91f16700Schasinglulu uint32_t reset_state; 82*91f16700Schasinglulu }; 83*91f16700Schasinglulu 84*91f16700Schasinglulu struct scmi_reset_domain_request_p2a { 85*91f16700Schasinglulu int32_t status; 86*91f16700Schasinglulu }; 87*91f16700Schasinglulu 88*91f16700Schasinglulu /* 89*91f16700Schasinglulu * RESET_NOTIFY 90*91f16700Schasinglulu */ 91*91f16700Schasinglulu 92*91f16700Schasinglulu /* Values for scmi_reset_notify_p2a:flags */ 93*91f16700Schasinglulu #define SCMI_RESET_DOMAIN_DO_NOTIFY BIT(0) 94*91f16700Schasinglulu 95*91f16700Schasinglulu struct scmi_reset_domain_notify_a2p { 96*91f16700Schasinglulu uint32_t domain_id; 97*91f16700Schasinglulu uint32_t notify_enable; 98*91f16700Schasinglulu }; 99*91f16700Schasinglulu 100*91f16700Schasinglulu struct scmi_reset_domain_notify_p2a { 101*91f16700Schasinglulu int32_t status; 102*91f16700Schasinglulu }; 103*91f16700Schasinglulu 104*91f16700Schasinglulu /* 105*91f16700Schasinglulu * RESET_COMPLETE 106*91f16700Schasinglulu */ 107*91f16700Schasinglulu 108*91f16700Schasinglulu struct scmi_reset_domain_complete_p2a { 109*91f16700Schasinglulu int32_t status; 110*91f16700Schasinglulu uint32_t domain_id; 111*91f16700Schasinglulu }; 112*91f16700Schasinglulu 113*91f16700Schasinglulu /* 114*91f16700Schasinglulu * RESET_ISSUED 115*91f16700Schasinglulu */ 116*91f16700Schasinglulu 117*91f16700Schasinglulu struct scmi_reset_domain_issued_p2a { 118*91f16700Schasinglulu uint32_t domain_id; 119*91f16700Schasinglulu uint32_t reset_state; 120*91f16700Schasinglulu }; 121*91f16700Schasinglulu 122*91f16700Schasinglulu #endif /* SCMI_MSG_RESET_DOMAIN_H */ 123