From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jean-Christophe PLAGNIOL-VILLARD Date: Mon, 31 Mar 2008 12:18:56 +0200 Subject: [U-Boot-Users] [PATCH] ixp: Support for NSLU2 In-Reply-To: <1206593446135-git-send-email-rod@whitby.id.au> References: <1206593446135-git-send-email-rod@whitby.id.au> Message-ID: <20080331101856.GA11802@game.jcrosoft.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de > + > +#include > + > +/*----------------------------------------------------------------------- > + * Linksys NSLU2 RedBoot Trailer Block: > + * > + * If we boot from RAM on a system which still contains the original > + * RedBoot bootloader, check if the trailer signature exists and save > + * the MAC address information it contains. > + * > + * 0x3ffb0: six byte binary mac address > + * 0x3fff8: ' sErCoMm' > + */ > + > +void load_sernum_ethaddr (void) > +{ > + unsigned char *hwi; > + unsigned char ethaddr[19]; /* 6 x "%02X", + 1 */ > + unsigned short ih, ie; > + > + /* Check for signature at the end of RedBoot partition */ > + /* If RedBoot has been replaced, this will not exist. */ > + hwi = (unsigned char *)(CFG_FLASH_BASE + CFG_SERCOMM_OFFSET); > + if (strncmp((char *)hwi, " sErCoMm", 8)) { > + return; > + } > + > + hwi = (unsigned char *)(CFG_FLASH_BASE + CFG_ETHADDR_OFFSET); > + ie = 0; > + > + /* copy MAC address */ > + for (ih = 0; ih < 6; ih++) { > + sprintf((char *)ðaddr[ie], "%02X:", hwi[ih]); > + ie += 3; > + } > + ethaddr[--ie] = '\0'; > + > + /* set ethaddr if not yet defined */ > + if (getenv("ethaddr") == NULL) { > + setenv ((char *)"ethaddr", (char *)ethaddr); > + } read the mac address only if the getenv return NULL /* set ethaddr if not yet defined */ if (getenv("ethaddr") == NULL) { hwi = (unsigned char *)(CFG_FLASH_BASE + CFG_ETHADDR_OFFSET); ie = 0; /* copy MAC address */ for (ih = 0; ih < 6; ih++) { sprintf((char *)ðaddr[ie], "%02X:", hwi[ih]); ie += 3; } ethaddr[--ie] = '\0'; setenv ((char *)"ethaddr", (char *)ethaddr); } > Index: u-boot/board/nslu2/nslu2.c > =================================================================== > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > +++ u-boot/board/nslu2/nslu2.c 2008-03-27 15:10:31.000000000 +1030 > @@ -0,0 +1,96 @@ > +/* > + * (C) Copyright 2008 > + * Rod Whitby > + * > + * (C) Copyright 2006 > + * Stefan Roese, DENX Software Engineering, sr at denx.de. > + * > + * (C) Copyright 2002 > + * Kyle Harris, Nexus Technologies, Inc. kharris at nexus-tech.net > + * > + * (C) Copyright 2002 > + * Sysgo Real-Time Solutions, GmbH > + * Marius Groeger > + * > + * See file CREDITS for list of people who contributed to this > + * project. > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License as > + * published by the Free Software Foundation; either version 2 of > + * the License, or (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, > + * MA 02111-1307 USA > + */ > + > +#include > +#include > +#include > +#include > + > +DECLARE_GLOBAL_DATA_PTR; > + > +/* > + * Miscelaneous platform dependent initialisations > + */ > +int board_init (void) > +{ > + /* arch number of NSLU2 */ > + gd->bd->bi_arch_number = MACH_TYPE_NSLU2; > + > + /* adress of boot parameters */ > + gd->bd->bi_boot_params = 0x00000100; > + > + /* > + * Setup GPIO's for PCI interrupts > + */ > + GPIO_OUTPUT_DISABLE(CFG_GPIO_PCI_INTA_N); > + GPIO_INT_ACT_LOW_SET(CFG_GPIO_PCI_INTA_N); > + GPIO_OUTPUT_DISABLE(CFG_GPIO_PCI_INTB_N); > + GPIO_INT_ACT_LOW_SET(CFG_GPIO_PCI_INTB_N); > + GPIO_OUTPUT_DISABLE(CFG_GPIO_PCI_INTC_N); > + GPIO_INT_ACT_LOW_SET(CFG_GPIO_PCI_INTC_N); > + > + /* > + * Setup GPIO's for 33MHz clock output > + */ > + *IXP425_GPIO_GPCLKR = 0x01FF01FF; > + GPIO_OUTPUT_ENABLE(CFG_GPIO_PCI_CLK); > + GPIO_OUTPUT_ENABLE(CFG_GPIO_EXTBUS_CLK); > + > + return 0; > +} > + > +/* > + * Check Board Identity > + */ > +int checkboard(void) > +{ > + char *s = getenv("serial#"); > + > + puts("Board: NSLU2 - Linksys NSLU2"); > + > + if (s != NULL) { > + puts(", serial# "); > + puts(s); > + } > + putc('\n'); > + > + return (0); please choose a style return 0; or return (0); > +} > + > +int dram_init (void) > +{ > + gd->bd->bi_dram[0].start = PHYS_SDRAM_1; > + gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; > + > + return (0); > +} > +#define CONFIG_ENV_OVERWRITE 1 /* Allow changing of the MAC address */ > + > +/* > + * Default Environment > + */ > +#define CONFIG_EXTRA_ENV_SETTINGS \ > + "hostname=nslu2\0" \ > + "setncip=setenv autoload no;dhcp;setenv autoload;" \ > + "setenv ncip ${serverip}\0" \ > + "setnc=setenv stdin nc;setenv stdout nc;setenv stderr nc\0" \ > + "setser=setenv stdin serial;setenv stdout serial;" \ > + "setenv stderr serial\0" \ > + "bootfile=/tftpboot/nslu2/uImage\0" \ > + "rootpath=/tftpboot/nslu2/rootfs\0" \ > + "nfsargs=setenv bootargs root=/dev/nfs rw " \ > + "nfsroot=${serverip}:${rootpath}\0" \ > + "addip=setenv bootargs ${bootargs} " \ > + "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}" \ > + ":${hostname}:eth0:off panic=1\0" \ > + "addtty=setenv bootargs ${bootargs} console=ttyS0,${baudrate}\0"\ > + "net_nfs=tftp 10000 ${bootfile};run nfsargs addip addtty;" \ > + "bootm\0" \ > + "" > + > +/* > + * Configuration Settings > + */ > +#define CFG_LONGHELP 1 /* undef to save memory */ > +#define CFG_PROMPT "=> " /* Monitor Command Prompt */ > + > +#define CFG_CBSIZE 256 /* Console I/O Buffer Size */ > +#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ > +#define CFG_MAXARGS 16 /* max number of command args */ > +#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ > + > +#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 } > + > +#define CFG_MEMTEST_START 0x00400000 /* memtest works on */ > +#define CFG_MEMTEST_END 0x00800000 /* 4 ... 8 MB in DRAM */ > + > +#define CFG_LOAD_ADDR 0x00010000 /* default load address */ > + > +#define CFG_MONITOR_BASE CFG_FLASH_BASE > +#define CFG_MONITOR_LEN (256 << 10) /* Reserve 256 kB for Monitor */ > + > +#define CFG_MALLOC_LEN (256 << 10) > + > +#define CFG_FLASH_BASE 0x50000000 > + > +#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */ > +#define CFG_MAX_FLASH_SECT 128 /* max number of sectors on one chip */ > + > +#define CFG_FLASH_CFI 1 /* The flash is CFI compatible */ > +#define CFG_FLASH_CFI_DRIVER 1 /* Use common CFI driver */ > + > +#define CFG_FLASH_CFI_WIDTH FLASH_CFI_16BIT /* no byte writes on IXP4xx */ > + > +#define CFG_FLASH_EMPTY_INFO 1 /* print 'E' for empty sector on flinfo */ > +#define CFG_FLASH_USE_BUFFER_WRITE 1 /* use buffered writes (20x faster) */ > + > +#define CFG_ENV_IS_IN_FLASH 1 > +#define CFG_ENV_OFFSET 0x40000 /* use the sysconfig partition */ > +#define CFG_ENV_SECT_SIZE 0x20000 /* size of one complete sector */ > +#define CFG_ENV_SIZE 0x2000 /* Total Size of Environment Sector */ > + > +#define CFG_ETHADDR_OFFSET 0x3FFB0 /* Location of MAC address in flash */ > +#define CFG_SERCOMM_OFFSET 0x3FFF8 /* Location of " sErCoMm" signature */ > + > +#define CFG_CACHELINE_SIZE 32 > + > +#define CFG_HZ 33000000 /* NSLU2 has a 33.000 MHz crystal */ > + > +#define CONFIG_STACKSIZE (128*1024) /* regular stack */ > + > +#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */ > + > +/* If possible add the HUSH support and the completion support. Best Regards, J.