public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Stefano Babic <sbabic@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 5/5] MX5:MX53: add initial support for MX53EVK board
Date: Thu, 16 Dec 2010 14:19:46 +0100	[thread overview]
Message-ID: <4D0A11F2.3070106@denx.de> (raw)
In-Reply-To: <1292494665-25674-6-git-send-email-r64343@freescale.com>

On 12/16/2010 11:17 AM, Jason Liu wrote:
> Add initial support for MX53EVK board support.
> FEC, SD/MMC, UART, I2C, have been support.
> 
> diff --git a/arch/arm/cpu/armv7/u-boot.lds b/arch/arm/cpu/armv7/u-boot.lds
> index 5725c30..7b6ab66 100644
> --- a/arch/arm/cpu/armv7/u-boot.lds
> +++ b/arch/arm/cpu/armv7/u-boot.lds
> @@ -34,6 +34,7 @@ SECTIONS
>  	. = ALIGN(4);
>  	.text	:
>  	{
> +		*(.ivt)
>  		arch/arm/cpu/armv7/start.o	(.text)
>  		*(.text)
>  	}

We have already discussed this point, see my previous answer here:

	http://marc.info/?l=u-boot&m=127793013695282&w=2

The solution in u-boot is *not* to link statically the IMX header to the
u-boot.bin, but to generate a u-boot.imx image with a configuration
file. This solution is already provided for the i.MX51 processor (same
family), and you should go on this way, modifying tools/imximage.c for
your needs, if required. This solution was previously discussed and
accepted on the ML and it is compatible with other processors from
different manufactures (kirchwood, see also u-boot.kwb).

As already answered by Albert and Wolfgang, the header must not be part
of u-boot.bin.

> +SOBJS	:= ivt.o

This should be removed, and a imximage.cfg file should be written.

> +plugin_start:
> +	/* Save the return address and the function arguments */
> +	push {r0-r3, lr}
> +
> +	ldr r0, =ROM_SI_REV
> +	ldr r1, [r0]
> +
> +	cmp r1, #0x20
> +
> +	/* IOMUX Setup */
> +	ldr r0, =0x53fa8500
> +	moveq r1, #0x00180000
> +	movne r1, #0x00380000
> +	mov r2, #0x00380000
> +	add r2, r2, #0x40
> +	add r3, r1, #0x40
> +	mov r4, #0x00200000
> +
> +	str r1, [r0, #0x54]
> +	str r2, [r0, #0x58]
> +	str r1, [r0, #0x60]
> +	str r3, [r0, #0x64]
> +	str r2, [r0, #0x68]
> +
> +	streq r1, [r0, #0x70]
> +	strne r4, [r0, #0x70]
> +	str r1, [r0, #0x74]
> +	streq r1, [r0, #0x78]
> +	strne r4, [r0, #0x78]
> +	str r2, [r0, #0x7c]
> +	str r3, [r0, #0x80]
> +	str r1, [r0, #0x84]
> +	str r1, [r0, #0x88]
> +	str r2, [r0, #0x90]
> +	str r1, [r0, #0x94]
> +
> +	ldr r0, =0x53fa86f0
> +	str r1, [r0, #0x0]
> +	mov r2, #0x00000200
> +	str r2, [r0, #0x4]
> +	mov r2, #0x00000000
> +	str r2, [r0, #0xc]
> +
> +	ldr r0, =0x53fa8700
> +	str r2, [r0, #0x14]
> +	str r1, [r0, #0x18]
> +	str r1, [r0, #0x1c]
> +	str r1, [r0, #0x20]
> +
> +	moveq r2, #0x02000000
> +	movne r2, #0x06000000
> +
> +	str r2, [r0, #0x24]
> +	str r1, [r0, #0x28]
> +	str r1, [r0, #0x2c]
> +
> +	/* Initialize DDR2 memory - Hynix H5PS2G83AFR */
> +	ldr r0, =ESDCTL_BASE_ADDR
> +
> +	ldreq r1, =0x31333530
> +	ldrne r1, =0x2b2f3031
> +	str r1, [r0, #0x088]
> +
> +	ldreq r1, =0x4a474a44
> +	ldrne r1, =0x40363333
> +	str r1, [r0, #0x090]
> +
> +	/* add 3 logic unit of delay to sdclk  */
> +	ldr r1, =0x00000f00
> +	str r1, [r0, #0x098]
> +
> +	ldr r1, =0x00000800
> +	str r1, [r0, #0x0F8]
> +
> +	ldreq r1, =0x02490241
> +	ldrne r1, =0x01310132
> +	str r1, [r0, #0x07c]
> +
> +	ldreq r1, =0x01710171
> +	ldrne r1, =0x0133014b
> +	str r1, [r0, #0x080]
> +
> +	/* Enable bank interleaving, RALAT = 0x4, DDR2_EN = 1 */
> +	ldr r1, =0x00001710
> +	str r1, [r0, #0x018]
> +
> +	ldr r1, =0xc4110000
> +	str r1, [r0, #0x00]
> +
> +	ldr r1, =0x4d5122d2
> +	str r1, [r0, #0x0C]
> +
> +	ldr r1, =0x92d18a22
> +	str r1, [r0, #0x10]
> +
> +	ldr r1, =0x00c70092
> +	str r1, [r0, #0x14]
> +
> +	ldr r1, =0x000026d2
> +	str r1, [r0, #0x2C]
> +
> +	ldr r1, =0x009f000e
> +	str r1, [r0, #0x30]
> +
> +	ldr r1, =0x12272000
> +	str r1, [r0, #0x08]
> +
> +	ldr r1, =0x00030012
> +	str r1, [r0, #0x04]
> +
> +	ldr r1, =0x04008010
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x00008032
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x00008033
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x00008031
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x0b5280b0
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x04008010
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x00008020
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x00008020
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x0a528030
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x03c68031
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x00468031
> +	str r1, [r0, #0x1C]
> +
> +	/* Even though Rev B does not have DDR on CSD1, keep these
> +	 * mode register initialization sequences for future uses since
> +	 * it does not hurt to keep them
> +	 */
> +	ldr r1, =0x04008018
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x0000803a
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x0000803b
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x00008039
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x0b528138
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x04008018
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x00008028
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x00008028
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x0a528038
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x03c68039
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x00468039
> +	str r1, [r0, #0x1C]
> +
> +	ldr r1, =0x00005800
> +	str r1, [r0, #0x20]
> +
> +	ldr r1, =0x00033337
> +	str r1, [r0, #0x58]
> +
> +	ldr r1, =0x00000000
> +	str r1, [r0, #0x1C]
> +

Why do we need to write these registers in assembly ? Why cannot we move
them into board_init or board_early_init_f ? And again, should these
values described better in imximage.cfg ?

> diff --git a/board/freescale/mx53evk/mx53evk.c b/board/freescale/mx53evk/mx53evk.c
> new file mode 100755
> index 0000000..ff6bfb2
> --- /dev/null
> +++ b/board/freescale/mx53evk/mx53evk.c
> @@ -0,0 +1,412 @@
> +/*
> + * Copyright (C) 2007, Guennadi Liakhovetski <lg@denx.de>
> + *
> + * (C) Copyright 2009-2010 Freescale Semiconductor, Inc.
> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.

It seems to me that you derived this file from mx51evk.c, but you copied
the header with copyrights from another (MX31, maybe) file.

> +#ifdef CONFIG_I2C_MXC
> +static void setup_i2c(unsigned int module_base)

I think it is better to enumerate the i2c controller as done in manual
as with the physical address. Anyway, I do not see yet any released
manual for this processor on Freescale's site, so I cannot be more precise.

> +void power_init(void)
> +{
> +	unsigned char buf[4] = { 0 };
> +	struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)MXC_CCM_BASE;
> +
> +	i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
> +
> +	/* Set core voltage VDDGP to 1.05V for 800MHZ */
> +	buf[0] = 0x45;
> +	buf[1] = 0x4a;
> +	buf[2] = 0x52;

Please remove all fixed constants in the file and replaced them with
named constants, defined in a header file. Check vision2.c as reference.
This board uses the MC13892 PMIC controller, and ./include/mc13892.h
contains all required defines.

> +	if (i2c_write(0x8, 24, 1, buf, 3))
> +		return;

Ditto. The same globally.

> +	if (is_soc_rev(CHIP_REV_2_0) == 0) {

Please add some comments describing why depending on the processor
revision we should to manage the pmic in a different way.

> +int board_mmc_getcd(u8 *cd, struct mmc *mmc)
> +{
> +	struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
> +
> +	if (cfg->esdhc_base == MMC_SDHC1_BASE_ADDR)
> +		*cd = readl(GPIO3_BASE_ADDR) & 0x2000;

Please change this. There is mxc_get_gpio() and mxc_set_gpio() accessors.

> +int board_init(void)
> +{
> +	system_rev = get_cpu_rev();

I think we can get rid of system_rev. It is not used in this function
and you can call get_cpu_rev() directly in checkboard() when the value
is really needed.

> +#ifdef BOARD_LATE_INIT
> +int board_late_init(void)
> +{
> +#ifdef CONFIG_I2C_MXC

Is it the board working if the pmic is not configured ? As I remember
from mx51evk, the network did not work if the PMIC via SPI was not
configured. If this is the case even for mx53evk, setting CONFIG_I2C_MXC
is a must, else a lot of thing cannot work. Then I would prefer to
remove these #ifdef and producing an error if it is not set at the
beginning of the file.

> +int checkboard(void)
> +{
> +	puts("Board: MX53EVK [");
> +
> +	switch (__REG(SRC_BASE_ADDR + 0x8)) {

Again, there is a "src" structure for i.MX51. If it is not correct for
i.MX53, you have to adapt it in imx-regs.h, but you cannot access
directly to registers. Please use always the correct structure or define
newer ones if they do not exist.

> +/*
> + * Disabled for now due to build problems under Debian and a significant
> + * increase in the final file size: 144260 vs. 109536 Bytes.
> + */

I see the same comment in mx51evk.h, but does it make sense ?

> +/*
> + * I2C Configs
> + */
> +#define CONFIG_CMD_I2C          1
> +#define CONFIG_HARD_I2C         1
> +#define CONFIG_I2C_MXC          1
> +#define CONFIG_SYS_I2C_PORT             I2C2_BASE_ADDR

As stated before: port means an enumeration value (0,1,..N), and it is
set to a physical address.

Best regards,
Stefano Babic

-- 
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: office at denx.de
=====================================================================

  parent reply	other threads:[~2010-12-16 13:19 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-16 10:17 [U-Boot] [PATCH 0/5] Add support for Freescale MX53 Jason Liu
2010-12-16 10:17 ` [U-Boot] [PATCH 1/5] MX5: Add initial support for MX53 Jason Liu
2010-12-16 12:27   ` Wolfgang Denk
2010-12-17  3:20     ` Jason Liu
2010-12-16 13:34   ` Stefano Babic
2010-12-17  3:18     ` Jason Liu
2010-12-16 10:17 ` [U-Boot] [PATCH 2/5] serial_mxc: add support for MX53 processor Jason Liu
2010-12-16 10:17 ` [U-Boot] [PATCH 3/5] fec_mxc: " Jason Liu
2010-12-16 10:17 ` [U-Boot] [PATCH 4/5] mxc_i2c: " Jason Liu
2010-12-16 10:37   ` Heiko Schocher
2010-12-17  3:28     ` Jason Liu
2010-12-16 10:17 ` [U-Boot] [PATCH 5/5] MX5:MX53: add initial support for MX53EVK board Jason Liu
2010-12-16 10:48   ` Albert ARIBAUD
2010-12-16 12:23     ` Wolfgang Denk
2010-12-16 13:19   ` Stefano Babic [this message]
2010-12-17  3:05     ` Jason Liu
2010-12-17  5:41       ` Wolfgang Denk
2010-12-17 10:20       ` Albert ARIBAUD
2010-12-17 13:05       ` Stefano Babic
2010-12-20  5:19         ` Jason Liu
2010-12-20  6:52           ` John Rigby
2010-12-22 13:40             ` Jason Liu
2010-12-27 10:03             ` Stefano Babic
2010-12-20  6:52           ` Albert ARIBAUD
2010-12-16 23:04   ` Wolfgang Denk
2010-12-17  3:04     ` Jason Liu
2010-12-17  5:36       ` Wolfgang Denk
2010-12-16 12:25 ` [U-Boot] [PATCH 0/5] Add support for Freescale MX53 Wolfgang Denk

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4D0A11F2.3070106@denx.de \
    --to=sbabic@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox