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
=====================================================================
next prev 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.