Message ID | 1383023757-30711-4-git-send-email-gerg@uclinux.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Oct 29, 2013 at 03:15:53PM +1000, gerg@uclinux.org wrote: > From: Greg Ungerer <gerg@uclinux.org> > > Add machine support code for the Freescale IMX50 SoC. > > It is very similar to the Freescale IMX53, it contains many of the same > periperhal hardware modules, at the same address offsets as the IMX53. > (Notable exceptions are that the IMX50 contains no CAN bus hardware, less > GPIO, no VPU, it does contain an Electrophoretic display controller though). > > So this support code just uses the IMX53 definitions as they are today. > We can add the extra IMX50 definitions in the future when required. > > Signed-off-by: Greg Ungerer <gerg@uclinux.org> > --- > arch/arm/mach-imx/Makefile | 1 + > arch/arm/mach-imx/mach-imx50.c | 46 ++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 47 insertions(+) > create mode 100644 arch/arm/mach-imx/mach-imx50.c > > diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile > index bbe1f5b..924e117 100644 > --- a/arch/arm/mach-imx/Makefile > +++ b/arch/arm/mach-imx/Makefile > @@ -112,6 +112,7 @@ obj-$(CONFIG_MACH_EUKREA_CPUIMX51SD) += mach-cpuimx51sd.o > obj-$(CONFIG_MACH_EUKREA_MBIMXSD51_BASEBOARD) += eukrea_mbimxsd51-baseboard.o > > obj-$(CONFIG_MACH_IMX51_DT) += imx51-dt.o > +obj-$(CONFIG_SOC_IMX50) += mach-imx50.o > obj-$(CONFIG_SOC_IMX53) += mach-imx53.o > > obj-$(CONFIG_SOC_VF610) += clk-vf610.o mach-vf610.o > diff --git a/arch/arm/mach-imx/mach-imx50.c b/arch/arm/mach-imx/mach-imx50.c ... > +static const char *imx50_dt_board_compat[] __initdata = { > + "fsl,imx50", > + NULL > +}; Wasn't this going to be consolidated with mach-imx53.c by adding this compat string to it? thx, Jason.
Hi Jason, On 30/10/13 01:40, Jason Cooper wrote: > On Tue, Oct 29, 2013 at 03:15:53PM +1000, gerg@uclinux.org wrote: >> From: Greg Ungerer <gerg@uclinux.org> >> >> Add machine support code for the Freescale IMX50 SoC. >> >> It is very similar to the Freescale IMX53, it contains many of the same >> periperhal hardware modules, at the same address offsets as the IMX53. >> (Notable exceptions are that the IMX50 contains no CAN bus hardware, less >> GPIO, no VPU, it does contain an Electrophoretic display controller though). >> >> So this support code just uses the IMX53 definitions as they are today. >> We can add the extra IMX50 definitions in the future when required. >> >> Signed-off-by: Greg Ungerer <gerg@uclinux.org> >> --- >> arch/arm/mach-imx/Makefile | 1 + >> arch/arm/mach-imx/mach-imx50.c | 46 ++++++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 47 insertions(+) >> create mode 100644 arch/arm/mach-imx/mach-imx50.c >> >> diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile >> index bbe1f5b..924e117 100644 >> --- a/arch/arm/mach-imx/Makefile >> +++ b/arch/arm/mach-imx/Makefile >> @@ -112,6 +112,7 @@ obj-$(CONFIG_MACH_EUKREA_CPUIMX51SD) += mach-cpuimx51sd.o >> obj-$(CONFIG_MACH_EUKREA_MBIMXSD51_BASEBOARD) += eukrea_mbimxsd51-baseboard.o >> >> obj-$(CONFIG_MACH_IMX51_DT) += imx51-dt.o >> +obj-$(CONFIG_SOC_IMX50) += mach-imx50.o >> obj-$(CONFIG_SOC_IMX53) += mach-imx53.o >> >> obj-$(CONFIG_SOC_VF610) += clk-vf610.o mach-vf610.o >> diff --git a/arch/arm/mach-imx/mach-imx50.c b/arch/arm/mach-imx/mach-imx50.c > ... >> +static const char *imx50_dt_board_compat[] __initdata = { >> + "fsl,imx50", >> + NULL >> +}; > > Wasn't this going to be consolidated with mach-imx53.c by adding this > compat string to it? I am still looking at doing that. Regards Greg
On Tue, Oct 29, 2013 at 03:15:53PM +1000, gerg@uclinux.org wrote: > +DT_MACHINE_START(IMX50_DT, "Freescale i.MX50 (Device Tree Support)") > + .map_io = mx53_map_io, > + .init_early = imx53_init_early, > + .init_irq = mx53_init_irq, > + .handle_irq = imx53_handle_irq, > + .init_machine = imx50_dt_init, > + .init_late = imx53_init_late, > + .dt_compat = imx50_dt_board_compat, > + .restart = mxc_restart, > +MACHINE_END The imx53 is a platform that was converted from non-DT to DT. Some of these imx53 hooks may not even necessary for imx53 now, since imx53 supports DT boot only today. So I do not prefer to reuse these imx53 hooks on the brand new imx50 DT machine. I would suggest to maintain a mach-imx50.c and machine descriptor for imx50 with only the necessary hooks implemented as local functions inside mach-imx50.c. After imx53 machine descriptor and hooks gets cleaned up, we can look at how we can consolidate these descriptors if they are pretty much in common. Shawn
Hi Shawn, On 31/10/13 16:10, Shawn Guo wrote: > On Tue, Oct 29, 2013 at 03:15:53PM +1000, gerg@uclinux.org wrote: >> +DT_MACHINE_START(IMX50_DT, "Freescale i.MX50 (Device Tree Support)") >> + .map_io = mx53_map_io, >> + .init_early = imx53_init_early, >> + .init_irq = mx53_init_irq, >> + .handle_irq = imx53_handle_irq, >> + .init_machine = imx50_dt_init, >> + .init_late = imx53_init_late, >> + .dt_compat = imx50_dt_board_compat, >> + .restart = mxc_restart, >> +MACHINE_END > > The imx53 is a platform that was converted from non-DT to DT. Some of > these imx53 hooks may not even necessary for imx53 now, since imx53 > supports DT boot only today. So I do not prefer to reuse these imx53 > hooks on the brand new imx50 DT machine. I would suggest to maintain a > mach-imx50.c and machine descriptor for imx50 with only the necessary > hooks implemented as local functions inside mach-imx50.c. After imx53 > machine descriptor and hooks gets cleaned up, we can look at how we can > consolidate these descriptors if they are pretty much in common. With the current support I could drop .init_early and .init_late I believe. All the other mx53 functions are needed to successfully boot. imx53_handle_irq is easy to fix, it is just defined to be tzic_handle_irq anyway. mx53_map_io and mx53_init_irq are coded in mm-imx5.c. They look strait forward. Do you want me to create imx50 specific versions in there? Regards Greg
On Fri, Nov 01, 2013 at 11:59:10AM +1000, Greg Ungerer wrote: > Hi Shawn, > > On 31/10/13 16:10, Shawn Guo wrote: > > On Tue, Oct 29, 2013 at 03:15:53PM +1000, gerg@uclinux.org wrote: > >> +DT_MACHINE_START(IMX50_DT, "Freescale i.MX50 (Device Tree Support)") > >> + .map_io = mx53_map_io, > >> + .init_early = imx53_init_early, > >> + .init_irq = mx53_init_irq, > >> + .handle_irq = imx53_handle_irq, > >> + .init_machine = imx50_dt_init, > >> + .init_late = imx53_init_late, > >> + .dt_compat = imx50_dt_board_compat, > >> + .restart = mxc_restart, > >> +MACHINE_END > > > > The imx53 is a platform that was converted from non-DT to DT. Some of > > these imx53 hooks may not even necessary for imx53 now, since imx53 > > supports DT boot only today. So I do not prefer to reuse these imx53 > > hooks on the brand new imx50 DT machine. I would suggest to maintain a > > mach-imx50.c and machine descriptor for imx50 with only the necessary > > hooks implemented as local functions inside mach-imx50.c. After imx53 > > machine descriptor and hooks gets cleaned up, we can look at how we can > > consolidate these descriptors if they are pretty much in common. > > With the current support I could drop .init_early and .init_late > I believe. All the other mx53 functions are needed to successfully > boot. > > imx53_handle_irq is easy to fix, it is just defined to be > tzic_handle_irq anyway. > > mx53_map_io and mx53_init_irq are coded in mm-imx5.c. They look strait > forward. Do you want me to create imx50 specific versions in there? Oh, right. I overlooked the fact that the static mapping created in mx53_map_io() is still used by clock driver everywhere. It does not make too much sense to clean them up before imx51 gets converted to be DT only. Okay, I'm fine with reusing some of the imx53 hooks as required. But at least imx53_init_early() shouldn't be reused on imx50, because it sets cpu type specifically for imx53, and calls mxc_iomux_v3_init() which is not needed for imx50 (even for imx53 as well today). Shawn
Hi Shawn, On 01/11/13 18:21, Shawn Guo wrote: > On Fri, Nov 01, 2013 at 11:59:10AM +1000, Greg Ungerer wrote: >> On 31/10/13 16:10, Shawn Guo wrote: >>> On Tue, Oct 29, 2013 at 03:15:53PM +1000, gerg@uclinux.org wrote: >>>> +DT_MACHINE_START(IMX50_DT, "Freescale i.MX50 (Device Tree Support)") >>>> + .map_io = mx53_map_io, >>>> + .init_early = imx53_init_early, >>>> + .init_irq = mx53_init_irq, >>>> + .handle_irq = imx53_handle_irq, >>>> + .init_machine = imx50_dt_init, >>>> + .init_late = imx53_init_late, >>>> + .dt_compat = imx50_dt_board_compat, >>>> + .restart = mxc_restart, >>>> +MACHINE_END >>> >>> The imx53 is a platform that was converted from non-DT to DT. Some of >>> these imx53 hooks may not even necessary for imx53 now, since imx53 >>> supports DT boot only today. So I do not prefer to reuse these imx53 >>> hooks on the brand new imx50 DT machine. I would suggest to maintain a >>> mach-imx50.c and machine descriptor for imx50 with only the necessary >>> hooks implemented as local functions inside mach-imx50.c. After imx53 >>> machine descriptor and hooks gets cleaned up, we can look at how we can >>> consolidate these descriptors if they are pretty much in common. >> >> With the current support I could drop .init_early and .init_late >> I believe. All the other mx53 functions are needed to successfully >> boot. >> >> imx53_handle_irq is easy to fix, it is just defined to be >> tzic_handle_irq anyway. >> >> mx53_map_io and mx53_init_irq are coded in mm-imx5.c. They look strait >> forward. Do you want me to create imx50 specific versions in there? > > Oh, right. I overlooked the fact that the static mapping created in > mx53_map_io() is still used by clock driver everywhere. It does not > make too much sense to clean them up before imx51 gets converted to be > DT only. > > Okay, I'm fine with reusing some of the imx53 hooks as required. But > at least imx53_init_early() shouldn't be reused on imx50, because it > sets cpu type specifically for imx53, and calls mxc_iomux_v3_init() > which is not needed for imx50 (even for imx53 as well today). Yep, that sounds right. I'll modify that patch and resend. Thanks Greg
diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile index bbe1f5b..924e117 100644 --- a/arch/arm/mach-imx/Makefile +++ b/arch/arm/mach-imx/Makefile @@ -112,6 +112,7 @@ obj-$(CONFIG_MACH_EUKREA_CPUIMX51SD) += mach-cpuimx51sd.o obj-$(CONFIG_MACH_EUKREA_MBIMXSD51_BASEBOARD) += eukrea_mbimxsd51-baseboard.o obj-$(CONFIG_MACH_IMX51_DT) += imx51-dt.o +obj-$(CONFIG_SOC_IMX50) += mach-imx50.o obj-$(CONFIG_SOC_IMX53) += mach-imx53.o obj-$(CONFIG_SOC_VF610) += clk-vf610.o mach-vf610.o diff --git a/arch/arm/mach-imx/mach-imx50.c b/arch/arm/mach-imx/mach-imx50.c new file mode 100644 index 0000000..2e1fe94 --- /dev/null +++ b/arch/arm/mach-imx/mach-imx50.c @@ -0,0 +1,46 @@ +/* + * Copyright 2013 Greg Ungerer <gerg@uclinux.org> + * Copyright 2011 Freescale Semiconductor, Inc. All Rights Reserved. + * Copyright 2011 Linaro Ltd. + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +#include <linux/clk.h> +#include <linux/clkdev.h> +#include <linux/err.h> +#include <linux/io.h> +#include <linux/irq.h> +#include <linux/of_irq.h> +#include <linux/of_platform.h> +#include <asm/mach/arch.h> +#include <asm/mach/time.h> + +#include "common.h" +#include "mx53.h" + +static void __init imx50_dt_init(void) +{ + of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); +} + +static const char *imx50_dt_board_compat[] __initdata = { + "fsl,imx50", + NULL +}; + +DT_MACHINE_START(IMX50_DT, "Freescale i.MX50 (Device Tree Support)") + .map_io = mx53_map_io, + .init_early = imx53_init_early, + .init_irq = mx53_init_irq, + .handle_irq = imx53_handle_irq, + .init_machine = imx50_dt_init, + .init_late = imx53_init_late, + .dt_compat = imx50_dt_board_compat, + .restart = mxc_restart, +MACHINE_END