[U-Boot] [PATCH 1/5] vybrid: add vybrid CPU support
Wang Huan-B18965
B18965 at freescale.com
Sun Apr 28 12:36:46 CEST 2013
> On 12/04/2013 08:53, Alison Wang wrote:
> > The Vybrid devices are a family of Freescale's latest Dual Single
> > Core offering with ARM Cortex A5 and CM4 based processors for
> > Advanced Connected Radio, Entry Infotainment, and Cluster as well
> > as high end industrial and general purpose applications.
> >
> > This patch adds vybrid CPU support.
> >
>
> Hi Alison,
>
> first: I agree with Fabio's comments - I try to no repeat his comments
> here.
[Alison Wang] Thanks.
>
>
> > diff --git a/Makefile b/Makefile
> > index 12763ce..8a86951 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -334,6 +334,9 @@ LIBS-y += test/libtest.o
> > ifneq
> ($(CONFIG_AM33XX)$(CONFIG_OMAP34XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),)
> > LIBS-y += $(CPUDIR)/omap-common/libomap-common.o
> > endif
> > +ifeq ($(SOC),vybrid)
> > +LIBS-y += $(CPUDIR)/vybrid-common/libvybrid-common.o
> > +endif
>
> I would like to understand there common code should be put. As you can
> see, for i.MX there is a imx_common directory that is valid across
> ARM-Core.
[Alison Wang] I'm trying to align the soc with i.mx platform and will use i.MX's imx_common directory in the next version. But there are still some issues for sharing the I.MX platform,
1. i.mx family uses GPT in timer.c. VF600 doesn't have GPT but a Periodic Interrupt Timer(PIT) which I think is totally different with GPT. Too much ifdef in the timer.c seems unacceptable. So I plan to modify the Makefile and add a pit.c file in imx_common directory for the timer on this Vybrid platform, How do you think about this idea? Thanks.
2. The SRC_SRSR register definition on VF600 is different with i.MX. To reuse the get_reset_cause() function in cpu.c, some platform related ifdef will be introduced.
For example:
#ifdef CONFIG_MVF600
case 0x00080:
return "EXTERNAL RESET";
#endif
Does this kind of ifdef acceptable? Thanks.
3. If sharing the cpu.c with I.MX, The cpu information printed will be "CPU: Freescale i.MX%s". As the Vybrid is not really the I.MX serials soc, I think the description should be Vybrid. Any suggestion for how to separate this in the cpu.c? Thanks a lot.
4. There are also some differences with the I.MX for the IOMUX. On the I.MX, there are separate registers for mux_mode and pin_ctrl, but on Vybrid, this two registers are merged into one 32bit register. I'm discussing this with Liu Hui on another mailchain. Any good suggestions? Thanks a lot.
I think after the main issues above got fixed, the Vybrid platform can be aligned with I.MX smoothly.
>
> >
> > ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35))
> > LIBS-y += arch/$(ARCH)/imx-common/libimx-common.o
> > @@ -467,6 +470,10 @@ $(obj)u-boot.img: $(obj)u-boot.bin
> > $(obj)u-boot.imx: $(obj)u-boot.bin depend
> > $(MAKE) -C $(SRCTREE)/arch/arm/imx-common $(OBJTREE)/u-
> boot.imx
> >
> > +$(obj)u-boot.vybrid: $(obj)u-boot.bin
> > + $(obj)tools/mkimage -n $(CONFIG_VYBRID_CONFIG) -T imximage \
> > + -e $(CONFIG_SYS_TEXT_BASE) -d $< $@
> > +
>
> I do not think we need a new rule only to have a new name. u-boot.imx
> had exactly the same rule here, but we decided in the past that some
> specific SOC rules should belong to the SOC (=CPU) directory without
> touching the main Makefile. The same rule you put here you can find into
> arch/arm/imx-common/Makefile. If the vybrid has nothing to do with
> imx_common, the rule to generate the image should go into the vybrid/
> directory.
[Alison Wang] I agree with you, this kind of issues will be fixed after the platform aligned with I.MX.
>
> > $(obj)u-boot.kwb: $(obj)u-boot.bin
> > $(obj)tools/mkimage -n $(CONFIG_SYS_KWD_CONFIG) -T kwbimage \
> > -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) -d $<
> $@
> > @@ -855,6 +862,7 @@ clobber: tidy
> > @rm -f $(obj)u-boot.kwb
> > @rm -f $(obj)u-boot.pbl
> > @rm -f $(obj)u-boot.imx
> > + @rm -f $(obj)u-boot.vybrid
>
> Mainly I disagree to add a new name if we do not get a new image. The
> list you see contains different images, not different names. As far as I
> can see, u-boot.vybrid has the same structure and is built in the same
> way as u-boot.imx.
[Alison Wang] I agree with you, this kind of issues will be fixed after the platform aligned with I.MX.
>
> > new file mode 100644
> > index 0000000..bee8850
> > --- /dev/null
> > +++ b/arch/arm/cpu/armv7/vybrid-common/Makefile
> > @@ -0,0 +1,46 @@
> > +#
> > +# Copyright 2012-2013 Freescale Semiconductor, Inc.
> > +#
> > +# See file CREDITS for list of people who contributed to this
> > +# project.
> > +#
> > +# This program is free software; you can redistribute it and/or
> > +# modify it under the terms of the GNU General Public License as
> > +# published by the Free Software Foundation; either version 2 of
> > +# the License, or (at your option) any later version.
> > +#
> > +# This program is distributed in the hope that it will be useful,
> > +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> > +# GNU General Public License for more details.
> > +#
> > +# You should have received a copy of the GNU General Public License
> > +# along with this program; if not, write to the Free Software
> > +# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> > +# MA 02111-1307 USA
> > +#
> > +
> > +include $(TOPDIR)/config.mk
> > +
> > +LIB = $(obj)libvybrid-common.o
> > +
> > +COBJS := timer.o
> > +COBJS += cpu.o
> > +COBJS += speed.o
> > +
> > +SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
> > +OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS))
> > +
> > +all: $(obj).depend $(LIB)
> > +
> > +$(LIB): $(OBJS)
> > + $(call cmd_link_o_target, $(OBJS))
> > +
> >
> +########################################################################
> #
> > +
> > +# defines $(obj).depend target
> > +include $(SRCTREE)/rules.mk
> > +
> > +sinclude $(obj).depend
> > +
> >
> +########################################################################
> #
> > diff --git a/arch/arm/cpu/armv7/vybrid-common/cpu.c
> b/arch/arm/cpu/armv7/vybrid-common/cpu.c
> > new file mode 100644
> > index 0000000..f99083e
> > --- /dev/null
> > +++ b/arch/arm/cpu/armv7/vybrid-common/cpu.c
> > @@ -0,0 +1,127 @@
> > +/*
> > + * Copyright 2012-2013 Freescale Semiconductor, Inc.
> > + *
> > + * See file CREDITS for list of people who contributed to this
> > + * project.
> > + *
> > + * This program is free software; you can redistribute it and/or
> > + * modify it under the terms of the GNU General Public License as
> > + * published by the Free Software Foundation; either version 2 of
> > + * the License, or (at your option) any later version.
> > + *
> > + * This program is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> > + * GNU General Public License for more details.
> > + *
> > + * You should have received a copy of the GNU General Public License
> > + * along with this program; if not, write to the Free Software
> > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> > + * MA 02111-1307 USA
> > + */
> > +
> > +#include <common.h>
> > +#include <netdev.h>
> > +#include <asm/errno.h>
> > +#include <asm/io.h>
> > +#include <asm/arch/vybrid-regs.h>
> > +#include <asm/arch/clock.h>
> > +#include <asm/arch/sys_proto.h>
> > +
> > +#ifdef CONFIG_FSL_ESDHC
> > +#include <fsl_esdhc.h>
> > +#endif
> > +
> > +static char *get_reset_cause(void)
> > +{
> > + char *resetcause[32] = {"POR",
> > + "Cortex A5 WDOG Timer Reset",
> > + 0,
>
> I do not think it is a good idea to pad with dummy data only to output
> it later. I think it is better to use straightforward the same mechanism
> we have for all other SOC, that is:
>
> - add defines for each cause (WDOG/POR...), better check if we can reuse
> / factorize common values.
>
> - implement get_reset_cause() in the same way (check implementation for
> MX35 / MX5 / MX6..). It is much more readable.
[Alison Wang] I agree with you, this kind of issues will be fixed after the platform aligned with I.MX.
>
>
> > +#if defined(CONFIG_DISPLAY_CPUINFO)
> > +int print_cpuinfo(void)
> > +{
> > + u32 cpurev;
> > +
> > + cpurev = get_cpu_rev();
> > + printf("CPU: Freescale VyBrid %x family rev%d.%d at %d MHz\n",
> > + (cpurev & 0xFFF000) >> 12,
> > + (cpurev & 0x000F0) >> 4,
> > + (cpurev & 0x0000F) >> 0,
>
> Any chance to get defines for the masks you are using here ?
>
> > +int cpu_eth_init(bd_t *bis)
> > +{
> > + int rc = -ENODEV;
> > +
> > + rc = mcffec_initialize(bis);
>
> I admit I have mot checked deeply - but I have some limits due to the
> missing documentation. Is there some good reason we cannot adapt the
> well known FEC driver (we have a driver for all SOCs) to vybrid ?
[Alison Wang] We can adapt the well known FEC driver to vybrid. I will complete it in next version patches.
>
> > +
> > +void reset_cpu(ulong addr)
> > +{
> > + __raw_writew(4, WDOG_A5_BASE_ADDR);
> > +}
>
> I think this is the old implementation for i.MX - replaced by the
> function in imx_watchdog.c.
[Alison Wang] I agree with you, this kind of issues will be fixed after the platform aligned with I.MX.
>
> > diff --git a/arch/arm/cpu/armv7/vybrid-common/timer.c
> b/arch/arm/cpu/armv7/vybrid-common/timer.c
> > new file mode 100644
> > index 0000000..be990e6
> > --- /dev/null
> > +++ b/arch/arm/cpu/armv7/vybrid-common/timer.c
> > @@ -0,0 +1,140 @@
> > +/*
> > + * Copyright 2012-2013 Freescale Semiconductor, Inc.
> > + *
> > + * See file CREDITS for list of people who contributed to this
> > + * project.
> > + *
> > + * This program is free software; you can redistribute it and/or
> > + * modify it under the terms of the GNU General Public License as
> > + * published by the Free Software Foundation; either version 2 of
> > + * the License, or (at your option) any later version.
> > + *
> > + * This program is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> > + * GNU General Public License for more details.
> > + *
> > + * You should have received a copy of the GNU General Public License
> > + * along with this program; if not, write to the Free Software
> > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> > + * MA 02111-1307 USA
> > + */
> > +
> > +#include <common.h>
> > +#include <asm/io.h>
> > +#include <div64.h>
> > +#include <asm/arch/timer.h>
> > +#include <asm/arch/clock.h>
> > +#include <asm/arch/vybrid-regs.h>
> > +
> > +DECLARE_GLOBAL_DATA_PTR;
> > +
> > +#define timestamp (gd->arch.tbl)
> > +#define timerticks (gd->arch.tbu)
> > +#define lastinc (gd->arch.lastinc)
> > +static unsigned long ltmstamp;
> > +
> > +#define CONFIG_TMR_USEPIT
> > +#ifdef CONFIG_TMR_USEPIT
> > +
> > +int timer_init(void)
> > +{
> > + ulong usecs;
> > + ulong ticks;
> > +
> > + timestamp = 0;
> > +
> > + /*
> > + * nsecs conversion = (1/ipg_clk) * 10^9
> > + * equivalent to 1000 / (ipg_clk / 10^6)
> > + */
> > + usecs = (vybrid_get_clock(VYBRID_IPG_CLK) / 1000000);
> > + ticks = 1000 / usecs;
> > +
> > + clrbits_le32(PIT_MCR, 2); /* enable PIT */
> > +
> > + /* ticks per 10 us = 10000 us / usecs = cycles time */
> > + timerticks = (10 * 1000) / ticks;
> > +
> > + __raw_writel(0xFFFFFFFF, PIT_LDVAL1);
> > + __raw_writel(0, PIT_TCTRL1);
> > + __raw_writel(4, PIT_TCTRL1);
> > + __raw_writel(5, PIT_TCTRL1);
> > + __raw_writel(timerticks, PIT_LDVAL0);
> > + __raw_writel(1, PIT_TCTRL0);
>
> General remark: do not use offset to write into register. Instead of
> that, defines a C structure and access to the structure to set / read
> registers. See othe i.MX implementations.
[Alison Wang] Agree, I will rewrite such codes.
>
> > +ulong get_timer(ulong base)
> > +{
> > + unsigned long now, diff;
> > +
> > + now = __raw_readl(PIT_LTMR64H);
> > + diff = -(now - lastinc);
> > + ltmstamp += diff;
> > + while (ltmstamp > 100) {
> > + timestamp++;
> > + ltmstamp -= 100;
> > + }
> > + lastinc = now;
> > +
> > + return timestamp - base;
> > +}
>
> I am sure this can be better factorited - we had this kind of code some
> times ago. We have quite the same structure for all SOCs, not only
> Freescale's. Check for example the implementation in imx_common/timer.c
[Alison Wang] Agree, I will rewrite this file according to your suggestions. Thanks.
>
> > +
> > +/* delay x useconds AND preserve advance timstamp value */
> > +void __udelay(unsigned long usec)
> > +{
> > + ulong nsecs, tmp;
> > +
> > + /*
> > + * nsecs conversion = (1/ipg_clk) * 10^9
> > + * equivalent to 1000 / (ipg_clk / 10^6)
> > + */
> > + if (usec < 5)
> > + usec = 10;
> > +
> > + nsecs = gd->arch.ipg_clk / 1000000;
> > + nsecs = 1000 / nsecs;
> > +
> > + /* 1 us per ticks = 1000 ns / nsecs = cycles time */
> > + while (usec > 0) {
> > + if (usec > 65000)
> > + tmp = 65000;
>
> I admit I have the value not understood. But again, if we have a
> get_ticks() and us_to_ticks() for the SOC, udelay is standard and we
> have the hope to better factorize it in future.
>
> > + * This function is derived from PowerPC code (timebase clock
> frequency).
> > + * On ARM it returns the number of timer ticks per second.
> > + */
> > +unsigned long long _usec2ticks(unsigned long long usec)
> > +{
> > + return usec;
> > +}
>
> Obsolete, I think, we use us_to_tick()
>
>
>
> > +
> > +struct clkctl *ccm = (struct clkctl *)CCM_BASE_ADDR;
> > +
> > +/* Get mcu main rate */
> > +static u32 get_mcu_main_clk(void)
> > +{
> > + struct clkctl *ccm = (struct clkctl *)CCM_BASE_ADDR;
> > + u32 ccm_ccsr, ccm_cacrr, armclk_div;
> > + u32 sysclk_sel, pll_pfd_sel = 0;
> > + u32 freq = 0;
> > +
> > + ccm_ccsr = readl(&ccm->ccsr);
> > + sysclk_sel = ccm_ccsr & CCM_CCSR_SYS_CLK_SEL_MASK;
> > + sysclk_sel >>= CCM_CCSR_SYS_CLK_SEL_OFFSET;
> > +
> > + ccm_cacrr = readl(&ccm->cacrr);
> > + armclk_div = ccm_cacrr & CCM_CACRR_ARM_CLK_DIV_MASK;
> > + armclk_div >>= CCM_CACRR_ARM_CLK_DIV_OFFSET;
> > + armclk_div += 1;
>
> I see a lot of analogies with i.MX6 code.
[Alison Wang] The name of the registers are the same, such as ccm_caccr, ccm_ccsr. But the definitions of the registers are different between vybrid and i.mx6 platforms.
>
> > +
> > + switch (sysclk_sel) {
> > + case 0:
> > + freq = FASE_CLK_FREQ;
> > + break;
> > + case 1:
> > + freq = SLOW_CLK_FREQ;
> > + break;
> > + case 3:
> > + freq = PLL2_MAIN_FREQ;
> > + break;
> > + case 5:
> > + freq = PLL3_MAIN_FREQ;
> > + break;
> > + case 2:
> > + pll_pfd_sel = ccm_ccsr & CCM_CCSR_PLL2_PFD_CLK_SEL_MASK;
> > + pll_pfd_sel >>= CCM_CCSR_PLL2_PFD_CLK_SEL_OFFSET;
> > + break;
> > + case 4:
> > + pll_pfd_sel = ccm_ccsr & CCM_CCSR_PLL1_PFD_CLK_SEL_MASK;
> > + pll_pfd_sel >>= CCM_CCSR_PLL1_PFD_CLK_SEL_OFFSET;
> > + break;
> > + default:
> > + printf("unsupported system clock select\n");
> > + }
> > +
> > + if (sysclk_sel == 2) {
>
> Code is quite confused. Why do you use a switch and after that you check
> again for cases that are covered by the switch itself ?
[Alison Wang] I will modify this confused code in the next version patches.
>
>
> > +
> > +/* Get the rate of bus clock */
> > +static u32 get_bus_clk(void)
> > +{
> > + struct clkctl *ccm = (struct clkctl *)CCM_BASE_ADDR;
> > + u32 ccm_cacrr, busclk_div;
> > +
> > + ccm_cacrr = readl(&ccm->cacrr);
> > +
> > + busclk_div = ccm_cacrr & CCM_CACRR_BUS_CLK_DIV_MASK;
> > + busclk_div >>= CCM_CACRR_BUS_CLK_DIV_OFFSET;
> > + busclk_div += 1;
> > +
> > + return get_mcu_main_clk() / busclk_div;
> > +}
> > +
> > +/* Get the rate of ipg clock */
> > +static u32 get_ipg_clk(void)
> > +{
> > + struct clkctl *ccm = (struct clkctl *)CCM_BASE_ADDR;
> > + u32 ccm_cacrr, ipgclk_div;
> > +
> > + ccm_cacrr = readl(&ccm->cacrr);
> > +
> > + ipgclk_div = ccm_cacrr & CCM_CACRR_IPG_CLK_DIV_MASK;
> > + ipgclk_div >>= CCM_CACRR_IPG_CLK_DIV_OFFSET;
> > + ipgclk_div += 1;
> > +
> > + return get_bus_clk() / ipgclk_div;
> > +}
> > +
> > +/* get dspi clock rate */
> > +static u32 vybrid_get_dspiclk(void)
> > +{
> > + return get_ipg_clk();
> > +}
> > +
> > +/* The API of get vybrid clocks */
> > +unsigned int vybrid_get_clock(enum vybrid_clock clk)
> > +{
> > + switch (clk) {
> > + case VYBRID_ARM_CLK:
> > + return get_mcu_main_clk();
> > + case VYBRID_BUS_CLK:
> > + return get_bus_clk();
> > + case VYBRID_IPG_CLK:
> > + return get_ipg_clk();
> > + case VYBRID_UART_CLK:
> > + return vybrid_get_uartclk();
> > + case VYBRID_DSPI_CLK:
> > + return vybrid_get_dspiclk();
>
> Can you explain which peripheral is this ? Has vybrid a DSP inside ?
>
> > +/* Get the rate of uart clk */
> > +u32 vybrid_get_uartclk(void)
> > +{
> > + return get_ipg_clk();
> > +}
>
> Why do we need if we can use vybrid_get_clock(VYBRID_UART_CLK) ?
[Alison Wang] Agree.
>
> > diff --git a/arch/arm/cpu/armv7/vybrid/iomux.c
> b/arch/arm/cpu/armv7/vybrid/iomux.c
> > new file mode 100644
> > index 0000000..fb672e3
> > --- /dev/null
> > +++ b/arch/arm/cpu/armv7/vybrid/iomux.c
> > @@ -0,0 +1,42 @@
> > +/*
> > + * Copyright 2012-2013 Freescale Semiconductor, Inc.
> > + *
> > + * See file CREDITS for list of people who contributed to this
> > + * project.
> > + *
> > + * This program is free software; you can redistribute it and/or
> > + * modify it under the terms of the GNU General Public License as
> > + * published by the Free Software Foundation; either version 2 of
> > + * the License, or (at your option) any later version.
> > + *
> > + * This program is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> > + * GNU General Public License for more details.
> > + *
> > + * You should have received a copy of the GNU General Public License
> > + * along with this program; if not, write to the Free Software
> > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> > + * MA 02111-1307 USA
> > + */
> > +
> > +#include <common.h>
> > +#include <asm/io.h>
> > +#include <asm/arch/vybrid-regs.h>
> > +#include <asm/arch/vybrid-pins.h>
> > +#include <asm/arch/iomux.h>
> > +#include <asm/arch/sys_proto.h>
> > +
> > +void pad_iomux_set(u32 pad_addr, struct pad_iomux *padio)
> > +{
> > + u32 value;
> > +
> > + value = (((padio->mod & 7) << 20) | ((padio->spd & 3) << 12) | \
> > + ((padio->sre & 1) << 11) | ((padio->ode & 1) << 10) | \
> > + ((padio->hys & 1) << 9) | ((padio->dse & 7) << 6) | \
> > + ((padio->pus & 3) << 4) | ((padio->pke & 1) << 3) | \
> > + ((padio->pue & 1) << 2) | ((padio->obe & 1) << 1) | \
> > + ((padio->ibe & 1) << 0));
> > +
> > + __raw_writel(pad_addr, value);
>
> Add defines for the magic number you introduce here.
[Alison Wang] I agree with you, this kind of issues will be fixed after the platform aligned with I.MX.
>
> > diff --git a/arch/arm/cpu/armv7/vybrid/lowlevel_init.S
> b/arch/arm/cpu/armv7/vybrid/lowlevel_init.S
> > new file mode 100644
> > index 0000000..c2bda4f
> > --- /dev/null
> > +++ b/arch/arm/cpu/armv7/vybrid/lowlevel_init.S
> > @@ -0,0 +1,128 @@
> > +/*
> > + * Copyright 2012-2013 Freescale Semiconductor, Inc.
> > + *
> > + * This program is free software; you can redistribute it and/or
> > + * modify it under the terms of the GNU General Public License as
> > + * published by the Free Software Foundation; either version 2 of
> > + * the License, or (at your option) any later version.
> > + *
> > + * This program is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> > + * GNU General Public License for more details.
> > + *
> > + * You should have received a copy of the GNU General Public License
> > + * along with this program; if not, write to the Free Software
> > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> > + * MA 02111-1307 USA
> > + */
> > +
> > +#include <config.h>
> > +#include <asm/arch/vybrid-regs.h>
> > +#include <generated/asm-offsets.h>
> > +
> > +/* DDR */
> > +.macro init_drive_strength
> > +.endm /* init_drive_strength */
> > +
> > +.macro setup_pll pll, freq
> > +.endm
> > +
> > +.macro init_clock
> > + ldr r0, =CCM_BASE_ADDR
> > +
> > + ldr r1, =CONFIG_SYS_CLKCTRL_CLPCR
> > + str r1, [r0, #CLKCTL_CLPCR]
> > +
> > + /* Gate of clocks to the peripherals first */
> > + ldr r1, =CONFIG_SYS_CLKCTL_CCGR0
> > + str r1, [r0, #CLKCTL_CCGR0]
> > + ldr r1, =CONFIG_SYS_CLKCTL_CCGR1
> > + str r1, [r0, #CLKCTL_CCGR1]
> > + ldr r1, =CONFIG_SYS_CLKCTL_CCGR2
> > + str r1, [r0, #CLKCTL_CCGR2]
> > + ldr r1, =CONFIG_SYS_CLKCTL_CCGR3
> > + str r1, [r0, #CLKCTL_CCGR3]
> > + ldr r1, =CONFIG_SYS_CLKCTL_CCGR4
> > + str r1, [r0, #CLKCTL_CCGR4]
> > + ldr r1, =CONFIG_SYS_CLKCTL_CCGR5
> > + str r1, [r0, #CLKCTL_CCGR5]
> > + ldr r1, =CONFIG_SYS_CLKCTL_CCGR6
> > + str r1, [r0, #CLKCTL_CCGR6]
> > + ldr r1, =CONFIG_SYS_CLKCTL_CCGR7
> > + str r1, [r0, #CLKCTL_CCGR7]
> > + ldr r1, =CONFIG_SYS_CLKCTL_CCGR8
> > + str r1, [r0, #CLKCTL_CCGR8]
> > + ldr r1, =CONFIG_SYS_CLKCTL_CCGR9
> > + str r1, [r0, #CLKCTL_CCGR9]
> > + ldr r1, =CONFIG_SYS_CLKCTL_CCGR10
> > + str r1, [r0, #CLKCTL_CCGR10]
> > + ldr r1, =CONFIG_SYS_CLKCTL_CCGR11
> > + str r1, [r0, #CLKCTL_CCGR11]
> > +
>
> Why cannot we do this in C code ? You introduce a lot of
> CONFIS_SYS_CLKCTL_ in the board configuration file. This can be done in
> board code, for example in board_early_init_f(), without constrain all
> boards to set all of this stuff, but only what is required.
[Alison Wang] Agree. I will move these configurations into board_early_init_f() in the next version patches.
>
> > +.section ".text.init", "x"
> > +
> > +.globl lowlevel_init
> > +lowlevel_init:
> > + /* ARM errata ID #468414 */
> > + mrc 15, 0, r1, c1, c0, 1
> > + orr r1, r1, #(1 << 5) /* enable L1NEON bit */
> > + mcr 15, 0, r1, c1, c0, 1
> > +
> > +#ifndef CONFIG_SYS_BOOTHDR
>
> This is not currently defined anyware. If you want to add CONFIG_SYS_
> defines, you should also add the documentation explainig which are the
> goals in the README.
>
> > +/* Board level setting value */
> > +DDR_PERCHARGE_CMD: .word 0x04008008
> > +DDR_REFRESH_CMD: .word 0x00008010
> > +DDR_LMR1_W: .word 0x00338018
> > +DDR_LMR_CMD: .word 0xB2220000
> > +DDR_TIMING_W: .word 0xB02567A9
> > +DDR_MISC_W: .word 0x000A0104
>
> They are defined, but not used. Please do not add dead code.
[Alison Wang] Agree.
>
> > +#include <common.h>
> > +#include <asm/arch/vybrid-regs.h>
> > +#include <asm/arch/clock.h>
> > +#include <asm/arch/sys_proto.h>
> > +
> > +#include <asm/errno.h>
> > +#include <asm/io.h>
> > +
> > +#if !(defined(CONFIG_VYBRID))
> > +#error "CPU_TYPE not defined"
> > +#endif
> > +
> > +u32 get_cpu_rev(void)
> > +{
> > + int system_rev = 0x600000;
>
> Which is the meaning of this value ? It is not read from hardware
[Alison Wang] I will check the RM.
>
> > diff --git a/arch/arm/include/asm/arch-vybrid/iomux.h
> b/arch/arm/include/asm/arch-vybrid/iomux.h
> > new file mode 100644
> > index 0000000..94f8b0b
> > --- /dev/null
> > +++ b/arch/arm/include/asm/arch-vybrid/iomux.h
> > @@ -0,0 +1,323 @@
> > +/*
> > + * Copyright 2012-2013 Freescale Semiconductor, Inc.
> > + *
> > + * See file CREDITS for list of people who contributed to this
> > + * project.
> > + *
> > + * This program is free software; you can redistribute it and/or
> > + * modify it under the terms of the GNU General Public License as
> > + * published by the Free Software Foundation; either version 2 of
> > + * the License, or (at your option) any later version.
> > + *
> > + * This program is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> > + * GNU General Public License for more details.
> > + *
> > + * You should have received a copy of the GNU General Public License
> > + * along with this program; if not, write to the Free Software
> > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> > + * MA 02111-1307 USA
> > + */
> > +
> > +#ifndef __MACH_VYBRID_IOMUX_H__
> > +#define __MACH_VYBRID_IOMUX_H__
> > +
> > +#include <common.h>
> > +#include <asm/io.h>
> > +#include <asm/arch/vybrid-regs.h>
> > +#include <asm/arch/vybrid-pins.h>
> > +
> > +#define IOMUXC_PAD_000 (IOMUXC_BASE_ADDR + 0x0000)
> > +#define IOMUXC_PAD_001 (IOMUXC_BASE_ADDR + 0x0004)
> > +#define IOMUXC_PAD_002 (IOMUXC_BASE_ADDR + 0x0008)
> > +#define IOMUXC_PAD_003 (IOMUXC_BASE_ADDR + 0x000C)
> > +#define IOMUXC_PAD_004 (IOMUXC_BASE_ADDR + 0x0010)
> > +#define IOMUXC_PAD_005 (IOMUXC_BASE_ADDR + 0x0014)
> > +#define IOMUXC_PAD_006 (IOMUXC_BASE_ADDR + 0x0018)
> > +#define IOMUXC_PAD_007 (IOMUXC_BASE_ADDR + 0x001C)
> > +#define IOMUXC_PAD_008 (IOMUXC_BASE_ADDR + 0x0020)
> > +#define IOMUXC_PAD_009 (IOMUXC_BASE_ADDR + 0x0024)
> > +#define IOMUXC_PAD_010 (IOMUXC_BASE_ADDR + 0x0028)
> > +#define IOMUXC_PAD_011 (IOMUXC_BASE_ADDR + 0x002C)
> > +#define IOMUXC_PAD_012 (IOMUXC_BASE_ADDR + 0x0030)
> > +#define IOMUXC_PAD_013 (IOMUXC_BASE_ADDR + 0x0034)
> > +#define IOMUXC_PAD_014 (IOMUXC_BASE_ADDR + 0x0038)
> > +#define IOMUXC_PAD_015 (IOMUXC_BASE_ADDR + 0x003C)
>
> There is not a lot of information defining IOMUXC_PAD_NUMBER with an
> offset. If you see for other SOCs, the values correspond to a specific
> function.
>
> > +#define IOMUXC_DDR_RESET (IOMUXC_BASE_ADDR + 0x021C)
> > +#define IOMUXC_DDR_A15 (IOMUXC_BASE_ADDR + 0x0220)
> > +#define IOMUXC_DDR_A14 (IOMUXC_BASE_ADDR + 0x0224)
> > +#define IOMUXC_DDR_A13 (IOMUXC_BASE_ADDR + 0x0228)
> > +#define IOMUXC_DDR_A12 (IOMUXC_BASE_ADDR + 0x022C)
> > +#define IOMUXC_DDR_A11 (IOMUXC_BASE_ADDR + 0x0230)
> > +#define IOMUXC_DDR_A10 (IOMUXC_BASE_ADDR + 0x0234)
> > +#define IOMUXC_DDR_A9 (IOMUXC_BASE_ADDR + 0x0238)
> > +#define IOMUXC_DDR_A8 (IOMUXC_BASE_ADDR + 0x023C)
> > +#define IOMUXC_DDR_A7 (IOMUXC_BASE_ADDR + 0x0240)
> > +#define IOMUXC_DDR_A6 (IOMUXC_BASE_ADDR + 0x0244)
> > +#define IOMUXC_DDR_A5 (IOMUXC_BASE_ADDR + 0x0248)
> > +#define IOMUXC_DDR_A4 (IOMUXC_BASE_ADDR + 0x024C)
> > +#define IOMUXC_DDR_A3 (IOMUXC_BASE_ADDR + 0x0250)
> > +#define IOMUXC_DDR_A2 (IOMUXC_BASE_ADDR + 0x0254)
> > +#define IOMUXC_DDR_A1 (IOMUXC_BASE_ADDR + 0x0258)
> > +#define IOMUXC_DDR_A0 (IOMUXC_BASE_ADDR + 0x025C)
> > +
> > +#define IOMUXC_DDR_BA2 (IOMUXC_BASE_ADDR + 0x0260)
> > +#define IOMUXC_DDR_BA1 (IOMUXC_BASE_ADDR + 0x0264)
> > +#define IOMUXC_DDR_BA0 (IOMUXC_BASE_ADDR + 0x0268)
> > +
> > +#define IOMUXC_DDR_CAS (IOMUXC_BASE_ADDR + 0x026C)
> > +
> > +#define IOMUXC_DDR_CKE (IOMUXC_BASE_ADDR + 0x0270)
> > +
> > +#define IOMUXC_DDR_CLK (IOMUXC_BASE_ADDR + 0x0274)
> > +
> > +#define IOMUXC_DDR_CS (IOMUXC_BASE_ADDR + 0x0278)
> > +
> > +#define IOMUXC_DDR_D15 (IOMUXC_BASE_ADDR + 0x027C)
> > +#define IOMUXC_DDR_D14 (IOMUXC_BASE_ADDR + 0x0280)
> > +#define IOMUXC_DDR_D13 (IOMUXC_BASE_ADDR + 0x0284)
> > +#define IOMUXC_DDR_D12 (IOMUXC_BASE_ADDR + 0x0288)
> > +#define IOMUXC_DDR_D11 (IOMUXC_BASE_ADDR + 0x028C)
> > +#define IOMUXC_DDR_D10 (IOMUXC_BASE_ADDR + 0x0290)
> > +#define IOMUXC_DDR_D9 (IOMUXC_BASE_ADDR + 0x0294)
> > +#define IOMUXC_DDR_D8 (IOMUXC_BASE_ADDR + 0x0298)
> > +#define IOMUXC_DDR_D7 (IOMUXC_BASE_ADDR + 0x029C)
> > +#define IOMUXC_DDR_D6 (IOMUXC_BASE_ADDR + 0x02A0)
> > +#define IOMUXC_DDR_D5 (IOMUXC_BASE_ADDR + 0x02A4)
> > +#define IOMUXC_DDR_D4 (IOMUXC_BASE_ADDR + 0x02A8)
> > +#define IOMUXC_DDR_D3 (IOMUXC_BASE_ADDR + 0x02AC)
> > +#define IOMUXC_DDR_D2 (IOMUXC_BASE_ADDR + 0x02B0)
> > +#define IOMUXC_DDR_D1 (IOMUXC_BASE_ADDR + 0x02B4)
> > +#define IOMUXC_DDR_D0 (IOMUXC_BASE_ADDR + 0x02B8)
> > +
> > +#define IOMUXC_DDR_DQM1 (IOMUXC_BASE_ADDR + 0x02BC)
> > +#define IOMUXC_DDR_DQM0 (IOMUXC_BASE_ADDR + 0x02C0)
> > +
> > +#define IOMUXC_DDR_DQS1 (IOMUXC_BASE_ADDR + 0x02C4)
> > +#define IOMUXC_DDR_DQS0 (IOMUXC_BASE_ADDR + 0x02C8)
> > +
> > +#define IOMUXC_DDR_RAS (IOMUXC_BASE_ADDR + 0x02CC)
> > +#define IOMUXC_DDR_WE (IOMUXC_BASE_ADDR + 0x02D0)
> > +
> > +#define IOMUXC_DDR_ODT0 (IOMUXC_BASE_ADDR + 0x02D4)
> > +#define IOMUXC_DDR_ODT1 (IOMUXC_BASE_ADDR + 0x02D8)
> > +
> > +#define IOMUXC_DDR_DDRBYTE1 (IOMUXC_BASE_ADDR + 0x02DC)
> > +#define IOMUXC_DDR_DDRBYTE0 (IOMUXC_BASE_ADDR + 0x02E0)
> > +
> > +#define IOMUXC_SDHC_DUMMY1 (IOMUXC_BASE_ADDR + 0x02E4)
> > +#define IOMUXC_SDHC_DUMMY2 (IOMUXC_BASE_ADDR + 0x02E8)
> > +
> > +#define IOMUXC_AUD_EXTCLK_INP (IOMUXC_BASE_ADDR + 0x02EC)
> > +#define IOMUXC_ENET_EXTCLK_INP (IOMUXC_BASE_ADDR + 0x02F0)
> > +#define IOMUXC_ENET_TSCLK_INP (IOMUXC_BASE_ADDR + 0x02F4)
> > +
> > +struct pad_iomux {
> > + u8 mod;
> > + u8 spd;
> > + u8 sre;
> > + u8 ode;
> > + u8 hys;
> > + u8 dse;
> > + u8 pus;
> > + u8 pke;
> > + u8 pue;
> > + u8 obe;
> > + u8 ibe;
> > +};
>
> Add some comments, the fields are not so self explaining
>
> > +
> > +#define PADIOMUX_SET(val, mod, spd, sre, ode, hys, \
> > + dse, pus, pke, pue, obe, ibe) \
> > + (val = (((mod & 7) << 20) | ((spd & 3) << 12) | \
> > + ((sre & 1) << 11) | ((ode & 1) << 10) | \
> > + ((hys & 1) << 9) | ((dse & 7) << 6) | \
> > + ((pus & 3) << 4) | ((pke & 1) << 3) | \
> > + ((pue & 1) << 2) | ((obe & 1) << 1) | \
> > + (ibe & 1)))
> > +
> > +#define DDRIOMUX_SET(inp, trim, hys, dse, pus, pke, pue) \
> > + (((inp & 1) << 16) | ((trim & 3) << 14) | \
> > + ((hys & 1) << 9) | ((dse & 7) << 6) | \
> > + ((pus & 3) << 4) | ((pke & 1) << 3) | \
> > + ((pue & 1) << 2))
> > +
> > +#define MUX_MODE_ALT0 0x00
> > +#define MUX_MODE_ALT1 0x01
> > +#define MUX_MODE_ALT2 0x02
> > +#define MUX_MODE_ALT3 0x03
> > +#define MUX_MODE_ALT4 0x04
> > +#define MUX_MODE_ALT5 0x05
> > +#define MUX_MODE_ALT6 0x06
> > +#define MUX_MODE_ALT7 0x07
> > +
> > +#define MUX_SPD_50MHZ 0x00
> > +#define MUX_SPD_100MHZ 0x02
> > +#define MUX_SPD_200MHZ 0x03
> > +
> > +#define MUX_SRE_SLOW 0
> > +#define MUX_SRE_FAST 1
> > +
> > +#define MUX_ODE_CMOS 0
> > +#define MUX_ODE_OPEN 1
> > +
> > +#define MUX_HYS_CMOS 0
> > +#define MUX_HYS_SCHMITT 1
> > +
> > +#define MUX_DSE_20_OHM 7
> > +#define MUX_DSE_25_OHM 6
> > +#define MUX_DSE_30_OHM 5
> > +#define MUX_DSE_37_OHM 4
> > +#define MUX_DSE_50_OHM 3
> > +#define MUX_DSE_75_OHM 2
> > +#define MUX_DSE_150_OHM 1
> > +#define MUX_DSE_DIS 0
> > +
> > +#define MUX_PUS_22KOHM_UP 3
> > +#define MUX_PUS_100KOHM_UP 2
> > +#define MUX_PUS_47KOHM_UP 1
> > +#define MUX_PUS_100KOHM_DN 0
> > +
> > +#define MUX_PKE_EN 1
> > +#define MUX_PKE_DIS 0
> > +
> > +#define MUX_PUE_PULLEN 1
> > +#define MUX_PUE_KEEPEREN 0
> > +
> > +#define MUX_OBE_EN 1
> > +#define MUX_OBE_DIS 0
> > +
> > +#define MUX_IBE_EN 1
> > +#define MUX_IBE_DIS 0
> > +
> > +#define MUX_DDR_INPUT_DIFF 1
> > +#define MUX_DDR_INPUT_CMOS 0
> > +
> > +#define MUX_DDR_TRIM_150PS 3
> > +#define MUX_DDR_TRIM_100PS 2
> > +#define MUX_DDR_TRIM_50PS 1
> > +#define MUX_DDR_TRIM_MIN 0
> > +
> > +void pad_iomux_set(u32 pad_addr, struct pad_iomux *padio);
> > +
> > +#endif /* __MACH_VYBRID_IOMUX_H__ */
> > diff --git a/arch/arm/include/asm/arch-vybrid/serial-vybrid.h
> b/arch/arm/include/asm/arch-vybrid/serial-vybrid.h
> > new file mode 100644
> > index 0000000..9575f73
> > --- /dev/null
> > +++ b/arch/arm/include/asm/arch-vybrid/serial-vybrid.h
> > @@ -0,0 +1,213 @@
> > +/*
> > + * Copyright 2012-2013 Freescale Semiconductor, Inc.
> > + *
> > + * See file CREDITS for list of people who contributed to this
> > + * project.
> > + *
> > + * This program is free software; you can redistribute it and/or
> > + * modify it under the terms of the GNU General Public License as
> > + * published by the Free Software Foundation; either version 2 of
> > + * the License, or (at your option) any later version.
> > + *
> > + * This program is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> > + * GNU General Public License for more details.
> > + *
> > + * You should have received a copy of the GNU General Public License
> > + * along with this program; if not, write to the Free Software
> > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> > + * MA 02111-1307 USA
> > + */
> > +
> > +#ifndef __SERIAL_VYBRID_H__
> > +#define __SERIAL_VYBRID_H__
> > +
> > +#define UBDH 0x00
> > +#define UBDL 0x01
> > +#define UC1 0x02
> > +#define UC2 0x03
> > +#define US1 0x04
> > +#define US2 0x05
> > +#define UC3 0x06
> > +#define UD 0x07
> > +#define UMA1 0x08
> > +#define UMA2 0x09
> > +#define UC4 0x0A
> > +#define UC5 0x0B
> > +#define UED 0x0C
>
> These are offset - please replace with C structures, thanks.
[Alison Wang] Agree. Thanks.
>
> > +#define UMODEM 0x0D
> > +#define UIR 0x0E
> > +#define UPFIFO 0x10
> > +#define UCFIFO 0x11
> > +#define USFIFO 0x12
> > +#define UTWFIFO 0x13
> > +#define UTCFIFO 0x14
> > +#define URWFIFO 0x15
> > +#define URCFIFO 0x16
> > +#define UC7816 0x18
> > +#define UIE7816 0x19
> > +#define UIS7816 0x1A
> > +#define UWP7816T0 0x1B
> > +#define UWP7816T1 0x1B
> > +#define UWN7816 0x1C
> > +#define UWF7816 0x1D
> > +#define UET78416 0x1E
> > +#define UTL7816 0x1F
> > +#define UC6 0x21
> > +#define UPCTH 0x22
> > +#define UPCTL 0x23
> > +#define UB1T 0x24
> > +#define USDTH 0x25
> > +#define USDTL 0x26
> > +#define UPRE 0x27
> > +#define UTPL 0x28
> > +#define UIE 0x29
> > +#define UWB 0x2A
> > +#define US3 0x2B
> > +#define US4 0x2C
> > +#define UPRL 0x2D
> > +#define URPREL 0x2E
> > +#define UCPW 0x2F
> > +#define URIDT 0x30
> > +#define UTIDT 0x31
> > +
> > +#define UBDH_LBKDIE (1 << 7)
> > +#define UBDH_RXEDGIE (1 << 6)
> > +#define UBDH_SBR(x) (x & 0x1F)
> > +
> > +#define UC1_LOOPS (1 << 7)
> > +#define UC1_SWAI (1 << 6)
> > +#define UC1_RSRC (1 << 5)
> > +#define UC1_M (1 << 4)
> > +#define UC1_WAKE (1 << 3)
> > +#define UC1_ILT (1 << 2)
> > +#define UC1_PE (1 << 1)
> > +#define UC1_PT (1 << 0)
> > +
> > +#define UC2_TIE (1 << 7)
> > +#define UC2_TCIE (1 << 6)
> > +#define UC2_RIE (1 << 5)
> > +#define UC2_ILIE (1 << 4)
> > +#define UC2_TE (1 << 3)
> > +#define UC2_RE (1 << 2)
> > +#define UC2_RWU (1 << 1)
> > +#define UC2_SBK (1 << 0)
> > +
> > +#define US1_TDRE (1 << 7)
> > +#define US1_TC (1 << 6)
> > +#define US1_RDRF (1 << 5)
> > +#define US1_IDLE (1 << 4)
> > +#define US1_OR (1 << 3)
> > +#define US1_NF (1 << 2)
> > +#define US1_FE (1 << 1)
> > +#define US1_PF (1 << 0)
> > +
> > +#define US2_LBKDIF (1 << 7)
> > +#define US2_RXEDGIF (1 << 6)
> > +#define US2_MSBF (1 << 5)
> > +#define US2_RXINV (1 << 4)
> > +#define US2_RWUID (1 << 3)
> > +#define US2_BRK13 (1 << 2)
> > +#define US2_RBKDE (1 << 1)
> > +#define US2_RAF (1 << 0)
> > +
> > +#define UC3_R8 (1 << 7)
> > +#define UC3_T8 (1 << 6)
> > +#define UC3_TXDIR (1 << 5)
> > +#define UC3_TXINV (1 << 4)
> > +#define UC3_ORIE (1 << 3)
> > +#define UC3_NEIF (1 << 2)
> > +#define UC3_FEIF (1 << 1)
> > +#define UC3_PEIE (1 << 0)
> > +
> > +#define UC4_MAEN1 (1 << 7)
> > +#define UC4_MAEN2 (1 << 6)
> > +#define UC4_M10 (1 << 5)
> > +#define UC4_BRFA(x) (x & 0x1F)
> > +
> > +#define UC5_TDMAS (1 << 7)
> > +#define UC5_RDMAS (1 << 5)
> > +
> > +#define UED_NOISY (1 << 7)
> > +#define UED_PARITYE (1 << 6)
> > +
> > +#define UMODEM_RXRTSE (1 << 3)
> > +#define UMODEM_TXRTSPOL (1 << 2)
> > +#define UMODEM_TXRTSE (1 << 1)
> > +#define UMODEM_TXCTSE (1 << 0)
> > +
> > +#define UIR_IREN (1 << 2)
> > +#define UIR_TNP(x) (x & 3)
> > +
> > +#define UPFIFO_TXFE (1 << 7)
> > +#define UPFIFO_TXFSZ(x) ((x & 7) << 4)
> > +#define UPFIFO_RXFE (1 << 3)
> > +#define UPFIFO_RXFSZ(x) ((x & 7) << 0)
> > +
> > +#define UCFIFO_TXFLUSH (1 << 7)
> > +#define UCFIFO_RXFLUSH (1 << 6)
> > +#define UCFIFO_TXOFE (1 << 1)
> > +#define UCFIFO_RXUFE (1 << 0)
> > +
> > +#define USFIFO_TXEMPT (1 << 7)
> > +#define USFIFO_RXEMPT (1 << 6)
> > +#define USFIFO_TXOF (1 << 1)
> > +#define USFIFO_RXUF (1 << 0)
> > +
> > +#define UC7816_ONACK (1 << 4)
> > +#define UC7816_ANACK (1 << 3)
> > +#define UC7816_INIT (1 << 2)
> > +#define UC7816_TTYPE (1 << 1)
> > +#define UC7816_7816E (1 << 0)
> > +
> > +#define UIE7816_WTE (1 << 7)
> > +#define UIE7816_CWTE (1 << 6)
> > +#define UIE7816_BWTE (1 << 5)
> > +#define UIE7816_INITDE (1 << 4)
> > +#define UIE7816_GTVE (1 << 2)
> > +#define UIE7816_TXTE (1 << 1)
> > +#define UIE7816_RXTE (1 << 0)
> > +
> > +#define UIS7816_WTE (1 << 7)
> > +#define UIS7816_CWTE (1 << 6)
> > +#define UIS7816_BWTE (1 << 5)
> > +#define UIS7816_INITDE (1 << 4)
> > +#define UIS7816_GTVE (1 << 2)
> > +#define UIS7816_TXTE (1 << 1)
> > +#define UIS7816_RXTE (1 << 0)
> > +
> > +#define UWP7816T1_CWI(x) ((x & 0xf) << 4)
> > +#define UWP7816T1_BWI(x) ((x & 0xf) << 0)
> > +
> > +#define UET78416_TXTHRESHOLD(x) ((x & 0xf) << 4)
> > +#define UET78416_RXTHRESHOLD(x) ((x & 0xf) << 0)
> > +
> > +#define UC6_EN709 (1 << 7)
> > +#define UC6_TX709 (1 << 6)
> > +#define UC6_CE (1 << 5)
> > +#define UC6_CP (1 << 4)
> > +
> > +#define UIE_WBEIE (1 << 6)
> > +#define UIE_ISDIE (1 << 5)
> > +#define UIE_PRXIE (1 << 4)
> > +#define UIE_PTXIE (1 << 3)
> > +#define UIE_PCTEIE (1 << 2)
> > +#define UIE_PSIE (1 << 1)
> > +#define UIE_TXFIE (1 << 0)
> > +
> > +#define US3_PEF (1 << 7)
> > +#define US3_WBEF (1 << 6)
> > +#define US3_ISD (1 << 5)
> > +#define US3_PRXF (1 << 4)
> > +#define US3_PTXF (1 << 3)
> > +#define US3_PCTEF (1 << 2)
> > +#define US3_PSF (1 << 1)
> > +#define US3_TXFF (1 << 0)
> > +
> > +#define US4_INITF (1 << 4)
> > +#define US4_CDET(x) ((x & 3) << 2)
> > +#define US4_ILCV (1 << 1)
> > +#define US4_FE (1 << 0)
> > +
> > +#endif /* __SERIAL_VYBRID_H__ */
> > diff --git a/arch/arm/include/asm/arch-vybrid/sys_proto.h
> b/arch/arm/include/asm/arch-vybrid/sys_proto.h
> > new file mode 100644
> > index 0000000..7e2de97
> > --- /dev/null
> > +++ b/arch/arm/include/asm/arch-vybrid/sys_proto.h
> > @@ -0,0 +1,30 @@
> > +/*
> > + * Copyright 2012-2013 Freescale Semiconductor, Inc.
> > + *
> > + * See file CREDITS for list of people who contributed to this
> > + * project.
> > + *
> > + * This program is free software; you can redistribute it and/or
> > + * modify it under the terms of the GNU General Public License as
> > + * published by the Free Software Foundation; either version 2 of
> > + * the License, or (at your option) any later version.
> > + *
> > + * This program is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> > + * GNU General Public License for more details.
> > + *
> > + * You should have received a copy of the GNU General Public License
> > + * along with this program; if not, write to the Free Software
> > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> > + * MA 02111-1307 USA
> > + */
> > +
> > +#ifndef _SYS_PROTO_H_
> > +#define _SYS_PROTO_H_
> > +
> > +u32 get_cpu_rev(void);
> > +#define is_soc_rev(rev) ((get_cpu_rev() & 0xFF) - rev)
> > +void sdelay(unsigned long);
>
> We get rid of sdelay() and we use udelay() when it is possible. I do not
> know if this is the case.
[Alison Wang] Agree.
>
> > diff --git a/arch/arm/include/asm/arch-vybrid/timer.h
> b/arch/arm/include/asm/arch-vybrid/timer.h
> > new file mode 100644
> > index 0000000..55497e3
> > --- /dev/null
> > +++ b/arch/arm/include/asm/arch-vybrid/timer.h
> > @@ -0,0 +1,405 @@
> > +/*
> > + * Copyright 2012-2013 Freescale Semiconductor, Inc.
> > + *
> > + * See file CREDITS for list of people who contributed to this
> > + * project.
> > + *
> > + * This program is free software; you can redistribute it and/or
> > + * modify it under the terms of the GNU General Public License as
> > + * published by the Free Software Foundation; either version 2 of
> > + * the License, or (at your option) any later version.
> > + *
> > + * This program is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> > + * GNU General Public License for more details.
> > + *
> > + * You should have received a copy of the GNU General Public License
> > + * along with this program; if not, write to the Free Software
> > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> > + * MA 02111-1307 USA
> > + */
> > +
> > +#ifndef __ASM_ARCH_TIMER_H
> > +#define __ASM_ARCH_TIMER_H
> > +
> > +struct ftm_regs {
> > + u32 sc; /* 0x00 */
> > + u32 cnt; /* 0x04 */
> > + u32 mod; /* 0x08 */
> > + u32 c0sc; /* 0x0C */
> > + u32 c0v; /* 0x10 */
> > + u32 c1sc; /* 0x14 */
> > + u32 c1v; /* 0x18 */
> > + u32 c2sc; /* 0x1C */
> > + u32 c2v; /* 0x20 */
> > + u32 c3sc; /* 0x24 */
> > + u32 c3v; /* 0x28 */
> > + u32 c4sc; /* 0x2C */
> > + u32 c4v; /* 0x30 */
> > + u32 c5sc; /* 0x34 */
> > + u32 c5v; /* 0x38 */
> > + u32 c6sc; /* 0x3C */
> > + u32 c6v; /* 0x40 */
> > + u32 c7sc; /* 0x44 */
> > + u32 c7v; /* 0x48 */
> > + u32 cntin; /* 0x4C */
> > + u32 status; /* 0x50 */
> > + u32 mode; /* 0x54 */
> > + u32 sync; /* 0x58 */
> > + u32 outinit; /* 0x5C */
> > + u32 outmask; /* 0x60 */
> > + u32 combine; /* 0x64 */
> > + u32 deadtime; /* 0x68 */
> > + u32 exttrig; /* 0x6C */
> > + u32 pol; /* 0x70 */
> > + u32 fms; /* 0x74 */
> > + u32 filter; /* 0x78 */
> > + u32 fltctrl; /* 0x7C */
> > + u32 qdctrl; /* 0x80 */
> > + u32 conf; /* 0x84 */
> > + u32 fltpol; /* 0x88 */
> > + u32 synconf; /* 0x8C */
> > + u32 invctrl; /* 0x90 */
> > + u32 swoctrl; /* 0x94 */
> > + u32 pwmload; /* 0x98 */
> > +};
> > +
> > +struct pit2_regs {
> > + u32 ldval; /* 0x00 */
> > + u32 cval; /* 0x04 */
> > + u32 tctrl; /* 0x08 */
> > + u32 tflg; /* 0x0C */
> > +};
> > +
> > +struct pit_regs {
> > + u32 mcr; /* 0x00 */
> > + u32 rsvd0[55];
> > + u32 ltmr64h; /* 0xE0 */
> > + u32 ltmr64l; /* 0xE4 */
> > + u32 rsvd1[6];
> > + struct pit2_regs counter[8]; /* 0x100 */
> > +};
> > +
> > +struct lptmr_regs {
> > + u32 csr; /* 0x00 */
> > + u32 psr; /* 0x04 */
> > + u32 cmr; /* 0x08 */
> > + u32 cnr; /* 0x0C */
> > +};
>
> Comments with offset are not very useful, drop them.
[Alison Wang] Agree.
>
> > diff --git a/arch/arm/include/asm/arch-vybrid/vybrid-pins.h
> b/arch/arm/include/asm/arch-vybrid/vybrid-pins.h
> > new file mode 100644
> > index 0000000..225a1e1
> > --- /dev/null
> > +++ b/arch/arm/include/asm/arch-vybrid/vybrid-pins.h
> > @@ -0,0 +1,88 @@
> > +/*
> > + * Copyright 2012-2013 Freescale Semiconductor, Inc.
> > + *
> > + * See file CREDITS for list of people who contributed to this
> > + * project.
> > + *
> > + * This program is free software; you can redistribute it and/or
> > + * modify it under the terms of the GNU General Public License as
> > + * published by the Free Software Foundation; either version 2 of
> > + * the License, or (at your option) any later version.
> > + *
> > + * This program is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> > + * GNU General Public License for more details.
> > + *
> > + * You should have received a copy of the GNU General Public License
> > + * along with this program; if not, write to the Free Software
> > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> > + * MA 02111-1307 USA
> > + */
> > +
> > +#ifndef __ASM_ARCH_VYBRID_PINS_H__
> > +#define __ASM_ARCH_VYBRID_PINS_H__
> > +
> > +#ifndef __ASSEMBLY__
> > +
> > +/*!
> > + * Starting bit position within each entry of \b iomux_pins to
> represent the
> > + * MUX control register offset
> > + */
> > +#define MUX_I 0
>
> You use inconsistently doxygen comments. As I remember, there is no
> decision to use it in the project, so please remove the meta chars.
[Alison Wang] Agree.
>
>
> > +/*!
> > + * Starting bit position within each entry of \b iomux_pins to
> represent the
> > + * PAD control register offset
> > + */
> > +#define PAD_I 10
> > +/*!
> > + * Starting bit position within each entry of \b iomux_pins to
> represent which
> > + * mux mode is for GPIO (0-based)
> > + */
> > +#define GPIO_I 21
> > +
> > +#define MUX_IO_P 29
> > +#define MUX_IO_I 24
> > +#define IOMUX_TO_GPIO(pin) ((((unsigned int)pin >> MUX_IO_P) * \
> > + GPIO_NUM_PIN) + ((pin >> MUX_IO_I) &\
> > + ((1 << (MUX_IO_P - MUX_IO_I)) - 1)))
> > +#define IOMUX_TO_IRQ(pin) (MXC_GPIO_INT_BASE +
> IOMUX_TO_GPIO(pin))
> > +#define GPIO_TO_PORT(n) (n / GPIO_NUM_PIN)
> > +#define GPIO_TO_INDEX(n) (n % GPIO_NUM_PIN)
>
> I prefer you use the same convention we have for other Freescale's SOC,
> that is PORT starts from 1 and not from zero. Check if you can use the
> macros already set for MX% / MX6.
[Alison Wang] Agree.
>
> > +#define IRAM_BASE_ADDR 0x3F000000 /* internal ram */
> > +#define AIPS0_BASE_ADDR 0x40000000
> > +#define AIPS1_BASE_ADDR 0x40080000
> > +#define CSD0_BASE_ADDR 0x80000000 /* ddr 0 */
> > +#define CSD1_BASE_ADDR 0xa0000000 /* ddr 1 */
> > +
> > +#define IRAM_SIZE 0x00040000 /* 256 KB */
> > +
> > +/* AIPS 0 */
> > +#define MSCM_BASE_ADDR (AIPS0_BASE_ADDR + 0x00001000)
> > +#define CA5SCU_BASE_ADDR (AIPS0_BASE_ADDR + 0x00002000)
> > +#define CA5_INTD_BASE_ADDR (AIPS0_BASE_ADDR + 0x00003000)
> > +#define CA5_L2C_BASE_ADDR (AIPS0_BASE_ADDR + 0x00006000)
> > +#define NIC0_BASE_ADDR (AIPS0_BASE_ADDR + 0x00008000)
> > +#define NIC1_BASE_ADDR (AIPS0_BASE_ADDR + 0x00009000)
> > +#define NIC2_BASE_ADDR (AIPS0_BASE_ADDR + 0x0000A000)
> > +#define NIC3_BASE_ADDR (AIPS0_BASE_ADDR + 0x0000B000)
> > +#define NIC4_BASE_ADDR (AIPS0_BASE_ADDR + 0x0000C000)
> > +#define NIC5_BASE_ADDR (AIPS0_BASE_ADDR + 0x0000D000)
> > +#define NIC6_BASE_ADDR (AIPS0_BASE_ADDR + 0x0000E000)
> > +#define NIC7_BASE_ADDR (AIPS0_BASE_ADDR + 0x0000F000)
> > +#define AHBTZASC_BASE_ADDR (AIPS0_BASE_ADDR + 0x00010000)
> > +#define TZASC_SYS0_BASE_ADDR (AIPS0_BASE_ADDR + 0x00011000)
> > +#define TZASC_SYS1_BASE_ADDR (AIPS0_BASE_ADDR + 0x00012000)
> > +#define TZASC_GFX_BASE_ADDR (AIPS0_BASE_ADDR + 0x00013000)
> > +#define TZASC_DDR0_BASE_ADDR (AIPS0_BASE_ADDR + 0x00014000)
> > +#define TZASC_DDR1_BASE_ADDR (AIPS0_BASE_ADDR + 0x00015000)
> > +#define CSU_BASE_ADDR (AIPS0_BASE_ADDR + 0x00017000)
> > +#define DMA0_BASE_ADDR (AIPS0_BASE_ADDR + 0x00018000)
> > +#define DMA0_TCD_BASE_ADDR (AIPS0_BASE_ADDR + 0x00019000)
> > +#define SEMA4_BASE_ADDR (AIPS0_BASE_ADDR + 0x0001D000)
> > +#define FB_BASE_ADDR (AIPS0_BASE_ADDR + 0x0001E000)
> > +#define DMA_MUX0_BASE_ADDR (AIPS0_BASE_ADDR + 0x00024000)
> > +#define UART0_BASE (AIPS0_BASE_ADDR + 0x00027000)
> > +#define UART1_BASE (AIPS0_BASE_ADDR + 0x00028000)
> > +#define UART2_BASE (AIPS0_BASE_ADDR + 0x00029000)
> > +#define UART3_BASE (AIPS0_BASE_ADDR + 0x0002A000)
> > +#define SPI0_BASE_ADDR (AIPS0_BASE_ADDR + 0x0002C000)
> > +#define SPI1_BASE_ADDR (AIPS0_BASE_ADDR + 0x0002D000)
> > +#define SAI0_BASE_ADDR (AIPS0_BASE_ADDR + 0x0002F000)
> > +#define SAI1_BASE_ADDR (AIPS0_BASE_ADDR + 0x00030000)
> > +#define SAI2_BASE_ADDR (AIPS0_BASE_ADDR + 0x00031000)
> > +#define SAI3_BASE_ADDR (AIPS0_BASE_ADDR + 0x00032000)
> > +#define CRC_BASE_ADDR (AIPS0_BASE_ADDR + 0x00033000)
> > +#define PDB_BASE_ADDR (AIPS0_BASE_ADDR + 0x00036000)
> > +#define PIT_BASE_ADDR (AIPS0_BASE_ADDR + 0x00037000)
> > +#define FTM0_BASE_ADDR (AIPS0_BASE_ADDR + 0x00038000)
> > +#define FTM1_BASE_ADDR (AIPS0_BASE_ADDR + 0x00039000)
> > +#define ADC_BASE_ADDR (AIPS0_BASE_ADDR + 0x0003B000)
> > +#define TCON0_BASE_ADDR (AIPS0_BASE_ADDR + 0x0003D000)
> > +#define WDOG_A5_BASE_ADDR (AIPS0_BASE_ADDR + 0x0003E000)
> > +#define WDOG_M4_BASE_ADDR (AIPS0_BASE_ADDR + 0x0003E000)
> > +#define LPTMR_BASE_ADDR (AIPS0_BASE_ADDR + 0x00040000)
> > +#define RLE_BASE_ADDR (AIPS0_BASE_ADDR + 0x00042000)
> > +#define MLB_BASE_ADDR (AIPS0_BASE_ADDR + 0x00043000)
> > +#define QSPI0_BASE_ADDR (AIPS0_BASE_ADDR + 0x00044000)
> > +#define IOMUXC_BASE_ADDR (AIPS0_BASE_ADDR + 0x00048000)
> > +#define ANATOP_BASE_ADDR (AIPS0_BASE_ADDR + 0x00050000)
> > +#define SCSCM_BASE_ADDR (AIPS0_BASE_ADDR + 0x00052000)
> > +#define ASRC_BASE_ADDR (AIPS0_BASE_ADDR + 0x00060000)
> > +#define SPDIF_BASE_ADDR (AIPS0_BASE_ADDR + 0x00061000)
> > +#define ESAI_BASE_ADDR (AIPS0_BASE_ADDR + 0x00062000)
> > +#define ESAI_FIFO_BASE_ADDR (AIPS0_BASE_ADDR + 0x00063000)
> > +#define EWDOG_BASE_ADDR (AIPS0_BASE_ADDR + 0x00065000)
> > +#define I2C0_BASE_ADDR (AIPS0_BASE_ADDR + 0x00066000)
> > +#define WKUP_BASE_ADDR (AIPS0_BASE_ADDR + 0x0006A000)
> > +#define CCM_BASE_ADDR (AIPS0_BASE_ADDR + 0x0006B000)
> > +#define GPC_BASE_ADDR (AIPS0_BASE_ADDR + 0x0006C000)
> > +#define VREG_DIG_BASE_ADDR (AIPS0_BASE_ADDR + 0x0006D000)
> > +#define SRC_BASE_ADDR (AIPS0_BASE_ADDR + 0x0006E000)
> > +#define CMU_BASE_ADDR (AIPS0_BASE_ADDR + 0x0006F000)
> > +
> > +/* AIPS 1 */
> > +#define DDR_BASE_ADDR (AIPS1_BASE_ADDR + 0x0002E000)
> > +#define ESDHC1_BASE_ADDR (AIPS1_BASE_ADDR + 0x00032000)
> > +#define ESDHC2_BASE_ADDR (AIPS1_BASE_ADDR + 0x00032000)
> > +#define QSPI1_BASE_ADDR (AIPS0_BASE_ADDR + 0x00044000)
> > +#define MACNET0_BASE_ADDR (AIPS1_BASE_ADDR + 0x00050000)
> > +#define MACNET1_BASE_ADDR (AIPS1_BASE_ADDR + 0x00051000)
> > +
> > +/* WEIM CSnGCR1 */
> > +#define CSEN 1
> > +#define SWR (1 << 1)
> > +#define SRD (1 << 2)
> > +#define MUM (1 << 3)
> > +#define WFL (1 << 4)
> > +#define RFL (1 << 5)
> > +#define CRE (1 << 6)
> > +#define CREP (1 << 7)
> > +#define BL(x) (((x) & 0x7) << 8)
> > +#define WC (1 << 11)
> > +#define BCD(x) (((x) & 0x3) << 12)
> > +#define BCS(x) (((x) & 0x3) << 14)
> > +#define DSZ(x) (((x) & 0x7) << 16)
> > +#define SP (1 << 19)
> > +#define CSREC(x) (((x) & 0x7) << 20)
> > +#define AUS (1 << 23)
> > +#define GBC(x) (((x) & 0x7) << 24)
> > +#define WP (1 << 27)
> > +#define PSZ(x) (((x) & 0x0f << 28)
> > +
> > +/* WEIM CSnGCR2 */
> > +#define ADH(x) (((x) & 0x3))
> > +#define DAPS(x) (((x) & 0x0f << 4)
> > +#define DAE (1 << 8)
> > +#define DAP (1 << 9)
> > +#define MUX16_BYP (1 << 12)
> > +
> > +/* WEIM CSnRCR1 */
> > +#define RCSN(x) (((x) & 0x7))
> > +#define RCSA(x) (((x) & 0x7) << 4)
> > +#define OEN(x) (((x) & 0x7) << 8)
> > +#define OEA(x) (((x) & 0x7) << 12)
> > +#define RADVN(x) (((x) & 0x7) << 16)
> > +#define RAL (1 << 19)
> > +#define RADVA(x) (((x) & 0x7) << 20)
> > +#define RWSC(x) (((x) & 0x3f) << 24)
> > +
> > +/* WEIM CSnRCR2 */
> > +#define RBEN(x) (((x) & 0x7))
> > +#define RBE (1 << 3)
> > +#define RBEA(x) (((x) & 0x7) << 4)
> > +#define RL(x) (((x) & 0x3) << 8)
> > +#define PAT(x) (((x) & 0x7) << 12)
> > +#define APR (1 << 15)
> > +
> > +/* WEIM CSnWCR1 */
> > +#define WCSN(x) (((x) & 0x7))
> > +#define WCSA(x) (((x) & 0x7) << 3)
> > +#define WEN(x) (((x) & 0x7) << 6)
> > +#define WEA(x) (((x) & 0x7) << 9)
> > +#define WBEN(x) (((x) & 0x7) << 12)
> > +#define WBEA(x) (((x) & 0x7) << 15)
> > +#define WADVN(x) (((x) & 0x7) << 18)
> > +#define WADVA(x) (((x) & 0x7) << 21)
> > +#define WWSC(x) (((x) & 0x3f) << 24)
> > +#define WBED1 (1 << 30)
> > +#define WAL (1 << 31)
> > +
> > +/* WEIM CSnWCR2 */
> > +#define WBED 1
> > +
> > +/* WEIM WCR */
> > +#define BCM 1
> > +#define GBCD(x) (((x) & 0x3) << 1)
> > +#define INTEN (1 << 4)
> > +#define INTPOL (1 << 5)
> > +#define WDOG_EN (1 << 8)
> > +#define WDOG_LIMIT(x) (((x) & 0x3) << 9)
> > +
> > +/* Number of GPIO pins per port */
> > +#define GPIO_NUM_PIN 32
> > +
> > +#define IIM_SREV 0x24
> > +#define ROM_SI_REV 0x80
> > +
> > +#define NFC_BUF_SIZE 0x1000
> > +
> > +#define CHIP_REV_1_0 0x10
> > +#define CHIP_REV_1_1 0x11
> > +#define CHIP_REV_2_0 0x20
> > +#define CHIP_REV_2_5 0x25
> > +#define CHIP_REV_3_0 0x30
> > +
> > +#define BOARD_REV_1_0 0x0
> > +#define BOARD_REV_2_0 0x1
> > +
> > +#if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__))
> > +#include <asm/types.h>
> > +
> > +struct clkctl {
> > + u32 ccr; /* 0x00 */
> > + u32 csr; /* 0x04 */
> > + u32 ccsr; /* 0x08 */
> > + u32 cacrr; /* 0x0C */
> > + u32 cscmr1; /* 0x10 */
> > + u32 cscdr1; /* 0x14 */
> > + u32 cscdr2; /* 0x18 */
> > + u32 cscdr3; /* 0x1C */
> > + u32 cscmr2; /* 0x20 */
> > + u32 cscdr4; /* 0x24 */
> > + u32 ctor; /* 0x28 */
> > + u32 clpcr; /* 0x2C */
> > + u32 cisr; /* 0x30 */
> > + u32 cimr; /* 0x34 */
> > + u32 ccosr; /* 0x38 */
> > + u32 cgpr; /* 0x3C */
> > + u32 ccgr0; /* 0x40 */
> > + u32 ccgr1; /* 0x44 */
> > + u32 ccgr2; /* 0x48 */
> > + u32 ccgr3; /* 0x4C */
> > + u32 ccgr4; /* 0x50 */
> > + u32 ccgr5; /* 0x54 */
> > + u32 ccgr6; /* 0x58 */
> > + u32 ccgr7; /* 0x5C */
> > + u32 ccgr8; /* 0x60 */
> > + u32 ccgr9; /* 0x64 */
> > + u32 ccgr10; /* 0x68 */
> > + u32 ccgr11; /* 0x6C */
> > + u32 cmeor0; /* 0x70 */
> > + u32 cmeor1; /* 0x74 */
> > + u32 cmeor2; /* 0x78 */
> > + u32 cmeor3; /* 0x7C */
> > + u32 cmeor4; /* 0x80 */
> > + u32 cmeor5; /* 0x84 */
> > + u32 cppdsr; /* 0x88 */
> > + u32 ccowr; /* 0x8C */
> > + u32 ccpgr0; /* 0x90 */
> > + u32 ccpgr1; /* 0x94 */
> > + u32 ccpgr2; /* 0x98 */
> > + u32 ccpgr3; /* 0x9C */
> > +};
> > +
> > +/* WEIM registers */
> > +struct weim {
> > + u32 cs0gcr1;
> > + u32 cs0gcr2;
> > + u32 cs0rcr1;
> > + u32 cs0rcr2;
> > + u32 cs0wcr1;
> > + u32 cs0wcr2;
> > + u32 cs1gcr1;
> > + u32 cs1gcr2;
> > + u32 cs1rcr1;
> > + u32 cs1rcr2;
> > + u32 cs1wcr1;
> > + u32 cs1wcr2;
> > + u32 cs2gcr1;
> > + u32 cs2gcr2;
> > + u32 cs2rcr1;
> > + u32 cs2rcr2;
> > + u32 cs2wcr1;
> > + u32 cs2wcr2;
> > + u32 cs3gcr1;
> > + u32 cs3gcr2;
> > + u32 cs3rcr1;
> > + u32 cs3rcr2;
> > + u32 cs3wcr1;
> > + u32 cs3wcr2;
> > + u32 cs4gcr1;
> > + u32 cs4gcr2;
> > + u32 cs4rcr1;
> > + u32 cs4rcr2;
> > + u32 cs4wcr1;
> > + u32 cs4wcr2;
> > + u32 cs5gcr1;
> > + u32 cs5gcr2;
> > + u32 cs5rcr1;
> > + u32 cs5rcr2;
> > + u32 cs5wcr1;
> > + u32 cs5wcr2;
> > + u32 wcr;
> > + u32 wiar;
> > + u32 ear;
> > +};
> > +
>
> I think about if we cann avoid to duplicate another time this structure,
> moving it into a common place. See MX5 struct weim.
>
> > +struct anadig {
> > + u32 usb1_pll_ctrl;
> > + u32 usb2_pll_ctrl;
> > + u32 pll_528_ctrl;
> > + u32 pll_528_ss;
> > + u32 pll_528_num;
> > + u32 pll_528_denom;
> > + u32 pll_aud_ctrl;
> > + u32 pll_aud_num;
> > + u32 pll_aud_denom;
> > + u32 pll_vid_ctrl;
> > + u32 pll_vid_num;
> > + u32 pll_vid_denom;
> > + u32 pll_enet_ctrl;
> > + u32 pll_pfd_480_usb1;
> > + u32 pll_pfd_528;
> > + u32 reg_1p1;
> > + u32 reg_3p0;
> > + u32 reg_2p5;
> > + u32 ana_misc0;
> > + u32 ana_misc1;
> > + u32 tempsens0;
> > + u32 usb1_vbus_det;
> > + u32 usb1_vbus_chrg_det;
> > + u32 usb1_vbus_detsta;
> > + u32 usb1_chrg_detsta;
> > + u32 usb1_loopback;
> > + u32 usb1_misc;
> > + u32 usb2_vbus_det;
> > + u32 usb2_vbus_chrg_det;
> > + u32 usb2_vbus_detsta;
> > + u32 usb2_chrg_detsta;
> > + u32 usb2_loopback;
> > + u32 usb2_misc;
> > + u32 digprog;
> > + u32 pll_sys_ctrl;
> > + u32 pll_sys_ss;
> > + u32 pll_sys_num;
> > + u32 pll_sys_denom;
> > + u32 pfd_528_sys;
> > + u32 pll_lock;
> > +};
> > +
> > +struct iomuxc {
> > + u32 gpr0;
> > + u32 gpr1;
> > + u32 omux0;
> > + u32 omux1;
> > + u32 omux2;
> > + u32 omux3;
> > + u32 omux4;
> > +};
> > +
> > +/* System Reset Controller (SRC) */
> > +struct src {
> > + u32 scr; /* 0x00 */
> > + u32 sbmr1; /* 0x04 */
> > + u32 srsr; /* 0x08 */
> > + u32 secr; /* 0x0C */
> > + u32 gpsr; /* 0x10 */
> > + u32 sicr; /* 0x14 */
> > + u32 simr; /* 0x18 */
> > + u32 sbmr2; /* 0x1C */
> > + u32 gpr0; /* 0x20 */
> > + u32 gpr1; /* 0x24 */
> > + u32 gpr2; /* 0x28 */
> > + u32 gpr3; /* 0x2C */
> > + u32 gpr4; /* 0x30 */
> > + u32 hab0; /* 0x34 */
> > + u32 hab1; /* 0x38 */
> > + u32 hab2; /* 0x3C */
> > + u32 hab3; /* 0x40 */
> > + u32 hab4; /* 0x44 */
> > + u32 hab5; /* 0x48 */
> > + u32 misc0; /* 0x4C */
> > + u32 misc1; /* 0x50 */
> > + u32 misc2; /* 0x54 */
> > + u32 misc3; /* 0x58 */
> > +};
> > +
> > +struct fuse_bank1_regs {
> > + u32 fuse0_8[9];
> > + u32 mac_addr[6];
> > + u32 fuse15_31[0x11];
> > +};
> > +
> > +#define ANADIG_USB1_PLL_CTRL (0x10)
> > +#define ANADIG_USB2_PLL_CTRL (0x20)
> > +#define ANADIG_PLL_528_CTRL (0x30)
> > +#define ANADIG_PLL_528_SS (0x40)
> > +#define ANADIG_PLL_528_NUM (0x50)
> > +#define ANADIG_PLL_528_DENOM (0x60)
> > +#define ANADIG_PLL_AUD_CTRL (0x70)
> > +#define ANADIG_PLL_AUD_NUM (0x80)
> > +#define ANADIG_PLL_AUD_DENOM (0x90)
> > +#define ANADIG_PLL_VID_CTRL (0xA0)
> > +#define ANADIG_PLL_VID_NUM (0xB0)
> > +#define ANADIG_PLL_VID_DENOM (0xC0)
> > +#define ANADIG_PLL_ENET_CTRL (0xE0)
> > +#define ANADIG_PLL_PFD_480_USB1 (0xF0)
> > +#define ANADIG_PLL_PFD_528 (0x100)
> > +#define ANADIG_REG_1P1 (0x110)
> > +#define ANADIG_REG_3P0 (0x120)
> > +#define ANADIG_REG_2P5 (0x130)
> > +#define ANADIG_ANA_MISC0 (0x150)
> > +#define ANADIG_ANA_MISC1 (0x160)
> > +#define ANADIG_TEMPSENS0 (0x180)
> > +#define ANADIG_USB1_VBUS_DET (0x1A0)
> > +#define ANADIG_USB1_CHRG_DET (0x1B0)
> > +#define ANADIG_USB1_VBUS_DETSTA (0x1C0)
> > +#define ANADIG_UAB1_CHRG_DETSTA (0x1D0)
> > +#define ANADIG_USB1_LOOPBACK (0x1E0)
> > +#define ANADIG_USB1_MISC (0x1F0)
> > +#define ANADIG_USB2_VBUS_DET (0x200)
> > +#define ANADIG_USB2_CHRG_DET (0x210)
> > +#define ANADIG_USB2_VBUS_DETSTA (0x220)
> > +#define ANADIG_USB2_CHRG_DETSTA (0x230)
> > +#define ANADIG_USB2_LOOPBACK (0x240)
> > +#define ANADIG_USB2_MISC (0x250)
> > +#define ANADIG_DIGPROG (0x260)
> > +#define ANADIG_PLL_SYS_CTRL (0x270)
> > +#define ANADIG_PLL_SYS_SS (0x280)
> > +#define ANADIG_PLL_SYS_NUM (0x290)
> > +#define ANADIG_PLL_SYS_DENOM (0x2A0)
> > +#define ANADIG_PFD_528_SYS (0x2B0)
> > +#define ANADIG_PLL_LOCK (0x2C0)
> > +
> > +#define CCM_CCSR_SYS_CLK_SEL_OFFSET 0
> > +#define CCM_CCSR_SYS_CLK_SEL_MASK 0x7
> > +
> > +#define CCM_CCSR_PLL2_PFD_CLK_SEL_OFFSET 19
> > +#define CCM_CCSR_PLL2_PFD_CLK_SEL_MASK (0x7 << 19)
> > +
> > +#define CCM_CCSR_PLL1_PFD_CLK_SEL_OFFSET 16
> > +#define CCM_CCSR_PLL1_PFD_CLK_SEL_MASK (0x7 << 16)
> > +
> > +#define CCM_CACRR_ARM_CLK_DIV_OFFSET 0
> > +#define CCM_CACRR_ARM_CLK_DIV_MASK 0x7
> > +#define CCM_CACRR_BUS_CLK_DIV_OFFSET 3
> > +#define CCM_CACRR_BUS_CLK_DIV_MASK (0x7 << 3)
> > +#define CCM_CACRR_IPG_CLK_DIV_OFFSET 11
> > +#define CCM_CACRR_IPG_CLK_DIV_MASK (0x3 << 11)
> > +
> > +#define CCM_CSCMR1_ESDHC1_CLK_SEL_OFFSET 18
> > +#define CCM_CSCMR1_ESDHC1_CLK_SEL_MASK (0x3 << 18)
> > +
> > +#define CCM_CSCDR2_ESDHC1_CLK_DIV_OFFSET 20
> > +#define CCM_CSCDR2_ESDHC1_CLK_DIV_MASK (0xf << 20)
> > +
> > +#define CCM_CSCMR2_RMII_CLK_SEL_OFFSET 4
> > +#define CCM_CSCMR2_RMII_CLK_SEL_MASK (0x3 << 4)
> > +
> > +#define FASE_CLK_FREQ 24000000
> > +#define SLOW_CLK_FREQ 32000
> > +#define PLL1_PFD1_FREQ 500000000
> > +#define PLL1_PFD2_FREQ 452000000
> > +#define PLL1_PFD3_FREQ 396000000
> > +#define PLL1_PFD4_FREQ 528000000
> > +#define PLL1_MAIN_FREQ 528000000
> > +#define PLL2_PFD1_FREQ 500000000
> > +#define PLL2_PFD2_FREQ 396000000
> > +#define PLL2_PFD3_FREQ 339000000
> > +#define PLL2_PFD4_FREQ 413000000
> > +#define PLL2_MAIN_FREQ 528000000
> > +#define PLL3_MAIN_FREQ 480000000
> > +#define PLL3_PFD3_FREQ 298000000
> > +#define PLL5_MAIN_FREQ 500000000
> > +
> > +#define ENET_EXTERNAL_CLK 50000000
> > +#define AUDIO_EXTERNAL_CLK 24576000
> > +
> > +#define DDR_CR_BASE DDR_BASE_ADDR
> > +#define DDR_PHY_BASE (DDR_BASE_ADDR + 0x400)
> > +
> > +#define DDR_CR000 (DDR_CR_BASE + 0x000)
> > +#define DDR_CR001 (DDR_CR_BASE + 0x004)
> > +#define DDR_CR002 (DDR_CR_BASE + 0x008)
> > +#define DDR_CR003 (DDR_CR_BASE + 0x00C)
> > +#define DDR_CR004 (DDR_CR_BASE + 0x010)
> > +#define DDR_CR005 (DDR_CR_BASE + 0x014)
> > +#define DDR_CR006 (DDR_CR_BASE + 0x018)
> > +#define DDR_CR007 (DDR_CR_BASE + 0x01C)
> > +#define DDR_CR008 (DDR_CR_BASE + 0x020)
> > +#define DDR_CR009 (DDR_CR_BASE + 0x024)
> > +
> > +#define DDR_CR010 (DDR_CR_BASE + 0x028)
> > +#define DDR_CR011 (DDR_CR_BASE + 0x02C)
> > +#define DDR_CR012 (DDR_CR_BASE + 0x030)
> > +#define DDR_CR013 (DDR_CR_BASE + 0x034)
> > +#define DDR_CR014 (DDR_CR_BASE + 0x038)
> > +#define DDR_CR015 (DDR_CR_BASE + 0x03C)
> > +#define DDR_CR016 (DDR_CR_BASE + 0x040)
> > +#define DDR_CR017 (DDR_CR_BASE + 0x044)
> > +#define DDR_CR018 (DDR_CR_BASE + 0x048)
> > +#define DDR_CR019 (DDR_CR_BASE + 0x04C)
> > +
> > +#define DDR_CR020 (DDR_CR_BASE + 0x050)
> > +#define DDR_CR021 (DDR_CR_BASE + 0x054)
> > +#define DDR_CR022 (DDR_CR_BASE + 0x058)
> > +#define DDR_CR023 (DDR_CR_BASE + 0x05C)
> > +#define DDR_CR024 (DDR_CR_BASE + 0x060)
> > +#define DDR_CR025 (DDR_CR_BASE + 0x064)
> > +#define DDR_CR026 (DDR_CR_BASE + 0x068)
> > +#define DDR_CR027 (DDR_CR_BASE + 0x06C)
> > +#define DDR_CR028 (DDR_CR_BASE + 0x070)
> > +#define DDR_CR029 (DDR_CR_BASE + 0x074)
> > +
> > +#define DDR_CR030 (DDR_CR_BASE + 0x078)
> > +#define DDR_CR031 (DDR_CR_BASE + 0x07C)
> > +#define DDR_CR032 (DDR_CR_BASE + 0x080)
> > +#define DDR_CR033 (DDR_CR_BASE + 0x084)
> > +#define DDR_CR034 (DDR_CR_BASE + 0x088)
> > +#define DDR_CR035 (DDR_CR_BASE + 0x08C)
> > +#define DDR_CR036 (DDR_CR_BASE + 0x090)
> > +#define DDR_CR037 (DDR_CR_BASE + 0x094)
> > +#define DDR_CR038 (DDR_CR_BASE + 0x098)
> > +#define DDR_CR039 (DDR_CR_BASE + 0x09C)
> > +
> > +#define DDR_CR040 (DDR_CR_BASE + 0x0A0)
> > +#define DDR_CR041 (DDR_CR_BASE + 0x0A4)
> > +#define DDR_CR042 (DDR_CR_BASE + 0x0A8)
> > +#define DDR_CR043 (DDR_CR_BASE + 0x0AC)
> > +#define DDR_CR044 (DDR_CR_BASE + 0x0B0)
> > +#define DDR_CR045 (DDR_CR_BASE + 0x0B4)
> > +#define DDR_CR046 (DDR_CR_BASE + 0x0B8)
> > +#define DDR_CR047 (DDR_CR_BASE + 0x0BC)
> > +#define DDR_CR048 (DDR_CR_BASE + 0x0C0)
> > +#define DDR_CR049 (DDR_CR_BASE + 0x0C4)
> > +
> > +#define DDR_CR050 (DDR_CR_BASE + 0x0C8)
> > +#define DDR_CR051 (DDR_CR_BASE + 0x0CC)
> > +#define DDR_CR052 (DDR_CR_BASE + 0x0D0)
> > +#define DDR_CR053 (DDR_CR_BASE + 0x0D4)
> > +#define DDR_CR054 (DDR_CR_BASE + 0x0D8)
> > +#define DDR_CR055 (DDR_CR_BASE + 0x0DC)
> > +#define DDR_CR056 (DDR_CR_BASE + 0x0E0)
> > +#define DDR_CR057 (DDR_CR_BASE + 0x0E4)
> > +#define DDR_CR058 (DDR_CR_BASE + 0x0E8)
> > +#define DDR_CR059 (DDR_CR_BASE + 0x0EC)
> > +
> > +#define DDR_CR060 (DDR_CR_BASE + 0x0F0)
> > +#define DDR_CR061 (DDR_CR_BASE + 0x0F4)
> > +#define DDR_CR062 (DDR_CR_BASE + 0x0F8)
> > +#define DDR_CR063 (DDR_CR_BASE + 0x0FC)
> > +#define DDR_CR064 (DDR_CR_BASE + 0x100)
> > +#define DDR_CR065 (DDR_CR_BASE + 0x104)
> > +#define DDR_CR066 (DDR_CR_BASE + 0x108)
> > +#define DDR_CR067 (DDR_CR_BASE + 0x10C)
> > +#define DDR_CR068 (DDR_CR_BASE + 0x110)
> > +#define DDR_CR069 (DDR_CR_BASE + 0x114)
> > +
> > +#define DDR_CR070 (DDR_CR_BASE + 0x118)
> > +#define DDR_CR071 (DDR_CR_BASE + 0x11C)
> > +#define DDR_CR072 (DDR_CR_BASE + 0x120)
> > +#define DDR_CR073 (DDR_CR_BASE + 0x124)
> > +#define DDR_CR074 (DDR_CR_BASE + 0x128)
> > +#define DDR_CR075 (DDR_CR_BASE + 0x12C)
> > +#define DDR_CR076 (DDR_CR_BASE + 0x130)
> > +#define DDR_CR077 (DDR_CR_BASE + 0x134)
> > +#define DDR_CR078 (DDR_CR_BASE + 0x138)
> > +#define DDR_CR079 (DDR_CR_BASE + 0x13C)
> > +
> > +#define DDR_CR080 (DDR_CR_BASE + 0x140)
> > +#define DDR_CR081 (DDR_CR_BASE + 0x144)
> > +#define DDR_CR082 (DDR_CR_BASE + 0x148)
> > +#define DDR_CR083 (DDR_CR_BASE + 0x14C)
> > +#define DDR_CR084 (DDR_CR_BASE + 0x150)
> > +#define DDR_CR085 (DDR_CR_BASE + 0x154)
> > +#define DDR_CR086 (DDR_CR_BASE + 0x158)
> > +#define DDR_CR087 (DDR_CR_BASE + 0x15C)
> > +#define DDR_CR088 (DDR_CR_BASE + 0x160)
> > +#define DDR_CR089 (DDR_CR_BASE + 0x164)
> > +
> > +#define DDR_CR090 (DDR_CR_BASE + 0x168)
> > +#define DDR_CR091 (DDR_CR_BASE + 0x16C)
> > +#define DDR_CR092 (DDR_CR_BASE + 0x170)
> > +#define DDR_CR093 (DDR_CR_BASE + 0x174)
> > +#define DDR_CR094 (DDR_CR_BASE + 0x178)
> > +#define DDR_CR095 (DDR_CR_BASE + 0x17C)
> > +#define DDR_CR096 (DDR_CR_BASE + 0x180)
> > +#define DDR_CR097 (DDR_CR_BASE + 0x184)
> > +#define DDR_CR098 (DDR_CR_BASE + 0x188)
> > +#define DDR_CR099 (DDR_CR_BASE + 0x18C)
> > +
> > +#define DDR_CR100 (DDR_CR_BASE + 0x190)
> > +#define DDR_CR101 (DDR_CR_BASE + 0x194)
> > +#define DDR_CR102 (DDR_CR_BASE + 0x198)
> > +#define DDR_CR103 (DDR_CR_BASE + 0x19C)
> > +#define DDR_CR104 (DDR_CR_BASE + 0x1A0)
> > +#define DDR_CR105 (DDR_CR_BASE + 0x1A4)
> > +#define DDR_CR106 (DDR_CR_BASE + 0x1A8)
> > +#define DDR_CR107 (DDR_CR_BASE + 0x1AC)
> > +#define DDR_CR108 (DDR_CR_BASE + 0x1B0)
> > +#define DDR_CR109 (DDR_CR_BASE + 0x1B4)
> > +
> > +#define DDR_CR110 (DDR_CR_BASE + 0x1B8)
> > +#define DDR_CR111 (DDR_CR_BASE + 0x1BC)
> > +#define DDR_CR112 (DDR_CR_BASE + 0x1C0)
> > +#define DDR_CR113 (DDR_CR_BASE + 0x1C4)
> > +#define DDR_CR114 (DDR_CR_BASE + 0x1C8)
> > +#define DDR_CR115 (DDR_CR_BASE + 0x1CC)
> > +#define DDR_CR116 (DDR_CR_BASE + 0x1D0)
> > +#define DDR_CR117 (DDR_CR_BASE + 0x1D4)
> > +#define DDR_CR118 (DDR_CR_BASE + 0x1D8)
> > +#define DDR_CR119 (DDR_CR_BASE + 0x1DC)
> > +
> > +#define DDR_CR120 (DDR_CR_BASE + 0x1E0)
> > +#define DDR_CR121 (DDR_CR_BASE + 0x1E4)
> > +#define DDR_CR122 (DDR_CR_BASE + 0x1E8)
> > +#define DDR_CR123 (DDR_CR_BASE + 0x1EC)
> > +#define DDR_CR124 (DDR_CR_BASE + 0x1F0)
> > +#define DDR_CR125 (DDR_CR_BASE + 0x1F4)
> > +#define DDR_CR126 (DDR_CR_BASE + 0x1F8)
> > +#define DDR_CR127 (DDR_CR_BASE + 0x1FC)
> > +#define DDR_CR128 (DDR_CR_BASE + 0x200)
> > +#define DDR_CR129 (DDR_CR_BASE + 0x204)
> > +
> > +#define DDR_CR130 (DDR_CR_BASE + 0x208)
> > +#define DDR_CR131 (DDR_CR_BASE + 0x20C)
> > +#define DDR_CR132 (DDR_CR_BASE + 0x210)
> > +#define DDR_CR133 (DDR_CR_BASE + 0x214)
> > +#define DDR_CR134 (DDR_CR_BASE + 0x218)
> > +#define DDR_CR135 (DDR_CR_BASE + 0x21C)
> > +#define DDR_CR136 (DDR_CR_BASE + 0x220)
> > +#define DDR_CR137 (DDR_CR_BASE + 0x224)
> > +#define DDR_CR138 (DDR_CR_BASE + 0x228)
> > +#define DDR_CR139 (DDR_CR_BASE + 0x22C)
> > +
> > +#define DDR_CR140 (DDR_CR_BASE + 0x230)
> > +#define DDR_CR141 (DDR_CR_BASE + 0x234)
> > +#define DDR_CR142 (DDR_CR_BASE + 0x238)
> > +#define DDR_CR143 (DDR_CR_BASE + 0x23C)
> > +#define DDR_CR144 (DDR_CR_BASE + 0x240)
> > +#define DDR_CR145 (DDR_CR_BASE + 0x244)
> > +#define DDR_CR146 (DDR_CR_BASE + 0x248)
> > +#define DDR_CR147 (DDR_CR_BASE + 0x24C)
> > +#define DDR_CR148 (DDR_CR_BASE + 0x250)
> > +#define DDR_CR149 (DDR_CR_BASE + 0x254)
> > +
> > +#define DDR_CR150 (DDR_CR_BASE + 0x258)
> > +#define DDR_CR151 (DDR_CR_BASE + 0x25C)
> > +#define DDR_CR152 (DDR_CR_BASE + 0x260)
> > +#define DDR_CR153 (DDR_CR_BASE + 0x264)
> > +#define DDR_CR154 (DDR_CR_BASE + 0x268)
> > +#define DDR_CR155 (DDR_CR_BASE + 0x26C)
> > +#define DDR_CR156 (DDR_CR_BASE + 0x270)
> > +#define DDR_CR157 (DDR_CR_BASE + 0x274)
> > +#define DDR_CR158 (DDR_CR_BASE + 0x278)
> > +#define DDR_CR159 (DDR_CR_BASE + 0x27C)
> > +
> > +#define DDR_CR160 (DDR_CR_BASE + 0x280)
> > +#define DDR_CR161 (DDR_CR_BASE + 0x284)
> > +#define DDR_CR162 (DDR_CR_BASE + 0x288)
> > +#define DDR_CR163 (DDR_CR_BASE + 0x28C)
> > +#define DDR_CR164 (DDR_CR_BASE + 0x290)
> > +#define DDR_CR165 (DDR_CR_BASE + 0x294)
> > +#define DDR_CR166 (DDR_CR_BASE + 0x298)
> > +#define DDR_CR167 (DDR_CR_BASE + 0x29C)
> > +#define DDR_CR168 (DDR_CR_BASE + 0x2A0)
> > +#define DDR_CR169 (DDR_CR_BASE + 0x2A4)
> > +
> > +#define DDR_CR170 (DDR_CR_BASE + 0x2A8)
> > +#define DDR_CR171 (DDR_CR_BASE + 0x2AC)
> > +#define DDR_CR172 (DDR_CR_BASE + 0x2B0)
> > +#define DDR_CR173 (DDR_CR_BASE + 0x2B4)
> > +#define DDR_CR174 (DDR_CR_BASE + 0x2B8)
> > +#define DDR_CR175 (DDR_CR_BASE + 0x2BC)
> > +#define DDR_CR176 (DDR_CR_BASE + 0x2C0)
> > +#define DDR_CR177 (DDR_CR_BASE + 0x2C4)
> > +#define DDR_CR178 (DDR_CR_BASE + 0x2C8)
> > +#define DDR_CR179 (DDR_CR_BASE + 0x2CC)
> > +
> > +/*
> > + * PHY
> > + */
> > +#define DDR_PHY000 (DDR_PHY_BASE + 0x000)
> > +#define DDR_PHY001 (DDR_PHY_BASE + 0x004)
> > +#define DDR_PHY002 (DDR_PHY_BASE + 0x008)
> > +#define DDR_PHY003 (DDR_PHY_BASE + 0x00C)
> > +#define DDR_PHY004 (DDR_PHY_BASE + 0x010)
> > +#define DDR_PHY005 (DDR_PHY_BASE + 0x014)
> > +#define DDR_PHY006 (DDR_PHY_BASE + 0x018)
> > +#define DDR_PHY007 (DDR_PHY_BASE + 0x01C)
> > +#define DDR_PHY008 (DDR_PHY_BASE + 0x020)
> > +#define DDR_PHY009 (DDR_PHY_BASE + 0x024)
> > +
> > +#define DDR_PHY010 (DDR_PHY_BASE + 0x028)
> > +#define DDR_PHY011 (DDR_PHY_BASE + 0x02C)
> > +#define DDR_PHY012 (DDR_PHY_BASE + 0x030)
> > +#define DDR_PHY013 (DDR_PHY_BASE + 0x034)
> > +#define DDR_PHY014 (DDR_PHY_BASE + 0x038)
> > +#define DDR_PHY015 (DDR_PHY_BASE + 0x03C)
> > +#define DDR_PHY016 (DDR_PHY_BASE + 0x040)
> > +#define DDR_PHY017 (DDR_PHY_BASE + 0x044)
> > +#define DDR_PHY018 (DDR_PHY_BASE + 0x048)
> > +#define DDR_PHY019 (DDR_PHY_BASE + 0x04C)
> > +
> > +#define DDR_PHY020 (DDR_PHY_BASE + 0x050)
> > +#define DDR_PHY021 (DDR_PHY_BASE + 0x054)
> > +#define DDR_PHY022 (DDR_PHY_BASE + 0x058)
> > +#define DDR_PHY023 (DDR_PHY_BASE + 0x05C)
> > +#define DDR_PHY024 (DDR_PHY_BASE + 0x060)
> > +#define DDR_PHY025 (DDR_PHY_BASE + 0x064)
> > +#define DDR_PHY026 (DDR_PHY_BASE + 0x068)
> > +#define DDR_PHY027 (DDR_PHY_BASE + 0x06C)
> > +#define DDR_PHY028 (DDR_PHY_BASE + 0x070)
> > +#define DDR_PHY029 (DDR_PHY_BASE + 0x074)
> > +
> > +#define DDR_PHY030 (DDR_PHY_BASE + 0x078)
> > +#define DDR_PHY031 (DDR_PHY_BASE + 0x07C)
> > +#define DDR_PHY032 (DDR_PHY_BASE + 0x080)
> > +#define DDR_PHY033 (DDR_PHY_BASE + 0x084)
> > +#define DDR_PHY034 (DDR_PHY_BASE + 0x088)
> > +#define DDR_PHY035 (DDR_PHY_BASE + 0x08C)
> > +#define DDR_PHY036 (DDR_PHY_BASE + 0x090)
> > +#define DDR_PHY037 (DDR_PHY_BASE + 0x094)
> > +#define DDR_PHY038 (DDR_PHY_BASE + 0x098)
> > +#define DDR_PHY039 (DDR_PHY_BASE + 0x09C)
> > +
> > +#define DDR_PHY040 (DDR_PHY_BASE + 0x0A0)
> > +#define DDR_PHY041 (DDR_PHY_BASE + 0x0A4)
> > +#define DDR_PHY042 (DDR_PHY_BASE + 0x0A8)
> > +#define DDR_PHY043 (DDR_PHY_BASE + 0x0AC)
> > +#define DDR_PHY044 (DDR_PHY_BASE + 0x0B0)
> > +#define DDR_PHY045 (DDR_PHY_BASE + 0x0B4)
> > +#define DDR_PHY046 (DDR_PHY_BASE + 0x0B8)
> > +#define DDR_PHY047 (DDR_PHY_BASE + 0x0BC)
> > +#define DDR_PHY048 (DDR_PHY_BASE + 0x0C0)
> > +#define DDR_PHY049 (DDR_PHY_BASE + 0x0C4)
> > +
> > +#define DDR_PHY050 (DDR_PHY_BASE + 0x0C8)
> > +#define DDR_PHY051 (DDR_PHY_BASE + 0x0CC)
> > +#define DDR_PHY052 (DDR_PHY_BASE + 0x0D0)
> > +#define DDR_PHY053 (DDR_PHY_BASE + 0x0D4)
> > +#define DDR_PHY054 (DDR_PHY_BASE + 0x0D8)
> > +#define DDR_PHY055 (DDR_PHY_BASE + 0x0DC)
> > +#define DDR_PHY056 (DDR_PHY_BASE + 0x0E0)
> > +#define DDR_PHY057 (DDR_PHY_BASE + 0x0E4)
> > +#define DDR_PHY058 (DDR_PHY_BASE + 0x0E8)
> > +#define DDR_PHY059 (DDR_PHY_BASE + 0x0EC)
> > +
> > +#define DDR_PHY060 (DDR_PHY_BASE + 0x0F0)
> > +#define DDR_PHY061 (DDR_PHY_BASE + 0x0F4)
> > +#define DDR_PHY062 (DDR_PHY_BASE + 0x0F8)
> > +#define DDR_PHY063 (DDR_PHY_BASE + 0x0FC)
> > +#define DDR_PHY064 (DDR_PHY_BASE + 0x100)
> > +#define DDR_PHY065 (DDR_PHY_BASE + 0x104)
> > +#define DDR_PHY066 (DDR_PHY_BASE + 0x108)
> > +#define DDR_PHY067 (DDR_PHY_BASE + 0x10C)
> > +#define DDR_PHY068 (DDR_PHY_BASE + 0x110)
> > +
> > +#endif /* __ASSEMBLER__*/
> > +
> > +#endif /* __ASM_ARCH_VYBRID_REGS_H__ */
> > diff --git a/arch/arm/include/asm/global_data.h
> b/arch/arm/include/asm/global_data.h
> > index 37ac0da..bb7ebc2 100644
> > --- a/arch/arm/include/asm/global_data.h
> > +++ b/arch/arm/include/asm/global_data.h
> > @@ -29,6 +29,9 @@ struct arch_global_data {
> > #if defined(CONFIG_FSL_ESDHC)
> > u32 sdhc_clk;
> > #endif
> > +#ifdef CONFIG_SYS_IPG
> > + unsigned long ipg_clk;
> > +#endif
> > #ifdef CONFIG_AT91FAMILY
> > /* "static data" needed by at91's clock.c */
> > unsigned long cpu_clk_rate_hz;
> > diff --git a/arch/arm/include/asm/mach-types.h
> b/arch/arm/include/asm/mach-types.h
> > index a676b6d..31d67bf 100644
> > --- a/arch/arm/include/asm/mach-types.h
> > +++ b/arch/arm/include/asm/mach-types.h
> > @@ -1107,6 +1107,10 @@ extern unsigned int __machine_arch_type;
> > #define MACH_TYPE_OMAP5_SEVM 3777
> > #define MACH_TYPE_ARMADILLO_800EVA 3863
> > #define MACH_TYPE_KZM9G 4140
> > +#define MACH_TYPE_VYBRID_VF7XX 4145
> > +#define MACH_TYPE_VYBRID_VF6XX 4146
> > +#define MACH_TYPE_VYBRID_VF5XX 4147
> > +#define MACH_TYPE_VYBRID_VF4XX 4148
> >
>
> No, we drop this. Set instead CONFIG_MACH_TYPE in your board
> configuration file.
[Alison Wang] Agree. I will set in board configuration file in the next version patches.
Thanks a lot!
Best Regards,
Alison Wang
More information about the U-Boot
mailing list