summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--recipes-bsp/u-boot/u-boot-2016.09.01/mtcdt/i2c.patch114
-rw-r--r--recipes-bsp/u-boot/u-boot-2016.09.01/mtcdt/mtcdt.patch320
-rw-r--r--recipes-bsp/u-boot/u-boot-2016.09.01/mtcdt/spl.patch12
-rw-r--r--recipes-bsp/u-boot/u-boot_2016.09.01.bb14
4 files changed, 460 insertions, 0 deletions
diff --git a/recipes-bsp/u-boot/u-boot-2016.09.01/mtcdt/i2c.patch b/recipes-bsp/u-boot/u-boot-2016.09.01/mtcdt/i2c.patch
new file mode 100644
index 0000000..af726a3
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-2016.09.01/mtcdt/i2c.patch
@@ -0,0 +1,114 @@
+diff -raNu git.orig/include/i2c.h git/include/i2c.h
+--- git.orig/include/i2c.h 2017-04-28 17:26:27.854898005 -0500
++++ git/include/i2c.h 2017-05-01 17:27:32.673437788 -0500
+@@ -17,6 +17,27 @@
+ #ifndef _I2C_H_
+ #define _I2C_H_
+
++#define U_BOOT_I2C_MKENT_COMPLETE(_init, _probe, _read, _write, \
++ _set_speed, _speed, _slaveaddr, _hwadapnr, _name) \
++ { \
++ .init = _init, \
++ .probe = _probe, \
++ .read = _read, \
++ .write = _write, \
++ .set_bus_speed = _set_speed, \
++ .speed = _speed, \
++ .slaveaddr = _slaveaddr, \
++ .init_done = 0, \
++ .hwadapnr = _hwadapnr, \
++ .name = #_name \
++};
++
++#define U_BOOT_I2C_ADAP_COMPLETE(_name, _init, _probe, _read, _write, \
++ _set_speed, _speed, _slaveaddr, _hwadapnr) \
++ ll_entry_declare(struct i2c_adapter, _name, i2c) = \
++ U_BOOT_I2C_MKENT_COMPLETE(_init, _probe, _read, _write, \
++ _set_speed, _speed, _slaveaddr, _hwadapnr, _name);
++
+ /*
+ * For now there are essentially two parts to this file - driver model
+ * here at the top, and the older code below (with CONFIG_SYS_I2C being
+@@ -538,6 +559,26 @@
+ */
+ void i2c_dump_msgs(struct i2c_msg *msg, int nmsgs);
+
++
++struct i2c_adapter {
++ void (*init)(struct i2c_adapter *adap, int speed,
++ int slaveaddr);
++ int (*probe)(struct i2c_adapter *adap, uint8_t chip);
++ int (*read)(struct i2c_adapter *adap, uint8_t chip,
++ uint addr, int alen, uint8_t *buffer,
++ int len);
++ int (*write)(struct i2c_adapter *adap, uint8_t chip,
++ uint addr, int alen, uint8_t *buffer,
++ int len);
++ uint (*set_bus_speed)(struct i2c_adapter *adap,
++ uint speed);
++ int speed;
++ int waitdelay;
++ int slaveaddr;
++ int init_done;
++ int hwadapnr;
++ char *name;
++};
+ #ifndef CONFIG_DM_I2C
+
+ /*
+@@ -578,46 +619,6 @@
+ #define CONFIG_SYS_SPD_BUS_NUM 0
+ #endif
+
+-struct i2c_adapter {
+- void (*init)(struct i2c_adapter *adap, int speed,
+- int slaveaddr);
+- int (*probe)(struct i2c_adapter *adap, uint8_t chip);
+- int (*read)(struct i2c_adapter *adap, uint8_t chip,
+- uint addr, int alen, uint8_t *buffer,
+- int len);
+- int (*write)(struct i2c_adapter *adap, uint8_t chip,
+- uint addr, int alen, uint8_t *buffer,
+- int len);
+- uint (*set_bus_speed)(struct i2c_adapter *adap,
+- uint speed);
+- int speed;
+- int waitdelay;
+- int slaveaddr;
+- int init_done;
+- int hwadapnr;
+- char *name;
+-};
+-
+-#define U_BOOT_I2C_MKENT_COMPLETE(_init, _probe, _read, _write, \
+- _set_speed, _speed, _slaveaddr, _hwadapnr, _name) \
+- { \
+- .init = _init, \
+- .probe = _probe, \
+- .read = _read, \
+- .write = _write, \
+- .set_bus_speed = _set_speed, \
+- .speed = _speed, \
+- .slaveaddr = _slaveaddr, \
+- .init_done = 0, \
+- .hwadapnr = _hwadapnr, \
+- .name = #_name \
+-};
+-
+-#define U_BOOT_I2C_ADAP_COMPLETE(_name, _init, _probe, _read, _write, \
+- _set_speed, _speed, _slaveaddr, _hwadapnr) \
+- ll_entry_declare(struct i2c_adapter, _name, i2c) = \
+- U_BOOT_I2C_MKENT_COMPLETE(_init, _probe, _read, _write, \
+- _set_speed, _speed, _slaveaddr, _hwadapnr, _name);
+
+ struct i2c_adapter *i2c_get_adapter(int index);
+
+@@ -803,7 +804,7 @@
+ void i2c_soft_scl(int bit);
+ void i2c_soft_delay(void);
+ #endif
+-#else
++#else if !defined(CONFIG_DM_I2C_COMPAT)
+
+ /*
+ * Probe the given I2C chip address. Returns 0 if a chip responded,
diff --git a/recipes-bsp/u-boot/u-boot-2016.09.01/mtcdt/mtcdt.patch b/recipes-bsp/u-boot/u-boot-2016.09.01/mtcdt/mtcdt.patch
new file mode 100644
index 0000000..b44b925
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-2016.09.01/mtcdt/mtcdt.patch
@@ -0,0 +1,320 @@
+diff -raNu git.orig/board/atmel/at91sam9x5ek/at91sam9x5ek.c git/board/atmel/at91sam9x5ek/at91sam9x5ek.c
+--- git.orig/board/atmel/at91sam9x5ek/at91sam9x5ek.c 2017-04-26 12:52:49.565662228 -0500
++++ git/board/atmel/at91sam9x5ek/at91sam9x5ek.c 2017-04-27 12:40:44.426149774 -0500
+@@ -44,7 +44,8 @@
+ csa = readl(&matrix->ebicsa);
+ csa |= AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA;
+ /* NAND flash on D16 */
+- csa |= AT91_MATRIX_NFD0_ON_D16;
++ /* MTCDT: nand flash is set up by bootstrap, so leave it alone here */
++ /* csa |= AT91_MATRIX_NFD0_ON_D16; */
+
+ /* Configure IO drive */
+ csa &= ~AT91_MATRIX_EBI_EBI_IOSR_NORMAL;
+@@ -256,6 +257,9 @@
+
+ int board_init(void)
+ {
++ /* Set Status LED High */
++ at91_set_gpio_output(BOOT_STATUS_LED, 0);
++
+ /* arch number of AT91SAM9X5EK-Board */
+ gd->bd->bi_arch_number = MACH_TYPE_AT91SAM9X5EK;
+
+@@ -283,6 +287,20 @@
+ return 0;
+ }
+
++/* on-board EEPROM */
++struct mts_id_eeprom_layout {
++ char vendor_id[32];
++ char product_id[32];
++ char device_id[32];
++ char hw_version[32];
++ uint8_t mac_addr[6];
++ char imei[32];
++ uint8_t capa[32];
++ uint8_t mac_bluetooth[6];
++ uint8_t mac_wifi[6];
++ uint8_t reserved[302];
++};
++
+ int dram_init(void)
+ {
+ gd->ram_size = get_ram_size((void *) CONFIG_SYS_SDRAM_BASE,
+@@ -305,6 +323,48 @@
+ #endif
+ }
+
++int board_get_enetaddr(uchar *enetaddr)
++{
++ struct mts_id_eeprom_layout eeprom_buffer = {0};
++
++ if (eeprom_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0, &eeprom_buffer, sizeof(eeprom_buffer))) {
++ printf("EEPROM: read error\n");
++ return 0;
++ }
++
++ if (eeprom_buffer.vendor_id[0] == 0x00 || eeprom_buffer.vendor_id[0] == 0xFF) {
++ printf("EEPROM: uninitialized\n");
++ return 0;
++ }
++
++ printf("vendor-id: %s\n", eeprom_buffer.vendor_id);
++ printf("product-id: %s\n", eeprom_buffer.product_id);
++ printf("device-id: %s\n", eeprom_buffer.device_id);
++ printf("hw-version: %s\n", eeprom_buffer.hw_version);
++ printf("mac-addr: %02x:%02x:%02x:%02x:%02x:%02x\n", eeprom_buffer.mac_addr[0],
++ eeprom_buffer.mac_addr[1],
++ eeprom_buffer.mac_addr[2],
++ eeprom_buffer.mac_addr[3],
++ eeprom_buffer.mac_addr[4],
++ eeprom_buffer.mac_addr[5]);
++
++ memcpy(enetaddr, eeprom_buffer.mac_addr, 6);
++
++ return 1;
++}
++
++int misc_init_r(void)
++{
++ uchar enetaddr[6];
++
++ /* set MAC address from EEPROM if read successful */
++ if (board_get_enetaddr(enetaddr)) {
++ eth_setenv_enetaddr("ethaddr", enetaddr);
++ }
++
++ return 0;
++}
++
+ #include <asm/arch/atmel_mpddrc.h>
+ static void ddr2_conf(struct atmel_mpddrc_config *ddr2)
+ {
+diff -raNu git.orig/include/configs/at91sam9x5ek.h git/include/configs/at91sam9x5ek.h
+--- git.orig/include/configs/at91sam9x5ek.h 2017-04-26 10:56:03.169006861 -0500
++++ git/include/configs/at91sam9x5ek.h 2017-04-28 18:06:58.793553712 -0500
+@@ -11,7 +11,8 @@
+
+ #include <asm/hardware.h>
+
+-#define CONFIG_SYS_TEXT_BASE 0x26f00000
++#define USE_MTCDT
++#define CONFIG_SYS_TEXT_BASE 0x2ef00000
+
+ /* ARM asynchronous clock */
+ #define CONFIG_SYS_AT91_SLOW_CLOCK 32768
+@@ -24,6 +25,7 @@
+ #define CONFIG_INITRD_TAG
+ #define CONFIG_SKIP_LOWLEVEL_INIT
+ #define CONFIG_BOARD_EARLY_INIT_F
++#define CONFIG_MISC_INIT_R /* enable platform-dependent misc_init_r() */
+ #define CONFIG_DISPLAY_CPUINFO
+
+ #define CONFIG_CMD_BOOTZ
+@@ -40,6 +42,8 @@
+ #define CONFIG_USART_ID ATMEL_ID_SYS
+
+ /* LCD */
++/* MTCDT has no LCD */
++#ifndef MTCDT
+ #define CONFIG_LCD
+ #define LCD_BPP LCD_COLOR16
+ #define LCD_OUTPUT_BPP 24
+@@ -50,8 +54,14 @@
+ #define CONFIG_ATMEL_HLCD
+ #define CONFIG_ATMEL_LCD_RGB565
+ #define CONFIG_SYS_CONSOLE_IS_IN_ENV
++#endif
++
++/*STATUS LED*/
++#define BOOT_STATUS_LED AT91_PIN_PA24
+
+-#define CONFIG_BOOTDELAY 3
++#define CONFIG_BOOTDELAY 0
++/* check for keypress even if bootdelay is 0 */
++#define CONFIG_ZERO_BOOTDELAY_CHECK
+
+ /*
+ * BOOTP options
+@@ -67,6 +77,23 @@
+ /*
+ * Command line configuration.
+ */
++/* Compat needed or i2c read/write/init is not defined */
++#define CONFIG_DM_I2C_COMPAT
++/* Required to prevent conflicting definitions of
++ * I2C_GET_BUS and I2C_SET_BUS
++ */
++#define CONFIG_DM_I2C
++/* COMPAT above requires CONFIG_SYS_I2C or definitions
++ for inline functions like i2c_reg_read are
++ inconsistant.
++ */
++
++/*
++ * | include/config_fallbacks.h:96:4: error: #error "Cannot define CONFIG_SYS_I2C when CONFIG_DM_I2C is used"
++ * | # error "Cannot define CONFIG_SYS_I2C when CONFIG_DM_I2C is used"
++ * | ^~~~~
++ */
++
+ #define CONFIG_CMD_PING
+ #define CONFIG_CMD_DHCP
+ #define CONFIG_CMD_NAND
+@@ -74,6 +101,41 @@
+ #define CONFIG_CMD_MMC
+ #define CONFIG_CMD_FAT
+ #define CONFIG_CMD_USB
++#define CONFIG_CMD_I2C
++#define CONFIG_SYS_I2C_SOFT
++#define CONFIG_SOFT_I2C
++#define CONFIG_SOFT_I2C_GPIO_SCL AT91_PIN_PA31
++#define CONFIG_SOFT_I2C_GPIO_SDA AT91_PIN_PA30
++#define CONFIG_SYS_I2C_SOFT_SPEED 50000
++#define CONFIG_SYS_I2C_SPEED CONFIG_SYS_I2C_SOFT_SPEED
++/* Values from previous levels of Conduit U-Boot */
++#define CONFIG_SYS_I2C_SLAVE 0xfe
++#define I2C_RXTX_LEN 128
++
++
++/* Problems:
++ *
++ * ENAME=KBUILD_STR(help)" -D"KBUILD_MODNAME=KBUILD_STR(help)" -c -o cmd/help.o cmd/help.c
++| drivers/i2c/soft_i2c.c:300:34: warning: 'struct i2c_adapter' declared inside parameter list will not be visible outside of this definition or declaration
++| static void soft_i2c_init(struct i2c_adapter *adap, int speed, int slaveaddr)
++| ^~~~~~~~~~~
++| drivers/i2c/soft_i2c.c:323:34: warning: 'struct i2c_adapter' declared inside parameter list will not be visible outside of this definition or declaration
++| static int soft_i2c_probe(struct i2c_adapter *adap, uint8_t addr)
++| ^~~~~~~~~~~
++| drivers/i2c/soft_i2c.c:341:34: warning: 'struct i2c_adapter' declared inside parameter list will not be visible outside of this definition or declaration
++| static int soft_i2c_read(struct i2c_adapter *adap, uchar chip, uint addr,
++| ^~~~~~~~~~~
++| drivers/i2c/soft_i2c.c:416:35: warning: 'struct i2c_adapter' declared inside parameter list will not be visible outside of this definition or declaration
++| static int soft_i2c_write(struct i2c_adapter *adap, uchar chip, uint addr,
++| ^~~~~~~~~~~
++| arm-mlinux-linux-gnueabi-gcc --sysroot=/home/jklug/mlinux_morty/build/tmp/sysroots/mtcdt -Wp,-MD,drivers/input/.input.o.d -nostdinc -isystem /home/jklug/mlinux_morty/build/tmp/sysroots/x86_64-linux/usr/lib/arm-mlinux-linux-gnueabi/gcc/arm-mlinux-linux-gnueabi/6.2.0/include -Iinclude -I./arch/arm/include
++*/
++
++/* I2C eeprom support */
++#define CONFIG_CMD_EEPROM
++#define CONFIG_SYS_I2C_EEPROM_ADDR 0x56 /* at24c04 */
++#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1 /* Bytes of address */
++#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 3
+
+ /*
+ * define CONFIG_USB_EHCI to enable USB Hi-Speed (aka 2.0)
+@@ -84,7 +146,7 @@
+ /* SDRAM */
+ #define CONFIG_NR_DRAM_BANKS 1
+ #define CONFIG_SYS_SDRAM_BASE 0x20000000
+-#define CONFIG_SYS_SDRAM_SIZE 0x08000000 /* 128 megs */
++#define CONFIG_SYS_SDRAM_SIZE 0x10000000 /* 256 megs */
+
+ #define CONFIG_SYS_INIT_SP_ADDR \
+ (CONFIG_SYS_SDRAM_BASE + 4 * 1024 - GENERATED_GBL_DATA_SIZE)
+@@ -106,13 +168,28 @@
+ /* our CLE is AD22 */
+ #define CONFIG_SYS_NAND_MASK_CLE (1 << 22)
+ #define CONFIG_SYS_NAND_ENABLE_PIN AT91_PIN_PD4
+-#define CONFIG_SYS_NAND_READY_PIN AT91_PIN_PD5
++/* MTCDT nand ready is PC31 */
++#define CONFIG_SYS_NAND_READY_PIN AT91_PIN_PC31
+
+ /* PMECC & PMERRLOC */
+ #define CONFIG_ATMEL_NAND_HWECC 1
+ #define CONFIG_ATMEL_NAND_HW_PMECC 1
+-#define CONFIG_PMECC_CAP 2
++/* MTCDT: 4-bit PMECC */
++#define CONFIG_PMECC_CAP 4
+ #define CONFIG_PMECC_SECTOR_SIZE 512
++/*
++ * CONFIG_PMECC_INDEX_TABLE_OFFSET has been replaced by:
++ * ATMEL_PMECC_INDEX_OFFSET_512 and
++ * ATMEL_PMECC_INDEX_OFFSET_1024
++ *
++ * Which is used depends on:
++ * host->pmecc_sector_size == 512
++ *
++ * 2012.10:
++ * #define CONFIG_PMECC_INDEX_TABLE_OFFSET 0x8000
++ * 2016.03 (at91sam9x5.h):
++ * 182:#define ATMEL_PMECC_INDEX_OFFSET_512 0x8000
++ */
+
+ #define CONFIG_CMD_NAND_TRIMFFS
+
+@@ -142,6 +219,8 @@
+ #define CONFIG_RMII
+ #define CONFIG_NET_RETRY_COUNT 20
+ #define CONFIG_MACB_SEARCH_PHY
++/* enable MII command */
++#define CONFIG_CMD_MII 1
+
+ /* USB */
+ #ifdef CONFIG_CMD_USB
+@@ -163,18 +242,17 @@
+ #define CONFIG_SYS_LOAD_ADDR 0x22000000 /* load address */
+
+ #define CONFIG_SYS_MEMTEST_START CONFIG_SYS_SDRAM_BASE
+-#define CONFIG_SYS_MEMTEST_END 0x26e00000
++#define CONFIG_SYS_MEMTEST_END 0x2ee00000
+
+ #ifdef CONFIG_SYS_USE_NANDFLASH
+ /* bootstrap + u-boot + env + linux in nandflash */
+ #define CONFIG_ENV_IS_IN_NAND
+ #define CONFIG_ENV_OFFSET 0xc0000
+-#define CONFIG_ENV_OFFSET_REDUND 0x100000
++#define CONFIG_ENV_OFFSET_REDUND 0x160000
+ #define CONFIG_ENV_SIZE 0x20000 /* 1 sector = 128 kB */
+-#define CONFIG_BOOTCOMMAND "nand read " \
+- "0x22000000 0x200000 0x300000; " \
+- "bootm 0x22000000"
+-#elif defined(CONFIG_SYS_USE_SPIFLASH)
++/* MTCDT: read from env variables for boot */
++#define CONFIG_BOOTCOMMAND "nboot.jffs2 ${loadaddr} 0 ${kernel_addr}; bootm ${loadaddr}"
++#elif CONFIG_SYS_USE_SPIFLASH
+ /* bootstrap + u-boot + env + linux in spi flash */
+ #define CONFIG_ENV_IS_IN_SPI_FLASH
+ #define CONFIG_ENV_OFFSET 0x5000
+@@ -204,6 +282,10 @@
+ #define CONFIG_ENV_SIZE 0x4000
+ #endif
+
++#ifdef USE_MTCDT
++/* MTCDT uses jffs2 */
++#define CONFIG_BOOTARGS "mem=256M console=ttyS0,115200 root=/dev/mtdblock8 ro rootfstype=jffs2"
++#else
+ #ifdef CONFIG_SYS_USE_MMC
+ #define CONFIG_BOOTARGS "mem=128M console=ttyS0,115200 " \
+ "mtdparts=atmel_nand:" \
+@@ -218,6 +300,7 @@
+ "512k(dtb),6M(kernel)ro,-(rootfs) " \
+ "rootfstype=ubifs ubi.mtd=7 root=ubi0:rootfs rw"
+ #endif
++#endif
+
+ #define CONFIG_BAUDRATE 115200
+
+@@ -288,4 +371,22 @@
+
+ #endif
+
++
++/* MTCDT defaults */
++#define CONFIG_ENV_OVERWRITE 1 /* Allow Overwrite of serial# & ethaddr */
++#define CONFIG_ETHADDR 00:08:00:87:00:02
++#define CONFIG_IPADDR 192.168.2.1
++#define CONFIG_NETMASK 255.255.255.0
++#define CONFIG_SERVERIP 192.168.2.2
++#define CONFIG_HOSTNAME AT91SAM9G25
++#define CONFIG_LOADADDR 0x22000000
++
++/* MTCDT - enable watchdog */
++#define CONFIG_AT91SAM9_WATCHDOG 1
++#define CONFIG_HW_WATCHDOG 1
++
++#define CONFIG_EXTRA_ENV_SETTINGS \
++ "kernel_addr=0x200000\0" \
++ ""
++
+ #endif
diff --git a/recipes-bsp/u-boot/u-boot-2016.09.01/mtcdt/spl.patch b/recipes-bsp/u-boot/u-boot-2016.09.01/mtcdt/spl.patch
new file mode 100644
index 0000000..8c39abf
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot-2016.09.01/mtcdt/spl.patch
@@ -0,0 +1,12 @@
+diff -raNu git.orig/configs/at91sam9x5ek_nandflash_defconfig git/configs/at91sam9x5ek_nandflash_defconfig
+--- git.orig/configs/at91sam9x5ek_nandflash_defconfig 2017-05-02 17:52:50.369459785 -0500
++++ git/configs/at91sam9x5ek_nandflash_defconfig 2017-05-02 17:54:16.855261970 -0500
+@@ -1,7 +1,7 @@
+ CONFIG_ARM=y
+ CONFIG_ARCH_AT91=y
+ CONFIG_TARGET_AT91SAM9X5EK=y
+-CONFIG_SPL=y
++CONFIG_SPL=n
+ CONFIG_SYS_EXTRA_OPTIONS="AT91SAM9X5,SYS_USE_NANDFLASH"
+ CONFIG_SYS_PROMPT="U-Boot> "
+ # CONFIG_CMD_IMI is not set
diff --git a/recipes-bsp/u-boot/u-boot_2016.09.01.bb b/recipes-bsp/u-boot/u-boot_2016.09.01.bb
new file mode 100644
index 0000000..2fb055a
--- /dev/null
+++ b/recipes-bsp/u-boot/u-boot_2016.09.01.bb
@@ -0,0 +1,14 @@
+require u-boot.inc
+
+DEPENDS += "dtc-native"
+FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}-2016.09.01:"
+
+SRC_URI = "ftp://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2 \
+ file://mtcdt.patch \
+ file://spl.patch \
+ file://i2c.patch"
+# This revision corresponds to the tag "v2016.03"
+# We use the revision in order to avoid having to fetch it from the
+# repo during parse
+SRCREV = "df61a74e6845ec9bdcdd48d2aff5e9c2c6debeaa"
+