[U-Boot] [PATCH v1 2/3] arm, at91: add Siemens board taurus (based on AT91SAM9G20)

Heiko Schocher hs at denx.de
Tue Oct 29 13:25:27 CET 2013


Hello Andreas,

Am 29.10.2013 10:43, schrieb Andreas Bießmann:
> Hi Heiko,
>
> some additional comments on top of Bo's.
>
> On 10/28/2013 06:24 AM, Bo Shen wrote:
>> Hi Heiko Schocher,
>>
>> Please add commit message.
>>
>> On 10/22/2013 13:51, Heiko Schocher wrote:
>>> Signed-off-by: Roger Meier<r.meier at siemens.com>
>>> Reviewed-by: Heiko Schocher<hs at denx.de>
>>> Cc: Andreas Bießmann<andreas.devel at googlemail.com>
>>> ---
>>>    board/siemens/taurus/Makefile |  38 ++++++++
>>>    board/siemens/taurus/taurus.c | 204
>>> ++++++++++++++++++++++++++++++++++++++++++
>>>    boards.cfg                    |   2 +
>>>    include/configs/taurus.h      | 163 +++++++++++++++++++++++++++++++++
>>>    4 files changed, 407 insertions(+)
>>>    create mode 100644 board/siemens/taurus/Makefile
>>>    create mode 100644 board/siemens/taurus/taurus.c
>>>    create mode 100644 include/configs/taurus.h
>>>
>>> diff --git a/board/siemens/taurus/Makefile
>>> b/board/siemens/taurus/Makefile
>>> new file mode 100644
>>> index 0000000..9c288b7
>>> --- /dev/null
>>> +++ b/board/siemens/taurus/Makefile
>>> @@ -0,0 +1,38 @@
>>> +#
>>> +# Makefile for Siemens TAURUS (AT91SAM9G20) based board
>>> +# (C) Copyright 2013 Siemens AG
>>> +#
>>> +# Based on:
>>> +# U-Boot file: board/atmel/at91sam9260ek/Makefile
>>> +#
>>> +# (C) Copyright 2003-2008
>>> +# Wolfgang Denk, DENX Software Engineering, wd at denx.de.
>>> +#
>>> +# (C) Copyright 2008
>>> +# Stelian Pop<stelian at popies.net>
>>> +# Lead Tech Design<www.leadtechdesign.com>
>>> +#
>>> +# SPDX-License-Identifier:    GPL-2.0+
>>> +#
>>> +
>>> +include $(TOPDIR)/config.mk
>>> +
>>> +LIB    = $(obj)lib$(BOARD).o
>>> +
>>> +COBJS-y    += taurus.o
>>> +
>>> +SRCS    := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
>>> +OBJS    := $(addprefix $(obj),$(COBJS-y))
>>> +SOBJS    := $(addprefix $(obj),$(SOBJS))
>>> +
>>> +$(LIB):    $(obj).depend $(OBJS) $(SOBJS)
>>> +    $(call cmd_link_o_target, $(OBJS) $(SOBJS))
>>> +
>>> +#########################################################################
>>>
>>> +
>>> +# defines $(obj).depend target
>>> +include $(SRCTREE)/rules.mk
>>> +
>>> +sinclude $(obj).depend
>>> +
>>> +#########################################################################
>>>
>>> diff --git a/board/siemens/taurus/taurus.c
>>> b/board/siemens/taurus/taurus.c
>>> new file mode 100644
>>> index 0000000..debc48e
>>> --- /dev/null
>>> +++ b/board/siemens/taurus/taurus.c
>>> @@ -0,0 +1,204 @@
>>> +/*
>>> + * Board functions for Siemens TAURUS (AT91SAM9G20) based boards
>>> + * (C) Copyright Siemens AG
>>> + *
>>> + * Based on:
>>> + * U-Boot file: board/atmel/at91sam9260ek/at91sam9260ek.c
>>> + *
>>> + * (C) Copyright 2007-2008
>>> + * Stelian Pop<stelian at popies.net>
>>> + * Lead Tech Design<www.leadtechdesign.com>
>>> + *
>>> + * SPDX-License-Identifier:    GPL-2.0+
>>> + */
>>> +
>>> +#include<common.h>
>>> +#include<asm/io.h>
>>> +#include<asm/arch/at91sam9260_matrix.h>
>>> +#include<asm/arch/at91sam9_smc.h>
>>> +#include<asm/arch/at91_common.h>
>>> +#include<asm/arch/at91_pmc.h>
>>> +#include<asm/arch/at91_rstc.h>
>>> +#include<asm/arch/gpio.h>
>>> +#include<asm/arch/at91sam9_sdramc.h>
>>> +#include<atmel_mci.h>
>>> +
>>> +#if defined(CONFIG_RESET_PHY_R)&&  defined(CONFIG_MACB)
>>> +# include<net.h>
>>> +#endif
>>> +#include<netdev.h>
>>> +
>>> +DECLARE_GLOBAL_DATA_PTR;
>>> +
>>> +/*
>>> -------------------------------------------------------------------------
>>> */
>>> +/*
>>> + * Miscelaneous platform dependent initialisations
>>> + */
>>
>> I think this comment no meaning here.
>>
>>> +#ifdef CONFIG_CMD_NAND
>>> +static void taurus_nand_hw_init(void)
>>> +{
>>> +    struct at91_smc *smc = (struct at91_smc *)ATMEL_BASE_SMC;
>>> +    struct at91_matrix *matrix = (struct at91_matrix
>>> *)ATMEL_BASE_MATRIX;
>>> +    unsigned long csa;
>>> +
>>> +    /* Assign CS3 to NAND/SmartMedia Interface */
>>> +    csa = readl(&matrix->ebicsa);
>>> +    csa |= AT91_MATRIX_CS3A_SMC_SMARTMEDIA;
>>> +    writel(csa,&matrix->ebicsa);
>>> +
>>> +    /* Configure SMC CS3 for NAND/SmartMedia */
>>> +    writel(AT91_SMC_SETUP_NWE(2) | AT91_SMC_SETUP_NCS_WR(0) |
>>> +           AT91_SMC_SETUP_NRD(2) | AT91_SMC_SETUP_NCS_RD(0),
>>> +&smc->cs[3].setup);
>>> +    writel(AT91_SMC_PULSE_NWE(4) | AT91_SMC_PULSE_NCS_WR(3) |
>>> +           AT91_SMC_PULSE_NRD(4) | AT91_SMC_PULSE_NCS_RD(3),
>>> +&smc->cs[3].pulse);
>>> +    writel(AT91_SMC_CYCLE_NWE(7) | AT91_SMC_CYCLE_NRD(7),
>>> +&smc->cs[3].cycle);
>>> +    writel(AT91_SMC_MODE_RM_NRD | AT91_SMC_MODE_WM_NWE |
>>> +           AT91_SMC_MODE_EXNW_DISABLE |
>>> +           AT91_SMC_MODE_DBW_8 |
>>> +           AT91_SMC_MODE_TDF_CYCLE(3),
>>> +&smc->cs[3].mode);
>>> +
>>> +    /* Configure RDY/BSY */
>>> +    at91_set_gpio_input(CONFIG_SYS_NAND_READY_PIN, 1);
>>> +
>>> +    /* Enable NandFlash */
>>> +    at91_set_gpio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1);
>>> +}
>>> +#endif
>>> +
>>> +#ifdef CONFIG_MACB
>>> +static void taurus_macb_hw_init(void)
>>> +{
>>> +    struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
>>> +    struct at91_port *pioa = (struct at91_port *)ATMEL_BASE_PIOA;
>>> +    struct at91_rstc *rstc = (struct at91_rstc *)ATMEL_BASE_RSTC;
>>> +    unsigned long erstl;
>>> +
>>> +    /* Enable EMAC clock */
>>> +    writel(1<<  ATMEL_ID_EMAC0,&pmc->pcer);
>>> +
>>> +    /*
>>> +     * Disable pull-up on:
>>> +     *    RXDV (PA17) =>  PHY normal mode (not Test mode)
>>> +     *    ERX0 (PA14) =>  PHY ADDR0
>>> +     *    ERX1 (PA15) =>  PHY ADDR1
>>> +     *    ERX2 (PA25) =>  PHY ADDR2
>>> +     *    ERX3 (PA26) =>  PHY ADDR3
>>> +     *    ECRS (PA28) =>  PHY ADDR4  =>  PHYADDR = 0x0
>>> +     *
>>> +     * PHY has internal pull-down
>>> +     */
>>> +    writel(pin_to_mask(AT91_PIN_PA14) |
>>> +        pin_to_mask(AT91_PIN_PA15) |
>>> +        pin_to_mask(AT91_PIN_PA17) |
>>> +        pin_to_mask(AT91_PIN_PA25) |
>>> +        pin_to_mask(AT91_PIN_PA26) |
>>> +        pin_to_mask(AT91_PIN_PA28),
>>> +&pioa->pudr);
>>
>> Call we use GPIO API here?
>
> Unfortunately there is no way to set multiple I/O in one go.
> Beside that this is more PIO API than GPIO API (same as the kernel side
> discussion about gpio vs pinmux). I would accept this her in that
> special case, preferably we could add some API to mux multiple pins in
> one go.

I used "at91_set_pio_pullup" in my new version for this ...

>>> +    /*
>>> +     * Need to reset PHY ?->  200us reset
>>> +     * Bug within Atmel CPU (undefined initial states on io-lines)!
>>> +     * Startup Ethernet Switch delayed so that hardstrap(Switch Config)
>>> +     * has defined state after cold start (do not break daisy chain!).
>>> +     */
>>> +    if ((readl(&rstc->sr)&  AT91_RSTC_RSTTYP) ==
>>> AT91_RSTC_RSTTYP_GENERAL)
>>> +        at91_set_gpio_output(AT91_PIN_PA25, 0);
>>> +
>>> +
>>> +    erstl = readl(&rstc->mr)&  AT91_RSTC_MR_ERSTL_MASK;
>>> +
>>> +    /* Need to reset PHY ->  500ms reset */
>>> +    writel(AT91_RSTC_KEY | AT91_RSTC_MR_ERSTL(13) |
>>> +        AT91_RSTC_MR_URSTEN,&rstc->mr);
>>> +
>>> +    writel(AT91_RSTC_KEY | AT91_RSTC_CR_EXTRST,&rstc->cr);
>>> +
>>> +    /* Wait for end hardware reset */
>>> +    while (!(readl(&rstc->sr)&  AT91_RSTC_SR_NRSTL))
>>> +        ;
>>
>> Add a timeout here.
>>
>>> +    /* Restore NRST value */
>>> +    writel(AT91_RSTC_KEY | erstl | AT91_RSTC_MR_URSTEN,&rstc->mr);
>>> +
>>> +    at91_set_gpio_input(AT91_PIN_PA25, 1);   /* ERST tri-state */
>>> +
>>> +    /* Re-enable pull-up */
>>> +    writel(pin_to_mask(AT91_PIN_PA14) |
>>> +        pin_to_mask(AT91_PIN_PA15) |
>>> +        pin_to_mask(AT91_PIN_PA17) |
>>> +        pin_to_mask(AT91_PIN_PA25) |
>>> +        pin_to_mask(AT91_PIN_PA26) |
>>> +        pin_to_mask(AT91_PIN_PA28),
>>> +&pioa->puer);
>>
>> Call we use GPIO API here?
>>
>>> +    /* Initialize EMAC=MACB hardware */
>>> +    at91_macb_hw_init();
>>> +}
>>> +#endif
>>> +
>>> +#ifdef CONFIG_GENERIC_ATMEL_MCI
>>> +int board_mmc_init(bd_t *bd)
>>> +{
>>> +    at91_mci_hw_init();
>>> +
>>> +    return atmel_mci_init((void *)ATMEL_BASE_MCI);
>>> +}
>>> +#endif
>>> +
>>> +int board_early_init_f(void)
>>> +{
>>> +    struct at91_pmc *pmc = (struct at91_pmc *)ATMEL_BASE_PMC;
>>> +
>>> +    /* Enable clocks for all PIOs */
>>> +    writel((1<<  ATMEL_ID_PIOA) | (1<<  ATMEL_ID_PIOB) |
>>> +        (1<<  ATMEL_ID_PIOC),
>>> +&pmc->pcer);
>
> Isn't there some API to do this?
> To answer myself, I think not. Each AT91 board has this piece of code
> copied in its board_early_init_f ... we should think about adding a
> generic function to do that for us.

Ok.

>>> +
>>> +    return 0;
>>> +}
>>> +
>>> +int board_init(void)
>>> +{
>>> +    /* Enable Ctrlc */
>>> +    console_init_f();
>>
>> This is can be removed.
>>
>>> +    /* arch number of board */
>>> +    gd->bd->bi_arch_number = CONFIG_MACH_TYPE;
>>
>> Move to board related configuration file.
>>
>>> +    /* adress of boot parameters */
>>> +    gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
>>> +
>>> +    at91_seriald_hw_init();
>>> +#ifdef CONFIG_CMD_NAND
>>> +    taurus_nand_hw_init();
>>> +#endif
>>> +#ifdef CONFIG_MACB
>>> +    taurus_macb_hw_init();
>>> +#endif
>>> +
>>> +    return 0;
>>> +}
>>> +
>>> +int dram_init(void)
>>> +{
>>> +    /* configure ram size based on sdram controller config registers */
>>> +    unsigned int sdram_cr_nc;
>>> +    sdram_cr_nc = readl(AT91_SDRAMC_CR)&  AT91_SDRAMC_NC;
>>> +    gd->ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE,
>>> +                (32<<  20)<<  sdram_cr_nc);
>>
>> Would it be possible the same NC, however different NR?
>
> Hasn't the get_ram_size() some feature to detect the real size
> implemented? Why detect the configured size before?

I use now get_ram_size() with the may ram size possible, so no need
for sdram_cr_nc anymore ...

>>> +    return 0;
>>> +}
>>> +
>>> +int board_eth_init(bd_t *bis)
>>> +{
>>> +    int rc = 0;
>>> +#ifdef CONFIG_MACB
>>> +    rc = macb_eth_initialize(0, (void *)ATMEL_BASE_EMAC0, 0x00);
>>> +#endif
>>> +    return rc;
>>> +}
>>> diff --git a/boards.cfg b/boards.cfg
>>> index aa2ee64..e693105 100644
>>> --- a/boards.cfg
>>> +++ b/boards.cfg
>>> @@ -139,6 +139,8 @@ Active  arm         arm926ejs      at91
>>> ronetix         pm9263
>>>    Active  arm         arm926ejs      at91        ronetix
>>> pm9g45              pm9g45
>>> pm9g45:AT91SAM9G45
>>> Ilko Iliev<iliev at ronetix.at>
>>>    Active  arm         arm926ejs      at91        taskit
>>> stamp9g20           portuxg20
>>> stamp9g20:AT91SAM9G20,PORTUXG20
>>> Markus Hubig<mhubig at imko.de>
>>>    Active  arm         arm926ejs      at91        taskit
>>> stamp9g20           stamp9g20
>>> stamp9g20:AT91SAM9G20
>>> Markus Hubig<mhubig at imko.de>
>>> +Active  arm         arm926ejs      at91        siemens
>>> taurus              axm
>>> taurus:AT91SAM9G20,MACH_TYPE=2068
>>> Heiko Schocher<hs at denx.de>
>>> +Active  arm         arm926ejs      at91        siemens
>>> taurus              taurus
>>> taurus:AT91SAM9G20,MACH_TYPE=2067
>>> Heiko Schocher<hs at denx.de>
>>
>> Why two boards here?
>>
>>>    Active  arm         arm926ejs      davinci     ait
>>> cam_enc_4xx         cam_enc_4xx
>>> cam_enc_4xx
>>> Heiko Schocher<hs at denx.de>
>>>    Active  arm         arm926ejs      davinci     Barix
>>> ipam390             ipam390
>>> -
>>> Heiko Schocher<hs at denx.de>
>>>    Active  arm         arm926ejs      davinci     davinci
>>> da8xxevm            da830evm
>>> -
>>> Nick Thompson<nick.thompson at gefanuc.com>
>>> diff --git a/include/configs/taurus.h b/include/configs/taurus.h
>>> new file mode 100644
>>> index 0000000..e4bbb63
>>> --- /dev/null
>>> +++ b/include/configs/taurus.h
>>> @@ -0,0 +1,163 @@
>>> +/*
>>> + * Common board functions for Siemens TAURUS (AT91SAM9G20) based boards
>>> + * (C) Copyright 2013 Siemens AG
>>> + *
>>> + * Based on:
>>> + * U-Boot file: include/configs/at91sam9260ek.h
>>> + *
>>> + * (C) Copyright 2007-2008
>>> + * Stelian Pop<stelian at popies.net>
>>> + * Lead Tech Design<www.leadtechdesign.com>
>>> + *
>>> + * SPDX-License-Identifier:    GPL-2.0+
>>> + */
>>> +
>>> +#ifndef __CONFIG_H
>>> +#define __CONFIG_H
>>> +
>>> +/*
>>> + * SoC must be defined first, before hardware.h is included.
>>> + * In this case SoC is defined in boards.cfg.
>>> + */
>>> +#include<asm/hardware.h>
>>> +
>>> +#define MACH_TYPE_TAURUS        2067
>>> +#define MACH_TYPE_AXM            2068
>>
>> These two type are the same board?
>
> Isn't the correct type defined by boards.cfg?

removed.

>>> +
>>> +/*
>>> + * Warning: changing CONFIG_SYS_TEXT_BASE requires
>>> + * adapting the initial boot program.
>>> + * Since the linker has to swallow that define, we must use a pure
>>> + * hex number here!
>>> + */
>>> +
>>> +
>
> Could you please remove the empty lines (at least one) here?

Yep, done.

>>> +#define CONFIG_SYS_TEXT_BASE        0x23f00000
>>
>> This address should be considered (if the memory size is 64MiB) as
>> u-boot is top down map, there is only 1MiB left.
>
> As discussed in the Calo USB-A9263 board, please prove that the address
> works in all cases (with the given setup in this file). IOW check if now
> code will be clobbered by relocate_code() and write it down in some
> comment. A reminder for later adoption in the configuration would also
> considered helpful ;)

Working on it (incl. replace at91bootstrap with U-Boot spl, will take some
time ...)

>>> +
>>> +/* ARM asynchronous clock */
>>> +#define CONFIG_SYS_AT91_SLOW_CLOCK    32768        /* slow clock xtal */
>>> +#define CONFIG_SYS_AT91_MAIN_CLOCK    18432000    /* main clock xtal */
>>> +#define CONFIG_SYS_HZ            1000
>>> +
>>> +/* Misc CPU related */
>>> +#define CONFIG_ARCH_CPU_INIT
>>> +#define CONFIG_CMDLINE_TAG        /* enable passing of ATAGs */
>>> +#define CONFIG_SETUP_MEMORY_TAGS
>>> +#define CONFIG_INITRD_TAG
>>> +#define CONFIG_SKIP_LOWLEVEL_INIT
>>> +#define CONFIG_BOARD_EARLY_INIT_F
>>> +#define CONFIG_DISPLAY_CPUINFO
>>> +
>>> +#define CONFIG_CMD_BOOTZ
>>> +#define CONFIG_OF_LIBFDT
>>> +
>>> +/* general purpose I/O */
>>> +#define CONFIG_ATMEL_LEGACY        /* required until (g)pio is fixed */
>>> +#define CONFIG_AT91_GPIO
>>> +#define CONFIG_AT91_GPIO_PULLUP    1    /* keep pullups on peripheral
>>> pins */
>>> +
>>> +/* serial console */
>>> +#define CONFIG_ATMEL_USART
>>> +#define CONFIG_USART_BASE        ATMEL_BASE_DBGU
>>> +#define    CONFIG_USART_ID            ATMEL_ID_SYS
>>
>> replace tab with black space.
>>
>>> +#define CONFIG_BAUDRATE            115200
>>> +
>>> +#define CONFIG_BOOTDELAY    3
>>> +
>>> +/*
>>> + * Command line configuration.
>>> + */
>>> +#include<config_cmd_default.h>
>>> +#undef CONFIG_CMD_BDI
>>> +#undef CONFIG_CMD_FPGA
>>> +#undef CONFIG_CMD_IMI
>>> +#undef CONFIG_CMD_IMLS
>>> +#undef CONFIG_CMD_LOADS
>>> +#undef CONFIG_CMD_SOURCE
>>> +
>>> +#define CONFIG_CMD_PING
>>> +#define CONFIG_CMD_DHCP
>>> +#define CONFIG_CMD_NAND
>>> +
>>> +/*
>>> + * SDRAM: 1 bank, min 32, max 128 MB
>>> + * Initialized before u-boot gets started.
>>> + */
>>> +#define CONFIG_NR_DRAM_BANKS        1
>>> +#define CONFIG_SYS_SDRAM_BASE        ATMEL_BASE_CS1
>>> +/*
>>> + * PHYS_SDRAM_SIZE is dynamically detected according to the
>>> + * "Number of Column Bits" set within the SDRAM Configuration
>>> + * register, see axm.c for further details
>
> Where is this axm.c located?

Removed comment, as ramsize gets detected now with get_ram_size()

>>> + */
>>> +
>>> +/*
>>> + * Initial stack pointer: 4k - GENERATED_GBL_DATA_SIZE in internal SRAM,
>>> + * leaving the correct space for initial global data structure above
>>> + * that address while providing maximum stack area below.
>>> + */
>>> +# define CONFIG_SYS_INIT_SP_ADDR \
>>> +    (ATMEL_BASE_SRAM1 + 0x1000 - GENERATED_GBL_DATA_SIZE)
>>> +
>>> +/* NAND flash */
>>> +#ifdef CONFIG_CMD_NAND
>>> +#define CONFIG_NAND_ATMEL
>>> +#define CONFIG_SYS_MAX_NAND_DEVICE    1
>>> +#define CONFIG_SYS_NAND_BASE        ATMEL_BASE_CS3
>>> +#define CONFIG_SYS_NAND_DBW_8
>>> +#define CONFIG_SYS_NAND_MASK_ALE    (1<<  21)
>>> +#define CONFIG_SYS_NAND_MASK_CLE    (1<<  22)
>>> +#define CONFIG_SYS_NAND_ENABLE_PIN    AT91_PIN_PC14
>>> +#define CONFIG_SYS_NAND_READY_PIN    AT91_PIN_PC13
>>> +#endif
>>> +
>>> +/* NOR flash - no real flash on this board */
>>> +#define CONFIG_SYS_NO_FLASH            1
>>> +
>>> +/* Ethernet */
>>> +#define CONFIG_MACB
>>> +#define CONFIG_RMII
>>> +
>>> +/* USB */
>>> +#if (CONFIG_MACH_TYPE == MACH_TYPE_TAURUS)
>
> Ah, got it .. forget the question at beginnign of file.

Hmm, removed this, and replaced with a BOARD_TAURS or BOARD_AXM
define.

>>> +#define CONFIG_USB_ATMEL
>>> +#define CONFIG_USB_OHCI_NEW        1
>>> +#define CONFIG_SYS_USB_OHCI_CPU_INIT        1
>>
>> discard the unnessacery "1"
>>
>>> +#define CONFIG_SYS_USB_OHCI_REGS_BASE        0x00500000
>>> +#define CONFIG_SYS_USB_OHCI_SLOT_NAME        "at91sam9260"
>>> +#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS    2
>>> +#define CONFIG_USB_STORAGE        1
>>> +#endif
>>> +
>>> +/* load address */
>>> +#define CONFIG_SYS_LOAD_ADDR            0x22000000
>>> +
>>> +/* bootstrap in spi flash , u-boot + env + linux in nandflash */
>>> +#define CONFIG_ENV_IS_IN_NAND
>>> +#define CONFIG_ENV_OFFSET        0x100000
>>> +#define CONFIG_ENV_OFFSET_REDUND    0x180000
>>> +#define CONFIG_ENV_SIZE        0x20000        /* 1 sector = 128 kB */
>>> +#define CONFIG_BOOTCOMMAND    "nand read 0x22000000 0x200000
>>> 0x300000; bootm"
>>> +#define CONFIG_BOOTARGS                            \
>>> +    "console=ttyS0,115200 earlyprintk "                \
>>> +    "mtdparts=atmel_nand:256k(bootstrap)ro,512k(uboot)ro,"        \
>>> +    "256k(env),256k(env_redundant),256k(spare),"            \
>>> +    "512k(dtb),6M(kernel)ro,-(rootfs) "                \
>
> Use mtdparts also in u-boot?

Try to find this out ...

bye,
Heiko
-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany


More information about the U-Boot mailing list