diff --git a/xen/arch/arm/dom0less-build.c b/xen/arch/arm/dom0less-build.c index 6f73c65e51..52cf788a45 100644 --- a/xen/arch/arm/dom0less-build.c +++ b/xen/arch/arm/dom0less-build.c @@ -273,8 +273,7 @@ static int __init domu_dt_sci_parse(struct dt_device_node *node, d_cfg->arch.arm_sci_type = XEN_DOMCTL_CONFIG_ARM_SCI_NONE; - if ( !IS_ENABLED(CONFIG_ARM_SCI) || - !dt_property_read_bool(node, "xen,sci_type") ) + if ( !dt_property_read_bool(node, "xen,sci_type") ) return 0; ret = dt_property_read_string(node, "xen,sci_type", &sci_type); @@ -284,7 +283,15 @@ static int __init domu_dt_sci_parse(struct dt_device_node *node, if ( !strcmp(sci_type, "none") ) d_cfg->arch.arm_sci_type = XEN_DOMCTL_CONFIG_ARM_SCI_NONE; else if ( !strcmp(sci_type, "scmi_smc") ) + { + if ( !IS_ENABLED(CONFIG_SCMI_SMC) ) + { + printk(XENLOG_ERR "xen,sci_type=scmi_smc requested, but CONFIG_SCMI_SMC not set\n"); + return -EINVAL; + } + d_cfg->arch.arm_sci_type = XEN_DOMCTL_CONFIG_ARM_SCI_SCMI_SMC; + } else { printk(XENLOG_ERR "xen,sci_type in not valid (%s) for domain %s\n", diff --git a/xen/arch/arm/include/asm/firmware/sci.h b/xen/arch/arm/include/asm/firmware/sci.h index 3500216bc2..485ce211c9 100644 --- a/xen/arch/arm/include/asm/firmware/sci.h +++ b/xen/arch/arm/include/asm/firmware/sci.h @@ -148,6 +148,8 @@ int sci_dt_finalize(struct domain *d, void *fdt); int sci_assign_dt_device(struct domain *d, struct dt_device_node *dev); #else +#include + static inline bool sci_domain_is_enabled(struct domain *d) { return false; @@ -162,6 +164,9 @@ static inline int sci_domain_init(struct domain *d, static inline int sci_domain_sanitise_config(struct xen_domctl_createdomain *config) { + if ( config->arch.arm_sci_type != XEN_DOMCTL_CONFIG_ARM_SCI_NONE ) + return -EINVAL; + return 0; }