From: Arnd Bergmann <arnd@arndb.de>
To: linux-arm-kernel@lists.infradead.org
Cc: ext Nishanth Menon <nm@ti.com>,
ext Tony Lindgren <tony@atomide.com>,
Peter De-Schrijver <Peter.De-Schrijver@nokia.com>,
Linus Walleij <linus.walleij@linaro.org>,
Ambresh <a0393775@ti.com>,
Saravana Kannan <skannan@codeaurora.org>,
Jouni Hogander <jouni.hogander@nokia.com>,
Lee Jones <Lee.Jones@linaro.org>,
Rabin VINCENT <rabin.vincent@stericsson.com>,
Russell King <linux@arm.linux.org.uk>,
Jonas ABERG <jonas.aberg@stericsson.com>,
ext Kevin Hilman <khilman@deeprootsystems.com>,
Greg KH <greg@kroah.com>, David Brown <davidb@codeaurora.org>,
Maxime Coquelin <maxime.coquelin-nonst@stericsson.com>,
"linux-arm-msm@vger.kernel.org" <linux-arm-msm@vger.kernel.org>,
Loic PALLARDY <loic.pallardy@stericsson.com>,
"eduardo.valentin@nokia.com" <eduardo.valentin@nokia.com>,
maxime_coquelin@yahoo.fr, Ryan Mallon <ryan@bluewatersys.com>,
Linux-OMAP <linux-omap@vger.kernel.org>Da
Subject: Re: [RFC PATCHv2 1/2] Export SoC info through sysfs
Date: Fri, 11 Mar 2011 15:32:51 +0100 [thread overview]
Message-ID: <201103111532.52393.arnd@arndb.de> (raw)
In-Reply-To: <1299846911-15782-2-git-send-email-maxime.coquelin-nonst@stericsson.com>
On Friday 11 March 2011, Maxime Coquelin wrote:
> Common base to export System-on-Chip related informations through sysfs.
>
> Creation of a "socinfo" directory under /sys/.
> Creation of SoC information entries.
>
> Signed-off-by: Maxime COQUELIN <maxime.coquelin-nonst@stericsson.com>
I think it's better than the previous patch to create an
artificial device in /sys/devices/system/socinfo, but I'd
still prefer the information to be attached to a real device
that represents the SOC, as I explained in the discussion with
Linus Walleij.
You should definitely add Greg on Cc, as he's maintaining sysfs
and certainly has an opininion here.
Arnd
> ---
> Documentation/ABI/testing/sysfs-socinfo | 16 ++++++
> drivers/base/Kconfig | 3 +
> drivers/base/Makefile | 1 +
> drivers/base/soc.c | 79 +++++++++++++++++++++++++++++++
> include/linux/sys_soc.h | 50 +++++++++++++++++++
> 5 files changed, 149 insertions(+), 0 deletions(-)
> create mode 100644 Documentation/ABI/testing/sysfs-socinfo
> create mode 100644 drivers/base/soc.c
> create mode 100644 include/linux/sys_soc.h
>
> diff --git a/Documentation/ABI/testing/sysfs-socinfo b/Documentation/ABI/testing/sysfs-socinfo
> new file mode 100644
> index 0000000..afd9da2
> --- /dev/null
> +++ b/Documentation/ABI/testing/sysfs-socinfo
> @@ -0,0 +1,16 @@
> +What: /sys/socinfo
> +Date: March 2011
> +contact: Maxime Coquelin <maxime.coquelin-nonst@stericsson.com>
> +Description:
> + The /sys/socinfo directory contains information about the
> + System-on-Chip. It is only available if platform implements it.
> + This directory contains two kind of attributes :
> + - common attributes:
> + * machine: the name of the machine.
> + * family: the family name of the SoC
> + - SoC-specific attributes: The SoC vendor can declare attributes
> + to export some strings to user-space, like the serial-number for
> + example.
> +
> +Users:
> + User-space applications which needs these kind of attributes.
> diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig
> index d57e8d0..372ef3a 100644
> --- a/drivers/base/Kconfig
> +++ b/drivers/base/Kconfig
> @@ -168,4 +168,7 @@ config SYS_HYPERVISOR
> bool
> default n
>
> +config SYS_SOC
> + bool
> +
> endmenu
> diff --git a/drivers/base/Makefile b/drivers/base/Makefile
> index 5f51c3b..f3bcfb3 100644
> --- a/drivers/base/Makefile
> +++ b/drivers/base/Makefile
> @@ -18,6 +18,7 @@ ifeq ($(CONFIG_SYSFS),y)
> obj-$(CONFIG_MODULES) += module.o
> endif
> obj-$(CONFIG_SYS_HYPERVISOR) += hypervisor.o
> +obj-$(CONFIG_SYS_SOC) += soc.o
>
> ccflags-$(CONFIG_DEBUG_DRIVER) := -DDEBUG
>
> diff --git a/drivers/base/soc.c b/drivers/base/soc.c
> new file mode 100644
> index 0000000..046b43b
> --- /dev/null
> +++ b/drivers/base/soc.c
> @@ -0,0 +1,79 @@
> +/*
> + * Copyright (C) ST-Ericsson SA 2011
> + * Author: Maxime Coquelin <maxime.coquelin-nonst@stericsson.com> for ST-Ericsson.
> + * License terms: GNU General Public License (GPL), version 2
> + */
> +
> +#include <linux/sysfs.h>
> +#include <linux/module.h>
> +#include <linux/init.h>
> +#include <linux/stat.h>
> +#include <linux/slab.h>
> +#include <linux/sys_soc.h>
> +
> +struct kobject *soc_object;
> +
> +ssize_t show_soc_info(struct kobject *kobj,
> + struct kobj_attribute *attr, char *buf)
> +{
> + struct sysfs_soc_info *si = container_of(attr,
> + struct sysfs_soc_info, attr);
> +
> + if (si->info)
> + return sprintf(buf, "%s\n", si->info);
> +
> + return si->get_info(buf, si);
> +}
I think this can be simplified by just letting the soc
register its own show method instead of the get_info function.
> +int __init register_sysfs_soc_info(struct sysfs_soc_info *info, int nb_info)
> +{
> + int i, ret;
> +
> + for (i = 0; i < nb_info; i++) {
> + ret = sysfs_create_file(soc_object, &info[i].attr.attr);
> + if (ret) {
> + for (i -= 1; i >= 0; i--)
> + sysfs_remove_file(soc_object, &info[i].attr.attr);
> + break;
> + }
> + }
> +
> + return ret;
> +}
> +
> +static struct attribute *soc_attrs[] = {
> + NULL,
> +};
> +
> +static struct attribute_group soc_attr_group = {
> + .attrs = soc_attrs,
> +};
> +
> +int __init register_sysfs_soc(struct sysfs_soc_info *info, size_t num)
> +{
> + int ret;
> +
> + soc_object = kobject_create_and_add("socinfo", NULL);
> + if (!soc_object) {
> + ret = -ENOMEM;
> + goto exit;
> + }
> +
> + ret = sysfs_create_group(soc_object, &soc_attr_group);
> + if (ret)
> + goto kset_exit;
> +
> + ret = register_sysfs_soc_info(info, num);
> + if (ret)
> + goto group_exit;
> +
> + return 0;
> +
> +group_exit:
> + sysfs_remove_group(soc_object, &soc_attr_group);
> +kset_exit:
> + kobject_put(soc_object);
> +exit:
> + return ret;
> +}
> +
> diff --git a/include/linux/sys_soc.h b/include/linux/sys_soc.h
> new file mode 100644
> index 0000000..05e5529
> --- /dev/null
> +++ b/include/linux/sys_soc.h
> @@ -0,0 +1,50 @@
> +/*
> + * Copyright (C) ST-Ericsson SA 2011
> + * Author: Maxime Coquelin <maxime.coquelin-nonst@stericsson.com> for ST-Ericsson.
> + * License terms: GNU General Public License (GPL), version 2
> + */
> +#ifndef __SYS_SOC_H
> +#define __SYS_SOC_H
> +
> +#include <linux/kobject.h>
> +
> +/**
> + * struct sys_soc_info - SoC exports related informations
> + * @name: name of the export
> + * @info: pointer on the key to export
> + * @get_info: callback to retrieve key if info field is NULL
> + * @attr: export's sysdev class attribute
> + */
> +struct sysfs_soc_info {
> + const char *info;
> + ssize_t (*get_info)(char *buf, struct sysfs_soc_info *);
> + struct kobj_attribute attr;
> +};
> +
> +ssize_t show_soc_info(struct kobject *, struct kobj_attribute *, char *);
> +
> +#define SYSFS_SOC_ATTR_VALUE(_name, _value) { \
> + .attr.attr.name = _name, \
> + .attr.attr.mode = S_IRUGO, \
> + .attr.show = show_soc_info, \
> + .info = _value, \
> +}
> +
> +#define SYSFS_SOC_ATTR_CALLBACK(_name, _callback) { \
> + .attr.attr.name = _name, \
> + .attr.attr.mode = S_IRUGO, \
> + .attr.show = show_soc_info, \
> + .get_info = _callback, \
> +}
> +
> +/**
> + * register_sys_soc - register the soc information
> + * @name: name of the machine
> + * @info: pointer on the info table to export
> + * @num: number of info to export
> + *
> + * NOTE: This function must only be called once
> + */
> +int register_sysfs_soc(struct sysfs_soc_info *info, size_t num);
> +
> +#endif /* __SYS_SOC_H */
> --
WARNING: multiple messages have this Message-ID (diff)
From: arnd@arndb.de (Arnd Bergmann)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCHv2 1/2] Export SoC info through sysfs
Date: Fri, 11 Mar 2011 15:32:51 +0100 [thread overview]
Message-ID: <201103111532.52393.arnd@arndb.de> (raw)
In-Reply-To: <1299846911-15782-2-git-send-email-maxime.coquelin-nonst@stericsson.com>
On Friday 11 March 2011, Maxime Coquelin wrote:
> Common base to export System-on-Chip related informations through sysfs.
>
> Creation of a "socinfo" directory under /sys/.
> Creation of SoC information entries.
>
> Signed-off-by: Maxime COQUELIN <maxime.coquelin-nonst@stericsson.com>
I think it's better than the previous patch to create an
artificial device in /sys/devices/system/socinfo, but I'd
still prefer the information to be attached to a real device
that represents the SOC, as I explained in the discussion with
Linus Walleij.
You should definitely add Greg on Cc, as he's maintaining sysfs
and certainly has an opininion here.
Arnd
> ---
> Documentation/ABI/testing/sysfs-socinfo | 16 ++++++
> drivers/base/Kconfig | 3 +
> drivers/base/Makefile | 1 +
> drivers/base/soc.c | 79 +++++++++++++++++++++++++++++++
> include/linux/sys_soc.h | 50 +++++++++++++++++++
> 5 files changed, 149 insertions(+), 0 deletions(-)
> create mode 100644 Documentation/ABI/testing/sysfs-socinfo
> create mode 100644 drivers/base/soc.c
> create mode 100644 include/linux/sys_soc.h
>
> diff --git a/Documentation/ABI/testing/sysfs-socinfo b/Documentation/ABI/testing/sysfs-socinfo
> new file mode 100644
> index 0000000..afd9da2
> --- /dev/null
> +++ b/Documentation/ABI/testing/sysfs-socinfo
> @@ -0,0 +1,16 @@
> +What: /sys/socinfo
> +Date: March 2011
> +contact: Maxime Coquelin <maxime.coquelin-nonst@stericsson.com>
> +Description:
> + The /sys/socinfo directory contains information about the
> + System-on-Chip. It is only available if platform implements it.
> + This directory contains two kind of attributes :
> + - common attributes:
> + * machine: the name of the machine.
> + * family: the family name of the SoC
> + - SoC-specific attributes: The SoC vendor can declare attributes
> + to export some strings to user-space, like the serial-number for
> + example.
> +
> +Users:
> + User-space applications which needs these kind of attributes.
> diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig
> index d57e8d0..372ef3a 100644
> --- a/drivers/base/Kconfig
> +++ b/drivers/base/Kconfig
> @@ -168,4 +168,7 @@ config SYS_HYPERVISOR
> bool
> default n
>
> +config SYS_SOC
> + bool
> +
> endmenu
> diff --git a/drivers/base/Makefile b/drivers/base/Makefile
> index 5f51c3b..f3bcfb3 100644
> --- a/drivers/base/Makefile
> +++ b/drivers/base/Makefile
> @@ -18,6 +18,7 @@ ifeq ($(CONFIG_SYSFS),y)
> obj-$(CONFIG_MODULES) += module.o
> endif
> obj-$(CONFIG_SYS_HYPERVISOR) += hypervisor.o
> +obj-$(CONFIG_SYS_SOC) += soc.o
>
> ccflags-$(CONFIG_DEBUG_DRIVER) := -DDEBUG
>
> diff --git a/drivers/base/soc.c b/drivers/base/soc.c
> new file mode 100644
> index 0000000..046b43b
> --- /dev/null
> +++ b/drivers/base/soc.c
> @@ -0,0 +1,79 @@
> +/*
> + * Copyright (C) ST-Ericsson SA 2011
> + * Author: Maxime Coquelin <maxime.coquelin-nonst@stericsson.com> for ST-Ericsson.
> + * License terms: GNU General Public License (GPL), version 2
> + */
> +
> +#include <linux/sysfs.h>
> +#include <linux/module.h>
> +#include <linux/init.h>
> +#include <linux/stat.h>
> +#include <linux/slab.h>
> +#include <linux/sys_soc.h>
> +
> +struct kobject *soc_object;
> +
> +ssize_t show_soc_info(struct kobject *kobj,
> + struct kobj_attribute *attr, char *buf)
> +{
> + struct sysfs_soc_info *si = container_of(attr,
> + struct sysfs_soc_info, attr);
> +
> + if (si->info)
> + return sprintf(buf, "%s\n", si->info);
> +
> + return si->get_info(buf, si);
> +}
I think this can be simplified by just letting the soc
register its own show method instead of the get_info function.
> +int __init register_sysfs_soc_info(struct sysfs_soc_info *info, int nb_info)
> +{
> + int i, ret;
> +
> + for (i = 0; i < nb_info; i++) {
> + ret = sysfs_create_file(soc_object, &info[i].attr.attr);
> + if (ret) {
> + for (i -= 1; i >= 0; i--)
> + sysfs_remove_file(soc_object, &info[i].attr.attr);
> + break;
> + }
> + }
> +
> + return ret;
> +}
> +
> +static struct attribute *soc_attrs[] = {
> + NULL,
> +};
> +
> +static struct attribute_group soc_attr_group = {
> + .attrs = soc_attrs,
> +};
> +
> +int __init register_sysfs_soc(struct sysfs_soc_info *info, size_t num)
> +{
> + int ret;
> +
> + soc_object = kobject_create_and_add("socinfo", NULL);
> + if (!soc_object) {
> + ret = -ENOMEM;
> + goto exit;
> + }
> +
> + ret = sysfs_create_group(soc_object, &soc_attr_group);
> + if (ret)
> + goto kset_exit;
> +
> + ret = register_sysfs_soc_info(info, num);
> + if (ret)
> + goto group_exit;
> +
> + return 0;
> +
> +group_exit:
> + sysfs_remove_group(soc_object, &soc_attr_group);
> +kset_exit:
> + kobject_put(soc_object);
> +exit:
> + return ret;
> +}
> +
> diff --git a/include/linux/sys_soc.h b/include/linux/sys_soc.h
> new file mode 100644
> index 0000000..05e5529
> --- /dev/null
> +++ b/include/linux/sys_soc.h
> @@ -0,0 +1,50 @@
> +/*
> + * Copyright (C) ST-Ericsson SA 2011
> + * Author: Maxime Coquelin <maxime.coquelin-nonst@stericsson.com> for ST-Ericsson.
> + * License terms: GNU General Public License (GPL), version 2
> + */
> +#ifndef __SYS_SOC_H
> +#define __SYS_SOC_H
> +
> +#include <linux/kobject.h>
> +
> +/**
> + * struct sys_soc_info - SoC exports related informations
> + * @name: name of the export
> + * @info: pointer on the key to export
> + * @get_info: callback to retrieve key if info field is NULL
> + * @attr: export's sysdev class attribute
> + */
> +struct sysfs_soc_info {
> + const char *info;
> + ssize_t (*get_info)(char *buf, struct sysfs_soc_info *);
> + struct kobj_attribute attr;
> +};
> +
> +ssize_t show_soc_info(struct kobject *, struct kobj_attribute *, char *);
> +
> +#define SYSFS_SOC_ATTR_VALUE(_name, _value) { \
> + .attr.attr.name = _name, \
> + .attr.attr.mode = S_IRUGO, \
> + .attr.show = show_soc_info, \
> + .info = _value, \
> +}
> +
> +#define SYSFS_SOC_ATTR_CALLBACK(_name, _callback) { \
> + .attr.attr.name = _name, \
> + .attr.attr.mode = S_IRUGO, \
> + .attr.show = show_soc_info, \
> + .get_info = _callback, \
> +}
> +
> +/**
> + * register_sys_soc - register the soc information
> + * @name: name of the machine
> + * @info: pointer on the info table to export
> + * @num: number of info to export
> + *
> + * NOTE: This function must only be called once
> + */
> +int register_sysfs_soc(struct sysfs_soc_info *info, size_t num);
> +
> +#endif /* __SYS_SOC_H */
> --
next prev parent reply other threads:[~2011-03-11 14:32 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-11 12:35 [RFC PATCHv2 0/2] Export SoC info through sysfs Maxime Coquelin
2011-03-11 12:35 ` Maxime Coquelin
2011-03-11 12:35 ` Maxime Coquelin
2011-03-11 12:35 ` [RFC PATCHv2 1/2] " Maxime Coquelin
2011-03-11 12:35 ` Maxime Coquelin
2011-03-11 12:35 ` Maxime Coquelin
2011-03-11 13:50 ` Eduardo Valentin
2011-03-11 13:50 ` Eduardo Valentin
2011-03-11 15:40 ` Maxime Coquelin
2011-03-11 15:40 ` Maxime Coquelin
2011-03-11 17:35 ` Eduardo Valentin
2011-03-11 17:35 ` Eduardo Valentin
2011-03-11 14:32 ` Arnd Bergmann [this message]
2011-03-11 14:32 ` Arnd Bergmann
2011-03-11 14:31 ` Eduardo Valentin
2011-03-11 14:31 ` Eduardo Valentin
2011-03-11 15:40 ` Ben Dooks
2011-03-11 15:40 ` Ben Dooks
2011-03-11 17:38 ` Eduardo Valentin
2011-03-11 17:38 ` Eduardo Valentin
2011-03-11 15:52 ` Greg KH
2011-03-11 15:52 ` Greg KH
2011-03-11 17:58 ` Eduardo Valentin
2011-03-11 17:58 ` Eduardo Valentin
2011-03-11 19:33 ` Greg KH
2011-03-11 19:33 ` Greg KH
2011-03-11 21:42 ` Arnd Bergmann
2011-03-11 21:42 ` Arnd Bergmann
2011-03-11 22:03 ` Greg KH
2011-03-11 22:03 ` Greg KH
2011-03-11 22:13 ` Arnd Bergmann
2011-03-11 22:13 ` Arnd Bergmann
2011-04-07 16:24 ` Lee Jones
2011-04-07 16:24 ` Lee Jones
2011-04-07 21:29 ` Arnd Bergmann
2011-04-07 21:29 ` Arnd Bergmann
2011-04-07 21:46 ` Ryan Mallon
2011-04-07 21:46 ` Ryan Mallon
2011-04-07 22:01 ` Nicolas Pitre
2011-04-07 22:01 ` Nicolas Pitre
2011-04-07 22:07 ` Ryan Mallon
2011-04-07 22:07 ` Ryan Mallon
2011-04-07 22:45 ` Nicolas Pitre
2011-04-07 22:45 ` Nicolas Pitre
2011-04-07 22:56 ` Ryan Mallon
2011-04-07 22:56 ` Ryan Mallon
2011-04-07 23:19 ` Arnd Bergmann
2011-04-07 23:19 ` Arnd Bergmann
2011-04-07 23:29 ` Greg KH
2011-04-07 23:29 ` Greg KH
2011-04-08 3:35 ` Arnd Bergmann
2011-04-08 3:35 ` Arnd Bergmann
2011-04-08 7:41 ` Lee Jones
2011-04-08 7:41 ` Lee Jones
2011-04-08 15:02 ` Arnd Bergmann
2011-04-08 15:02 ` Arnd Bergmann
2011-04-08 15:43 ` Lee Jones
2011-04-08 15:43 ` Lee Jones
2011-04-08 20:22 ` Arnd Bergmann
2011-04-08 20:22 ` Arnd Bergmann
2011-03-11 12:35 ` [RFC PATCHv2 2/2] ux500: Export U8500 " Maxime Coquelin
2011-03-11 12:35 ` Maxime Coquelin
2011-03-11 12:35 ` Maxime Coquelin
2011-03-11 14:11 ` Jean-Christophe PLAGNIOL-VILLARD
2011-03-11 14:11 ` Jean-Christophe PLAGNIOL-VILLARD
2011-03-11 15:20 ` Linus Walleij
2011-03-11 15:20 ` Linus Walleij
2011-03-11 17:24 ` Jean-Christophe PLAGNIOL-VILLARD
2011-03-11 17:24 ` Jean-Christophe PLAGNIOL-VILLARD
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201103111532.52393.arnd@arndb.de \
--to=arnd@arndb.de \
--cc=Lee.Jones@linaro.org \
--cc=Peter.De-Schrijver@nokia.com \
--cc=a0393775@ti.com \
--cc=davidb@codeaurora.org \
--cc=eduardo.valentin@nokia.com \
--cc=greg@kroah.com \
--cc=jonas.aberg@stericsson.com \
--cc=jouni.hogander@nokia.com \
--cc=khilman@deeprootsystems.com \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=loic.pallardy@stericsson.com \
--cc=maxime.coquelin-nonst@stericsson.com \
--cc=maxime_coquelin@yahoo.fr \
--cc=nm@ti.com \
--cc=rabin.vincent@stericsson.com \
--cc=ryan@bluewatersys.com \
--cc=skannan@codeaurora.org \
--cc=tony@atomide.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.