From patchwork Thu Jul 14 16:34:03 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Corey Minyard X-Patchwork-Id: 72033 Delivered-To: patch@linaro.org Received: by 10.140.29.52 with SMTP id a49csp169455qga; Thu, 14 Jul 2016 09:34:30 -0700 (PDT) X-Received: by 10.98.15.68 with SMTP id x65mr14025490pfi.66.1468514070292; Thu, 14 Jul 2016 09:34:30 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 4si3748670pav.105.2016.07.14.09.34.29; Thu, 14 Jul 2016 09:34:30 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751972AbcGNQeP (ORCPT + 30 others); Thu, 14 Jul 2016 12:34:15 -0400 Received: from mail-pf0-f193.google.com ([209.85.192.193]:35838 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751622AbcGNQeK (ORCPT ); Thu, 14 Jul 2016 12:34:10 -0400 Received: by mail-pf0-f193.google.com with SMTP id t190so4991437pfb.2 for ; Thu, 14 Jul 2016 09:34:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=GcJE/krh7Iw/a98kZnDeiMplT1VtV7cqUN1KRTVfq5Q=; b=Y41hwPJjhPjsM3UoV7j8ol0UMJ3hX52geCi3eEwvV9UxT2G2os0ibyB9c2h85SA2j0 lD/2Nw9tHJSjKWlw0jLzRkgNO6M6USDg5VTlR+H/t8Z2iU0TM3nFdfU9BFuR2m7pEuL4 +3OTtelGVJ5xryXMVFbvnN17GfcSQ+30h1cKnDCH+yvgLVS1EUl6+VtBxZNiMEM/P5Rh ucf7M/xln+hMzHdIZiL2vdsYuek8KU8GCFTBfN9O4yqtih0yrZ/YmKeuoHow+kuEp4Xr 5E3DfFrHuuMf8HKvlwfn1SoCkXiT9KJs0LN7c1lxYI5swmEVclWY8MHZwT4MJAYY6fqJ w+fQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=GcJE/krh7Iw/a98kZnDeiMplT1VtV7cqUN1KRTVfq5Q=; b=gsT6BgBg9N+ih2t60u54J+wUHjD33dhiMl/8msRfaGTauAv4KcRQ5qv4Y3flT3j0vq bzTXA+3XvLPoEUC0Z+Sz69EX1dkjT91VNVXCJgDyGPTP56WOBRvNQxPzJXjAjbRPpv1v ZE+zjbN2vaR7cMjMzfBLkbYiDg4Dsho6r4BxalAySOGw7cCui/VdT2RF9ZTrokmult4Q /G0TXCzxRIuM1u0df+LUz79szEB6xzWEdBlCDuUPkdfjZc8RoghR2gPbkgtCR8Be/xuK uZRtrOCxBtjxE7q2rBsCjGPcuY/6aBdMhwIChhBF4EqSZ8Md6V4hz1uyuvhfhuGWk+CP 3X5Q== X-Gm-Message-State: ALyK8tKkPJzGxGtWb0E17pgjjTINZgWQ7K+Pl104WYvG/TpV70utdHVlMh7fKSwgrea5kA== X-Received: by 10.98.89.23 with SMTP id n23mr13934056pfb.34.1468514049519; Thu, 14 Jul 2016 09:34:09 -0700 (PDT) Received: from serve.minyard.net ([173.64.235.97]) by smtp.gmail.com with ESMTPSA id l191sm373463pfc.91.2016.07.14.09.34.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 14 Jul 2016 09:34:08 -0700 (PDT) Received: from t430.minyard.net (t430m.minyard.net [192.168.27.3]) by serve.minyard.net (Postfix) with ESMTPA id 0A8C41338; Thu, 14 Jul 2016 11:34:07 -0500 (CDT) Received: by t430.minyard.net (Postfix, from userid 1000) id 8A6BC30052C; Thu, 14 Jul 2016 11:34:05 -0500 (CDT) From: minyard@acm.org To: linux-kernel@vger.kernel.org, Jean Delvare , openipmi-developer@lists.sourceforge.net Cc: Corey Minyard , Andy Lutomirski Subject: [PATCH v4 4/4] dmi: Add IPMI DMI devices as platform devices Date: Thu, 14 Jul 2016 11:34:03 -0500 Message-Id: <1468514043-21081-5-git-send-email-minyard@acm.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1468514043-21081-1-git-send-email-minyard@acm.org> References: <1468514043-21081-1-git-send-email-minyard@acm.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Corey Minyard Have DMI create a platform device for every IPMI device it finds. Signed-off-by: Corey Minyard Cc: Jean Delvare Cc: Andy Lutomirski Tested-by: Andy Lutomirski --- drivers/firmware/dmi_scan.c | 55 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) -- 2.7.4 diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c index 16e5174..6a9598b 100644 --- a/drivers/firmware/dmi_scan.c +++ b/drivers/firmware/dmi_scan.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -783,6 +784,52 @@ static ssize_t raw_table_read(struct file *file, struct kobject *kobj, return count; } +static void __init dmi_add_platform_ipmi(struct dmi_device *dev, int *nr) +{ + struct platform_device *pdev; + struct dmi_dev_ipmi *ipmi_dev = to_dmi_dev_ipmi(dev); + int rv; + + if (!ipmi_dev->good_data) { + pr_err("dmi: Invalid IPMI data, not creating platform device"); + return; + } + + if (ipmi_dev->type == IPMI_DMI_TYPE_SSIF) + pdev = platform_device_alloc("dmi-ipmi-ssif", *nr); + else + pdev = platform_device_alloc("dmi-ipmi-si", *nr); + if (!pdev) { + pr_err("dmi: Error allocation IPMI platform device"); + return; + } + if (ipmi_dev->type == IPMI_DMI_TYPE_SSIF) + pdev->driver_override = "ipmi_ssif"; + else + pdev->driver_override = "ipmi_si"; + + pdev->dev.fwnode = &dev->fwnode; + rv = platform_device_add(pdev); + if (rv) { + dev_err(&pdev->dev, "dmi: Unable to add device: %d\n", rv); + platform_device_del(pdev); + return; + } + + (*nr)++; +} + +static void __init dmi_add_platform_devices(void) +{ + struct dmi_device *dev; + int nr_ipmi = 0; + + list_for_each_entry(dev, &dmi_devices, list) { + if (dev->type == DMI_DEV_TYPE_IPMI) + dmi_add_platform_ipmi(dev, &nr_ipmi); + } +} + static BIN_ATTR(smbios_entry_point, S_IRUSR, raw_table_read, NULL, 0); static BIN_ATTR(DMI, S_IRUSR, raw_table_read, NULL, 0); @@ -823,9 +870,13 @@ static int __init dmi_init(void) bin_attr_DMI.size = dmi_len; bin_attr_DMI.private = dmi_table; ret = sysfs_create_bin_file(tables_kobj, &bin_attr_DMI); - if (!ret) - return 0; + if (ret) + goto out_remove_bin_file; + + dmi_add_platform_devices(); + return 0; + out_remove_bin_file: sysfs_remove_bin_file(tables_kobj, &bin_attr_smbios_entry_point); err_unmap: