[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