Message ID | 1363005441-26329-1-git-send-email-dahuang@nvidia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, Mar 11, 2013 at 08:37:21PM +0800, Danny Huang wrote: > Expose tegra chip id and revision in /proc/cpu/chipinfo for user mode > usage. It should probably be done in a more generic way. Check it out Documentation/ABI/testing/sysfs-devices-soc. Shawn
On 03/11/2013 06:37 AM, Danny Huang wrote: > Expose tegra chip id and revision in /proc/cpu/chipinfo for user mode > usage. I agree with Shawn's comments, but I have a few other comments here too for the record. Nit: "Tegra" and "ID" above should be capitalized as I've done so in this sentence. > diff --git a/arch/arm/mach-tegra/fuse.c b/arch/arm/mach-tegra/fuse.c > +static int __init tegra_chip_info(void) > +{ > + proc_entry = create_proc_entry("cpu/chipinfo", S_IRUGO, NULL); > + if (proc_entry) > + proc_entry->read_proc = show_chip_info; > + return 0; > +} > + > +late_initcall(tegra_chip_info); Please don't introduce any more initcalls. Especially initcalls that are not conditional on the run-time (rather than compile-time) SoC. This code may be compiled into a kernel that supports SoCs other than Tegra. However, tegra_chip_info() shouldn't run on those SoCs. It'd probably be simplest to just perform this initialization as part of the already-existing tegra_init_fuse(). If not, please call this initialization function from one of the initialization functions in arch/arm/mach-tegra/common.c. Both those cases only execute on Tegra.
On Mon, Mar 11, 2013 at 08:37:21PM +0800, Danny Huang wrote: > Expose tegra chip id and revision in /proc/cpu/chipinfo for user mode > usage. I thought we weren't exporting this stuff out via procfs, but had a soc specific way to do it - drivers/base/soc.c ? We have soc_id and revision attributes there... it seems to do what you want already.
diff --git a/arch/arm/mach-tegra/fuse.c b/arch/arm/mach-tegra/fuse.c index f7db078..7895542 100644 --- a/arch/arm/mach-tegra/fuse.c +++ b/arch/arm/mach-tegra/fuse.c @@ -20,6 +20,7 @@ #include <linux/kernel.h> #include <linux/io.h> #include <linux/export.h> +#include <linux/proc_fs.h> #include <linux/tegra-soc.h> #include "fuse.h" @@ -43,6 +44,7 @@ enum tegra_revision tegra_revision; static int tegra_fuse_spare_bit; static void (*tegra_init_speedo_data)(void); +static struct proc_dir_entry *proc_entry; /* The BCT to use at boot is specified by board straps that can be read * through a APB misc register and decoded. 2 bits, i.e. 4 possible BCTs. @@ -161,3 +163,20 @@ unsigned long long tegra_chip_uid(void) return (hi << 32ull) | lo; } EXPORT_SYMBOL(tegra_chip_uid); + +static int show_chip_info(char *page, char **start, off_t offset, + int count, int *eof, void *data) +{ + return snprintf(page, count, "tegra_chip_id: %d\ntegra_chip_rev: %d\n", + tegra_chip_id, tegra_revision); +} + +static int __init tegra_chip_info(void) +{ + proc_entry = create_proc_entry("cpu/chipinfo", S_IRUGO, NULL); + if (proc_entry) + proc_entry->read_proc = show_chip_info; + return 0; +} + +late_initcall(tegra_chip_info);
Expose tegra chip id and revision in /proc/cpu/chipinfo for user mode usage. Signed-off-by: Danny Huang <dahuang@nvidia.com> --- arch/arm/mach-tegra/fuse.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+)