mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 00:22:00 +02:00
platform/x86/amd/hsmp: Create wrapper function init_acpi()
This is in preparation to splitting ACPI and platform device drivers. Having init_acpi() helps in smooth code movement. Signed-off-by: Suma Hegde <suma.hegde@amd.com> Reviewed-by: Naveen Krishna Chatradhi <naveenkrishna.chatradhi@amd.com> Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Link: https://lore.kernel.org/r/20241021111428.2676884-2-suma.hegde@amd.com Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
This commit is contained in:
parent
9df193087b
commit
1e1c4c0ab3
|
|
@ -778,6 +778,11 @@ static int init_platform_device(struct device *dev)
|
|||
dev_err(dev, "Is HSMP disabled in BIOS ?\n");
|
||||
return ret;
|
||||
}
|
||||
ret = hsmp_cache_proto_ver(i);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to read HSMP protocol version\n");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -789,10 +794,53 @@ static const struct acpi_device_id amd_hsmp_acpi_ids[] = {
|
|||
};
|
||||
MODULE_DEVICE_TABLE(acpi, amd_hsmp_acpi_ids);
|
||||
|
||||
static bool check_acpi_support(struct device *dev)
|
||||
{
|
||||
struct acpi_device *adev = ACPI_COMPANION(dev);
|
||||
|
||||
if (adev && !acpi_match_device_ids(adev, amd_hsmp_acpi_ids))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static int init_acpi(struct device *dev)
|
||||
{
|
||||
u16 sock_ind;
|
||||
int ret;
|
||||
|
||||
ret = hsmp_get_uid(dev, &sock_ind);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (sock_ind >= plat_dev.num_sockets)
|
||||
return -EINVAL;
|
||||
|
||||
ret = hsmp_parse_acpi_table(dev, sock_ind);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to parse ACPI table\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Test the hsmp interface */
|
||||
ret = hsmp_test(sock_ind, 0xDEADBEEF);
|
||||
if (ret) {
|
||||
dev_err(dev, "HSMP test message failed on Fam:%x model:%x\n",
|
||||
boot_cpu_data.x86, boot_cpu_data.x86_model);
|
||||
dev_err(dev, "Is HSMP disabled in BIOS ?\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = hsmp_cache_proto_ver(sock_ind);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to read HSMP protocol version\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int hsmp_pltdrv_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct acpi_device *adev;
|
||||
u16 sock_ind = 0;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
|
|
@ -809,46 +857,25 @@ static int hsmp_pltdrv_probe(struct platform_device *pdev)
|
|||
if (!plat_dev.sock)
|
||||
return -ENOMEM;
|
||||
}
|
||||
adev = ACPI_COMPANION(&pdev->dev);
|
||||
if (adev && !acpi_match_device_ids(adev, amd_hsmp_acpi_ids)) {
|
||||
ret = hsmp_get_uid(&pdev->dev, &sock_ind);
|
||||
if (check_acpi_support(&pdev->dev)) {
|
||||
ret = init_acpi(&pdev->dev);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Failed to init HSMP mailbox\n");
|
||||
return ret;
|
||||
}
|
||||
ret = hsmp_create_acpi_sysfs_if(&pdev->dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
if (sock_ind >= plat_dev.num_sockets)
|
||||
return -EINVAL;
|
||||
ret = hsmp_parse_acpi_table(&pdev->dev, sock_ind);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Failed to parse ACPI table\n");
|
||||
return ret;
|
||||
}
|
||||
/* Test the hsmp interface */
|
||||
ret = hsmp_test(sock_ind, 0xDEADBEEF);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "HSMP test message failed on Fam:%x model:%x\n",
|
||||
boot_cpu_data.x86, boot_cpu_data.x86_model);
|
||||
dev_err(&pdev->dev, "Is HSMP disabled in BIOS ?\n");
|
||||
return ret;
|
||||
}
|
||||
dev_err(&pdev->dev, "Failed to create HSMP sysfs interface\n");
|
||||
} else {
|
||||
ret = init_platform_device(&pdev->dev);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Failed to init HSMP mailbox\n");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
ret = hsmp_cache_proto_ver(sock_ind);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Failed to read HSMP protocol version\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (plat_dev.is_acpi_device)
|
||||
ret = hsmp_create_acpi_sysfs_if(&pdev->dev);
|
||||
else
|
||||
ret = hsmp_create_non_acpi_sysfs_if(&pdev->dev);
|
||||
if (ret)
|
||||
dev_err(&pdev->dev, "Failed to create HSMP sysfs interface\n");
|
||||
if (ret)
|
||||
dev_err(&pdev->dev, "Failed to create HSMP sysfs interface\n");
|
||||
}
|
||||
|
||||
if (!plat_dev.is_probed) {
|
||||
plat_dev.hsmp_device.name = HSMP_CDEV_NAME;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user