Commit 937b62b4 authored by Mario Limonciello's avatar Mario Limonciello Committed by Darren Hart (VMware)

platform/x86: dell-smbios-base: Support systems without tokens

Some Dell servers can use dell-smbios but they don't support the
token interface.  Make it optional.
Signed-off-by: default avatarMario Limonciello <mario.limonciello@dell.com>
Signed-off-by: default avatarDarren Hart (VMware) <dvhart@infradead.org>
parent cb5c1978
...@@ -212,6 +212,12 @@ int dell_smbios_call_filter(struct device *d, ...@@ -212,6 +212,12 @@ int dell_smbios_call_filter(struct device *d,
if ((buffer->cmd_class == CLASS_TOKEN_READ || if ((buffer->cmd_class == CLASS_TOKEN_READ ||
buffer->cmd_class == CLASS_TOKEN_WRITE) && buffer->cmd_class == CLASS_TOKEN_WRITE) &&
buffer->cmd_select < 3) { buffer->cmd_select < 3) {
/* tokens enabled ? */
if (!da_tokens) {
dev_dbg(d, "no token support on this system\n");
return -EINVAL;
}
/* find the matching token ID */ /* find the matching token ID */
for (i = 0; i < da_num_tokens; i++) { for (i = 0; i < da_num_tokens; i++) {
if (da_tokens[i].location != buffer->input[0]) if (da_tokens[i].location != buffer->input[0])
...@@ -315,6 +321,9 @@ struct calling_interface_token *dell_smbios_find_token(int tokenid) ...@@ -315,6 +321,9 @@ struct calling_interface_token *dell_smbios_find_token(int tokenid)
{ {
int i; int i;
if (!da_tokens)
return NULL;
for (i = 0; i < da_num_tokens; i++) { for (i = 0; i < da_num_tokens; i++) {
if (da_tokens[i].tokenID == tokenid) if (da_tokens[i].tokenID == tokenid)
return &da_tokens[i]; return &da_tokens[i];
...@@ -565,11 +574,6 @@ static int __init dell_smbios_init(void) ...@@ -565,11 +574,6 @@ static int __init dell_smbios_init(void)
dmi_walk(find_tokens, NULL); dmi_walk(find_tokens, NULL);
if (!da_tokens) {
pr_info("Unable to find dmi tokens\n");
return -ENODEV;
}
ret = platform_driver_register(&platform_driver); ret = platform_driver_register(&platform_driver);
if (ret) if (ret)
goto fail_platform_driver; goto fail_platform_driver;
...@@ -583,13 +587,6 @@ static int __init dell_smbios_init(void) ...@@ -583,13 +587,6 @@ static int __init dell_smbios_init(void)
if (ret) if (ret)
goto fail_platform_device_add; goto fail_platform_device_add;
/* duplicate tokens will cause problems building sysfs files */
zero_duplicates(&platform_device->dev);
ret = build_tokens_sysfs(platform_device);
if (ret)
goto fail_create_group;
/* register backends */ /* register backends */
wmi = init_dell_smbios_wmi(); wmi = init_dell_smbios_wmi();
if (wmi) if (wmi)
...@@ -600,7 +597,16 @@ static int __init dell_smbios_init(void) ...@@ -600,7 +597,16 @@ static int __init dell_smbios_init(void)
if (wmi && smm) { if (wmi && smm) {
pr_err("No SMBIOS backends available (wmi: %d, smm: %d)\n", pr_err("No SMBIOS backends available (wmi: %d, smm: %d)\n",
wmi, smm); wmi, smm);
goto fail_sysfs; goto fail_create_group;
}
if (da_tokens) {
/* duplicate tokens will cause problems building sysfs files */
zero_duplicates(&platform_device->dev);
ret = build_tokens_sysfs(platform_device);
if (ret)
goto fail_sysfs;
} }
return 0; return 0;
...@@ -628,7 +634,8 @@ static void __exit dell_smbios_exit(void) ...@@ -628,7 +634,8 @@ static void __exit dell_smbios_exit(void)
exit_dell_smbios_smm(); exit_dell_smbios_smm();
mutex_lock(&smbios_mutex); mutex_lock(&smbios_mutex);
if (platform_device) { if (platform_device) {
free_group(platform_device); if (da_tokens)
free_group(platform_device);
platform_device_unregister(platform_device); platform_device_unregister(platform_device);
platform_driver_unregister(&platform_driver); platform_driver_unregister(&platform_driver);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment