From patchwork Wed Apr 27 13:04:19 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Corey Minyard X-Patchwork-Id: 66787 Delivered-To: patch@linaro.org Received: by 10.140.93.198 with SMTP id d64csp2176395qge; Wed, 27 Apr 2016 06:04:57 -0700 (PDT) X-Received: by 10.66.146.164 with SMTP id td4mr11626035pab.47.1461762297062; Wed, 27 Apr 2016 06:04:57 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n9si4144055pfb.111.2016.04.27.06.04.56; Wed, 27 Apr 2016 06:04:57 -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 S1752701AbcD0NEg (ORCPT + 29 others); Wed, 27 Apr 2016 09:04:36 -0400 Received: from mail-pf0-f194.google.com ([209.85.192.194]:34572 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752344AbcD0NEe (ORCPT ); Wed, 27 Apr 2016 09:04:34 -0400 Received: by mail-pf0-f194.google.com with SMTP id 145so4752762pfz.1 for ; Wed, 27 Apr 2016 06:04:33 -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=C3wVrUy43ckndDdiclfvFc5HfJArHQAjZjnmdXXiOajVDpDIaRbmUWldLHtgsNhya6 U+hH3PBHknk/Xy5QoTaM71AiyIQKklwYXnd6nTJunJPSwGYkymD1kBcMuCXAsmjWKCyf 4KV71caBM6A0PxbieHhmryDuPIrMZj4++0rVb7h+15fuQiuigFq7mZ4/9+enGtQAf+1/ ra66dEnbWQbYoKWe6lgSnZLpp1KUhgsTo40TCwbqGqA2jbJcQeJIO6gM6GNt9I5SXulq 4eV99u/qV72BduZT6GyhBd1P5mHOeqiOm/GCRjfCE766kiThCpb3LZl8rLLtzC1qdTr9 LNFw== 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=BuaA4gLzfvBmA+5tzpJbtbmRb98CxyitUmCHE8cvSuUSrwa3vqG9czTmsYoc+nrkTh cA/s7NKR0DaKi/JN6eG8xZnfU3ljVc1wj/EG9kwEwLLMaaEWhMhvsKYC22hvqUgY9W9M 6ESuDjABNspyUkd5ndOYTCLzxBCNIQpX6t+cgnKIVKtfcAbQhwcROCNiINhTu+3HFK0R 0csLoAemZ3u0+ROxugD+hEvU6IdFJmHI94k7oMIWc9aAcXsn2PzaxMQcnPTtn5MHWIy9 OuB/nwNHmzVugmhAC219eOuCYMFkBnwRRKZYWOFhPXLfxXiF6wm9gCI8aNx1oscdHo+v KeJg== X-Gm-Message-State: AOPr4FW+bS3GEJIn4QHoFdltX8uKbU6ueVaaGECAhbUQctytukYxQVKCflJDzetBBw1nWw== X-Received: by 10.98.52.195 with SMTP id b186mr11685106pfa.9.1461762273249; Wed, 27 Apr 2016 06:04:33 -0700 (PDT) Received: from serve.minyard.net ([173.71.13.195]) by smtp.gmail.com with ESMTPSA id 133sm6535192pfw.35.2016.04.27.06.04.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 27 Apr 2016 06:04:31 -0700 (PDT) Received: from t430.minyard.net (unknown [IPv6:2001:470:b8f6:1b:3c36:6e8c:c70a:c6bd]) by serve.minyard.net (Postfix) with ESMTPA id 07CAA17C2; Wed, 27 Apr 2016 08:04:30 -0500 (CDT) Received: by t430.minyard.net (Postfix, from userid 1000) id 1F2E630052D; Wed, 27 Apr 2016 08:04:27 -0500 (CDT) From: minyard@acm.org To: openipmi-developer@lists.sourceforge.net, linux-kernel@vger.kernel.org, Jean Delvare Cc: Corey Minyard , Andy Lutomirski Subject: [PATCH v3 4/5] dmi: Add IPMI DMI devices as platform devices Date: Wed, 27 Apr 2016 08:04:19 -0500 Message-Id: <1461762260-32454-5-git-send-email-minyard@acm.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1461762260-32454-1-git-send-email-minyard@acm.org> References: <1461762260-32454-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: