[U-Boot] [PATCH] add support for EMK TOP7000 CPU module

Reinhard Meyer reinhard.meyer at emk-elektronik.de
Sat Jun 5 20:16:51 CEST 2010


Ben Warren schrieb:
> Hello Reinhard,
> 
> On Sat, Jun 5, 2010 at 3:41 AM, Reinhard Meyer (-VC) <
> reinhard.meyer at emk-elektronik.de> wrote:
> 
>> Add support for EMK TOP7000 CPU module
>>
>> Specifics:
>>
>> 1) create subdir board/emk/top7000 and files in it
>> 2) create include/configs/top7000.h
>> 3) update board/emk/common/vpd.c
>> 4) add call to misc_init_r() to arch/avr32/lib/board.c
>> 5) create arch/avr32/include/asm/unaligned.h to
>>   fix zlib.c compilation problem
>> 6) update Makefile, MAINTAINERS, MAKEALL
>>
>> Signed-off-by: Reinhard Meyer <info at emk-elektronik.de>
>>
>> ---
>>  MAINTAINERS                        |    6 +-
>>  MAKEALL                            |    3 +-
>>  Makefile                           |    3 +
>>  arch/avr32/include/asm/unaligned.h |    1 +
>>  arch/avr32/lib/board.c             |    5 +
>>  board/emk/common/vpd.c             |   56 +++++++++-
>>  board/emk/top7000/Makefile         |   41 +++++++
>>  board/emk/top7000/config.mk        |    3 +
>>  board/emk/top7000/top7000.c        |  169 ++++++++++++++++++++++++++++
>>  board/emk/top7000/u-boot.lds       |   72 ++++++++++++
>>  include/configs/top7000.h          |  216
>> ++++++++++++++++++++++++++++++++++++
>>  11 files changed, 570 insertions(+), 5 deletions(-)
>>  create mode 100644 arch/avr32/include/asm/unaligned.h
>>  create mode 100644 board/emk/top7000/Makefile
>>  create mode 100644 board/emk/top7000/config.mk
>>  create mode 100644 board/emk/top7000/top7000.c
>>  create mode 100644 board/emk/top7000/u-boot.lds
>>  create mode 100644 include/configs/top7000.h
>>
>> diff --git a/MAINTAINERS b/MAINTAINERS
>> index 7a13d28..a361be1 100644
>> --- a/MAINTAINERS
>> +++ b/MAINTAINERS
>> @@ -311,7 +311,7 @@ Andrea "llandre" Marson <andrea.marson at dave-tech.it>
>>
>>        PPChameleonEVB  PPC405EP
>>
>> -Reinhard Meyer <r.meyer at emk-elektronik.de>
>> +Reinhard Meyer <reinhard.meyer at emk-elektronik.de>
>>
>>        TOP860          MPC860T
>>        TOP5200         MPC5200
>> @@ -919,6 +919,10 @@ Julien May <julien.may at miromico.ch>
>>
>>        HAMMERHEAD              AT32AP7000
>>
>> +Reinhard Meyer <reinhard.meyer at emk-elektronik.de>
>> +
>> +       TOP7000         AT32AP7000
>> +
>>  Haavard Skinnemoen <haavard.skinnemoen at atmel.com>
>>
>>        ATSTK1000       AT32AP7xxx
>> diff --git a/MAKEALL b/MAKEALL
>> index 2527352..3a80041 100755
>> --- a/MAKEALL
>> +++ b/MAKEALL
>> @@ -873,7 +873,8 @@ LIST_avr32="                \
>>        atngw100        \
>>        favr-32-ezkit   \
>>        hammerhead      \
>> -       mimc200         \
>> +       mimc200         \
>> +       top7000         \
>>  "
>>
>>  #########################################################################
>> diff --git a/Makefile b/Makefile
>> index c26e491..e57a4ca 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -3549,6 +3549,9 @@ hammerhead_config :       unconfig
>>  mimc200_config         :       unconfig
>>        @$(MKCONFIG) $(@:_config=) avr32 at32ap mimc200 mimc at32ap700x
>>
>> +top7000_config :       unconfig
>> +       @$(MKCONFIG) $(@:_config=) avr32 at32ap top7000 emk at32ap700x
>> +
>>  #========================================================================
>>  # SH3 (SuperH)
>>  #========================================================================
>> diff --git a/arch/avr32/include/asm/unaligned.h
>> b/arch/avr32/include/asm/unaligned.h
>> new file mode 100644
>> index 0000000..6cecbbb
>> --- /dev/null
>> +++ b/arch/avr32/include/asm/unaligned.h
>> @@ -0,0 +1 @@
>> +#include <asm-generic/unaligned.h>
>> diff --git a/arch/avr32/lib/board.c b/arch/avr32/lib/board.c
>> index 917ed6c..6be5ab0
>> --- a/arch/avr32/lib/board.c
>> +++ b/arch/avr32/lib/board.c
>> @@ -337,6 +337,11 @@ void board_init_r(gd_t *new_gd, ulong dest_addr)
>>        jumptable_init();
>>        console_init_r();
>>
>> +#if defined(CONFIG_MISC_INIT_R)
>> +       /* miscellaneous platform dependent initialisations */
>> +       misc_init_r();
>> +#endif
>> +
>>        s = getenv("loadaddr");
>>        if (s)
>>                load_addr = simple_strtoul(s, NULL, 16);
>> diff --git a/board/emk/common/vpd.c b/board/emk/common/vpd.c
>> index c2af219..a6c456b
>> --- a/board/emk/common/vpd.c
>> +++ b/board/emk/common/vpd.c
>> @@ -1,6 +1,6 @@
>>  /*
>> - * (C) Copyright 2003
>> - * Reinhard Meyer, EMK Elektronik GmbH, r.meyer at emk-elektronik.de
>> + * (C) Copyright 2003-2010
>> + * EMK Elektronik GmbH & Co. KG, reinhard.meyer at emk-elektronik.de
>>  *
>>  * See file CREDITS for list of people who contributed to this
>>  * project.
>> @@ -22,7 +22,8 @@
>>  */
>>
>>  #include <common.h>
>> -
>> +#include <command.h>
>> +
>>
>>  /*****************************************************************************
>>  * read "factory" part of EEPROM and set some environment variables
>>
>>  *****************************************************************************/
>> @@ -70,6 +71,10 @@ void read_factory_r (void)
>>                /* search for our specific entry */
>>                if (!strncmp ((char *) buf, "[RLA/lan/Ethernet] ", 19)) {
>>                        setenv ("ethaddr", (char *)(buf + 19));
>> +#if defined(CONFIG_TOP7000)
>> +               } else if (!strncmp ((char *) buf, "[RLA/lan2/Ethernet] ",
>> 20)) {
>> +                       setenv ("eth1addr", (char *)(buf + 20));
>> +#endif
>>                } else if (!strncmp ((char *) buf, "[BOARD/SERIAL] ", 15)) {
>>                        setenv ("serial#", (char *)(buf + 15));
>>                } else if (!strncmp ((char *) buf, "[BOARD/TYPE] ", 13)) {
>> @@ -77,3 +82,48 @@ void read_factory_r (void)
>>                }
>>        }
>>  }
>> +
>> +#if defined(CONFIG_TOP7000)
>> +int do_vpd (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
>> +{
>> +       uchar buf[512];
>> +       uchar *p;
>> +       int i;
>> +       u_int addr;
>> +
>> +       if (argc != 3)
>> +               return 1;
>> +
>> +       p = buf+2;
>> +       i = simple_strtoul(argv[1], NULL, 10);
>> +       if (i<1 || i>32766)
>> +               return 1;
>> +
>> +       addr=(i-1)*2;
>> +
>> +       p+=sprintf((char*)p,
>> +               "[RLA/lan/Ethernet] 00:80:d9:0d:%02x:%02x\n",
>> +               addr/256, addr%256);
>> +       addr++;
>> +       p+=sprintf((char*)p,
>> +               "[RLA/lan2/Ethernet] 00:80:d9:0d:%02x:%02x\n",
>> +               addr/256, addr%256);
>>
> These appear to be public MAC addresses.  Are these ones that your company
> owns and you're guaranteeing to be unique?
> <snip>
>
That is our address range.
 
>> +
>> +#ifdef CONFIG_CMD_NET
>> +int board_eth_init(bd_t *bi)
>> +{
>> +       macb_eth_initialize(0,
>> +               (void *)MACB0_BASE, bi->bi_phy_id[0]);
>> +       macb_eth_initialize(1,
>> +               (void *)MACB1_BASE, bi->bi_phy_id[1]);
>> +       return 0;
>>
> Please return the number of controllers that were successfully initialized.
> <snip>
1) in net/eth.c:
	/* Try board-specific initialization first.  If it fails or isn't
	 * present, try the cpu-specific initialization */
	if (board_eth_init(bis) < 0)
		cpu_eth_init(bis);
that means >=0 OK, <0 error code....
2) most other ports do something like
int board_eth_init(bd_t *bi)
{
	return macb_eth_initialize(0, (void *)MACB0_BASE, bi->bi_phy_id[0]);
}
where macb_eth_initialize() returns 0 on success...
3) no port seems to return a positive number >0
IF in the future it is required that the function returns the number of interfaces
EVERY port has to be modified :)
> regards,
> Ben

Best Regards, Reinhard
-------------- next part --------------
A non-text attachment was scrubbed...
Name: reinhard_meyer.vcf
Type: text/x-vcard
Size: 370 bytes
Desc: not available
Url : http://lists.denx.de/pipermail/u-boot/attachments/20100605/83621fd1/attachment.vcf 


More information about the U-Boot mailing list