Re: [PATCH] ARM: at91: move SoC detection to its own driver
Le 16/02/2017 à 11:31, Alexandre Belloni a écrit : > To simplify machine init and as the soc_device struct is not used as the > parent for on-chip devices anymore, move SoC detection to its own driver. > > Change in dmesg: > - before: > DMA: preallocated 256 KiB pool for atomic coherent allocations > AT91: Detected SoC family: sama5d2 > AT91: Detected SoC: sama5d27, revision 0 > No ATAGs? > clocksource: tcb_clksrc: mask: 0x max_cycles: 0x, > max_idle_ns: 184217874325 ns > at_xdmac f001.dma-controller: 16 channels, mapped at 0xe085b000 > SCSI subsystem initialized > > - after: > DMA: preallocated 256 KiB pool for atomic coherent allocations > No ATAGs? > clocksource: tcb_clksrc: mask: 0x max_cycles: 0x, > max_idle_ns: 184217874325 ns > at_xdmac f001.dma-controller: 16 channels, mapped at 0xe0859000 > AT91: Detected SoC family: sama5d2 > AT91: Detected SoC: sama5d27, revision 0 > SCSI subsystem initialized > > Suggested-by: Arnd Bergmann > Signed-off-by: Alexandre Belloni ok: Acked-by: Nicolas Ferre > --- > arch/arm/mach-at91/Makefile | 1 - > arch/arm/mach-at91/at91rm9200.c | 15 +- > arch/arm/mach-at91/at91sam9.c | 46 + > arch/arm/mach-at91/sama5.c | 52 +- > arch/arm/mach-at91/soc.c| 142 --- > drivers/soc/Kconfig | 1 + > drivers/soc/Makefile| 1 + > drivers/soc/atmel/Kconfig | 6 + > drivers/soc/atmel/Makefile | 1 + > drivers/soc/atmel/soc.c | 231 > > {arch/arm/mach-at91 => drivers/soc/atmel}/soc.h | 0 > 11 files changed, 243 insertions(+), 253 deletions(-) > delete mode 100644 arch/arm/mach-at91/soc.c > create mode 100644 drivers/soc/atmel/Kconfig > create mode 100644 drivers/soc/atmel/Makefile > create mode 100644 drivers/soc/atmel/soc.c > rename {arch/arm/mach-at91 => drivers/soc/atmel}/soc.h (100%) > > diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile > index c5bbf8bb8c0f..ae913484712e 100644 > --- a/arch/arm/mach-at91/Makefile > +++ b/arch/arm/mach-at91/Makefile > @@ -1,7 +1,6 @@ > # > # Makefile for the linux kernel. > # > -obj-y:= soc.o > > # CPU-specific support > obj-$(CONFIG_SOC_AT91RM9200) += at91rm9200.o > diff --git a/arch/arm/mach-at91/at91rm9200.c b/arch/arm/mach-at91/at91rm9200.c > index d068ec3cd1f6..656ad409a253 100644 > --- a/arch/arm/mach-at91/at91rm9200.c > +++ b/arch/arm/mach-at91/at91rm9200.c > @@ -14,23 +14,10 @@ > #include > > #include "generic.h" > -#include "soc.h" > - > -static const struct at91_soc rm9200_socs[] = { > - AT91_SOC(AT91RM9200_CIDR_MATCH, 0, "at91rm9200 BGA", "at91rm9200"), > - { /* sentinel */ }, > -}; > > static void __init at91rm9200_dt_device_init(void) > { > - struct soc_device *soc; > - struct device *soc_dev = NULL; > - > - soc = at91_soc_init(rm9200_socs); > - if (soc != NULL) > - soc_dev = soc_device_to_device(soc); > - > - of_platform_default_populate(NULL, NULL, soc_dev); > + of_platform_default_populate(NULL, NULL, NULL); > > at91rm9200_pm_init(); > } > diff --git a/arch/arm/mach-at91/at91sam9.c b/arch/arm/mach-at91/at91sam9.c > index ba28e9cc584d..b5280d42dece 100644 > --- a/arch/arm/mach-at91/at91sam9.c > +++ b/arch/arm/mach-at91/at91sam9.c > @@ -14,54 +14,10 @@ > #include > > #include "generic.h" > -#include "soc.h" > - > -static const struct at91_soc at91sam9_socs[] = { > - AT91_SOC(AT91SAM9260_CIDR_MATCH, 0, "at91sam9260", NULL), > - AT91_SOC(AT91SAM9261_CIDR_MATCH, 0, "at91sam9261", NULL), > - AT91_SOC(AT91SAM9263_CIDR_MATCH, 0, "at91sam9263", NULL), > - AT91_SOC(AT91SAM9G20_CIDR_MATCH, 0, "at91sam9g20", NULL), > - AT91_SOC(AT91SAM9RL64_CIDR_MATCH, 0, "at91sam9rl64", NULL), > - AT91_SOC(AT91SAM9G45_CIDR_MATCH, AT91SAM9M11_EXID_MATCH, > - "at91sam9m11", "at91sam9g45"), > - AT91_SOC(AT91SAM9G45_CIDR_MATCH, AT91SAM9M10_EXID_MATCH, > - "at91sam9m10", "at91sam9g45"), > - AT91_SOC(AT91SAM9G45_CIDR_MATCH, AT91SAM9G46_EXID_MATCH, > - "at91sam9g46", "at91sam9g45"), > - AT91_SOC(AT91SAM9G45_CIDR_MATCH, AT91SAM9G45_EXID_MATCH, > - "at91sam9g45", "at91sam9g45"), > - AT91_SOC(AT91SAM9X5_CIDR_MATCH, AT91SAM9G15_EXID_MATCH, > - "at91sam9g15", "at91sam9x5"), > - AT91_SOC(AT91SAM9X5_CIDR_MATCH, AT91SAM9G35_EXID_MATCH, > - "at91sam9g35", "at91sam9x5"), > - AT91_SOC(AT91SAM9X5_CIDR_MATCH, AT91SAM9X35_EXID_MATCH, > - "at91sam9x35", "at91sam9x5"), > - AT91_SOC(AT91SAM9X5_CIDR_MATCH, AT91SAM9G25_EXID_MATCH, > - "at91sam9g25", "at91sam9x5"), > - AT91_SOC(AT91SAM9X5_CIDR_MATCH, AT91SAM9X25_EXID_MATCH, > - "at91sam9x25", "at91sam9x5"), > - AT91_SO
[PATCH] ARM: at91: move SoC detection to its own driver
To simplify machine init and as the soc_device struct is not used as the parent for on-chip devices anymore, move SoC detection to its own driver. Change in dmesg: - before: DMA: preallocated 256 KiB pool for atomic coherent allocations AT91: Detected SoC family: sama5d2 AT91: Detected SoC: sama5d27, revision 0 No ATAGs? clocksource: tcb_clksrc: mask: 0x max_cycles: 0x, max_idle_ns: 184217874325 ns at_xdmac f001.dma-controller: 16 channels, mapped at 0xe085b000 SCSI subsystem initialized - after: DMA: preallocated 256 KiB pool for atomic coherent allocations No ATAGs? clocksource: tcb_clksrc: mask: 0x max_cycles: 0x, max_idle_ns: 184217874325 ns at_xdmac f001.dma-controller: 16 channels, mapped at 0xe0859000 AT91: Detected SoC family: sama5d2 AT91: Detected SoC: sama5d27, revision 0 SCSI subsystem initialized Suggested-by: Arnd Bergmann Signed-off-by: Alexandre Belloni --- arch/arm/mach-at91/Makefile | 1 - arch/arm/mach-at91/at91rm9200.c | 15 +- arch/arm/mach-at91/at91sam9.c | 46 + arch/arm/mach-at91/sama5.c | 52 +- arch/arm/mach-at91/soc.c| 142 --- drivers/soc/Kconfig | 1 + drivers/soc/Makefile| 1 + drivers/soc/atmel/Kconfig | 6 + drivers/soc/atmel/Makefile | 1 + drivers/soc/atmel/soc.c | 231 {arch/arm/mach-at91 => drivers/soc/atmel}/soc.h | 0 11 files changed, 243 insertions(+), 253 deletions(-) delete mode 100644 arch/arm/mach-at91/soc.c create mode 100644 drivers/soc/atmel/Kconfig create mode 100644 drivers/soc/atmel/Makefile create mode 100644 drivers/soc/atmel/soc.c rename {arch/arm/mach-at91 => drivers/soc/atmel}/soc.h (100%) diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile index c5bbf8bb8c0f..ae913484712e 100644 --- a/arch/arm/mach-at91/Makefile +++ b/arch/arm/mach-at91/Makefile @@ -1,7 +1,6 @@ # # Makefile for the linux kernel. # -obj-y := soc.o # CPU-specific support obj-$(CONFIG_SOC_AT91RM9200) += at91rm9200.o diff --git a/arch/arm/mach-at91/at91rm9200.c b/arch/arm/mach-at91/at91rm9200.c index d068ec3cd1f6..656ad409a253 100644 --- a/arch/arm/mach-at91/at91rm9200.c +++ b/arch/arm/mach-at91/at91rm9200.c @@ -14,23 +14,10 @@ #include #include "generic.h" -#include "soc.h" - -static const struct at91_soc rm9200_socs[] = { - AT91_SOC(AT91RM9200_CIDR_MATCH, 0, "at91rm9200 BGA", "at91rm9200"), - { /* sentinel */ }, -}; static void __init at91rm9200_dt_device_init(void) { - struct soc_device *soc; - struct device *soc_dev = NULL; - - soc = at91_soc_init(rm9200_socs); - if (soc != NULL) - soc_dev = soc_device_to_device(soc); - - of_platform_default_populate(NULL, NULL, soc_dev); + of_platform_default_populate(NULL, NULL, NULL); at91rm9200_pm_init(); } diff --git a/arch/arm/mach-at91/at91sam9.c b/arch/arm/mach-at91/at91sam9.c index ba28e9cc584d..b5280d42dece 100644 --- a/arch/arm/mach-at91/at91sam9.c +++ b/arch/arm/mach-at91/at91sam9.c @@ -14,54 +14,10 @@ #include #include "generic.h" -#include "soc.h" - -static const struct at91_soc at91sam9_socs[] = { - AT91_SOC(AT91SAM9260_CIDR_MATCH, 0, "at91sam9260", NULL), - AT91_SOC(AT91SAM9261_CIDR_MATCH, 0, "at91sam9261", NULL), - AT91_SOC(AT91SAM9263_CIDR_MATCH, 0, "at91sam9263", NULL), - AT91_SOC(AT91SAM9G20_CIDR_MATCH, 0, "at91sam9g20", NULL), - AT91_SOC(AT91SAM9RL64_CIDR_MATCH, 0, "at91sam9rl64", NULL), - AT91_SOC(AT91SAM9G45_CIDR_MATCH, AT91SAM9M11_EXID_MATCH, -"at91sam9m11", "at91sam9g45"), - AT91_SOC(AT91SAM9G45_CIDR_MATCH, AT91SAM9M10_EXID_MATCH, -"at91sam9m10", "at91sam9g45"), - AT91_SOC(AT91SAM9G45_CIDR_MATCH, AT91SAM9G46_EXID_MATCH, -"at91sam9g46", "at91sam9g45"), - AT91_SOC(AT91SAM9G45_CIDR_MATCH, AT91SAM9G45_EXID_MATCH, -"at91sam9g45", "at91sam9g45"), - AT91_SOC(AT91SAM9X5_CIDR_MATCH, AT91SAM9G15_EXID_MATCH, -"at91sam9g15", "at91sam9x5"), - AT91_SOC(AT91SAM9X5_CIDR_MATCH, AT91SAM9G35_EXID_MATCH, -"at91sam9g35", "at91sam9x5"), - AT91_SOC(AT91SAM9X5_CIDR_MATCH, AT91SAM9X35_EXID_MATCH, -"at91sam9x35", "at91sam9x5"), - AT91_SOC(AT91SAM9X5_CIDR_MATCH, AT91SAM9G25_EXID_MATCH, -"at91sam9g25", "at91sam9x5"), - AT91_SOC(AT91SAM9X5_CIDR_MATCH, AT91SAM9X25_EXID_MATCH, -"at91sam9x25", "at91sam9x5"), - AT91_SOC(AT91SAM9N12_CIDR_MATCH, AT91SAM9CN12_EXID_MATCH, -"at91sam9cn12", "at91sam9n12"), - AT91_SOC(AT91SAM9N12_CIDR_MATCH, AT91SAM9N12_EXID_MATCH, -"at91sam9n12", "at91sam9n12"), - AT91_SOC(AT91SAM9N12_CIDR_MATCH, AT91SAM9C