From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752431AbdBOSgv (ORCPT ); Wed, 15 Feb 2017 13:36:51 -0500 Received: from mail.linuxfoundation.org ([140.211.169.12]:58448 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752249AbdBOSgt (ORCPT ); Wed, 15 Feb 2017 13:36:49 -0500 Date: Wed, 15 Feb 2017 09:17:32 -0800 From: Greg KH To: "Loh, Tien Hock" Cc: arnd@arndb.de, linux-kernel@vger.kernel.org, thloh85@gmail.com, matthew.gerlach@intel.com, dinh.nguyen@intel.com, "Loh, Tien Hock" Subject: Re: [PATCH 1/1] drivers/misc: Add Intel System ID driver Message-ID: <20170215171732.GA4548@kroah.com> References: <1487156981-4550-1-git-send-email-user@thloh-VirtualBox> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1487156981-4550-1-git-send-email-user@thloh-VirtualBox> User-Agent: Mutt/1.7.2 (2016-11-26) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Feb 15, 2017 at 07:09:41PM +0800, thloh wrote: > From: "Loh, Tien Hock" > > This patch is to add Altera System ID driver. > User can obtain the system ID and timestamp of the system by > reading the sysfs entry. > > Usage: > cat /sys/bus/platform/devices/[addr].sysid/sysid/id > cat /sys/bus/platform/devices/[addr].sysid/sysid/timestamp If you add new sysfs attributes, you need to also add a Documentation/ABI/ description as well. > > Signed-off-by: Loh, Tien Hock > --- > drivers/misc/Kconfig | 5 ++ > drivers/misc/Makefile | 1 + > drivers/misc/intel_sysid.c | 142 ++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 148 insertions(+), 0 deletions(-) > create mode 100644 drivers/misc/intel_sysid.c > > diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig > index b4d6aac..e5552fa 100644 > --- a/drivers/misc/Kconfig > +++ b/drivers/misc/Kconfig > @@ -139,6 +139,11 @@ config INTEL_MID_PTI > an Intel Atom (non-netbook) mobile device containing a MIPI > P1149.7 standard implementation. > > +config INTEL_SYSID > + tristate "Intel System ID" > + help > + This enables Intel System ID soft core driver. > + > config SGI_IOC4 > tristate "SGI IOC4 Base IO support" > depends on PCI > diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile > index 7a3ea89..24fe724 100644 > --- a/drivers/misc/Makefile > +++ b/drivers/misc/Makefile > @@ -43,6 +43,7 @@ obj-y += ti-st/ > obj-y += lis3lv02d/ > obj-$(CONFIG_USB_SWITCH_FSA9480) += fsa9480.o > obj-$(CONFIG_ALTERA_STAPL) +=altera-stapl/ > +obj-$(CONFIG_INTEL_SYSID) += intel_sysid.o > obj-$(CONFIG_INTEL_MEI) += mei/ > obj-$(CONFIG_VMWARE_VMCI) += vmw_vmci/ > obj-$(CONFIG_LATTICE_ECP3_CONFIG) += lattice-ecp3-config.o > diff --git a/drivers/misc/intel_sysid.c b/drivers/misc/intel_sysid.c > new file mode 100644 > index 0000000..1ef72b8 > --- /dev/null > +++ b/drivers/misc/intel_sysid.c > @@ -0,0 +1,142 @@ > +/* > + * Copyright Intel Corporation (C) 2017. > + * > + * This program is free software; you can redistribute it and/or modify it > + * under the terms and conditions of the GNU General Public License, > + * version 2, as published by the Free Software Foundation. > + * > + * This program is distributed in the hope it will be useful, but WITHOUT > + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or > + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for > + * more details. > + * > + * You should have received a copy of the GNU General Public License along with > + * this program. If not, see . > + * > + * Credit: > + * Walter Goossens > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#define DRV_NAME "intel_sysid" > + > +struct intel_sysid { > + void __iomem *regs; > +}; > + > +/* System ID Registers*/ > +#define SYSID_REG_ID (0x0) > +#define SYSID_REG_TIMESTAMP (0x4) > + > +static ssize_t intel_sysid_show_id(struct device *dev, > + struct device_attribute *attr, char *buf) > +{ > + struct intel_sysid *sysid = dev_get_drvdata(dev); > + > + return sprintf(buf, "%u\n", readl(sysid->regs + SYSID_REG_ID)); > +} > + > +static ssize_t intel_sysid_show_timestamp(struct device *dev, > + struct device_attribute *attr, char *buf) > +{ > + unsigned int reg; > + struct tm timestamp; > + struct intel_sysid *sysid = dev_get_drvdata(dev); > + > + reg = readl(sysid->regs + SYSID_REG_TIMESTAMP); > + > + time_to_tm(reg, 0, ×tamp); > + > + return sprintf(buf, "%u (%u-%u-%u %u:%u:%u UTC)\n", reg, > + (unsigned int)(timestamp.tm_year + 1900), > + timestamp.tm_mon + 1, timestamp.tm_mday, timestamp.tm_hour, > + timestamp.tm_min, timestamp.tm_sec); > +} > + > +static DEVICE_ATTR(id, S_IRUGO, intel_sysid_show_id, NULL); > +static DEVICE_ATTR(timestamp, S_IRUGO, intel_sysid_show_timestamp, NULL); DEVICE_ATTR_RO()? > +static struct attribute *intel_sysid_attrs[] = { > + &dev_attr_id.attr, > + &dev_attr_timestamp.attr, > + NULL, > +}; > + > +struct attribute_group intel_sysid_attr_group = { > + .name = "sysid", > + .attrs = intel_sysid_attrs, > +}; ATTRIBUTE_GROUP()? thanks, greg k-h