[PATCH 2/3] ARM OMAP AM33XX: create new ARCH for AM33xx

Jean-Christophe PLAGNIOL-VILLARD plagnioj at jcrosoft.com
Thu Sep 20 14:38:35 EDT 2012


On 16:02 Thu 20 Sep     , Teresa Gámez wrote:
> Created ARCH for AM33xx boards as second stage bootloader.
> This includes:
> - Added dmtimer0
> - Created basic header files
> - Added MMC support for ARCH_AM33XX
> - Added reset function
> 
> Signed-off-by: Teresa Gámez <t.gamez at phytec.de>
> ---
>  arch/arm/mach-omap/Kconfig                       |   11 +++
>  arch/arm/mach-omap/Makefile                      |    2 +
>  arch/arm/mach-omap/am33xx_generic.c              |   29 +++++++++
>  arch/arm/mach-omap/dmtimer0.c                    |   72 ++++++++++++++++++++++
>  arch/arm/mach-omap/gpio.c                        |   29 +++++----
>  arch/arm/mach-omap/include/mach/am33xx-clock.h   |   25 ++++++++
>  arch/arm/mach-omap/include/mach/am33xx-silicon.h |   51 +++++++++++++++
>  arch/arm/mach-omap/include/mach/clocks.h         |    7 ++
>  arch/arm/mach-omap/include/mach/omap3-clock.h    |    3 -
>  arch/arm/mach-omap/include/mach/silicon.h        |    3 +
>  arch/arm/mach-omap/include/mach/timers.h         |   22 +++++++
>  drivers/mci/Kconfig                              |    2 +-
>  12 files changed, 238 insertions(+), 18 deletions(-)
>  create mode 100644 arch/arm/mach-omap/am33xx_generic.c
>  create mode 100644 arch/arm/mach-omap/dmtimer0.c
>  create mode 100644 arch/arm/mach-omap/include/mach/am33xx-clock.h
>  create mode 100644 arch/arm/mach-omap/include/mach/am33xx-silicon.h
> 
> diff --git a/arch/arm/mach-omap/Kconfig b/arch/arm/mach-omap/Kconfig
> index d735284..b3f121f 100644
> --- a/arch/arm/mach-omap/Kconfig
> +++ b/arch/arm/mach-omap/Kconfig
> @@ -50,6 +50,14 @@ config ARCH_OMAP4
>  	help
>  	  Say Y here if you are using Texas Instrument's OMAP4 based platform
>  
> +config ARCH_AM33XX
> +	bool "AM33xx"
> +	select CPU_V7
> +	select GENERIC_GPIO
> +	select OMAP_CLOCK_SOURCE_DMTIMER0
> +	help
> +	  Say Y here if you are using Texas Instrument's AM33xx based platform
> +
>  endchoice
>  
>  ### Generic Clock configurations to be enabled by Mach - invisible to enable.
> @@ -69,6 +77,9 @@ config OMAP_CLOCK_ALL
>  config OMAP_CLOCK_SOURCE_S32K
>  	bool
>  
> +config OMAP_CLOCK_SOURCE_DMTIMER0
> +	bool
> +
>  config OMAP3_CLOCK_CONFIG
>  	prompt "Clock Configuration"
>  	bool
> diff --git a/arch/arm/mach-omap/Makefile b/arch/arm/mach-omap/Makefile
> index f087f4b..0f03043 100644
> --- a/arch/arm/mach-omap/Makefile
> +++ b/arch/arm/mach-omap/Makefile
> @@ -22,10 +22,12 @@
>  obj-$(CONFIG_ARCH_OMAP) += syslib.o
>  pbl-$(CONFIG_ARCH_OMAP) += syslib.o
>  obj-$(CONFIG_OMAP_CLOCK_SOURCE_S32K) += s32k_clksource.o
> +obj-$(CONFIG_OMAP_CLOCK_SOURCE_DMTIMER0) += dmtimer0.o
>  obj-$(CONFIG_ARCH_OMAP3) += omap3_core.o omap3_generic.o auxcr.o
>  pbl-$(CONFIG_ARCH_OMAP3) += omap3_core.o omap3_generic.o auxcr.o
>  obj-$(CONFIG_ARCH_OMAP4) += omap4_generic.o omap4_clock.o
>  pbl-$(CONFIG_ARCH_OMAP4) += omap4_generic.o omap4_clock.o
> +obj-$(CONFIG_ARCH_AM33XX) += am33xx_generic.o
>  obj-$(CONFIG_OMAP3_CLOCK_CONFIG) += omap3_clock.o
>  obj-$(CONFIG_OMAP_GPMC) += gpmc.o devices-gpmc-nand.o
>  obj-$(CONFIG_SHELL_NONE) += xload.o
> diff --git a/arch/arm/mach-omap/am33xx_generic.c b/arch/arm/mach-omap/am33xx_generic.c
> new file mode 100644
> index 0000000..ba08773
> --- /dev/null
> +++ b/arch/arm/mach-omap/am33xx_generic.c
> @@ -0,0 +1,29 @@
> +/*
> + * (C) Copyright 2012 Teresa Gámez, Phytec Messtechnik GmbH
> + *
> + * 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 <io.h>
> +#include <mach/silicon.h>
> +#include <mach/clocks.h>
> +
> +void __noreturn reset_cpu(unsigned long addr)
> +{
> +	writel(PRM_RSTCTRL_RESET, PRM_REG(RSTCTRL));
> +
> +	while (1);
> +}
> diff --git a/arch/arm/mach-omap/dmtimer0.c b/arch/arm/mach-omap/dmtimer0.c
> new file mode 100644
> index 0000000..b8ec43f
> --- /dev/null
> +++ b/arch/arm/mach-omap/dmtimer0.c
> @@ -0,0 +1,72 @@
> +/**
> + * @file
> + * @brief Support DMTimer0 counter
> + *
> + * FileName: arch/arm/mach-omap/dmtimer0.c
> + */
> +/*
> + * This File is based on arch/arm/mach-omap/s32k_clksource.c
> + * (C) Copyright 2008
> + * Texas Instruments, <www.ti.com>
> + * Nishanth Menon <x0nishan at ti.com>
> + *
> + * (C) Copyright 2012 Teresa Gámez, Phytec Messtechnik GmbH
> + *
> + * 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 <clock.h>
> +#include <init.h>
> +#include <io.h>
> +#include <mach/silicon.h>
> +#include <mach/timers.h>
> +
> +#define CLK_RC32K	32768
> +
> +/**
> + * @brief Provide a simple counter read
> + *
> + * @return DMTimer0 counter
> + */
> +static uint64_t dmtimer0_read(void)
> +{
> +	return readl(AM33XX_DMTIMER0_BASE + TCRR);
> +}
> +
> +static struct clocksource dmtimer0_cs = {
> +	.read	= dmtimer0_read,
> +	.mask	= CLOCKSOURCE_MASK(32),
> +	.shift	= 10,
> +};
> +
> +/**
> + * @brief Initialize the Clock
> + *
> + * Enable dmtimer0.
> + *
> + * @return result of @ref init_clock
> + */
> +static int dmtimer0_init(void)
> +{
> +	dmtimer0_cs.mult = clocksource_hz2mult(CLK_RC32K, dmtimer0_cs.shift);
> +	/* Enable counter */
> +	writel(0x3, AM33XX_DMTIMER0_BASE + TCLR);
> +
> +	return init_clock(&dmtimer0_cs);
> +}
> +
> +/* Run me at boot time */
> +core_initcall(dmtimer0_init);
> diff --git a/arch/arm/mach-omap/gpio.c b/arch/arm/mach-omap/gpio.c
> index 142cf52..a908941 100644
> --- a/arch/arm/mach-omap/gpio.c
> +++ b/arch/arm/mach-omap/gpio.c
> @@ -40,14 +40,13 @@
>  #include <io.h>
>  #include <errno.h>
>  
> -#ifdef CONFIG_ARCH_OMAP3
> -
>  #define OMAP_GPIO_OE		0x0034
>  #define OMAP_GPIO_DATAIN	0x0038
>  #define OMAP_GPIO_DATAOUT	0x003c
>  #define OMAP_GPIO_CLEARDATAOUT	0x0090
>  #define OMAP_GPIO_SETDATAOUT	0x0094
>  
> +#ifdef CONFIG_ARCH_OMAP3
>  static void __iomem *gpio_bank[] = {
>  	(void *)0x48310000,
>  	(void *)0x49050000,
IOMEM

and I do not like this idea to add move array switch to gpiolib make more
sense
> @@ -59,20 +58,22 @@ static void __iomem *gpio_bank[] = {
>  #endif
>  
>  #ifdef CONFIG_ARCH_OMAP4
> +static void __iomem *gpio_bank[] = {
> +	(void *)0x4a310100,
> +	(void *)0x48055100,
> +	(void *)0x48057100,
> +	(void *)0x48059100,
> +	(void *)0x4805b100,
> +	(void *)0x4805d100,
> +};
> +#endif
>  
> -#define OMAP_GPIO_OE		0x0134
> -#define OMAP_GPIO_DATAIN	0x0138
> -#define OMAP_GPIO_DATAOUT	0x013c
> -#define OMAP_GPIO_CLEARDATAOUT	0x0190
> -#define OMAP_GPIO_SETDATAOUT	0x0194
> -
> +#ifdef CONFIG_ARCH_AM33XX
>  static void __iomem *gpio_bank[] = {
> -	(void *)0x4a310000,
> -	(void *)0x48055000,
> -	(void *)0x48057000,
> -	(void *)0x48059000,
> -	(void *)0x4805b000,
> -	(void *)0x4805d000,
> +	(void *)0x44e07100,
> +	(void *)0x4804c100,
> +	(void *)0x481ac100,
> +	(void *)0x481ae100,
>  };
>  #endif
> +#endif
> diff --git a/arch/arm/mach-omap/include/mach/clocks.h b/arch/arm/mach-omap/include/mach/clocks.h
> index 3efa057..70dc91f 100644
> --- a/arch/arm/mach-omap/include/mach/clocks.h
> +++ b/arch/arm/mach-omap/include/mach/clocks.h
> @@ -41,6 +41,9 @@
>  #define S26M		26000000
>  #define S38_4M		38400000
>  
> +#define CM_REG(REGNAME)		(OMAP_CM_BASE + CM_##REGNAME)
> +#define PRM_REG(REGNAME)	(OMAP_PRM_BASE + PRM_##REGNAME)
any cleanup need to be done in a speperate patch
> +
>  #ifdef CONFIG_ARCH_OMAP3
>  #include <mach/omap3-clock.h>
>  #endif
> @@ -48,4 +51,8 @@
>  #include <mach/omap4-clock.h>
>  #endif
>  
> +#ifdef CONFIG_ARCH_AM33XX
> +#include <mach/am33xx-clock.h>
> +#endif
> +
>  #endif /* __OMAP_CLOCKS_H_ */
> diff --git a/arch/arm/mach-omap/include/mach/omap3-clock.h b/arch/arm/mach-omap/include/mach/omap3-clock.h
> index 67f2673..8a73bff 100644
> --- a/arch/arm/mach-omap/include/mach/omap3-clock.h
> +++ b/arch/arm/mach-omap/include/mach/omap3-clock.h
> @@ -31,8 +31,6 @@
>  #define _OMAP343X_CLOCKS_H_
>  
>  /** CM Clock Regs Wrapper */
> -#define CM_REG(REGNAME)	(OMAP_CM_BASE + CM_##REGNAME)
> -
>  #define CM_FCLKEN_IVA2		0X0000
>  #define CM_CLKEN_PLL_IVA2	0X0004
>  #define CM_IDLEST_PLL_IVA2	0X0024
> @@ -81,7 +79,6 @@
>  #define CM_CLKSTCTRL_USBH	0x1448
>  
>  /** PRM Clock Regs */
> -#define PRM_REG(REGNAME)	(OMAP_PRM_BASE + PRM_##REGNAME)
>  #define PRM_CLKSEL		0x0D40
>  #define PRM_RSTCTRL		0x1250
>  #define PRM_CLKSRC_CTRL		0x1270
> diff --git a/arch/arm/mach-omap/include/mach/silicon.h b/arch/arm/mach-omap/include/mach/silicon.h
> index 638d6c4..6c085dc 100644
> --- a/arch/arm/mach-omap/include/mach/silicon.h
> +++ b/arch/arm/mach-omap/include/mach/silicon.h
> @@ -28,6 +28,9 @@
>  #ifdef CONFIG_ARCH_OMAP4
>  #include <mach/omap4-silicon.h>
>  #endif
> +#ifdef CONFIG_ARCH_AM33XX
> +#include <mach/am33xx-silicon.h>
> +#endif
>  
>  /* If Architecture specific init functions are present */
>  #ifndef __ASSEMBLY__
> diff --git a/arch/arm/mach-omap/include/mach/timers.h b/arch/arm/mach-omap/include/mach/timers.h
> index a938243..c987fbc 100644
> --- a/arch/arm/mach-omap/include/mach/timers.h
> +++ b/arch/arm/mach-omap/include/mach/timers.h
> @@ -34,6 +34,7 @@
>  #ifndef __ASM_ARCH_GPT_H
>  #define __ASM_ARCH_GPT_H
>  
> +#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4)
>  /** General Purpose timer regs offsets (32 bit regs) */
>  #define TIDR			0x0      /* r */
>  #define TIOCP_CFG		0x10     /* rw */
> @@ -56,5 +57,26 @@
>  /** Sync 32Khz Timer registers */
>  #define S32K_CR			(OMAP_32KTIMER_BASE + 0x10)
>  #define S32K_FREQUENCY		32768
> +#endif
> +
> +#if defined(CONFIG_ARCH_AM33XX)
> +#define TIDR			0x0
> +#define TIOCP_CFG		0x10
> +#define IRQ_EOI			0x20
> +#define IRQSTATUS_RAW		0x24
> +#define IRQSTATUS		0x28
> +#define IRQSTATUS_SET		0x2c
> +#define IRQSTATUS_CLR		0x30
> +#define IRQWAKEEN		0x34
> +#define TCLR			0x38
> +#define TCRR			0x3C
> +#define TLDR			0x40
> +#define TTGR			0x44
> +#define TWPS			0x48
> +#define TMAR			0x4C
> +#define TCAR1			0x50
> +#define TSICR			0x54
> +#define TCAR2			0x58
> +#endif
it's a new timer create a new header
>  
>  #endif /*__ASM_ARCH_GPT_H */
> diff --git a/drivers/mci/Kconfig b/drivers/mci/Kconfig
> index b1a678e..fb95c1e 100644
> --- a/drivers/mci/Kconfig
> +++ b/drivers/mci/Kconfig
> @@ -67,7 +67,7 @@ config MCI_IMX_ESDHC_PIO
>  
>  config MCI_OMAP_HSMMC
>  	bool "OMAP HSMMC"
> -	depends on ARCH_OMAP4 || ARCH_OMAP3
> +	depends on ARCH_OMAP4 || ARCH_OMAP3 || ARCH_AM33XX
>  	help
>  	  Enable this entry to add support to read and write SD cards on
>  	  both OMAP3 and OMAP4 based systems.
> -- 
> 1.7.0.4
> 
> 
> _______________________________________________
> barebox mailing list
> barebox at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox



More information about the barebox mailing list