Message ID | 20210331105908.23027-1-claudiu.beznea@microchip.com |
---|---|
Headers | show |
Series | ARM: at91: pm: add support for sama7g5 | expand |
On 31.03.2021 18:54, Alexandre Belloni wrote: > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe > > On 31/03/2021 13:58:54+0300, Claudiu Beznea wrote: >> Add SFRBU registers definitions for SAMA7G5. >> >> Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com> >> --- >> include/soc/at91/sama7-sfrbu.h | 34 ++++++++++++++++++++++++++++++++++ >> 1 file changed, 34 insertions(+) >> create mode 100644 include/soc/at91/sama7-sfrbu.h >> >> diff --git a/include/soc/at91/sama7-sfrbu.h b/include/soc/at91/sama7-sfrbu.h >> new file mode 100644 >> index 000000000000..76b740810d34 >> --- /dev/null >> +++ b/include/soc/at91/sama7-sfrbu.h >> @@ -0,0 +1,34 @@ >> +/* SPDX-License-Identifier: GPL-2.0-only */ >> +/* >> + * Microchip SAMA7 SFRBU registers offsets and bit definitions. >> + * >> + * Copyright (C) [2020] Microchip Technology Inc. and its subsidiaries >> + * >> + * Author: Claudu Beznea <claudiu.beznea@microchip.com> >> + */ >> + >> +#ifndef __SAMA7_SFRBU_H__ >> +#define __SAMA7_SFRBU_H__ >> + >> +#ifdef CONFIG_SOC_SAMA7 >> + >> +#define AT91_SFRBU_PSWBU (0x00) /* SFRBU Power Switch BU Control Register */ >> +#define AT91_SFRBU_PSWBU_PSWKEY (0x4BD20C << 8) /* Specific value mandatory to allow writing of other register bits */ >> +#define AT91_SFRBU_PSWBU_STATE (1 << 2) /* Power switch BU state */ >> +#define AT91_SFRBU_PSWBU_SOFTSWITCH (1 << 1) /* Power switch BU source selection */ >> +#define AT91_SFRBU_PSWBU_CTRL (1 << 0) /* Power switch BU control */ > > Please use BIT > >> + >> +#define AT91_SFRBU_25LDOCR (0x0C) /* SFRBU 2.5V LDO Control Register */ >> +#define AT91_SFRBU_25LDOCR_LDOANAKEY (0x3B6E18 << 8) /* Specific value mandatory to allow writing of other register bits. */ >> +#define AT91_SFRBU_25LDOCR_STATE (1 << 3) /* LDOANA Switch On/Off Control */ >> +#define AT91_SFRBU_25LDOCR_LP (1 << 2) /* LDOANA Low-Power Mode Control */ >> +#define AT91_SFRBU_PD_VALUE_MSK (0x3) > > GENMASK > >> +#define AT91_SFRBU_25LDOCR_PD_VALUE(v) ((v) & AT91_SFRBU_PD_VALUE_MSK) /* LDOANA Pull-down value */ > > this macro is not necessary, you can use FIELD_PREP with the previous > define. > This file (as well as include/soc/at91/sama7-ddr.h) is used in arch/arm/mach-at91/pm_suspend.S who's content is executed from CPU internal SRAM. I chose to have these defines w/o BIT(), GENMASK() and friends to not depend on the bitops.h who's size might be changed at any time. > > -- > Alexandre Belloni, co-owner and COO, Bootlin > Embedded Linux and Kernel engineering > https://bootlin.com >
On 31.03.2021 19:01, Alexandre Belloni wrote: > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe > > On 31/03/2021 13:59:06+0300, Claudiu Beznea wrote: >> From: Eugen Hristev <eugen.hristev@microchip.com> >> >> Introduce new family of SoCs, sama7, and first SoC, sama7g5. >> >> Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com> >> Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com> >> --- >> arch/arm/mach-at91/Makefile | 1 + >> arch/arm/mach-at91/sama7.c | 48 +++++++++++++++++++++++++++++++++++++ >> 2 files changed, 49 insertions(+) >> create mode 100644 arch/arm/mach-at91/sama7.c >> >> diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile >> index f565490f1b70..6cc6624cddac 100644 >> --- a/arch/arm/mach-at91/Makefile >> +++ b/arch/arm/mach-at91/Makefile >> @@ -9,6 +9,7 @@ obj-$(CONFIG_SOC_AT91SAM9) += at91sam9.o >> obj-$(CONFIG_SOC_SAM9X60) += sam9x60.o >> obj-$(CONFIG_SOC_SAMA5) += sama5.o >> obj-$(CONFIG_SOC_SAMV7) += samv7.o >> +obj-$(CONFIG_SOC_SAMA7) += sama7.o >> >> # Power Management >> obj-$(CONFIG_ATMEL_PM) += pm.o pm_suspend.o >> diff --git a/arch/arm/mach-at91/sama7.c b/arch/arm/mach-at91/sama7.c >> new file mode 100644 >> index 000000000000..e04cadb569ad >> --- /dev/null >> +++ b/arch/arm/mach-at91/sama7.c >> @@ -0,0 +1,48 @@ >> +// SPDX-License-Identifier: GPL-2.0-or-later >> +/* >> + * Setup code for SAMA7 >> + * >> + * Copyright (C) 2021 Microchip Technology, Inc. and its subsidiaries >> + * >> + */ >> + >> +#include <linux/of.h> >> +#include <linux/of_platform.h> >> + >> +#include <asm/mach/arch.h> >> +#include <asm/system_misc.h> >> + >> +#include "generic.h" >> + >> +static void __init sama7_common_init(void) >> +{ >> + of_platform_default_populate(NULL, NULL, NULL); > > Is this necessary? This is left as a workaround for the old SoCs using > pinctrl-at91. I guess this will be using pio4 so this has to be removed. OK, I'll have a look. BTW, SAMA5D2 which is also using PIO4 calls of_platform_default_populate(NULL, NULL, NULL); > >> +} >> + >> +static void __init sama7_dt_device_init(void) >> +{ >> + sama7_common_init(); >> +} >> + >> +static const char *const sama7_dt_board_compat[] __initconst = { >> + "microchip,sama7", >> + NULL >> +}; >> + >> +DT_MACHINE_START(sama7_dt, "Microchip SAMA7") >> + /* Maintainer: Microchip */ >> + .init_machine = sama7_dt_device_init, >> + .dt_compat = sama7_dt_board_compat, >> +MACHINE_END >> + >> +static const char *const sama7g5_dt_board_compat[] __initconst = { >> + "microchip,sama7g5", >> + NULL >> +}; >> + >> +DT_MACHINE_START(sama7g5_dt, "Microchip SAMA7G5") >> + /* Maintainer: Microchip */ >> + .init_machine = sama7_dt_device_init, >> + .dt_compat = sama7g5_dt_board_compat, >> +MACHINE_END >> + >> -- >> 2.25.1 >> > > -- > Alexandre Belloni, co-owner and COO, Bootlin > Embedded Linux and Kernel engineering > https://bootlin.com >
On 01.04.2021 12:38, Claudiu Beznea - M18063 wrote: > On 31.03.2021 19:01, Alexandre Belloni wrote: >> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe >> >> On 31/03/2021 13:59:06+0300, Claudiu Beznea wrote: >>> From: Eugen Hristev <eugen.hristev@microchip.com> >>> >>> Introduce new family of SoCs, sama7, and first SoC, sama7g5. >>> >>> Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com> >>> Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com> >>> --- >>> arch/arm/mach-at91/Makefile | 1 + >>> arch/arm/mach-at91/sama7.c | 48 +++++++++++++++++++++++++++++++++++++ >>> 2 files changed, 49 insertions(+) >>> create mode 100644 arch/arm/mach-at91/sama7.c >>> >>> diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile >>> index f565490f1b70..6cc6624cddac 100644 >>> --- a/arch/arm/mach-at91/Makefile >>> +++ b/arch/arm/mach-at91/Makefile >>> @@ -9,6 +9,7 @@ obj-$(CONFIG_SOC_AT91SAM9) += at91sam9.o >>> obj-$(CONFIG_SOC_SAM9X60) += sam9x60.o >>> obj-$(CONFIG_SOC_SAMA5) += sama5.o >>> obj-$(CONFIG_SOC_SAMV7) += samv7.o >>> +obj-$(CONFIG_SOC_SAMA7) += sama7.o >>> >>> # Power Management >>> obj-$(CONFIG_ATMEL_PM) += pm.o pm_suspend.o >>> diff --git a/arch/arm/mach-at91/sama7.c b/arch/arm/mach-at91/sama7.c >>> new file mode 100644 >>> index 000000000000..e04cadb569ad >>> --- /dev/null >>> +++ b/arch/arm/mach-at91/sama7.c >>> @@ -0,0 +1,48 @@ >>> +// SPDX-License-Identifier: GPL-2.0-or-later >>> +/* >>> + * Setup code for SAMA7 >>> + * >>> + * Copyright (C) 2021 Microchip Technology, Inc. and its subsidiaries >>> + * >>> + */ >>> + >>> +#include <linux/of.h> >>> +#include <linux/of_platform.h> >>> + >>> +#include <asm/mach/arch.h> >>> +#include <asm/system_misc.h> >>> + >>> +#include "generic.h" >>> + >>> +static void __init sama7_common_init(void) >>> +{ >>> + of_platform_default_populate(NULL, NULL, NULL); >> >> Is this necessary? This is left as a workaround for the old SoCs using >> pinctrl-at91. I guess this will be using pio4 so this has to be removed. > > OK, I'll have a look. BTW, SAMA5D2 which is also using PIO4 calls > of_platform_default_populate(NULL, NULL, NULL); Without this call the PM code (arch/arm/mach-at/pm.c) is not able to locate proper DT nodes: [ 0.194615] at91_pm_backup_init: failed to find securam device! [ 0.201393] at91_pm_sram_init: failed to find sram device! [ 0.207449] AT91: PM not supported, due to no SRAM allocated > >> >>> +} >>> + >>> +static void __init sama7_dt_device_init(void) >>> +{ >>> + sama7_common_init(); >>> +} >>> + >>> +static const char *const sama7_dt_board_compat[] __initconst = { >>> + "microchip,sama7", >>> + NULL >>> +}; >>> + >>> +DT_MACHINE_START(sama7_dt, "Microchip SAMA7") >>> + /* Maintainer: Microchip */ >>> + .init_machine = sama7_dt_device_init, >>> + .dt_compat = sama7_dt_board_compat, >>> +MACHINE_END >>> + >>> +static const char *const sama7g5_dt_board_compat[] __initconst = { >>> + "microchip,sama7g5", >>> + NULL >>> +}; >>> + >>> +DT_MACHINE_START(sama7g5_dt, "Microchip SAMA7G5") >>> + /* Maintainer: Microchip */ >>> + .init_machine = sama7_dt_device_init, >>> + .dt_compat = sama7g5_dt_board_compat, >>> +MACHINE_END >>> + >>> -- >>> 2.25.1 >>> >> >> -- >> Alexandre Belloni, co-owner and COO, Bootlin >> Embedded Linux and Kernel engineering >> https://bootlin.com >> >
On 01/04/2021 at 12:24, Claudiu Beznea - M18063 wrote: > On 01.04.2021 12:38, Claudiu Beznea - M18063 wrote: >> On 31.03.2021 19:01, Alexandre Belloni wrote: >>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe >>> >>> On 31/03/2021 13:59:06+0300, Claudiu Beznea wrote: >>>> From: Eugen Hristev <eugen.hristev@microchip.com> >>>> >>>> Introduce new family of SoCs, sama7, and first SoC, sama7g5. >>>> >>>> Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com> >>>> Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com> >>>> --- >>>> arch/arm/mach-at91/Makefile | 1 + >>>> arch/arm/mach-at91/sama7.c | 48 +++++++++++++++++++++++++++++++++++++ >>>> 2 files changed, 49 insertions(+) >>>> create mode 100644 arch/arm/mach-at91/sama7.c >>>> >>>> diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile >>>> index f565490f1b70..6cc6624cddac 100644 >>>> --- a/arch/arm/mach-at91/Makefile >>>> +++ b/arch/arm/mach-at91/Makefile >>>> @@ -9,6 +9,7 @@ obj-$(CONFIG_SOC_AT91SAM9) += at91sam9.o >>>> obj-$(CONFIG_SOC_SAM9X60) += sam9x60.o >>>> obj-$(CONFIG_SOC_SAMA5) += sama5.o >>>> obj-$(CONFIG_SOC_SAMV7) += samv7.o >>>> +obj-$(CONFIG_SOC_SAMA7) += sama7.o >>>> >>>> # Power Management >>>> obj-$(CONFIG_ATMEL_PM) += pm.o pm_suspend.o >>>> diff --git a/arch/arm/mach-at91/sama7.c b/arch/arm/mach-at91/sama7.c >>>> new file mode 100644 >>>> index 000000000000..e04cadb569ad >>>> --- /dev/null >>>> +++ b/arch/arm/mach-at91/sama7.c >>>> @@ -0,0 +1,48 @@ >>>> +// SPDX-License-Identifier: GPL-2.0-or-later >>>> +/* >>>> + * Setup code for SAMA7 >>>> + * >>>> + * Copyright (C) 2021 Microchip Technology, Inc. and its subsidiaries >>>> + * >>>> + */ >>>> + >>>> +#include <linux/of.h> >>>> +#include <linux/of_platform.h> >>>> + >>>> +#include <asm/mach/arch.h> >>>> +#include <asm/system_misc.h> >>>> + >>>> +#include "generic.h" >>>> + >>>> +static void __init sama7_common_init(void) >>>> +{ >>>> + of_platform_default_populate(NULL, NULL, NULL); >>> >>> Is this necessary? This is left as a workaround for the old SoCs using >>> pinctrl-at91. I guess this will be using pio4 so this has to be removed. >> >> OK, I'll have a look. BTW, SAMA5D2 which is also using PIO4 calls >> of_platform_default_populate(NULL, NULL, NULL); > > Without this call the PM code (arch/arm/mach-at/pm.c) is not able to locate > proper DT nodes: > > [ 0.194615] at91_pm_backup_init: failed to find securam device! > [ 0.201393] at91_pm_sram_init: failed to find sram device! > [ 0.207449] AT91: PM not supported, due to no SRAM allocated Okay, so we can't afford removing these calls to sama5d2 and upcoming sama7g5 right now. Is it a common pattern to have to reach DT content in the early stages that explicit call to of_platform_default_populate() tries to solve? Best regards, Nicolas >>>> +} >>>> + >>>> +static void __init sama7_dt_device_init(void) >>>> +{ >>>> + sama7_common_init(); >>>> +} >>>> + >>>> +static const char *const sama7_dt_board_compat[] __initconst = { >>>> + "microchip,sama7", >>>> + NULL >>>> +}; >>>> + >>>> +DT_MACHINE_START(sama7_dt, "Microchip SAMA7") >>>> + /* Maintainer: Microchip */ >>>> + .init_machine = sama7_dt_device_init, >>>> + .dt_compat = sama7_dt_board_compat, >>>> +MACHINE_END >>>> + >>>> +static const char *const sama7g5_dt_board_compat[] __initconst = { >>>> + "microchip,sama7g5", >>>> + NULL >>>> +}; >>>> + >>>> +DT_MACHINE_START(sama7g5_dt, "Microchip SAMA7G5") >>>> + /* Maintainer: Microchip */ >>>> + .init_machine = sama7_dt_device_init, >>>> + .dt_compat = sama7g5_dt_board_compat, >>>> +MACHINE_END >>>> + >>>> -- >>>> 2.25.1 >>>> >>> >>> -- >>> Alexandre Belloni, co-owner and COO, Bootlin >>> Embedded Linux and Kernel engineering >>> https://bootlin.com >>> >> > -- Nicolas Ferre
Hi, On 31/03/2021 at 12:59, Claudiu Beznea wrote: > From: Eugen Hristev <eugen.hristev@microchip.com> > > Introduce new family of SoCs, sama7, and first SoC, sama7g5. > > Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com> > Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com> > --- > arch/arm/mach-at91/Makefile | 1 + > arch/arm/mach-at91/sama7.c | 48 +++++++++++++++++++++++++++++++++++++ > 2 files changed, 49 insertions(+) > create mode 100644 arch/arm/mach-at91/sama7.c > > diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile > index f565490f1b70..6cc6624cddac 100644 > --- a/arch/arm/mach-at91/Makefile > +++ b/arch/arm/mach-at91/Makefile > @@ -9,6 +9,7 @@ obj-$(CONFIG_SOC_AT91SAM9) += at91sam9.o > obj-$(CONFIG_SOC_SAM9X60) += sam9x60.o > obj-$(CONFIG_SOC_SAMA5) += sama5.o > obj-$(CONFIG_SOC_SAMV7) += samv7.o > +obj-$(CONFIG_SOC_SAMA7) += sama7.o Nit: alphabetic order tells that it should be before samv7 > > # Power Management > obj-$(CONFIG_ATMEL_PM) += pm.o pm_suspend.o > diff --git a/arch/arm/mach-at91/sama7.c b/arch/arm/mach-at91/sama7.c > new file mode 100644 > index 000000000000..e04cadb569ad > --- /dev/null > +++ b/arch/arm/mach-at91/sama7.c > @@ -0,0 +1,48 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > +/* > + * Setup code for SAMA7 > + * > + * Copyright (C) 2021 Microchip Technology, Inc. and its subsidiaries > + * > + */ > + > +#include <linux/of.h> > +#include <linux/of_platform.h> > + > +#include <asm/mach/arch.h> > +#include <asm/system_misc.h> > + > +#include "generic.h" > + > +static void __init sama7_common_init(void) > +{ > + of_platform_default_populate(NULL, NULL, NULL); > +} > + > +static void __init sama7_dt_device_init(void) > +{ > + sama7_common_init(); > +} > + > +static const char *const sama7_dt_board_compat[] __initconst = { > + "microchip,sama7", > + NULL > +}; > + > +DT_MACHINE_START(sama7_dt, "Microchip SAMA7") > + /* Maintainer: Microchip */ > + .init_machine = sama7_dt_device_init, > + .dt_compat = sama7_dt_board_compat, > +MACHINE_END > + > +static const char *const sama7g5_dt_board_compat[] __initconst = { > + "microchip,sama7g5", > + NULL > +}; > + > +DT_MACHINE_START(sama7g5_dt, "Microchip SAMA7G5") > + /* Maintainer: Microchip */ > + .init_machine = sama7_dt_device_init, > + .dt_compat = sama7g5_dt_board_compat, > +MACHINE_END I'm not sure we need two DT_MACHINE_START() entries and associated functions right now. Probably the most generic one is sufficient. We can add such distinction in the future if the need arises. Regards, Nicolas -- Nicolas Ferre
On 08/04/2021 17:24:39+0200, Nicolas Ferre wrote: > On 01/04/2021 at 12:24, Claudiu Beznea - M18063 wrote: > > On 01.04.2021 12:38, Claudiu Beznea - M18063 wrote: > > > On 31.03.2021 19:01, Alexandre Belloni wrote: > > > > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe > > > > > > > > On 31/03/2021 13:59:06+0300, Claudiu Beznea wrote: > > > > > From: Eugen Hristev <eugen.hristev@microchip.com> > > > > > > > > > > Introduce new family of SoCs, sama7, and first SoC, sama7g5. > > > > > > > > > > Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com> > > > > > Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com> > > > > > --- > > > > > arch/arm/mach-at91/Makefile | 1 + > > > > > arch/arm/mach-at91/sama7.c | 48 +++++++++++++++++++++++++++++++++++++ > > > > > 2 files changed, 49 insertions(+) > > > > > create mode 100644 arch/arm/mach-at91/sama7.c > > > > > > > > > > diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile > > > > > index f565490f1b70..6cc6624cddac 100644 > > > > > --- a/arch/arm/mach-at91/Makefile > > > > > +++ b/arch/arm/mach-at91/Makefile > > > > > @@ -9,6 +9,7 @@ obj-$(CONFIG_SOC_AT91SAM9) += at91sam9.o > > > > > obj-$(CONFIG_SOC_SAM9X60) += sam9x60.o > > > > > obj-$(CONFIG_SOC_SAMA5) += sama5.o > > > > > obj-$(CONFIG_SOC_SAMV7) += samv7.o > > > > > +obj-$(CONFIG_SOC_SAMA7) += sama7.o > > > > > > > > > > # Power Management > > > > > obj-$(CONFIG_ATMEL_PM) += pm.o pm_suspend.o > > > > > diff --git a/arch/arm/mach-at91/sama7.c b/arch/arm/mach-at91/sama7.c > > > > > new file mode 100644 > > > > > index 000000000000..e04cadb569ad > > > > > --- /dev/null > > > > > +++ b/arch/arm/mach-at91/sama7.c > > > > > @@ -0,0 +1,48 @@ > > > > > +// SPDX-License-Identifier: GPL-2.0-or-later > > > > > +/* > > > > > + * Setup code for SAMA7 > > > > > + * > > > > > + * Copyright (C) 2021 Microchip Technology, Inc. and its subsidiaries > > > > > + * > > > > > + */ > > > > > + > > > > > +#include <linux/of.h> > > > > > +#include <linux/of_platform.h> > > > > > + > > > > > +#include <asm/mach/arch.h> > > > > > +#include <asm/system_misc.h> > > > > > + > > > > > +#include "generic.h" > > > > > + > > > > > +static void __init sama7_common_init(void) > > > > > +{ > > > > > + of_platform_default_populate(NULL, NULL, NULL); > > > > > > > > Is this necessary? This is left as a workaround for the old SoCs using > > > > pinctrl-at91. I guess this will be using pio4 so this has to be removed. > > > > > > OK, I'll have a look. BTW, SAMA5D2 which is also using PIO4 calls > > > of_platform_default_populate(NULL, NULL, NULL); > > > > Without this call the PM code (arch/arm/mach-at/pm.c) is not able to locate > > proper DT nodes: > > > > [ 0.194615] at91_pm_backup_init: failed to find securam device! > > [ 0.201393] at91_pm_sram_init: failed to find sram device! > > [ 0.207449] AT91: PM not supported, due to no SRAM allocated > > Okay, so we can't afford removing these calls to sama5d2 and upcoming > sama7g5 right now. > > Is it a common pattern to have to reach DT content in the early stages that > explicit call to of_platform_default_populate() tries to solve? > That's fine, I didn't remember about that one, we can keep the call. -- Alexandre Belloni, co-owner and COO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com