diff options
author | Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | 2014-02-24 10:03:18 +0100 |
---|---|---|
committer | Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | 2014-10-05 10:29:42 +0200 |
commit | 1a6b4ead0b34c733e2b436444328e121388806a3 (patch) | |
tree | 58d72846f2dc02c3586d51df2ad0a7b6f6e8d2f8 | |
parent | 8d0977811d6741b8600886736712387aa8c434a9 (diff) | |
download | linux-1a6b4ead0b34c733e2b436444328e121388806a3.tar.gz linux-1a6b4ead0b34c733e2b436444328e121388806a3.tar.xz |
wip: soc_bus
-rw-r--r-- | arch/arm/Kconfig | 1 | ||||
-rw-r--r-- | arch/arm/mach-efm32/common.c | 27 | ||||
-rw-r--r-- | arch/arm/mach-efm32/common.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-efm32/dtmachine.c | 1 |
4 files changed, 30 insertions, 0 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 9ecd48a870dc..6022b5e24abe 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -426,6 +426,7 @@ config ARCH_EFM32 select NO_DMA select NO_IOPORT_MAP select PINCTRL + select SOC_BUS select SPARSE_IRQ select USE_OF help diff --git a/arch/arm/mach-efm32/common.c b/arch/arm/mach-efm32/common.c index bffc28ec9ba7..17fc0ecab77d 100644 --- a/arch/arm/mach-efm32/common.c +++ b/arch/arm/mach-efm32/common.c @@ -8,6 +8,7 @@ #include <linux/kernel.h> #include <linux/init.h> #include <linux/bug.h> +#include <linux/sys_soc.h> #include <asm/io.h> #include <asm/barrier.h> @@ -93,6 +94,32 @@ static const char *__init efm32_get_rev(void) return revbuf; } +static struct efm32_soc_device_data { + struct soc_device_attribute soc_dev_attr; + char machine[40]; + char revision[40]; +} sddata; + +void __init efm32_register_soc_device(void) +{ + u8 family = __raw_readb(PART_FAMILY); + u16 flashsize = __raw_readw(MEM_INFO_FLASH); + u16 partno = __raw_readw(PART_NUMBER); + u8 prodrev = __raw_readb(PROD_REV); + + snprintf(sddata.machine, sizeof(sddata.machine), "EFM32%s%hdF%hd ", + efm32_get_familyabbrev(family), partno, flashsize); + snprintf(sddata.revision, sizeof(sddata.revision), + "rev %s, prodrev %hhd", + efm32_get_rev(), prodrev); + + sddata.soc_dev_attr.machine = sddata.machine; + sddata.soc_dev_attr.family = efm32_get_familyname(family); + sddata.soc_dev_attr.revision = sddata.revision; + + soc_device_register(&sddata.soc_dev_attr); +} + void __init efm32_print_cpuinfo(void) { u16 partno = __raw_readw(PART_NUMBER); diff --git a/arch/arm/mach-efm32/common.h b/arch/arm/mach-efm32/common.h index dd8f865e55c7..5e71e5da89b6 100644 --- a/arch/arm/mach-efm32/common.h +++ b/arch/arm/mach-efm32/common.h @@ -1,3 +1,4 @@ void efm32_print_cpuinfo(void); +void efm32_register_soc_device(void); void efm32_print_reset_cause(void); diff --git a/arch/arm/mach-efm32/dtmachine.c b/arch/arm/mach-efm32/dtmachine.c index 8fa5d56fa9e9..4aef16867607 100644 --- a/arch/arm/mach-efm32/dtmachine.c +++ b/arch/arm/mach-efm32/dtmachine.c @@ -12,6 +12,7 @@ static void __init efm32_init(void) of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); efm32_print_reset_cause(); + efm32_register_soc_device(); efm32_print_cpuinfo(); } |