]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
Merge branch 'master' of git://git.denx.de/u-boot-mips
authorTom Rini <trini@konsulko.com>
Tue, 19 Apr 2016 12:07:41 +0000 (08:07 -0400)
committerTom Rini <trini@konsulko.com>
Tue, 19 Apr 2016 12:07:41 +0000 (08:07 -0400)
77 files changed:
Kconfig
arch/arm/cpu/armv8/start.S
arch/arm/dts/am437x-gp-evm.dts
arch/arm/dts/am437x-sk-evm.dts
arch/arm/dts/am57xx-beagle-x15.dts
arch/arm/dts/dra7-evm.dts
arch/arm/dts/dra72-evm.dts
arch/arm/include/asm/arch-am33xx/spl.h
arch/m68k/cpu/mcf523x/start.S
arch/m68k/cpu/mcf52x2/start.S
arch/m68k/cpu/mcf532x/start.S
arch/m68k/cpu/mcf5445x/start.S
arch/sandbox/Kconfig
board/dave/common/flash.c [deleted file]
board/ti/am57xx/Kconfig
board/ti/am57xx/board.c
board/ti/am57xx/mux_data.h
board/ti/ks2_evm/board.c
cmd/Kconfig
cmd/Makefile
cmd/bootefi.c
cmd/fs.c
cmd/nvedit.c
common/Makefile
common/env_sata.c [new file with mode: 0644]
configs/am57xx_evm_defconfig
configs/am57xx_evm_nodt_defconfig
configs/bcm28155_ap_defconfig
configs/dra72_evm_defconfig
configs/dra74_evm_defconfig
configs/ge_b450v3_defconfig
configs/ge_b650v3_defconfig
configs/ge_b850v3_defconfig
configs/k2e_evm_defconfig
configs/k2hk_evm_defconfig
configs/k2l_evm_defconfig
configs/legoev3_defconfig
configs/ma5d4evk_defconfig
configs/stm32f746-disco_defconfig
configs/xpress_defconfig
configs/xpress_spl_defconfig
configs/zipitz2_defconfig
disk/part_iso.c
disk/part_iso.h
doc/README.ext4
drivers/Kconfig
drivers/block/ahci.c
drivers/gpio/pm8916_gpio.c
drivers/memory/Kconfig [new file with mode: 0644]
drivers/mmc/omap_hsmmc.c
drivers/power/pmic/pm8916.c
drivers/serial/serial_bcm283x_mu.c
include/config_distro_bootcmd.h
include/config_distro_defaults.h
include/configs/bcm28155_ap.h
include/configs/colibri_vf.h
include/configs/dragonboard410c.h
include/configs/flea3.h
include/configs/ge_bx50v3.h
include/configs/ids8313.h
include/configs/legoev3.h
include/configs/ma5d4evk.h
include/configs/pic32mzdask.h
include/configs/sandbox.h
include/configs/siemens-am33x-common.h
include/configs/smartweb.h
include/configs/stm32f746-disco.h
include/configs/ti_armv7_keystone2.h
include/configs/xilinx-ppc.h
include/configs/xpress.h
include/configs/zipitz2.h
include/efi_api.h
include/efi_loader.h
lib/efi_loader/efi_disk.c
lib/efi_loader/efi_memory.c
lib/efi_loader/efi_runtime.c
lib/gunzip.c

diff --git a/Kconfig b/Kconfig
index e7002edcb91bfb14c52695c75c324f9be960cc01..f53759a48e1f72b07533093be48073cbb3747255 100644 (file)
--- a/Kconfig
+++ b/Kconfig
@@ -1,6 +1,7 @@
 #
 # For a description of the syntax of this configuration file,
-# see Documentation/kbuild/kconfig-language.txt.
+# see the file Documentation/kbuild/kconfig-language.txt in the
+# Linux kernel source tree.
 #
 mainmenu "U-Boot $UBOOTVERSION Configuration"
 
@@ -17,7 +18,7 @@ config LOCALVERSION
        string "Local version - append to U-Boot release"
        help
          Append an extra string to the end of your U-Boot version.
-         This will show up on your boot log, for example.
+         This will show up in your boot log, for example.
          The string you set here will be appended after the contents of
          any files with a filename matching localversion* in your
          object and source tree, in that order.  Your total string can
@@ -28,11 +29,11 @@ config LOCALVERSION_AUTO
        default y
        help
          This will try to automatically determine if the current tree is a
-         release tree by looking for git tags that belong to the current
+         release tree by looking for Git tags that belong to the current
          top of tree revision.
 
          A string of the format -gxxxxxxxx will be added to the localversion
-         if a git-based tree is found.  The string generated by this will be
+         if a Git-based tree is found.  The string generated by this will be
          appended after any matching localversion* files, and after the value
          set in CONFIG_LOCALVERSION.
 
@@ -56,7 +57,7 @@ config SYS_MALLOC_F
        bool "Enable malloc() pool before relocation"
        default y if DM
        help
-         Before relocation memory is very limited on many platforms. Still,
+         Before relocation, memory is very limited on many platforms. Still,
          we can provide a small malloc() pool if needed. Driver model in
          particular needs this to operate, so that it can allocate the
          initial serial device and any others that are needed.
@@ -66,7 +67,7 @@ config SYS_MALLOC_F_LEN
        depends on SYS_MALLOC_F
        default 0x400
        help
-         Before relocation memory is very limited on many platforms. Still,
+         Before relocation, memory is very limited on many platforms. Still,
          we can provide a small malloc() pool if needed. Driver model in
          particular needs this to operate, so that it can allocate the
          initial serial device and any others that are needed.
@@ -78,7 +79,7 @@ menuconfig EXPERT
          This option allows certain base U-Boot options and settings
          to be disabled or tweaked. This is for specialized
          environments which can tolerate a "non-standard" U-Boot.
-         Only use this if you really know what you are doing.
+         Use this only if you really know what you are doing.
 
 if EXPERT
        config SYS_MALLOC_CLEAR_ON_INIT
@@ -95,7 +96,7 @@ if EXPERT
          Then the boot time can be significantly reduced.
          Warning:
          When disabling this, please check if malloc calls, maybe
-         should be replaced by calloc - if expects zeroed memory.
+         should be replaced by calloc - if one expects zeroed memory.
 endif
 endmenu                # General setup
 
@@ -117,10 +118,10 @@ config SPL
 config SPL_SYS_MALLOC_SIMPLE
        bool
        depends on SPL
-       prompt "Only use malloc_simple functions in the spl"
+       prompt "Only use malloc_simple functions in the SPL"
        help
          Say Y here to only use the *_simple malloc functions from
-         malloc_simple.c, rather then using the versions from dlmalloc.c
+         malloc_simple.c, rather then using the versions from dlmalloc.c;
          this will make the SPL binary smaller at the cost of more heap
          usage as the *_simple malloc functions do not re-use free-ed mem.
 
index dceedd7100ae5e97660addd3eb3df21f0b0f86e7..deb44a895fdab9aeaabfccfa9f9be7f6a57f0549 100644 (file)
@@ -201,15 +201,6 @@ ENDPROC(apply_core_errata)
 WEAK(lowlevel_init)
        mov     x29, lr                 /* Save LR */
 
-#ifndef CONFIG_ARMV8_MULTIENTRY
-#if defined(CONFIG_GICV2) || defined(CONFIG_GICV3)
-       /*
-        * For single-entry systems the lowlevel init is very simple.
-        */
-       ldr     x0, =GICD_BASE
-       bl      gic_init_secure
-#endif
-#else /* CONFIG_ARMV8_MULTIENTRY is set */
 #if defined(CONFIG_GICV2) || defined(CONFIG_GICV3)
        branch_if_slave x0, 1f
        ldr     x0, =GICD_BASE
@@ -222,7 +213,6 @@ WEAK(lowlevel_init)
        ldr     x0, =GICD_BASE
        ldr     x1, =GICC_BASE
        bl      gic_init_secure_percpu
-#endif
 #endif
 
        branch_if_master x0, x1, 2f
index 8e23b9660917a868cf4ff8d043713871b6d583c0..142bfc52a13ca38682f0be2544df78e26f4b27b0 100644 (file)
        bus-width = <4>;
        pinctrl-names = "default";
        pinctrl-0 = <&mmc1_pins>;
-       cd-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
+       cd-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
 };
 
 &mmc3 {
index 260edb93ec57c7868fc05d7eb11c0a341737b839..927d8d3e882a8dcfdc36c62c35de86b3a150bb56 100644 (file)
 
        vmmc-supply = <&dcdc4>;
        bus-width = <4>;
-       cd-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
+       cd-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
 };
 
 &usb2_phy1 {
index e42456223eb7022e7994622585235a89f314ec2b..38b266ab863fe16e532b43b6ae2c52d7150f4555 100644 (file)
        vmmc_aux-supply = <&vdd_3v3>;
        pbias-supply = <&pbias_mmc_reg>;
        bus-width = <4>;
-       cd-gpios = <&gpio6 27 0>; /* gpio 219 */
+       cd-gpios = <&gpio6 27 GPIO_ACTIVE_LOW>; /* gpio 219 */
 };
 
 &mmc2 {
index 242fd535164916e0330eea6e1bd75c9d4410ae76..08ef04e177b038bb500b4b134d783788fba0ab4b 100644 (file)
        status = "okay";
        vmmc-supply = <&ldo1_reg>;
        bus-width = <4>;
+       /*
+        * SDCD signal is not being used here - using the fact that GPIO mode
+        * is always hardwired.
+        */
+       cd-gpios = <&gpio6 27 GPIO_ACTIVE_LOW>;
 };
 
 &mmc2 {
index fc2d167deee49f4c4abaee52932eecc8a778a7f8..205103e2b0e1ab0a62096bb055ae1f2d4a13d106 100644 (file)
         * SDCD signal is not being used here - using the fact that GPIO mode
         * is a viable alternative
         */
-       cd-gpios = <&gpio6 27 0>;
+       cd-gpios = <&gpio6 27 GPIO_ACTIVE_LOW>;
 };
 
 &mmc2 {
index 43401d051a62d2768c85241f7cc5cfbf5edcce8a..f744ab0782e1846cdb86a06e7f3100d24350266e 100644 (file)
@@ -56,8 +56,9 @@
 #define BOOT_DEVICE_MMC1       0x07
 #define BOOT_DEVICE_MMC2       0x08
 #define BOOT_DEVICE_SPI                0x0A
+#define BOOT_DEVICE_USB                0x0D
 #define BOOT_DEVICE_UART       0x41
-#define BOOT_DEVICE_USB                0x45
+#define BOOT_DEVICE_USBETH     0x45
 #define BOOT_DEVICE_CPGMAC     0x47
 
 #define MMC_BOOT_DEVICES_START BOOT_DEVICE_MMC1
index 8a23e72ede79afbcda1dab8e0df37ab7e3332461..1702f98ab1f11c97d7369a476da9722206e327c0 100644 (file)
@@ -141,8 +141,12 @@ _start:
 
        move.l #__got_start, %a5        /* put relocation table address to a5 */
 
-       bsr cpu_init_f                  /* run low-level CPU init code (from flash) */
-       bsr board_init_f                /* run low-level board init code (from flash) */
+       /* run low-level CPU init code (from flash) */
+       move.l #cpu_init_f, %a1
+       jsr (%a1)
+       /* run low-level board init code (from flash) */
+       move.l #board_init_f, %a1
+       jsr (%a1)
 
        /* board_init_f() does not return */
 
index 8a59496051a795b54819692b1c24005822eb5c73..4af691f5aff7f4ff49845b48463746e2c627044a 100644 (file)
@@ -198,8 +198,12 @@ _after_flashbar_copy:
 
        move.l #__got_start, %a5                /* put relocation table address to a5 */
 
-       bsr cpu_init_f                          /* run low-level CPU init code (from flash) */
-       bsr board_init_f                        /* run low-level board init code (from flash) */
+       /* run low-level CPU init code (from flash) */
+       move.l #cpu_init_f, %a1
+       jsr (%a1)
+       /* run low-level board init code (from flash) */
+       move.l #board_init_f, %a1
+       jsr (%a1)
 
        /* board_init_f() does not return */
 
index 3b9ede0d3d49a1df9408e5ae6fa9b4530691d2d0..131ad6e392e9c48fabe730f46baf97222951528e 100644 (file)
@@ -155,8 +155,12 @@ _start:
 
        move.l #__got_start, %a5        /* put relocation table address to a5 */
 
-       bsr cpu_init_f                  /* run low-level CPU init code (from flash) */
-       bsr board_init_f                /* run low-level board init code (from flash) */
+       /* run low-level CPU init code (from flash) */
+       move.l #cpu_init_f, %a1
+       jsr (%a1)
+       /* run low-level board init code (from flash) */
+       move.l #board_init_f, %a1
+       jsr (%a1)
 
        /* board_init_f() does not return */
 
index ae261b11329526842e387efd75c6b23284d283f7..f50f147a4f3e6c4fb1722095998556519ff5e5a1 100644 (file)
@@ -664,8 +664,12 @@ _start:
 
        move.l #__got_start, %a5        /* put relocation table address to a5 */
 
-       bsr cpu_init_f                  /* run low-level CPU init code (from flash) */
-       bsr board_init_f                /* run low-level board init code (from flash) */
+       /* run low-level CPU init code (from flash) */
+       move.l #cpu_init_f, %a1
+       jsr (%a1)
+       /* run low-level board init code (from flash) */
+       move.l #board_init_f, %a1
+       jsr (%a1)
 
        /* board_init_f() does not return */
 
index 25e316cf9f533159119b031509cd945c52f5da68..a8a90cb7a4dd9d14c35cc60b16e6eca4698eb6af 100644 (file)
@@ -7,6 +7,9 @@ config SYS_ARCH
 config SYS_BOARD
        default "sandbox"
 
+config SYS_CPU
+       default "sandbox"
+
 config SYS_CONFIG_NAME
        default "sandbox"
 
diff --git a/board/dave/common/flash.c b/board/dave/common/flash.c
deleted file mode 100644 (file)
index f05adf9..0000000
+++ /dev/null
@@ -1,691 +0,0 @@
-/*
- * (C) Copyright 2001
- * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#include <common.h>
-#include <asm/processor.h>
-
-flash_info_t   flash_info[CONFIG_SYS_MAX_FLASH_BANKS]; /* info for FLASH chips */
-
-/*-----------------------------------------------------------------------
- * Functions
- */
-static int write_word (flash_info_t *info, ulong dest, ulong data);
-
-/*-----------------------------------------------------------------------
- */
-static void flash_get_offsets (ulong base, flash_info_t *info)
-{
-       int i;
-       short n;
-
-       /* set up sector start address table */
-       if (((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_SST) ||
-           ((info->flash_id & FLASH_TYPEMASK) == FLASH_AM640U)) {
-           for (i = 0; i < info->sector_count; i++)
-               info->start[i] = base + (i * 0x00010000);
-       } else if (((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL322B) ||
-                  ((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL323B) ||
-                  ((info->flash_id & FLASH_TYPEMASK) == FLASH_AM320B) ||
-                  ((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL324B)) {
-               /* set sector offsets for bottom boot block type        */
-               for (i=0; i<8; ++i) {           /*  8 x 8k boot sectors */
-                       info->start[i] = base;
-                       base += 8 << 10;
-               }
-               while (i < info->sector_count) {        /* 64k regular sectors  */
-                       info->start[i] = base;
-                       base += 64 << 10;
-                       ++i;
-               }
-       } else if (((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL322T) ||
-                  ((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL323T) ||
-                  ((info->flash_id & FLASH_TYPEMASK) == FLASH_AM320T) ||
-                  ((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL324T)) {
-               /* set sector offsets for top boot block type           */
-               base += info->size;
-               i = info->sector_count;
-               for (n=0; n<8; ++n) {           /*  8 x 8k boot sectors */
-                       base -= 8 << 10;
-                       --i;
-                       info->start[i] = base;
-               }
-               while (i > 0) {                 /* 64k regular sectors  */
-                       base -= 64 << 10;
-                       --i;
-                       info->start[i] = base;
-               }
-       } else {
-           if (info->flash_id & FLASH_BTYPE) {
-               /* set sector offsets for bottom boot block type        */
-               info->start[0] = base + 0x00000000;
-               info->start[1] = base + 0x00004000;
-               info->start[2] = base + 0x00006000;
-               info->start[3] = base + 0x00008000;
-               for (i = 4; i < info->sector_count; i++) {
-                       info->start[i] = base + (i * 0x00010000) - 0x00030000;
-               }
-           } else {
-               /* set sector offsets for top boot block type           */
-               i = info->sector_count - 1;
-               info->start[i--] = base + info->size - 0x00004000;
-               info->start[i--] = base + info->size - 0x00006000;
-               info->start[i--] = base + info->size - 0x00008000;
-               for (; i >= 0; i--) {
-                       info->start[i] = base + i * 0x00010000;
-               }
-           }
-       }
-}
-
-/*-----------------------------------------------------------------------
- */
-void flash_print_info  (flash_info_t *info)
-{
-       int i;
-       int k;
-       int size;
-       int erased;
-       volatile unsigned long *flash;
-
-       if (info->flash_id == FLASH_UNKNOWN) {
-               printf ("missing or unknown FLASH type\n");
-               return;
-       }
-
-       switch (info->flash_id & FLASH_VENDMASK) {
-       case FLASH_MAN_AMD:     printf ("AMD ");                break;
-       case FLASH_MAN_FUJ:     printf ("FUJITSU ");            break;
-       case FLASH_MAN_SST:     printf ("SST ");                break;
-       case FLASH_MAN_STM:     printf ("ST  ");                break;
-       default:                printf ("Unknown Vendor ");     break;
-       }
-
-       switch (info->flash_id & FLASH_TYPEMASK) {
-       case FLASH_AM400B:      printf ("AM29LV400B (4 Mbit, bottom boot sect)\n");
-                               break;
-       case FLASH_AM400T:      printf ("AM29LV400T (4 Mbit, top boot sector)\n");
-                               break;
-       case FLASH_AM800B:      printf ("AM29LV800B (8 Mbit, bottom boot sect)\n");
-                               break;
-       case FLASH_AM800T:      printf ("AM29LV800T (8 Mbit, top boot sector)\n");
-                               break;
-       case FLASH_AM160B:      printf ("AM29LV160B (16 Mbit, bottom boot sect)\n");
-                               break;
-       case FLASH_AM160T:      printf ("AM29LV160T (16 Mbit, top boot sector)\n");
-                               break;
-       case FLASH_AM320T:      printf ("AM29LV320T (32 M, top sector)\n");
-                               break;
-       case FLASH_AM320B:      printf ("AM29LV320B (32 M, bottom sector)\n");
-                               break;
-       case FLASH_AMDL322T:    printf ("AM29DL322T (32 M, top sector)\n");
-                               break;
-       case FLASH_AMDL322B:    printf ("AM29DL322B (32 M, bottom sector)\n");
-                               break;
-       case FLASH_AMDL323T:    printf ("AM29DL323T (32 M, top sector)\n");
-                               break;
-       case FLASH_AMDL323B:    printf ("AM29DL323B (32 M, bottom sector)\n");
-                               break;
-       case FLASH_AM640U:      printf ("AM29LV640D (64 M, uniform sector)\n");
-                               break;
-       case FLASH_SST800A:     printf ("SST39LF/VF800 (8 Mbit, uniform sector size)\n");
-                               break;
-       case FLASH_SST160A:     printf ("SST39LF/VF160 (16 Mbit, uniform sector size)\n");
-                               break;
-       case FLASH_STMW320DT:   printf ("M29W320DT (32 M, top sector)\n");
-                               break;
-       default:                printf ("Unknown Chip Type\n");
-                               break;
-       }
-
-       printf ("  Size: %ld MB in %d Sectors\n",
-               info->size >> 20, info->sector_count);
-
-       printf ("  Sector Start Addresses:");
-       for (i=0; i<info->sector_count; ++i) {
-#ifdef CONFIG_SYS_FLASH_EMPTY_INFO
-               /*
-                * Check if whole sector is erased
-                */
-               if (i != (info->sector_count-1))
-                 size = info->start[i+1] - info->start[i];
-               else
-                 size = info->start[0] + info->size - info->start[i];
-               erased = 1;
-               flash = (volatile unsigned long *)info->start[i];
-               size = size >> 2;        /* divide by 4 for longword access */
-               for (k=0; k<size; k++)
-                 {
-                   if (*flash++ != 0xffffffff)
-                     {
-                       erased = 0;
-                       break;
-                     }
-                 }
-
-               if ((i % 5) == 0)
-                       printf ("\n   ");
-               /* print empty and read-only info */
-               printf (" %08lX%s%s",
-                       info->start[i],
-                       erased ? " E" : "  ",
-                       info->protect[i] ? "RO " : "   ");
-#else
-               if ((i % 5) == 0)
-                       printf ("\n   ");
-               printf (" %08lX%s",
-                       info->start[i],
-                       info->protect[i] ? " (RO)" : "     ");
-#endif
-
-       }
-       printf ("\n");
-       return;
-}
-
-/*-----------------------------------------------------------------------
- */
-
-
-/*-----------------------------------------------------------------------
- */
-
-/*
- * The following code cannot be run from FLASH!
- */
-static ulong flash_get_size (vu_long *addr, flash_info_t *info)
-{
-       short i;
-       short n;
-       CONFIG_SYS_FLASH_WORD_SIZE value;
-       ulong base = (ulong)addr;
-       volatile CONFIG_SYS_FLASH_WORD_SIZE *addr2 = (CONFIG_SYS_FLASH_WORD_SIZE *)addr;
-
-       debug("[%s, %d] Entering ...\n", __FUNCTION__, __LINE__);
-
-       /* Write auto select command: read Manufacturer ID */
-       addr2[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00AA00AA;
-       addr2[CONFIG_SYS_FLASH_ADDR1] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00550055;
-       addr2[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00900090;
-
-       value = addr2[CONFIG_SYS_FLASH_READ0];
-
-       switch (value) {
-       case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_MANUFACT:
-               info->flash_id = FLASH_MAN_AMD;
-               break;
-       case (CONFIG_SYS_FLASH_WORD_SIZE)FUJ_MANUFACT:
-               info->flash_id = FLASH_MAN_FUJ;
-               break;
-       case (CONFIG_SYS_FLASH_WORD_SIZE)SST_MANUFACT:
-               info->flash_id = FLASH_MAN_SST;
-               break;
-       case (CONFIG_SYS_FLASH_WORD_SIZE)STM_MANUFACT:
-               info->flash_id = FLASH_MAN_STM;
-               break;
-       default:
-               info->flash_id = FLASH_UNKNOWN;
-               info->sector_count = 0;
-               info->size = 0;
-               return (0);                     /* no or unknown flash  */
-       }
-
-       value = addr2[CONFIG_SYS_FLASH_READ1];          /* device ID            */
-
-       switch (value) {
-       case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_LV400T:
-               info->flash_id += FLASH_AM400T;
-               info->sector_count = 11;
-               info->size = 0x00080000;
-               break;                          /* => 0.5 MB            */
-
-       case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_LV400B:
-               info->flash_id += FLASH_AM400B;
-               info->sector_count = 11;
-               info->size = 0x00080000;
-               break;                          /* => 0.5 MB            */
-
-       case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_LV800T:
-               info->flash_id += FLASH_AM800T;
-               info->sector_count = 19;
-               info->size = 0x00100000;
-               break;                          /* => 1 MB              */
-
-       case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_LV800B:
-               info->flash_id += FLASH_AM800B;
-               info->sector_count = 19;
-               info->size = 0x00100000;
-               break;                          /* => 1 MB              */
-
-       case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_LV160T:
-               info->flash_id += FLASH_AM160T;
-               info->sector_count = 35;
-               info->size = 0x00200000;
-               break;                          /* => 2 MB              */
-
-       case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_LV160B:
-               info->flash_id += FLASH_AM160B;
-               info->sector_count = 35;
-               info->size = 0x00200000;
-               break;                          /* => 2 MB              */
-
-       case (CONFIG_SYS_FLASH_WORD_SIZE)STM_ID_29W320DT:
-               info->flash_id += FLASH_STMW320DT;
-               info->sector_count = 67;
-               info->size = 0x00400000;  break;        /* => 4 MB      */
-
-       case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_LV320T:
-               info->flash_id += FLASH_AM320T;
-               info->sector_count = 71;
-               info->size = 0x00400000;  break;        /* => 4 MB      */
-
-       case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_LV320B:
-               info->flash_id += FLASH_AM320B;
-               info->sector_count = 71;
-               info->size = 0x00400000;  break;        /* => 4 MB      */
-
-       case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_DL322T:
-               info->flash_id += FLASH_AMDL322T;
-               info->sector_count = 71;
-               info->size = 0x00400000;  break;        /* => 4 MB      */
-
-       case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_DL322B:
-               info->flash_id += FLASH_AMDL322B;
-               info->sector_count = 71;
-               info->size = 0x00400000;  break;        /* => 4 MB      */
-
-       case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_DL323T:
-               info->flash_id += FLASH_AMDL323T;
-               info->sector_count = 71;
-               info->size = 0x00400000;  break;        /* => 4 MB      */
-
-       case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_DL323B:
-               info->flash_id += FLASH_AMDL323B;
-               info->sector_count = 71;
-               info->size = 0x00400000;  break;        /* => 4 MB      */
-
-       case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_LV640U:
-               info->flash_id += FLASH_AM640U;
-               info->sector_count = 128;
-               info->size = 0x00800000;  break;        /* => 8 MB      */
-
-       case (CONFIG_SYS_FLASH_WORD_SIZE)SST_ID_xF800A:
-               info->flash_id += FLASH_SST800A;
-               info->sector_count = 16;
-               info->size = 0x00100000;
-               break;                          /* => 1 MB              */
-
-       case (CONFIG_SYS_FLASH_WORD_SIZE)SST_ID_xF160A:
-               info->flash_id += FLASH_SST160A;
-               info->sector_count = 32;
-               info->size = 0x00200000;
-               break;                          /* => 2 MB              */
-
-       default:
-               info->flash_id = FLASH_UNKNOWN;
-               return (0);                     /* => no or unknown flash */
-
-       }
-
-       /* set up sector start address table */
-       if (((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_SST) ||
-           ((info->flash_id & FLASH_TYPEMASK) == FLASH_AM640U)) {
-           for (i = 0; i < info->sector_count; i++)
-               info->start[i] = base + (i * 0x00010000);
-       } else if (((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL322B) ||
-                  ((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL323B) ||
-                  ((info->flash_id & FLASH_TYPEMASK) == FLASH_AM320B) ||
-                  ((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL324B)) {
-               /* set sector offsets for bottom boot block type        */
-               for (i=0; i<8; ++i) {           /*  8 x 8k boot sectors */
-                       info->start[i] = base;
-                       base += 8 << 10;
-               }
-               while (i < info->sector_count) {        /* 64k regular sectors  */
-                       info->start[i] = base;
-                       base += 64 << 10;
-                       ++i;
-               }
-       } else if (((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL322T) ||
-                  ((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL323T) ||
-                  ((info->flash_id & FLASH_TYPEMASK) == FLASH_AM320T) ||
-                  ((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL324T)) {
-               /* set sector offsets for top boot block type           */
-               base += info->size;
-               i = info->sector_count;
-               for (n=0; n<8; ++n) {           /*  8 x 8k boot sectors */
-                       base -= 8 << 10;
-                       --i;
-                       info->start[i] = base;
-               }
-               while (i > 0) {                 /* 64k regular sectors  */
-                       base -= 64 << 10;
-                       --i;
-                       info->start[i] = base;
-               }
-       } else if ((info->flash_id & FLASH_TYPEMASK) == FLASH_STMW320DT) {
-               /* set sector offsets for top boot block type           */
-               base += info->size;
-               i = info->sector_count;
-               /*  1 x 16k boot sector */
-               base -= 16 << 10;
-               --i;
-               info->start[i] = base;
-               /*  2 x 8k  boot sectors */
-               for (n=0; n<2; ++n) {
-                       base -= 8 << 10;
-                       --i;
-                       info->start[i] = base;
-               }
-               /*  1 x 32k boot sector */
-               base -= 32 << 10;
-               --i;
-               info->start[i] = base;
-
-               while (i > 0) {                 /* 64k regular sectors  */
-                       base -= 64 << 10;
-                       --i;
-                       info->start[i] = base;
-               }
-       } else {
-           if (info->flash_id & FLASH_BTYPE) {
-               /* set sector offsets for bottom boot block type        */
-               info->start[0] = base + 0x00000000;
-               info->start[1] = base + 0x00004000;
-               info->start[2] = base + 0x00006000;
-               info->start[3] = base + 0x00008000;
-               for (i = 4; i < info->sector_count; i++) {
-                       info->start[i] = base + (i * 0x00010000) - 0x00030000;
-               }
-           } else {
-               /* set sector offsets for top boot block type           */
-               i = info->sector_count - 1;
-               info->start[i--] = base + info->size - 0x00004000;
-               info->start[i--] = base + info->size - 0x00006000;
-               info->start[i--] = base + info->size - 0x00008000;
-               for (; i >= 0; i--) {
-                       info->start[i] = base + i * 0x00010000;
-               }
-           }
-       }
-
-       /* check for protected sectors */
-       for (i = 0; i < info->sector_count; i++) {
-               /* read sector protection at sector address, (A7 .. A0) = 0x02 */
-               /* D0 = 1 if protected */
-               addr2 = (volatile CONFIG_SYS_FLASH_WORD_SIZE *)(info->start[i]);
-               if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_SST)
-                 info->protect[i] = 0;
-               else
-                 info->protect[i] = addr2[CONFIG_SYS_FLASH_READ2] & 1;
-       }
-
-       /*
-        * Prevent writes to uninitialized FLASH.
-        */
-       if (info->flash_id != FLASH_UNKNOWN) {
-               addr2 = (CONFIG_SYS_FLASH_WORD_SIZE *)info->start[0];
-               *addr2 = (CONFIG_SYS_FLASH_WORD_SIZE)0x00F000F0;        /* reset bank */
-       }
-
-       return (info->size);
-}
-
-
-/*-----------------------------------------------------------------------
- */
-
-int    flash_erase (flash_info_t *info, int s_first, int s_last)
-{
-       volatile CONFIG_SYS_FLASH_WORD_SIZE *addr = (CONFIG_SYS_FLASH_WORD_SIZE *)(info->start[0]);
-       volatile CONFIG_SYS_FLASH_WORD_SIZE *addr2;
-       int flag, prot, sect, l_sect;
-       ulong start, now, last;
-       int i;
-
-       if ((s_first < 0) || (s_first > s_last)) {
-               if (info->flash_id == FLASH_UNKNOWN) {
-                       printf ("- missing\n");
-               } else {
-                       printf ("- no sectors to erase\n");
-               }
-               return 1;
-       }
-
-       if (info->flash_id == FLASH_UNKNOWN) {
-               printf ("Can't erase unknown flash type - aborted\n");
-               return 1;
-       }
-
-       prot = 0;
-       for (sect=s_first; sect<=s_last; ++sect) {
-               if (info->protect[sect]) {
-                       prot++;
-               }
-       }
-
-       if (prot) {
-               printf ("- Warning: %d protected sectors will not be erased!\n",
-                       prot);
-       } else {
-               printf ("\n");
-       }
-
-       l_sect = -1;
-
-       /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts();
-
-       /* Start erase on unprotected sectors */
-       for (sect = s_first; sect<=s_last; sect++) {
-               if (info->protect[sect] == 0) { /* not protected */
-                   addr2 = (CONFIG_SYS_FLASH_WORD_SIZE *)(info->start[sect]);
-                   if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_SST) {
-                       addr[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00AA00AA;
-                       addr[CONFIG_SYS_FLASH_ADDR1] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00550055;
-                       addr[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00800080;
-                       addr[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00AA00AA;
-                       addr[CONFIG_SYS_FLASH_ADDR1] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00550055;
-                       addr2[0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00500050;  /* block erase */
-                       for (i=0; i<50; i++)
-                         udelay(1000);  /* wait 1 ms */
-                   } else {
-                       if (sect == s_first) {
-                           addr[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00AA00AA;
-                           addr[CONFIG_SYS_FLASH_ADDR1] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00550055;
-                           addr[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00800080;
-                           addr[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00AA00AA;
-                           addr[CONFIG_SYS_FLASH_ADDR1] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00550055;
-                       }
-                       addr2[0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00300030;  /* sector erase */
-                   }
-                   l_sect = sect;
-               }
-       }
-
-       /* re-enable interrupts if necessary */
-       if (flag)
-               enable_interrupts();
-
-       /* wait at least 80us - let's wait 1 ms */
-       udelay (1000);
-
-       /*
-        * We wait for the last triggered sector
-        */
-       if (l_sect < 0)
-               goto DONE;
-
-       start = get_timer (0);
-       last  = start;
-       addr = (CONFIG_SYS_FLASH_WORD_SIZE *)(info->start[l_sect]);
-       while ((addr[0] & (CONFIG_SYS_FLASH_WORD_SIZE)0x00800080) != (CONFIG_SYS_FLASH_WORD_SIZE)0x00800080) {
-               if ((now = get_timer(start)) > CONFIG_SYS_FLASH_ERASE_TOUT) {
-                       printf ("Timeout\n");
-                       return 1;
-               }
-               /* show that we're waiting */
-               if ((now - last) > 1000) {      /* every second */
-                       putc ('.');
-                       last = now;
-               }
-       }
-
-DONE:
-       /* reset to read mode */
-       addr = (CONFIG_SYS_FLASH_WORD_SIZE *)info->start[0];
-       addr[0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00F000F0;       /* reset bank */
-
-       printf (" done\n");
-       return 0;
-}
-
-/*-----------------------------------------------------------------------
- * Copy memory to flash, returns:
- * 0 - OK
- * 1 - write timeout
- * 2 - Flash not erased
- */
-
-int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
-{
-       ulong cp, wp, data;
-       int i, l, rc;
-
-       wp = (addr & ~3);       /* get lower word aligned address */
-
-       /*
-        * handle unaligned start bytes
-        */
-       if ((l = addr - wp) != 0) {
-               data = 0;
-               for (i=0, cp=wp; i<l; ++i, ++cp) {
-#ifdef CONFIG_B2
-                       data = data | ((*(uchar *)cp)<<(8*i));
-#else
-                       data = (data << 8) | (*(uchar *)cp);
-#endif
-               }
-               for (; i<4 && cnt>0; ++i) {
-#ifdef CONFIG_B2
-                       data = data  | ((*src++)<<(8*i));
-#else
-                       data = (data << 8) | *src++;
-#endif
-                       --cnt;
-                       ++cp;
-               }
-               for (; cnt==0 && i<4; ++i, ++cp) {
-#ifdef CONFIG_B2
-                       data = data | ((*(uchar *)cp)<<(8*i));
-#else
-                       data = (data << 8) | (*(uchar *)cp);
-#endif
-               }
-
-               if ((rc = write_word(info, wp, data)) != 0) {
-                       return (rc);
-               }
-               wp += 4;
-       }
-
-       /*
-        * handle word aligned part
-        */
-       while (cnt >= 4) {
-               data = 0;
-#ifdef CONFIG_B2
-               data = (*(ulong*)src);
-               src += 4;
-#else
-               for (i=0; i<4; ++i) {
-                       data = (data << 8) | *src++;
-               }
-#endif
-               if ((rc = write_word(info, wp, data)) != 0) {
-                       return (rc);
-               }
-               wp  += 4;
-               cnt -= 4;
-       }
-
-       if (cnt == 0) {
-               return (0);
-       }
-
-       /*
-        * handle unaligned tail bytes
-        */
-       data = 0;
-       for (i=0, cp=wp; i<4 && cnt>0; ++i, ++cp) {
-#ifdef CONFIG_B2
-               data = data  | ((*src++)<<(8*i));
-#else
-               data = (data << 8) | *src++;
-#endif
-               --cnt;
-       }
-       for (; i<4; ++i, ++cp) {
-#ifdef CONFIG_B2
-               data = data | ((*(uchar *)cp)<<(8*i));
-#else
-               data = (data << 8) | (*(uchar *)cp);
-#endif
-       }
-
-       return (write_word(info, wp, data));
-}
-
-/*-----------------------------------------------------------------------
- * Write a word to Flash, returns:
- * 0 - OK
- * 1 - write timeout
- * 2 - Flash not erased
- */
-static int write_word (flash_info_t *info, ulong dest, ulong data)
-{
-       ulong *data_ptr = &data;
-       volatile CONFIG_SYS_FLASH_WORD_SIZE *addr2 = (CONFIG_SYS_FLASH_WORD_SIZE *)(info->start[0]);
-       volatile CONFIG_SYS_FLASH_WORD_SIZE *dest2 = (CONFIG_SYS_FLASH_WORD_SIZE *)dest;
-       volatile CONFIG_SYS_FLASH_WORD_SIZE *data2 = (CONFIG_SYS_FLASH_WORD_SIZE *)data_ptr;
-       ulong start;
-       int flag;
-       int i;
-
-       /* Check if Flash is (sufficiently) erased */
-       if ((*((volatile ulong *)dest) & data) != data) {
-               return (2);
-       }
-       /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts();
-
-       for (i=0; i<4/sizeof(CONFIG_SYS_FLASH_WORD_SIZE); i++)
-         {
-           addr2[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00AA00AA;
-           addr2[CONFIG_SYS_FLASH_ADDR1] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00550055;
-           addr2[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00A000A0;
-
-           dest2[i] = data2[i];
-
-           /* re-enable interrupts if necessary */
-           if (flag)
-             enable_interrupts();
-
-           /* data polling for D7 */
-           start = get_timer (0);
-           while ((dest2[i] & (CONFIG_SYS_FLASH_WORD_SIZE)0x00800080) !=
-                  (data2[i] & (CONFIG_SYS_FLASH_WORD_SIZE)0x00800080)) {
-             if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) {
-               return (1);
-             }
-           }
-         }
-
-       return (0);
-}
-
-/*-----------------------------------------------------------------------
- */
index 17745ff7ea6588e35ff8e99b89315abf86622daf..87654f9799565ebd4aaf11901f7642441bbab95f 100644 (file)
@@ -9,6 +9,15 @@ config SYS_VENDOR
 config SYS_CONFIG_NAME
        default "am57xx_evm"
 
+config CONS_INDEX
+        int "UART used for console"
+        range 1 6
+        default 3
+        help
+          The AM57x (and DRA7xx) SoC has a total of 6 UARTs available to it.
+          Depending on your specific board you may want something other than UART3
+          here.
+
 source "board/ti/common/Kconfig"
 
 endif
index a5f02e6390ac961bf3fff8d1f0ba847dab53d73e..17620896130d9bf44ee0fef0537727f6af31cb0b 100644 (file)
@@ -35,6 +35,7 @@
 
 #define board_is_x15()         board_ti_is("BBRDX15_")
 #define board_is_am572x_evm()  board_ti_is("AM572PM_")
+#define board_is_am572x_idk()  board_ti_is("AM572IDK")
 
 #ifdef CONFIG_DRIVER_TI_CPSW
 #include <cpsw.h>
@@ -131,9 +132,9 @@ static const struct emif_regs beagle_x15_emif2_ddr3_532mhz_emif_regs = {
        .sdram_config2          = 0x08000000,
        .ref_ctrl               = 0x000040F1,
        .ref_ctrl_final         = 0x00001035,
-       .sdram_tim1             = 0xcccf36ab,
+       .sdram_tim1             = 0xcccf36b3,
        .sdram_tim2             = 0x308f7fda,
-       .sdram_tim3             = 0x409f88a8,
+       .sdram_tim3             = 0x407f88a8,
        .read_idle_ctrl         = 0x00050000,
        .zq_config              = 0x5007190b,
        .temp_alert_config      = 0x00000000,
@@ -278,6 +279,8 @@ void do_board_detect(void)
                bname = "BeagleBoard X15";
        else if (board_is_am572x_evm())
                bname = "AM572x EVM";
+       else if (board_is_am572x_idk())
+               bname = "AM572x IDK";
 
        if (bname)
                snprintf(sysinfo.board_string, SYSINFO_BOARD_NAME_MAX_LEN,
@@ -296,6 +299,8 @@ static void setup_board_eeprom_env(void)
 
        if (board_is_am572x_evm())
                name = "am57xx_evm";
+       else if (board_is_am572x_idk())
+               name = "am572x_idk";
        else
                printf("Unidentified board claims %s in eeprom header\n",
                       board_ti_get_name());
@@ -343,9 +348,24 @@ void set_muxconf_regs(void)
 #ifdef CONFIG_IODELAY_RECALIBRATION
 void recalibrate_iodelay(void)
 {
-       __recalibrate_iodelay(core_padconf_array_essential,
-                             ARRAY_SIZE(core_padconf_array_essential),
-                             iodelay_cfg_array, ARRAY_SIZE(iodelay_cfg_array));
+       const struct pad_conf_entry *pconf;
+       const struct iodelay_cfg_entry *iod;
+       int pconf_sz, iod_sz;
+
+       if (board_is_am572x_idk()) {
+               pconf = core_padconf_array_essential_am572x_idk;
+               pconf_sz = ARRAY_SIZE(core_padconf_array_essential_am572x_idk);
+               iod = iodelay_cfg_array_am572x_idk;
+               iod_sz = ARRAY_SIZE(iodelay_cfg_array_am572x_idk);
+       } else {
+               /* Common for X15/GPEVM */
+               pconf = core_padconf_array_essential_x15;
+               pconf_sz = ARRAY_SIZE(core_padconf_array_essential_x15);
+               iod = iodelay_cfg_array_x15;
+               iod_sz = ARRAY_SIZE(iodelay_cfg_array_x15);
+       }
+
+       __recalibrate_iodelay(pconf, pconf_sz, iod, iod_sz);
 }
 #endif
 
@@ -605,6 +625,12 @@ int board_eth_init(bd_t *bis)
        ctrl_val |= 0x22;
        writel(ctrl_val, (*ctrl)->control_core_control_io1);
 
+       /* The phy address for the AM572x IDK are different than x15 */
+       if (board_is_am572x_idk()) {
+               cpsw_data.slave_data[0].phy_addr = 0;
+               cpsw_data.slave_data[1].phy_addr = 1;
+       }
+
        ret = cpsw_register(&cpsw_data);
        if (ret < 0)
                printf("Error %d registering CPSW switch\n", ret);
index 3c007b76dd5b4584e626dc07ba425e77c0dec282..b5ea8ad7c85221304039a0448b5970657d50a0c2 100644 (file)
@@ -12,7 +12,7 @@
 
 #include <asm/arch/mux_dra7xx.h>
 
-const struct pad_conf_entry core_padconf_array_essential[] = {
+const struct pad_conf_entry core_padconf_array_essential_x15[] = {
        {GPMC_AD0, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_ad0.vin3a_d0 */
        {GPMC_AD1, (M2 | PIN_INPUT_PULLUP | MANUAL_MODE)},      /* gpmc_ad1.vin3a_d1 */
        {GPMC_AD2, (M2 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_ad2.vin3a_d2 */
@@ -264,6 +264,222 @@ const struct pad_conf_entry core_padconf_array_essential[] = {
        {RTCK, (M0 | PIN_INPUT_PULLDOWN)},      /* rtck.rtck */
 };
 
+const struct pad_conf_entry core_padconf_array_essential_am572x_idk[] = {
+       {GPMC_A0, (M6 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},     /* gpmc_a0.vin4b_d0 */
+       {GPMC_A1, (M6 | PIN_INPUT_PULLUP | MANUAL_MODE)},       /* gpmc_a1.vin4b_d1 */
+       {GPMC_A2, (M6 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},     /* gpmc_a2.vin4b_d2 */
+       {GPMC_A3, (M6 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},     /* gpmc_a3.vin4b_d3 */
+       {GPMC_A4, (M6 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},     /* gpmc_a4.vin4b_d4 */
+       {GPMC_A5, (M6 | PIN_INPUT_PULLUP | MANUAL_MODE)},       /* gpmc_a5.vin4b_d5 */
+       {GPMC_A6, (M6 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},     /* gpmc_a6.vin4b_d6 */
+       {GPMC_A7, (M6 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},     /* gpmc_a7.vin4b_d7 */
+       {GPMC_A8, (M6 | PIN_INPUT_PULLUP | MANUAL_MODE)},       /* gpmc_a8.vin4b_hsync1 */
+       {GPMC_A9, (M6 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},     /* gpmc_a9.vin4b_vsync1 */
+       {GPMC_A10, (M6 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_a10.vin4b_clk1 */
+       {GPMC_A11, (M6 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_a11.vin4b_de1 */
+       {GPMC_A12, (M6 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_a12.vin4b_fld1 */
+       {GPMC_A13, (M1 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_a13.qspi1_rtclk */
+       {GPMC_A14, (M1 | PIN_INPUT_PULLUP | MANUAL_MODE)},      /* gpmc_a14.qspi1_d3 */
+       {GPMC_A15, (M1 | PIN_INPUT_PULLUP | MANUAL_MODE)},      /* gpmc_a15.qspi1_d2 */
+       {GPMC_A16, (M1 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_a16.qspi1_d0 */
+       {GPMC_A17, (M1 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_a17.qspi1_d1 */
+       {GPMC_A18, (M1 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},    /* gpmc_a18.qspi1_sclk */
+       {GPMC_A19, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_a19.mmc2_dat4 */
+       {GPMC_A20, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_a20.mmc2_dat5 */
+       {GPMC_A21, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_a21.mmc2_dat6 */
+       {GPMC_A22, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_a22.mmc2_dat7 */
+       {GPMC_A23, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_a23.mmc2_clk */
+       {GPMC_A24, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_a24.mmc2_dat0 */
+       {GPMC_A25, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_a25.mmc2_dat1 */
+       {GPMC_A26, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_a26.mmc2_dat2 */
+       {GPMC_A27, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_a27.mmc2_dat3 */
+       {GPMC_CS1, (M1 | PIN_INPUT_PULLUP)},    /* gpmc_cs1.mmc2_cmd */
+       {GPMC_CS2, (M1 | PIN_INPUT_PULLUP | MANUAL_MODE)},      /* gpmc_cs2.qspi1_cs0 */
+       {VIN1A_D5, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d5.gpio3_9 */
+       {VIN1A_D6, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d6.gpio3_10 */
+       {VIN1A_D7, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d7.gpio3_11 */
+       {VIN1A_D8, (M14 | PIN_INPUT_PULLDOWN)}, /* vin1a_d8.gpio3_12 */
+       {VIN1A_D10, (M14 | PIN_INPUT_PULLDOWN)},        /* vin1a_d10.gpio3_14 */
+       {VIN1A_D12, (M14 | PIN_INPUT_PULLDOWN)},        /* vin1a_d12.gpio3_16 */
+       {VIN1A_D13, (M14 | PIN_INPUT_PULLDOWN)},        /* vin1a_d13.gpio3_17 */
+       {VIN1A_D14, (M14 | PIN_INPUT_PULLDOWN)},        /* vin1a_d14.gpio3_18 */
+       {VIN1A_D15, (M14 | PIN_INPUT_PULLDOWN)},        /* vin1a_d15.gpio3_19 */
+       {VIN1A_D17, (M14 | PIN_INPUT_PULLDOWN)},        /* vin1a_d17.gpio3_21 */
+       {VIN1A_D18, (M14 | PIN_INPUT_PULLDOWN)},        /* vin1a_d18.gpio3_22 */
+       {VIN1A_D19, (M14 | PIN_INPUT_PULLDOWN)},        /* vin1a_d19.gpio3_23 */
+       {VIN1A_D22, (M14 | PIN_INPUT_PULLDOWN)},        /* vin1a_d22.gpio3_26 */
+       {VIN2A_CLK0, (M14 | PIN_INPUT_PULLUP)},         /* vin2a_clk0.gpio3_28 */
+       {VIN2A_DE0, (M14 | PIN_INPUT_PULLUP)},          /* vin2a_de0.gpio3_29 */
+       {VIN2A_FLD0, (M14 | PIN_INPUT_PULLUP)},         /* vin2a_fld0.gpio3_30 */
+       {VIN2A_HSYNC0, (M14 | PIN_INPUT_PULLUP)},       /* vin2a_hsync0.gpio3_31 */
+       {VIN2A_VSYNC0, (M14 | PIN_INPUT_PULLDOWN)},     /* vin2a_vsync0.gpio4_0 */
+       {VIN2A_D0, (M11 | PIN_INPUT_PULLDOWN)}, /* vin2a_d0.pr1_uart0_rxd */
+       {VIN2A_D1, (M11 | PIN_INPUT_PULLDOWN)}, /* vin2a_d1.pr1_uart0_txd */
+       {VIN2A_D2, (M10 | PIN_INPUT_PULLDOWN)}, /* vin2a_d2.ecap1 */
+       {VIN2A_D3, (M14 | PIN_INPUT_PULLDOWN)}, /* vin2a_d3.gpio4_4 */
+       {VIN2A_D4, (M14 | PIN_INPUT_PULLDOWN)}, /* vin2a_d4.gpio4_5 */
+       {VIN2A_D5, (M13 | PIN_INPUT_PULLDOWN)}, /* vin2a_d5.pr1_pru1_gpo2 */
+       {VIN2A_D6, (M11 | PIN_INPUT_PULLDOWN)}, /* vin2a_d6.pr1_mii_mt1_clk */
+       {VIN2A_D7, (M11 | PIN_INPUT_PULLDOWN)}, /* vin2a_d7.pr1_mii_mii1_txen */
+       {VIN2A_D8, (M11 | PIN_INPUT_PULLDOWN)}, /* vin2a_d8.pr1_mii_mii1_txd3 */
+       {VIN2A_D9, (M11 | PIN_INPUT_PULLDOWN)}, /* vin2a_d9.pr1_mii_mii1_txd2 */
+       {VIN2A_D10, (M11 | PIN_INPUT_PULLDOWN)},        /* vin2a_d10.pr1_mdio_mdclk */
+       {VIN2A_D11, (M11 | PIN_INPUT_PULLDOWN)},        /* vin2a_d11.pr1_mdio_data */
+       {VIN2A_D12, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},   /* vin2a_d12.rgmii1_txc */
+       {VIN2A_D13, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},   /* vin2a_d13.rgmii1_txctl */
+       {VIN2A_D14, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},   /* vin2a_d14.rgmii1_txd3 */
+       {VIN2A_D15, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},   /* vin2a_d15.rgmii1_txd2 */
+       {VIN2A_D16, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},   /* vin2a_d16.rgmii1_txd1 */
+       {VIN2A_D17, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},   /* vin2a_d17.rgmii1_txd0 */
+       {VIN2A_D18, (M3 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},   /* vin2a_d18.rgmii1_rxc */
+       {VIN2A_D19, (M3 | PIN_INPUT_PULLUP | MANUAL_MODE)},     /* vin2a_d19.rgmii1_rxctl */
+       {VIN2A_D20, (M3 | PIN_INPUT_PULLUP | MANUAL_MODE)},     /* vin2a_d20.rgmii1_rxd3 */
+       {VIN2A_D21, (M3 | PIN_INPUT_PULLUP | MANUAL_MODE)},     /* vin2a_d21.rgmii1_rxd2 */
+       {VIN2A_D22, (M3 | PIN_INPUT_PULLUP | MANUAL_MODE)},     /* vin2a_d22.rgmii1_rxd1 */
+       {VIN2A_D23, (M3 | PIN_INPUT_PULLUP | MANUAL_MODE)},     /* vin2a_d23.rgmii1_rxd0 */
+       {VOUT1_CLK, (M0 | PIN_OUTPUT)},         /* vout1_clk.vout1_clk */
+       {VOUT1_DE, (M0 | PIN_OUTPUT)},          /* vout1_de.vout1_de */
+       {VOUT1_FLD, (M14 | PIN_INPUT)},         /* vout1_fld.gpio4_21 */
+       {VOUT1_HSYNC, (M0 | PIN_OUTPUT)},       /* vout1_hsync.vout1_hsync */
+       {VOUT1_VSYNC, (M0 | PIN_OUTPUT)},       /* vout1_vsync.vout1_vsync */
+       {VOUT1_D0, (M0 | PIN_OUTPUT)},          /* vout1_d0.vout1_d0 */
+       {VOUT1_D1, (M0 | PIN_OUTPUT)},          /* vout1_d1.vout1_d1 */
+       {VOUT1_D2, (M0 | PIN_OUTPUT)},          /* vout1_d2.vout1_d2 */
+       {VOUT1_D3, (M0 | PIN_OUTPUT)},          /* vout1_d3.vout1_d3 */
+       {VOUT1_D4, (M0 | PIN_OUTPUT)},          /* vout1_d4.vout1_d4 */
+       {VOUT1_D5, (M0 | PIN_OUTPUT)},          /* vout1_d5.vout1_d5 */
+       {VOUT1_D6, (M0 | PIN_OUTPUT)},          /* vout1_d6.vout1_d6 */
+       {VOUT1_D7, (M0 | PIN_OUTPUT)},          /* vout1_d7.vout1_d7 */
+       {VOUT1_D8, (M0 | PIN_OUTPUT)},          /* vout1_d8.vout1_d8 */
+       {VOUT1_D9, (M0 | PIN_OUTPUT)},          /* vout1_d9.vout1_d9 */
+       {VOUT1_D10, (M0 | PIN_OUTPUT)},         /* vout1_d10.vout1_d10 */
+       {VOUT1_D11, (M0 | PIN_OUTPUT)},         /* vout1_d11.vout1_d11 */
+       {VOUT1_D12, (M0 | PIN_OUTPUT)},         /* vout1_d12.vout1_d12 */
+       {VOUT1_D13, (M0 | PIN_OUTPUT)},         /* vout1_d13.vout1_d13 */
+       {VOUT1_D14, (M0 | PIN_OUTPUT)},         /* vout1_d14.vout1_d14 */
+       {VOUT1_D15, (M0 | PIN_OUTPUT)},         /* vout1_d15.vout1_d15 */
+       {VOUT1_D16, (M0 | PIN_OUTPUT)},         /* vout1_d16.vout1_d16 */
+       {VOUT1_D17, (M0 | PIN_OUTPUT)},         /* vout1_d17.vout1_d17 */
+       {VOUT1_D18, (M0 | PIN_OUTPUT)},         /* vout1_d18.vout1_d18 */
+       {VOUT1_D19, (M0 | PIN_OUTPUT)},         /* vout1_d19.vout1_d19 */
+       {VOUT1_D20, (M0 | PIN_OUTPUT)},         /* vout1_d20.vout1_d20 */
+       {VOUT1_D21, (M0 | PIN_OUTPUT)},         /* vout1_d21.vout1_d21 */
+       {VOUT1_D22, (M0 | PIN_OUTPUT)},         /* vout1_d22.vout1_d22 */
+       {VOUT1_D23, (M0 | PIN_OUTPUT)},         /* vout1_d23.vout1_d23 */
+       {MDIO_MCLK, (M0 | PIN_INPUT_PULLUP)},   /* mdio_mclk.mdio_mclk */
+       {MDIO_D, (M0 | PIN_INPUT_PULLUP)},      /* mdio_d.mdio_d */
+       {RMII_MHZ_50_CLK, (M13 | PIN_INPUT_PULLDOWN)},  /* RMII_MHZ_50_CLK.pr2_pru1_gpo2 */
+       {UART3_RXD, (M11 | PIN_INPUT_PULLDOWN)},        /* uart3_rxd.pr1_mii0_rxdv */
+       {UART3_TXD, (M11 | PIN_INPUT_PULLDOWN)},        /* uart3_txd.rp1_mii_mr0_clk */
+       {RGMII0_TXC, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},  /* rgmii0_txc.rgmii0_txc */
+       {RGMII0_TXCTL, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},        /* rgmii0_txctl.rgmii0_txctl */
+       {RGMII0_TXD3, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_txd3.rgmii0_txd3 */
+       {RGMII0_TXD2, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_txd2.rgmii0_txd2 */
+       {RGMII0_TXD1, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_txd1.rgmii0_txd1 */
+       {RGMII0_TXD0, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)}, /* rgmii0_txd0.rgmii0_txd0 */
+       {RGMII0_RXC, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},  /* rgmii0_rxc.rgmii0_rxc */
+       {RGMII0_RXCTL, (M0 | PIN_INPUT_PULLDOWN | MANUAL_MODE)},        /* rgmii0_rxctl.rgmii0_rxctl */
+       {RGMII0_RXD3, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)},   /* rgmii0_rxd3.rgmii0_rxd3 */
+       {RGMII0_RXD2, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)},   /* rgmii0_rxd2.rgmii0_rxd2 */
+       {RGMII0_RXD1, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)},   /* rgmii0_rxd1.rgmii0_rxd1 */
+       {RGMII0_RXD0, (M0 | PIN_INPUT_PULLUP | MANUAL_MODE)},   /* rgmii0_rxd0.rgmii0_rxd0 */
+       {USB1_DRVVBUS, (M0 | PIN_INPUT_SLEW)},  /* usb1_drvvbus.usb1_drvvbus */
+       {USB2_DRVVBUS, (M0 | PIN_INPUT_SLEW)},  /* usb2_drvvbus.usb2_drvvbus */
+       {GPIO6_14, (M14 | PIN_OUTPUT_PULLUP)},  /* gpio6_14.gpio6_14 */
+       {GPIO6_15, (M0  | PIN_OUTPUT_PULLUP)},  /* gpio6_15.gpio6_15 */
+       {GPIO6_16, (M0 | PIN_INPUT_PULLDOWN)},  /* gpio6_16.gpio6)_16 */
+       {XREF_CLK0, (M11 | PIN_INPUT_PULLDOWN)},        /* xref_clk0.pr2_mii1_col */
+       {XREF_CLK1, (M11 | PIN_INPUT_PULLDOWN)},        /* xref_clk1.pr2_mii1_crs */
+       {XREF_CLK2, (M14 | PIN_INPUT_PULLDOWN)},        /* xref_clk2.i6_19 */
+       {XREF_CLK3, (M9 | PIN_INPUT_PULLDOWN)}, /* xref_clk3.clkout3 */
+       {MCASP1_ACLKX, (M11 | PIN_INPUT_PULLDOWN)},     /* mcasp1_aclkx.pr2_mdio_mdclk */
+       {MCASP1_FSX, (M11 | PIN_INPUT_SLEW)},   /* mcasp1_fsx.pr2_mdio_data */
+       {MCASP1_ACLKR, (M14 | PIN_INPUT_PULLUP)},       /* mcasp1_aclkr.gpio5_0 */
+       {MCASP1_FSR, (M14 | PIN_INPUT_PULLUP)}, /* mcasp1_fsr.gpio5_1 */
+       {MCASP1_AXR0, (M11 | PIN_INPUT_PULLUP | SLEWCONTROL)},  /* mcasp1_axr0.pr2_mii0_rxer */
+       {MCASP1_AXR1, (M11 | PIN_INPUT_SLEW)},  /* mcasp1_axr1.pr2_mii_mt0_clk */
+       {MCASP1_AXR2, (M14 | PIN_INPUT_PULLDOWN)},      /* mcasp1_axr2.gpio5_4 */
+       {MCASP1_AXR3, (M14 | PIN_INPUT_PULLDOWN)},      /* mcasp1_axr3.gpio5_5 */
+       {MCASP1_AXR4, (M14 | PIN_INPUT_PULLDOWN)},      /* mcasp1_axr4.gpio5_6 */
+       {MCASP1_AXR5, (M14 | PIN_OUTPUT_PULLUP)},       /* mcasp1_axr5.gpio5_7 */
+       {MCASP1_AXR6, (M14 | PIN_OUTPUT_PULLUP)},       /* mcasp1_axr6.gpio5_8 */
+       {MCASP1_AXR7, (M14 | PIN_OUTPUT_PULLUP)},       /* mcasp1_axr7.gpio5_9 */
+       {MCASP1_AXR8, (M11 | PIN_INPUT_SLEW)},  /* mcasp1_axr8.pr2_mii0_txen */
+       {MCASP1_AXR9, (M11 | PIN_INPUT_SLEW)},  /* mcasp1_axr9.pr2_mii0_txd3 */
+       {MCASP1_AXR10, (M11 | PIN_INPUT_SLEW)}, /* mcasp1_axr10.pr2_mii0_txd2 */
+       {MCASP1_AXR11, (M11 | PIN_INPUT_SLEW)}, /* mcasp1_axr11.pr2_mii0_txd1 */
+       {MCASP1_AXR12, (M11 | PIN_INPUT_SLEW)}, /* mcasp1_axr12.pr2_mii0_txd0 */
+       {MCASP1_AXR13, (M11 | PIN_INPUT_SLEW)}, /* mcasp1_axr13.pr2_mii_mr0_clk */
+       {MCASP1_AXR14, (M11 | PIN_INPUT_PULLDOWN | SLEWCONTROL)},       /* mcasp1_axr14.pr2_mii0_rxdv */
+       {MCASP1_AXR15, (M11 | PIN_INPUT_SLEW)}, /* mcasp1_axr15.pr2_mii0_rxd3 */
+       {MCASP2_ACLKX, (M11 | PIN_INPUT_SLEW)}, /* mcasp2_aclkx.pr2_mii0_rxd2 */
+       {MCASP2_FSX, (M11 | PIN_INPUT_SLEW)},   /* mcasp2_fsx.pr2_mii0_rxd1 */
+       {MCASP2_AXR2, (M11 | PIN_INPUT_SLEW)},  /* mcasp2_axr2.pr2_mii0_rxd0 */
+       {MCASP2_AXR3, (M11 | PIN_INPUT_PULLDOWN | SLEWCONTROL)},        /* mcasp2_axr3.pr2_mii0_rxlink */
+       {MCASP2_AXR4, (M14 | PIN_INPUT_PULLDOWN)},      /* mcasp2_axr4.gpio1_4 */
+       {MCASP2_AXR5, (M14 | PIN_INPUT_PULLDOWN)},      /* mcasp2_axr5.gpio6_7 */
+       {MCASP2_AXR6, (M14 | PIN_INPUT_PULLDOWN)},      /* mcasp2_axr6.gpio2_29 */
+       {MCASP2_AXR7, (M14 | PIN_INPUT_PULLDOWN)},      /* mcasp2_axr7.gpio1_5 */
+       {MCASP3_ACLKX, (M11 | PIN_INPUT_PULLDOWN)},     /* mcasp3_aclkx.pr2_mii0_crs */
+       {MCASP3_FSX, (M11 | PIN_INPUT_SLEW)},   /* mcasp3_fsx.pr2_mii0_col */
+       {MCASP3_AXR0, (M11 | PIN_INPUT_PULLUP | SLEWCONTROL)},  /* mcasp3_axr0.pr2_mii1_rxer */
+       {MCASP3_AXR1, (M11 | PIN_INPUT_PULLUP | SLEWCONTROL)},  /* mcasp3_axr1.pr2_mii1_rxlink */
+       {MCASP4_ACLKX, (M2 | PIN_INPUT_PULLDOWN)},      /* mcasp4_aclkx.spi3_sclk */
+       {MCASP4_FSX, (M2 | PIN_INPUT_PULLDOWN)},        /* mcasp4_fsx.spi3_d1 */
+       {MCASP4_AXR1, (M2 | PIN_INPUT_PULLUP)}, /* mcasp4_axr1.spi3_cs0 */
+       {MCASP5_ACLKX, (M13 | PIN_INPUT_PULLDOWN)},     /* mcasp5_aclkx.pr2_pru1_gpo1 */
+       {MCASP5_FSX, (M12 | PIN_INPUT_PULLDOWN | VIRTUAL_MODE14)},/* mcasp5_fsx.pr2_pru1_gpi2 */
+       {MCASP5_AXR0, (M13 | PIN_INPUT_PULLDOWN)},      /* mcasp5_axr0.pr2_pru1_gpo3 */
+       {MCASP5_AXR1, (M13 | PIN_INPUT_PULLDOWN)},      /* mcasp5_axr1.pr2_pru1_gpo4 */
+       {GPIO6_10, (M11 | PIN_INPUT_PULLUP)},   /* gpio6_10.pr2_mii_mt1_clk */
+       {GPIO6_11, (M11 | PIN_INPUT_PULLUP)},   /* gpio6_11.pr2_mii1_txen */
+       {MMC3_CLK, (M11 | PIN_INPUT_PULLUP)},   /* mmc3_clk.pr2_mii1_txd3 */
+       {MMC3_CMD, (M11 | PIN_INPUT_PULLUP)},   /* mmc3_cmd.pr2_mii1_txd2 */
+       {MMC3_DAT0, (M11 | PIN_INPUT_PULLUP)},  /* mmc3_dat0.pr2_mii1_txd1 */
+       {MMC3_DAT1, (M11 | PIN_INPUT_PULLUP)},  /* mmc3_dat1.pr2_mii1_txd0 */
+       {MMC3_DAT2, (M11 | PIN_INPUT_PULLUP)},  /* mmc3_dat2.pr2_mii_mr1_clk */
+       {MMC3_DAT3, (M11 | PIN_INPUT_PULLDOWN)},        /* mmc3_dat3.pr2_mii1_rxdv */
+       {MMC3_DAT4, (M11 | PIN_INPUT_PULLDOWN)},        /* mmc3_dat4.pr2_mii1_rxd3 */
+       {MMC3_DAT5, (M11 | PIN_INPUT_PULLDOWN)},        /* mmc3_dat5.pr2_mii1_rxd2 */
+       {MMC3_DAT6, (M11 | PIN_INPUT_PULLDOWN)},        /* mmc3_dat6.pr2_mii1_rxd1 */
+       {MMC3_DAT7, (M11 | PIN_INPUT_PULLDOWN)},        /* mmc3_dat7.pr2_mii1_rxd0 */
+       {SPI1_SCLK, (M14 | PIN_INPUT_PULLDOWN)},        /* spi1_sclk.gpio7_7 */
+       {SPI1_D1, (M14 | PIN_INPUT_PULLDOWN)},  /* spi1_d1.gpio7_8 */
+       {SPI1_D0, (M14 | PIN_INPUT_PULLDOWN)},  /* spi1_d0.gpio7_9 */
+       {SPI1_CS0, (M14 | PIN_OUTPUT)},         /* spi1_cs0.gpio7_10 */
+       {SPI1_CS1, (M14 | PIN_INPUT_PULLDOWN)}, /* spi1_cs1.gpio7_11 */
+       {MMC1_CLK, (M0 | PIN_INPUT_PULLUP)},    /* mmc1_clk.mmc1_clk */
+       {MMC1_CMD, (M0 | PIN_INPUT_PULLUP)},    /* mmc1_cmd.mmc1_cmd */
+       {MMC1_DAT0, (M0 | PIN_INPUT_PULLUP)},   /* mmc1_dat0.mmc1_dat0 */
+       {MMC1_DAT1, (M0 | PIN_INPUT_PULLUP)},   /* mmc1_dat1.mmc1_dat1 */
+       {MMC1_DAT2, (M0 | PIN_INPUT_PULLUP)},   /* mmc1_dat2.mmc1_dat2 */
+       {MMC1_DAT3, (M0 | PIN_INPUT_PULLUP)},   /* mmc1_dat3.mmc1_dat3 */
+       {MMC1_SDCD, (M14 | PIN_INPUT_PULLUP)},  /* mmc1_sdcd.gpio6_27 */
+       {MMC1_SDWP, (M14 | PIN_OUTPUT)},        /* mmc1_sdwp.gpio6_28 */
+       {SPI1_CS2, (M14 | PIN_INPUT_PULLDOWN)}, /* spi1_cs2.gpio7_12 */
+       {SPI1_CS3, (M6 | PIN_INPUT_PULLUP | SLEWCONTROL)},      /* spi1_cs3.hdmi1_cec */
+       {DCAN1_TX, (M0 | PIN_INPUT_PULLUP | SLEWCONTROL)},      /* dcan1_tx.dcan1_tx */
+       {DCAN1_RX, (M0 | PIN_INPUT_PULLUP | SLEWCONTROL)},      /* dcan1_rx.dcan1_rx */
+       {UART2_CTSN, (M2 | PIN_INPUT_SLEW)},    /* uart2_ctsn.uart3_rxd */
+       {UART2_RTSN, (M1 | PIN_INPUT_SLEW)},    /* uart2_rtsn.uart3_txd */
+       {UART1_RXD, (M14 | PIN_INPUT_PULLDOWN)},        /* uart1_rxd.gpio7_22 */
+       {UART1_TXD, (M14 | PIN_INPUT_PULLDOWN)},        /* uart3_txd.gpio7_23 */
+       {I2C2_SDA, (M1 | PIN_INPUT)},           /* i2c2_sda.hdmi1_ddc_scl */
+       {I2C2_SCL, (M1 | PIN_INPUT)},           /* i2c2_scl.hdmi1_ddc_sda */
+       {ON_OFF, (M1 | PIN_OUTPUT_PULLUP)},     /* on_off.on_off */
+       {RTC_PORZ, (M0 | PIN_OUTPUT_PULLDOWN)}, /* rtc_porz.rtc_porz */
+       {TMS, (M0 | PIN_INPUT_PULLUP)}, /* tms.tms */
+       {TDI, (M0 | PIN_INPUT_PULLUP | SLEWCONTROL)},   /* tdi.tdi */
+       {TDO, (M0 | PIN_INPUT_PULLUP)}, /* tdo.tdo */
+       {TCLK, (M0 | PIN_INPUT_PULLUP)},        /* tclk.tclk */
+       {TRSTN, (M0 | PIN_INPUT_PULLDOWN)},     /* trstn.trstn */
+       {RTCK, (M0 | PIN_INPUT)},       /* rtck.rtck */
+       {EMU0, (M0 | PIN_INPUT_PULLUP)},        /* emu0.emu0 */
+       {EMU1, (M0 | PIN_INPUT_PULLUP)},        /* emu1.emu1 */
+       {RESETN, (M0 | PIN_OUTPUT_PULLUP)},     /* resetn.resetn */
+       {RSTOUTN, (M0 | PIN_OUTPUT_PULLDOWN)},  /* rstoutn.rstoutn */
+};
+
 const struct pad_conf_entry early_padconf[] = {
        {UART2_CTSN, (M2 | PIN_INPUT_SLEW)},    /* uart2_ctsn.uart3_rxd */
        {UART2_RTSN, (M1 | PIN_INPUT_SLEW)},    /* uart2_rtsn.uart3_txd */
@@ -272,7 +488,7 @@ const struct pad_conf_entry early_padconf[] = {
 };
 
 #ifdef CONFIG_IODELAY_RECALIBRATION
-const struct iodelay_cfg_entry iodelay_cfg_array[] = {
+const struct iodelay_cfg_entry iodelay_cfg_array_x15[] = {
        {0x0114, 2980, 0},      /* CFG_GPMC_A0_IN */
        {0x0120, 2648, 0},      /* CFG_GPMC_A10_IN */
        {0x012C, 2918, 0},      /* CFG_GPMC_A11_IN */
@@ -326,5 +542,53 @@ const struct iodelay_cfg_entry iodelay_cfg_array[] = {
        {0x0AEC, 232, 1278},    /* CFG_VIN2A_D22_IN */
        {0x0AF8, 0, 1397},      /* CFG_VIN2A_D23_IN */
 };
+
+const struct iodelay_cfg_entry iodelay_cfg_array_am572x_idk[] = {
+       {0x0114, 2980, 0},      /* CFG_GPMC_A0_IN */
+       {0x0120, 2648, 0},      /* CFG_GPMC_A10_IN */
+       {0x012C, 2918, 0},      /* CFG_GPMC_A11_IN */
+       {0x0138, 2605, 45},     /* CFG_GPMC_A12_IN */
+       {0x0144, 0, 0},         /* CFG_GPMC_A13_IN */
+       {0x0150, 1976, 1389},   /* CFG_GPMC_A14_IN */
+       {0x015C, 1872, 1408},   /* CFG_GPMC_A15_IN */
+       {0x0168, 1914, 1506},   /* CFG_GPMC_A16_IN */
+       {0x0170, 57, 0},        /* CFG_GPMC_A16_OUT */
+       {0x0174, 1904, 1471},   /* CFG_GPMC_A17_IN */
+       {0x0188, 1690, 0},      /* CFG_GPMC_A18_OUT */
+       {0x0198, 2917, 0},      /* CFG_GPMC_A1_IN */
+       {0x0204, 3156, 178},    /* CFG_GPMC_A2_IN */
+       {0x0210, 3109, 246},    /* CFG_GPMC_A3_IN */
+       {0x021C, 3142, 100},    /* CFG_GPMC_A4_IN */
+       {0x0228, 3084, 33},     /* CFG_GPMC_A5_IN */
+       {0x0234, 2778, 0},      /* CFG_GPMC_A6_IN */
+       {0x0240, 3110, 0},      /* CFG_GPMC_A7_IN */
+       {0x024C, 2874, 0},      /* CFG_GPMC_A8_IN */
+       {0x0258, 3072, 0},      /* CFG_GPMC_A9_IN */
+       {0x0374, 0, 0},         /* CFG_GPMC_CS2_OUT */
+       {0x06F0, 480, 0},       /* CFG_RGMII0_RXC_IN */
+       {0x06FC, 111, 1641},    /* CFG_RGMII0_RXCTL_IN */
+       {0x0708, 272, 1116},    /* CFG_RGMII0_RXD0_IN */
+       {0x0714, 243, 1260},    /* CFG_RGMII0_RXD1_IN */
+       {0x0720, 0, 1614},      /* CFG_RGMII0_RXD2_IN */
+       {0x072C, 105, 1673},    /* CFG_RGMII0_RXD3_IN */
+       {0x0740, 531, 120},     /* CFG_RGMII0_TXC_OUT */
+       {0x074C, 201, 60},      /* CFG_RGMII0_TXCTL_OUT */
+       {0x0758, 229, 120},     /* CFG_RGMII0_TXD0_OUT */
+       {0x0764, 141, 0},       /* CFG_RGMII0_TXD1_OUT */
+       {0x0770, 495, 120},     /* CFG_RGMII0_TXD2_OUT */
+       {0x077C, 660, 120},     /* CFG_RGMII0_TXD3_OUT */
+       {0x0A70, 65, 70},       /* CFG_VIN2A_D12_OUT */
+       {0x0A7C, 125, 70},      /* CFG_VIN2A_D13_OUT */
+       {0x0A88, 0, 70},        /* CFG_VIN2A_D14_OUT */
+       {0x0A94, 0, 70},        /* CFG_VIN2A_D15_OUT */
+       {0x0AA0, 65, 70},       /* CFG_VIN2A_D16_OUT */
+       {0x0AAC, 0, 0},         /* CFG_VIN2A_D17_OUT */
+       {0x0AB0, 612, 0},       /* CFG_VIN2A_D18_IN */
+       {0x0ABC, 4, 927},       /* CFG_VIN2A_D19_IN */
+       {0x0AD4, 136, 1340},    /* CFG_VIN2A_D20_IN */
+       {0x0AE0, 130, 1450},    /* CFG_VIN2A_D21_IN */
+       {0x0AEC, 144, 1269},    /* CFG_VIN2A_D22_IN */
+       {0x0AF8, 0, 1330},      /* CFG_VIN2A_D23_IN */
+};
 #endif
 #endif /* _MUX_DATA_BEAGLE_X15_H_ */
index e16669da081fdcafbeea24068e0bd67ebc2cc91b..9e8ad932d4d3e2c01638e53f8297e58757125752 100644 (file)
@@ -20,6 +20,7 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
+#if defined(CONFIG_TI_AEMIF)
 static struct aemif_config aemif_configs[] = {
        {                       /* CS0 */
                .mode           = AEMIF_MODE_NAND,
@@ -33,6 +34,7 @@ static struct aemif_config aemif_configs[] = {
                .width          = AEMIF_WIDTH_8,
        },
 };
+#endif
 
 int dram_init(void)
 {
@@ -42,7 +44,10 @@ int dram_init(void)
 
        gd->ram_size = get_ram_size((long *)CONFIG_SYS_SDRAM_BASE,
                                    CONFIG_MAX_RAM_BANK_SIZE);
+#if defined(CONFIG_TI_AEMIF)
        aemif_init(ARRAY_SIZE(aemif_configs), aemif_configs);
+#endif
+
        if (ddr3_size)
                ddr3_init_ecc(KS2_DDR3A_EMIF_CTRL_BASE, ddr3_size);
        return 0;
index fe8b4f0510da1586969621243c6894cb740d2ccf..8703cdb4a9bebe8a007f60717639bf6966d20ff6 100644 (file)
@@ -173,6 +173,13 @@ config CMD_ELF
        help
          Boot an ELF/vxWorks image from the memory.
 
+config CMD_FDT
+       bool "Flattened Device Tree utility commands"
+       default y
+       depends on OF_LIBFDT
+       help
+         Do FDT related setup before booting into the Operating System.
+
 config CMD_GO
        bool "go"
        default y
index ba041973079cdf2e87d7742aeac622c192e1694c..f95759e6704424ea9edfb258d79937d68d783c91 100644 (file)
@@ -54,7 +54,7 @@ obj-$(CONFIG_CMD_EXT4) += ext4.o
 obj-$(CONFIG_CMD_EXT2) += ext2.o
 obj-$(CONFIG_CMD_FAT) += fat.o
 obj-$(CONFIG_CMD_FDC) += fdc.o
-obj-$(CONFIG_OF_LIBFDT) += fdt.o
+obj-$(CONFIG_CMD_FDT) += fdt.o
 obj-$(CONFIG_CMD_FITUPD) += fitupd.o
 obj-$(CONFIG_CMD_FLASH) += flash.o
 ifdef CONFIG_FPGA
index 3add632bc4b945de810a2f3f4b01d59c3b1fe124..7f552fc0d4d9ea3ab74eeb69b554a151e8ed1a12 100644 (file)
 #include <errno.h>
 #include <libfdt.h>
 #include <libfdt_env.h>
+#include <memalign.h>
+#include <asm/global_data.h>
+
+DECLARE_GLOBAL_DATA_PTR;
 
 /*
  * When booting using the "bootefi" command, we don't know which
@@ -34,17 +38,30 @@ static struct efi_device_path_file_path bootefi_image_path[] = {
        }
 };
 
+static struct efi_device_path_file_path bootefi_device_path[] = {
+       {
+               .dp.type = DEVICE_PATH_TYPE_MEDIA_DEVICE,
+               .dp.sub_type = DEVICE_PATH_SUB_TYPE_FILE_PATH,
+               .dp.length = sizeof(bootefi_image_path[0]),
+               .str = { 'b','o','o','t','e','f','i' },
+       }, {
+               .dp.type = DEVICE_PATH_TYPE_END,
+               .dp.sub_type = DEVICE_PATH_SUB_TYPE_END,
+               .dp.length = sizeof(bootefi_image_path[0]),
+       }
+};
+
 static efi_status_t bootefi_open_dp(void *handle, efi_guid_t *protocol,
                        void **protocol_interface, void *agent_handle,
                        void *controller_handle, uint32_t attributes)
 {
-       *protocol_interface = bootefi_image_path;
+       *protocol_interface = bootefi_device_path;
        return EFI_SUCCESS;
 }
 
 /* The EFI loaded_image interface for the image executed via "bootefi" */
 static struct efi_loaded_image loaded_image_info = {
-       .device_handle = bootefi_image_path,
+       .device_handle = bootefi_device_path,
        .file_path = bootefi_image_path,
 };
 
@@ -63,7 +80,7 @@ static struct efi_object loaded_image_info_obj = {
                {
                        /*
                         * When asking for the device path interface, return
-                        * bootefi_image_path
+                        * bootefi_device_path
                         */
                        .guid = &efi_guid_device_path,
                        .open = &bootefi_open_dp,
@@ -73,22 +90,59 @@ static struct efi_object loaded_image_info_obj = {
 
 /* The EFI object struct for the device the "bootefi" image was loaded from */
 static struct efi_object bootefi_device_obj = {
-       .handle = bootefi_image_path,
+       .handle = bootefi_device_path,
        .protocols = {
                {
                        /* When asking for the device path interface, return
-                        * bootefi_image_path */
+                        * bootefi_device_path */
                        .guid = &efi_guid_device_path,
                        .open = &bootefi_open_dp,
                }
        },
 };
 
+static void *copy_fdt(void *fdt)
+{
+       u64 fdt_size = fdt_totalsize(fdt);
+       unsigned long fdt_ram_start = -1L, fdt_pages;
+       u64 new_fdt_addr;
+       void *new_fdt;
+       int i;
+
+        for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
+                u64 ram_start = gd->bd->bi_dram[i].start;
+                u64 ram_size = gd->bd->bi_dram[i].size;
+
+               if (!ram_size)
+                       continue;
+
+               if (ram_start < fdt_ram_start)
+                       fdt_ram_start = ram_start;
+       }
+
+       /* Give us at least 4kb breathing room */
+       fdt_size = ALIGN(fdt_size + 4096, 4096);
+       fdt_pages = fdt_size >> EFI_PAGE_SHIFT;
+
+       /* Safe fdt location is at 128MB */
+       new_fdt_addr = fdt_ram_start + (128 * 1024 * 1024) + fdt_size;
+       if (efi_allocate_pages(1, EFI_BOOT_SERVICES_DATA, fdt_pages,
+                              &new_fdt_addr) != EFI_SUCCESS) {
+               /* If we can't put it there, put it somewhere */
+               new_fdt_addr = (ulong)memalign(4096, fdt_size);
+       }
+       new_fdt = (void*)(ulong)new_fdt_addr;
+       memcpy(new_fdt, fdt, fdt_totalsize(fdt));
+       fdt_set_totalsize(new_fdt, fdt_size);
+
+       return new_fdt;
+}
+
 /*
  * Load an EFI payload into a newly allocated piece of memory, register all
  * EFI objects it would want to access and jump to it.
  */
-static unsigned long do_bootefi_exec(void *efi)
+static unsigned long do_bootefi_exec(void *efi, void *fdt)
 {
        ulong (*entry)(void *image_handle, struct efi_system_table *st);
        ulong fdt_pages, fdt_size, fdt_start, fdt_end;
@@ -100,32 +154,31 @@ static unsigned long do_bootefi_exec(void *efi)
         */
        efi_save_gd();
 
-       /* Update system table to point to our currently loaded FDT */
-
-       if (working_fdt) {
+       if (fdt && !fdt_check_header(fdt)) {
                /* Prepare fdt for payload */
-               if (image_setup_libfdt(&img, working_fdt, 0, NULL)) {
+               fdt = copy_fdt(fdt);
+
+               if (image_setup_libfdt(&img, fdt, 0, NULL)) {
                        printf("ERROR: Failed to process device tree\n");
                        return -EINVAL;
                }
 
                /* Link to it in the efi tables */
                systab.tables[0].guid = EFI_FDT_GUID;
-               systab.tables[0].table = working_fdt;
+               systab.tables[0].table = fdt;
                systab.nr_tables = 1;
 
                /* And reserve the space in the memory map */
-               fdt_start = ((ulong)working_fdt) & ~EFI_PAGE_MASK;
-               fdt_end = ((ulong)working_fdt) + fdt_totalsize(working_fdt);
+               fdt_start = ((ulong)fdt) & ~EFI_PAGE_MASK;
+               fdt_end = ((ulong)fdt) + fdt_totalsize(fdt);
                fdt_size = (fdt_end - fdt_start) + EFI_PAGE_MASK;
                fdt_pages = fdt_size >> EFI_PAGE_SHIFT;
                /* Give a bootloader the chance to modify the device tree */
                fdt_pages += 2;
                efi_add_memory_map(fdt_start, fdt_pages,
                                   EFI_BOOT_SERVICES_DATA, true);
-
        } else {
-               printf("WARNING: No device tree loaded, expect boot to fail\n");
+               printf("WARNING: Invalid device tree, expect boot to fail\n");
                systab.nr_tables = 0;
        }
 
@@ -156,8 +209,8 @@ static unsigned long do_bootefi_exec(void *efi)
 /* Interpreter command to boot an arbitrary EFI image from memory */
 static int do_bootefi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
-       char *saddr;
-       unsigned long addr;
+       char *saddr, *sfdt;
+       unsigned long addr, fdt_addr = 0;
        int r = 0;
 
        if (argc < 2)
@@ -166,8 +219,13 @@ static int do_bootefi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
        addr = simple_strtoul(saddr, NULL, 16);
 
+       if (argc > 2) {
+               sfdt = argv[2];
+               fdt_addr = simple_strtoul(sfdt, NULL, 16);
+       }
+
        printf("## Starting EFI application at 0x%08lx ...\n", addr);
-       r = do_bootefi_exec((void *)addr);
+       r = do_bootefi_exec((void *)addr, (void*)fdt_addr);
        printf("## Application terminated, r = %d\n", r);
 
        if (r != 0)
@@ -178,32 +236,49 @@ static int do_bootefi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
 #ifdef CONFIG_SYS_LONGHELP
 static char bootefi_help_text[] =
-       "<image address>\n"
-       "  - boot EFI payload stored at address <image address>\n"
-       "\n"
-       "Since most EFI payloads want to have a device tree provided, please\n"
-       "make sure you load a device tree using the fdt addr command before\n"
-       "executing bootefi.\n";
+       "<image address> [fdt address]\n"
+       "  - boot EFI payload stored at address <image address>.\n"
+       "    If specified, the device tree located at <fdt address> gets\n"
+       "    exposed as EFI configuration table.\n";
 #endif
 
 U_BOOT_CMD(
-       bootefi, 2, 0, do_bootefi,
+       bootefi, 3, 0, do_bootefi,
        "Boots an EFI payload from memory\n",
        bootefi_help_text
 );
 
-void efi_set_bootdev(const char *dev, const char *devnr)
+void efi_set_bootdev(const char *dev, const char *devnr, const char *path)
 {
-       char devname[16] = { 0 }; /* dp->str is u16[16] long */
+       __maybe_unused struct blk_desc *desc;
+       char devname[32] = { 0 }; /* dp->str is u16[32] long */
        char *colon;
 
        /* Assemble the condensed device name we use in efi_disk.c */
        snprintf(devname, sizeof(devname), "%s%s", dev, devnr);
        colon = strchr(devname, ':');
+
+#ifdef CONFIG_ISO_PARTITION
+       /* For ISOs we create partition block devices */
+       desc = blk_get_dev(dev, simple_strtol(devnr, NULL, 10));
+       if (desc && (desc->type != DEV_TYPE_UNKNOWN) &&
+           (desc->part_type == PART_TYPE_ISO)) {
+               if (!colon)
+                       snprintf(devname, sizeof(devname), "%s%s:1", dev,
+                                devnr);
+               colon = NULL;
+       }
+#endif
+
        if (colon)
                *colon = '\0';
 
-       /* Patch the bootefi_image_path to the target device */
+       /* Patch bootefi_device_path to the target device */
+       memset(bootefi_device_path[0].str, 0, sizeof(bootefi_device_path[0].str));
+       ascii2unicode(bootefi_device_path[0].str, devname);
+
+       /* Patch bootefi_image_path to the target file path */
        memset(bootefi_image_path[0].str, 0, sizeof(bootefi_image_path[0].str));
+       snprintf(devname, sizeof(devname), "%s", path);
        ascii2unicode(bootefi_image_path[0].str, devname);
 }
index be8f2899e93aa052be21a4cd5e154823575b8177..abfe5be17218580dea740698eab2460d79df1acc 100644 (file)
--- a/cmd/fs.c
+++ b/cmd/fs.c
@@ -27,7 +27,8 @@ U_BOOT_CMD(
 static int do_load_wrapper(cmd_tbl_t *cmdtp, int flag, int argc,
                                char * const argv[])
 {
-       efi_set_bootdev(argv[1], (argc > 2) ? argv[2] : "");
+       efi_set_bootdev(argv[1], (argc > 2) ? argv[2] : "",
+                       (argc > 4) ? argv[4] : "");
        return do_load(cmdtp, flag, argc, argv, FS_TYPE_ANY);
 }
 
index 9cf884ee58c1bc513eb7173826b953585a2eab74..b67563bd6836dd94664cdb9b52e9f5ffd024f7f1 100644 (file)
@@ -49,12 +49,13 @@ DECLARE_GLOBAL_DATA_PTR;
        !defined(CONFIG_ENV_IS_IN_NAND)         && \
        !defined(CONFIG_ENV_IS_IN_NVRAM)        && \
        !defined(CONFIG_ENV_IS_IN_ONENAND)      && \
+       !defined(CONFIG_ENV_IS_IN_SATA)         && \
        !defined(CONFIG_ENV_IS_IN_SPI_FLASH)    && \
        !defined(CONFIG_ENV_IS_IN_REMOTE)       && \
        !defined(CONFIG_ENV_IS_IN_UBI)          && \
        !defined(CONFIG_ENV_IS_NOWHERE)
 # error Define one of CONFIG_ENV_IS_IN_{EEPROM|FLASH|DATAFLASH|ONENAND|\
-SPI_FLASH|NVRAM|MMC|FAT|EXT4|REMOTE|UBI} or CONFIG_ENV_IS_NOWHERE
+SATA|SPI_FLASH|NVRAM|MMC|FAT|EXT4|REMOTE|UBI} or CONFIG_ENV_IS_NOWHERE
 #endif
 
 /*
index 9a4b8172f38c9fab375f89a3c11f020fef4525cf..b23f31200636e7b9bdbe6b54be0fb145cfaea635 100644 (file)
@@ -50,6 +50,7 @@ obj-$(CONFIG_ENV_IS_IN_EXT4) += env_ext4.o
 obj-$(CONFIG_ENV_IS_IN_NAND) += env_nand.o
 obj-$(CONFIG_ENV_IS_IN_NVRAM) += env_nvram.o
 obj-$(CONFIG_ENV_IS_IN_ONENAND) += env_onenand.o
+obj-$(CONFIG_ENV_IS_IN_SATA) += env_sata.o
 obj-$(CONFIG_ENV_IS_IN_SPI_FLASH) += env_sf.o
 obj-$(CONFIG_ENV_IS_IN_REMOTE) += env_remote.o
 obj-$(CONFIG_ENV_IS_IN_UBI) += env_ubi.o
diff --git a/common/env_sata.c b/common/env_sata.c
new file mode 100644 (file)
index 0000000..b0cee35
--- /dev/null
@@ -0,0 +1,127 @@
+/*
+ * (C) Copyright 2010-2016 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+/* #define DEBUG */
+
+#include <common.h>
+
+#include <command.h>
+#include <environment.h>
+#include <linux/stddef.h>
+#include <errno.h>
+#include <memalign.h>
+#include <sata.h>
+#include <search.h>
+
+#if defined(CONFIG_ENV_SIZE_REDUND) || defined(CONFIG_ENV_OFFSET_REDUND)
+#error ENV REDUND not supported
+#endif
+
+#if !defined(CONFIG_ENV_OFFSET) || !defined(CONFIG_ENV_SIZE)
+#error CONFIG_ENV_OFFSET or CONFIG_ENV_SIZE not defined
+#endif
+
+char *env_name_spec = "SATA";
+
+DECLARE_GLOBAL_DATA_PTR;
+
+__weak int sata_get_env_dev(void)
+{
+       return CONFIG_SYS_SATA_ENV_DEV;
+}
+
+int env_init(void)
+{
+       /* use default */
+       gd->env_addr = (ulong)&default_environment[0];
+       gd->env_valid = 1;
+
+       return 0;
+}
+
+#ifdef CONFIG_CMD_SAVEENV
+static inline int write_env(struct blk_desc *sata, unsigned long size,
+                           unsigned long offset, void *buffer)
+{
+       uint blk_start, blk_cnt, n;
+
+       blk_start = ALIGN(offset, sata->blksz) / sata->blksz;
+       blk_cnt   = ALIGN(size, sata->blksz) / sata->blksz;
+
+       n = blk_dwrite(sata, blk_start, blk_cnt, buffer);
+
+       return (n == blk_cnt) ? 0 : -1;
+}
+
+int saveenv(void)
+{
+       ALLOC_CACHE_ALIGN_BUFFER(env_t, env_new, 1);
+       struct blk_desc *sata = NULL;
+       int env_sata, ret;
+
+       if (sata_initialize())
+               return 1;
+
+       env_sata = sata_get_env_dev();
+
+       sata = sata_get_dev(env_sata);
+       if (sata == NULL) {
+               printf("Unknown SATA(%d) device for environment!\n",
+                      env_sata);
+               return 1;
+       }
+
+       ret = env_export(env_new);
+       if (ret)
+               return 1;
+
+       printf("Writing to SATA(%d)...", env_sata);
+       if (write_env(sata, CONFIG_ENV_SIZE, CONFIG_ENV_OFFSET, &env_new)) {
+               puts("failed\n");
+               return 1;
+       }
+
+       puts("done\n");
+       return 0;
+}
+#endif /* CONFIG_CMD_SAVEENV */
+
+static inline int read_env(struct blk_desc *sata, unsigned long size,
+                          unsigned long offset, void *buffer)
+{
+       uint blk_start, blk_cnt, n;
+
+       blk_start = ALIGN(offset, sata->blksz) / sata->blksz;
+       blk_cnt   = ALIGN(size, sata->blksz) / sata->blksz;
+
+       n = blk_dread(sata, blk_start, blk_cnt, buffer);
+
+       return (n == blk_cnt) ? 0 : -1;
+}
+
+void env_relocate_spec(void)
+{
+       ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE);
+       struct blk_desc *sata = NULL;
+       int env_sata;
+
+       if (sata_initialize())
+               return;
+
+       env_sata = sata_get_env_dev();
+
+       sata = sata_get_dev(env_sata);
+       if (sata == NULL) {
+               printf("Unknown SATA(%d) device for environment!\n",
+                      env_sata);
+               return;
+       }
+
+       if (read_env(sata, CONFIG_ENV_SIZE, CONFIG_ENV_OFFSET, buf))
+               return set_default_env(NULL);
+
+       env_import(buf, 1);
+}
index 10902876a100e1216a2974759c8186d6e0901302..e40c24a198450bbac785c8d15438b72c4710270f 100644 (file)
@@ -7,7 +7,6 @@ CONFIG_SPL_STACK_R_ADDR=0x82000000
 CONFIG_DEFAULT_DEVICE_TREE="am57xx-beagle-x15"
 CONFIG_SPL=y
 CONFIG_SPL_STACK_R=y
-CONFIG_SYS_EXTRA_OPTIONS="CONS_INDEX=3"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
index 7641db5051dd2e9c6eb7ff255ffa37d1e525b825..cb9171946809a67e6a51405dae44b9cc272ef653 100644 (file)
@@ -2,7 +2,6 @@ CONFIG_ARM=y
 CONFIG_OMAP54XX=y
 CONFIG_TARGET_BEAGLE_X15=y
 CONFIG_SPL=y
-CONFIG_SYS_EXTRA_OPTIONS="CONS_INDEX=3"
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_FLASH is not set
 CONFIG_CMD_GPIO=y
index ba57944b20452b49b15ce9f1d68515c7ee0b179d..538647d79bc2947eef3a5b627d8a410e9362bb6b 100644 (file)
@@ -9,3 +9,4 @@ CONFIG_CMD_GPIO=y
 CONFIG_SYS_NS16550=y
 CONFIG_USB=y
 CONFIG_USB_GADGET=y
+CONFIG_OF_LIBFDT=y
index da249926d9105c01400783e559fa906cdbf2980a..6626a1e3c6a66aae8da1416d6852659c846ffdab 100644 (file)
@@ -25,3 +25,4 @@ CONFIG_TIMER=y
 CONFIG_OMAP_TIMER=y
 CONFIG_USB=y
 CONFIG_USB_GADGET=y
+CONFIG_DM_MMC=y
index 9039b15df37a640a961f0cd42f206e32c445b3c8..5f500040c48c2dce0d13b42f2eb8061550b704c6 100644 (file)
@@ -24,3 +24,4 @@ CONFIG_TIMER=y
 CONFIG_OMAP_TIMER=y
 CONFIG_USB=y
 CONFIG_USB_GADGET=y
+CONFIG_DM_MMC=y
index 02873ce59ce9808bbaaca873aacd8dad78f63583..24ef9e86f5472795acf2624b720af7659566b9c4 100644 (file)
@@ -6,3 +6,4 @@ CONFIG_TARGET_GE_B450V3=y
 CONFIG_CMD_GPIO=y
 CONFIG_SPI_FLASH=y
 CONFIG_SPI_FLASH_STMICRO=y
+CONFIG_OF_LIBFDT=y
index 3d10b35094035f1286690e41e7e054023941944a..75c49c0a216c89d292d761d02d681094ce1eb348 100644 (file)
@@ -6,3 +6,4 @@ CONFIG_TARGET_GE_B650V3=y
 CONFIG_CMD_GPIO=y
 CONFIG_SPI_FLASH=y
 CONFIG_SPI_FLASH_STMICRO=y
+CONFIG_OF_LIBFDT=y
index e3f4a0a847596e4f7be82c29f489d3d793ed0c0c..85140cdb626f3dba92b9546fa8286e62b3df4f46 100644 (file)
@@ -6,3 +6,4 @@ CONFIG_TARGET_GE_B850V3=y
 CONFIG_CMD_GPIO=y
 CONFIG_SPI_FLASH=y
 CONFIG_SPI_FLASH_STMICRO=y
+CONFIG_OF_LIBFDT=y
index a3fa758ac3f1da1eefe153fcbf5ad54f9e142905..c843508516c44cdcd17817af91442f7953e1111b 100644 (file)
@@ -15,3 +15,5 @@ CONFIG_SPI_FLASH=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_DM_ETH=y
 CONFIG_SYS_NS16550=y
+CONFIG_TI_AEMIF=y
+CONFIG_CMD_NAND=y
index 83efcbba0fbb678511d3c7edbdc4df766f57a0a3..16270659375e1252fb85f8645068ba914224e2c5 100644 (file)
@@ -15,3 +15,5 @@ CONFIG_SPI_FLASH=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_DM_ETH=y
 CONFIG_SYS_NS16550=y
+CONFIG_TI_AEMIF=y
+CONFIG_CMD_NAND=y
index d2ebb1d466cddb2cc8a230bcaea519e72495080a..255f6d152ed6df5c3c6211000d1fdb6820a065c5 100644 (file)
@@ -15,3 +15,5 @@ CONFIG_SPI_FLASH=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_DM_ETH=y
 CONFIG_SYS_NS16550=y
+CONFIG_TI_AEMIF=y
+CONFIG_CMD_NAND=y
index d838baa32cbb74fd4802fe57fb3a02d12c3e9b40..22fd0578ef72a9596189e2ad47be4df4ea7293f2 100644 (file)
@@ -10,3 +10,5 @@ CONFIG_AUTOBOOT_STOP_STR="l"
 CONFIG_SPI_FLASH=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SYS_NS16550=y
+CONFIG_OF_LIBFDT=y
+# CONFIG_EFI_LOADER is not set
index 39ce550ff44f01e38c46521969149f1cc0dba6f5..144851426937ae183a43628140a076a71e20f004 100644 (file)
@@ -12,3 +12,5 @@ CONFIG_SYS_EXTRA_OPTIONS="SAMA5D4"
 CONFIG_SPI_FLASH=y
 CONFIG_USB=y
 CONFIG_USB_GADGET=y
+CONFIG_OF_LIBFDT=y
+# CONFIG_EFI_LOADER is not set
index 7cfed4a514bfd0df500562d61f3052ff82738784..07aa874760c2e67780ff3239b4f09b6daae9f9b6 100644 (file)
@@ -7,3 +7,5 @@ CONFIG_AUTOBOOT_KEYED=y
 CONFIG_AUTOBOOT_PROMPT="Hit SPACE in %d seconds to stop autoboot.\n"
 CONFIG_AUTOBOOT_STOP_STR=" "
 # CONFIG_CMD_SETEXPR is not set
+CONFIG_OF_LIBFDT=y
+# CONFIG_EFI_LOADER is not set
index 033d32b6156ef11dd2f1de057cd6913023847b5f..fb2e7b2674ed737b1d697b262dedb2790336582b 100644 (file)
@@ -4,3 +4,4 @@ CONFIG_TARGET_XPRESS=y
 CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/ccv/xpress/imximage.cfg"
 CONFIG_CMD_DHCP=y
 CONFIG_CMD_PING=y
+CONFIG_OF_LIBFDT=y
index c2b10756b4b601bd8e01d0f9d08fc551859aaa7e..4ac7ef0807baf8bcbb94425bf47952ae35b2f114 100644 (file)
@@ -5,3 +5,4 @@ CONFIG_SPL=y
 CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=arch/arm/imx-common/spl_sd.cfg"
 CONFIG_CMD_DHCP=y
 CONFIG_CMD_PING=y
+CONFIG_OF_LIBFDT=y
index 2977ccc8ddee8a17cb13ffe7c7653c906cadcd3e..d2fa63d15f0820f30585bb5d4de09c1b88de10ef 100644 (file)
@@ -1,7 +1,9 @@
 CONFIG_ARM=y
 CONFIG_TARGET_ZIPITZ2=y
+CONFIG_SYS_PROMPT="$ "
 # CONFIG_CMD_IMLS is not set
 # CONFIG_CMD_SETEXPR is not set
 # CONFIG_CMD_NET is not set
 # CONFIG_CMD_NFS is not set
-CONFIG_SYS_PROMPT="$ "
+CONFIG_OF_LIBFDT=y
+# CONFIG_EFI_LOADER is not set
index 2114faf64b7c6bbb85d7d75ad70aea14ce9fef51..9f5c50c73faba4cf2c51bd030f70401914a78092 100644 (file)
 
 static unsigned char tmpbuf[CD_SECTSIZE];
 
+unsigned long iso_dread(struct blk_desc *block_dev, lbaint_t start,
+                        lbaint_t blkcnt, void *buffer)
+{
+       unsigned long ret;
+
+       if (block_dev->blksz == 512) {
+               /* Convert from 2048 to 512 sector size */
+               start *= 4;
+               blkcnt *= 4;
+       }
+
+       ret = blk_dread(block_dev, start, blkcnt, buffer);
+
+       if (block_dev->blksz == 512)
+               ret /= 4;
+
+       return ret;
+}
+
 /* only boot records will be listed as valid partitions */
 int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
                           disk_partition_t *info, int verb)
@@ -39,12 +58,12 @@ int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
        iso_val_entry_t *pve = (iso_val_entry_t *)tmpbuf;
        iso_init_def_entry_t *pide;
 
-       if (dev_desc->blksz != CD_SECTSIZE)
+       if ((dev_desc->blksz != CD_SECTSIZE) && (dev_desc->blksz != 512))
                return -1;
 
        /* the first sector (sector 0x10) must be a primary volume desc */
        blkaddr=PVD_OFFSET;
-       if (blk_dread(dev_desc, PVD_OFFSET, 1, (ulong *)tmpbuf) != 1)
+       if (iso_dread(dev_desc, PVD_OFFSET, 1, (ulong *)tmpbuf) != 1)
                return -1;
        if(ppr->desctype!=0x01) {
                if(verb)
@@ -58,15 +77,13 @@ int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
                                ppr->stand_ident, dev_desc->devnum, part_num);
                return (-1);
        }
-       lastsect= ((ppr->firstsek_LEpathtab1_LE & 0x000000ff)<<24) +
-                 ((ppr->firstsek_LEpathtab1_LE & 0x0000ff00)<< 8) +
-                 ((ppr->firstsek_LEpathtab1_LE & 0x00ff0000)>> 8) +
-                 ((ppr->firstsek_LEpathtab1_LE & 0xff000000)>>24) ;
-       info->blksz=ppr->secsize_BE; /* assuming same block size for all entries */
+       lastsect = le32_to_cpu(ppr->firstsek_LEpathtab1_LE);
+       /* assuming same block size for all entries */
+       info->blksz = be16_to_cpu(ppr->secsize_BE);
        PRINTF(" Lastsect:%08lx\n",lastsect);
        for(i=blkaddr;i<lastsect;i++) {
                PRINTF("Reading block %d\n", i);
-               if (blk_dread(dev_desc, i, 1, (ulong *)tmpbuf) != 1)
+               if (iso_dread(dev_desc, i, 1, (ulong *)tmpbuf) != 1)
                        return -1;
                if(ppr->desctype==0x00)
                        break; /* boot entry found */
@@ -86,7 +103,7 @@ int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
        }
        bootaddr = get_unaligned_le32(pbr->pointer);
        PRINTF(" Boot Entry at: %08lX\n",bootaddr);
-       if (blk_dread(dev_desc, bootaddr, 1, (ulong *)tmpbuf) != 1) {
+       if (iso_dread(dev_desc, bootaddr, 1, (ulong *)tmpbuf) != 1) {
                if(verb)
                        printf ("** Can't read Boot Entry at %lX on %d:%d **\n",
                                bootaddr, dev_desc->devnum, part_num);
@@ -95,7 +112,7 @@ int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
        chksum=0;
        chksumbuf = (unsigned short *)tmpbuf;
        for(i=0;i<0x10;i++)
-               chksum+=((chksumbuf[i] &0xff)<<8)+((chksumbuf[i] &0xff00)>>8);
+               chksum += le16_to_cpu(chksumbuf[i]);
        if(chksum!=0) {
                if(verb)
                        printf("** Checksum Error in booting catalog validation entry on %d:%d **\n",
@@ -117,7 +134,7 @@ int part_get_info_iso_verb(struct blk_desc *dev_desc, int part_num,
        }
 #endif
        /* the validation entry seems to be ok, now search the "partition" */
-       entry_num=0;
+       entry_num=1;
        offset=0x20;
        strcpy((char *)info->type, "U-Boot");
        switch(dev_desc->if_type) {
@@ -194,7 +211,14 @@ found:
        }
        newblkaddr = get_unaligned_le32(pide->rel_block_addr);
        info->start=newblkaddr;
-       PRINTF(" part %d found @ %lx size %lx\n",part_num,newblkaddr,info->size);
+
+       if (dev_desc->blksz == 512) {
+               info->size *= 4;
+               info->start *= 4;
+               info->blksz = 512;
+       }
+
+       PRINTF(" part %d found @ %lx size %lx\n",part_num,info->start,info->size);
        return 0;
 }
 
@@ -227,7 +251,7 @@ static int part_test_iso(struct blk_desc *dev_desc)
 {
        disk_partition_t info;
 
-       return part_get_info_iso_verb(dev_desc, 0, &info, 0);
+       return part_get_info_iso_verb(dev_desc, 1, &info, 1);
 }
 
 U_BOOT_PART_TYPE(iso) = {
index dace0f87dc94c52275aba689c232f34c083cc8e2..045784f4d4c6d68bdf15da42cb3828b0e1c040ef 100644 (file)
@@ -29,8 +29,8 @@ typedef struct iso_pri_rec {
        char                                    sysid[32];              /* system Identifier */
        char                                    volid[32];              /* volume Identifier */
        unsigned char zeros1[8];                /* unused */
-       unsigned long volsiz_LE;                /* volume size Little Endian */
-       unsigned long volsiz_BE;                /* volume size Big Endian */
+       unsigned int volsiz_LE;         /* volume size Little Endian */
+       unsigned int volsiz_BE;         /* volume size Big Endian */
        unsigned char zeros2[32];               /* unused */
        unsigned short setsize_LE;      /* volume set size LE */
        unsigned short setsize_BE;      /* volume set size BE */
@@ -38,12 +38,12 @@ typedef struct iso_pri_rec {
        unsigned short seqnum_BE;               /* volume sequence number BE */
        unsigned short secsize_LE;      /* sector size LE */
        unsigned short secsize_BE;      /* sector size BE */
-       unsigned long pathtablen_LE;/* Path Table size LE */
-       unsigned long pathtablen_BE;/* Path Table size BE */
-       unsigned long firstsek_LEpathtab1_LE; /* location of first occurrence of little endian type path table */
-       unsigned long firstsek_LEpathtab2_LE; /* location of optional occurrence of little endian type path table */
-       unsigned long firstsek_BEpathtab1_BE; /* location of first occurrence of big endian type path table */
-       unsigned long firstsek_BEpathtab2_BE; /* location of optional occurrence of big endian type path table */
+       unsigned int pathtablen_LE;/* Path Table size LE */
+       unsigned int pathtablen_BE;/* Path Table size BE */
+       unsigned int firstsek_LEpathtab1_LE; /* location of first occurrence of little endian type path table */
+       unsigned int firstsek_LEpathtab2_LE; /* location of optional occurrence of little endian type path table */
+       unsigned int firstsek_BEpathtab1_BE; /* location of first occurrence of big endian type path table */
+       unsigned int firstsek_BEpathtab2_BE; /* location of optional occurrence of big endian type path table */
        unsigned char rootdir[34];      /* directory record for root dir */
        char                                    volsetid[128];/* Volume set identifier */
        char                                    pubid[128];             /* Publisher identifier */
@@ -67,8 +67,8 @@ typedef struct iso_sup_rec {
        char                                    sysid[32];              /* system Identifier */
        char                                    volid[32];              /* volume Identifier */
        unsigned char zeros1[8];                /* unused */
-       unsigned long volsiz_LE;                /* volume size Little Endian */
-       unsigned long volsiz_BE;                /* volume size Big Endian */
+       unsigned int volsiz_LE;         /* volume size Little Endian */
+       unsigned int volsiz_BE;         /* volume size Big Endian */
        unsigned char escapeseq[32];/* Escape sequences */
        unsigned short setsize_LE;      /* volume set size LE */
        unsigned short setsize_BE;      /* volume set size BE */
@@ -76,12 +76,12 @@ typedef struct iso_sup_rec {
        unsigned short seqnum_BE;               /* volume sequence number BE */
        unsigned short secsize_LE;      /* sector size LE */
        unsigned short secsize_BE;      /* sector size BE */
-       unsigned long pathtablen_LE;/* Path Table size LE */
-       unsigned long pathtablen_BE;/* Path Table size BE */
-       unsigned long firstsek_LEpathtab1_LE; /* location of first occurrence of little endian type path table */
-       unsigned long firstsek_LEpathtab2_LE; /* location of optional occurrence of little endian type path table */
-       unsigned long firstsek_BEpathtab1_BE; /* location of first occurrence of big endian type path table */
-       unsigned long firstsek_BEpathtab2_BE; /* location of optional occurrence of big endian type path table */
+       unsigned int pathtablen_LE;/* Path Table size LE */
+       unsigned int pathtablen_BE;/* Path Table size BE */
+       unsigned int firstsek_LEpathtab1_LE; /* location of first occurrence of little endian type path table */
+       unsigned int firstsek_LEpathtab2_LE; /* location of optional occurrence of little endian type path table */
+       unsigned int firstsek_BEpathtab1_BE; /* location of first occurrence of big endian type path table */
+       unsigned int firstsek_BEpathtab2_BE; /* location of optional occurrence of big endian type path table */
        unsigned char rootdir[34];      /* directory record for root dir */
        char                                    volsetid[128];/* Volume set identifier */
        char                                    pubid[128];             /* Publisher identifier */
@@ -104,10 +104,10 @@ typedef struct iso_part_rec {
        unsigned char unused;
        char                                    sysid[32];               /* system Identifier */
        char                                    volid[32];              /* volume partition Identifier */
-       unsigned long partloc_LE;               /* volume partition location LE */
-       unsigned long partloc_BE;               /* volume partition location BE */
-       unsigned long partsiz_LE;               /* volume partition size LE */
-       unsigned long partsiz_BE;               /* volume partition size BE */
+       unsigned int partloc_LE;                /* volume partition location LE */
+       unsigned int partloc_BE;                /* volume partition location BE */
+       unsigned int partsiz_LE;                /* volume partition size LE */
+       unsigned int partsiz_BE;                /* volume partition size BE */
 }iso_part_rec_t;
 
 
index 9a2de5088b9a1ce14eae3902f6cd292a83cc4fcc..2b0eab5ddec3170800cf0e34f3b34f568a3d6df3 100644 (file)
@@ -1,53 +1,77 @@
-This patch series adds support for ext4 ls,load and write features in uboot
-Journaling is supported for write feature.
+U-Boot supports access of both ext2 and ext4 filesystems, either in read-only
+mode or in read-write mode.
 
-To enable support for the ext4 (and ext2) filesystem implementation,
-#define CONFIG_FS_EXT4
+First, to enable support for both ext4 (and, automatically, ext2 as well),
+but without selecting the corresponding commands, use one of:
 
-If you want write support,
-#define CONFIG_EXT4_WRITE
+  #define CONFIG_FS_EXT4       (for read-only)
+  #define CONFIG_EXT4_WRITE    (for read-write)
 
-To Enable ext2 ls and load commands, modify the board specific config file with
-#define CONFIG_CMD_EXT2
-This automatically defines CONFIG_FS_EXT4 for you.
+Next, to select the ext2-related commands:
 
-To Enable ext4 ls and load commands, modify the board specific config file with
-#define CONFIG_CMD_EXT4
-This automatically defines CONFIG_FS_EXT4 for you.
+  * ext2ls
+  * ext2load
 
-To enable ext4 write command, modify the board specific config file with
-#define CONFIG_CMD_EXT4
-#define CONFIG_CMD_EXT4_WRITE
-These automatically define CONFIG_FS_EXT4 and CONFIG_EXT4_WRITE for you.
+or ext4-related commands:
 
-Also relevant are the generic filesystem commands,
-#define CONFIG_CMD_FS_GENERIC
-This does not automatically enable EXT4 support for you.
+  * ext4size
+  * ext4ls
+  * ext4load
 
-Steps to test:
+use one or both of:
 
-1. After applying the patch, ext4 specific commands can be seen
-   in the boot loader prompt using
-       UBOOT #help
+  #define CONFIG_CMD_EXT2
+  #define CONFIG_CMD_EXT4
+
+Selecting either of the above automatically defines CONFIG_FS_EXT4 if it
+wasn't defined already.
+
+In addition, to get the write access command "ext4write", use:
+
+  #define CONFIG_CMD_EXT4_WRITE
+
+which automatically defines CONFIG_EXT4_WRITE if it wasn't defined
+already.
+
+Also relevant are the generic filesystem commands, selected by:
+
+  #define CONFIG_CMD_FS_GENERIC
+
+This does not automatically enable EXT4 support for you, you still need
+to do that yourself.
+
+Some sample commands to test ext4 support:
 
+1. Check that the commands can be seen in the output of U-Boot help:
+
+       UBOOT #help
+       ...
        ext4load- load binary file from a Ext4 file system
        ext4ls  - list files in a directory (default /)
+       ext4size - determine a file's size
        ext4write- create a file in ext4 formatted partition
+       ...
+
+2. To list the files in an ext4-formatted partition, run:
 
-2. To list the files in ext4 formatted partition, execute
        ext4ls <interface> <dev[:part]> [directory]
+
        For example:
        UBOOT #ext4ls mmc 0:5 /usr/lib
 
-3. To read and load a file from an ext4 formatted partition to RAM, execute
+3. To read and load a file from an ext4-formatted partition to RAM, run:
+
        ext4load <interface> <dev[:part]> [addr] [filename] [bytes]
+
        For example:
        UBOOT #ext4load mmc 2:2 0x30007fc0 uImage
 
-4. To write a file to a ext4 formatted partition.
+4. To write a file to an ext4-formatted partition.
+
        a) First load a file to RAM at a particular address for example 0x30007fc0.
-       Now execute ext4write command
+       Now execute ext4write command:
        ext4write <interface> <dev[:part]> [filename] [Address] [sizebytes]
+
        For example:
        UBOOT #ext4write mmc 2:2 /boot/uImage 0x30007fc0 6183120
        (here 6183120 is the size of the file to be written)
index c82a94b7a50ca7272cca672cd64e052d09792ee1..118b66ed0e14c6828da5308abf01846c27b407e4 100644 (file)
@@ -30,6 +30,8 @@ source "drivers/input/Kconfig"
 
 source "drivers/led/Kconfig"
 
+source "drivers/memory/Kconfig"
+
 source "drivers/misc/Kconfig"
 
 source "drivers/mmc/Kconfig"
index d29642be77339e6a2da694aebe4739ed9c07ef7c..e3e783a74cfdb35d48e499a41c1270a0dba70ba2 100644 (file)
@@ -1061,6 +1061,7 @@ static int ata_io_flush(u8 port)
 
        memcpy((unsigned char *)pp->cmd_tbl, fis, 20);
        ahci_fill_cmd_slot(pp, cmd_fis_len);
+       ahci_dcache_flush_sata_cmd(pp);
        writel_with_flush(1, port_mmio + PORT_CMD_ISSUE);
 
        if (waiting_for_cmd_completed(port_mmio + PORT_CMD_ISSUE,
index 1abab7fef1701928d597b89884ed8aff0cace3f2..0b619758438f856fb664b572a007579139f39784 100644 (file)
@@ -50,7 +50,7 @@ DECLARE_GLOBAL_DATA_PTR;
 #define REG_EN_CTL_ENABLE      (1 << 7)
 
 struct pm8916_gpio_bank {
-       uint16_t pid; /* Peripheral ID on SPMI bus */
+       uint32_t pid; /* Peripheral ID on SPMI bus */
 };
 
 static int pm8916_gpio_set_direction(struct udevice *dev, unsigned offset,
diff --git a/drivers/memory/Kconfig b/drivers/memory/Kconfig
new file mode 100644 (file)
index 0000000..4fbb5aa
--- /dev/null
@@ -0,0 +1,18 @@
+#
+# Memory devices
+#
+
+menu "Memory Controller drivers"
+
+config TI_AEMIF
+       tristate "Texas Instruments AEMIF driver"
+       depends on ARCH_KEYSTONE
+       help
+         This driver is for the AEMIF module available in Texas Instruments
+         SoCs. AEMIF stands for Asynchronous External Memory Interface and
+         is intended to provide a glue-less interface to a variety of
+         asynchronuous memory devices like ASRAM, NOR and NAND memory. A total
+         of 256M bytes of any of these memories can be accessed at a given
+         time via four chip selects with 64M byte access per chip select.
+
+endmenu
index afe0b0646d352ef348fe564908ff1c4f8b0e164c..85a832bd420f6d706df9912b0eb3c161915c2469 100644 (file)
@@ -773,7 +773,8 @@ static int omap_hsmmc_ofdata_to_platdata(struct udevice *dev)
        struct mmc_config *cfg;
        int val;
 
-       priv->base_addr = (struct hsmmc *)dev_get_addr(dev);
+       priv->base_addr = map_physmem(dev_get_addr(dev), sizeof(struct hsmmc *),
+                                     MAP_NOCACHE);
        cfg = &priv->cfg;
 
        cfg->host_caps = MMC_MODE_HS_52MHz | MMC_MODE_HS;
@@ -819,6 +820,11 @@ static int omap_hsmmc_probe(struct udevice *dev)
        if (mmc == NULL)
                return -1;
 
+#ifdef OMAP_HSMMC_USE_GPIO
+       gpio_request_by_name(dev, "cd-gpios", 0, &priv->cd_gpio, GPIOD_IS_IN);
+       gpio_request_by_name(dev, "wp-gpios", 0, &priv->wp_gpio, GPIOD_IS_IN);
+#endif
+
        upriv->mmc = mmc;
 
        return 0;
index 9acf5f55f7362eb34a54252363e8c85939c9f0f6..d4c7d4adff1fd53fb1db33ec495ac175a84f4a81 100644 (file)
@@ -18,7 +18,7 @@ DECLARE_GLOBAL_DATA_PTR;
 #define REG_MASK 0xFF
 
 struct pm8916_priv {
-       uint16_t usid; /* Slave ID on SPMI bus */
+       uint32_t usid; /* Slave ID on SPMI bus */
 };
 
 static int pm8916_reg_count(struct udevice *dev)
index fc36bc0e85d67d808b166521d67149c5a802a7d9..7357bbfb26798ade1fb228140bcfd7f6e25bf052 100644 (file)
@@ -116,9 +116,9 @@ static int bcm283x_mu_serial_pending(struct udevice *dev, bool input)
 
        if (input) {
                WATCHDOG_RESET();
-               return lsr & BCM283X_MU_LSR_RX_READY;
+               return (lsr & BCM283X_MU_LSR_RX_READY) ? 1 : 0;
        } else {
-               return !(lsr & BCM283X_MU_LSR_TX_IDLE);
+               return (lsr & BCM283X_MU_LSR_TX_IDLE) ? 0 : 1;
        }
 }
 
index ad9045e4f0f3b64b92684cd2671fe1b699911412..7f673448c92d0cb71d894b203e05bc9ba3df9482 100644 (file)
 #endif
 
 #ifdef BOOTEFI_NAME
+#if defined(CONFIG_ARM) && !defined(CONFIG_ARM64)
+/*
+ * On 32bit ARM systems there is a reasonable number of systems that follow
+ * the $soc-$board$boardver.dtb name scheme for their device trees. Use that
+ * scheme if we don't have an explicit fdtfile variable.
+ */
+#define BOOTENV_EFI_SET_FDTFILE_FALLBACK                                  \
+       "if test -z \"${fdtfile}\" -a -n \"${soc}\"; then "               \
+         "setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; "           \
+       "fi; "
+#else
+#define BOOTENV_EFI_SET_FDTFILE_FALLBACK
+#endif
+
+
 #define BOOTENV_SHARED_EFI                                                \
        "boot_efi_binary="                                                \
                "load ${devtype} ${devnum}:${distro_bootpart} "           \
                        "${kernel_addr_r} efi/boot/"BOOTEFI_NAME"; "      \
-               "bootefi ${kernel_addr_r}\0"                              \
+               "if fdt addr ${fdt_addr_r}; then "                        \
+                       "bootefi ${kernel_addr_r} ${fdt_addr_r};"         \
+               "else"                                                    \
+                       "bootefi ${kernel_addr_r} ${fdtcontroladdr};"     \
+               "fi\0"                                                    \
        \
        "load_efi_dtb="                                                   \
                "load ${devtype} ${devnum}:${distro_bootpart} "           \
-                       "${fdt_addr_r} ${prefix}${fdtfile}; "             \
-               "fdt addr ${fdt_addr_r}\0"                                \
+                       "${fdt_addr_r} ${prefix}${efi_fdtfile}\0"         \
        \
        "efi_dtb_prefixes=/ /dtb/ /dtb/current/\0"                        \
        "scan_dev_for_efi="                                               \
+               "setenv efi_fdtfile ${fdtfile}; "                         \
+               BOOTENV_EFI_SET_FDTFILE_FALLBACK                          \
                "for prefix in ${efi_dtb_prefixes}; do "                  \
                        "if test -e ${devtype} "                          \
                                        "${devnum}:${distro_bootpart} "   \
-                                       "${prefix}${fdtfile}; then "      \
+                                       "${prefix}${efi_fdtfile}; then "  \
                                "run load_efi_dtb; "                      \
                        "fi;"                                             \
                "done;"                                                   \
                                        "efi/boot/"BOOTEFI_NAME"; "       \
                                "run boot_efi_binary; "                   \
                                "echo EFI LOAD FAILED: continuing...; "   \
-               "fi; \0"
+               "fi; "                                                    \
+               "setenv efi_fdtfile\0"
 #define SCAN_DEV_FOR_EFI "run scan_dev_for_efi;"
 #else
 #define BOOTENV_SHARED_EFI
index 2ba7cf4616ab5f9a1317d1bb7ff6b80e64ede5c3..5cc2af8c3325d74aae702dc8d87b28418242a205 100644 (file)
@@ -62,7 +62,9 @@
 #define CONFIG_MENU
 #define CONFIG_DOS_PARTITION
 #define CONFIG_EFI_PARTITION
+#define CONFIG_ISO_PARTITION
 #define CONFIG_SUPPORT_RAW_INITRD
 #define CONFIG_SYS_HUSH_PARSER
+#define CONFIG_ENV_VARS_UBOOT_CONFIG
 
 #endif /* _CONFIG_CMD_DISTRO_DEFAULTS_H */
index cf25bdebe879642ccec3b69d8288c9bcc18c1d6a..052a1fa9e86df0e14f368f72e16a380c0749ef25 100644 (file)
 
 #define CONFIG_BAUDRATE                        115200
 
-#define CONFIG_ENV_SIZE                        0x10000
-#define CONFIG_ENV_IS_NOWHERE
+/* must fit into GPT:u-boot-env partition */
+#define CONFIG_ENV_IS_IN_MMC
+#define CONFIG_SYS_MMC_ENV_DEV         0
+#define CONFIG_ENV_OFFSET              (0x00011a00 * 512)
+#define CONFIG_ENV_SIZE                        (8 * 512)
 
 #define CONFIG_SYS_NO_FLASH    /* Not using NAND/NOR unmanaged flash */
 
index 7f57a54061619f85f12a7b6e5e6eaa9a3d7a120a..8cf15d2cc864a64436b3755e23c921a41c6a1189 100644 (file)
@@ -72,7 +72,6 @@
 #define CONFIG_CMD_MMC
 #define CONFIG_GENERIC_MMC
 #define CONFIG_CMD_FAT
-#define CONFIG_CMD_EXT3
 #define CONFIG_CMD_EXT4
 #define CONFIG_DOS_PARTITION
 
index a63440fe8b79dbb1db2175f764ed937bd3310ca5..edf8cfb1ca78f9738d5ad63a88ee0a406a1fbb6a 100644 (file)
@@ -27,6 +27,8 @@
 #define CONFIG_SYS_LOAD_ADDR           (CONFIG_SYS_SDRAM_BASE + 0x80000)
 #define CONFIG_SYS_BOOTM_LEN           0x1000000 /* 16MB max kernel size */
 
+#define CONFIG_SYS_CACHELINE_SIZE      64
+
 /* UART */
 #define CONFIG_BAUDRATE                        115200
 
@@ -126,10 +128,10 @@ REFLASH(dragonboard/u-boot.img, 8)\
        "fdt_high=0xffffffffffffffff\0" \
        "initrd_high=0xffffffffffffffff\0" \
        "linux_image=Image\0" \
-       "linux_addr=0x81000000\0"\
-       "fdt_image=apq8016-sbc.dtb\0" \
-       "fdt_addr=0x83000000\0"\
-       "ramdisk_addr=0x84000000\0"\
+       "kernel_addr_r=0x81000000\0"\
+       "fdtfile=apq8016-sbc.dtb\0" \
+       "fdt_addr_r=0x83000000\0"\
+       "ramdisk_addr_r=0x84000000\0"\
        BOOTENV
 
 #define CONFIG_ENV_IS_NOWHERE
index 3e4aaf6cd65b66ee37baf02b6cfa2ca074a239d3..15905b984065c072449b75ef791efa07bc838d2e 100644 (file)
                "else echo U-Boot not downloaded..exiting;fi\0"         \
        "bootcmd=run net_nfs\0"
 
-/* Enable FIT images support */
-#define CONFIG_CMD_FDT
-
 #endif                         /* __CONFIG_H */
index 6fa4a9a0e4da035f4c37185dd70994b984de9cdd..3a9739ee4b3f79f1c157f612feb85211dfc20622 100644 (file)
 #define CONFIG_ENV_SPI_MODE            CONFIG_SF_DEFAULT_MODE
 #define CONFIG_ENV_SPI_MAX_HZ          CONFIG_SF_DEFAULT_SPEED
 
-#define CONFIG_OF_LIBFDT
-
 #ifndef CONFIG_SYS_DCACHE_OFF
 #define CONFIG_CMD_CACHE
 #endif
index 5855d81858ef5469a46a0561c4d756debea31ed0..de51d10068ab99f478cae511076c5751d317419d 100644 (file)
 #define CONFIG_VERSION_VARIABLE
 
 #define CONFIG_IMAGE_FORMAT_LEGACY
-#define CONFIG_CMD_FDT
 #define CONFIG_CMD_HASH
 #define CONFIG_SHA1
 #define CONFIG_SHA256
index 79fa3c476ad1726ec24078d564891d059bdce60b..b6d4a79564c24be1c201e4d446a506cf55f55bc1 100644 (file)
 #define CONFIG_SYS_LONGHELP
 #define CONFIG_CRC32_VERIFY
 #define CONFIG_MX_CYCLIC
-#define CONFIG_OF_LIBFDT
 
 /*
  * Linux Information
  */
 #ifdef CONFIG_MMC
 #define CONFIG_DOS_PARTITION
-#define CONFIG_CMD_EXT3
 #define CONFIG_CMD_EXT4
 #define CONFIG_CMD_FAT
 #define CONFIG_CMD_MMC
index e061a101aee6299fc371e334e61f5bd4958b16a3..8a80b954a68dd57b7642557a96e2dfc9ebff11ab 100644 (file)
 #define CONFIG_LOADADDR                0x20800000
 #define CONFIG_BOOTCOMMAND     "run mmc_mmc"
 #define CONFIG_SYS_LOAD_ADDR   CONFIG_LOADADDR
-#define CONFIG_OF_LIBFDT
 
 /*
  * Extra Environments
index 78faaec6479ad34b3208431887a6f20fdd74fd3b..fccfb4891c6b7945649e3de7a3d5d54b3e094f8f 100644 (file)
 #define CONFIG_BOOTP_GATEWAY
 #define CONFIG_BOOTP_HOSTNAME
 
-/*
- * Handover flattened device tree (dtb file) to Linux kernel
- */
-#define CONFIG_OF_LIBFDT       1
-
 /*-----------------------------------------------------------------------
  * SDHC Configuration
  */
index cc224674421994158088cf7b32c0c4c664d2a300..2dd7fc0f7ccc5a7e1cb70ba1ee3e2da5b1534e50 100644 (file)
@@ -29,7 +29,6 @@
 #define CONFIG_SANDBOX_BITS_PER_LONG   64
 
 #define CONFIG_LMB
-#define CONFIG_CMD_FDT
 #define CONFIG_ANDROID_BOOT_IMAGE
 
 #define CONFIG_CMD_PCI
index df2a514b5174ddac46df7e34145d21d35e01e532..8ea31a6b33b337a49e277a42dffc9566bee90e11 100644 (file)
 #define CONFIG_BOOTCOUNT_LIMIT
 #define CONFIG_BOOTCOUNT_ENV
 
-/* Enable Device-Tree (FDT) support */
-#define CONFIG_CMD_FDT
-
 #endif /* ! __CONFIG_SIEMENS_AM33X_COMMON_H */
index db820ba7fed62d058cfd738c48e8cd68e5ccb8c9..7dcb82b53b6aaac981c4ac706c8f70f2fca6f7a7 100644 (file)
 # undef CONFIG_CMD_NFS
 #endif /* CONFIG_MACB */
 
-#define CONFIG_CMD_FDT
-
 #ifdef CONFIG_SPL_BUILD
 #define CONFIG_SYS_INIT_SP_ADDR                0x301000
 #define CONFIG_SPL_STACK_R
index 807ab6574eb5144b38ee10e79833caa5ae5f7f56..e94812bf5a78aa30c8da397f281cc75b0a56f6b3 100644 (file)
@@ -11,7 +11,6 @@
 #define CONFIG_SYS_THUMB_BUILD
 /*#define CONFIG_SYS_NO_FLASH*/
 
-#define CONFIG_OF_LIBFDT
 #define CONFIG_BOARD_EARLY_INIT_F
 
 #define CONFIG_SYS_FLASH_BASE          0x08000000
index 41185a159786a51c91643aed3b6d88f4738afcfd..be3c29955f209ada41b3097f28b3b5e3b547dbb3 100644 (file)
 /* SerDes */
 #define CONFIG_TI_KEYSTONE_SERDES
 
-/* AEMIF */
-#define CONFIG_TI_AEMIF
 #define CONFIG_AEMIF_CNTRL_BASE                KS2_AEMIF_CNTRL_BASE
 
 /* I2C Configuration */
 #define CONFIG_CMD_DHCP
 #define CONFIG_CMD_PING
 #define CONFIG_CMD_SAVES
-#define CONFIG_CMD_NAND
 #define CONFIG_CMD_UBI
 #define CONFIG_CMD_UBIFS
 #define CONFIG_CMD_SF
index d01d88b33f4d34afb65838f60d5a1e532084ec88..831b9401d1df2a6933769188a72c0e46a16b03cc 100644 (file)
 #define CONFIG_SYS_NO_FLASH
 #endif
 
-#define CONFIG_OF_LIBFDT       1
 #define CONFIG_BAUDRATE                        115200
 /* The following table includes the supported baudrates */
 # define CONFIG_SYS_BAUDRATE_TABLE \
index 9bc536bdbbeac1d005d7948b700372e139c1a6b5..dc7a75b4ceb80eebf9c26bcf961100fabbb78efa 100644 (file)
@@ -77,7 +77,6 @@
 #define CONFIG_SYS_MMC_ENV_PART                1       /* boot parition */
 #define CONFIG_MMCROOT                 "/dev/mmcblk0p2"  /* USDHC2 */
 
-#define CONFIG_OF_LIBFDT
 #define CONFIG_CMD_BOOTZ
 #define CONFIG_CMD_BMODE
 #define CONFIG_CMD_CACHE
index 5200e021916809fc3056095179602c6a518326ad..46836d578c0ab432c7e842730c30c4edb31cb367 100644 (file)
@@ -45,7 +45,6 @@
 #define        CONFIG_SETUP_MEMORY_TAGS
 #define        CONFIG_SYS_TEXT_BASE            0x0
 #define        CONFIG_LZMA                     /* LZMA compression support */
-#define        CONFIG_OF_LIBFDT
 
 /*
  * Serial Console Configuration
index 696044850b85d760acc163c87199a3abaeea3c84..51d7586e6347f8e6244b845cf7dc1d59a1e037dd 100644 (file)
@@ -259,7 +259,7 @@ struct efi_device_path {
 
 struct efi_device_path_file_path {
        struct efi_device_path dp;
-       u16 str[16];
+       u16 str[32];
 };
 
 #define BLOCK_IO_GUID \
index 9f61fc4b122b830cd161cbc0a097ee7135a5c1c5..88b8149b147585aeca9ef07bcdf02cc3356b7b95 100644 (file)
@@ -112,7 +112,7 @@ efi_status_t efi_exit_func(efi_status_t ret);
 /* Call this to relocate the runtime section to an address space */
 void efi_runtime_relocate(ulong offset, struct efi_mem_desc *map);
 /* Call this to set the current device name */
-void efi_set_bootdev(const char *dev, const char *devnr);
+void efi_set_bootdev(const char *dev, const char *devnr, const char *path);
 
 /* Generic EFI memory allocator, call this to get memory */
 void *efi_alloc(uint64_t len, int memory_type);
@@ -155,6 +155,7 @@ static inline void ascii2unicode(u16 *unicode, char *ascii)
 
 /* No loader configured, stub out EFI_ENTRY */
 static inline void efi_restore_gd(void) { }
-static inline void efi_set_bootdev(const char *dev, const char *devnr) { }
+static inline void efi_set_bootdev(const char *dev, const char *devnr,
+                                  const char *path) { }
 
 #endif
index aaff947596f04c13cdc67cd70e6378c41f42c8bf..28e5b7fce59ce1b4470b4c82fd7e5d5c09899b52 100644 (file)
@@ -27,6 +27,8 @@ struct efi_disk_obj {
        struct efi_block_io_media media;
        /* EFI device path to this block device */
        struct efi_device_path_file_path *dp;
+       /* Offset into disk for simple partitions */
+       lbaint_t offset;
 };
 
 static efi_status_t efi_disk_open_block(void *handle, efi_guid_t *protocol,
@@ -81,6 +83,7 @@ static efi_status_t EFIAPI efi_disk_rw_blocks(struct efi_block_io *this,
                return EFI_EXIT(EFI_DEVICE_ERROR);
        blksz = desc->blksz;
        blocks = buffer_size / blksz;
+       lba += diskobj->offset;
 
 #ifdef DEBUG_EFI
        printf("EFI: %s:%d blocks=%x lba=%"PRIx64" blksz=%x dir=%d\n", __func__,
@@ -138,6 +141,78 @@ static const struct efi_block_io block_io_disk_template = {
        .flush_blocks = &efi_disk_flush_blocks,
 };
 
+static void efi_disk_add_dev(char *name,
+                            const struct block_drvr *cur_drvr,
+                            const struct blk_desc *desc,
+                            int dev_index,
+                            lbaint_t offset)
+{
+       struct efi_disk_obj *diskobj;
+       struct efi_device_path_file_path *dp;
+       int objlen = sizeof(*diskobj) + (sizeof(*dp) * 2);
+
+       diskobj = calloc(1, objlen);
+
+       /* Fill in object data */
+       diskobj->parent.protocols[0].guid = &efi_block_io_guid;
+       diskobj->parent.protocols[0].open = efi_disk_open_block;
+       diskobj->parent.protocols[1].guid = &efi_guid_device_path;
+       diskobj->parent.protocols[1].open = efi_disk_open_dp;
+       diskobj->parent.handle = diskobj;
+       diskobj->ops = block_io_disk_template;
+       diskobj->ifname = cur_drvr->name;
+       diskobj->dev_index = dev_index;
+       diskobj->offset = offset;
+
+       /* Fill in EFI IO Media info (for read/write callbacks) */
+       diskobj->media.removable_media = desc->removable;
+       diskobj->media.media_present = 1;
+       diskobj->media.block_size = desc->blksz;
+       diskobj->media.io_align = desc->blksz;
+       diskobj->media.last_block = desc->lba;
+       diskobj->ops.media = &diskobj->media;
+
+       /* Fill in device path */
+       dp = (void*)&diskobj[1];
+       diskobj->dp = dp;
+       dp[0].dp.type = DEVICE_PATH_TYPE_MEDIA_DEVICE;
+       dp[0].dp.sub_type = DEVICE_PATH_SUB_TYPE_FILE_PATH;
+       dp[0].dp.length = sizeof(*dp);
+       ascii2unicode(dp[0].str, name);
+
+       dp[1].dp.type = DEVICE_PATH_TYPE_END;
+       dp[1].dp.sub_type = DEVICE_PATH_SUB_TYPE_END;
+       dp[1].dp.length = sizeof(*dp);
+
+       /* Hook up to the device list */
+       list_add_tail(&diskobj->parent.link, &efi_obj_list);
+}
+
+static int efi_disk_create_eltorito(struct blk_desc *desc,
+                                   const struct block_drvr *cur_drvr,
+                                   int diskid)
+{
+       int disks = 0;
+#ifdef CONFIG_ISO_PARTITION
+       char devname[32] = { 0 }; /* dp->str is u16[32] long */
+       disk_partition_t info;
+       int part = 1;
+
+       if (desc->part_type != PART_TYPE_ISO)
+               return 0;
+
+       while (!part_get_info(desc, part, &info)) {
+               snprintf(devname, sizeof(devname), "%s%d:%d", cur_drvr->name,
+                        diskid, part);
+               efi_disk_add_dev(devname, cur_drvr, desc, diskid, info.start);
+               part++;
+               disks++;
+       }
+#endif
+
+       return disks;
+}
+
 /*
  * U-Boot doesn't have a list of all online disk devices. So when running our
  * EFI payload, we scan through all of the potentially available ones and
@@ -156,10 +231,7 @@ int efi_disk_register(void)
                printf("Scanning disks on %s...\n", cur_drvr->name);
                for (i = 0; i < 4; i++) {
                        struct blk_desc *desc;
-                       struct efi_disk_obj *diskobj;
-                       struct efi_device_path_file_path *dp;
-                       int objlen = sizeof(*diskobj) + (sizeof(*dp) * 2);
-                       char devname[16] = { 0 }; /* dp->str is u16[16] long */
+                       char devname[32] = { 0 }; /* dp->str is u16[32] long */
 
                        desc = blk_get_dev(cur_drvr->name, i);
                        if (!desc)
@@ -167,43 +239,16 @@ int efi_disk_register(void)
                        if (desc->type == DEV_TYPE_UNKNOWN)
                                continue;
 
-                       diskobj = calloc(1, objlen);
-
-                       /* Fill in object data */
-                       diskobj->parent.protocols[0].guid = &efi_block_io_guid;
-                       diskobj->parent.protocols[0].open = efi_disk_open_block;
-                       diskobj->parent.protocols[1].guid = &efi_guid_device_path;
-                       diskobj->parent.protocols[1].open = efi_disk_open_dp;
-                       diskobj->parent.handle = diskobj;
-                       diskobj->ops = block_io_disk_template;
-                       diskobj->ifname = cur_drvr->name;
-                       diskobj->dev_index = i;
-
-                       /* Fill in EFI IO Media info (for read/write callbacks) */
-                       diskobj->media.removable_media = desc->removable;
-                       diskobj->media.media_present = 1;
-                       diskobj->media.block_size = desc->blksz;
-                       diskobj->media.io_align = desc->blksz;
-                       diskobj->media.last_block = desc->lba;
-                       diskobj->ops.media = &diskobj->media;
-
-                       /* Fill in device path */
-                       dp = (void*)&diskobj[1];
-                       diskobj->dp = dp;
-                       dp[0].dp.type = DEVICE_PATH_TYPE_MEDIA_DEVICE;
-                       dp[0].dp.sub_type = DEVICE_PATH_SUB_TYPE_FILE_PATH;
-                       dp[0].dp.length = sizeof(*dp);
                        snprintf(devname, sizeof(devname), "%s%d",
                                 cur_drvr->name, i);
-                       ascii2unicode(dp[0].str, devname);
-
-                       dp[1].dp.type = DEVICE_PATH_TYPE_END;
-                       dp[1].dp.sub_type = DEVICE_PATH_SUB_TYPE_END;
-                       dp[1].dp.length = sizeof(*dp);
-
-                       /* Hook up to the device list */
-                       list_add_tail(&diskobj->parent.link, &efi_obj_list);
+                       efi_disk_add_dev(devname, cur_drvr, desc, i, 0);
                        disks++;
+
+                       /*
+                        * El Torito images show up as block devices
+                        * in an EFI world, so let's create them here
+                        */
+                       disks += efi_disk_create_eltorito(desc, cur_drvr, i);
                }
        }
        printf("Found %d disks\n", disks);
index 8a1e249430ed8af69c84ebe86cfd8bce5b7950ca..71a3d192696cbb51cc63c7400dc80add2d93f88c 100644 (file)
@@ -220,7 +220,7 @@ efi_status_t efi_allocate_pages(int type, int memory_type,
        switch (type) {
        case 0:
                /* Any page */
-               addr = efi_find_free_memory(len, gd->ram_top);
+               addr = efi_find_free_memory(len, gd->start_addr_sp);
                if (!addr) {
                        r = EFI_NOT_FOUND;
                        break;
@@ -286,10 +286,13 @@ efi_status_t efi_get_memory_map(unsigned long *memory_map_size,
                               uint32_t *descriptor_version)
 {
        ulong map_size = 0;
+       int map_entries = 0;
        struct list_head *lhandle;
 
        list_for_each(lhandle, &efi_mem)
-               map_size += sizeof(struct efi_mem_desc);
+               map_entries++;
+
+       map_size = map_entries * sizeof(struct efi_mem_desc);
 
        *memory_map_size = map_size;
 
@@ -301,12 +304,14 @@ efi_status_t efi_get_memory_map(unsigned long *memory_map_size,
 
        /* Copy list into array */
        if (memory_map) {
+               /* Return the list in ascending order */
+               memory_map = &memory_map[map_entries - 1];
                list_for_each(lhandle, &efi_mem) {
                        struct efi_mem_list *lmem;
 
                        lmem = list_entry(lhandle, struct efi_mem_list, link);
                        *memory_map = lmem->desc;
-                       memory_map++;
+                       memory_map--;
                }
        }
 
@@ -315,9 +320,9 @@ efi_status_t efi_get_memory_map(unsigned long *memory_map_size,
 
 int efi_memory_init(void)
 {
-       uint64_t runtime_start, runtime_end, runtime_pages;
-       uint64_t uboot_start, uboot_pages;
-       uint64_t uboot_stack_size = 16 * 1024 * 1024;
+       unsigned long runtime_start, runtime_end, runtime_pages;
+       unsigned long uboot_start, uboot_pages;
+       unsigned long uboot_stack_size = 16 * 1024 * 1024;
        int i;
 
        /* Add RAM */
index 22bcd089f9c0d01ef197e89a8de29f1a5df8e71c..3ee27ca9cc624ec8031ccddc428338d89fe44e4d 100644 (file)
@@ -20,6 +20,13 @@ static efi_status_t EFI_RUNTIME_TEXT EFIAPI efi_unimplemented(void);
 static efi_status_t EFI_RUNTIME_TEXT EFIAPI efi_device_error(void);
 static efi_status_t EFI_RUNTIME_TEXT EFIAPI efi_invalid_parameter(void);
 
+#ifdef CONFIG_SYS_CACHELINE_SIZE
+#define EFI_CACHELINE_SIZE CONFIG_SYS_CACHELINE_SIZE
+#else
+/* Just use the greatest cache flush alignment requirement I'm aware of */
+#define EFI_CACHELINE_SIZE 128
+#endif
+
 #if defined(CONFIG_ARM64)
 #define R_RELATIVE     1027
 #define R_MASK         0xffffffffULL
@@ -194,7 +201,8 @@ void efi_runtime_relocate(ulong offset, struct efi_mem_desc *map)
 #endif
 
                *p = newaddr;
-               flush_dcache_range((ulong)p, (ulong)&p[1]);
+               flush_dcache_range((ulong)p & ~(EFI_CACHELINE_SIZE - 1),
+                       ALIGN((ulong)&p[1], EFI_CACHELINE_SIZE));
        }
 
 #ifndef IS_RELA
index 6d65ccccffa018582ed33497f5ae9361c6252f23..bc746d655e60aebc84c207c634728b3f1a4e1e40 100644 (file)
@@ -232,9 +232,8 @@ int gzwrite(unsigned char *src, int len,
                        gzwrite_progress(iteration++,
                                         totalfilled,
                                         szexpected);
-                       blocks_written = dev->block_write(dev, outblock,
-                                                         writeblocks,
-                                                         writebuf);
+                       blocks_written = blk_dwrite(dev, outblock,
+                                                   writeblocks, writebuf);
                        outblock += blocks_written;
                        if (ctrlc()) {
                                puts("abort\n");