diff options
-rw-r--r-- | recipes-bsp/u-boot/u-boot-2016.09.01/mtcdt/i2c.patch | 114 | ||||
-rw-r--r-- | recipes-bsp/u-boot/u-boot-2016.09.01/mtcdt/mtcdt.patch | 320 | ||||
-rw-r--r-- | recipes-bsp/u-boot/u-boot-2016.09.01/mtcdt/spl.patch | 12 | ||||
-rw-r--r-- | recipes-bsp/u-boot/u-boot_2016.09.01.bb | 14 |
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" + |