[U-Boot] [PATCH 01/10] mx27: basic cpu support
Wolfgang Denk
wd at denx.de
Wed May 6 23:16:04 CEST 2009
Dear Ilya,
in message <1241634633-13917-2-git-send-email-yanok at emcraft.com> you wrote:
> This patch adds generic code to support Freescale's i.MX27 SoCs.
...
> +static ulong clk_in_26m(void)
> +{
> + if (CSCR & CSCR_OSC26M_DIV1P5) {
> + /* divide by 1.5 */
> + return 26000000 / 1.5;
We definitely do not allow any FP use in U-Boot.
> + } else {
> + /* divide by 1 */
> + return 26000000;
divide by 1 ???
> +#if defined(CONFIG_DISPLAY_CPUINFO)
> +int print_cpuinfo (void)
> +{
> + printf("CPU: Freescale i.MX27 at %llu MHz\n",
> + lldiv(imx_get_mpllclk(), 1000000));
Please use strmhz() to print frequencies.
> + printf("\n");
No need to waste another function call - just add this to the previous
format element.
> +void imx_gpio_mode(int gpio_mode)
> +{
> + unsigned int pin = gpio_mode & GPIO_PIN_MASK;
> + unsigned int port = (gpio_mode & GPIO_PORT_MASK) >> GPIO_PORT_SHIFT;
> + unsigned int ocr = (gpio_mode & GPIO_OCR_MASK) >> GPIO_OCR_SHIFT;
> + unsigned int aout = (gpio_mode & GPIO_AOUT_MASK) >> GPIO_AOUT_SHIFT;
> + unsigned int bout = (gpio_mode & GPIO_BOUT_MASK) >> GPIO_BOUT_SHIFT;
> + unsigned int tmp;
> +
> + /* Pullup enable */
> + if(gpio_mode & GPIO_PUEN)
> + PUEN(port) |= (1 << pin);
> + else
> + PUEN(port) &= ~(1 << pin);
This smells as if these were pointer accesses using register offsets
instead of I/O accessor calls using C structs?
You probably want to use the respective clrbits*() / setbits*() macros
here?
...
> +void reset_cpu (ulong ignored)
> +{
> + /* Disable watchdog and set Time-Out field to 0 */
> + WCR = 0x00000000;
> +
> + /* Write Service Sequence */
> + WSR = 0x00005555;
> + WSR = 0x0000AAAA;
Again: please use I/O accessor calls; also for the rest of the file
and the other patches.
...
> diff --git a/include/asm-arm/arch-mx27/imx-regs.h b/include/asm-arm/arch-mx27/imx-regs.h
> new file mode 100644
> index 0000000..a856f7e
...
> +# ifndef __ASSEMBLY__
> +# define __REG(x) (*((volatile u32 *)(x)))
> +# define __REG16(x) (*(volatile u16 *)(x))
> +# define __REG2(x,y) (*(volatile u32 *)((u32)&__REG(x) + (y)))
> +
> +extern void imx_gpio_mode (int gpio_mode);
> +
> +# else
> +# define __REG(x) (x)
> +# define __REG16(x) (x)
> +# define __REG2(x,y) ((x)+(y))
> +#endif
> +
> +#define IMX_IO_BASE 0x10000000
> +
> +#define IMX_AIPI1_BASE (0x00000 + IMX_IO_BASE)
> +#define IMX_WDT_BASE (0x02000 + IMX_IO_BASE)
> +#define IMX_TIM1_BASE (0x03000 + IMX_IO_BASE)
> +#define IMX_TIM2_BASE (0x04000 + IMX_IO_BASE)
> +#define IMX_TIM3_BASE (0x05000 + IMX_IO_BASE)
> +#define IMX_UART1_BASE (0x0a000 + IMX_IO_BASE)
> +#define IMX_UART2_BASE (0x0b000 + IMX_IO_BASE)
> +#define IMX_UART3_BASE (0x0c000 + IMX_IO_BASE)
> +#define IMX_UART4_BASE (0x0d000 + IMX_IO_BASE)
> +#define IMX_I2C1_BASE (0x12000 + IMX_IO_BASE)
> +#define IMX_GPIO_BASE (0x15000 + IMX_IO_BASE)
> +#define IMX_TIM4_BASE (0x19000 + IMX_IO_BASE)
> +#define IMX_TIM5_BASE (0x1a000 + IMX_IO_BASE)
> +#define IMX_UART5_BASE (0x1b000 + IMX_IO_BASE)
> +#define IMX_UART6_BASE (0x1c000 + IMX_IO_BASE)
> +#define IMX_I2C2_BASE (0x1D000 + IMX_IO_BASE)
> +#define IMX_TIM6_BASE (0x1f000 + IMX_IO_BASE)
> +#define IMX_AIPI2_BASE (0x20000 + IMX_IO_BASE)
> +#define IMX_PLL_BASE (0x27000 + IMX_IO_BASE)
> +#define IMX_SYSTEM_CTL_BASE (0x27800 + IMX_IO_BASE)
> +#define IMX_IIM_BASE (0x28000 + IMX_IO_BASE)
> +#define IMX_FEC_BASE (0x2b000 + IMX_IO_BASE)
NAK. We do not accept device I/O through pointers; please use C
structs to describe the hardware and use I/O accessor calls.
> +/* AIPI */
> +#define AIPI1_PSR0 __REG(IMX_AIPI1_BASE + 0x00)
> +#define AIPI1_PSR1 __REG(IMX_AIPI1_BASE + 0x04)
> +#define AIPI2_PSR0 __REG(IMX_AIPI2_BASE + 0x00)
> +#define AIPI2_PSR1 __REG(IMX_AIPI2_BASE + 0x04)
> +
> +/* System Control */
> +#define FMCR __REG(IMX_SYSTEM_CTL_BASE + 0x14)
> +#define GPCR __REG(IMX_SYSTEM_CTL_BASE + 0x18)
> +#define WBCR __REG(IMX_SYSTEM_CTL_BASE + 0x1C)
NAK, for this and all similar code.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
It is better to marry than to burn.
- Bible ``I Corinthians'' ch. 7, v. 9
More information about the U-Boot
mailing list