diff options
-rw-r--r-- | module/scmi_reset_domain/include/internal/scmi_reset_domain.h | 3 | ||||
-rw-r--r-- | module/scmi_reset_domain/src/mod_scmi_reset_domain.c | 11 |
2 files changed, 14 insertions, 0 deletions
diff --git a/module/scmi_reset_domain/include/internal/scmi_reset_domain.h b/module/scmi_reset_domain/include/internal/scmi_reset_domain.h index bedd4273..38dcc77f 100644 --- a/module/scmi_reset_domain/include/internal/scmi_reset_domain.h +++ b/module/scmi_reset_domain/include/internal/scmi_reset_domain.h @@ -71,6 +71,9 @@ struct scmi_reset_domain_attributes_p2a { (SCMI_RESET_DOMAIN_ASYNC | SCMI_RESET_DOMAIN_EXPLICIT | \ SCMI_RESET_DOMAIN_AUTO) +#define SCMI_RESET_DOMAIN_RESET_STATE_TYPE_MASK (1UL << 31) +#define SCMI_RESET_DOMAIN_RESET_STATE_ID_MASK UINT32_C(0x7FFFFFFF) + struct scmi_reset_domain_request_a2p { uint32_t domain_id; uint32_t flags; diff --git a/module/scmi_reset_domain/src/mod_scmi_reset_domain.c b/module/scmi_reset_domain/src/mod_scmi_reset_domain.c index 895cfbac..e18326a5 100644 --- a/module/scmi_reset_domain/src/mod_scmi_reset_domain.c +++ b/module/scmi_reset_domain/src/mod_scmi_reset_domain.c @@ -314,6 +314,17 @@ static int reset_request_handler(fwk_id_t service_id, goto exit; } + /** + * Verify that the reset state ID is 0 when the reset + * state type is Architectural. + */ + if (((params.reset_state & SCMI_RESET_DOMAIN_RESET_STATE_TYPE_MASK) == 0) && + ((params.reset_state & SCMI_RESET_DOMAIN_RESET_STATE_ID_MASK) != 0)) { + status = FWK_SUCCESS; + outmsg.status = SCMI_INVALID_PARAMETERS; + goto exit; + } + status = scmi_rd_ctx.scmi_api->get_agent_id(service_id, &agent_id); if (status != FWK_SUCCESS) goto exit; |