From 4231ce1f090b9e16973b4d8baa05c6fcf03b627e Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Mon, 16 May 2011 23:22:15 +0200 Subject: [PATCH] lyrtech: Commit lyrtechs changes to the git repository. Rebaselined for the master of u-boot. --- arch/arm/include/asm/mach-types.h | 15 +++ board/davinci/common/misc.c | 37 ++++++ board/davinci/femtobts/Makefile | 55 +++++++++ board/davinci/femtobts/board_init.S | 32 +++++ board/davinci/femtobts/config.mk | 22 ++++ board/davinci/femtobts/femtobts.c | 95 +++++++++++++++ boards.cfg | 2 +- include/configs/davinci_femtobts.h | 180 ++++++++++++++++++++++++++++ tools/gdb/remote.h | 1 + 9 files changed, 438 insertions(+), 1 deletion(-) create mode 100644 board/davinci/femtobts/Makefile create mode 100644 board/davinci/femtobts/board_init.S create mode 100644 board/davinci/femtobts/config.mk create mode 100644 board/davinci/femtobts/femtobts.c create mode 100644 include/configs/davinci_femtobts.h diff --git a/arch/arm/include/asm/mach-types.h b/arch/arm/include/asm/mach-types.h index a1fd03a1c1..e3e733b1ec 100644 --- a/arch/arm/include/asm/mach-types.h +++ b/arch/arm/include/asm/mach-types.h @@ -3312,6 +3312,8 @@ extern unsigned int __machine_arch_type; #define MACH_TYPE_T5388P 3336 #define MACH_TYPE_DINGO 3337 #define MACH_TYPE_GOFLEXHOME 3338 +#define MACH_TYPE_FEMTOBTS 3000 + #ifdef CONFIG_ARCH_EBSA110 # ifdef machine_arch_type @@ -42913,6 +42915,19 @@ extern unsigned int __machine_arch_type; # define machine_is_goflexhome() (0) #endif +#ifdef CONFIG_MACH_FEMTOBTS +# ifdef machine_arch_type +# undef machine_arch_type +# define machine_arch_type __machine_arch_type +# else +# define machine_arch_type MACH_TYPE_FEMTOBTS +# endif +# define machine_is_femtobts() (machine_arch_type == MACH_TYPE_FEMTOBTS) +#else +# define machine_is_femtobts() (0) +#endif + + /* * These have not yet been registered */ diff --git a/board/davinci/common/misc.c b/board/davinci/common/misc.c index 2bfdf23bed..1d3971d1e3 100644 --- a/board/davinci/common/misc.c +++ b/board/davinci/common/misc.c @@ -77,6 +77,43 @@ err: return 0; } +/* Write ethernet MAC address to EEPROM for DVEVM compatible boards. + * Returns 1 if successfull, 0 otherwise. + */ +int dvevm_write_mac_address(char *ethaddr) +{ +#ifdef CONFIG_SYS_I2C_EEPROM_ADDR + int i; + char *end; + u_int8_t env_enetaddr[6]; + + /* Convert MAC address to numbers */ + for (i = 0; i < 6; i++) { + env_enetaddr[i] = ethaddr ? simple_strtoul(ethaddr, &end, 16) : 0; + if (ethaddr) + ethaddr = (*end) ? end+1 : end; + } + + /* Check that MAC address is valid. */ + if (!is_valid_ether_addr(env_enetaddr)) + goto err; + + /* Write MAC address. */ + if (i2c_write(CONFIG_SYS_I2C_EEPROM_ADDR, 0x7F00, CONFIG_SYS_I2C_EEPROM_ADDR_LEN, + (uint8_t *) &env_enetaddr[0], 6)) + goto i2cerr; + + return 1; /* Found */ + +i2cerr: + printf("Write to EEPROM @ 0x%02x failed\n", CONFIG_SYS_I2C_EEPROM_ADDR); +err: +#endif /* CONFIG_SYS_I2C_EEPROM_ADDR */ + + return 0; +} + + /* * Set the mii mode as MII or RMII */ diff --git a/board/davinci/femtobts/Makefile b/board/davinci/femtobts/Makefile new file mode 100644 index 0000000000..2b10ef8e9d --- /dev/null +++ b/board/davinci/femtobts/Makefile @@ -0,0 +1,55 @@ +# +# Copyright (C) 2009 Lyrtech RD Inc. +# +# Based on dvevm/config.mk, original copyrights follow: +# (C) Copyright 2000, 2001, 2002 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# Copyright (C) 2007 Sergey Kubushyn +# +# 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 $(TOPDIR)/config.mk + +LIB = $(obj)lib$(BOARD).o + +COBJS := $(BOARD).o +SOBJS := board_init.o + +SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS := $(addprefix $(obj),$(COBJS)) +SOBJS := $(addprefix $(obj),$(SOBJS)) + +$(LIB): $(obj).depend $(OBJS) $(SOBJS) + $(call cmd_link_o_target, $(OBJS) $(SOBJS)) + +clean: + rm -f $(SOBJS) $(OBJS) + +distclean: clean + rm -f $(LIB) core *.bak $(obj).depend + +######################################################################### +# This is for $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/davinci/femtobts/board_init.S b/board/davinci/femtobts/board_init.S new file mode 100644 index 0000000000..5fdfe4224a --- /dev/null +++ b/board/davinci/femtobts/board_init.S @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2009 Lyrtech RD Inc. + * + * Based on dvevm/board_init.S, original copyright follows: + * Copyright (C) 2007 Sergey Kubushyn + * + * Board-specific low level initialization code. Called at the very end + * of cpu/arm926ejs/davinci/lowlevel_init.S. Just returns if there is no + * initialization required. + * + * 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 + +.globl dv_board_init +dv_board_init: + + mov pc, lr diff --git a/board/davinci/femtobts/config.mk b/board/davinci/femtobts/config.mk new file mode 100644 index 0000000000..fa5a3d72d8 --- /dev/null +++ b/board/davinci/femtobts/config.mk @@ -0,0 +1,22 @@ +# +# Copyright (C) 2009 Lyrtech RD Inc. +# +# Based on dvevm/config.mk, original copyrights follow: +# (C) Copyright 2002 +# Gary Jennejohn, DENX Software Engineering, +# David Mueller, ELSOFT AG, +# +# (C) Copyright 2003 +# Texas Instruments, +# Swaminathan +# +# Copyright (C) 2007 Sergey Kubushyn + + +# Lyrtech Inc. FemtoBts board (ARM926EJS) cpu +# +# FemtoBts board has 1 bank of 128 MB DDR RAM +# Physical Address: +# 8000'0000 to 8800'0000 +# +CONFIG_SYS_TEXT_BASE = 0x84000000 diff --git a/board/davinci/femtobts/femtobts.c b/board/davinci/femtobts/femtobts.c new file mode 100644 index 0000000000..8fbe49473f --- /dev/null +++ b/board/davinci/femtobts/femtobts.c @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2009 Lyrtech RD Inc. + * + * Based on dvevm/dvevm.c, original copyright follows: + * Copyright (C) 2007 Sergey Kubushyn + * + * Parts are shamelessly stolen from various TI sources, original copyright + * follows: + * ----------------------------------------------------------------- + * + * Copyright (C) 2004 Texas Instruments. + * + * ---------------------------------------------------------------------------- + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * ---------------------------------------------------------------------------- + */ + +#include +#include +#include +#include + +#define DAVINCI_AWCCR (0x01E00004) /* EMIF-A async wait cycle config register. */ +#define DAVINCI_AWCCR_VAL (0x000000FF) /* EMIF-A async wait cycle config register value. */ +#define DAVINCI_A1CR (0x01E00010) /* EMIF-A CS2 config register. */ +#define DAVINCI_A1CR_VAL (0x44502280) /* EMIF-A CS2 value for NAND. */ +#define DAVINCI_A2CR (0x01E00014) /* EMIF-A CS3 config register. */ +#define DAVINCI_A2CR_VAL (0x00430491) /* EMIF-A CS3 value for FPGA. */ + +DECLARE_GLOBAL_DATA_PTR; + +int board_init(void) +{ + /* arch number of the board */ + gd->bd->bi_arch_number = MACH_TYPE_FEMTOBTS; + + /* address of boot parameters */ + gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR; + + /* Configure pins */ + REG(PINMUX0) = 0x80000c1f; + REG(PINMUX1) = 0x00050183; + + /* Configure AEMIF AWCCR */ + REG(DAVINCI_AWCCR) = DAVINCI_AWCCR_VAL; + + /* Configure AEMIF CS2 (nand) */ + REG(DAVINCI_A1CR) = DAVINCI_A1CR_VAL; + + /* Configure AEMIF CS3 (fpga) */ + REG(DAVINCI_A2CR) = DAVINCI_A2CR_VAL; + + davinci_errata_workarounds(); + + /* Power on required peripherals */ + lpsc_on(DAVINCI_LPSC_GPIO); + +#if !defined(CONFIG_SYS_USE_DSPLINK) + /* Powerup the DSP */ + dsp_on(); +#endif /* CONFIG_SYS_USE_DSPLINK */ + + davinci_enable_uart0(); + davinci_enable_emac(); + davinci_enable_i2c(); + + lpsc_on(DAVINCI_LPSC_TIMER1); + timer_init(); + + return(0); +} + +int misc_init_r(void) +{ + uint8_t eeprom_enetaddr[6]; + + /* Read Ethernet MAC address from EEPROM if available. */ + if (dvevm_read_mac_address(eeprom_enetaddr)) + davinci_sync_env_enetaddr(eeprom_enetaddr); + + return(0); +} + diff --git a/boards.cfg b/boards.cfg index 9f2b11870e..b46206a37a 100644 --- a/boards.cfg +++ b/boards.cfg @@ -102,8 +102,8 @@ davinci_dm355evm arm arm926ejs dm355evm davinci davinci_dm355leopard arm arm926ejs dm355leopard davinci davinci davinci_dm365evm arm arm926ejs dm365evm davinci davinci davinci_dm6467evm arm arm926ejs dm6467evm davinci davinci -davinci_dvevm arm arm926ejs dvevm davinci davinci davinci_schmoogie arm arm926ejs schmoogie davinci davinci +davinci_femtobts arm arm926ejs femtobts davinci davinci davinci_sffsdr arm arm926ejs sffsdr davinci davinci davinci_sonata arm arm926ejs sonata davinci davinci suen3 arm arm926ejs km_arm keymile kirkwood diff --git a/include/configs/davinci_femtobts.h b/include/configs/davinci_femtobts.h new file mode 100644 index 0000000000..2eeb85b379 --- /dev/null +++ b/include/configs/davinci_femtobts.h @@ -0,0 +1,180 @@ +/* + * Copyright (C) 2009 Lyrtech RD Inc. + * + * Based on dvevm/dvevm.c, original copyright follows: + * Copyright (C) 2007 Sergey Kubushyn + * + * 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 + */ + +#ifndef __CONFIG_H +#define __CONFIG_H +#include +/*=======*/ +/* Board */ +/*=======*/ +#define FEMTOBTS +#define CONFIG_DISPLAY_CPUINFO +/*===================*/ +/* SoC Configuration */ +/*===================*/ +#define CONFIG_ARM926EJS /* arm926ejs CPU core */ +#define CONFIG_SYS_TIMERBASE 0x01c21400 /* use timer 0 */ +#define CONFIG_SYS_HZ_CLOCK 27000000 /* Timer Input clock freq */ +#define CONFIG_SYS_HZ 1000 +#define CONFIG_SOC_DM644X +/*====================*/ +/* EEPROM definitions */ +/*====================*/ +#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2 +#define CONFIG_SYS_I2C_EEPROM_ADDR 0x50 +#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 6 +#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 20 +/*=============*/ +/* Memory Info */ +/*=============*/ +#define CONFIG_SYS_MALLOC_LEN (0x10000 + 256*1024) /* malloc() len */ +#define CONFIG_SYS_MEMTEST_START 0x80000000 /* memtest start address */ +#define CONFIG_SYS_MEMTEST_END 0x81000000 /* 16MB RAM test */ +#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */ +#define CONFIG_STACKSIZE (256*1024) /* regular stack */ +#define PHYS_SDRAM_1 0x80000000 /* DDR Start */ +#define PHYS_SDRAM_1_SIZE 0x08000000 /* DDR size 128MB */ +#define DDR_4BANKS /* 4-bank DDR2 (128MB) */ +/*====================*/ +/* Serial Driver info */ +/*====================*/ +#define CONFIG_SYS_NS16550 +#define CONFIG_SYS_NS16550_SERIAL +#define CONFIG_SYS_NS16550_REG_SIZE -4 /* NS16550 register size, byteorder */ +#define CONFIG_SYS_NS16550_COM1 0x01c20000 /* Base address of UART0 */ +#define CONFIG_SYS_NS16550_CLK CONFIG_SYS_HZ_CLOCK /* Input clock to NS16550 */ +#define CONFIG_CONS_INDEX 1 /* use UART0 for console */ +#define CONFIG_BAUDRATE 115200 /* Default baud rate */ +#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 } +/*===================*/ +/* I2C Configuration */ +/*===================*/ +#define CONFIG_HARD_I2C +#define CONFIG_DRIVER_DAVINCI_I2C +#define CONFIG_SYS_I2C_SPEED 80000 /* 100Kbps won't work, silicon bug */ +#define CONFIG_SYS_I2C_SLAVE 10 /* Bogus, master-only in U-Boot */ +/*==================================*/ +/* Network & Ethernet Configuration */ +/*==================================*/ +#define CONFIG_DRIVER_TI_EMAC +#define CONFIG_EMAC_MDIO_PHY_NUM 1 +#define CONFIG_MII +#define CONFIG_BOOTP_DEFAULT +#define CONFIG_BOOTP_DNS +#define CONFIG_BOOTP_DNS2 +#define CONFIG_BOOTP_SEND_HOSTNAME +#define CONFIG_NET_RETRY_COUNT 10 +#define CONFIG_NET_MULTI +/*=====================*/ +/* Flash & Environment */ +/*=====================*/ +#undef CONFIG_ENV_IS_IN_FLASH +#define CONFIG_NAND_DAVINCI +#define CONFIG_SYS_NAND_LARGEPAGE +#define CONFIG_SYS_NAND_CS 2 +#define CONFIG_ENV_OVERWRITE +#define CONFIG_SYS_NO_FLASH +#define CONFIG_ENV_IS_IN_NAND /* U-Boot env in NAND Flash */ +#define CONFIG_ENV_SECT_SIZE 2048 /* Env sector Size */ +#define CONFIG_ENV_SIZE (128 << 10) /* 128 KiB */ +#define CONFIG_SKIP_LOWLEVEL_INIT /* U-Boot is loaded by a bootloader */ +#define CONFIG_MTD_PARTITIONS +#define CONFIG_CMD_MTDPARTS +#define CONFIG_MTD_DEVICE +#define MTDIDS_DEFAULT \ + "nand0=davinci_nand.0" +#define MTDPARTS_DEFAULT \ + "mtdparts=davinci_nand.0:" \ + "128k(U-Boot Params)ro," \ + "640k(UBL)ro," \ + "256k(U-Boot)ro," \ + "3m(Kernel)," \ + "32m(Linux Root)," \ + "-(User Storage)" +#define CONFIG_SKIP_LOWLEVEL_INIT /* U-Boot is loaded by a bootloader */ +#define CONFIG_SKIP_RELOCATE_UBOOT /* to a proper address, init done */ +#define CONFIG_SYS_NAND_BASE 0x02000000 +#define CONFIG_SYS_NAND_USE_FLASH_BBT +#define CONFIG_SYS_NAND_HW_ECC +#define CONFIG_SYS_MAX_NAND_DEVICE 1 /* Max number of NAND devices */ +#define CONFIG_ENV_OFFSET 0x0 /* Block 0--not used by bootcode */ +#define DEF_BOOTM "" +/*==============================*/ +/* U-Boot general configuration */ +/*==============================*/ +#undef CONFIG_USE_IRQ /* No IRQ/FIQ in U-Boot */ +#define CONFIG_MISC_INIT_R +#define CONFIG_BOOTDELAY 2 +#define CONFIG_BOOTFILE "uImage" /* Boot file name */ +#define CONFIG_SYS_PROMPT "U-Boot > " /* Monitor Command Prompt */ +#define CONFIG_SYS_CBSIZE 1024 /* Console I/O Buffer Size */ +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16) /* Print buffer sz */ +#define CONFIG_SYS_MAXARGS 16 /* max number of command args */ +#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Argument Buffer Size */ +#define CONFIG_SYS_LOAD_ADDR 0x87000000 /* default Linux kernel load address */ +#define CONFIG_VERSION_VARIABLE +#define CONFIG_AUTO_COMPLETE /* Won't work with hush so far, may be later */ +#define CONFIG_SYS_HUSH_PARSER +#define CONFIG_SYS_PROMPT_HUSH_PS2 "> " +#define CONFIG_CMDLINE_EDITING +#define CONFIG_SYS_LONGHELP +#define CONFIG_CRC32_VERIFY +#define CONFIG_MX_CYCLIC +#undef CONFIG_MUSB_HCD +#undef CONFIG_USB_DAVINCI +/*===================*/ +/* Linux Information */ +/*===================*/ +#define LINUX_BOOT_PARAM_ADDR 0x80000100 +#define CONFIG_CMDLINE_TAG +#define CONFIG_SETUP_MEMORY_TAGS +#define CONFIG_BOOTARGS "mem=120M console=ttyS0,115200n8 root=/dev/mtdblock4 rootfstype=jffs2 rw " \ + "noinitrd" +#define CONFIG_BOOTCOMMAND "nboot 87A00000 0 100000; bootm" +/*=================*/ +/* U-Boot commands */ +/*=================*/ +#include +#define CONFIG_CMD_ASKENV +#define CONFIG_CMD_DHCP +#define CONFIG_CMD_DIAG +#define CONFIG_CMD_I2C +#define CONFIG_CMD_MII +#define CONFIG_CMD_PING +#define CONFIG_CMD_SAVES +#define CONFIG_CMD_EEPROM +#define CONFIG_CMD_ELF +#undef CONFIG_CMD_BDI +#undef CONFIG_CMD_FPGA +#undef CONFIG_CMD_SETGETDCR +#undef CONFIG_CMD_FLASH +#undef CONFIG_CMD_IMLS +#define CONFIG_CMD_NAND + +#define CONFIG_MAX_RAM_BANK_SIZE (128 << 20) /* 128 MB */ + +#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1 +#define CONFIG_SYS_INIT_RAM_SIZE 0x1000 +#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + \ + CONFIG_SYS_INIT_RAM_SIZE - \ + GENERATED_GBL_DATA_SIZE) +#endif /* __CONFIG_H */ diff --git a/tools/gdb/remote.h b/tools/gdb/remote.h index f14dacb07a..b829e95c11 100644 --- a/tools/gdb/remote.h +++ b/tools/gdb/remote.h @@ -22,6 +22,7 @@ */ extern int remote_desc, remote_timeout; +int dvevm_write_mac_address(char *ethaddr); extern void remote_reset(void); extern void remote_continue(void);