mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-11-04 05:50:17 +00:00 
			
		
		
		
	firmware: scmi: support protocols on sandbox only if enabled
This change will be useful when we manually test SCMI on sandbox by enabling/disabling a specific SCMI protocol. Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
							parent
							
								
									63cd0dceea
								
							
						
					
					
						commit
						9c07c0a4fc
					
				@ -66,10 +66,10 @@ struct scmi_channel {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static u8 protocols[] = {
 | 
			
		||||
	SCMI_PROTOCOL_ID_POWER_DOMAIN,
 | 
			
		||||
	SCMI_PROTOCOL_ID_CLOCK,
 | 
			
		||||
	SCMI_PROTOCOL_ID_RESET_DOMAIN,
 | 
			
		||||
	SCMI_PROTOCOL_ID_VOLTAGE_DOMAIN,
 | 
			
		||||
	CONFIG_IS_ENABLED(SCMI_POWER_DOMAIN, (SCMI_PROTOCOL_ID_POWER_DOMAIN,))
 | 
			
		||||
	CONFIG_IS_ENABLED(CLK_SCMI, (SCMI_PROTOCOL_ID_CLOCK,))
 | 
			
		||||
	CONFIG_IS_ENABLED(RESET_SCMI, (SCMI_PROTOCOL_ID_RESET_DOMAIN,))
 | 
			
		||||
	CONFIG_IS_ENABLED(DM_REGULATOR_SCMI, (SCMI_PROTOCOL_ID_VOLTAGE_DOMAIN,))
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define NUM_PROTOCOLS ARRAY_SIZE(protocols)
 | 
			
		||||
@ -1124,6 +1124,13 @@ unsigned int sandbox_scmi_channel_id(struct udevice *dev)
 | 
			
		||||
	return chan->channel_id;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int sandbox_proto_not_supported(struct scmi_msg *msg)
 | 
			
		||||
{
 | 
			
		||||
	*(u32 *)msg->out_msg = SCMI_NOT_SUPPORTED;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int sandbox_scmi_test_process_msg(struct udevice *dev,
 | 
			
		||||
					 struct scmi_channel *channel,
 | 
			
		||||
					 struct scmi_msg *msg)
 | 
			
		||||
@ -1160,6 +1167,9 @@ static int sandbox_scmi_test_process_msg(struct udevice *dev,
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case SCMI_PROTOCOL_ID_POWER_DOMAIN:
 | 
			
		||||
		if (!CONFIG_IS_ENABLED(SCMI_POWER_DOMAIN))
 | 
			
		||||
			return sandbox_proto_not_supported(msg);
 | 
			
		||||
 | 
			
		||||
		switch (msg->message_id) {
 | 
			
		||||
		case SCMI_PROTOCOL_VERSION:
 | 
			
		||||
			return sandbox_scmi_pwd_protocol_version(dev, msg);
 | 
			
		||||
@ -1180,6 +1190,9 @@ static int sandbox_scmi_test_process_msg(struct udevice *dev,
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case SCMI_PROTOCOL_ID_CLOCK:
 | 
			
		||||
		if (!CONFIG_IS_ENABLED(CLK_SCMI))
 | 
			
		||||
			return sandbox_proto_not_supported(msg);
 | 
			
		||||
 | 
			
		||||
		switch (msg->message_id) {
 | 
			
		||||
		case SCMI_PROTOCOL_ATTRIBUTES:
 | 
			
		||||
			return sandbox_scmi_clock_protocol_attribs(dev, msg);
 | 
			
		||||
@ -1196,6 +1209,9 @@ static int sandbox_scmi_test_process_msg(struct udevice *dev,
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case SCMI_PROTOCOL_ID_RESET_DOMAIN:
 | 
			
		||||
		if (!CONFIG_IS_ENABLED(RESET_SCMI))
 | 
			
		||||
			return sandbox_proto_not_supported(msg);
 | 
			
		||||
 | 
			
		||||
		switch (msg->message_id) {
 | 
			
		||||
		case SCMI_RESET_DOMAIN_ATTRIBUTES:
 | 
			
		||||
			return sandbox_scmi_rd_attribs(dev, msg);
 | 
			
		||||
@ -1206,6 +1222,9 @@ static int sandbox_scmi_test_process_msg(struct udevice *dev,
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case SCMI_PROTOCOL_ID_VOLTAGE_DOMAIN:
 | 
			
		||||
		if (!CONFIG_IS_ENABLED(DM_REGULATOR_SCMI))
 | 
			
		||||
			return sandbox_proto_not_supported(msg);
 | 
			
		||||
 | 
			
		||||
		switch (msg->message_id) {
 | 
			
		||||
		case SCMI_VOLTAGE_DOMAIN_ATTRIBUTES:
 | 
			
		||||
			return sandbox_scmi_voltd_attribs(dev, msg);
 | 
			
		||||
@ -1224,8 +1243,7 @@ static int sandbox_scmi_test_process_msg(struct udevice *dev,
 | 
			
		||||
	case SCMI_PROTOCOL_ID_SYSTEM:
 | 
			
		||||
	case SCMI_PROTOCOL_ID_PERF:
 | 
			
		||||
	case SCMI_PROTOCOL_ID_SENSOR:
 | 
			
		||||
		*(u32 *)msg->out_msg = SCMI_NOT_SUPPORTED;
 | 
			
		||||
		return 0;
 | 
			
		||||
		return sandbox_proto_not_supported(msg);
 | 
			
		||||
	default:
 | 
			
		||||
		break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -62,12 +62,13 @@ static int sandbox_scmi_devices_remove(struct udevice *dev)
 | 
			
		||||
	if (!devices)
 | 
			
		||||
		return 0;
 | 
			
		||||
 | 
			
		||||
	for (n = 0; n < SCMI_TEST_DEVICES_RD_COUNT; n++) {
 | 
			
		||||
		int ret2 = reset_free(devices->reset + n);
 | 
			
		||||
	if (CONFIG_IS_ENABLED(RESET_SCMI))
 | 
			
		||||
		for (n = 0; n < SCMI_TEST_DEVICES_RD_COUNT; n++) {
 | 
			
		||||
			int ret2 = reset_free(devices->reset + n);
 | 
			
		||||
 | 
			
		||||
		if (ret2 && !ret)
 | 
			
		||||
			ret = ret2;
 | 
			
		||||
	}
 | 
			
		||||
			if (ret2 && !ret)
 | 
			
		||||
				ret = ret2;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
@ -89,39 +90,53 @@ static int sandbox_scmi_devices_probe(struct udevice *dev)
 | 
			
		||||
		.regul_count = SCMI_TEST_DEVICES_VOLTD_COUNT,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	ret = power_domain_get_by_index(dev, priv->devices.pwdom, 0);
 | 
			
		||||
	if (ret) {
 | 
			
		||||
		dev_err(dev, "%s: Failed on power domain\n", __func__);
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for (n = 0; n < SCMI_TEST_DEVICES_CLK_COUNT; n++) {
 | 
			
		||||
		ret = clk_get_by_index(dev, n, priv->devices.clk + n);
 | 
			
		||||
	if (CONFIG_IS_ENABLED(SCMI_POWER_DOMAIN)) {
 | 
			
		||||
		ret = power_domain_get_by_index(dev, priv->devices.pwdom, 0);
 | 
			
		||||
		if (ret) {
 | 
			
		||||
			dev_err(dev, "%s: Failed on clk %zu\n", __func__, n);
 | 
			
		||||
			dev_err(dev, "%s: Failed on power domain\n", __func__);
 | 
			
		||||
			return ret;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for (n = 0; n < SCMI_TEST_DEVICES_RD_COUNT; n++) {
 | 
			
		||||
		ret = reset_get_by_index(dev, n, priv->devices.reset + n);
 | 
			
		||||
		if (ret) {
 | 
			
		||||
			dev_err(dev, "%s: Failed on reset %zu\n", __func__, n);
 | 
			
		||||
			goto err_reset;
 | 
			
		||||
	if (CONFIG_IS_ENABLED(CLK_SCMI)) {
 | 
			
		||||
		for (n = 0; n < SCMI_TEST_DEVICES_CLK_COUNT; n++) {
 | 
			
		||||
			ret = clk_get_by_index(dev, n, priv->devices.clk + n);
 | 
			
		||||
			if (ret) {
 | 
			
		||||
				dev_err(dev, "%s: Failed on clk %zu\n",
 | 
			
		||||
					__func__, n);
 | 
			
		||||
				return ret;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for (n = 0; n < SCMI_TEST_DEVICES_VOLTD_COUNT; n++) {
 | 
			
		||||
		char name[32];
 | 
			
		||||
	if (CONFIG_IS_ENABLED(RESET_SCMI)) {
 | 
			
		||||
		for (n = 0; n < SCMI_TEST_DEVICES_RD_COUNT; n++) {
 | 
			
		||||
			ret = reset_get_by_index(dev, n,
 | 
			
		||||
						 priv->devices.reset + n);
 | 
			
		||||
			if (ret) {
 | 
			
		||||
				dev_err(dev, "%s: Failed on reset %zu\n",
 | 
			
		||||
					__func__, n);
 | 
			
		||||
				goto err_reset;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
		ret = snprintf(name, sizeof(name), "regul%zu-supply", n);
 | 
			
		||||
		assert(ret >= 0 && ret < sizeof(name));
 | 
			
		||||
	if (CONFIG_IS_ENABLED(DM_REGULATOR_SCMI)) {
 | 
			
		||||
		for (n = 0; n < SCMI_TEST_DEVICES_VOLTD_COUNT; n++) {
 | 
			
		||||
			char name[32];
 | 
			
		||||
 | 
			
		||||
		ret = device_get_supply_regulator(dev, name,
 | 
			
		||||
						  priv->devices.regul + n);
 | 
			
		||||
		if (ret) {
 | 
			
		||||
			dev_err(dev, "%s: Failed on voltd %zu\n", __func__, n);
 | 
			
		||||
			goto err_regul;
 | 
			
		||||
			ret = snprintf(name, sizeof(name), "regul%zu-supply",
 | 
			
		||||
				       n);
 | 
			
		||||
			assert(ret >= 0 && ret < sizeof(name));
 | 
			
		||||
 | 
			
		||||
			ret = device_get_supply_regulator(dev, name,
 | 
			
		||||
							  priv->devices.regul
 | 
			
		||||
								+ n);
 | 
			
		||||
			if (ret) {
 | 
			
		||||
				dev_err(dev, "%s: Failed on voltd %zu\n",
 | 
			
		||||
					__func__, n);
 | 
			
		||||
				goto err_regul;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -130,8 +145,9 @@ static int sandbox_scmi_devices_probe(struct udevice *dev)
 | 
			
		||||
err_regul:
 | 
			
		||||
	n = SCMI_TEST_DEVICES_RD_COUNT;
 | 
			
		||||
err_reset:
 | 
			
		||||
	for (; n > 0; n--)
 | 
			
		||||
		reset_free(priv->devices.reset + n - 1);
 | 
			
		||||
	if (CONFIG_IS_ENABLED(RESET_SCMI))
 | 
			
		||||
		for (; n > 0; n--)
 | 
			
		||||
			reset_free(priv->devices.reset + n - 1);
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user