summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/user/booting-linux.rst14
-rw-r--r--Makefile2
-rw-r--r--arch/arm/boards/animeo_ip/init.c1
-rw-r--r--arch/arm/boards/archosg9/board.c1
-rw-r--r--arch/arm/boards/at91sam9261ek/init.c2
-rw-r--r--arch/arm/boards/at91sam9n12ek/init.c1
-rw-r--r--arch/arm/boards/at91sam9x5ek/init.c1
-rw-r--r--arch/arm/boards/beagle/board.c1
-rw-r--r--arch/arm/boards/ccxmx51/ccxmx51.c2
-rw-r--r--arch/arm/boards/ccxmx53/flash-header-imx53-ccxmx53_1gib.imxcfg2
-rw-r--r--arch/arm/boards/ccxmx53/lowlevel.c41
-rw-r--r--arch/arm/boards/crystalfontz-cfa10036/cfa10036.c1
-rw-r--r--arch/arm/boards/datamodul-edm-qmx6/board.c1
-rw-r--r--arch/arm/boards/dss11/init.c1
-rw-r--r--arch/arm/boards/edb93xx/edb93xx.c4
-rw-r--r--arch/arm/boards/embedsky-e9/board.c5
-rw-r--r--arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c2
-rw-r--r--arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c3
-rw-r--r--arch/arm/boards/eukrea_cpuimx35/eukrea_cpuimx35.c2
-rw-r--r--arch/arm/boards/eukrea_cpuimx51/eukrea_cpuimx51.c2
-rw-r--r--arch/arm/boards/freescale-mx25-3ds/3stack.c2
-rw-r--r--arch/arm/boards/freescale-mx27-ads/imx27ads.c2
-rw-r--r--arch/arm/boards/freescale-mx28-evk/mx28-evk.c2
-rw-r--r--arch/arm/boards/freescale-mx35-3ds/3stack.c2
-rw-r--r--arch/arm/boards/freescale-mx51-babbage/board.c1
-rw-r--r--arch/arm/boards/freescale-mx53-smd/board.c2
-rw-r--r--arch/arm/boards/freescale-mx6-sabrelite/board.c1
-rw-r--r--arch/arm/boards/freescale-mx6-sabresd/board.c1
-rw-r--r--arch/arm/boards/friendlyarm-mini2440/mini2440.c2
-rw-r--r--arch/arm/boards/friendlyarm-mini6410/mini6410.c2
-rw-r--r--arch/arm/boards/friendlyarm-tiny210/tiny210.c1
-rw-r--r--arch/arm/boards/friendlyarm-tiny6410/development-board.c2
-rw-r--r--arch/arm/boards/guf-cupid/board.c2
-rw-r--r--arch/arm/boards/guf-neso/board.c2
-rw-r--r--arch/arm/boards/guf-vincell/board.c3
-rw-r--r--arch/arm/boards/karo-tx28/tx28-stk5.c2
-rw-r--r--arch/arm/boards/karo-tx51/tx51.c2
-rw-r--r--arch/arm/boards/karo-tx53/board.c2
-rw-r--r--arch/arm/boards/karo-tx6x/flash-header-tx6qp-2g.imxcfg183
-rw-r--r--arch/arm/boards/karo-tx6x/lowlevel.c20
-rw-r--r--arch/arm/boards/lubbock/board.c2
-rw-r--r--arch/arm/boards/mainstone/board.c2
-rw-r--r--arch/arm/boards/mmccpu/init.c1
-rw-r--r--arch/arm/boards/omap343xdsp/board.c1
-rw-r--r--arch/arm/boards/omap3evm/board.c1
-rw-r--r--arch/arm/boards/panda/board.c1
-rw-r--r--arch/arm/boards/phytec-phycard-imx27/pca100.c1
-rw-r--r--arch/arm/boards/phytec-phycard-omap3/pca-a-l1.c1
-rw-r--r--arch/arm/boards/phytec-phycard-omap4/pca-a-xl2.c1
-rw-r--r--arch/arm/boards/phytec-phycore-imx27/pcm970.c2
-rw-r--r--arch/arm/boards/phytec-phycore-imx31/pcm037.c2
-rw-r--r--arch/arm/boards/phytec-phycore-imx35/pcm043.c1
-rw-r--r--arch/arm/boards/phytec-phycore-omap4460/board.c1
-rw-r--r--arch/arm/boards/phytec-som-am335x/lowlevel.c1
-rw-r--r--arch/arm/boards/phytec-som-am335x/ram-timings.h20
-rw-r--r--arch/arm/boards/phytec-som-imx6/Makefile2
-rw-r--r--arch/arm/boards/phytec-som-imx6/board.c30
-rw-r--r--arch/arm/boards/phytec-som-imx6/defaultenv-physom-imx6-phycore/init/automount (renamed from arch/arm/boards/phytec-som-imx6/defaultenv-physom-imx6-mira/init/automount)3
-rw-r--r--arch/arm/boards/phytec-som-imx6/defaultenv-physom-imx6-phycore/init/bootsource19
-rw-r--r--arch/arm/boards/phytec-som-imx6/flash-header-phytec-pcm058-2gib.imxcfg8
-rw-r--r--arch/arm/boards/phytec-som-imx6/flash-header-phytec-pcm058dl-1gib.imxcfg8
-rw-r--r--arch/arm/boards/phytec-som-imx6/flash-header-phytec-pcm058dl.h24
-rw-r--r--arch/arm/boards/phytec-som-imx6/lowlevel.c3
-rw-r--r--arch/arm/boards/pm9261/init.c2
-rw-r--r--arch/arm/boards/pm9263/init.c1
-rw-r--r--arch/arm/boards/raspberry-pi/rpi-common.c6
-rw-r--r--arch/arm/boards/scb9328/scb9328.c2
-rw-r--r--arch/arm/boards/tqma6x/board.c1
-rw-r--r--arch/arm/boards/udoo/board.c1
-rw-r--r--arch/arm/boards/versatile/versatilepb.c2
-rw-r--r--arch/arm/boards/zylonite/board.c2
-rw-r--r--arch/arm/configs/imx_v7_defconfig2
-rw-r--r--arch/arm/dts/Makefile4
-rw-r--r--arch/arm/dts/am335x-phytec-phycard-som.dtsi16
-rw-r--r--arch/arm/dts/am335x-phytec-phycore-som.dtsi24
-rw-r--r--arch/arm/dts/am335x-phytec-phyflex-som.dtsi24
-rw-r--r--arch/arm/dts/imx25-karo-tx25.dts6
-rw-r--r--arch/arm/dts/imx27-phytec-phycard-s-rdk-bb.dts10
-rw-r--r--arch/arm/dts/imx27-phytec-phycore-rdk.dts12
-rw-r--r--arch/arm/dts/imx51-babbage.dts4
-rw-r--r--arch/arm/dts/imx51-genesi-efika-sb.dts8
-rw-r--r--arch/arm/dts/imx53-ccxmx53.dts1
-rw-r--r--arch/arm/dts/imx53-ccxmx53.dtsi15
-rw-r--r--arch/arm/dts/imx53-guf-vincell-lt.dts8
-rw-r--r--arch/arm/dts/imx53-mba53.dts4
-rw-r--r--arch/arm/dts/imx53-qsb-common.dtsi4
-rw-r--r--arch/arm/dts/imx53-voipac-dmm-668.dtsi10
-rw-r--r--arch/arm/dts/imx6dl-eltec-hipercam.dts8
-rw-r--r--arch/arm/dts/imx6dl-hummingboard.dts6
-rw-r--r--arch/arm/dts/imx6dl-phytec-phyboard-subra.dts17
-rw-r--r--arch/arm/dts/imx6dl-phytec-phycore-som-emmc.dts72
-rw-r--r--arch/arm/dts/imx6dl-phytec-phycore-som-nand.dts6
-rw-r--r--arch/arm/dts/imx6dl-wandboard.dts6
-rw-r--r--arch/arm/dts/imx6q-dmo-edmqmx6.dts18
-rw-r--r--arch/arm/dts/imx6q-embedsky-e9.dts12
-rw-r--r--arch/arm/dts/imx6q-guf-santaro.dts4
-rw-r--r--arch/arm/dts/imx6q-hummingboard.dts6
-rw-r--r--arch/arm/dts/imx6q-phytec-pcaaxl3.dtsi14
-rw-r--r--arch/arm/dts/imx6q-phytec-phyboard-alcor.dts1
-rw-r--r--arch/arm/dts/imx6q-phytec-phyboard-subra.dts20
-rw-r--r--arch/arm/dts/imx6q-phytec-phycore-som-emmc.dts21
-rw-r--r--arch/arm/dts/imx6q-phytec-phycore-som-nand.dts6
-rw-r--r--arch/arm/dts/imx6q-var-custom.dts6
-rw-r--r--arch/arm/dts/imx6q-var-som.dtsi6
-rw-r--r--arch/arm/dts/imx6q-wandboard.dts6
-rw-r--r--arch/arm/dts/imx6qdl-gw54xx.dtsi2
-rw-r--r--arch/arm/dts/imx6qdl-nitrogen6x.dtsi6
-rw-r--r--arch/arm/dts/imx6qdl-phytec-pfla02.dtsi33
-rw-r--r--arch/arm/dts/imx6qdl-phytec-phyboard-subra.dtsi30
-rw-r--r--arch/arm/dts/imx6qdl-phytec-phycore-som.dtsi21
-rw-r--r--arch/arm/dts/imx6qdl-sabrelite.dtsi6
-rw-r--r--arch/arm/dts/imx6qdl-sabresd.dtsi6
-rw-r--r--arch/arm/dts/imx6qdl-tx6x.dtsi2
-rw-r--r--arch/arm/dts/imx6s-riotboard.dts4
-rw-r--r--arch/arm/dts/imx6sx-sdb.dts4
-rw-r--r--arch/arm/dts/rk3188-radxarock.dts2
-rw-r--r--arch/arm/lib/bootm.c53
-rw-r--r--arch/arm/mach-at91/bootstrap.c16
-rw-r--r--arch/arm/mach-imx/esdctl.c4
-rw-r--r--arch/arm/mach-imx/iim.c2
-rw-r--r--arch/arm/mach-imx/include/mach/devices.h2
-rw-r--r--arch/arm/mach-omap/am33xx_bbu_nand.c2
-rw-r--r--arch/arm/mach-omap/am33xx_bbu_spi_mlo.c2
-rw-r--r--arch/arm/mach-omap/omap_devices.c2
-rw-r--r--arch/arm/mach-omap/omap_generic.c2
-rw-r--r--arch/arm/mach-omap/xload.c4
-rw-r--r--arch/arm/mach-socfpga/generic.c1
-rw-r--r--arch/arm/mach-socfpga/xload.c2
-rw-r--r--arch/arm/mach-tegra/include/mach/lowlevel.h7
-rw-r--r--arch/arm/mach-tegra/tegra20.c1
-rw-r--r--arch/blackfin/boards/ipe337/ipe337.c2
-rw-r--r--arch/efi/efi/efi.c2
-rw-r--r--arch/mips/mach-ar231x/ar231x.c2
-rw-r--r--arch/ppc/boards/freescale-p1010rdb/p1010rdb.c2
-rw-r--r--arch/ppc/boards/freescale-p1022ds/p1022ds.c2
-rw-r--r--arch/ppc/boards/freescale-p2020rdb/p2020rdb.c2
-rw-r--r--arch/ppc/boards/geip-da923rc/da923rc.c2
-rw-r--r--arch/ppc/boards/geip-da923rc/product_data.c1
-rw-r--r--arch/ppc/boards/pcm030/pcm030.c2
-rw-r--r--arch/x86/boards/x86_generic/intf_platform_ide.c2
-rw-r--r--arch/x86/boards/x86_generic/serial_ns16550.c2
-rw-r--r--commands/Kconfig13
-rw-r--r--commands/automount.c1
-rw-r--r--commands/boot.c6
-rw-r--r--commands/bootm.c1
-rw-r--r--commands/clk.c4
-rw-r--r--commands/crc.c5
-rw-r--r--commands/defaultenv.c4
-rw-r--r--commands/echo.c10
-rw-r--r--commands/edit.c2
-rw-r--r--commands/flash.c2
-rw-r--r--commands/hashsum.c2
-rw-r--r--commands/i2c.c4
-rw-r--r--commands/loadb.c7
-rw-r--r--commands/loadenv.c1
-rw-r--r--commands/loads.c6
-rw-r--r--commands/md.c1
-rw-r--r--commands/mem.c23
-rw-r--r--commands/memcmp.c1
-rw-r--r--commands/memcpy.c1
-rw-r--r--commands/memset.c1
-rw-r--r--commands/menu.c4
-rw-r--r--commands/miitool.c2
-rw-r--r--commands/mkdir.c1
-rw-r--r--commands/mm.c1
-rw-r--r--commands/mmc_extcsd.c83
-rw-r--r--commands/mw.c1
-rw-r--r--commands/rm.c1
-rw-r--r--commands/tftp.c4
-rw-r--r--common/Kconfig12
-rw-r--r--common/blspec.c73
-rw-r--r--common/bootargs.c6
-rw-r--r--common/bootm.c17
-rw-r--r--common/console.c22
-rw-r--r--common/console_common.c18
-rw-r--r--common/console_countdown.c2
-rw-r--r--common/console_simple.c6
-rw-r--r--common/env.c30
-rw-r--r--common/environment.c8
-rw-r--r--common/filetype.c5
-rw-r--r--common/firmware.c2
-rw-r--r--common/globalvar.c19
-rw-r--r--common/imd.c4
-rw-r--r--common/imx-bbu-nand-fcb.c1
-rw-r--r--common/menutree.c6
-rw-r--r--common/partitions.c2
-rw-r--r--common/partitions/efi.c1
-rw-r--r--common/password.c3
-rw-r--r--common/startup.c1
-rw-r--r--common/state.c5
-rw-r--r--common/uimage.c1
-rw-r--r--crypto/crc32.c1
-rw-r--r--crypto/hmac.c4
-rw-r--r--drivers/ata/disk_ata_drive.c2
-rw-r--r--drivers/ata/disk_bios_drive.c2
-rw-r--r--drivers/ata/intf_platform_ide.c2
-rw-r--r--drivers/ata/pata-imx.c2
-rw-r--r--drivers/ata/sata-imx.c2
-rw-r--r--drivers/eeprom/at24.c2
-rw-r--r--drivers/mci/imx-esdhc.c14
-rw-r--r--drivers/mci/mci-core.c6
-rw-r--r--drivers/mfd/stmpe-i2c.c4
-rw-r--r--drivers/misc/sram.c3
-rw-r--r--drivers/mtd/core.c12
-rw-r--r--drivers/mtd/devices/docg3.c4
-rw-r--r--drivers/mtd/mtdoob.c2
-rw-r--r--drivers/mtd/mtdraw.c2
-rw-r--r--drivers/mtd/nand/nand-bb.c2
-rw-r--r--drivers/mtd/nand/nand_imx_bbm.c2
-rw-r--r--drivers/mtd/ubi/barebox.c4
-rw-r--r--drivers/mtd/ubi/ubi-barebox.h3
-rw-r--r--drivers/mtd/ubi/ubi.h1
-rw-r--r--drivers/net/davinci_emac.c2
-rw-r--r--drivers/net/designware.c2
-rw-r--r--drivers/net/dm9k.c2
-rw-r--r--drivers/net/ep93xx.c2
-rw-r--r--drivers/net/fec_imx.c2
-rw-r--r--drivers/net/fec_mpc5200.c2
-rw-r--r--drivers/net/ksz8864rmn.c2
-rw-r--r--drivers/net/smc91111.c2
-rw-r--r--drivers/net/smc911x.c2
-rw-r--r--drivers/of/barebox.c2
-rw-r--r--drivers/of/base.c3
-rw-r--r--drivers/of/of_path.c2
-rw-r--r--drivers/of/partition.c2
-rw-r--r--drivers/pci/pci-mvebu.c4
-rw-r--r--drivers/pinctrl/pinctrl.c2
-rw-r--r--drivers/pwm/pwm-imx.c5
-rw-r--r--drivers/pwm/pwm-mxs.c2
-rw-r--r--drivers/pwm/pxa_pwm.c2
-rw-r--r--drivers/regulator/core.c2
-rw-r--r--drivers/serial/serial_auart.c9
-rw-r--r--drivers/serial/serial_ns16550.c2
-rw-r--r--drivers/spi/gpio_spi.c2
-rw-r--r--drivers/usb/gadget/composite.c2
-rw-r--r--drivers/usb/gadget/dfu.c4
-rw-r--r--drivers/usb/gadget/f_fastboot.c10
-rw-r--r--drivers/usb/storage/usb.c2
-rw-r--r--drivers/video/edid.c9
-rw-r--r--drivers/video/fb.c2
-rw-r--r--drivers/video/imx-ipu-v3/imx-ldb.c8
-rw-r--r--drivers/video/imx-ipu-v3/ipu-di.c3
-rw-r--r--drivers/video/imx-ipu-v3/ipufb.c2
-rw-r--r--drivers/w1/slaves/w1_ds2431.c2
-rw-r--r--drivers/w1/slaves/w1_ds2433.c2
-rw-r--r--fs/bpkfs.c7
-rw-r--r--fs/efi.c5
-rw-r--r--fs/efivarfs.c4
-rw-r--r--fs/fs.c13
-rw-r--r--fs/nfs.c9
-rw-r--r--fs/ubifs/ubifs.c4
-rw-r--r--fs/ubifs/ubifs.h1
-rw-r--r--fs/uimagefs.c11
-rw-r--r--images/Makefile.am33xx6
-rw-r--r--images/Makefile.imx20
-rw-r--r--images/Makefile.socfpga2
-rw-r--r--include/boot.h5
-rw-r--r--include/command.h1
-rw-r--r--include/common.h29
-rw-r--r--include/crc.h102
-rw-r--r--include/dirent.h20
-rw-r--r--include/fcntl.h100
-rw-r--r--include/fs.h57
-rw-r--r--include/globalvar.h1
-rw-r--r--include/libfile.h7
-rw-r--r--include/mtd/utils.h2
-rw-r--r--include/platform_data/eth-davinci-emac.h (renamed from include/net/davinci_emac.h)0
-rw-r--r--include/platform_data/eth-designware.h (renamed from include/net/designware.h)0
-rw-r--r--include/platform_data/eth-dm9000.h (renamed from include/dm9000.h)0
-rw-r--r--include/platform_data/eth-ep93xx.h (renamed from include/net/ep93xx_eth.h)0
-rw-r--r--include/platform_data/eth-fec.h (renamed from include/fec.h)0
-rw-r--r--include/platform_data/eth-smc91111.h (renamed from include/net/smc91111.h)0
-rw-r--r--include/platform_data/eth-smc911x.h (renamed from include/smc911x.h)0
-rw-r--r--include/platform_data/ide.h (renamed from include/platform_ide.h)0
-rw-r--r--include/platform_data/serial-ns16550.h (renamed from include/ns16550.h)0
-rw-r--r--include/shell.h11
-rw-r--r--include/stdio.h57
-rw-r--r--include/string.h1
-rw-r--r--include/sys/ioctl.h6
-rw-r--r--include/sys/mount.h8
-rw-r--r--include/sys/stat.h9
-rw-r--r--include/unistd.h24
-rw-r--r--include/w1_mac_address.h2
-rw-r--r--lib/libfile.c38
-rw-r--r--lib/logo/logo.c2
-rw-r--r--lib/make_directory.c1
-rw-r--r--lib/parameter.c20
-rw-r--r--lib/readkey.c8
-rw-r--r--lib/readline_simple.c2
-rw-r--r--lib/show_progress.c3
-rw-r--r--lib/string.c43
-rw-r--r--lib/stringlist.c2
-rw-r--r--lib/uncompress.c3
-rw-r--r--lib/unlink-recursive.c1
-rw-r--r--lib/vsprintf.c48
-rw-r--r--lib/xfuncs.c2
-rw-r--r--net/dhcp.c6
-rw-r--r--net/dns.c4
-rw-r--r--net/ifup.c4
-rw-r--r--scripts/bareboximd.c2
-rw-r--r--scripts/imx/README2
-rw-r--r--scripts/imx/imx-image.c24
-rw-r--r--scripts/imx/imx-usb-loader.c55
-rw-r--r--scripts/imx/imx.c33
-rw-r--r--scripts/imx/imx.h5
305 files changed, 1551 insertions, 997 deletions
diff --git a/Documentation/user/booting-linux.rst b/Documentation/user/booting-linux.rst
index 98628faf9d..f26299efd9 100644
--- a/Documentation/user/booting-linux.rst
+++ b/Documentation/user/booting-linux.rst
@@ -99,6 +99,20 @@ with addpart to the Kernel:
Kernel command line: mtdparts=physmap-flash.0:512k(bootloader),512k(env),4M(kernel),-(root);
mxc_nand:1M(bootloader),1M(env),4M(kernel),-(root)
+Creating root= options for the Kernel
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+It's a common case that the Linux Kernel is loaded from a filesystem
+that later becomes the root filesystem for the Kernel. For several
+filesystems barebox can automatically append a suitable root= option
+to the Kernel command line. This is done when ``global.bootm.appendroot``
+is true. How the root= option is appended depends on the device type
+and filesystem the kernel is booted from. For disk like devices (SD/MMC,
+ATA) the partition UUID will be used, the root= option will be something
+like ``root=PARTUUID=deadbeef-1``. For UBIFS fileystems it will be
+``root=ubi0:volname ubi.mtd=mtdpartname rootfstype=ubifs``. NFS
+filesystems will result in ``root=/dev/nfs nfsroot=ip:/path/to/nfsroot,v3,tcp``.
+The ``v3,tcp`` part is configurable in ``global.linux.rootnfsopts``.
The boot command
----------------
diff --git a/Makefile b/Makefile
index 6b4c519657..93f1d17d99 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
VERSION = 2016
-PATCHLEVEL = 04
+PATCHLEVEL = 05
SUBLEVEL = 0
EXTRAVERSION =
NAME = None
diff --git a/arch/arm/boards/animeo_ip/init.c b/arch/arm/boards/animeo_ip/init.c
index 2069ab3764..14b33dc691 100644
--- a/arch/arm/boards/animeo_ip/init.c
+++ b/arch/arm/boards/animeo_ip/init.c
@@ -8,7 +8,6 @@
#include <net.h>
#include <init.h>
#include <environment.h>
-#include <fec.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
#include <partition.h>
diff --git a/arch/arm/boards/archosg9/board.c b/arch/arm/boards/archosg9/board.c
index 6f82f5ee26..52f7e86fbe 100644
--- a/arch/arm/boards/archosg9/board.c
+++ b/arch/arm/boards/archosg9/board.c
@@ -13,7 +13,6 @@
#include <common.h>
#include <clock.h>
#include <init.h>
-#include <ns16550.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
#include <mach/omap4-silicon.h>
diff --git a/arch/arm/boards/at91sam9261ek/init.c b/arch/arm/boards/at91sam9261ek/init.c
index 6cb170192a..b9e4914376 100644
--- a/arch/arm/boards/at91sam9261ek/init.c
+++ b/arch/arm/boards/at91sam9261ek/init.c
@@ -34,7 +34,7 @@
#include <mach/io.h>
#include <mach/iomux.h>
#include <mach/at91sam9_smc.h>
-#include <dm9000.h>
+#include <platform_data/eth-dm9000.h>
#include <gpio_keys.h>
#include <readkey.h>
#include <led.h>
diff --git a/arch/arm/boards/at91sam9n12ek/init.c b/arch/arm/boards/at91sam9n12ek/init.c
index 26d08ae659..2ed58c1995 100644
--- a/arch/arm/boards/at91sam9n12ek/init.c
+++ b/arch/arm/boards/at91sam9n12ek/init.c
@@ -18,7 +18,6 @@
#include <net.h>
#include <init.h>
#include <environment.h>
-#include <fec.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
#include <partition.h>
diff --git a/arch/arm/boards/at91sam9x5ek/init.c b/arch/arm/boards/at91sam9x5ek/init.c
index e0c11a11e1..1ef35803f7 100644
--- a/arch/arm/boards/at91sam9x5ek/init.c
+++ b/arch/arm/boards/at91sam9x5ek/init.c
@@ -18,7 +18,6 @@
#include <net.h>
#include <init.h>
#include <environment.h>
-#include <fec.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
#include <partition.h>
diff --git a/arch/arm/boards/beagle/board.c b/arch/arm/boards/beagle/board.c
index 4ac9517dbe..460f42ac2d 100644
--- a/arch/arm/boards/beagle/board.c
+++ b/arch/arm/boards/beagle/board.c
@@ -23,7 +23,6 @@
#include <io.h>
#include <bbu.h>
#include <filetype.h>
-#include <ns16550.h>
#include <envfs.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
diff --git a/arch/arm/boards/ccxmx51/ccxmx51.c b/arch/arm/boards/ccxmx51/ccxmx51.c
index 40cf76dc5a..71a51e1927 100644
--- a/arch/arm/boards/ccxmx51/ccxmx51.c
+++ b/arch/arm/boards/ccxmx51/ccxmx51.c
@@ -20,7 +20,7 @@
#include <init.h>
#include <environment.h>
#include <mach/imx51-regs.h>
-#include <fec.h>
+#include <platform_data/eth-fec.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
#include <partition.h>
diff --git a/arch/arm/boards/ccxmx53/flash-header-imx53-ccxmx53_1gib.imxcfg b/arch/arm/boards/ccxmx53/flash-header-imx53-ccxmx53_1gib.imxcfg
index 6f1cab60c7..68d947c01d 100644
--- a/arch/arm/boards/ccxmx53/flash-header-imx53-ccxmx53_1gib.imxcfg
+++ b/arch/arm/boards/ccxmx53/flash-header-imx53-ccxmx53_1gib.imxcfg
@@ -31,7 +31,7 @@ wm 32 0x63fd90f8 0x00000800
wm 32 0x63fd907c 0x020c0211
wm 32 0x63fd9080 0x014c0155
wm 32 0x63fd9018 0x000016d0
-wm 32 0x63fd9000 0xc4110000
+wm 32 0x63fd9000 0xc3110000
wm 32 0x63fd900c 0x4d5122d2
wm 32 0x63fd9010 0x92d18a22
wm 32 0x63fd9014 0x00c70092
diff --git a/arch/arm/boards/ccxmx53/lowlevel.c b/arch/arm/boards/ccxmx53/lowlevel.c
index b321811e95..55f6f366ac 100644
--- a/arch/arm/boards/ccxmx53/lowlevel.c
+++ b/arch/arm/boards/ccxmx53/lowlevel.c
@@ -13,7 +13,10 @@
*
*/
+#include <debug_ll.h>
#include <common.h>
+#include <linux/sizes.h>
+#include <io.h>
#include <mach/esdctl.h>
#include <mach/generic.h>
#include <image-metadata.h>
@@ -26,28 +29,32 @@
BAREBOX_IMD_TAG_STRING(ccxmx53_memsize_SZ_512M, IMD_TYPE_PARAMETER, "memsize=512", 0);
BAREBOX_IMD_TAG_STRING(ccxmx53_memsize_SZ_1G, IMD_TYPE_PARAMETER, "memsize=1024", 0);
-static void __noreturn start_imx53_ccxmx53_common(uint32_t size,
- void *fdt_blob_fixed_offset)
+extern char __dtb_imx53_ccxmx53_start[];
+
+ENTRY_FUNCTION(start_ccxmx53_512mb, r0, r1, r2)
{
void *fdt;
imx5_cpu_lowlevel_init();
arm_setup_stack(0xf8020000 - 8);
- fdt = fdt_blob_fixed_offset - get_runtime_offset();
- barebox_arm_entry(0x70000000, size, fdt);
+ IMD_USED(ccxmx53_memsize_SZ_512M);
+
+ fdt = __dtb_imx53_ccxmx53_start - get_runtime_offset();
+
+ imx53_barebox_entry(fdt);
}
-#define CCMX53_ENTRY(name, fdt_name, memory_size) \
- ENTRY_FUNCTION(name, r0, r1, r2) \
- { \
- extern char __dtb_##fdt_name##_start[]; \
- \
- IMD_USED(ccxmx53_memsize_##memory_size); \
- \
- start_imx53_ccxmx53_common(memory_size, \
- __dtb_##fdt_name##_start); \
- }
-
-CCMX53_ENTRY(start_ccxmx53_512mb, imx53_ccxmx53, SZ_512M);
-CCMX53_ENTRY(start_ccxmx53_1gib, imx53_ccxmx53, SZ_1G);
+ENTRY_FUNCTION(start_ccxmx53_1gib, r0, r1, r2)
+{
+ void *fdt;
+
+ imx5_cpu_lowlevel_init();
+ arm_setup_stack(0xf8020000 - 8);
+
+ IMD_USED(ccxmx53_memsize_SZ_1G);
+
+ fdt = __dtb_imx53_ccxmx53_start - get_runtime_offset();
+
+ imx53_barebox_entry(fdt);
+}
diff --git a/arch/arm/boards/crystalfontz-cfa10036/cfa10036.c b/arch/arm/boards/crystalfontz-cfa10036/cfa10036.c
index 6e83570c55..947db7cff6 100644
--- a/arch/arm/boards/crystalfontz-cfa10036/cfa10036.c
+++ b/arch/arm/boards/crystalfontz-cfa10036/cfa10036.c
@@ -19,7 +19,6 @@
#include <environment.h>
#include <envfs.h>
#include <errno.h>
-#include <fec.h>
#include <gpio.h>
#include <init.h>
#include <mci.h>
diff --git a/arch/arm/boards/datamodul-edm-qmx6/board.c b/arch/arm/boards/datamodul-edm-qmx6/board.c
index 96c7fbe4bf..043a93461b 100644
--- a/arch/arm/boards/datamodul-edm-qmx6/board.c
+++ b/arch/arm/boards/datamodul-edm-qmx6/board.c
@@ -26,7 +26,6 @@
#include <linux/sizes.h>
#include <init.h>
#include <gpio.h>
-#include <fec.h>
#include <of.h>
#include <linux/micrel_phy.h>
diff --git a/arch/arm/boards/dss11/init.c b/arch/arm/boards/dss11/init.c
index feca909c27..321c383ffc 100644
--- a/arch/arm/boards/dss11/init.c
+++ b/arch/arm/boards/dss11/init.c
@@ -17,7 +17,6 @@
#include <mci.h>
#include <init.h>
#include <environment.h>
-#include <fec.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
#include <partition.h>
diff --git a/arch/arm/boards/edb93xx/edb93xx.c b/arch/arm/boards/edb93xx/edb93xx.c
index 0fb93d23dc..99c69548bd 100644
--- a/arch/arm/boards/edb93xx/edb93xx.c
+++ b/arch/arm/boards/edb93xx/edb93xx.c
@@ -27,7 +27,7 @@
#include <malloc.h>
#include <generated/mach-types.h>
#include <mach/ep93xx-regs.h>
-#include <net/ep93xx_eth.h>
+#include <platform_data/eth-ep93xx.h>
#include "edb93xx.h"
#define DEVCFG_U1EN (1 << 18)
@@ -123,7 +123,7 @@ static int edb93xx_console_init(void)
else
shortname = "unknown";
- board = asprintf("Cirrus Logic %s", shortname);
+ board = basprintf("Cirrus Logic %s", shortname);
barebox_set_model(board);
free(board);
barebox_set_hostname(shortname);
diff --git a/arch/arm/boards/embedsky-e9/board.c b/arch/arm/boards/embedsky-e9/board.c
index 23bfec1b77..0f47677bb0 100644
--- a/arch/arm/boards/embedsky-e9/board.c
+++ b/arch/arm/boards/embedsky-e9/board.c
@@ -22,7 +22,6 @@
#include <init.h>
#include <environment.h>
#include <mach/imx6-regs.h>
-#include <fec.h>
#include <gpio.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
@@ -70,8 +69,8 @@ static int e9_devices_init(void)
armlinux_set_architecture(3980);
- environment_path = asprintf("/chosen/environment-mmc%d",
- bootsource_get_instance());
+ environment_path = basprintf("/chosen/environment-mmc%d",
+ bootsource_get_instance());
ret = of_device_enable_path(environment_path);
diff --git a/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c b/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c
index 22bf7409a2..90451911e4 100644
--- a/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c
+++ b/arch/arm/boards/eukrea_cpuimx25/eukrea_cpuimx25.c
@@ -36,7 +36,7 @@
#include <mach/imx-nand.h>
#include <mach/imxfb.h>
#include <mach/iim.h>
-#include <fec.h>
+#include <platform_data/eth-fec.h>
#include <nand.h>
#include <mach/iomux-mx25.h>
#include <i2c/i2c.h>
diff --git a/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c b/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c
index fd10d3e4d1..f27dcd6f44 100644
--- a/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c
+++ b/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c
@@ -22,7 +22,6 @@
#include <init.h>
#include <environment.h>
#include <mach/imx27-regs.h>
-#include <fec.h>
#include <notifier.h>
#include <gpio.h>
#include <asm/armlinux.h>
@@ -39,7 +38,7 @@
#include <mach/imx-pll.h>
#include <mach/weim.h>
#include <mach/imxfb.h>
-#include <ns16550.h>
+#include <platform_data/serial-ns16550.h>
#include <asm/mmu.h>
#include <i2c/i2c.h>
#include <mfd/lp3972.h>
diff --git a/arch/arm/boards/eukrea_cpuimx35/eukrea_cpuimx35.c b/arch/arm/boards/eukrea_cpuimx35/eukrea_cpuimx35.c
index 7b3993d506..9c4ea13d8e 100644
--- a/arch/arm/boards/eukrea_cpuimx35/eukrea_cpuimx35.c
+++ b/arch/arm/boards/eukrea_cpuimx35/eukrea_cpuimx35.c
@@ -27,7 +27,7 @@
#include <environment.h>
#include <errno.h>
#include <fcntl.h>
-#include <fec.h>
+#include <platform_data/eth-fec.h>
#include <fs.h>
#include <init.h>
#include <nand.h>
diff --git a/arch/arm/boards/eukrea_cpuimx51/eukrea_cpuimx51.c b/arch/arm/boards/eukrea_cpuimx51/eukrea_cpuimx51.c
index 75f325001b..fc57f6c157 100644
--- a/arch/arm/boards/eukrea_cpuimx51/eukrea_cpuimx51.c
+++ b/arch/arm/boards/eukrea_cpuimx51/eukrea_cpuimx51.c
@@ -20,7 +20,7 @@
#include <init.h>
#include <environment.h>
#include <mach/imx51-regs.h>
-#include <fec.h>
+#include <platform_data/eth-fec.h>
#include <gpio.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
diff --git a/arch/arm/boards/freescale-mx25-3ds/3stack.c b/arch/arm/boards/freescale-mx25-3ds/3stack.c
index 6d0e38205a..36ad591cc0 100644
--- a/arch/arm/boards/freescale-mx25-3ds/3stack.c
+++ b/arch/arm/boards/freescale-mx25-3ds/3stack.c
@@ -30,7 +30,7 @@
#include <partition.h>
#include <generated/mach-types.h>
#include <mach/imx-nand.h>
-#include <fec.h>
+#include <platform_data/eth-fec.h>
#include <nand.h>
#include <mach/iomux-mx25.h>
#include <mach/generic.h>
diff --git a/arch/arm/boards/freescale-mx27-ads/imx27ads.c b/arch/arm/boards/freescale-mx27-ads/imx27ads.c
index d15f92d39a..9818a55137 100644
--- a/arch/arm/boards/freescale-mx27-ads/imx27ads.c
+++ b/arch/arm/boards/freescale-mx27-ads/imx27ads.c
@@ -21,7 +21,7 @@
#include <mach/imx27-regs.h>
#include <asm/armlinux.h>
#include <io.h>
-#include <fec.h>
+#include <platform_data/eth-fec.h>
#include <gpio.h>
#include <mach/weim.h>
#include <partition.h>
diff --git a/arch/arm/boards/freescale-mx28-evk/mx28-evk.c b/arch/arm/boards/freescale-mx28-evk/mx28-evk.c
index fc1237588f..9e5d612bda 100644
--- a/arch/arm/boards/freescale-mx28-evk/mx28-evk.c
+++ b/arch/arm/boards/freescale-mx28-evk/mx28-evk.c
@@ -17,7 +17,7 @@
#include <common.h>
#include <environment.h>
#include <errno.h>
-#include <fec.h>
+#include <platform_data/eth-fec.h>
#include <gpio.h>
#include <init.h>
#include <mci.h>
diff --git a/arch/arm/boards/freescale-mx35-3ds/3stack.c b/arch/arm/boards/freescale-mx35-3ds/3stack.c
index cca0fe49eb..caeb3f75e8 100644
--- a/arch/arm/boards/freescale-mx35-3ds/3stack.c
+++ b/arch/arm/boards/freescale-mx35-3ds/3stack.c
@@ -25,7 +25,7 @@
#include <environment.h>
#include <errno.h>
#include <fcntl.h>
-#include <fec.h>
+#include <platform_data/eth-fec.h>
#include <fs.h>
#include <init.h>
#include <nand.h>
diff --git a/arch/arm/boards/freescale-mx51-babbage/board.c b/arch/arm/boards/freescale-mx51-babbage/board.c
index c4acb8ee16..915748528d 100644
--- a/arch/arm/boards/freescale-mx51-babbage/board.c
+++ b/arch/arm/boards/freescale-mx51-babbage/board.c
@@ -20,7 +20,6 @@
#include <init.h>
#include <environment.h>
#include <mach/imx51-regs.h>
-#include <fec.h>
#include <gpio.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
diff --git a/arch/arm/boards/freescale-mx53-smd/board.c b/arch/arm/boards/freescale-mx53-smd/board.c
index 196d20a45d..354702dea1 100644
--- a/arch/arm/boards/freescale-mx53-smd/board.c
+++ b/arch/arm/boards/freescale-mx53-smd/board.c
@@ -17,7 +17,7 @@
#include <common.h>
#include <environment.h>
#include <fcntl.h>
-#include <fec.h>
+#include <platform_data/eth-fec.h>
#include <fs.h>
#include <init.h>
#include <nand.h>
diff --git a/arch/arm/boards/freescale-mx6-sabrelite/board.c b/arch/arm/boards/freescale-mx6-sabrelite/board.c
index d40f99bb93..63fa58886c 100644
--- a/arch/arm/boards/freescale-mx6-sabrelite/board.c
+++ b/arch/arm/boards/freescale-mx6-sabrelite/board.c
@@ -18,7 +18,6 @@
#include <init.h>
#include <environment.h>
#include <mach/imx6-regs.h>
-#include <fec.h>
#include <gpio.h>
#include <mach/bbu.h>
#include <asm/armlinux.h>
diff --git a/arch/arm/boards/freescale-mx6-sabresd/board.c b/arch/arm/boards/freescale-mx6-sabresd/board.c
index 734adde070..595b1eae0b 100644
--- a/arch/arm/boards/freescale-mx6-sabresd/board.c
+++ b/arch/arm/boards/freescale-mx6-sabresd/board.c
@@ -19,7 +19,6 @@
#include <init.h>
#include <environment.h>
#include <mach/imx6-regs.h>
-#include <fec.h>
#include <gpio.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
diff --git a/arch/arm/boards/friendlyarm-mini2440/mini2440.c b/arch/arm/boards/friendlyarm-mini2440/mini2440.c
index b59c8367f3..7f59cb99b2 100644
--- a/arch/arm/boards/friendlyarm-mini2440/mini2440.c
+++ b/arch/arm/boards/friendlyarm-mini2440/mini2440.c
@@ -21,7 +21,7 @@
#include <init.h>
#include <generated/mach-types.h>
#include <partition.h>
-#include <dm9000.h>
+#include <platform_data/eth-dm9000.h>
#include <nand.h>
#include <mci.h>
#include <fb.h>
diff --git a/arch/arm/boards/friendlyarm-mini6410/mini6410.c b/arch/arm/boards/friendlyarm-mini6410/mini6410.c
index a372db5471..a85b1bd920 100644
--- a/arch/arm/boards/friendlyarm-mini6410/mini6410.c
+++ b/arch/arm/boards/friendlyarm-mini6410/mini6410.c
@@ -14,7 +14,7 @@
#include <common.h>
#include <driver.h>
#include <init.h>
-#include <dm9000.h>
+#include <platform_data/eth-dm9000.h>
#include <gpio.h>
#include <generated/mach-types.h>
#include <asm/armlinux.h>
diff --git a/arch/arm/boards/friendlyarm-tiny210/tiny210.c b/arch/arm/boards/friendlyarm-tiny210/tiny210.c
index d84b3128ad..b40dc98c5b 100644
--- a/arch/arm/boards/friendlyarm-tiny210/tiny210.c
+++ b/arch/arm/boards/friendlyarm-tiny210/tiny210.c
@@ -29,7 +29,6 @@
#include <init.h>
#include <linux/sizes.h>
#include <generated/mach-types.h>
-#include <dm9000.h>
#include <gpio.h>
#include <led.h>
#include <io.h>
diff --git a/arch/arm/boards/friendlyarm-tiny6410/development-board.c b/arch/arm/boards/friendlyarm-tiny6410/development-board.c
index 773a423ea0..5dd05e4cc8 100644
--- a/arch/arm/boards/friendlyarm-tiny6410/development-board.c
+++ b/arch/arm/boards/friendlyarm-tiny6410/development-board.c
@@ -23,7 +23,7 @@
#include <driver.h>
#include <init.h>
#include <gpio.h>
-#include <dm9000.h>
+#include <platform_data/eth-dm9000.h>
#include <mach/devices-s3c64xx.h>
#include <mach/s3c-generic.h>
#include <mach/iomux.h>
diff --git a/arch/arm/boards/guf-cupid/board.c b/arch/arm/boards/guf-cupid/board.c
index 90f16272fd..6ec74eb49b 100644
--- a/arch/arm/boards/guf-cupid/board.c
+++ b/arch/arm/boards/guf-cupid/board.c
@@ -33,7 +33,7 @@
#include <nand.h>
#include <generated/mach-types.h>
#include <mach/imx-nand.h>
-#include <fec.h>
+#include <platform_data/eth-fec.h>
#include <fb.h>
#include <asm/mmu.h>
#include <mach/weim.h>
diff --git a/arch/arm/boards/guf-neso/board.c b/arch/arm/boards/guf-neso/board.c
index f40f0d1591..176d77e7b3 100644
--- a/arch/arm/boards/guf-neso/board.c
+++ b/arch/arm/boards/guf-neso/board.c
@@ -18,7 +18,7 @@
#include <net.h>
#include <init.h>
#include <environment.h>
-#include <fec.h>
+#include <platform_data/eth-fec.h>
#include <notifier.h>
#include <partition.h>
#include <gpio.h>
diff --git a/arch/arm/boards/guf-vincell/board.c b/arch/arm/boards/guf-vincell/board.c
index ad47ee2558..43c195254e 100644
--- a/arch/arm/boards/guf-vincell/board.c
+++ b/arch/arm/boards/guf-vincell/board.c
@@ -40,7 +40,8 @@ static void vincell_fec_reset(void)
static int vincell_devices_init(void)
{
- if (!of_machine_is_compatible("guf,imx53-vincell"))
+ if (!of_machine_is_compatible("guf,imx53-vincell") &&
+ !of_machine_is_compatible("guf,imx53-vincell-lt"))
return 0;
writel(0, MX53_M4IF_BASE_ADDR + 0xc);
diff --git a/arch/arm/boards/karo-tx28/tx28-stk5.c b/arch/arm/boards/karo-tx28/tx28-stk5.c
index d67607b717..ec0826297b 100644
--- a/arch/arm/boards/karo-tx28/tx28-stk5.c
+++ b/arch/arm/boards/karo-tx28/tx28-stk5.c
@@ -18,7 +18,7 @@
#include <environment.h>
#include <errno.h>
#include <mci.h>
-#include <fec.h>
+#include <platform_data/eth-fec.h>
#include <linux/sizes.h>
#include <io.h>
#include <net.h>
diff --git a/arch/arm/boards/karo-tx51/tx51.c b/arch/arm/boards/karo-tx51/tx51.c
index f5ebe46a2b..913df68cc9 100644
--- a/arch/arm/boards/karo-tx51/tx51.c
+++ b/arch/arm/boards/karo-tx51/tx51.c
@@ -19,7 +19,7 @@
#include <init.h>
#include <environment.h>
#include <mach/imx51-regs.h>
-#include <fec.h>
+#include <platform_data/eth-fec.h>
#include <gpio.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
diff --git a/arch/arm/boards/karo-tx53/board.c b/arch/arm/boards/karo-tx53/board.c
index 9e65a839ad..99aa9e74f5 100644
--- a/arch/arm/boards/karo-tx53/board.c
+++ b/arch/arm/boards/karo-tx53/board.c
@@ -16,7 +16,7 @@
#include <bootsource.h>
#include <environment.h>
#include <fcntl.h>
-#include <fec.h>
+#include <platform_data/eth-fec.h>
#include <fs.h>
#include <init.h>
#include <nand.h>
diff --git a/arch/arm/boards/karo-tx6x/flash-header-tx6qp-2g.imxcfg b/arch/arm/boards/karo-tx6x/flash-header-tx6qp-2g.imxcfg
new file mode 100644
index 0000000000..455aab92ca
--- /dev/null
+++ b/arch/arm/boards/karo-tx6x/flash-header-tx6qp-2g.imxcfg
@@ -0,0 +1,183 @@
+soc imx6
+loadaddr 0x20000000
+dcdofs 0x400
+
+wm 32 0x020e00a4 0x00000016
+wm 32 0x020e00c4 0x00000011
+wm 32 0x020e03b8 0x0000f079
+wm 32 0x020e03d8 0x0000f079
+wm 32 0x020e0898 0x00000000
+wm 32 0x020e089c 0x00000000
+wm 32 0x020e0248 0x00000012
+wm 32 0x020e02c8 0x00000015
+wm 32 0x020e06b0 0x000030b0
+wm 32 0x020e00a0 0x00000015
+wm 32 0x020e03b4 0x000030b0
+wm 32 0x020e024c 0x00000005
+wm 32 0x020e061c 0x000030b0
+wm 32 0x020c402c 0x006336c1
+wm 32 0x020c4034 0x00012093
+wm 32 0x020c4038 0x00012090
+wm 32 0x020c80e0 0x00002001
+set_bits 32 0x020c4068 0x00000030
+set_bits 32 0x020c406c 0x00000c00
+set_bits 32 0x020c4070 0x000000c0
+set_bits 32 0x020c4078 0xff000000
+set_bits 32 0x020c407c 0x0f000000
+set_bits 32 0x020c4080 0x000003fc
+wm 32 0x020c80a0 0x00082029
+wm 32 0x020c80b0 0x0007a120
+wm 32 0x020c80c0 0x000f4240
+wm 32 0x020e0004 0x48640005
+wm 32 0x020e0010 0xf00000cf
+wm 32 0x020e0018 0x77177717
+wm 32 0x020e001c 0x77177717
+wm 32 0x020e02a8 0x00000001
+wm 32 0x020e02ac 0x00000001
+wm 32 0x020e0920 0x00000003
+wm 32 0x020e02c0 0x00000001
+wm 32 0x020e02c4 0x00000001
+wm 32 0x020e091c 0x00000003
+wm 32 0x020e02ec 0x00000000
+wm 32 0x020e05ac 0x00020030
+wm 32 0x020e05b4 0x00020030
+wm 32 0x020e0528 0x00020030
+wm 32 0x020e0520 0x00020030
+wm 32 0x020e0514 0x00020030
+wm 32 0x020e0510 0x00020030
+wm 32 0x020e05bc 0x00020030
+wm 32 0x020e05c4 0x00020030
+wm 32 0x020e052c 0x00020200
+wm 32 0x020e0530 0x00020200
+wm 32 0x020e0534 0x00020200
+wm 32 0x020e0538 0x00020200
+wm 32 0x020e053c 0x00020200
+wm 32 0x020e0540 0x00020200
+wm 32 0x020e0544 0x00020200
+wm 32 0x020e0548 0x00020200
+wm 32 0x020e054c 0x00020200
+wm 32 0x020e0550 0x00020200
+wm 32 0x020e0554 0x00020200
+wm 32 0x020e0558 0x00020200
+wm 32 0x020e055c 0x00020200
+wm 32 0x020e0560 0x00020200
+wm 32 0x020e0564 0x00020200
+wm 32 0x020e0568 0x00020200
+wm 32 0x020e056c 0x00020030
+wm 32 0x020e0578 0x00020030
+wm 32 0x020e0588 0x00020030
+wm 32 0x020e0594 0x00020030
+wm 32 0x020e057c 0x00020030
+wm 32 0x020e0590 0x00003000
+wm 32 0x020e0598 0x00003000
+wm 32 0x020e0580 0x00000000
+wm 32 0x020e0584 0x00000000
+wm 32 0x020e058c 0x00000000
+wm 32 0x020e059c 0x00003030
+wm 32 0x020e05a0 0x00003030
+wm 32 0x020e0784 0x00000030
+wm 32 0x020e0788 0x00000030
+wm 32 0x020e0794 0x00000030
+wm 32 0x020e079c 0x00000030
+wm 32 0x020e07a0 0x00000030
+wm 32 0x020e07a4 0x00000030
+wm 32 0x020e07a8 0x00000030
+wm 32 0x020e0748 0x00000030
+wm 32 0x020e074c 0x00000030
+wm 32 0x020e0750 0x00020000
+wm 32 0x020e0758 0x00000000
+wm 32 0x020e0774 0x00020000
+wm 32 0x020e078c 0x00000030
+wm 32 0x020e0798 0x000c0000
+wm 32 0x020e0768 0x00002000
+wm 32 0x020e0770 0x00000000
+wm 32 0x020e0754 0x00000200
+wm 32 0x020e075c 0x00000200
+wm 32 0x020e0760 0x00000200
+wm 32 0x020e0764 0x00000200
+wm 32 0x020e076c 0x00000200
+wm 32 0x020e0778 0x00000200
+wm 32 0x020e077c 0x00000200
+wm 32 0x020e0780 0x00000200
+wm 32 0x021b001c 0x04008010
+wm 32 0x021b001c 0x04008040
+wm 32 0x021b0800 0xa1390001
+wm 32 0x021b080c 0x001e001e
+wm 32 0x021b0810 0x001e001e
+wm 32 0x021b480c 0x001e001e
+wm 32 0x021b4810 0x001e001e
+wm 32 0x021b083c 0x43430349
+wm 32 0x021b0840 0x03330334
+wm 32 0x021b483c 0x434b0351
+wm 32 0x021b4840 0x033d030e
+wm 32 0x021b0848 0x40404040
+wm 32 0x021b0850 0x40404040
+wm 32 0x021b4848 0x40404040
+wm 32 0x021b4850 0x40404040
+wm 32 0x021b081c 0x33333333
+wm 32 0x021b0820 0x33333333
+wm 32 0x021b0824 0x33333333
+wm 32 0x021b0828 0x33333333
+wm 32 0x021b481c 0x33333333
+wm 32 0x021b4820 0x33333333
+wm 32 0x021b4824 0x33333333
+wm 32 0x021b4828 0x33333333
+wm 32 0x021b08b8 0x00000800
+wm 32 0x021b48b8 0x00000800
+wm 32 0x021b0018 0x00000742
+check 32 while_all_bits_clear 0x021b0018 0x00000002
+wm 32 0x021b001c 0x00008000
+check 32 while_any_bit_clear 0x021b001c 0x00004000
+wm 32 0x021b0000 0x841a0000
+check 32 while_any_bit_clear 0x021b0018 0x40000000
+wm 32 0x021b000c 0x898f78f4
+wm 32 0x021b0010 0xff328e64
+wm 32 0x021b0014 0x01ff00db
+wm 32 0x021b002c 0x000026d2
+wm 32 0x021b0030 0x008f1023
+wm 32 0x021b0008 0x24444040
+wm 32 0x021b0004 0x00020076
+wm 32 0x021b0040 0x00000047
+wm 32 0x021b001c 0x09308030
+wm 32 0x021b001c 0x00048031
+wm 32 0x021b001c 0x00488032
+wm 32 0x021b001c 0x00008033
+wm 32 0x021b0020 0x0000c000
+wm 32 0x021b001c 0x00008020
+wm 32 0x021b0818 0x00022222
+wm 32 0x021b4818 0x00022222
+wm 32 0x021b0890 0x00000003
+set_bits 32 0x021b0400 0x02000000
+wm 32 0x021b0404 0x00000001
+wm 32 0x021b001c 0x04008010
+wm 32 0x021b001c 0x04008040
+wm 32 0x021b0800 0xa1390001
+check 32 while_all_bits_clear 0x021b0800 0x00010000
+wm 32 0x021b0800 0xa1380000
+wm 32 0x021b001c 0x00048033
+wm 32 0x020e05a8 0x00000030
+wm 32 0x020e05b0 0x00000030
+wm 32 0x020e0524 0x00000030
+wm 32 0x020e051c 0x00000030
+wm 32 0x020e0518 0x00000030
+wm 32 0x020e050c 0x00000030
+wm 32 0x020e05b8 0x00000030
+wm 32 0x020e05c0 0x00000030
+wm 32 0x021b001c 0x04008050
+wm 32 0x021b0860 0x00000030
+wm 32 0x021b4860 0x00000030
+check 32 while_all_bits_clear 0x021b0860 0x0000001f
+check 32 while_all_bits_clear 0x021b4860 0x0000001f
+wm 32 0x021b001c 0x04008050
+wm 32 0x021b0864 0x00000030
+check 32 while_all_bits_clear 0x021b0864 0x0000001f
+wm 32 0x021b001c 0x04008050
+wm 32 0x021b4864 0x00000030
+check 32 while_all_bits_clear 0x021b4864 0x0000001f
+wm 32 0x021b001c 0x00008033
+wm 32 0x021b0800 0xa138002b
+wm 32 0x021b0020 0x00001800
+wm 32 0x021b0404 0x00001000
+wm 32 0x021b0004 0x00025576
+wm 32 0x021b001c 0x00000000
+check 32 while_all_bits_clear 0x021b001c 0x00004000
diff --git a/arch/arm/boards/karo-tx6x/lowlevel.c b/arch/arm/boards/karo-tx6x/lowlevel.c
index 1aa24c5842..459c44b845 100644
--- a/arch/arm/boards/karo-tx6x/lowlevel.c
+++ b/arch/arm/boards/karo-tx6x/lowlevel.c
@@ -77,3 +77,23 @@ ENTRY_FUNCTION(start_imx6q_tx6x_1g, r0, r1, r2)
imx6q_barebox_entry(fdt);
}
+
+BAREBOX_IMD_TAG_STRING(tx6x_mx6_memsize_2G, IMD_TYPE_PARAMETER, "memsize=2048", 0);
+
+ENTRY_FUNCTION(start_imx6q_tx6x_2g, r0, r1, r2)
+{
+ void *fdt;
+
+ imx6_cpu_lowlevel_init();
+
+ arm_setup_stack(0x00920000 - 8);
+
+ IMD_USED(tx6x_mx6_memsize_2G);
+
+ if (IS_ENABLED(CONFIG_DEBUG_LL))
+ setup_uart();
+
+ fdt = __dtb_imx6q_tx6q_start - get_runtime_offset();
+
+ imx6q_barebox_entry(fdt);
+}
diff --git a/arch/arm/boards/lubbock/board.c b/arch/arm/boards/lubbock/board.c
index 6f517d8926..c2a0db7bd8 100644
--- a/arch/arm/boards/lubbock/board.c
+++ b/arch/arm/boards/lubbock/board.c
@@ -33,7 +33,7 @@
#include <mach/udc_pxa2xx.h>
#include <mach/mci_pxa2xx.h>
-#include <net/smc91111.h>
+#include <platform_data/eth-smc91111.h>
#include <asm/armlinux.h>
#include <asm/io.h>
#include <asm/mmu.h>
diff --git a/arch/arm/boards/mainstone/board.c b/arch/arm/boards/mainstone/board.c
index c339bb9315..0e48e79967 100644
--- a/arch/arm/boards/mainstone/board.c
+++ b/arch/arm/boards/mainstone/board.c
@@ -33,7 +33,7 @@
#include <mach/udc_pxa2xx.h>
#include <mach/mci_pxa2xx.h>
-#include <net/smc91111.h>
+#include <platform_data/eth-smc91111.h>
#include <asm/armlinux.h>
#include <asm/io.h>
#include <asm/mmu.h>
diff --git a/arch/arm/boards/mmccpu/init.c b/arch/arm/boards/mmccpu/init.c
index 8979b818b0..747c4b2742 100644
--- a/arch/arm/boards/mmccpu/init.c
+++ b/arch/arm/boards/mmccpu/init.c
@@ -18,7 +18,6 @@
#include <net.h>
#include <init.h>
#include <environment.h>
-#include <fec.h>
#include <gpio.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
diff --git a/arch/arm/boards/omap343xdsp/board.c b/arch/arm/boards/omap343xdsp/board.c
index 1b1cb79212..2fd0dee194 100644
--- a/arch/arm/boards/omap343xdsp/board.c
+++ b/arch/arm/boards/omap343xdsp/board.c
@@ -20,7 +20,6 @@
#include <init.h>
#include <driver.h>
#include <io.h>
-#include <ns16550.h>
#include <asm/armlinux.h>
#include <mach/omap3-silicon.h>
#include <mach/omap3-devices.h>
diff --git a/arch/arm/boards/omap3evm/board.c b/arch/arm/boards/omap3evm/board.c
index 0fe69b61a7..eefb540fc1 100644
--- a/arch/arm/boards/omap3evm/board.c
+++ b/arch/arm/boards/omap3evm/board.c
@@ -44,7 +44,6 @@
#include <driver.h>
#include <io.h>
#include <linux/sizes.h>
-#include <ns16550.h>
#include <asm/armlinux.h>
#include <mach/omap3-silicon.h>
#include <mach/omap3-mux.h>
diff --git a/arch/arm/boards/panda/board.c b/arch/arm/boards/panda/board.c
index f7a3a0fa28..acba689623 100644
--- a/arch/arm/boards/panda/board.c
+++ b/arch/arm/boards/panda/board.c
@@ -4,7 +4,6 @@
#include <driver.h>
#include <io.h>
#include <gpio.h>
-#include <ns16550.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
#include <mach/omap4-silicon.h>
diff --git a/arch/arm/boards/phytec-phycard-imx27/pca100.c b/arch/arm/boards/phytec-phycard-imx27/pca100.c
index 4d6f51729b..b0fee46d3b 100644
--- a/arch/arm/boards/phytec-phycard-imx27/pca100.c
+++ b/arch/arm/boards/phytec-phycard-imx27/pca100.c
@@ -19,7 +19,6 @@
#include <init.h>
#include <environment.h>
#include <mach/imx27-regs.h>
-#include <fec.h>
#include <gpio.h>
#include <linux/sizes.h>
#include <asm/armlinux.h>
diff --git a/arch/arm/boards/phytec-phycard-omap3/pca-a-l1.c b/arch/arm/boards/phytec-phycard-omap3/pca-a-l1.c
index 1c2e7f7429..930f3b9c7c 100644
--- a/arch/arm/boards/phytec-phycard-omap3/pca-a-l1.c
+++ b/arch/arm/boards/phytec-phycard-omap3/pca-a-l1.c
@@ -44,7 +44,6 @@
#include <errno.h>
#include <init.h>
#include <nand.h>
-#include <ns16550.h>
#include <partition.h>
#include <linux/sizes.h>
#include <asm/armlinux.h>
diff --git a/arch/arm/boards/phytec-phycard-omap4/pca-a-xl2.c b/arch/arm/boards/phytec-phycard-omap4/pca-a-xl2.c
index 78890ba5a9..c0e4448a00 100644
--- a/arch/arm/boards/phytec-phycard-omap4/pca-a-xl2.c
+++ b/arch/arm/boards/phytec-phycard-omap4/pca-a-xl2.c
@@ -20,7 +20,6 @@
#include <driver.h>
#include <io.h>
#include <gpio.h>
-#include <ns16550.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
#include <mach/omap4-silicon.h>
diff --git a/arch/arm/boards/phytec-phycore-imx27/pcm970.c b/arch/arm/boards/phytec-phycore-imx27/pcm970.c
index 73df2ad2a8..13bb7c1cf5 100644
--- a/arch/arm/boards/phytec-phycore-imx27/pcm970.c
+++ b/arch/arm/boards/phytec-phycore-imx27/pcm970.c
@@ -15,7 +15,7 @@
#include <gpio.h>
#include <init.h>
#include <io.h>
-#include <platform_ide.h>
+#include <platform_data/ide.h>
#include <linux/sizes.h>
#include <mach/imx27-regs.h>
#include <mach/iomux-mx27.h>
diff --git a/arch/arm/boards/phytec-phycore-imx31/pcm037.c b/arch/arm/boards/phytec-phycore-imx31/pcm037.c
index a1ffb2e73e..39e7838be0 100644
--- a/arch/arm/boards/phytec-phycore-imx31/pcm037.c
+++ b/arch/arm/boards/phytec-phycore-imx31/pcm037.c
@@ -31,7 +31,7 @@
#include <asm/sections.h>
#include <mach/weim.h>
#include <io.h>
-#include <smc911x.h>
+#include <platform_data/eth-smc911x.h>
#include <asm/mmu.h>
#include <partition.h>
#include <generated/mach-types.h>
diff --git a/arch/arm/boards/phytec-phycore-imx35/pcm043.c b/arch/arm/boards/phytec-phycore-imx35/pcm043.c
index e31c79d15f..b83698b90a 100644
--- a/arch/arm/boards/phytec-phycore-imx35/pcm043.c
+++ b/arch/arm/boards/phytec-phycore-imx35/pcm043.c
@@ -34,7 +34,6 @@
#include <nand.h>
#include <generated/mach-types.h>
#include <mach/imx-nand.h>
-#include <fec.h>
#include <fb.h>
#include <led.h>
#include <bootsource.h>
diff --git a/arch/arm/boards/phytec-phycore-omap4460/board.c b/arch/arm/boards/phytec-phycore-omap4460/board.c
index 6495a6f6ab..807cdd677d 100644
--- a/arch/arm/boards/phytec-phycore-omap4460/board.c
+++ b/arch/arm/boards/phytec-phycore-omap4460/board.c
@@ -20,7 +20,6 @@
#include <driver.h>
#include <gpio.h>
#include <io.h>
-#include <ns16550.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
#include <mach/omap4-silicon.h>
diff --git a/arch/arm/boards/phytec-som-am335x/lowlevel.c b/arch/arm/boards/phytec-som-am335x/lowlevel.c
index 73e75eb491..33e83c5a8e 100644
--- a/arch/arm/boards/phytec-som-am335x/lowlevel.c
+++ b/arch/arm/boards/phytec-som-am335x/lowlevel.c
@@ -125,6 +125,7 @@ PHYTEC_ENTRY_MLO(start_am33xx_phytec_phycore_sram_2x512mb, am335x_phytec_phycore
PHYTEC_ENTRY_MLO(start_am33xx_phytec_phycore_sram_1024mb, am335x_phytec_phycore_som_mlo, PHYCORE_IM8G16D3FBBG15EI_1024MB);
PHYTEC_ENTRY_MLO(start_am33xx_phytec_phycore_r2_sram_512mb, am335x_phytec_phycore_som_mlo, PHYCORE_R2_MT41K256M16TW107IT_512MB);
PHYTEC_ENTRY_MLO(start_am33xx_phytec_phycore_r2_sram_256mb, am335x_phytec_phycore_som_mlo, PHYCORE_R2_MT41K128M16JT_256MB);
+PHYTEC_ENTRY_MLO(start_am33xx_phytec_phycore_r2_sram_1024mb, am335x_phytec_phycore_som_mlo, PHYCORE_R2_MT41K512M16HA125IT_1024MB);
PHYTEC_ENTRY(start_am33xx_phytec_phycore_sdram, am335x_phytec_phycore_som);
PHYTEC_ENTRY(start_am33xx_phytec_phycore_no_spi_sdram, am335x_phytec_phycore_som_no_spi);
PHYTEC_ENTRY(start_am33xx_phytec_phycore_no_eeprom_sdram, am335x_phytec_phycore_som_no_eeprom);
diff --git a/arch/arm/boards/phytec-som-am335x/ram-timings.h b/arch/arm/boards/phytec-som-am335x/ram-timings.h
index 884874caf7..9576d265e5 100644
--- a/arch/arm/boards/phytec-som-am335x/ram-timings.h
+++ b/arch/arm/boards/phytec-som-am335x/ram-timings.h
@@ -32,6 +32,7 @@ enum {
PHYCORE_IM8G16D3FBBG15EI_1024MB,
PHYCORE_R2_MT41K256M16TW107IT_512MB,
PHYCORE_R2_MT41K128M16JT_256MB,
+ PHYCORE_R2_MT41K512M16HA125IT_1024MB,
PHYCARD_NT5CB128M16BP_256MB,
};
@@ -232,6 +233,25 @@ struct am335x_sdram_timings physom_timings[] = {
.wr_slave_ratio0 = 0x73,
},
},
+
+ /* 1024MB R2 */
+ [PHYCORE_R2_MT41K512M16HA125IT_1024MB] = {
+ .regs = {
+ .emif_read_latency = 0x7,
+ .emif_tim1 = 0x0AAAD4DB,
+ .emif_tim2 = 0x268F7FDA,
+ .emif_tim3 = 0x501F88BF,
+ .sdram_config = 0x61C053B2,
+ .zq_config = 0x50074BE4,
+ .sdram_ref_ctrl = 0x00000C30,
+ },
+ .data = {
+ .rd_slave_ratio0 = 0x38,
+ .wr_dqs_slave_ratio0 = 0x4d,
+ .fifo_we_slave_ratio0 = 0x9d,
+ .wr_slave_ratio0 = 0x82,
+ },
+ },
};
#endif
diff --git a/arch/arm/boards/phytec-som-imx6/Makefile b/arch/arm/boards/phytec-som-imx6/Makefile
index c61e9cddcf..2f9c4a8a8f 100644
--- a/arch/arm/boards/phytec-som-imx6/Makefile
+++ b/arch/arm/boards/phytec-som-imx6/Makefile
@@ -1,4 +1,4 @@
obj-y += board.o
lwl-y += lowlevel.o
bbenv-y += defaultenv-physom-imx6
-bbenv-y += defaultenv-physom-imx6-mira
+bbenv-y += defaultenv-physom-imx6-phycore
diff --git a/arch/arm/boards/phytec-som-imx6/board.c b/arch/arm/boards/phytec-som-imx6/board.c
index 85ad8cb5e2..930ad74d74 100644
--- a/arch/arm/boards/phytec-som-imx6/board.c
+++ b/arch/arm/boards/phytec-som-imx6/board.c
@@ -29,7 +29,8 @@
#include <init.h>
#include <of.h>
#include <mach/bbu.h>
-#include <fec.h>
+#include <platform_data/eth-fec.h>
+
#include <globalvar.h>
#include <linux/micrel_phy.h>
@@ -113,7 +114,8 @@ static int physom_imx6_devices_init(void)
} else if (of_machine_is_compatible("phytec,imx6q-pcm058-nand")
|| of_machine_is_compatible("phytec,imx6q-pcm058-emmc")
- || of_machine_is_compatible("phytec,imx6dl-pcm058-nand")) {
+ || of_machine_is_compatible("phytec,imx6dl-pcm058-nand")
+ || of_machine_is_compatible("phytec,imx6dl-pcm058-emmc")) {
barebox_set_hostname("phyCORE-i.MX6");
default_environment_path = "/chosen/environment-spinor";
@@ -124,20 +126,20 @@ static int physom_imx6_devices_init(void)
switch (bootsource_get()) {
case BOOTSOURCE_MMC:
- environment_path = asprintf("/chosen/environment-sd%d",
- bootsource_get_instance() + 1);
+ environment_path = basprintf("/chosen/environment-sd%d",
+ bootsource_get_instance() + 1);
envdev = "MMC";
break;
case BOOTSOURCE_NAND:
- environment_path = asprintf("/chosen/environment-nand");
+ environment_path = basprintf("/chosen/environment-nand");
envdev = "NAND flash";
break;
case BOOTSOURCE_SPI:
- environment_path = asprintf("/chosen/environment-spinor");
+ environment_path = basprintf("/chosen/environment-spinor");
envdev = "SPI NOR flash";
break;
default:
- environment_path = asprintf(default_environment_path);
+ environment_path = basprintf(default_environment_path);
envdev = default_envdev;
break;
}
@@ -152,15 +154,23 @@ static int physom_imx6_devices_init(void)
pr_notice("Using environment in %s\n", envdev);
- imx6_bbu_nand_register_handler("nand", BBU_HANDLER_FLAG_DEFAULT);
+ if (of_machine_is_compatible("phytec,imx6q-pcm058-emmc")
+ || of_machine_is_compatible("phytec,imx6dl-pcm058-emmc")) {
+ imx6_bbu_internal_mmc_register_handler("mmc3",
+ "/dev/mmc3",
+ BBU_HANDLER_FLAG_DEFAULT);
+ } else {
+ imx6_bbu_nand_register_handler("nand", BBU_HANDLER_FLAG_DEFAULT);
+ }
defaultenv_append_directory(defaultenv_physom_imx6);
/* Overwrite file /env/init/automount */
if (of_machine_is_compatible("phytec,imx6q-pcm058-nand")
|| of_machine_is_compatible("phytec,imx6q-pcm058-emmc")
- || of_machine_is_compatible("phytec,imx6dl-pcm058-nand")) {
- defaultenv_append_directory(defaultenv_physom_imx6_mira);
+ || of_machine_is_compatible("phytec,imx6dl-pcm058-nand")
+ || of_machine_is_compatible("phytec,imx6dl-pcm058-emmc")) {
+ defaultenv_append_directory(defaultenv_physom_imx6_phycore);
}
return 0;
diff --git a/arch/arm/boards/phytec-som-imx6/defaultenv-physom-imx6-mira/init/automount b/arch/arm/boards/phytec-som-imx6/defaultenv-physom-imx6-phycore/init/automount
index 3659cf7d39..a059e190e2 100644
--- a/arch/arm/boards/phytec-som-imx6/defaultenv-physom-imx6-mira/init/automount
+++ b/arch/arm/boards/phytec-som-imx6/defaultenv-physom-imx6-phycore/init/automount
@@ -12,3 +12,6 @@ automount /mnt/tftp 'ifup eth0 && mount -t tftp $eth0.serverip /mnt/tftp'
mkdir -p /mnt/mmc
automount -d /mnt/mmc 'mmc0.probe=1 && [ -e /dev/mmc0.0 ] && mount /dev/mmc0.0 /mnt/mmc'
+
+mkdir -p /mnt/emmc
+automount -d /mnt/emmc 'mmc3.probe=1 && [ -e /dev/mmc3.0 ] && mount /dev/mmc3.0 /mnt/emmc'
diff --git a/arch/arm/boards/phytec-som-imx6/defaultenv-physom-imx6-phycore/init/bootsource b/arch/arm/boards/phytec-som-imx6/defaultenv-physom-imx6-phycore/init/bootsource
new file mode 100644
index 0000000000..515613b041
--- /dev/null
+++ b/arch/arm/boards/phytec-som-imx6/defaultenv-physom-imx6-phycore/init/bootsource
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+if [ -n "$nv.boot.default" ]; then
+ exit
+fi
+
+if [ $bootsource = mmc ]; then
+ if [ $bootsource_instance = 0 ]; then
+ global.boot.default="mmc emmc nand spi net"
+ elif [ $bootsource_instance = 3 ]; then
+ global.boot.default="emmc mmc nand spi net"
+ fi
+elif [ $bootsource = nand ]; then
+ global.boot.default="nand spi emmc mmc net"
+elif [ $bootsource = spi ]; then
+ global.boot.default="spi nand emmc mmc net"
+elif [ $bootsource = net ]; then
+ global.boot.default="net nand spi emmc mmc"
+fi
diff --git a/arch/arm/boards/phytec-som-imx6/flash-header-phytec-pcm058-2gib.imxcfg b/arch/arm/boards/phytec-som-imx6/flash-header-phytec-pcm058-2gib.imxcfg
new file mode 100644
index 0000000000..54c9e41d28
--- /dev/null
+++ b/arch/arm/boards/phytec-som-imx6/flash-header-phytec-pcm058-2gib.imxcfg
@@ -0,0 +1,8 @@
+#define SETUP_MDCFG0 \
+ wm 32 0x021b000c 0x8c929b85
+
+#define SETUP_MDASP_MDCTL \
+ wm 32 0x021b0040 0x00000047; \
+ wm 32 0x021b0000 0x841A0000
+
+#include "flash-header-phytec-pcm058.h"
diff --git a/arch/arm/boards/phytec-som-imx6/flash-header-phytec-pcm058dl-1gib.imxcfg b/arch/arm/boards/phytec-som-imx6/flash-header-phytec-pcm058dl-1gib.imxcfg
new file mode 100644
index 0000000000..f047253084
--- /dev/null
+++ b/arch/arm/boards/phytec-som-imx6/flash-header-phytec-pcm058dl-1gib.imxcfg
@@ -0,0 +1,8 @@
+#define SETUP_MDCFG0 \
+ wm 32 0x021b000c 0x555A7955
+
+#define SETUP_MDASP_MDCTL \
+ wm 32 0x021b0040 0x00000027; \
+ wm 32 0x021b0000 0x831A0000
+
+#include "flash-header-phytec-pcm058dl.h"
diff --git a/arch/arm/boards/phytec-som-imx6/flash-header-phytec-pcm058dl.h b/arch/arm/boards/phytec-som-imx6/flash-header-phytec-pcm058dl.h
index c7df7907d1..a6e4578cb1 100644
--- a/arch/arm/boards/phytec-som-imx6/flash-header-phytec-pcm058dl.h
+++ b/arch/arm/boards/phytec-som-imx6/flash-header-phytec-pcm058dl.h
@@ -44,18 +44,18 @@ wm 32 0x020e0488 0x00000028
wm 32 0x020e048c 0x00000028
wm 32 0x021b0800 0xa1390003
wm 32 0x021b4800 0xa1380003
-wm 32 0x021b080c 0x0032003A
-wm 32 0x021b0810 0x00350037
-wm 32 0x021b480c 0x00260038
-wm 32 0x021b4810 0x002C0038
-wm 32 0x021b083c 0x42630244
-wm 32 0x021b0840 0x02300238
-wm 32 0x021b483c 0x02540258
-wm 32 0x021b4840 0x0236021e
-wm 32 0x021b0848 0x46484446
-wm 32 0x021b4848 0x302d2c35
-wm 32 0x021b0850 0x36342630
-wm 32 0x021b4850 0x3423372d
+wm 32 0x021b080c 0x0019001C
+wm 32 0x021b0810 0x00140019
+wm 32 0x021b480c 0x00030003
+wm 32 0x021b4810 0x00030010
+wm 32 0x021b083c 0x42140210
+wm 32 0x021b0840 0x02040208
+wm 32 0x021b483c 0x42040208
+wm 32 0x021b4840 0x01680178
+wm 32 0x021b0848 0x40423E3E
+wm 32 0x021b4848 0x4242443E
+wm 32 0x021b0850 0x2C2C2A30
+wm 32 0x021b4850 0x2E2A3228
wm 32 0x021b081c 0x33333333
wm 32 0x021b0820 0x33333333
wm 32 0x021b0824 0x33333333
diff --git a/arch/arm/boards/phytec-som-imx6/lowlevel.c b/arch/arm/boards/phytec-som-imx6/lowlevel.c
index eb796e78b8..c732d32a96 100644
--- a/arch/arm/boards/phytec-som-imx6/lowlevel.c
+++ b/arch/arm/boards/phytec-som-imx6/lowlevel.c
@@ -91,7 +91,10 @@ PHYTEC_ENTRY(start_phytec_pbab01s_256mb_1bank, imx6s_phytec_pbab01, SZ_256M, fal
PHYTEC_ENTRY(start_phytec_pbab01s_512mb_1bank, imx6s_phytec_pbab01, SZ_512M, false);
PHYTEC_ENTRY(start_phytec_phyboard_alcor_1gib, imx6q_phytec_phyboard_alcor, SZ_1G, false);
PHYTEC_ENTRY(start_phytec_phyboard_subra_512mb_1bank, imx6dl_phytec_phyboard_subra, SZ_512M, false);
+PHYTEC_ENTRY(start_phytec_phyboard_subra_1gib_1bank, imx6q_phytec_phyboard_subra, SZ_1G, false);
PHYTEC_ENTRY(start_phytec_phycore_imx6dl_som_nand_256mb, imx6dl_phytec_phycore_som_nand, SZ_256M, true);
+PHYTEC_ENTRY(start_phytec_phycore_imx6dl_som_emmc_1gib, imx6dl_phytec_phycore_som_emmc, SZ_1G, true);
PHYTEC_ENTRY(start_phytec_phycore_imx6q_som_nand_1gib, imx6q_phytec_phycore_som_nand, SZ_1G, true);
PHYTEC_ENTRY(start_phytec_phycore_imx6q_som_emmc_1gib, imx6q_phytec_phycore_som_emmc, SZ_1G, true);
+PHYTEC_ENTRY(start_phytec_phycore_imx6q_som_emmc_2gib, imx6q_phytec_phycore_som_emmc, SZ_2G, true);
diff --git a/arch/arm/boards/pm9261/init.c b/arch/arm/boards/pm9261/init.c
index 63f4f19b3f..177355b633 100644
--- a/arch/arm/boards/pm9261/init.c
+++ b/arch/arm/boards/pm9261/init.c
@@ -35,7 +35,7 @@
#include <mach/iomux.h>
#include <mach/io.h>
#include <mach/at91sam9_smc.h>
-#include <dm9000.h>
+#include <platform_data/eth-dm9000.h>
#include <linux/w1-gpio.h>
#include <w1_mac_address.h>
diff --git a/arch/arm/boards/pm9263/init.c b/arch/arm/boards/pm9263/init.c
index 2b6b0891f5..e9f8588649 100644
--- a/arch/arm/boards/pm9263/init.c
+++ b/arch/arm/boards/pm9263/init.c
@@ -20,7 +20,6 @@
#include <net.h>
#include <init.h>
#include <environment.h>
-#include <fec.h>
#include <asm/armlinux.h>
#include <generated/mach-types.h>
#include <partition.h>
diff --git a/arch/arm/boards/raspberry-pi/rpi-common.c b/arch/arm/boards/raspberry-pi/rpi-common.c
index 0e17587a74..147fce9952 100644
--- a/arch/arm/boards/raspberry-pi/rpi-common.c
+++ b/arch/arm/boards/raspberry-pi/rpi-common.c
@@ -201,8 +201,8 @@ static void rpi_get_board_rev(void)
if (!rpi_board_rev)
goto unknown_rev;
- name = asprintf("RaspberryPi %s %s", rpi_models[rpi_board_rev].name,
- rpi_model_string);
+ name = basprintf("RaspberryPi %s %s",
+ rpi_models[rpi_board_rev].name, rpi_model_string);
barebox_set_model(name);
free(name);
@@ -210,7 +210,7 @@ static void rpi_get_board_rev(void)
unknown_rev:
rpi_board_rev = 0;
- name = asprintf("RaspberryPi %s", rpi_model_string);
+ name = basprintf("RaspberryPi %s", rpi_model_string);
barebox_set_model(name);
free(name);
}
diff --git a/arch/arm/boards/scb9328/scb9328.c b/arch/arm/boards/scb9328/scb9328.c
index 3af140423f..fda3b1432c 100644
--- a/arch/arm/boards/scb9328/scb9328.c
+++ b/arch/arm/boards/scb9328/scb9328.c
@@ -26,7 +26,7 @@
#include <partition.h>
#include <fs.h>
#include <fcntl.h>
-#include <dm9000.h>
+#include <platform_data/eth-dm9000.h>
#include <led.h>
#include <mach/iomux-mx1.h>
#include <mach/devices-imx1.h>
diff --git a/arch/arm/boards/tqma6x/board.c b/arch/arm/boards/tqma6x/board.c
index 9c52c8ae7a..8946a27b69 100644
--- a/arch/arm/boards/tqma6x/board.c
+++ b/arch/arm/boards/tqma6x/board.c
@@ -26,7 +26,6 @@
#include <linux/sizes.h>
#include <init.h>
#include <gpio.h>
-#include <fec.h>
#include <of.h>
#include <linux/micrel_phy.h>
diff --git a/arch/arm/boards/udoo/board.c b/arch/arm/boards/udoo/board.c
index f3668fef0b..f0befaf3a9 100644
--- a/arch/arm/boards/udoo/board.c
+++ b/arch/arm/boards/udoo/board.c
@@ -19,7 +19,6 @@
#include <init.h>
#include <environment.h>
#include <mach/imx6-regs.h>
-#include <fec.h>
#include <gpio.h>
#include <mach/bbu.h>
#include <asm/armlinux.h>
diff --git a/arch/arm/boards/versatile/versatilepb.c b/arch/arm/boards/versatile/versatilepb.c
index 3166cd4fed..8691a171e1 100644
--- a/arch/arm/boards/versatile/versatilepb.c
+++ b/arch/arm/boards/versatile/versatilepb.c
@@ -29,7 +29,7 @@
#include <environment.h>
#include <partition.h>
#include <linux/sizes.h>
-#include <net/smc91111.h>
+#include <platform_data/eth-smc91111.h>
static int vpb_console_init(void)
{
diff --git a/arch/arm/boards/zylonite/board.c b/arch/arm/boards/zylonite/board.c
index 2ff08b7934..bd72cd1992 100644
--- a/arch/arm/boards/zylonite/board.c
+++ b/arch/arm/boards/zylonite/board.c
@@ -25,7 +25,7 @@
#include <init.h>
#include <partition.h>
#include <led.h>
-#include <net/smc91111.h>
+#include <platform_data/eth-smc91111.h>
#include <platform_data/mtd-nand-mrvl.h>
#include <pwm.h>
#include <linux/clk.h>
diff --git a/arch/arm/configs/imx_v7_defconfig b/arch/arm/configs/imx_v7_defconfig
index 82b3821d91..1b0739c35c 100644
--- a/arch/arm/configs/imx_v7_defconfig
+++ b/arch/arm/configs/imx_v7_defconfig
@@ -54,6 +54,7 @@ CONFIG_CMD_IMD=y
CONFIG_CMD_MEMINFO=y
CONFIG_CMD_ARM_MMUINFO=y
CONFIG_CMD_REGULATOR=y
+CONFIG_CMD_MMC_EXTCSD=y
CONFIG_CMD_BOOTM_SHOW_TYPE=y
CONFIG_CMD_BOOTM_VERBOSE=y
CONFIG_CMD_BOOTM_INITRD=y
@@ -101,6 +102,7 @@ CONFIG_CMD_FLASH=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_I2C=y
CONFIG_CMD_LED=y
+CONFIG_CMD_NANDTEST=y
CONFIG_CMD_SPI=y
CONFIG_CMD_LED_TRIGGER=y
CONFIG_CMD_USBGADGET=y
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
index b83c1109ef..813e098145 100644
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -45,10 +45,12 @@ pbl-dtb-$(CONFIG_MACH_PHYTEC_SOM_IMX6) += imx6q-phytec-pbaa03.dtb.o \
imx6dl-phytec-pbab01.dtb.o \
imx6q-phytec-pbab01.dtb.o \
imx6q-phytec-phyboard-alcor.dtb.o \
+ imx6q-phytec-phyboard-subra.dtb.o \
imx6dl-phytec-phyboard-subra.dtb.o \
imx6q-phytec-phycore-som-nand.dtb.o \
imx6q-phytec-phycore-som-emmc.dtb.o \
- imx6dl-phytec-phycore-som-nand.dtb.o
+ imx6dl-phytec-phycore-som-nand.dtb.o \
+ imx6dl-phytec-phycore-som-emmc.dtb.o
pbl-dtb-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_AX3) += armada-xp-openblocks-ax3-4-bb.dtb.o
pbl-dtb-$(CONFIG_MACH_PLATHOME_OPENBLOCKS_A6) += kirkwood-openblocks_a6-bb.dtb.o
pbl-dtb-$(CONFIG_MACH_RADXA_ROCK) += rk3188-radxarock.dtb.o
diff --git a/arch/arm/dts/am335x-phytec-phycard-som.dtsi b/arch/arm/dts/am335x-phytec-phycard-som.dtsi
index d1dfa86bca..f052f0cc3a 100644
--- a/arch/arm/dts/am335x-phytec-phycard-som.dtsi
+++ b/arch/arm/dts/am335x-phytec-phycard-som.dtsi
@@ -185,42 +185,42 @@
reg = <0x0 0x20000>;
};
- partition@1 {
+ partition@20000 {
label = "xload_backup1";
reg = <0x20000 0x20000>;
};
- partition@2 {
+ partition@40000 {
label = "xload_backup2";
reg = <0x40000 0x20000>;
};
- partition@3 {
+ partition@60000 {
label = "xload_backup3";
reg = <0x60000 0x20000>;
};
- partition@4 {
+ partition@80000 {
label = "barebox";
reg = <0x80000 0x80000>;
};
- partition@5 {
+ partition@100000 {
label = "bareboxenv";
reg = <0x100000 0x40000>;
};
- partition@6 {
+ partition@140000 {
label = "oftree";
reg = <0x140000 0x40000>;
};
- partition@7 {
+ partition@180000 {
label = "kernel";
reg = <0x180000 0x800000>;
};
- partition@8 {
+ partition@980000 {
label = "root";
reg = <0x980000 0x0>;
};
diff --git a/arch/arm/dts/am335x-phytec-phycore-som.dtsi b/arch/arm/dts/am335x-phytec-phycore-som.dtsi
index f3a1d4d45a..e48d545e64 100644
--- a/arch/arm/dts/am335x-phytec-phycore-som.dtsi
+++ b/arch/arm/dts/am335x-phytec-phycore-som.dtsi
@@ -174,22 +174,22 @@
reg = <0x0 0x20000>;
};
- partition@1 {
+ partition@20000 {
label = "barebox";
reg = <0x20000 0x80000>;
};
- partition@2 {
+ partition@a0000 {
label = "bareboxenv";
reg = <0xa0000 0x20000>;
};
- partition@3 {
+ partition@c0000 {
label = "oftree";
reg = <0xc0000 0x20000>;
};
- partition@4 {
+ partition@e0000 {
label = "kernel";
reg = <0xe0000 0x0>;
};
@@ -269,42 +269,42 @@
reg = <0x0 0x20000>;
};
- partition@1 {
+ partition@20000 {
label = "xload_backup1";
reg = <0x20000 0x20000>;
};
- partition@2 {
+ partition@40000 {
label = "xload_backup2";
reg = <0x40000 0x20000>;
};
- partition@3 {
+ partition@60000 {
label = "xload_backup3";
reg = <0x60000 0x20000>;
};
- partition@4 {
+ partition@80000 {
label = "barebox";
reg = <0x80000 0x80000>;
};
- partition@5 {
+ partition@100000 {
label = "bareboxenv";
reg = <0x100000 0x40000>;
};
- partition@6 {
+ partition@140000 {
label = "oftree";
reg = <0x140000 0x40000>;
};
- partition@7 {
+ partition@180000 {
label = "kernel";
reg = <0x180000 0x800000>;
};
- partition@8 {
+ partition@980000 {
label = "root";
/*
* Size 0x0 extends partition to
diff --git a/arch/arm/dts/am335x-phytec-phyflex-som.dtsi b/arch/arm/dts/am335x-phytec-phyflex-som.dtsi
index c60943ccec..6561625686 100644
--- a/arch/arm/dts/am335x-phytec-phyflex-som.dtsi
+++ b/arch/arm/dts/am335x-phytec-phyflex-som.dtsi
@@ -165,22 +165,22 @@
reg = <0x0 0x20000>;
};
- partition@1 {
+ partition@20000 {
label = "barebox";
reg = <0x20000 0x80000>;
};
- partition@2 {
+ partition@a0000 {
label = "bareboxenv";
reg = <0xa0000 0x20000>;
};
- partition@3 {
+ partition@c0000 {
label = "oftree";
reg = <0xc0000 0x20000>;
};
- partition@4 {
+ partition@e0000 {
label = "kernel";
reg = <0xe0000 0x0>;
};
@@ -283,42 +283,42 @@
reg = <0x0 0x20000>;
};
- partition@1 {
+ partition@20000 {
label = "xload_backup1";
reg = <0x20000 0x20000>;
};
- partition@2 {
+ partition@40000 {
label = "xload_backup2";
reg = <0x40000 0x20000>;
};
- partition@3 {
+ partition@60000 {
label = "xload_backup3";
reg = <0x60000 0x20000>;
};
- partition@4 {
+ partition@80000 {
label = "barebox";
reg = <0x80000 0x80000>;
};
- partition@5 {
+ partition@100000 {
label = "bareboxenv";
reg = <0x100000 0x40000>;
};
- partition@6 {
+ partition@140000 {
label = "oftree";
reg = <0x140000 0x40000>;
};
- partition@7 {
+ partition@180000 {
label = "kernel";
reg = <0x180000 0x800000>;
};
- partition@8 {
+ partition@980000 {
label = "root";
reg = <0x980000 0x0>;
};
diff --git a/arch/arm/dts/imx25-karo-tx25.dts b/arch/arm/dts/imx25-karo-tx25.dts
index d661463282..8d79471a30 100644
--- a/arch/arm/dts/imx25-karo-tx25.dts
+++ b/arch/arm/dts/imx25-karo-tx25.dts
@@ -126,17 +126,17 @@
reg = <0x0 0x80000>;
};
- partition@1 {
+ partition@80000 {
label = "environment";
reg = <0x80000 0x80000>;
};
- partition@2 {
+ partition@100000 {
label = "kernel";
reg = <0x100000 0x400000>;
};
- partition@3 {
+ partition@500000 {
label = "root";
reg = <0x500000 0x7b00000>;
};
diff --git a/arch/arm/dts/imx27-phytec-phycard-s-rdk-bb.dts b/arch/arm/dts/imx27-phytec-phycard-s-rdk-bb.dts
index 3ea1b5b052..cb02a1dfce 100644
--- a/arch/arm/dts/imx27-phytec-phycard-s-rdk-bb.dts
+++ b/arch/arm/dts/imx27-phytec-phycard-s-rdk-bb.dts
@@ -18,20 +18,20 @@
&nfc {
partition@0 {
label = "boot";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- partition@1 {
+ partition@e0000 {
label = "environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
- partition@2 {
+ partition@100000 {
label = "kernel";
reg = <0x100000 0x400000>;
};
- partition@3 {
+ partition@500000 {
label = "root";
reg = <0x500000 0x7b00000>;
};
diff --git a/arch/arm/dts/imx27-phytec-phycore-rdk.dts b/arch/arm/dts/imx27-phytec-phycore-rdk.dts
index f602045c7e..fff154cb97 100644
--- a/arch/arm/dts/imx27-phytec-phycore-rdk.dts
+++ b/arch/arm/dts/imx27-phytec-phycore-rdk.dts
@@ -32,17 +32,17 @@
reg = <0x00000000 0x00080000>;
};
- environment_nand: partition@1 {
+ environment_nand: partition@80000 {
label = "env";
reg = <0x00080000 0x00020000>;
};
- partition@2 {
+ partition@a0000 {
label = "kernel";
reg = <0x000a0000 0x00400000>;
};
- partition@3 {
+ partition@4a0000 {
label = "root";
reg = <0x004a0000 0>;
};
@@ -54,17 +54,17 @@
reg = <0x00000000 0x00080000>;
};
- environment_nor: partition@1 {
+ environment_nor: partition@80000 {
label = "env";
reg = <0x00080000 0x00020000>;
};
- partition@2 {
+ partition@a0000 {
label = "kernel";
reg = <0x000a0000 0x00400000>;
};
- partition@3 {
+ partition@4a0000 {
label = "root";
reg = <0x004a0000 0>;
};
diff --git a/arch/arm/dts/imx51-babbage.dts b/arch/arm/dts/imx51-babbage.dts
index f8402ca8fa..bde3031d1b 100644
--- a/arch/arm/dts/imx51-babbage.dts
+++ b/arch/arm/dts/imx51-babbage.dts
@@ -27,9 +27,9 @@
#address-cells = <1>;
#size-cells = <1>;
- environment_esdhc1: partition@0 {
+ environment_esdhc1: partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x20000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/imx51-genesi-efika-sb.dts b/arch/arm/dts/imx51-genesi-efika-sb.dts
index 78cb1b7184..5a2c3a1c40 100644
--- a/arch/arm/dts/imx51-genesi-efika-sb.dts
+++ b/arch/arm/dts/imx51-genesi-efika-sb.dts
@@ -415,9 +415,9 @@
#address-cells = <1>;
#size-cells = <1>;
- partition@0 {
+ partition@e0000 {
label = "barebox-environment";
- reg = <0xc0000 0x40000>;
+ reg = <0xe0000 0x20000>;
};
};
@@ -533,9 +533,9 @@
#address-cells = <1>;
#size-cells = <1>;
- partition@0 {
+ partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
};
};
diff --git a/arch/arm/dts/imx53-ccxmx53.dts b/arch/arm/dts/imx53-ccxmx53.dts
index 85d20c3b63..4b5ec6534f 100644
--- a/arch/arm/dts/imx53-ccxmx53.dts
+++ b/arch/arm/dts/imx53-ccxmx53.dts
@@ -12,6 +12,7 @@
/dts-v1/;
#include "imx53-ccxmx53.dtsi"
+#include "imx53.dtsi"
/ {
model = "Digi ConnectCore ccxmx53";
diff --git a/arch/arm/dts/imx53-ccxmx53.dtsi b/arch/arm/dts/imx53-ccxmx53.dtsi
index 5553c68e25..2ed24b65e4 100644
--- a/arch/arm/dts/imx53-ccxmx53.dtsi
+++ b/arch/arm/dts/imx53-ccxmx53.dtsi
@@ -27,7 +27,7 @@
/ {
memory {
- reg = <0x70000000 0x40000000>;
+ reg = <0x0 0x0>;
};
};
@@ -228,26 +228,27 @@
pinctrl-0 = <&pinctrl_nand>;
nand-bus-width = <8>;
nand-ecc-mode = "hw";
+ nand-on-flash-bbt;
status = "okay";
partition@0 {
label = "barebox";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- partition@1 {
+ partition@e0000 {
label = "environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
- partition@2 {
+ partition@100000 {
label = "kernel";
reg = <0x100000 0x400000>;
};
- partition@3 {
+ partition@500000 {
label = "rootfs";
- reg = <0x500000 0x07B00000>;
+ reg = <0x500000 0x0>;
};
};
diff --git a/arch/arm/dts/imx53-guf-vincell-lt.dts b/arch/arm/dts/imx53-guf-vincell-lt.dts
index a577ab262e..bcc378d07f 100644
--- a/arch/arm/dts/imx53-guf-vincell-lt.dts
+++ b/arch/arm/dts/imx53-guf-vincell-lt.dts
@@ -361,15 +361,15 @@
partition@0 {
label = "barebox";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- bareboxenv: partition@1 {
+ bareboxenv: partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
- partition@2 {
+ partition@100000 {
label = "ubi";
reg = <0x100000 0x0>;
};
diff --git a/arch/arm/dts/imx53-mba53.dts b/arch/arm/dts/imx53-mba53.dts
index c908c61671..28f463c451 100644
--- a/arch/arm/dts/imx53-mba53.dts
+++ b/arch/arm/dts/imx53-mba53.dts
@@ -28,9 +28,9 @@
#address-cells = <1>;
#size-cells = <1>;
- partition@0 {
+ partition@e0000 {
label = "environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/imx53-qsb-common.dtsi b/arch/arm/dts/imx53-qsb-common.dtsi
index 85e1b8bd01..f363af975d 100644
--- a/arch/arm/dts/imx53-qsb-common.dtsi
+++ b/arch/arm/dts/imx53-qsb-common.dtsi
@@ -43,9 +43,9 @@
#address-cells = <1>;
#size-cells = <1>;
- bareboxenv: partition@0 {
+ bareboxenv: partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x20000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/imx53-voipac-dmm-668.dtsi b/arch/arm/dts/imx53-voipac-dmm-668.dtsi
index 6f76d2867a..e91c7d02a2 100644
--- a/arch/arm/dts/imx53-voipac-dmm-668.dtsi
+++ b/arch/arm/dts/imx53-voipac-dmm-668.dtsi
@@ -15,20 +15,20 @@
partition@0 {
label = "barebox";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- partition@1 {
+ partition@e0000 {
label = "environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
- partition@2 {
+ partition@100000 {
label = "kernel";
reg = <0x100000 0x400000>;
};
- partition@3 {
+ partition@500000 {
label = "rootfs";
reg = <0x500000 0x07B00000>;
};
diff --git a/arch/arm/dts/imx6dl-eltec-hipercam.dts b/arch/arm/dts/imx6dl-eltec-hipercam.dts
index f272e78a59..4fe174437e 100644
--- a/arch/arm/dts/imx6dl-eltec-hipercam.dts
+++ b/arch/arm/dts/imx6dl-eltec-hipercam.dts
@@ -37,15 +37,15 @@
partition@0 {
label = "barebox";
- reg = <0x0 0xc0000>;
+ reg = <0x0 0xe0000>;
};
- environment_nor0: partition@1 {
+ environment_nor0: partition@e0000 {
label = "bareboxenv";
- reg = <0xc0000 0x8000>;
+ reg = <0xe0000 0x20000>;
};
- partition@2 {
+ partition@100000 {
label = "persistent";
reg = <0x100000 0xf00000>;
};
diff --git a/arch/arm/dts/imx6dl-hummingboard.dts b/arch/arm/dts/imx6dl-hummingboard.dts
index 2314965260..7f4d2b42f2 100644
--- a/arch/arm/dts/imx6dl-hummingboard.dts
+++ b/arch/arm/dts/imx6dl-hummingboard.dts
@@ -29,11 +29,11 @@
partition@0 {
label = "barebox";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- partition@1 {
+ partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/imx6dl-phytec-phyboard-subra.dts b/arch/arm/dts/imx6dl-phytec-phyboard-subra.dts
index 34e414413c..3d1069a965 100644
--- a/arch/arm/dts/imx6dl-phytec-phyboard-subra.dts
+++ b/arch/arm/dts/imx6dl-phytec-phyboard-subra.dts
@@ -11,24 +11,9 @@
/dts-v1/;
#include "imx6s-phytec-pfla02.dtsi"
+#include "imx6qdl-phytec-phyboard-subra.dtsi"
/ {
model = "Phytec phyBOARD SUBRA";
compatible = "phytec,imx6dl-pbab05", "phytec,imx6s-pfla02", "fsl,imx6dl";
-
- chosen {
- stdout-path = &uart4;
- };
-};
-
-&fec {
- status = "okay";
-};
-
-&uart4 {
- status = "okay";
-};
-
-&usdhc3 {
- status = "okay";
};
diff --git a/arch/arm/dts/imx6dl-phytec-phycore-som-emmc.dts b/arch/arm/dts/imx6dl-phytec-phycore-som-emmc.dts
new file mode 100644
index 0000000000..fc153a6b05
--- /dev/null
+++ b/arch/arm/dts/imx6dl-phytec-phycore-som-emmc.dts
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2015 PHYTEC Messtechnik GmbH,
+ * Author: Stefan Christ <s.christ@phytec.de>
+ *
+ * The code contained herein is licensed under the GNU General Public
+ * License. You may obtain a copy of the GNU General Public License
+ * Version 2 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/gpl-license.html
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+/dts-v1/;
+
+#include <arm/imx6dl.dtsi>
+#include "imx6dl.dtsi"
+#include "imx6qdl-phytec-phycore-som.dtsi"
+
+/ {
+ model = "Phytec phyCORE-i.MX6 DualLite/SOLO with eMMC";
+ compatible = "phytec,imx6dl-pcm058-emmc", "fsl,imx6dl";
+};
+
+&ecspi1 {
+ status = "okay";
+};
+
+&eeprom {
+ status = "okay";
+};
+
+&fec {
+ status = "okay";
+ phy-handle = <&ethphy>;
+ phy-mode = "rgmii";
+ phy-reset-gpios = <&gpio1 14 1>;
+
+ mdio {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ ethphy: ethernet-phy@3 {
+ reg = <3>;
+ max-speed = <100>;
+ };
+ };
+};
+
+&flash {
+ status = "okay";
+};
+
+&usdhc1 {
+ status = "okay";
+
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition@0 {
+ label = "barebox";
+ reg = <0x0 0xe0000>;
+ };
+
+ partition@e0000 {
+ label = "barebox-environment";
+ reg = <0xe0000 0x20000>;
+ };
+};
+
+&usdhc4 {
+ status = "okay";
+};
diff --git a/arch/arm/dts/imx6dl-phytec-phycore-som-nand.dts b/arch/arm/dts/imx6dl-phytec-phycore-som-nand.dts
index 2324f3a6e5..3f2f1c7320 100644
--- a/arch/arm/dts/imx6dl-phytec-phycore-som-nand.dts
+++ b/arch/arm/dts/imx6dl-phytec-phycore-som-nand.dts
@@ -53,11 +53,11 @@
partition@0 {
label = "barebox";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- partition@1 {
+ partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/imx6dl-wandboard.dts b/arch/arm/dts/imx6dl-wandboard.dts
index a8674004c8..873e9d6985 100644
--- a/arch/arm/dts/imx6dl-wandboard.dts
+++ b/arch/arm/dts/imx6dl-wandboard.dts
@@ -27,11 +27,11 @@
partition@0 {
label = "barebox";
- reg = <0x0 0xc0000>;
+ reg = <0x0 0xe0000>;
};
- environment_usdhc3: partition@c0000 {
+ environment_usdhc3: partition@e0000 {
label = "barebox-environment";
- reg = <0xc0000 0x40000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/imx6q-dmo-edmqmx6.dts b/arch/arm/dts/imx6q-dmo-edmqmx6.dts
index 071f5f5c5e..3576211be4 100644
--- a/arch/arm/dts/imx6q-dmo-edmqmx6.dts
+++ b/arch/arm/dts/imx6q-dmo-edmqmx6.dts
@@ -53,12 +53,12 @@
partition@0 {
label = "barebox";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- partition@1 {
+ partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x20000>;
+ reg = <0xe0000 0x20000>;
};
};
};
@@ -97,11 +97,11 @@
partition@0 {
label = "barebox";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- partition@1 {
+ partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
};
@@ -111,10 +111,10 @@
partition@0 {
label = "barebox";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- partition@1 {
+ partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/imx6q-embedsky-e9.dts b/arch/arm/dts/imx6q-embedsky-e9.dts
index 726d620681..3bbb60bba3 100644
--- a/arch/arm/dts/imx6q-embedsky-e9.dts
+++ b/arch/arm/dts/imx6q-embedsky-e9.dts
@@ -41,11 +41,11 @@
partition@0 {
label = "barebox";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- environment_mmc1: partition@1 {
+ environment_mmc1: partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
};
@@ -55,10 +55,10 @@
partition@0 {
label = "barebox";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- environment_mmc3: partition@1 {
+ environment_mmc3: partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/imx6q-guf-santaro.dts b/arch/arm/dts/imx6q-guf-santaro.dts
index 27f538a356..2bd1a26317 100644
--- a/arch/arm/dts/imx6q-guf-santaro.dts
+++ b/arch/arm/dts/imx6q-guf-santaro.dts
@@ -587,9 +587,9 @@
#address-cells = <1>;
#size-cells = <1>;
- partition@0 {
+ partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/imx6q-hummingboard.dts b/arch/arm/dts/imx6q-hummingboard.dts
index e1d2fa8ce2..e707eb91c9 100644
--- a/arch/arm/dts/imx6q-hummingboard.dts
+++ b/arch/arm/dts/imx6q-hummingboard.dts
@@ -29,11 +29,11 @@
partition@0 {
label = "barebox";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- partition@1 {
+ partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/imx6q-phytec-pcaaxl3.dtsi b/arch/arm/dts/imx6q-phytec-pcaaxl3.dtsi
index 05224657dc..a6ea7b5cce 100644
--- a/arch/arm/dts/imx6q-phytec-pcaaxl3.dtsi
+++ b/arch/arm/dts/imx6q-phytec-pcaaxl3.dtsi
@@ -139,22 +139,22 @@
reg = <0x0 0x400000>;
};
- environment_nand: partition@1 {
+ environment_nand: partition@400000 {
label = "barebox-environment";
reg = <0x400000 0x20000>;
};
- partition@2 {
+ partition@420000 {
label = "oftree";
reg = <0x420000 0x20000>;
};
- partition@3 {
+ partition@440000 {
label = "kernel";
reg = <0x440000 0x800000>;
};
- partition@4 {
+ partition@C40000 {
label = "root";
reg = <0xC40000 0x0>;
};
@@ -181,10 +181,10 @@
partition@0 {
label = "barebox";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- environment_usdhc3: partition@1 {
+ environment_usdhc3: partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/imx6q-phytec-phyboard-alcor.dts b/arch/arm/dts/imx6q-phytec-phyboard-alcor.dts
index a60fc186e2..1c4a78552d 100644
--- a/arch/arm/dts/imx6q-phytec-phyboard-alcor.dts
+++ b/arch/arm/dts/imx6q-phytec-phyboard-alcor.dts
@@ -35,4 +35,5 @@
&usdhc3 {
status = "okay";
+ max-frequency = <25000000>; /* 25 Mhz */
};
diff --git a/arch/arm/dts/imx6q-phytec-phyboard-subra.dts b/arch/arm/dts/imx6q-phytec-phyboard-subra.dts
new file mode 100644
index 0000000000..561e985604
--- /dev/null
+++ b/arch/arm/dts/imx6q-phytec-phyboard-subra.dts
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2015 PHYTEC Messtechnik GmbH,
+ * Author: Stefan Christ <s.christ@phytec.de>
+ *
+ * The code contained herein is licensed under the GNU General Public
+ * License. You may obtain a copy of the GNU General Public License
+ * Version 2 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/gpl-license.html
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+/dts-v1/;
+#include "imx6q-phytec-pfla02.dtsi"
+#include "imx6qdl-phytec-phyboard-subra.dtsi"
+
+/ {
+ model = "Phytec phyBOARD SUBRA";
+ compatible = "phytec,imx6q-pbab05", "phytec,imx6q-pfla02", "fsl,imx6q";
+};
diff --git a/arch/arm/dts/imx6q-phytec-phycore-som-emmc.dts b/arch/arm/dts/imx6q-phytec-phycore-som-emmc.dts
index 6e19ab553e..74bc09b5d5 100644
--- a/arch/arm/dts/imx6q-phytec-phycore-som-emmc.dts
+++ b/arch/arm/dts/imx6q-phytec-phycore-som-emmc.dts
@@ -20,6 +20,10 @@
compatible = "phytec,imx6q-pcm058-emmc", "fsl,imx6q";
};
+&ecspi1 {
+ status = "okay";
+};
+
&eeprom {
status = "okay";
};
@@ -41,8 +45,25 @@
};
};
+&flash {
+ status = "okay";
+};
+
&usdhc1 {
status = "okay";
+
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition@0 {
+ label = "barebox";
+ reg = <0x0 0xe0000>;
+ };
+
+ partition@e0000 {
+ label = "barebox-environment";
+ reg = <0xe0000 0x20000>;
+ };
};
&usdhc4 {
diff --git a/arch/arm/dts/imx6q-phytec-phycore-som-nand.dts b/arch/arm/dts/imx6q-phytec-phycore-som-nand.dts
index 06f2f71537..aa2c94abee 100644
--- a/arch/arm/dts/imx6q-phytec-phycore-som-nand.dts
+++ b/arch/arm/dts/imx6q-phytec-phycore-som-nand.dts
@@ -62,11 +62,11 @@
partition@0 {
label = "barebox";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- partition@1 {
+ partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/imx6q-var-custom.dts b/arch/arm/dts/imx6q-var-custom.dts
index ef6981e3bc..fe03589454 100644
--- a/arch/arm/dts/imx6q-var-custom.dts
+++ b/arch/arm/dts/imx6q-var-custom.dts
@@ -127,17 +127,17 @@
reg = <0x0 0x200000>;
};
- partition@1 {
+ partition@200000 {
label = "barebox-environment";
reg = <0x200000 0x20000>;
};
- partition@2 {
+ partition@220000 {
label = "kernel";
reg = <0x220000 0x600000>;
};
- partition@3 {
+ partition@820000 {
label = "rootfs";
reg = <0x820000 0x18000000>;
};
diff --git a/arch/arm/dts/imx6q-var-som.dtsi b/arch/arm/dts/imx6q-var-som.dtsi
index d005f319d6..63a17fc660 100644
--- a/arch/arm/dts/imx6q-var-som.dtsi
+++ b/arch/arm/dts/imx6q-var-som.dtsi
@@ -42,17 +42,17 @@
reg = <0x0 0x200000>;
};
- environment_nand: partition@1 {
+ environment_nand: partition@200000 {
label = "barebox-environment";
reg = <0x200000 0x20000>;
};
- partition@2 {
+ partition@220000 {
label = "kernel";
reg = <0x220000 0x600000>;
};
- partition@3 {
+ partition@820000 {
label = "rootfs";
reg = <0x820000 0x1F7E0000>;
};
diff --git a/arch/arm/dts/imx6q-wandboard.dts b/arch/arm/dts/imx6q-wandboard.dts
index 26d8a0077d..0606727a11 100644
--- a/arch/arm/dts/imx6q-wandboard.dts
+++ b/arch/arm/dts/imx6q-wandboard.dts
@@ -27,11 +27,11 @@
partition@0 {
label = "barebox";
- reg = <0x0 0xc0000>;
+ reg = <0x0 0xe0000>;
};
- environment_usdhc3: partition@c0000 {
+ environment_usdhc3: partition@e0000 {
label = "barebox-environment";
- reg = <0xc0000 0x40000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/imx6qdl-gw54xx.dtsi b/arch/arm/dts/imx6qdl-gw54xx.dtsi
index ea5739ddcb..5f8e489aeb 100644
--- a/arch/arm/dts/imx6qdl-gw54xx.dtsi
+++ b/arch/arm/dts/imx6qdl-gw54xx.dtsi
@@ -31,7 +31,7 @@
reg = <0x0 0x400000>;
};
- partition@1 {
+ partition@400000 {
label = "barebox-environment";
reg = <0x400000 0x20000>;
};
diff --git a/arch/arm/dts/imx6qdl-nitrogen6x.dtsi b/arch/arm/dts/imx6qdl-nitrogen6x.dtsi
index 8fcd4e48a4..9ff7395f45 100644
--- a/arch/arm/dts/imx6qdl-nitrogen6x.dtsi
+++ b/arch/arm/dts/imx6qdl-nitrogen6x.dtsi
@@ -31,12 +31,12 @@
partition@0 {
label = "barebox";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- partition@1 {
+ partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/imx6qdl-phytec-pfla02.dtsi b/arch/arm/dts/imx6qdl-phytec-pfla02.dtsi
index b79ce2c0f9..9a8c7024a3 100644
--- a/arch/arm/dts/imx6qdl-phytec-pfla02.dtsi
+++ b/arch/arm/dts/imx6qdl-phytec-pfla02.dtsi
@@ -66,17 +66,17 @@
reg = <0x0 0x100000>;
};
- partition@1 {
+ partition@100000 {
label = "barebox-environment";
reg = <0x100000 0x20000>;
};
- partition@2 {
+ partition@120000 {
label = "oftree";
reg = <0x120000 0x20000>;
};
- partition@3 {
+ partition@140000 {
label = "kernel";
reg = <0x140000 0x0>;
};
@@ -85,6 +85,7 @@
&fec {
phy-handle = <&ethphy>;
+ phy-reset-duration = <10>; /* in msecs */
mdio {
#address-cells = <1>;
@@ -108,22 +109,22 @@
reg = <0x0 0x400000>;
};
- partition@1 {
+ partition@400000 {
label = "barebox-environment";
reg = <0x400000 0x100000>;
};
- partition@2 {
+ partition@500000 {
label = "oftree";
reg = <0x500000 0x100000>;
};
- partition@3 {
+ partition@600000 {
label = "kernel";
reg = <0x600000 0x800000>;
};
- partition@4 {
+ partition@e00000 {
label = "root";
reg = <0xe00000 0x0>;
};
@@ -180,11 +181,23 @@
partition@0 {
label = "barebox";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- partition@1 {
+ partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
+ };
+};
+
+&i2c1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_i2c1>;
+ status = "okay";
+
+ eeprom: eeprom@50 {
+ compatible = "atmel,24c32";
+ pagesize = <32>;
+ reg = <0x50>;
};
};
diff --git a/arch/arm/dts/imx6qdl-phytec-phyboard-subra.dtsi b/arch/arm/dts/imx6qdl-phytec-phyboard-subra.dtsi
new file mode 100644
index 0000000000..a38765b142
--- /dev/null
+++ b/arch/arm/dts/imx6qdl-phytec-phyboard-subra.dtsi
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2015 PHYTEC Messtechnik GmbH,
+ * Author: Stefan Christ <s.christ@phytec.de>
+ *
+ * The code contained herein is licensed under the GNU General Public
+ * License. You may obtain a copy of the GNU General Public License
+ * Version 2 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/gpl-license.html
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+/ {
+ chosen {
+ stdout-path = &uart4;
+ };
+};
+
+&fec {
+ status = "okay";
+};
+
+&uart4 {
+ status = "okay";
+};
+
+&usdhc3 {
+ status = "okay";
+ max-frequency = <25000000>; /* 25 Mhz */
+};
diff --git a/arch/arm/dts/imx6qdl-phytec-phycore-som.dtsi b/arch/arm/dts/imx6qdl-phytec-phycore-som.dtsi
index 2a975d103e..d446a5e9af 100644
--- a/arch/arm/dts/imx6qdl-phytec-phycore-som.dtsi
+++ b/arch/arm/dts/imx6qdl-phytec-phycore-som.dtsi
@@ -46,6 +46,7 @@
compatible = "m25p80";
spi-max-frequency = <20000000>;
reg = <0>;
+ status = "disabled";
#address-cells = <1>;
#size-cells = <1>;
@@ -55,17 +56,17 @@
reg = <0x0 0x100000>;
};
- partition@1 {
+ partition@100000 {
label = "barebox-environment";
reg = <0x100000 0x20000>;
};
- partition@2 {
+ partition@120000 {
label = "oftree";
reg = <0x120000 0x20000>;
};
- partition@3 {
+ partition@140000 {
label = "kernel";
reg = <0x140000 0x0>;
};
@@ -91,22 +92,22 @@
reg = <0x0 0x400000>;
};
- partition@1 {
+ partition@400000 {
label = "barebox-environment";
reg = <0x400000 0x100000>;
};
- partition@2 {
+ partition@500000 {
label = "oftree";
reg = <0x500000 0x100000>;
};
- partition@3 {
+ partition@600000 {
label = "kernel";
reg = <0x600000 0x800000>;
};
- partition@4 {
+ partition@e00000 {
label = "root";
reg = <0xe00000 0x0>;
};
@@ -256,11 +257,11 @@
partition@0 {
label = "barebox";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- partition@1 {
+ partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/imx6qdl-sabrelite.dtsi b/arch/arm/dts/imx6qdl-sabrelite.dtsi
index d5a6ff4b1f..10b0002ec2 100644
--- a/arch/arm/dts/imx6qdl-sabrelite.dtsi
+++ b/arch/arm/dts/imx6qdl-sabrelite.dtsi
@@ -31,12 +31,12 @@
partition@0 {
label = "barebox";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- partition@1 {
+ partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/imx6qdl-sabresd.dtsi b/arch/arm/dts/imx6qdl-sabresd.dtsi
index 32318cf389..6b10229c88 100644
--- a/arch/arm/dts/imx6qdl-sabresd.dtsi
+++ b/arch/arm/dts/imx6qdl-sabresd.dtsi
@@ -31,11 +31,11 @@
partition@0 {
label = "barebox";
- reg = <0x0 0x80000>;
+ reg = <0x0 0xe0000>;
};
- environment_usdhc3: partition@1 {
+ environment_usdhc3: partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/imx6qdl-tx6x.dtsi b/arch/arm/dts/imx6qdl-tx6x.dtsi
index 9c5d676a74..3898425d9c 100644
--- a/arch/arm/dts/imx6qdl-tx6x.dtsi
+++ b/arch/arm/dts/imx6qdl-tx6x.dtsi
@@ -32,7 +32,7 @@
reg = <0x0 0x400000>;
};
- partition@1 {
+ partition@400000 {
label = "barebox-environment";
reg = <0x400000 0x100000>;
};
diff --git a/arch/arm/dts/imx6s-riotboard.dts b/arch/arm/dts/imx6s-riotboard.dts
index 3d0a930c3f..09ac534625 100644
--- a/arch/arm/dts/imx6s-riotboard.dts
+++ b/arch/arm/dts/imx6s-riotboard.dts
@@ -233,9 +233,9 @@
reg = <0x0 0x80000>;
};
- environment_usdhc4: partition@1 {
+ environment_usdhc4: partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x80000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/imx6sx-sdb.dts b/arch/arm/dts/imx6sx-sdb.dts
index fbf098bbe6..7b60f9326a 100644
--- a/arch/arm/dts/imx6sx-sdb.dts
+++ b/arch/arm/dts/imx6sx-sdb.dts
@@ -52,9 +52,9 @@
#address-cells = <1>;
#size-cells = <1>;
- partition@0 {
+ partition@e0000 {
label = "barebox-environment";
- reg = <0x80000 0x20000>;
+ reg = <0xe0000 0x20000>;
};
};
diff --git a/arch/arm/dts/rk3188-radxarock.dts b/arch/arm/dts/rk3188-radxarock.dts
index 47b2487dd9..cafd4d36ed 100644
--- a/arch/arm/dts/rk3188-radxarock.dts
+++ b/arch/arm/dts/rk3188-radxarock.dts
@@ -34,7 +34,7 @@
label = "barebox";
reg = <0x0 0x80000>;
};
- partition@1 {
+ partition@80000 {
label = "barebox-environment";
reg = <0x80000 0x80000>;
};
diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
index 28b4f4a4b4..f6024c80ec 100644
--- a/arch/arm/lib/bootm.c
+++ b/arch/arm/lib/bootm.c
@@ -67,21 +67,30 @@ static int sdram_start_and_size(unsigned long *start, unsigned long *size)
return 0;
}
-static void get_kernel_addresses(unsigned long mem_start, size_t image_size,
+static int get_kernel_addresses(size_t image_size,
int verbose, unsigned long *load_address,
- unsigned long *spacing)
+ unsigned long *mem_free)
{
+ unsigned long mem_start, mem_size;
+ int ret;
+ size_t image_decomp_size;
+ unsigned long spacing;
+
+ ret = sdram_start_and_size(&mem_start, &mem_size);
+ if (ret)
+ return ret;
+
/*
* We don't know the exact decompressed size so just use a conservative
* default of 4 times the size of the compressed image.
*/
- size_t image_decomp_size = PAGE_ALIGN(image_size * 4);
+ image_decomp_size = PAGE_ALIGN(image_size * 4);
/*
* By default put oftree/initrd close behind compressed kernel image to
* avoid placing it outside of the kernels lowmem region.
*/
- *spacing = SZ_1M;
+ spacing = SZ_1M;
if (*load_address == UIMAGE_INVALID_ADDRESS) {
/*
@@ -99,8 +108,12 @@ static void get_kernel_addresses(unsigned long mem_start, size_t image_size,
* spacing to allow this relocation to happen without
* overwriting anything placed behind the kernel.
*/
- *spacing += image_decomp_size;
+ spacing += image_decomp_size;
}
+
+ *mem_free = PAGE_ALIGN(*load_address + image_size + spacing);
+
+ return 0;
}
static int __do_bootm_linux(struct image_data *data, unsigned long free_mem, int swap)
@@ -160,24 +173,20 @@ static int __do_bootm_linux(struct image_data *data, unsigned long free_mem, int
static int do_bootm_linux(struct image_data *data)
{
- unsigned long load_address, mem_start, mem_size, mem_free, spacing;
+ unsigned long load_address, mem_free;
int ret;
- ret = sdram_start_and_size(&mem_start, &mem_size);
- if (ret)
- return ret;
-
load_address = data->os_address;
- get_kernel_addresses(mem_start, bootm_get_os_size(data),
- bootm_verbose(data), &load_address, &spacing);
+ ret = get_kernel_addresses(bootm_get_os_size(data),
+ bootm_verbose(data), &load_address, &mem_free);
+ if (ret)
+ return ret;
ret = bootm_load_os(data, load_address);
if (ret)
return ret;
- mem_free = PAGE_ALIGN(data->os_res->end + spacing);
-
return __do_bootm_linux(data, mem_free, 0);
}
@@ -273,11 +282,7 @@ static int do_bootz_linux(struct image_data *data)
u32 end, start;
size_t image_size;
unsigned long load_address = data->os_address;
- unsigned long mem_start, mem_size, mem_free, spacing;
-
- ret = sdram_start_and_size(&mem_start, &mem_size);
- if (ret)
- return ret;
+ unsigned long mem_free;
fd = open(data->os_file, O_RDONLY);
if (fd < 0) {
@@ -315,8 +320,10 @@ static int do_bootz_linux(struct image_data *data)
image_size = end - start;
load_address = data->os_address;
- get_kernel_addresses(mem_start, image_size, bootm_verbose(data),
- &load_address, &spacing);
+ ret = get_kernel_addresses(image_size, bootm_verbose(data),
+ &load_address, &mem_free);
+ if (ret)
+ return ret;
data->os_res = request_sdram_region("zimage", load_address, image_size);
if (!data->os_res) {
@@ -352,8 +359,6 @@ static int do_bootz_linux(struct image_data *data)
close(fd);
- mem_free = PAGE_ALIGN(data->os_res->end + spacing);
-
return __do_bootm_linux(data, mem_free, swap);
err_out:
@@ -570,7 +575,7 @@ static int armlinux_register_image_handler(void)
register_image_handler(&aimage_handler);
binfmt_register(&binfmt_aimage_hook);
}
- if (IS_BUILTIN(CONFIG_CMD_BOOTM_FITIMAGE))
+ if (IS_BUILTIN(CONFIG_FITIMAGE))
register_image_handler(&arm_fit_handler);
binfmt_register(&binfmt_arm_zimage_hook);
binfmt_register(&binfmt_barebox_hook);
diff --git a/arch/arm/mach-at91/bootstrap.c b/arch/arm/mach-at91/bootstrap.c
index 47e78965d9..8502bb00ff 100644
--- a/arch/arm/mach-at91/bootstrap.c
+++ b/arch/arm/mach-at91/bootstrap.c
@@ -99,49 +99,49 @@ static void boot_nand_barebox_action(struct menu *m, struct menu_entry *me)
{
at91bootstrap_boot_nand(true);
- getc();
+ getchar();
}
static void boot_nand_action(struct menu *m, struct menu_entry *me)
{
at91bootstrap_boot_nand(false);
- getc();
+ getchar();
}
static void boot_m25p80_barebox_action(struct menu *m, struct menu_entry *me)
{
at91bootstrap_boot_nand(true);
- getc();
+ getchar();
}
static void boot_m25p80_action(struct menu *m, struct menu_entry *me)
{
at91bootstrap_boot_nand(false);
- getc();
+ getchar();
}
static void boot_dataflash_barebox_action(struct menu *m, struct menu_entry *me)
{
at91bootstrap_boot_dataflash(true);
- getc();
+ getchar();
}
static void boot_dataflash_action(struct menu *m, struct menu_entry *me)
{
at91bootstrap_boot_dataflash(false);
- getc();
+ getchar();
}
static void boot_mmc_disk_action(struct menu *m, struct menu_entry *me)
{
at91bootstrap_boot_mmc();
- getc();
+ getchar();
}
static void boot_reset_action(struct menu *m, struct menu_entry *me)
@@ -234,7 +234,7 @@ static int at91_bootstrap(void)
{
if (is_menu()) {
printf("press 'm' to start the menu\n");
- if (tstc() && getc() == 'm')
+ if (tstc() && getchar() == 'm')
at91_bootstrap_menu();
}
diff --git a/arch/arm/mach-imx/esdctl.c b/arch/arm/mach-imx/esdctl.c
index 66ba51cde1..106e648bd3 100644
--- a/arch/arm/mach-imx/esdctl.c
+++ b/arch/arm/mach-imx/esdctl.c
@@ -434,7 +434,7 @@ static __maybe_unused struct of_device_id imx_esdctl_dt_ids[] = {
}
};
-static struct driver_d imx_serial_driver = {
+static struct driver_d imx_esdctl_driver = {
.name = "imx-esdctl",
.probe = imx_esdctl_probe,
.id_table = imx_esdctl_ids,
@@ -443,7 +443,7 @@ static struct driver_d imx_serial_driver = {
static int imx_esdctl_init(void)
{
- return platform_driver_register(&imx_serial_driver);
+ return platform_driver_register(&imx_esdctl_driver);
}
mem_initcall(imx_esdctl_init);
diff --git a/arch/arm/mach-imx/iim.c b/arch/arm/mach-imx/iim.c
index dbd8ccf054..ecaa7e6332 100644
--- a/arch/arm/mach-imx/iim.c
+++ b/arch/arm/mach-imx/iim.c
@@ -330,7 +330,7 @@ static void imx_iim_add_mac_param(struct iim_priv *iim, int macnum, int bank, in
iimmac->offset = offset;
iimmac->bank = iim->bank[bank];
- name = asprintf("ethaddr%d", macnum);
+ name = basprintf("ethaddr%d", macnum);
dev_add_param_mac(&iim->dev, name, imx_iim_set_mac,
imx_iim_get_mac, iimmac->ethaddr, iimmac);
diff --git a/arch/arm/mach-imx/include/mach/devices.h b/arch/arm/mach-imx/include/mach/devices.h
index 45bb0a51ee..6a045dd070 100644
--- a/arch/arm/mach-imx/include/mach/devices.h
+++ b/arch/arm/mach-imx/include/mach/devices.h
@@ -1,5 +1,5 @@
-#include <fec.h>
+#include <platform_data/eth-fec.h>
#include <input/matrix_keypad.h>
#include <i2c/i2c.h>
#include <mach/spi.h>
diff --git a/arch/arm/mach-omap/am33xx_bbu_nand.c b/arch/arm/mach-omap/am33xx_bbu_nand.c
index ee767d32e4..25f0e79ee6 100644
--- a/arch/arm/mach-omap/am33xx_bbu_nand.c
+++ b/arch/arm/mach-omap/am33xx_bbu_nand.c
@@ -40,7 +40,7 @@ static int write_image(const char *devfile, const void *image, size_t size)
return fd;
}
- ret = erase(fd, ~0, 0);
+ ret = erase(fd, ERASE_SIZE_ALL, 0);
if (ret < 0) {
pr_err("could not erase %s: %s\n", devfile,
errno_str());
diff --git a/arch/arm/mach-omap/am33xx_bbu_spi_mlo.c b/arch/arm/mach-omap/am33xx_bbu_spi_mlo.c
index 702bb9af59..69a73ffb06 100644
--- a/arch/arm/mach-omap/am33xx_bbu_spi_mlo.c
+++ b/arch/arm/mach-omap/am33xx_bbu_spi_mlo.c
@@ -70,7 +70,7 @@ static int spi_nor_mlo_handler(struct bbu_handler *handler,
goto out;
}
- ret = erase(dstfd, ~0, 0);
+ ret = erase(dstfd, ERASE_SIZE_ALL, 0);
if (ret < 0) {
printf("could not erase %s: %s", data->devicefile, errno_str());
goto out1;
diff --git a/arch/arm/mach-omap/omap_devices.c b/arch/arm/mach-omap/omap_devices.c
index 9ed3dcf619..f577fa6ea7 100644
--- a/arch/arm/mach-omap/omap_devices.c
+++ b/arch/arm/mach-omap/omap_devices.c
@@ -1,5 +1,5 @@
#include <driver.h>
-#include <ns16550.h>
+#include <platform_data/serial-ns16550.h>
#include <asm/armlinux.h>
#include <mach/omap3-devices.h>
diff --git a/arch/arm/mach-omap/omap_generic.c b/arch/arm/mach-omap/omap_generic.c
index 34ed94007e..d27c7a867f 100644
--- a/arch/arm/mach-omap/omap_generic.c
+++ b/arch/arm/mach-omap/omap_generic.c
@@ -130,7 +130,7 @@ static int omap_env_init(void)
device_detect_by_name(diskdev);
- partname = asprintf("/dev/%s.0", diskdev);
+ partname = basprintf("/dev/%s.0", diskdev);
mkdir("/boot", 0666);
ret = mount(partname, "fat", "/boot", NULL);
diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
index 8805930215..77938190e1 100644
--- a/arch/arm/mach-omap/xload.c
+++ b/arch/arm/mach-omap/xload.c
@@ -115,7 +115,7 @@ static void *omap_xload_boot_mmc(void)
device_detect_by_name(diskdev);
- partname = asprintf("%s.0", diskdev);
+ partname = basprintf("%s.0", diskdev);
ret = mount(partname, NULL, "/", NULL);
@@ -280,7 +280,7 @@ static void *am33xx_net_boot(void)
return NULL;
}
- file = asprintf("%s/%s", TFTP_MOUNT, bootfile);
+ file = basprintf("%s/%s", TFTP_MOUNT, bootfile);
buf = read_file(file, &len);
if (!buf)
diff --git a/arch/arm/mach-socfpga/generic.c b/arch/arm/mach-socfpga/generic.c
index 906bc63330..c920bd658f 100644
--- a/arch/arm/mach-socfpga/generic.c
+++ b/arch/arm/mach-socfpga/generic.c
@@ -4,7 +4,6 @@
#include <init.h>
#include <io.h>
#include <fs.h>
-#include <net/designware.h>
#include <linux/clkdev.h>
#include <linux/clk.h>
#include <linux/stat.h>
diff --git a/arch/arm/mach-socfpga/xload.c b/arch/arm/mach-socfpga/xload.c
index fd0d777add..7f8f0320ca 100644
--- a/arch/arm/mach-socfpga/xload.c
+++ b/arch/arm/mach-socfpga/xload.c
@@ -2,7 +2,7 @@
#include <platform_data/dw_mmc.h>
#include <bootsource.h>
#include <bootstrap.h>
-#include <ns16550.h>
+#include <platform_data/serial-ns16550.h>
#include <common.h>
#include <malloc.h>
#include <init.h>
diff --git a/arch/arm/mach-tegra/include/mach/lowlevel.h b/arch/arm/mach-tegra/include/mach/lowlevel.h
index f70688e029..e9ba5ee393 100644
--- a/arch/arm/mach-tegra/include/mach/lowlevel.h
+++ b/arch/arm/mach-tegra/include/mach/lowlevel.h
@@ -255,9 +255,6 @@ void tegra_cpu_lowlevel_setup(char *fdt)
{
uint32_t r;
- if (tegra_cpu_is_maincomplex())
- tegra_maincomplex_entry(fdt - get_runtime_offset());
-
/* set the cpu to SVC32 mode */
__asm__ __volatile__("mrs %0, cpsr":"=r"(r));
r &= ~0x1f;
@@ -265,6 +262,10 @@ void tegra_cpu_lowlevel_setup(char *fdt)
__asm__ __volatile__("msr cpsr, %0" : : "r"(r));
arm_setup_stack(TEGRA_IRAM_BASE + SZ_256K - 8);
+
+ if (tegra_cpu_is_maincomplex())
+ tegra_maincomplex_entry(fdt - get_runtime_offset());
+
tegra_ll_delay_setup();
}
diff --git a/arch/arm/mach-tegra/tegra20.c b/arch/arm/mach-tegra/tegra20.c
index 8d1cd5b2fb..10c149a955 100644
--- a/arch/arm/mach-tegra/tegra20.c
+++ b/arch/arm/mach-tegra/tegra20.c
@@ -16,7 +16,6 @@
#include <common.h>
#include <init.h>
-#include <ns16550.h>
#include <asm/memory.h>
#include <mach/iomap.h>
#include <mach/lowlevel.h>
diff --git a/arch/blackfin/boards/ipe337/ipe337.c b/arch/blackfin/boards/ipe337/ipe337.c
index 84cc786f85..604062a54b 100644
--- a/arch/blackfin/boards/ipe337/ipe337.c
+++ b/arch/blackfin/boards/ipe337/ipe337.c
@@ -4,7 +4,7 @@
#include <asm/cpu/cdefBF561.h>
#include <partition.h>
#include <fs.h>
-#include <smc911x.h>
+#include <platform_data/eth-smc911x.h>
struct smc911x_plat smcplat = {
.shift = 1,
diff --git a/arch/efi/efi/efi.c b/arch/efi/efi/efi.c
index 9c270a597e..36ac016a91 100644
--- a/arch/efi/efi/efi.c
+++ b/arch/efi/efi/efi.c
@@ -26,7 +26,7 @@
#include <init.h>
#include <restart.h>
#include <driver.h>
-#include <ns16550.h>
+#include <platform_data/serial-ns16550.h>
#include <io.h>
#include <efi.h>
#include <malloc.h>
diff --git a/arch/mips/mach-ar231x/ar231x.c b/arch/mips/mach-ar231x/ar231x.c
index f714a11e92..3a0103b5ce 100644
--- a/arch/mips/mach-ar231x/ar231x.c
+++ b/arch/mips/mach-ar231x/ar231x.c
@@ -16,7 +16,7 @@
#include <common.h>
#include <init.h>
#include <io.h>
-#include <ns16550.h>
+#include <platform_data/serial-ns16550.h>
#include <mach/ar231x_platform.h>
#include <mach/ar2312_regs.h>
diff --git a/arch/ppc/boards/freescale-p1010rdb/p1010rdb.c b/arch/ppc/boards/freescale-p1010rdb/p1010rdb.c
index 60cae46d25..eab3abac70 100644
--- a/arch/ppc/boards/freescale-p1010rdb/p1010rdb.c
+++ b/arch/ppc/boards/freescale-p1010rdb/p1010rdb.c
@@ -17,7 +17,7 @@
#include <common.h>
#include <init.h>
#include <driver.h>
-#include <ns16550.h>
+#include <platform_data/serial-ns16550.h>
#include <net.h>
#include <types.h>
#include <i2c/i2c.h>
diff --git a/arch/ppc/boards/freescale-p1022ds/p1022ds.c b/arch/ppc/boards/freescale-p1022ds/p1022ds.c
index 57e7953fb1..95a7234d4b 100644
--- a/arch/ppc/boards/freescale-p1022ds/p1022ds.c
+++ b/arch/ppc/boards/freescale-p1022ds/p1022ds.c
@@ -17,7 +17,7 @@
#include <common.h>
#include <init.h>
#include <driver.h>
-#include <ns16550.h>
+#include <platform_data/serial-ns16550.h>
#include <net.h>
#include <types.h>
#include <i2c/i2c.h>
diff --git a/arch/ppc/boards/freescale-p2020rdb/p2020rdb.c b/arch/ppc/boards/freescale-p2020rdb/p2020rdb.c
index 385a436459..b03d791eb1 100644
--- a/arch/ppc/boards/freescale-p2020rdb/p2020rdb.c
+++ b/arch/ppc/boards/freescale-p2020rdb/p2020rdb.c
@@ -20,7 +20,7 @@
#include <common.h>
#include <init.h>
#include <driver.h>
-#include <ns16550.h>
+#include <platform_data/serial-ns16550.h>
#include <types.h>
#include <i2c/i2c.h>
#include <partition.h>
diff --git a/arch/ppc/boards/geip-da923rc/da923rc.c b/arch/ppc/boards/geip-da923rc/da923rc.c
index b6b5d56acd..85c974780d 100644
--- a/arch/ppc/boards/geip-da923rc/da923rc.c
+++ b/arch/ppc/boards/geip-da923rc/da923rc.c
@@ -22,7 +22,7 @@
#include <asm/io.h>
#include <net.h>
#include <gpio.h>
-#include <ns16550.h>
+#include <platform_data/serial-ns16550.h>
#include <partition.h>
#include <environment.h>
#include <i2c/i2c.h>
diff --git a/arch/ppc/boards/geip-da923rc/product_data.c b/arch/ppc/boards/geip-da923rc/product_data.c
index 0c4600611a..eda10a4178 100644
--- a/arch/ppc/boards/geip-da923rc/product_data.c
+++ b/arch/ppc/boards/geip-da923rc/product_data.c
@@ -15,6 +15,7 @@
*/
#include <common.h>
+#include <crc.h>
#include <i2c/i2c.h>
#include <mach/immap_85xx.h>
#include <mach/fsl_i2c.h>
diff --git a/arch/ppc/boards/pcm030/pcm030.c b/arch/ppc/boards/pcm030/pcm030.c
index 11b3beb20f..05c1ce9ca8 100644
--- a/arch/ppc/boards/pcm030/pcm030.c
+++ b/arch/ppc/boards/pcm030/pcm030.c
@@ -26,7 +26,7 @@
#include <common.h>
#include <driver.h>
#include <init.h>
-#include <fec.h>
+#include <platform_data/eth-fec.h>
#include <types.h>
#include <partition.h>
#include <memory.h>
diff --git a/arch/x86/boards/x86_generic/intf_platform_ide.c b/arch/x86/boards/x86_generic/intf_platform_ide.c
index 18a2620ce0..528e721d56 100644
--- a/arch/x86/boards/x86_generic/intf_platform_ide.c
+++ b/arch/x86/boards/x86_generic/intf_platform_ide.c
@@ -24,7 +24,7 @@
#include <driver.h>
#include <init.h>
#include <linux/err.h>
-#include <platform_ide.h>
+#include <platform_data/ide.h>
#include "envsector.h"
static struct ide_port_info ide_plat = {
diff --git a/arch/x86/boards/x86_generic/serial_ns16550.c b/arch/x86/boards/x86_generic/serial_ns16550.c
index 3b284f3d3d..abc1047a50 100644
--- a/arch/x86/boards/x86_generic/serial_ns16550.c
+++ b/arch/x86/boards/x86_generic/serial_ns16550.c
@@ -25,7 +25,7 @@
#include <driver.h>
#include <init.h>
#include <asm/syslib.h>
-#include <ns16550.h>
+#include <platform_data/serial-ns16550.h>
#include <linux/err.h>
static struct NS16550_plat serial_plat = {
diff --git a/commands/Kconfig b/commands/Kconfig
index 0aab6effea..ca36ffc288 100644
--- a/commands/Kconfig
+++ b/commands/Kconfig
@@ -266,19 +266,6 @@ endmenu
menu "Boot"
-# TODO: isn't a command
-config FLEXIBLE_BOOTARGS
- bool
- prompt "flexible Linux bootargs generation"
- depends on CMD_GLOBAL
- help
- Select this to get a more flexible bootargs generation. With this
- option the bootargs are concatenated together from global variables
- beginning with 'global.linux.bootargs.' and 'global.linux.mtdparts.'
- This allows for more flexible scripting since with it it's possible
- to replace parts of the bootargs string without reconstructing it
- completely.
-
config CMD_AT91_BOOT_TEST
bool "at91_boot_test"
depends on ARCH_AT91
diff --git a/commands/automount.c b/commands/automount.c
index b491d203fd..a71430c9ef 100644
--- a/commands/automount.c
+++ b/commands/automount.c
@@ -20,6 +20,7 @@
#include <fs.h>
#include <errno.h>
#include <getopt.h>
+#include <libfile.h>
static int do_automount(int argc, char *argv[])
{
diff --git a/commands/boot.c b/commands/boot.c
index f403010130..bd1be4ba75 100644
--- a/commands/boot.c
+++ b/commands/boot.c
@@ -156,7 +156,7 @@ static int bootscript_scan_path(struct blspec *blspec, const char *path)
return 1;
}
- files = asprintf("%s/*", path);
+ files = basprintf("%s/*", path);
glob(files, 0, NULL, &globb);
@@ -208,7 +208,7 @@ static int bootentry_parse_one(struct blspec *blspec, const char *name)
char *path;
if (*name != '/')
- path = asprintf("/env/boot/%s", name);
+ path = basprintf("/env/boot/%s", name);
else
path = xstrdup(name);
@@ -233,7 +233,7 @@ static struct blspec *bootentries_collect(char *entries[], int num_entries)
blspec = blspec_alloc();
if (IS_ENABLED(CONFIG_MENU))
- blspec->menu->display = asprintf("boot");
+ blspec->menu->display = basprintf("boot");
if (!num_entries)
bootscript_scan_path(blspec, "/env/boot");
diff --git a/commands/bootm.c b/commands/bootm.c
index 7a19fa2948..bfec62c98b 100644
--- a/commands/bootm.c
+++ b/commands/bootm.c
@@ -166,6 +166,7 @@ BAREBOX_MAGICVAR_NAMED(global_bootm_initrd, global.bootm.initrd, "bootm default
BAREBOX_MAGICVAR_NAMED(global_bootm_initrd_loadaddr, global.bootm.initrd.loadaddr, "bootm default initrd loadaddr");
BAREBOX_MAGICVAR_NAMED(global_bootm_oftree, global.bootm.oftree, "bootm default oftree");
BAREBOX_MAGICVAR_NAMED(global_bootm_verify, global.bootm.verify, "bootm default verify level");
+BAREBOX_MAGICVAR_NAMED(global_bootm_appendroot, global.bootm.appendroot, "Add root= option to Kernel to mount rootfs from the device the Kernel comes from");
static struct binfmt_hook binfmt_uimage_hook = {
.type = filetype_uimage,
diff --git a/commands/clk.c b/commands/clk.c
index e9459a3fd3..f862c45b2a 100644
--- a/commands/clk.c
+++ b/commands/clk.c
@@ -97,7 +97,7 @@ static int do_clk_get_rate(int argc, char *argv[])
}
if (optind == argc) {
- fprintf(stderr, "No clock name given\n");
+ eprintf("No clock name given\n");
return COMMAND_ERROR_USAGE;
}
@@ -110,7 +110,7 @@ static int do_clk_get_rate(int argc, char *argv[])
if (variable_name) {
char *t;
- t = asprintf("%lu", rate);
+ t = basprintf("%lu", rate);
setenv(variable_name, t);
free(t);
} else
diff --git a/commands/crc.c b/commands/crc.c
index 58b750eb95..edb1fb125c 100644
--- a/commands/crc.c
+++ b/commands/crc.c
@@ -20,6 +20,7 @@
#include <common.h>
#include <command.h>
#include <fs.h>
+#include <crc.h>
#include <getopt.h>
#include <malloc.h>
#include <libfile.h>
@@ -97,13 +98,13 @@ static int do_crc(int argc, char *argv[])
filename, (ulong)start, (ulong)start + total - 1, crc);
if (crcvarname) {
- char *crcstr = asprintf("0x%lx", crc);
+ char *crcstr = basprintf("0x%lx", crc);
setenv(crcvarname, crcstr);
kfree(crcstr);
}
if (sizevarname) {
- char *sizestr = asprintf("0x%lx", total);
+ char *sizestr = basprintf("0x%lx", total);
setenv(sizevarname, sizestr);
kfree(sizestr);
}
diff --git a/commands/defaultenv.c b/commands/defaultenv.c
index bae2d78f47..47bdf26d14 100644
--- a/commands/defaultenv.c
+++ b/commands/defaultenv.c
@@ -60,8 +60,8 @@ static int do_defaultenv(int argc, char *argv[])
if (ret)
return ret;
- from = asprintf("/.defaultenv/%s", restorepath);
- to = asprintf("%s/%s", dirname, restorepath);
+ from = basprintf("/.defaultenv/%s", restorepath);
+ to = basprintf("%s/%s", dirname, restorepath);
printf("Restoring %s from default environment\n", restorepath);
diff --git a/commands/echo.c b/commands/echo.c
index 7d47ab7ca7..8853ee0a30 100644
--- a/commands/echo.c
+++ b/commands/echo.c
@@ -27,7 +27,7 @@
static int do_echo(int argc, char *argv[])
{
int i, optind = 1;
- int fd = stdout, opt, newline = 1;
+ int fd = STDOUT_FILENO, opt, newline = 1;
char *file = NULL;
int oflags = O_WRONLY | O_CREAT;
char str[CONFIG_CBSIZE];
@@ -81,17 +81,17 @@ exit_parse:
for (i = optind; i < argc; i++) {
if (i > optind)
- fputc(fd, ' ');
+ dputc(fd, ' ');
if (process_escape) {
process_escape_sequence(argv[i], str, CONFIG_CBSIZE);
- fputs(fd, str);
+ dputs(fd, str);
} else {
- fputs(fd, argv[i]);
+ dputs(fd, argv[i]);
}
}
if (newline)
- fputc(fd, '\n');
+ dputc(fd, '\n');
if (file)
close(fd);
diff --git a/commands/edit.c b/commands/edit.c
index c014892fc4..a5415a6e5b 100644
--- a/commands/edit.c
+++ b/commands/edit.c
@@ -367,7 +367,7 @@ static void getwinsize(void)
printf(ESC "7" ESC "[r" ESC "[999;999H" ESC "[6n");
- while ((r = getc()) != 'R') {
+ while ((r = getchar()) != 'R') {
buf[i] = r;
i++;
}
diff --git a/commands/flash.c b/commands/flash.c
index 99d3cb7c3f..d881b4d399 100644
--- a/commands/flash.c
+++ b/commands/flash.c
@@ -32,7 +32,7 @@ static int do_flerase(int argc, char *argv[])
int fd;
char *filename = NULL;
struct stat s;
- loff_t start = 0, size = ~0;
+ loff_t start = 0, size;
int ret = 0;
if (argc == 1)
diff --git a/commands/hashsum.c b/commands/hashsum.c
index 8d3694fa78..d05e571fb9 100644
--- a/commands/hashsum.c
+++ b/commands/hashsum.c
@@ -46,7 +46,7 @@ static int do_hash(char *algo, int argc, char *argv[])
}
if (key) {
- char *tmp = asprintf("hmac(%s)", algo);
+ char *tmp = basprintf("hmac(%s)", algo);
d = digest_alloc(tmp);
free(tmp);
BUG_ON(!d);
diff --git a/commands/i2c.c b/commands/i2c.c
index f4ffc99827..ae7f7fc6d0 100644
--- a/commands/i2c.c
+++ b/commands/i2c.c
@@ -55,7 +55,7 @@ static int do_i2c_probe(int argc, char *argv[])
if (argc > 2)
startaddr = simple_strtol(argv[2], NULL, 0);
if (argc > 3)
- startaddr = simple_strtol(argv[3], NULL, 0);
+ stopaddr = simple_strtol(argv[3], NULL, 0);
if (startaddr > stopaddr)
@@ -243,7 +243,7 @@ BAREBOX_CMD_HELP_END
BAREBOX_CMD_START(i2c_read)
.cmd = do_i2c_read,
BAREBOX_CMD_DESC("read from an i2c device")
- BAREBOX_CMD_OPTS("[-bacrwv] DATA...")
+ BAREBOX_CMD_OPTS("[-bacrwv]")
BAREBOX_CMD_GROUP(CMD_GRP_HWMANIP)
BAREBOX_CMD_HELP(cmd_i2c_read_help)
BAREBOX_CMD_END
diff --git a/commands/loadb.c b/commands/loadb.c
index 6223512477..6180ce371a 100644
--- a/commands/loadb.c
+++ b/commands/loadb.c
@@ -183,8 +183,7 @@ static int os_data_save(void)
ret = write(ofd, write_buffer,
MAX_WRITE_BUFFER);
if (ret < 0) {
- fprintf(stderr,
- "write to device failed\n");
+ eprintf("write to device failed\n");
return ret;
}
write_idx = 0;
@@ -563,7 +562,7 @@ static ulong load_serial_bin(void)
/* Try to allocate the buffer we shall write to files */
write_buffer = malloc(MAX_WRITE_BUFFER);
if (write_buffer == NULL) {
- fprintf(stderr, "could not allocate file i/o buffer\n");
+ eprintf("could not allocate file i/o buffer\n");
return -ENOMEM;
}
@@ -585,7 +584,7 @@ static ulong load_serial_bin(void)
if (write_idx > 0) {
i = write(ofd, write_buffer, write_idx);
if (i < 0) {
- fprintf(stderr, "write to device failed\n");
+ eprintf("write to device failed\n");
size = i;
goto err_quit;
}
diff --git a/commands/loadenv.c b/commands/loadenv.c
index 8d6be2fa83..44e96c3b60 100644
--- a/commands/loadenv.c
+++ b/commands/loadenv.c
@@ -26,6 +26,7 @@
#include <envfs.h>
#include <errno.h>
#include <fs.h>
+#include <libfile.h>
#include <malloc.h>
#include <globalvar.h>
diff --git a/commands/loads.c b/commands/loads.c
index aa3095ee8c..eb3e109b0b 100644
--- a/commands/loads.c
+++ b/commands/loads.c
@@ -59,7 +59,7 @@ static int do_load_serial(int argc, char *argv[])
*/
for (i=0; i<100; ++i) {
if (tstc()) {
- (void) getc();
+ (void) getchar();
}
udelay(1000);
}
@@ -142,7 +142,7 @@ static int read_record(char *buf, ulong len)
--len; /* always leave room for terminating '\0' byte */
for (p=buf; p < buf+len; ++p) {
- c = getc(); /* read character */
+ c = getchar(); /* read character */
if (do_echo)
putchar(c);
@@ -180,7 +180,7 @@ static int do_save_serial(int argc, char *argv[])
printf ("## Ready for S-Record upload, press ENTER to proceed ...\n");
for (;;) {
- if (getc() == '\r')
+ if (getchar() == '\r')
break;
}
if (save_serial(offset, size)) {
diff --git a/commands/md.c b/commands/md.c
index c88259a3f8..3e83c723a3 100644
--- a/commands/md.c
+++ b/commands/md.c
@@ -28,6 +28,7 @@
#include <malloc.h>
#include <errno.h>
#include <fs.h>
+#include <libfile.h>
#include <fcntl.h>
#include <getopt.h>
#include <linux/stat.h>
diff --git a/commands/mem.c b/commands/mem.c
index 23c703f0b5..907f1f76a8 100644
--- a/commands/mem.c
+++ b/commands/mem.c
@@ -41,29 +41,6 @@
char *mem_rw_buf;
-int open_and_lseek(const char *filename, int mode, loff_t pos)
-{
- int fd, ret;
-
- fd = open(filename, mode | O_RDONLY);
- if (fd < 0) {
- perror("open");
- return fd;
- }
-
- if (!pos)
- return fd;
-
- ret = lseek(fd, pos, SEEK_SET);
- if (ret == -1) {
- perror("lseek");
- close(fd);
- return -errno;
- }
-
- return fd;
-}
-
/*
* Common function for parsing options for the 'md', 'mw', 'memcpy', 'memcmp'
* commands.
diff --git a/commands/memcmp.c b/commands/memcmp.c
index e079d5f78e..ce044df0d9 100644
--- a/commands/memcmp.c
+++ b/commands/memcmp.c
@@ -28,6 +28,7 @@
#include <malloc.h>
#include <errno.h>
#include <fs.h>
+#include <libfile.h>
#include <fcntl.h>
#include <getopt.h>
#include <linux/stat.h>
diff --git a/commands/memcpy.c b/commands/memcpy.c
index 9c8b64525c..168ef3b4fc 100644
--- a/commands/memcpy.c
+++ b/commands/memcpy.c
@@ -28,6 +28,7 @@
#include <malloc.h>
#include <errno.h>
#include <fs.h>
+#include <libfile.h>
#include <fcntl.h>
#include <getopt.h>
#include <linux/stat.h>
diff --git a/commands/memset.c b/commands/memset.c
index fc5b659b9b..f871e07c95 100644
--- a/commands/memset.c
+++ b/commands/memset.c
@@ -28,6 +28,7 @@
#include <malloc.h>
#include <errno.h>
#include <fs.h>
+#include <libfile.h>
#include <fcntl.h>
#include <getopt.h>
#include <linux/stat.h>
diff --git a/commands/menu.c b/commands/menu.c
index 2008aa5e9d..9ec2d579b7 100644
--- a/commands/menu.c
+++ b/commands/menu.c
@@ -160,8 +160,8 @@ static int do_menu_add(struct cmd_menu *cm)
free:
eprintf("Menu '%s' add fail", cm->menu);
if (ret == -EEXIST)
- eputs(" already exist");
- eputs("\n");
+ eprintf(" already exist");
+ eprintf("\n");
menu_free(m);
diff --git a/commands/miitool.c b/commands/miitool.c
index ba6e604633..07bce18651 100644
--- a/commands/miitool.c
+++ b/commands/miitool.c
@@ -120,7 +120,7 @@ static int show_basic_mii(struct mii_bus *mii, struct phy_device *phydev,
if (mii_val[MII_BMCR] == 0xffff || mii_val[MII_BMSR] == 0x0000) {
- fprintf(stderr, " No MII transceiver present!.\n");
+ eprintf(" No MII transceiver present!.\n");
return -1;
}
diff --git a/commands/mkdir.c b/commands/mkdir.c
index 1f978869ab..7d024c871d 100644
--- a/commands/mkdir.c
+++ b/commands/mkdir.c
@@ -22,6 +22,7 @@
#include <fs.h>
#include <errno.h>
#include <getopt.h>
+#include <libfile.h>
static int do_mkdir(int argc, char *argv[])
{
diff --git a/commands/mm.c b/commands/mm.c
index 7c890a6696..6d2a887892 100644
--- a/commands/mm.c
+++ b/commands/mm.c
@@ -22,6 +22,7 @@
#include <malloc.h>
#include <errno.h>
#include <fs.h>
+#include <libfile.h>
#include <fcntl.h>
#include <getopt.h>
#include <linux/stat.h>
diff --git a/commands/mmc_extcsd.c b/commands/mmc_extcsd.c
index d05128c6e7..d7fc50697c 100644
--- a/commands/mmc_extcsd.c
+++ b/commands/mmc_extcsd.c
@@ -153,15 +153,16 @@ static int print_field_ge_v7(u8 *reg, int index)
tmp = get_field_val(DATA_SECTOR_SIZE, 0, 0x1);
if (tmp64 == 0xFFFFFFFF)
if (tmp)
- str = "16 TB";
+ str = strdup("16 TB");
else
- str = "2 TB";
+ str = strdup("2 TB");
else
if (tmp)
- sprintf(str, "%llu B", tmp64 * 4096);
+ str = basprintf("%llu B", tmp64 * 4096);
else
- sprintf(str, "%llu B", tmp64 * 512);
+ str = basprintf("%llu B", tmp64 * 512);
printf("\tMax_Pre_Loading_Data_Size: %s\n", str);
+ free(str);
return 1;
/* EXT_CSD_PRE_LOADING_DATA_SIZE */
@@ -181,15 +182,16 @@ static int print_field_ge_v7(u8 *reg, int index)
tmp = get_field_val(DATA_SECTOR_SIZE, 0, 0x1);
if (tmp64 == 0xFFFFFFFF)
if (tmp)
- str = "16 TB";
+ str = strdup("16 TB");
else
- str = "2 TB";
+ str = strdup("2 TB");
else
if (tmp)
- sprintf(str, "%llu B", tmp64 * 4096);
+ str = basprintf("%llu B", tmp64 * 4096);
else
- sprintf(str, "%llu B", tmp64 * 512);
+ str = basprintf("%llu B", tmp64 * 512);
printf("\tPre_Loading_Data_Size: %s\n", str);
+ free(str);
return 1;
case EXT_CSD_FFU_STATUS:
@@ -319,12 +321,13 @@ static int print_field_ge_v7(u8 *reg, int index)
val = get_field_val(DEVICE_LIFE_TIME_EST_TYP_A, 0, 0xFF);
val = val * 10;
if (val == 0)
- str = "not defined";
+ str = strdup("not defined");
else if (val == 0xB)
- str = "maximum";
+ str = strdup("maximum");
else
- sprintf(str, "%u%% - %u%%", (val - 10), val);
+ str = basprintf("%u%% - %u%%", (val - 10), val);
printf("\tDevice life time, type A (estimation): %s\n", str);
+ free(str);
return 1;
case EXT_CSD_DEVICE_LIFE_TIME_EST_TYP_B:
@@ -332,12 +335,13 @@ static int print_field_ge_v7(u8 *reg, int index)
val = get_field_val(DEVICE_LIFE_TIME_EST_TYP_B, 0, 0xFF);
val = val * 10;
if (val == 0)
- str = "not defined";
+ str = strdup("not defined");
else if (val == 0xB)
- str = "maximum";
+ str = strdup("maximum");
else
- sprintf(str, "%u%% - %u%%", (val - 10), val);
+ str = basprintf("%u%% - %u%%", (val - 10), val);
printf("\tDevice life time, type B (estimation): %s\n", str);
+ free(str);
return 1;
/* EXT_CSD_NMBR_OF_FW_SCTRS_CRRCTLY_PRGRMD */
@@ -1687,11 +1691,12 @@ static int print_field(u8 *reg, int index)
val = get_field_val(SLEEP_NOTIFICATION_TIME, 0, 0xFF);
val = 100 << val;
if (val)
- sprintf(str, "Sleep Notification timeout values: %u us",
- val);
+ str = basprintf("Sleep Notification timeout values: %u us",
+ val);
else
- str = "Not defined";
+ str = strdup("Not defined");
printf("\t[7-0] %s\n", str);
+ free(str);
return 1;
case EXT_CSD_S_A_TIMEOUT:
@@ -1699,10 +1704,11 @@ static int print_field(u8 *reg, int index)
val = get_field_val(S_A_TIMEOUT, 0, 0xFF);
val = 100 << val;
if (val)
- sprintf(str, "Sleep/awake timeout values: %u ns", val);
+ str = basprintf("Sleep/awake timeout values: %u ns", val);
else
- str = "Not defined";
+ str = strdup("Not defined");
printf("\t[7-0] %s\n", str);
+ free(str);
return 1;
case EXT_CSD_PRODUCTION_ST8_AWARENSS_TIMEOUT:
@@ -1710,12 +1716,13 @@ static int print_field(u8 *reg, int index)
val = get_field_val(PRODUCTION_ST8_AWARENSS_TIMEOUT, 0, 0xFF);
val = 100 << val;
if (val)
- sprintf(str,
+ str = basprintf(
"Production State Awareness timeout definition: %u us",
val);
else
- str = "Not defined";
+ str = strdup("Not defined");
printf("\t[7-0] %s\n", str);
+ free(str);
return 1;
case EXT_CSD_S_C_VCCQ:
@@ -1723,10 +1730,11 @@ static int print_field(u8 *reg, int index)
val = get_field_val(S_C_VCCQ, 0, 0xF);
val = 1 << val;
if (val)
- sprintf(str, "S_C_VCCQ Sleep Current: %u uA", val);
+ str = basprintf("S_C_VCCQ Sleep Current: %u uA", val);
else
- str = "Not defined";
+ str = strdup("Not defined");
printf("\t[3-0] %s\n", str);
+ free(str);
return 1;
case EXT_CSD_S_C_VCC:
@@ -1734,20 +1742,22 @@ static int print_field(u8 *reg, int index)
val = get_field_val(S_C_VCC, 0, 0xFF);
val = 1 << val;
if (val)
- sprintf(str, "S_C_VCC Sleep Current: %u uA", val);
+ str = basprintf("S_C_VCC Sleep Current: %u uA", val);
else
- str = "Not defined";
+ str = strdup("Not defined");
printf("\t[3-0] %s\n", str);
+ free(str);
return 1;
case EXT_CSD_HC_WP_GRP_SIZE:
print_field_caption(HC_WP_GRP_SIZE, R);
val = get_field_val(HC_WP_GRP_SIZE, 0, 0xFF);
if (val)
- sprintf(str, "Write protect group size: %u", val);
+ str = basprintf("Write protect group size: %u", val);
else
- str = "No support";
+ str = strdup("No support");
printf("\t[7-0] %s\n", str);
+ free(str);
return 1;
case EXT_CSD_REL_WR_SEC_C:
@@ -1761,10 +1771,11 @@ static int print_field(u8 *reg, int index)
val = get_field_val(ERASE_TIMEOUT_MULT, 0, 0xFF);
val = val * 300;
if (val)
- sprintf(str, "Erase timeout values: %u", val);
+ str = basprintf("Erase timeout values: %u", val);
else
- str = "No support";
+ str = strdup("No support");
printf("\t[7-0] %s\n", str);
+ free(str);
return 1;
case EXT_CSD_HC_ERASE_GRP_SIZE:
@@ -1772,10 +1783,11 @@ static int print_field(u8 *reg, int index)
val = get_field_val(HC_ERASE_GRP_SIZE, 0, 0xFF);
val = val * 524288;
if (val)
- sprintf(str, "Erase-unit size: %u", val);
+ str = basprintf("Erase-unit size: %u", val);
else
- str = "No support";
+ str = strdup("No support");
printf("\t[7-0] %s\n", str);
+ free(str);
return 1;
case EXT_CSD_ACC_SIZE:
@@ -1783,10 +1795,11 @@ static int print_field(u8 *reg, int index)
val = get_field_val(ACC_SIZE, 0, 0xF);
val = val * 512;
if (val)
- sprintf(str, "Superpage size: %u", val);
+ str = basprintf("Superpage size: %u", val);
else
- str = "Not defined";
+ str = strdup("Not defined");
printf("\t[3-0] %s\n", str);
+ free(str);
return 1;
case EXT_CSD_BOOT_SIZE_MULT:
@@ -1867,14 +1880,14 @@ static int request_write_operation(void)
int c;
printf("This is a one time programmable field!\nDo you want to write? [y/N] ");
- c = getc();
+ c = getchar();
/* default is N */
if (c == 0xD) {
printf("\n");
return 0;
}
printf("%c", c);
- getc(); /* wait for carriage return */
+ getchar(); /* wait for carriage return */
printf("\n");
if (c == 'y' || c == 'Y')
return 1;
diff --git a/commands/mw.c b/commands/mw.c
index 8ca3c61d7f..bb6a16ef3d 100644
--- a/commands/mw.c
+++ b/commands/mw.c
@@ -28,6 +28,7 @@
#include <malloc.h>
#include <errno.h>
#include <fs.h>
+#include <libfile.h>
#include <fcntl.h>
#include <getopt.h>
#include <linux/stat.h>
diff --git a/commands/rm.c b/commands/rm.c
index 5f1f582f5e..4eebb3d159 100644
--- a/commands/rm.c
+++ b/commands/rm.c
@@ -19,6 +19,7 @@
#include <common.h>
#include <command.h>
#include <fs.h>
+#include <libfile.h>
#include <getopt.h>
#include <errno.h>
diff --git a/commands/tftp.c b/commands/tftp.c
index 8a3b541382..6a3121ad56 100644
--- a/commands/tftp.c
+++ b/commands/tftp.c
@@ -58,10 +58,10 @@ static int do_tftpb(int argc, char *argv[])
dest = argv[optind];
if (tftp_push) {
- dest = freep = asprintf("%s/%s", TFTP_MOUNT_PATH, dest);
+ dest = freep = basprintf("%s/%s", TFTP_MOUNT_PATH, dest);
flags = O_RDONLY;
} else {
- source = freep = asprintf("%s/%s", TFTP_MOUNT_PATH, source);
+ source = freep = basprintf("%s/%s", TFTP_MOUNT_PATH, source);
flags = O_WRONLY | O_CREAT;
}
diff --git a/common/Kconfig b/common/Kconfig
index fdf2f0da13..380193b806 100644
--- a/common/Kconfig
+++ b/common/Kconfig
@@ -553,6 +553,18 @@ config BLSPEC
on a device and it allows the Operating System to install / update
kernels.
+config FLEXIBLE_BOOTARGS
+ bool
+ prompt "flexible Linux bootargs generation"
+ depends on GLOBALVAR
+ help
+ Select this to get a more flexible bootargs generation. With this
+ option the bootargs are concatenated together from global variables
+ beginning with 'global.linux.bootargs.' and 'global.linux.mtdparts.'
+ This allows for more flexible scripting since with it it's possible
+ to replace parts of the bootargs string without reconstructing it
+ completely.
+
config IMD
bool "barebox metadata support"
diff --git a/common/blspec.c b/common/blspec.c
index 18005569ff..bf98e6b29a 100644
--- a/common/blspec.c
+++ b/common/blspec.c
@@ -203,16 +203,18 @@ static char *parse_nfs_url(const char *url)
if (ip == 0)
goto out;
- hostpath = asprintf("%s:%s", ip_to_string(ip), path);
+ hostpath = basprintf("%s:%s", ip_to_string(ip), path);
prevpath = nfs_find_mountpath(hostpath);
if (prevpath) {
mountpath = xstrdup(prevpath);
} else {
- mountpath = asprintf("/mnt/nfs-%s-blspec-%08x", host, rand());
+ mountpath = basprintf("/mnt/nfs-%s-blspec-%08x", host,
+ rand());
if (port)
- options = asprintf("mountport=%s,port=%s", port, port);
+ options = basprintf("mountport=%s,port=%s", port,
+ port);
ret = make_directory(mountpath);
if (ret)
@@ -278,7 +280,7 @@ static bool entry_is_of_compatible(struct blspec_entry *entry)
if (!strcmp(devicetree, "none"))
return true;
- filename = asprintf("%s/%s", abspath, devicetree);
+ filename = basprintf("%s/%s", abspath, devicetree);
fdt = read_file(filename, &size);
if (!fdt) {
@@ -338,7 +340,7 @@ int blspec_scan_directory(struct blspec *blspec, const char *root)
entry_default = read_file_line("%s/default", root);
entry_once = read_file_line("%s/once", root);
- abspath = asprintf("%s/%s", root, dirname);
+ abspath = basprintf("%s/%s", root, dirname);
dir = opendir(abspath);
if (!dir) {
@@ -356,7 +358,7 @@ int blspec_scan_directory(struct blspec *blspec, const char *root)
if (*d->d_name == '.')
continue;
- configname = asprintf("%s/%s", abspath, d->d_name);
+ configname = basprintf("%s/%s", abspath, d->d_name);
dot = strrchr(configname, '.');
if (!dot) {
@@ -402,7 +404,7 @@ int blspec_scan_directory(struct blspec *blspec, const char *root)
found++;
- name = asprintf("%s/%s", dirname, d->d_name);
+ name = basprintf("%s/%s", dirname, d->d_name);
if (entry_default && !strcmp(name, entry_default))
entry->boot_default = true;
if (entry_once && !strcmp(name, entry_once))
@@ -415,10 +417,10 @@ int blspec_scan_directory(struct blspec *blspec, const char *root)
hwdevname = xstrdup(dev_name(entry->cdev->dev->parent));
}
- entry->me.display = asprintf("%-20s %-20s %s",
- devname ? devname : "",
- hwdevname ? hwdevname : "",
- blspec_entry_var_get(entry, "title"));
+ entry->me.display = basprintf("%-20s %-20s %s",
+ devname ? devname : "",
+ hwdevname ? hwdevname : "",
+ blspec_entry_var_get(entry, "title"));
free(devname);
free(hwdevname);
@@ -637,29 +639,6 @@ int blspec_scan_devicename(struct blspec *blspec, const char *devname)
return blspec_scan_device(blspec, dev);
}
-static int blspec_append_root(struct blspec_entry *entry)
-{
- const char *appendroot;
- char *rootarg;
-
- appendroot = blspec_entry_var_get(entry, "linux-appendroot");
- if (!appendroot || strcmp(appendroot, "true"))
- return 0;
-
- rootarg = path_get_linux_rootarg(entry->rootpath);
- if (IS_ERR(rootarg)) {
- pr_err("Getting root argument for %s failed with: %s\n",
- entry->rootpath, strerrorp(rootarg));
- return PTR_ERR(rootarg);
- }
-
- globalvar_add_simple("linux.bootargs.dyn.blspec.appendroot", rootarg);
-
- free(rootarg);
-
- return 0;
-}
-
/*
* blspec_boot - boot an entry
*
@@ -671,6 +650,7 @@ int blspec_boot(struct blspec_entry *entry, int verbose, int dryrun)
{
int ret;
const char *abspath, *devicetree, *options, *initrd, *linuximage;
+ const char *appendroot;
struct bootm_data data = {
.initrd_address = UIMAGE_INVALID_ADDRESS,
.os_address = UIMAGE_SOME_ADDRESS,
@@ -691,7 +671,7 @@ int blspec_boot(struct blspec_entry *entry, int verbose, int dryrun)
else
abspath = "";
- data.os_file = asprintf("%s/%s", abspath, linuximage);
+ data.os_file = basprintf("%s/%s", abspath, linuximage);
if (devicetree) {
if (!strcmp(devicetree, "none")) {
@@ -699,25 +679,34 @@ int blspec_boot(struct blspec_entry *entry, int verbose, int dryrun)
if (node)
of_delete_node(node);
} else {
- data.oftree_file = asprintf("%s/%s", abspath,
- devicetree);
+ data.oftree_file = basprintf("%s/%s", abspath,
+ devicetree);
}
}
if (initrd)
- data.initrd_file = asprintf("%s/%s", abspath, initrd);
+ data.initrd_file = basprintf("%s/%s", abspath, initrd);
globalvar_add_simple("linux.bootargs.dyn.blspec", options);
- ret = blspec_append_root(entry);
- if (ret)
- goto err_out;
+ appendroot = blspec_entry_var_get(entry, "linux-appendroot");
+ if (appendroot) {
+ int val;
+
+ ret = strtobool(appendroot, &val);
+ if (ret) {
+ pr_err("Invalid value \"%s\" for appendroot option\n",
+ appendroot);
+ goto err_out;
+ }
+ data.appendroot = val;
+ }
pr_info("booting %s from %s\n", blspec_entry_var_get(entry, "title"),
entry->cdev ? dev_name(entry->cdev->dev) : "none");
if (entry->boot_once) {
- char *s = asprintf("%s/once", abspath);
+ char *s = basprintf("%s/once", abspath);
ret = unlink(s);
if (ret)
diff --git a/common/bootargs.c b/common/bootargs.c
index 803736fc94..a89f23a3f2 100644
--- a/common/bootargs.c
+++ b/common/bootargs.c
@@ -53,7 +53,8 @@ const char *linux_bootargs_get(void)
parts = globalvar_get_match("linux.mtdparts.", ";");
if (strlen(parts)) {
- bootargs = asprintf("%s mtdparts=%s", linux_bootargs, parts);
+ bootargs = basprintf("%s mtdparts=%s", linux_bootargs,
+ parts);
free(linux_bootargs);
free(parts);
linux_bootargs = bootargs;
@@ -61,7 +62,8 @@ const char *linux_bootargs_get(void)
parts = globalvar_get_match("linux.blkdevparts.", ";");
if (strlen(parts)) {
- bootargs = asprintf("%s blkdevparts=%s", linux_bootargs, parts);
+ bootargs = basprintf("%s blkdevparts=%s", linux_bootargs,
+ parts);
free(linux_bootargs);
free(parts);
linux_bootargs = bootargs;
diff --git a/common/bootm.c b/common/bootm.c
index 6d22aab289..cad8c73efe 100644
--- a/common/bootm.c
+++ b/common/bootm.c
@@ -48,6 +48,8 @@ static struct image_handler *bootm_find_handler(enum filetype filetype,
return NULL;
}
+static int bootm_appendroot;
+
void bootm_data_init_defaults(struct bootm_data *data)
{
data->initrd_address = UIMAGE_INVALID_ADDRESS;
@@ -58,6 +60,7 @@ void bootm_data_init_defaults(struct bootm_data *data)
getenv_ul("global.bootm.initrd.loadaddr", &data->initrd_address);
data->initrd_file = getenv_nonempty("global.bootm.initrd");
data->verify = bootm_get_verify_mode();
+ data->appendroot = bootm_appendroot;
}
static enum bootm_verify bootm_verify_mode = BOOTM_VERIFY_HASH;
@@ -576,6 +579,18 @@ int bootm_boot(struct bootm_data *bootm_data)
}
}
+ if (bootm_data->appendroot) {
+ char *rootarg;
+
+ rootarg = path_get_linux_rootarg(data->os_file);
+ if (!IS_ERR(rootarg)) {
+ printf("Adding \"%s\" to Kernel commandline\n", rootarg);
+ globalvar_add_simple("linux.bootargs.bootm.appendroot",
+ rootarg);
+ free(rootarg);
+ }
+ }
+
printf("\nLoading %s '%s'", file_type_to_string(os_type),
data->os_file);
if (os_type == filetype_uimage &&
@@ -621,6 +636,7 @@ err_out:
if (data->of_root_node && data->of_root_node != of_get_root_node())
of_delete_node(data->of_root_node);
+ globalvar_remove("linux.bootargs.bootm.appendroot");
free(data->os_file);
free(data->oftree_file);
free(data->initrd_file);
@@ -634,6 +650,7 @@ static int bootm_init(void)
globalvar_add_simple("bootm.image", NULL);
globalvar_add_simple("bootm.image.loadaddr", NULL);
globalvar_add_simple("bootm.oftree", NULL);
+ globalvar_add_simple_bool("bootm.appendroot", &bootm_appendroot);
if (IS_ENABLED(CONFIG_CMD_BOOTM_INITRD)) {
globalvar_add_simple("bootm.initrd", NULL);
globalvar_add_simple("bootm.initrd.loadaddr", NULL);
diff --git a/common/console.c b/common/console.c
index a541892583..a67f169b42 100644
--- a/common/console.c
+++ b/common/console.c
@@ -164,7 +164,7 @@ int console_set_baudrate(struct console_device *cdev, unsigned baudrate)
if (cdev->f_active) {
mdelay(50);
do {
- c = getc();
+ c = getchar();
} while (c != '\r' && c != '\n');
}
@@ -208,8 +208,8 @@ static void console_set_stdoutpath(struct console_device *cdev)
if (id < 0)
return;
- str = asprintf("console=%s%d,%dn8", cdev->linux_console_name,
- id, cdev->baudrate);
+ str = basprintf("console=%s%d,%dn8", cdev->linux_console_name, id,
+ cdev->baudrate);
globalvar_add_simple("linux.bootargs.console", str);
@@ -345,7 +345,7 @@ static int tstc_raw(void)
return 0;
}
-int getc(void)
+int getchar(void)
{
unsigned char ch;
uint64_t start;
@@ -380,17 +380,7 @@ int getc(void)
return ch;
}
-EXPORT_SYMBOL(getc);
-
-int fgetc(int fd)
-{
- char c;
-
- if (!fd)
- return getc();
- return read(fd, &c, 1);
-}
-EXPORT_SYMBOL(fgetc);
+EXPORT_SYMBOL(getchar);
int tstc(void)
{
@@ -476,7 +466,7 @@ int ctrlc (void)
{
poller_call();
- if (tstc() && getc() == 3)
+ if (tstc() && getchar() == 3)
return 1;
return 0;
}
diff --git a/common/console_common.c b/common/console_common.c
index a9bbce9a28..2e5869fab0 100644
--- a/common/console_common.c
+++ b/common/console_common.c
@@ -278,7 +278,7 @@ EXPORT_SYMBOL(console_get_first_active);
#endif /* !CONFIG_CONSOLE_NONE */
-int fprintf(int file, const char *fmt, ...)
+int dprintf(int file, const char *fmt, ...)
{
va_list args;
char printbuffer[CFG_PBSIZE];
@@ -293,30 +293,30 @@ int fprintf(int file, const char *fmt, ...)
va_end(args);
/* Print the string */
- return fputs(file, printbuffer);
+ return dputs(file, printbuffer);
}
-EXPORT_SYMBOL(fprintf);
+EXPORT_SYMBOL(dprintf);
-int fputs(int fd, const char *s)
+int dputs(int fd, const char *s)
{
if (fd == 1)
return puts(s);
else if (fd == 2)
- return eputs(s);
+ return console_puts(CONSOLE_STDERR, s);
else
return write(fd, s, strlen(s));
}
-EXPORT_SYMBOL(fputs);
+EXPORT_SYMBOL(dputs);
-int fputc(int fd, char c)
+int dputc(int fd, char c)
{
if (fd == 1)
putchar(c);
else if (fd == 2)
- eputc(c);
+ console_putc(CONSOLE_STDERR, c);
else
return write(fd, &c, 1);
return 0;
}
-EXPORT_SYMBOL(fputc);
+EXPORT_SYMBOL(dputc);
diff --git a/common/console_countdown.c b/common/console_countdown.c
index ffbdb4fa2d..c0c8c95022 100644
--- a/common/console_countdown.c
+++ b/common/console_countdown.c
@@ -39,7 +39,7 @@ int console_countdown(int timeout_s, unsigned flags, char *out_key)
do {
if (tstc()) {
- key = getc();
+ key = getchar();
if (flags & CONSOLE_COUNTDOWN_ANYKEY)
goto out;
if (flags & CONSOLE_COUNTDOWN_RETURN && key == '\n')
diff --git a/common/console_simple.c b/common/console_simple.c
index 69e76593ad..9675cbb0a6 100644
--- a/common/console_simple.c
+++ b/common/console_simple.c
@@ -48,13 +48,13 @@ int tstc(void)
}
EXPORT_SYMBOL(tstc);
-int getc(void)
+int getchar(void)
{
if (!console)
return -EINVAL;
return console->getc(console);
}
-EXPORT_SYMBOL(getc);
+EXPORT_SYMBOL(getchar);
void console_flush(void)
{
@@ -67,7 +67,7 @@ EXPORT_SYMBOL(console_flush);
/* test if ctrl-c was pressed */
int ctrlc (void)
{
- if (tstc() && getc() == 3)
+ if (tstc() && getchar() == 3)
return 1;
return 0;
}
diff --git a/common/env.c b/common/env.c
index c98ed73f9b..6f736d5add 100644
--- a/common/env.c
+++ b/common/env.c
@@ -28,6 +28,7 @@
#include <xfuncs.h>
#include <errno.h>
#include <init.h>
+#include <string.h>
#include <environment.h>
static struct env_context root = {
@@ -260,7 +261,7 @@ EXPORT_SYMBOL(export);
void export_env_ull(const char *name, unsigned long long val)
{
- char *valstr = asprintf("%llu", val);
+ char *valstr = basprintf("%llu", val);
setenv(name, valstr);
export(name);
@@ -323,20 +324,25 @@ int getenv_uint(const char *var , unsigned int *val)
}
EXPORT_SYMBOL(getenv_uint);
+/**
+ * getenv_bool - get a boolean value from an environment variable
+ * @var - Variable name
+ * @val - The boolean value returned.
+ *
+ * This function treats
+ * - any positive (nonzero) number as true
+ * - "0" as false
+ * - "true" (case insensitive) as true
+ * - "false" (case insensitive) as false
+ *
+ * Returns 0 for success or negative error code if the variable does
+ * not exist or contains something this function does not recognize
+ * as true or false.
+ */
int getenv_bool(const char *var, int *val)
{
const char *valstr = getenv(var);
- if (!valstr || !*valstr)
- return -EINVAL;
-
- if (!*valstr)
- *val = false;
- else if (*valstr == '0')
- *val = false;
- else
- *val = true;
-
- return 0;
+ return strtobool(valstr, val);
}
EXPORT_SYMBOL(getenv_bool);
diff --git a/common/environment.c b/common/environment.c
index 9cf44a0f06..c3ad25266a 100644
--- a/common/environment.c
+++ b/common/environment.c
@@ -29,6 +29,7 @@
#include <malloc.h>
#include <errno.h>
#include <fs.h>
+#include <crc.h>
#include <fcntl.h>
#include <envfs.h>
#include <xfuncs.h>
@@ -79,7 +80,7 @@ static int do_compare_file(const char *filename, const char *base)
char *cmp;
const char *relname = filename + strlen(base) + 1;
- cmp = asprintf("%s/%s", TMPDIR, relname);
+ cmp = basprintf("%s/%s", TMPDIR, relname);
ret = compare_file(cmp, filename);
free(cmp);
@@ -88,6 +89,7 @@ static int do_compare_file(const char *filename, const char *base)
}
#else
+#define ERASE_SIZE_ALL 0
static inline int protect(int fd, size_t count, unsigned long offset, int prot)
{
return 0;
@@ -192,7 +194,7 @@ static int file_remove_action(const char *filename, struct stat *statbuf,
filename += sizeof(TMPDIR) - 1;
- envname = asprintf("%s/%s", data->base, filename);
+ envname = basprintf("%s/%s", data->base, filename);
ret = stat(envname, &s);
if (ret) {
@@ -329,7 +331,7 @@ int envfs_save(const char *filename, const char *dirname, unsigned flags)
goto out;
}
- ret = erase(envfd, ~0, 0);
+ ret = erase(envfd, ERASE_SIZE_ALL, 0);
/* ENOSYS and EOPNOTSUPP aren't errors here, many devices don't need it */
if (ret && errno != ENOSYS && errno != EOPNOTSUPP) {
diff --git a/common/filetype.c b/common/filetype.c
index 74baf51446..a8666a1439 100644
--- a/common/filetype.c
+++ b/common/filetype.c
@@ -291,8 +291,6 @@ enum filetype file_detect_type(const void *_buf, size_t bufsize)
if (bufsize < 64)
return filetype_unknown;
- if (buf8[0] == 'M' && buf8[1] == 'Z')
- return filetype_exe;
if (le32_to_cpu(buf[5]) == 0x504d5453)
return filetype_mxs_bootstream;
@@ -301,6 +299,9 @@ enum filetype file_detect_type(const void *_buf, size_t bufsize)
if (buf[9] == 0x016f2818 || buf[9] == 0x18286f01)
return filetype_arm_zimage;
+ if (buf8[0] == 'M' && buf8[1] == 'Z')
+ return filetype_exe;
+
if (bufsize < 512)
return filetype_unknown;
diff --git a/common/firmware.c b/common/firmware.c
index a6f75bf887..664f9107d0 100644
--- a/common/firmware.c
+++ b/common/firmware.c
@@ -202,7 +202,7 @@ out:
int firmwaremgr_load_file(struct firmware_mgr *mgr, const char *firmware)
{
int ret;
- char *name = asprintf("/dev/%s", mgr->handler->id);
+ char *name = basprintf("/dev/%s", mgr->handler->id);
ret = copy_file(firmware, name, 0);
diff --git a/common/globalvar.c b/common/globalvar.c
index a777c14283..75e4d43afb 100644
--- a/common/globalvar.c
+++ b/common/globalvar.c
@@ -33,6 +33,16 @@ int globalvar_add(const char *name,
return 0;
}
+void globalvar_remove(const char *name)
+{
+ struct param_d *param = get_param_by_name(&global_device, name);
+
+ if (!param)
+ return;
+
+ dev_remove_param(param);
+}
+
static int nv_save(const char *name, const char *val)
{
int fd, ret;
@@ -42,7 +52,7 @@ static int nv_save(const char *name, const char *val)
if (ret)
return ret;
- fname = asprintf("/env/nv/%s", name);
+ fname = basprintf("/env/nv/%s", name);
fd = open(fname, O_CREAT | O_WRONLY | O_TRUNC);
@@ -51,7 +61,7 @@ static int nv_save(const char *name, const char *val)
if (fd < 0)
return fd;
- fprintf(fd, "%s", val);
+ dprintf(fd, "%s", val);
close(fd);
@@ -141,7 +151,7 @@ int nvvar_remove(const char *name)
if (!p)
return -ENOENT;
- fname = asprintf("/env/nv/%s", p->name);
+ fname = basprintf("/env/nv/%s", p->name);
unlink(fname);
free(fname);
@@ -229,7 +239,8 @@ char *globalvar_get_match(const char *match, const char *separator)
if (!strncmp(match, param->name, strlen(match))) {
const char *p = dev_get_param(&global_device, param->name);
if (val) {
- char *new = asprintf("%s%s%s", val, separator, p);
+ char *new = basprintf("%s%s%s", val,
+ separator, p);
free(val);
val = new;
} else {
diff --git a/common/imd.c b/common/imd.c
index 241ebbdaed..159b73a828 100644
--- a/common/imd.c
+++ b/common/imd.c
@@ -306,7 +306,7 @@ int imd_command(int argc, char *argv[])
case 't':
type = imd_name_to_type(optarg);
if (type == IMD_TYPE_INVALID) {
- fprintf(stderr, "no such type: %s\n", optarg);
+ eprintf("no such type: %s\n", optarg);
return -ENOSYS;
}
break;
@@ -325,7 +325,7 @@ int imd_command(int argc, char *argv[])
}
if (optind == argc) {
- fprintf(stderr, "No image given\n");
+ eprintf("No image given\n");
return -ENOSYS;
}
diff --git a/common/imx-bbu-nand-fcb.c b/common/imx-bbu-nand-fcb.c
index 04c6e6050c..1ffa79d1ec 100644
--- a/common/imx-bbu-nand-fcb.c
+++ b/common/imx-bbu-nand-fcb.c
@@ -34,6 +34,7 @@
#include <linux/mtd/nand.h>
#include <linux/stat.h>
#include <io.h>
+#include <crc.h>
#include <mach/generic.h>
#include <mtd/mtd-peb.h>
diff --git a/common/menutree.c b/common/menutree.c
index 97e628de88..eb14da0d01 100644
--- a/common/menutree.c
+++ b/common/menutree.c
@@ -12,9 +12,11 @@
#include <environment.h>
#include <libbb.h>
#include <common.h>
+#include <command.h>
#include <glob.h>
#include <menu.h>
#include <fs.h>
+#include <shell.h>
#include <libfile.h>
#include <linux/stat.h>
@@ -96,7 +98,7 @@ int menutree(const char *path, int toplevel)
menu = menu_alloc();
- globpath = asprintf("%s/*", path);
+ globpath = basprintf("%s/*", path);
ret = glob(globpath, 0, NULL, &g);
free(globpath);
if (ret == GLOB_NOMATCH) {
@@ -147,7 +149,7 @@ int menutree(const char *path, int toplevel)
mt->me.type = MENU_ENTRY_NORMAL;
- mt->action = asprintf("%s/action", g.gl_pathv[i]);
+ mt->action = basprintf("%s/action", g.gl_pathv[i]);
ret = stat(mt->action, &s);
if (ret) {
diff --git a/common/partitions.c b/common/partitions.c
index 82ec508e64..69a2b1fefb 100644
--- a/common/partitions.c
+++ b/common/partitions.c
@@ -51,7 +51,7 @@ static int register_one_partition(struct block_device *blk,
uint64_t size = part->size * SECTOR_SIZE;
struct cdev *cdev;
- partition_name = asprintf("%s.%d", blk->cdev.name, no);
+ partition_name = basprintf("%s.%d", blk->cdev.name, no);
if (!partition_name)
return -ENOMEM;
dev_dbg(blk->dev, "Registering partition %s on drive %s\n",
diff --git a/common/partitions/efi.c b/common/partitions/efi.c
index a9945dd9eb..88734f166b 100644
--- a/common/partitions/efi.c
+++ b/common/partitions/efi.c
@@ -17,6 +17,7 @@
#include <init.h>
#include <asm/unaligned.h>
#include <dma.h>
+#include <crc.h>
#include <linux/ctype.h>
#include "efi.h"
diff --git a/common/password.c b/common/password.c
index 5b754d943f..d52b746f0f 100644
--- a/common/password.c
+++ b/common/password.c
@@ -24,6 +24,7 @@
#include <digest.h>
#include <malloc.h>
#include <xfuncs.h>
+#include <command.h>
#include <magicvar.h>
#include <clock.h>
#include <init.h>
@@ -62,7 +63,7 @@ int password(unsigned char *passwd, size_t length, int flags, int timeout)
do {
if (tstc()) {
- ch = getc();
+ ch = getchar();
switch (ch) {
case '\r':
diff --git a/common/startup.c b/common/startup.c
index 093a23ba08..432be67cd6 100644
--- a/common/startup.c
+++ b/common/startup.c
@@ -30,6 +30,7 @@
* @brief Main entry into the C part of barebox
*/
#include <common.h>
+#include <shell.h>
#include <init.h>
#include <command.h>
#include <malloc.h>
diff --git a/common/state.c b/common/state.c
index b55b1503bd..87afff3056 100644
--- a/common/state.c
+++ b/common/state.c
@@ -20,6 +20,7 @@
#include <errno.h>
#include <fcntl.h>
#include <fs.h>
+#include <crc.h>
#include <init.h>
#include <ioctl.h>
#include <libbb.h>
@@ -703,8 +704,8 @@ static int state_convert_node_variable(struct state *state,
*indexs = 0;
/* construct full name */
- name = asprintf("%s%s%s",
- parent_name, parent_name[0] ? "." : "", short_name);
+ name = basprintf("%s%s%s", parent_name, parent_name[0] ? "." : "",
+ short_name);
free(short_name);
if ((conv == STATE_CONVERT_TO_NODE) ||
diff --git a/common/uimage.c b/common/uimage.c
index 59d7b65c90..34daf70dc1 100644
--- a/common/uimage.c
+++ b/common/uimage.c
@@ -21,6 +21,7 @@
#include <image.h>
#include <malloc.h>
#include <errno.h>
+#include <crc.h>
#include <libbb.h>
#include <libfile.h>
#include <uncompress.h>
diff --git a/crypto/crc32.c b/crypto/crc32.c
index 58637bd770..3bff6feb28 100644
--- a/crypto/crc32.c
+++ b/crypto/crc32.c
@@ -12,6 +12,7 @@
#include <common.h>
#include <xfuncs.h>
#include <fs.h>
+#include <crc.h>
#include <fcntl.h>
#include <malloc.h>
#include <linux/ctype.h>
diff --git a/crypto/hmac.c b/crypto/hmac.c
index 20af2a56de..05b9b50f12 100644
--- a/crypto/hmac.c
+++ b/crypto/hmac.c
@@ -173,8 +173,8 @@ static int digest_hmac_register(char *name, unsigned int pad_length)
dh->name = xstrdup(name);
dh->pad_length = pad_length;
dh->algo = hmac_algo;
- dh->algo.base.name = asprintf("hmac(%s)", name);
- dh->algo.base.driver_name = asprintf("hmac(%s)-generic", name);
+ dh->algo.base.name = basprintf("hmac(%s)", name);
+ dh->algo.base.driver_name = basprintf("hmac(%s)-generic", name);
return digest_algo_register(&dh->algo);
}
diff --git a/drivers/ata/disk_ata_drive.c b/drivers/ata/disk_ata_drive.c
index 9b3730c8c4..1aa1bb1456 100644
--- a/drivers/ata/disk_ata_drive.c
+++ b/drivers/ata/disk_ata_drive.c
@@ -243,7 +243,7 @@ static int ata_port_init(struct ata_port *port)
rc = cdev_find_free_index("ata");
if (rc == -1)
pr_err("Cannot find a free index for the disk node\n");
- port->blk.cdev.name = asprintf("ata%d", rc);
+ port->blk.cdev.name = basprintf("ata%d", rc);
}
port->blk.num_blocks = ata_id_n_sectors(port->id);
diff --git a/drivers/ata/disk_bios_drive.c b/drivers/ata/disk_bios_drive.c
index 8e768dc7f2..363af3c6dd 100644
--- a/drivers/ata/disk_bios_drive.c
+++ b/drivers/ata/disk_bios_drive.c
@@ -258,7 +258,7 @@ static int biosdisk_probe(struct device_d *dev)
rc = cdev_find_free_index("disk");
if (rc < 0)
pr_err("Cannot find a free number for the disk node\n");
- m->blk.cdev.name = asprintf("disk%d", rc);
+ m->blk.cdev.name = basprintf("disk%d", rc);
m->blk.blockbits = SECTOR_SHIFT;
rc = blockdevice_register(&m->blk);
diff --git a/drivers/ata/intf_platform_ide.c b/drivers/ata/intf_platform_ide.c
index 6e74bfb089..c3af0833ba 100644
--- a/drivers/ata/intf_platform_ide.c
+++ b/drivers/ata/intf_platform_ide.c
@@ -27,7 +27,7 @@
#include <malloc.h>
#include <errno.h>
#include <ata_drive.h>
-#include <platform_ide.h>
+#include <platform_data/ide.h>
#include <linux/err.h>
#include <of.h>
diff --git a/drivers/ata/pata-imx.c b/drivers/ata/pata-imx.c
index 842957331e..c8098a537f 100644
--- a/drivers/ata/pata-imx.c
+++ b/drivers/ata/pata-imx.c
@@ -28,7 +28,7 @@
#include <malloc.h>
#include <errno.h>
#include <ata_drive.h>
-#include <platform_ide.h>
+#include <platform_data/ide.h>
#include <io.h>
#include <of.h>
#include <linux/err.h>
diff --git a/drivers/ata/sata-imx.c b/drivers/ata/sata-imx.c
index 6a601956db..7b8036bbf3 100644
--- a/drivers/ata/sata-imx.c
+++ b/drivers/ata/sata-imx.c
@@ -112,7 +112,7 @@ static int imx_sata_probe(struct device_d *dev)
imx_ahci->ahci.dev = dev;
dev->priv = &imx_ahci->ahci;
- dev->info = ahci_info,
+ dev->info = ahci_info;
ret = ahci_add_host(&imx_ahci->ahci);
if (ret)
diff --git a/drivers/eeprom/at24.c b/drivers/eeprom/at24.c
index 3c0a7a9d47..a323d25dd4 100644
--- a/drivers/eeprom/at24.c
+++ b/drivers/eeprom/at24.c
@@ -429,7 +429,7 @@ static int at24_probe(struct device_d *dev)
at24->chip = chip;
at24->num_addresses = num_addresses;
- at24->cdev.name = asprintf("eeprom%d", dev->id);
+ at24->cdev.name = basprintf("eeprom%d", dev->id);
at24->cdev.priv = at24;
at24->cdev.dev = dev;
at24->cdev.ops = &at24->fops;
diff --git a/drivers/mci/imx-esdhc.c b/drivers/mci/imx-esdhc.c
index 282887ba78..2e189fecad 100644
--- a/drivers/mci/imx-esdhc.c
+++ b/drivers/mci/imx-esdhc.c
@@ -41,6 +41,8 @@
#define IMX_SDHCI_WML 0x44
#define IMX_SDHCI_MIXCTRL 0x48
+#define IMX_SDHCI_DLL_CTRL 0x60
+#define IMX_SDHCI_MIX_CTRL_FBCLK_SEL (BIT(25))
struct fsl_esdhc_host {
struct mci_host mci;
@@ -516,11 +518,23 @@ static int esdhc_reset(struct fsl_esdhc_host *host)
{
void __iomem *regs = host->regs;
uint64_t start;
+ int val;
/* reset the controller */
esdhc_write32(regs + SDHCI_CLOCK_CONTROL__TIMEOUT_CONTROL__SOFTWARE_RESET,
SYSCTL_RSTA);
+ /* extra register reset for i.MX6 Solo/DualLite */
+ if (cpu_is_mx6()) {
+ /* reset bit FBCLK_SEL */
+ val = esdhc_read32(regs + IMX_SDHCI_MIXCTRL);
+ val &= ~IMX_SDHCI_MIX_CTRL_FBCLK_SEL;
+ esdhc_write32(regs + IMX_SDHCI_MIXCTRL, val);
+
+ /* reset delay line settings in IMX_SDHCI_DLL_CTRL */
+ esdhc_write32(regs + IMX_SDHCI_DLL_CTRL, 0x0);
+ }
+
start = get_time_ns();
/* hardware clears the bit when it is done */
while (1) {
diff --git a/drivers/mci/mci-core.c b/drivers/mci/mci-core.c
index 24f57f9da9..59f66757d9 100644
--- a/drivers/mci/mci-core.c
+++ b/drivers/mci/mci-core.c
@@ -506,8 +506,8 @@ static int mmc_change_freq(struct mci *mci)
char *name, *partname;
part_size = mci->ext_csd[EXT_CSD_BOOT_MULT] << 17;
- partname = asprintf("boot%d", idx);
- name = asprintf("%s.%s", mci->cdevname, partname);
+ partname = basprintf("boot%d", idx);
+ name = basprintf("%s.%s", mci->cdevname, partname);
mci_part_add(mci, part_size,
EXT_CSD_PART_CONFIG_ACC_BOOT0 + idx,
name, partname, idx, true,
@@ -1626,7 +1626,7 @@ static int mci_card_probe(struct mci *mci)
mci->cdevname = strdup(host->devname);
} else {
disknum = cdev_find_free_index("disk");
- mci->cdevname = asprintf("disk%d", disknum);
+ mci->cdevname = basprintf("disk%d", disknum);
}
rc = mci_startup(mci);
diff --git a/drivers/mfd/stmpe-i2c.c b/drivers/mfd/stmpe-i2c.c
index c1e7d9ece4..fb91ffa008 100644
--- a/drivers/mfd/stmpe-i2c.c
+++ b/drivers/mfd/stmpe-i2c.c
@@ -141,8 +141,8 @@ static int stmpe_probe(struct device_d *dev)
}
stmpe_dev = xzalloc(sizeof(struct stmpe));
- stmpe_dev->cdev.name = asprintf(DRIVERNAME "%d",
- cdev_find_free_index(DRIVERNAME));
+ stmpe_dev->cdev.name = basprintf(DRIVERNAME"%d",
+ cdev_find_free_index(DRIVERNAME));
stmpe_dev->client = to_i2c_client(dev);
stmpe_dev->cdev.size = 191; /* 191 known registers */
stmpe_dev->cdev.dev = dev;
diff --git a/drivers/misc/sram.c b/drivers/misc/sram.c
index 58b574157a..4fb6f801d2 100644
--- a/drivers/misc/sram.c
+++ b/drivers/misc/sram.c
@@ -47,8 +47,7 @@ static int sram_probe(struct device_d *dev)
sram = xzalloc(sizeof(*sram));
- sram->cdev.name = asprintf("sram%d",
- cdev_find_free_index("sram"));
+ sram->cdev.name = basprintf("sram%d", cdev_find_free_index("sram"));
res = dev_get_resource(dev, IORESOURCE_MEM, 0);
if (IS_ERR(res))
diff --git a/drivers/mtd/core.c b/drivers/mtd/core.c
index dcf94bfc0d..6d04b88553 100644
--- a/drivers/mtd/core.c
+++ b/drivers/mtd/core.c
@@ -470,10 +470,10 @@ static int mtd_partition_set(struct device_d *dev, struct param_d *p, const char
static char *print_size(uint64_t s)
{
if (!(s & ((1 << 20) - 1)))
- return asprintf("%lldM", s >> 20);
+ return basprintf("%lldM", s >> 20);
if (!(s & ((1 << 10) - 1)))
- return asprintf("%lldk", s >> 10);
- return asprintf("0x%lld", s);
+ return basprintf("%lldk", s >> 10);
+ return basprintf("0x%lld", s);
}
static int print_part(char *buf, int bufsize, struct mtd_info *mtd, uint64_t last_ofs,
@@ -577,7 +577,8 @@ static int of_mtd_fixup(struct device_node *root, void *ctx)
list_for_each_entry(partmtd, &mtd->partitions, partitions_entry) {
int na, ns, len = 0;
- char *name = asprintf("partition@%0llx", partmtd->master_offset);
+ char *name = basprintf("partition@%0llx",
+ partmtd->master_offset);
void *p;
u8 tmp[16 * 16]; /* Up to 64-bit address + 64-bit size */
@@ -675,7 +676,8 @@ int add_mtd_device(struct mtd_info *mtd, const char *devname, int device_id)
if (device_id == DEVICE_ID_SINGLE)
mtd->cdev.name = xstrdup(devname);
else
- mtd->cdev.name = asprintf("%s%d", devname, mtd->class_dev.id);
+ mtd->cdev.name = basprintf("%s%d", devname,
+ mtd->class_dev.id);
INIT_LIST_HEAD(&mtd->partitions);
diff --git a/drivers/mtd/devices/docg3.c b/drivers/mtd/devices/docg3.c
index 6a9bc74847..a40ba25632 100644
--- a/drivers/mtd/devices/docg3.c
+++ b/drivers/mtd/devices/docg3.c
@@ -1058,8 +1058,8 @@ static void __init doc_set_driver_info(int chip_id, struct mtd_info *mtd)
switch (chip_id) {
case DOC_CHIPID_G3:
- mtd->name = asprintf("DiskOnChip G3 floor %d",
- docg3->device_id);
+ mtd->name = basprintf("DiskOnChip G3 floor %d",
+ docg3->device_id);
docg3->max_block = 2047;
break;
}
diff --git a/drivers/mtd/mtdoob.c b/drivers/mtd/mtdoob.c
index 4dcf2f5915..86076f028d 100644
--- a/drivers/mtd/mtdoob.c
+++ b/drivers/mtd/mtdoob.c
@@ -79,7 +79,7 @@ static int add_mtdoob_device(struct mtd_info *mtd, const char *devname, void **p
mtdoob = xzalloc(sizeof(*mtdoob));
mtdoob->cdev.ops = &mtd_ops_oob;
mtdoob->cdev.size = mtd_div_by_wb(mtd->size, mtd) * mtd->oobsize;
- mtdoob->cdev.name = asprintf("%s.oob", mtd->cdev.name);
+ mtdoob->cdev.name = basprintf("%s.oob", mtd->cdev.name);
mtdoob->cdev.priv = mtdoob;
mtdoob->cdev.dev = &mtd->class_dev;
mtdoob->mtd = mtd;
diff --git a/drivers/mtd/mtdraw.c b/drivers/mtd/mtdraw.c
index 4d6ac72bd9..b06eb18f3f 100644
--- a/drivers/mtd/mtdraw.c
+++ b/drivers/mtd/mtdraw.c
@@ -308,7 +308,7 @@ static int add_mtdraw_device(struct mtd_info *mtd, const char *devname, void **p
mtdraw->cdev.ops = (struct file_operations *)&mtd_raw_fops;
mtdraw->cdev.size = mtd_div_by_wb(mtd->size, mtd) *
(mtd->writesize + mtd->oobsize);
- mtdraw->cdev.name = asprintf("%s.raw", mtd->cdev.name);
+ mtdraw->cdev.name = basprintf("%s.raw", mtd->cdev.name);
mtdraw->cdev.priv = mtdraw;
mtdraw->cdev.dev = &mtd->class_dev;
mtdraw->cdev.mtd = mtd;
diff --git a/drivers/mtd/nand/nand-bb.c b/drivers/mtd/nand/nand-bb.c
index e6d42772b3..015f8dc524 100644
--- a/drivers/mtd/nand/nand-bb.c
+++ b/drivers/mtd/nand/nand-bb.c
@@ -288,7 +288,7 @@ struct cdev *mtd_add_bb(struct mtd_info *mtd, const char *name)
if (name)
bb->cdev.name = xstrdup(name);
else
- bb->cdev.name = asprintf("%s.bb", mtd->cdev.name);
+ bb->cdev.name = basprintf("%s.bb", mtd->cdev.name);
nand_bb_calc_size(bb);
bb->cdev.ops = &nand_bb_ops;
diff --git a/drivers/mtd/nand/nand_imx_bbm.c b/drivers/mtd/nand/nand_imx_bbm.c
index 5caa0a26c3..251dfe5d3f 100644
--- a/drivers/mtd/nand/nand_imx_bbm.c
+++ b/drivers/mtd/nand/nand_imx_bbm.c
@@ -188,7 +188,7 @@ static int do_imx_nand_bbm(int argc, char *argv[])
int c;
printf("create flash bbt (y/n)?");
- c = getc();
+ c = getchar();
if (c == 'y')
yes = 1;
printf("\n");
diff --git a/drivers/mtd/ubi/barebox.c b/drivers/mtd/ubi/barebox.c
index c26a2455b2..ad38e69ea5 100644
--- a/drivers/mtd/ubi/barebox.c
+++ b/drivers/mtd/ubi/barebox.c
@@ -176,7 +176,7 @@ int ubi_volume_cdev_add(struct ubi_device *ubi, struct ubi_volume *vol)
priv->ubi = ubi;
cdev->ops = &ubi_volume_fops;
- cdev->name = asprintf("%s.%s", ubi->cdev.name, vol->name);
+ cdev->name = basprintf("%s.%s", ubi->cdev.name, vol->name);
cdev->priv = priv;
cdev->size = vol->used_bytes;
cdev->dev = &vol->dev;
@@ -239,7 +239,7 @@ int ubi_cdev_add(struct ubi_device *ubi)
int ret;
cdev->ops = &ubi_fops;
- cdev->name = asprintf("%s.ubi", ubi->mtd->cdev.name);
+ cdev->name = basprintf("%s.ubi", ubi->mtd->cdev.name);
cdev->priv = ubi;
cdev->size = 0;
diff --git a/drivers/mtd/ubi/ubi-barebox.h b/drivers/mtd/ubi/ubi-barebox.h
index ab970aa19d..557ad88316 100644
--- a/drivers/mtd/ubi/ubi-barebox.h
+++ b/drivers/mtd/ubi/ubi-barebox.h
@@ -16,6 +16,7 @@
#include <common.h>
#include <malloc.h>
+#include <crc.h>
#include <asm-generic/div64.h>
#include <errno.h>
#include <linux/err.h>
@@ -26,7 +27,7 @@
#include <linux/mtd/mtd.h>
#include <linux/mtd/ubi.h>
-#define crc32(seed, data, length) crc32_no_comp(seed, (unsigned char const *)data, length)
+#define crc32(seed, data, length) crc32_no_comp(seed, (unsigned char * const)data, length)
/* configurable */
#define CONFIG_MTD_UBI_WL_THRESHOLD 4096
diff --git a/drivers/mtd/ubi/ubi.h b/drivers/mtd/ubi/ubi.h
index a8ed0d7710..471d784234 100644
--- a/drivers/mtd/ubi/ubi.h
+++ b/drivers/mtd/ubi/ubi.h
@@ -20,6 +20,7 @@
#include <common.h>
#include <malloc.h>
+#include <crc.h>
#include <linux/types.h>
#include <linux/list.h>
#include <linux/rbtree.h>
diff --git a/drivers/net/davinci_emac.c b/drivers/net/davinci_emac.c
index 3dc4b16b67..75a917a76d 100644
--- a/drivers/net/davinci_emac.c
+++ b/drivers/net/davinci_emac.c
@@ -49,7 +49,7 @@
#include <asm/system.h>
#include <linux/phy.h>
#include <mach/emac_defs.h>
-#include <net/davinci_emac.h>
+#include <platform_data/eth-davinci-emac.h>
#include "davinci_emac.h"
struct davinci_emac_priv {
diff --git a/drivers/net/designware.c b/drivers/net/designware.c
index 3b21244478..1d662a71d9 100644
--- a/drivers/net/designware.c
+++ b/drivers/net/designware.c
@@ -27,7 +27,7 @@
#include <io.h>
#include <net.h>
#include <of_net.h>
-#include <net/designware.h>
+#include <platform_data/eth-designware.h>
#include <linux/phy.h>
#include <linux/err.h>
#include "designware.h"
diff --git a/drivers/net/dm9k.c b/drivers/net/dm9k.c
index ad402e3efc..acc0abbc48 100644
--- a/drivers/net/dm9k.c
+++ b/drivers/net/dm9k.c
@@ -29,7 +29,7 @@
#include <net.h>
#include <io.h>
#include <xfuncs.h>
-#include <dm9000.h>
+#include <platform_data/eth-dm9000.h>
#include <errno.h>
#include <linux/phy.h>
diff --git a/drivers/net/ep93xx.c b/drivers/net/ep93xx.c
index 0acb9b692f..fd725a56ee 100644
--- a/drivers/net/ep93xx.c
+++ b/drivers/net/ep93xx.c
@@ -38,7 +38,7 @@
#include <linux/types.h>
#include <mach/ep93xx-regs.h>
#include <linux/phy.h>
-#include <net/ep93xx_eth.h>
+#include <platform_data/eth-ep93xx.h>
#include "ep93xx.h"
#define EP93XX_MAX_PKT_SIZE 1536
diff --git a/drivers/net/fec_imx.c b/drivers/net/fec_imx.c
index 83fdec66d7..8bc7c2993a 100644
--- a/drivers/net/fec_imx.c
+++ b/drivers/net/fec_imx.c
@@ -20,7 +20,7 @@
#include <net.h>
#include <init.h>
#include <driver.h>
-#include <fec.h>
+#include <platform_data/eth-fec.h>
#include <io.h>
#include <clock.h>
#include <xfuncs.h>
diff --git a/drivers/net/fec_mpc5200.c b/drivers/net/fec_mpc5200.c
index bb57c34502..b99c23f7d4 100644
--- a/drivers/net/fec_mpc5200.c
+++ b/drivers/net/fec_mpc5200.c
@@ -10,7 +10,7 @@
#include <mach/mpc5xxx.h>
#include <malloc.h>
#include <net.h>
-#include <fec.h>
+#include <platform_data/eth-fec.h>
#include <init.h>
#include <driver.h>
#include <mach/sdma.h>
diff --git a/drivers/net/ksz8864rmn.c b/drivers/net/ksz8864rmn.c
index 3ca85fb3f3..860af448ea 100644
--- a/drivers/net/ksz8864rmn.c
+++ b/drivers/net/ksz8864rmn.c
@@ -149,7 +149,7 @@ static int micrel_switch_probe(struct device_d *dev)
return -ENODEV;
}
- priv->cdev.name = asprintf("switch%d", dev->id);
+ priv->cdev.name = basprintf("switch%d", dev->id);
priv->cdev.size = 256;
priv->cdev.ops = &micrel_switch_ops;
priv->cdev.priv = priv;
diff --git a/drivers/net/smc91111.c b/drivers/net/smc91111.c
index b7055910eb..e08e3dd1b5 100644
--- a/drivers/net/smc91111.c
+++ b/drivers/net/smc91111.c
@@ -67,7 +67,7 @@
#include <io.h>
#include <linux/phy.h>
#include <linux/err.h>
-#include <net/smc91111.h>
+#include <platform_data/eth-smc91111.h>
/*---------------------------------------------------------------
.
diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
index 9b1a38ae21..fe9d1df502 100644
--- a/drivers/net/smc911x.c
+++ b/drivers/net/smc911x.c
@@ -28,7 +28,7 @@
#include <errno.h>
#include <clock.h>
#include <io.h>
-#include <smc911x.h>
+#include <platform_data/eth-smc911x.h>
#include <linux/phy.h>
#include "smc911x.h"
diff --git a/drivers/of/barebox.c b/drivers/of/barebox.c
index 125feef2cc..64f483326d 100644
--- a/drivers/of/barebox.c
+++ b/drivers/of/barebox.c
@@ -61,7 +61,7 @@ static int environment_check_mount(struct device_d *dev, char **devpath)
/* Set env to be in a file on the now mounted device */
dev_dbg(dev, "Loading default env from %s on device %s\n",
filepath, *devpath);
- *devpath = asprintf("%s/%s", ENV_MNT_DIR, filepath);
+ *devpath = basprintf("%s/%s", ENV_MNT_DIR, filepath);
return 0;
}
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 0f5125865e..cbe7b7cec4 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -1676,7 +1676,8 @@ struct device_node *of_new_node(struct device_node *parent, const char *name)
if (parent) {
node->name = xstrdup(name);
- node->full_name = asprintf("%s/%s", node->parent->full_name, name);
+ node->full_name = basprintf("%s/%s",
+ node->parent->full_name, name);
list_add(&node->list, &parent->list);
} else {
node->name = xstrdup("");
diff --git a/drivers/of/of_path.c b/drivers/of/of_path.c
index ed620f1755..8e1931f939 100644
--- a/drivers/of/of_path.c
+++ b/drivers/of/of_path.c
@@ -75,7 +75,7 @@ static int __of_find_path(struct device_node *node, const char *part, char **out
mtd_can_have_bb(cdev->mtd))
add_bb = true;
- *outpath = asprintf("/dev/%s%s", cdev->name, add_bb ? ".bb" : "");
+ *outpath = basprintf("/dev/%s%s", cdev->name, add_bb ? ".bb" : "");
return 0;
}
diff --git a/drivers/of/partition.c b/drivers/of/partition.c
index 6017897b02..b6621f7dad 100644
--- a/drivers/of/partition.c
+++ b/drivers/of/partition.c
@@ -58,7 +58,7 @@ struct cdev *of_parse_partition(struct cdev *cdev, struct device_node *node)
if (of_get_property(node, "read-only", &len))
flags = DEVFS_PARTITION_READONLY;
- filename = asprintf("%s.%s", cdev->name, partname);
+ filename = basprintf("%s.%s", cdev->name, partname);
new = devfs_add_partition(cdev->name, offset, size, flags, filename);
if (IS_ERR(new))
diff --git a/drivers/pci/pci-mvebu.c b/drivers/pci/pci-mvebu.c
index da2459bafe..907bda0f96 100644
--- a/drivers/pci/pci-mvebu.c
+++ b/drivers/pci/pci-mvebu.c
@@ -306,7 +306,7 @@ static struct mvebu_pcie *mvebu_pcie_port_probe(struct device_d *dev,
reset_gpio = of_get_named_gpio_flags(np, "reset-gpios", 0, &flags);
if (gpio_is_valid(reset_gpio)) {
int reset_active_low = flags & OF_GPIO_ACTIVE_LOW;
- char *reset_name = asprintf("pcie%d.%d-reset", port, lane);
+ char *reset_name = basprintf("pcie%d.%d-reset", port, lane);
u32 reset_udelay = 20000;
of_property_read_u32(np, "reset-delay-us", &reset_udelay);
@@ -326,7 +326,7 @@ static struct mvebu_pcie *mvebu_pcie_port_probe(struct device_d *dev,
pcie->port = port;
pcie->lane = lane;
pcie->lane_mask = lane_mask;
- pcie->name = asprintf("pcie%d.%d", port, lane);
+ pcie->name = basprintf("pcie%d.%d", port, lane);
pcie->devfn = devfn;
pcie->base = of_iomap(np, 0);
diff --git a/drivers/pinctrl/pinctrl.c b/drivers/pinctrl/pinctrl.c
index 10ce186a12..e7b08a2bfe 100644
--- a/drivers/pinctrl/pinctrl.c
+++ b/drivers/pinctrl/pinctrl.c
@@ -68,7 +68,7 @@ int of_pinctrl_select_state(struct device_node *np, const char *name)
/* For each defined state ID */
for (state = 0; ; state++) {
/* Retrieve the pinctrl-* property */
- propname = asprintf("pinctrl-%d", state);
+ propname = basprintf("pinctrl-%d", state);
prop = of_find_property(np, propname, NULL);
free(propname);
diff --git a/drivers/pwm/pwm-imx.c b/drivers/pwm/pwm-imx.c
index 0845c234fe..b620e502f2 100644
--- a/drivers/pwm/pwm-imx.c
+++ b/drivers/pwm/pwm-imx.c
@@ -236,9 +236,10 @@ static int imx_pwm_probe(struct device_d *dev)
if (dev->device_node) {
imx->chip.devname = of_alias_get(dev->device_node);
if (!imx->chip.devname)
- imx->chip.devname = asprintf("pwm_%p", imx->mmio_base);
+ imx->chip.devname = basprintf("pwm_%p",
+ imx->mmio_base);
} else {
- imx->chip.devname = asprintf("pwm%d", dev->id);
+ imx->chip.devname = basprintf("pwm%d", dev->id);
}
imx->config = data->config;
diff --git a/drivers/pwm/pwm-mxs.c b/drivers/pwm/pwm-mxs.c
index 011d9002ba..e72f1dbcb0 100644
--- a/drivers/pwm/pwm-mxs.c
+++ b/drivers/pwm/pwm-mxs.c
@@ -143,7 +143,7 @@ static int mxs_pwm_probe(struct device_d *dev)
struct mxs_pwm_chip *mxspwm = &mxs->pwm[i];
mxspwm->chip.ops = &mxs_pwm_ops;
- mxspwm->chip.devname = asprintf("pwm%d", i);
+ mxspwm->chip.devname = basprintf("pwm%d", i);
mxspwm->chip.id = i;
mxspwm->mxs = mxs;
diff --git a/drivers/pwm/pxa_pwm.c b/drivers/pwm/pxa_pwm.c
index e399d03efd..c7130c225e 100644
--- a/drivers/pwm/pxa_pwm.c
+++ b/drivers/pwm/pxa_pwm.c
@@ -134,7 +134,7 @@ static int pxa_pwm_probe(struct device_d *dev)
struct pxa_pwm_chip *chip;
chip = xzalloc(sizeof(*chip));
- chip->chip.devname = asprintf("pwm%d", dev->id);
+ chip->chip.devname = basprintf("pwm%d", dev->id);
chip->chip.ops = &pxa_pwm_ops;
iores = dev_request_mem_resource(dev, 0);
if (IS_ERR(iores))
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 73f5c6eb4b..39df980dcb 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -153,7 +153,7 @@ static struct regulator_internal *of_regulator_get(struct device_d *dev, const c
struct regulator_internal *ri;
struct device_node *node;
- propname = asprintf("%s-supply", supply);
+ propname = basprintf("%s-supply", supply);
/*
* If the device does have a device node return the dummy regulator.
diff --git a/drivers/serial/serial_auart.c b/drivers/serial/serial_auart.c
index 9bef576cd7..c3b9a1995f 100644
--- a/drivers/serial/serial_auart.c
+++ b/drivers/serial/serial_auart.c
@@ -230,9 +230,18 @@ static void auart_serial_remove(struct device_d *dev)
free(priv);
}
+static const __maybe_unused struct of_device_id auart_serial_dt_ids[] = {
+ {
+ .compatible = "fsl,imx23-auart",
+ }, {
+ /* sentinel */
+ }
+};
+
static struct driver_d auart_serial_driver = {
.name = "auart_serial",
.probe = auart_serial_probe,
.remove = auart_serial_remove,
+ .of_compatible = DRV_OF_COMPAT(auart_serial_dt_ids),
};
console_platform_driver(auart_serial_driver);
diff --git a/drivers/serial/serial_ns16550.c b/drivers/serial/serial_ns16550.c
index 4ad52ea79c..c6548e3b85 100644
--- a/drivers/serial/serial_ns16550.c
+++ b/drivers/serial/serial_ns16550.c
@@ -41,7 +41,7 @@
#include <linux/clk.h>
#include "serial_ns16550.h"
-#include <ns16550.h>
+#include <platform_data/serial-ns16550.h>
struct ns16550_priv {
struct console_device cdev;
diff --git a/drivers/spi/gpio_spi.c b/drivers/spi/gpio_spi.c
index 4ea545a282..e37db756f8 100644
--- a/drivers/spi/gpio_spi.c
+++ b/drivers/spi/gpio_spi.c
@@ -209,7 +209,7 @@ static int gpio_spi_probe(struct device_d *dev)
if (!gpio_is_valid(pdata->cs[n]))
continue;
- cs_name = asprintf("spi-cs%d", n);
+ cs_name = basprintf("spi-cs%d", n);
ret = gpio_request_one(pdata->cs[n], GPIOF_DIR_OUT, cs_name);
if (ret)
return ret;
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index ba3b9da206..9e38ac4942 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -1763,7 +1763,7 @@ EXPORT_SYMBOL_GPL(usb_composite_setup_continue);
static char *composite_default_mfr(struct usb_gadget *gadget)
{
- return asprintf("barebox %s", gadget->name);
+ return basprintf("barebox %s", gadget->name);
}
void usb_composite_overwrite_options(struct usb_composite_dev *cdev,
diff --git a/drivers/usb/gadget/dfu.c b/drivers/usb/gadget/dfu.c
index 351b584796..d7bf92cdff 100644
--- a/drivers/usb/gadget/dfu.c
+++ b/drivers/usb/gadget/dfu.c
@@ -359,7 +359,7 @@ static int handle_dnload(struct usb_function *f, const struct usb_ctrlrequest *c
ret = -EINVAL;
goto err_out;
}
- ret = erase(fd, ~0, 0);
+ ret = erase(fd, ERASE_SIZE_ALL, 0);
close(fd);
if (ret && ret != -ENOSYS) {
perror("erase");
@@ -479,7 +479,7 @@ static int dfu_setup(struct usb_function *f, const struct usb_ctrlrequest *ctrl)
goto out;
}
- ret = erase(dfufd, ~0, 0);
+ ret = erase(dfufd, ERASE_SIZE_ALL, 0);
if (ret && ret != -ENOSYS) {
dfu->dfu_status = DFU_STATUS_errERASE;
perror("erase");
diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c
index 0df08c9a2b..859aaff279 100644
--- a/drivers/usb/gadget/f_fastboot.c
+++ b/drivers/usb/gadget/f_fastboot.c
@@ -17,6 +17,7 @@
#define pr_fmt(fmt) "fastboot: " fmt
#include <common.h>
+#include <command.h>
#include <errno.h>
#include <malloc.h>
#include <fcntl.h>
@@ -194,7 +195,7 @@ static void fb_setvar(struct fb_variable *var, const char *fmt, ...)
va_list ap;
va_start(ap, fmt);
- var->value = vasprintf(fmt, ap);
+ var->value = bvasprintf(fmt, ap);
va_end(ap);
}
@@ -204,7 +205,7 @@ static struct fb_variable *fb_addvar(struct f_fastboot *f_fb, const char *fmt, .
va_list ap;
va_start(ap, fmt);
- var->name = vasprintf(fmt, ap);
+ var->name = bvasprintf(fmt, ap);
va_end(ap);
list_add_tail(&var->list, &f_fb->variables);
@@ -701,7 +702,8 @@ static void cb_flash(struct usb_ep *ep, struct usb_request *req, const char *cmd
if (ret)
goto copy;
- cmd = asprintf("ubiformat -y -f %s %s", FASTBOOT_TMPFILE, filename);
+ cmd = basprintf("ubiformat -y -f %s %s", FASTBOOT_TMPFILE,
+ filename);
fastboot_tx_print(f_fb, "INFOThis is an UBI image...");
@@ -784,7 +786,7 @@ static void cb_erase(struct usb_ep *ep, struct usb_request *req, const char *cmd
if (fd < 0)
fastboot_tx_print(f_fb, "FAIL%s", strerror(-fd));
- ret = erase(fd, ~0, 0);
+ ret = erase(fd, ERASE_SIZE_ALL, 0);
close(fd);
diff --git a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c
index 9d1ffa3070..8218bb2a71 100644
--- a/drivers/usb/storage/usb.c
+++ b/drivers/usb/storage/usb.c
@@ -397,7 +397,7 @@ static int usb_stor_add_blkdev(struct us_data *us, struct device_d *dev,
pr_err("Cannot find a free number for the disk node\n");
pr_info("Using index %d for the new disk\n", result);
- pblk_dev->blk.cdev.name = asprintf("disk%d", result);
+ pblk_dev->blk.cdev.name = basprintf("disk%d", result);
pblk_dev->blk.blockbits = SECTOR_SHIFT;
result = blockdevice_register(&pblk_dev->blk);
diff --git a/drivers/video/edid.c b/drivers/video/edid.c
index 828c3610ac..e5c32a0c1b 100644
--- a/drivers/video/edid.c
+++ b/drivers/video/edid.c
@@ -469,7 +469,8 @@ static void calc_mode_timings(int xres, int yres, int refresh,
mode->yres = yres;
mode->refresh = refresh;
fb_get_mode(0, refresh, mode);
- mode->name = asprintf("%dx%d@%d-calc", mode->xres, mode->yres, mode->refresh);
+ mode->name = basprintf("%dx%d@%d-calc", mode->xres, mode->yres,
+ mode->refresh);
pr_debug(" %s\n", mode->name);
}
@@ -602,7 +603,8 @@ const struct fb_videomode vesa_modes[] = {
static void add_vesa_mode(struct fb_videomode *mode, int num)
{
*mode = vesa_modes[num];
- mode->name = asprintf("%dx%d@%d-vesa", mode->xres, mode->yres, mode->refresh);
+ mode->name = basprintf("%dx%d@%d-vesa", mode->xres, mode->yres,
+ mode->refresh);
pr_debug(" %s\n", mode->name);
}
@@ -748,7 +750,8 @@ static void get_detailed_timing(unsigned char *block,
pr_debug("%sHSync %sVSync\n", (HSYNC_POSITIVE) ? "+" : "-",
(VSYNC_POSITIVE) ? "+" : "-");
- mode->name = asprintf("%dx%d@%d", mode->xres, mode->yres, mode->refresh);
+ mode->name = basprintf("%dx%d@%d", mode->xres, mode->yres,
+ mode->refresh);
}
/**
diff --git a/drivers/video/fb.c b/drivers/video/fb.c
index 09bba001fb..4d2d3aa650 100644
--- a/drivers/video/fb.c
+++ b/drivers/video/fb.c
@@ -262,7 +262,7 @@ int register_framebuffer(struct fb_info *info)
info->line_length = info->xres * (info->bits_per_pixel >> 3);
info->cdev.ops = &fb_ops;
- info->cdev.name = asprintf("fb%d", id);
+ info->cdev.name = basprintf("fb%d", id);
info->cdev.size = info->line_length * info->yres;
info->cdev.dev = dev;
info->cdev.priv = info;
diff --git a/drivers/video/imx-ipu-v3/imx-ldb.c b/drivers/video/imx-ipu-v3/imx-ldb.c
index 2340b9b1d6..17ae894bf7 100644
--- a/drivers/video/imx-ipu-v3/imx-ldb.c
+++ b/drivers/video/imx-ipu-v3/imx-ldb.c
@@ -161,7 +161,7 @@ static int imx6q_ldb_prepare(struct imx_ldb_channel *imx_ldb_ch, int di,
ipuno = ((di >> 1) & 1) + 1;
dino = di & 0x1;
- clkname = asprintf("ipu%d_di%d_sel", ipuno, dino);
+ clkname = basprintf("ipu%d_di%d_sel", ipuno, dino);
diclk = clk_lookup(clkname);
free(clkname);
if (IS_ERR(diclk)) {
@@ -169,7 +169,7 @@ static int imx6q_ldb_prepare(struct imx_ldb_channel *imx_ldb_ch, int di,
return PTR_ERR(diclk);
}
- clkname = asprintf("ldb_di%d_podf", imx_ldb_ch->chno);
+ clkname = basprintf("ldb_di%d_podf", imx_ldb_ch->chno);
ldbclk = clk_lookup(clkname);
free(clkname);
if (IS_ERR(ldbclk)) {
@@ -208,7 +208,7 @@ static int imx53_ldb_prepare(struct imx_ldb_channel *imx_ldb_ch, int di,
dino = di & 0x1;
- clkname = asprintf("ipu_di%d_sel", dino);
+ clkname = basprintf("ipu_di%d_sel", dino);
diclk = clk_lookup(clkname);
free(clkname);
if (IS_ERR(diclk)) {
@@ -216,7 +216,7 @@ static int imx53_ldb_prepare(struct imx_ldb_channel *imx_ldb_ch, int di,
return PTR_ERR(diclk);
}
- clkname = asprintf("ldb_di%d_div", imx_ldb_ch->chno);
+ clkname = basprintf("ldb_di%d_div", imx_ldb_ch->chno);
ldbclk = clk_lookup(clkname);
free(clkname);
if (IS_ERR(ldbclk)) {
diff --git a/drivers/video/imx-ipu-v3/ipu-di.c b/drivers/video/imx-ipu-v3/ipu-di.c
index 8df9c9f06b..b6e64fe16a 100644
--- a/drivers/video/imx-ipu-v3/ipu-di.c
+++ b/drivers/video/imx-ipu-v3/ipu-di.c
@@ -732,8 +732,7 @@ int ipu_di_init(struct ipu_soc *ipu, struct device_d *dev, int id,
ipu_di_write(di, 0x10, DI_BS_CLKGEN0);
di->clk_di_pixel.parent_names = di->di_parent_names;
- di->clk_name = asprintf("%s_di%d_pixel",
- dev_name(dev), id);
+ di->clk_name = basprintf("%s_di%d_pixel", dev_name(dev), id);
if (!di->clk_name)
return -ENOMEM;
diff --git a/drivers/video/imx-ipu-v3/ipufb.c b/drivers/video/imx-ipu-v3/ipufb.c
index 747e094789..67fec11d4a 100644
--- a/drivers/video/imx-ipu-v3/ipufb.c
+++ b/drivers/video/imx-ipu-v3/ipufb.c
@@ -284,7 +284,7 @@ static int ipufb_probe(struct device_d *dev)
info = &fbi->info;
ipuid = of_alias_get_id(dev->parent->device_node, "ipu");
- fbi->name = asprintf("ipu%d-di%d", ipuid + 1, pdata->di);
+ fbi->name = basprintf("ipu%d-di%d", ipuid + 1, pdata->di);
fbi->id = ipuid * 2 + pdata->di;
fbi->dino = pdata->di;
diff --git a/drivers/w1/slaves/w1_ds2431.c b/drivers/w1/slaves/w1_ds2431.c
index 30e6e1d496..e3e929670d 100644
--- a/drivers/w1/slaves/w1_ds2431.c
+++ b/drivers/w1/slaves/w1_ds2431.c
@@ -272,7 +272,7 @@ static int ds2431_probe(struct w1_device *dev)
cdev->priv = dev;
cdev->ops = &ds2431_ops;
cdev->size = W1_F2D_EEPROM_SIZE;
- cdev->name = asprintf(DRIVERNAME"%d", ds2431_count++);
+ cdev->name = basprintf(DRIVERNAME"%d", ds2431_count++);
if (cdev->name == NULL)
return -ENOMEM;
diff --git a/drivers/w1/slaves/w1_ds2433.c b/drivers/w1/slaves/w1_ds2433.c
index a840d9a2f2..a907c6bf3c 100644
--- a/drivers/w1/slaves/w1_ds2433.c
+++ b/drivers/w1/slaves/w1_ds2433.c
@@ -171,7 +171,7 @@ static int ds2433_cdev_create(struct w1_device *dev, int size, int id)
cdev->priv = dev;
cdev->ops = &ds2433_ops;
cdev->size = size;
- cdev->name = asprintf("%s%d", dev->dev.driver->name, id);
+ cdev->name = basprintf("%s%d", dev->dev.driver->name, id);
if (cdev->name == NULL)
return -ENOMEM;
diff --git a/fs/bpkfs.c b/fs/bpkfs.c
index 1e2619e5cd..f1db963d09 100644
--- a/fs/bpkfs.c
+++ b/fs/bpkfs.c
@@ -14,6 +14,7 @@
#include <fcntl.h>
#include <malloc.h>
#include <init.h>
+#include <crc.h>
#include <linux/stat.h>
#include <linux/err.h>
#include <bpkfs.h>
@@ -102,7 +103,7 @@ static struct bpkfs_handle_hw *bpkfs_get_or_add_hw_id(
INIT_LIST_HEAD(&h->list_data);
h->hw_id = hw_id;
- h->name = asprintf("hw_id_%x", hw_id);
+ h->name = basprintf("hw_id_%x", hw_id);
list_add_tail(&h->list_hw_id, &handle->list);
return h;
@@ -430,7 +431,7 @@ static int bpkfs_probe(struct device_d *dev)
if (!type) {
type = "unknown";
- d->name = asprintf("%s_%08x", type, d->type);
+ d->name = basprintf("%s_%08x", type, d->type);
} else {
d->name = xstrdup(type);
}
@@ -463,7 +464,7 @@ static int bpkfs_probe(struct device_d *dev)
type = d->name;
d = xzalloc(sizeof(*d));
d->type = be32_to_cpu(data_header.type);
- d->name = asprintf("%s.crc", type);
+ d->name = basprintf("%s.crc", type);
d->type |= (1 << 31);
d->size = 8;
sprintf(d->data, "%08x", be32_to_cpu(data_header.crc));
diff --git a/fs/efi.c b/fs/efi.c
index 83c46826d5..7310d7d27f 100644
--- a/fs/efi.c
+++ b/fs/efi.c
@@ -30,6 +30,7 @@
#include <fcntl.h>
#include <wchar.h>
#include <efi.h>
+#include <libfile.h>
#include <mach/efi.h>
#include <mach/efi-device.h>
#include <linux/stddef.h>
@@ -529,8 +530,8 @@ int efi_fs_probe(struct efi_device *efidev)
if (efi_loaded_image && efidev->protocol == volume)
path = xstrdup("/boot");
else
- path = asprintf("/efi%d", index);
- device = asprintf("%s", dev_name(&efidev->dev));
+ path = basprintf("/efi%d", index);
+ device = basprintf("%s", dev_name(&efidev->dev));
ret = make_directory(path);
if (ret)
diff --git a/fs/efivarfs.c b/fs/efivarfs.c
index c7a282b05c..86cdcf0b59 100644
--- a/fs/efivarfs.c
+++ b/fs/efivarfs.c
@@ -154,7 +154,7 @@ static int efivars_create(struct device_d *dev, const char *pathname, mode_t mod
name8 = xstrdup_wchar_to_char(inode->name);
- inode->full_name = asprintf("%s-%pUl", name8, &inode->vendor);
+ inode->full_name = basprintf("%s-%pUl", name8, &inode->vendor);
free(name8);
efiret = RT->set_variable(inode->name, &inode->vendor,
@@ -405,7 +405,7 @@ static int efivarfs_probe(struct device_d *dev)
inode->vendor = vendor;
name8 = xstrdup_wchar_to_char(inode->name);
- inode->full_name = asprintf("%s-%pUl", name8, &vendor);
+ inode->full_name = basprintf("%s-%pUl", name8, &vendor);
free(name8);
list_add_tail(&inode->node, &priv->inodes);
diff --git a/fs/fs.c b/fs/fs.c
index 440adae14c..f63a2dde51 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -18,6 +18,7 @@
*/
#include <common.h>
+#include <command.h>
#include <fs.h>
#include <driver.h>
#include <errno.h>
@@ -33,6 +34,7 @@
#include <environment.h>
#include <libgen.h>
#include <block.h>
+#include <libfile.h>
char *mkmodestr(unsigned long mode, char *str)
{
@@ -935,8 +937,10 @@ int erase(int fd, loff_t count, loff_t offset)
f = &files[fd];
if (offset >= f->size)
return 0;
- if (count > f->size - offset)
+ if (count == ERASE_SIZE_ALL || count > f->size - offset)
count = f->size - offset;
+ if (count < 0)
+ return -EINVAL;
fsdrv = f->fsdev->driver;
if (fsdrv->erase)
@@ -1297,7 +1301,8 @@ int mount(const char *device, const char *fsname, const char *_path,
}
if (!fsdev->linux_rootarg && fsdev->cdev && fsdev->cdev->partuuid[0] != 0) {
- char *str = asprintf("root=PARTUUID=%s", fsdev->cdev->partuuid);
+ char *str = basprintf("root=PARTUUID=%s",
+ fsdev->cdev->partuuid);
fsdev_set_linux_rootarg(fsdev, str);
}
@@ -1716,10 +1721,10 @@ const char *cdev_mount_default(struct cdev *cdev, const char *fsoptions)
if (path)
return path;
- newpath = asprintf("/mnt/%s", cdev->name);
+ newpath = basprintf("/mnt/%s", cdev->name);
make_directory(newpath);
- devpath = asprintf("/dev/%s", cdev->name);
+ devpath = basprintf("/dev/%s", cdev->name);
ret = mount(devpath, NULL, newpath, fsoptions);
diff --git a/fs/nfs.c b/fs/nfs.c
index 87828fce13..1e874d541e 100644
--- a/fs/nfs.c
+++ b/fs/nfs.c
@@ -1317,19 +1317,18 @@ static void nfs_set_rootarg(struct nfs_priv *npriv, struct fs_device_d *fsdev)
const char *ip;
ip = ip_to_string(npriv->server);
- str = asprintf("root=/dev/nfs nfsroot=%s:%s%s%s",
- ip, npriv->path, rootnfsopts[0] ? "," : "",
- rootnfsopts);
+ str = basprintf("root=/dev/nfs nfsroot=%s:%s%s%s", ip, npriv->path,
+ rootnfsopts[0] ? "," : "", rootnfsopts);
/* forward specific mount options on demand */
if (npriv->manual_nfs_port == 1) {
- tmp = asprintf("%s,port=%hu", str, npriv->nfs_port);
+ tmp = basprintf("%s,port=%hu", str, npriv->nfs_port);
free(str);
str = tmp;
}
if (npriv->manual_mount_port == 1) {
- tmp = asprintf("%s,mountport=%hu", str, npriv->mount_port);
+ tmp = basprintf("%s,mountport=%hu", str, npriv->mount_port);
free(str);
str = tmp;
}
diff --git a/fs/ubifs/ubifs.c b/fs/ubifs/ubifs.c
index f07ad5e7f9..8062baaa85 100644
--- a/fs/ubifs/ubifs.c
+++ b/fs/ubifs/ubifs.c
@@ -1269,8 +1269,8 @@ void ubifs_set_rootarg(struct ubifs_priv *priv, struct fs_device_d *fsdev)
mtd = di.mtd;
- str = asprintf("root=ubi0:%s ubi.mtd=%s rootfstype=ubifs",
- vi.name, mtd->cdev.partname);
+ str = basprintf("root=ubi0:%s ubi.mtd=%s rootfstype=ubifs",
+ vi.name, mtd->cdev.partname);
fsdev_set_linux_rootarg(fsdev, str);
diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h
index 1c0f46a8bc..5c5a82637e 100644
--- a/fs/ubifs/ubifs.h
+++ b/fs/ubifs/ubifs.h
@@ -34,6 +34,7 @@
#else
#include <common.h>
#include <lzo.h>
+#include <crc.h>
#include <linux/fs.h>
#include <linux/sched.h>
#include <linux/ctype.h>
diff --git a/fs/uimagefs.c b/fs/uimagefs.c
index 3fdc5bd2be..13c1fbac05 100644
--- a/fs/uimagefs.c
+++ b/fs/uimagefs.c
@@ -17,6 +17,7 @@
#include <uimagefs.h>
#include <libbb.h>
#include <rtc.h>
+#include <crc.h>
#include <libfile.h>
static bool uimagefs_is_data_file(struct uimagefs_handle_data *d)
@@ -249,7 +250,7 @@ static int uimagefs_add_name(struct uimagefs_handle *priv)
static int uimagefs_add_hex(struct uimagefs_handle *priv, enum uimagefs_type type,
uint32_t data)
{
- char *val = asprintf("0x%x", data);
+ char *val = basprintf("0x%x", data);
return uimagefs_add_str(priv, type, val);
}
@@ -265,7 +266,7 @@ static int __uimagefs_add_data(struct uimagefs_handle *priv, size_t offset,
if (i < 0)
d->name = xstrdup(name);
else
- d->name = asprintf("%s%d", name, i);
+ d->name = basprintf("%s%d", name, i);
d->offset = offset;
d->size = size;
@@ -303,7 +304,7 @@ static int uimagefs_add_time(struct uimagefs_handle *priv)
char *val;
to_tm(header->ih_time, &tm);
- val = asprintf("%4d-%02d-%02d %2d:%02d:%02d UTC",
+ val = basprintf("%4d-%02d-%02d %2d:%02d:%02d UTC",
tm.tm_year, tm.tm_mon, tm.tm_mday,
tm.tm_hour, tm.tm_min, tm.tm_sec);
@@ -514,8 +515,8 @@ static int uimagefs_probe(struct device_d *dev)
dev_dbg(dev, "mount: %s\n", fsdev->backingstore);
if (IS_BUILTIN(CONFIG_FS_TFTP))
- priv->tmp = asprintf("/.uImage_tmp_%08x",
- crc32(0, fsdev->path, strlen(fsdev->path)));
+ priv->tmp = basprintf("/.uImage_tmp_%08x",
+ crc32(0, fsdev->path, strlen(fsdev->path)));
ret = __uimage_open(priv);
if (ret)
diff --git a/images/Makefile.am33xx b/images/Makefile.am33xx
index 6c7e81a9dc..8be78eff89 100644
--- a/images/Makefile.am33xx
+++ b/images/Makefile.am33xx
@@ -83,6 +83,12 @@ FILE_barebox-am33xx-phytec-phycore-mlo-1024mb.spi.img = start_am33xx_phytec_phyc
am33xx-mlo-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-mlo-1024mb.img
am33xx-mlospi-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-mlo-1024mb.spi.img
+pblx-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += start_am33xx_phytec_phycore_r2_sram_1024mb
+FILE_barebox-am33xx-phytec-phycore-r2-mlo-1024mb.img = start_am33xx_phytec_phycore_r2_sram_1024mb.pblx.mlo
+FILE_barebox-am33xx-phytec-phycore-r2-mlo-1024mb.spi.img = start_am33xx_phytec_phycore_r2_sram_1024mb.pblx.mlospi
+am33xx-mlo-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-r2-mlo-1024mb.img
+am33xx-mlospi-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-r2-mlo-1024mb.spi.img
+
pblx-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += start_am33xx_phytec_phyflex_sdram
FILE_barebox-am33xx-phytec-phyflex.img = start_am33xx_phytec_phyflex_sdram.pblx
am33xx-barebox-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phyflex.img
diff --git a/images/Makefile.imx b/images/Makefile.imx
index 6870bce4ca..0ff317ba07 100644
--- a/images/Makefile.imx
+++ b/images/Makefile.imx
@@ -203,6 +203,11 @@ CFG_start_phytec_phyboard_subra_512mb_1bank.pblx.imximg = $(board)/phytec-som-im
FILE_barebox-phytec-phyboard-subra-512mb-1bank.img = start_phytec_phyboard_subra_512mb_1bank.pblx.imximg
image-$(CONFIG_MACH_PHYTEC_SOM_IMX6) += barebox-phytec-phyboard-subra-512mb-1bank.img
+pblx-$(CONFIG_MACH_PHYTEC_SOM_IMX6) += start_phytec_phyboard_subra_1gib_1bank
+CFG_start_phytec_phyboard_subra_1gib_1bank.pblx.imximg = $(board)/phytec-som-imx6/flash-header-phytec-pfla02-1gib-1bank.imxcfg
+FILE_barebox-phytec-phyboard-subra-1gib-1bank.img = start_phytec_phyboard_subra_1gib_1bank.pblx.imximg
+image-$(CONFIG_MACH_PHYTEC_SOM_IMX6) += barebox-phytec-phyboard-subra-1gib-1bank.img
+
pblx-$(CONFIG_MACH_DFI_FS700_M60) += start_imx6dl_dfi_fs700_m60_6s
CFG_start_imx6dl_dfi_fs700_m60_6s.pblx.imximg = $(board)/dfi-fs700-m60/flash-header-fs700-m60-6s.imxcfg
FILE_barebox-dfi-fs700-m60-6s.img = start_imx6dl_dfi_fs700_m60_6s.pblx.imximg
@@ -293,6 +298,11 @@ CFG_start_imx6q_tx6x_1g.pblx.imximg = $(board)/karo-tx6x/flash-header-tx6q-1g.im
FILE_barebox-karo-imx6q-tx6x-1g.img = start_imx6q_tx6x_1g.pblx.imximg
image-$(CONFIG_MACH_TX6X) += barebox-karo-imx6q-tx6x-1g.img
+pblx-$(CONFIG_MACH_TX6X) += start_imx6q_tx6x_2g
+CFG_start_imx6q_tx6x_2g.pblx.imximg = $(board)/karo-tx6x/flash-header-tx6qp-2g.imxcfg
+FILE_barebox-karo-imx6qp-tx6x-2g.img = start_imx6q_tx6x_2g.pblx.imximg
+image-$(CONFIG_MACH_TX6X) += barebox-karo-imx6qp-tx6x-2g.img
+
pblx-$(CONFIG_MACH_UDOO) += start_imx6_udoo
CFG_start_imx6_udoo.pblx.imximg = $(board)/udoo/flash-header-mx6-udoo.imxcfg
FILE_barebox-udoo-imx6q.img = start_imx6_udoo.pblx.imximg
@@ -348,11 +358,21 @@ CFG_start_phytec_phycore_imx6q_som_emmc_1gib.pblx.imximg = $(board)/phytec-som-i
FILE_barebox-phytec-phycore-imx6q-som-emmc-1gib.img = start_phytec_phycore_imx6q_som_emmc_1gib.pblx.imximg
image-$(CONFIG_MACH_PHYTEC_SOM_IMX6) += barebox-phytec-phycore-imx6q-som-emmc-1gib.img
+pblx-$(CONFIG_MACH_PHYTEC_SOM_IMX6) += start_phytec_phycore_imx6q_som_emmc_2gib
+CFG_start_phytec_phycore_imx6q_som_emmc_2gib.pblx.imximg = $(board)/phytec-som-imx6/flash-header-phytec-pcm058-2gib.imxcfg
+FILE_barebox-phytec-phycore-imx6q-som-emmc-2gib.img = start_phytec_phycore_imx6q_som_emmc_2gib.pblx.imximg
+image-$(CONFIG_MACH_PHYTEC_SOM_IMX6) += barebox-phytec-phycore-imx6q-som-emmc-2gib.img
+
pblx-$(CONFIG_MACH_PHYTEC_SOM_IMX6) += start_phytec_phycore_imx6dl_som_nand_256mb
CFG_start_phytec_phycore_imx6dl_som_nand_256mb.pblx.imximg = $(board)/phytec-som-imx6/flash-header-phytec-pcm058dl-256mb.imxcfg
FILE_barebox-phytec-phycore-imx6dl-som-nand-256mb.img = start_phytec_phycore_imx6dl_som_nand_256mb.pblx.imximg
image-$(CONFIG_MACH_PHYTEC_SOM_IMX6) += barebox-phytec-phycore-imx6dl-som-nand-256mb.img
+pblx-$(CONFIG_MACH_PHYTEC_SOM_IMX6) += start_phytec_phycore_imx6dl_som_emmc_1gib
+CFG_start_phytec_phycore_imx6dl_som_emmc_1gib.pblx.imximg = $(board)/phytec-som-imx6/flash-header-phytec-pcm058dl-1gib.imxcfg
+FILE_barebox-phytec-phycore-imx6dl-som-emmc-1gib.img = start_phytec_phycore_imx6dl_som_emmc_1gib.pblx.imximg
+image-$(CONFIG_MACH_PHYTEC_SOM_IMX6) += barebox-phytec-phycore-imx6dl-som-emmc-1gib.img
+
pblx-$(CONFIG_MACH_GW_VENTANA) += start_imx6q_gw54xx_1gx64
CFG_start_imx6q_gw54xx_1gx64.pblx.imximg = $(board)/gateworks-ventana/flash-header-ventana-quad-1gx64.imxcfg
FILE_barebox-gateworks-imx6q-ventana-1gx64.img = start_imx6q_gw54xx_1gx64.pblx.imximg
diff --git a/images/Makefile.socfpga b/images/Makefile.socfpga
index d52b909ff3..7e642c06c9 100644
--- a/images/Makefile.socfpga
+++ b/images/Makefile.socfpga
@@ -2,7 +2,7 @@
# barebox image generation Makefile for Altera socfpga
#
-# %.socfpga - convert into socfpga image
+# %.socfpgaimg - convert into socfpga image
# ----------------------------------------------------------------
quiet_cmd_socfpga_image = SOCFPGA-IMG $@
cmd_socfpga_image = scripts/socfpga_mkimage -b -o $@ $<
diff --git a/include/boot.h b/include/boot.h
index 0198cc8826..8fcbb7f012 100644
--- a/include/boot.h
+++ b/include/boot.h
@@ -21,6 +21,11 @@ struct bootm_data {
enum bootm_verify verify;
bool force;
bool dryrun;
+ /*
+ * appendroot - if true, try to add a suitable root= Kernel option to
+ * mount the rootfs from the same device as the Kernel comes from.
+ */
+ bool appendroot;
unsigned long initrd_address;
unsigned long os_address;
unsigned long os_entry;
diff --git a/include/command.h b/include/command.h
index b938431f05..2e7278099b 100644
--- a/include/command.h
+++ b/include/command.h
@@ -68,6 +68,7 @@ extern struct command __barebox_cmd_end;
struct command *find_cmd(const char *cmd);
int execute_command(int argc, char **argv);
void barebox_cmd_usage(struct command *cmdtp);
+int run_command(const char *cmd);
#define COMMAND_SUCCESS 0
#define COMMAND_ERROR 1
diff --git a/include/common.h b/include/common.h
index 38a6dbf933..680a0affb6 100644
--- a/include/common.h
+++ b/include/common.h
@@ -61,7 +61,6 @@ void __noreturn hang (void);
char *size_human_readable(unsigned long long size);
-int run_command(const char *cmd);
int readline (const char *prompt, char *buf, int len);
/* common/memsize.c */
@@ -70,12 +69,6 @@ long get_ram_size (volatile long *, long);
/* $(CPU)/cpu.c */
void __noreturn poweroff(void);
-/* lib_generic/crc32.c */
-uint32_t crc32(uint32_t, const void*, unsigned int);
-uint32_t crc32_no_comp(uint32_t, const void*, unsigned int);
-int file_crc(char *filename, ulong start, ulong size, ulong *crc,
- ulong *total);
-
/* common/console.c */
int ctrlc (void);
@@ -88,16 +81,6 @@ static inline void dump_stack(void)
}
#endif
-#define MEMAREA_SIZE_SPECIFIED 1
-
-struct memarea_info {
- struct device_d *device;
- unsigned long start;
- unsigned long end;
- unsigned long size;
- unsigned long flags;
-};
-
int parse_area_spec(const char *str, loff_t *start, loff_t *size);
/* Just like simple_strtoul(), but this one honors a K/M/G suffix */
@@ -113,17 +96,6 @@ extern int (*barebox_main)(void);
void __noreturn start_barebox(void);
void shutdown_barebox(void);
-int run_shell(void);
-
-#ifdef CONFIG_SHELL_HUSH
-char *shell_expand(char *str);
-#else
-static inline char *shell_expand(char *str)
-{
- return strdup(str);
-}
-#endif
-
#define ALIGN_DOWN(x, a) ((x) & ~((typeof(x))(a) - 1))
#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x)
@@ -156,7 +128,6 @@ static inline void print_hex_dump(const char *level, const char *prefix_str,
int mem_parse_options(int argc, char *argv[], char *optstr, int *mode,
char **sourcefile, char **destfile, int *swab);
-int open_and_lseek(const char *filename, int mode, loff_t pos);
#define RW_BUF_SIZE (unsigned)4096
extern const char version_string[];
diff --git a/include/crc.h b/include/crc.h
index 4290f41c57..847a0a4b64 100644
--- a/include/crc.h
+++ b/include/crc.h
@@ -1,100 +1,14 @@
-/*
- *==========================================================================
- *
- * crc.h
- *
- * Interface for the CRC algorithms.
- *
- *==========================================================================
- *####ECOSGPLCOPYRIGHTBEGIN####
- * -------------------------------------------
- * This file is part of eCos, the Embedded Configurable Operating System.
- * Copyright (C) 2002 Andrew Lunn
- *
- * eCos is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free
- * Software Foundation; either version 2 or (at your option) any later version.
- *
- * eCos is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with eCos; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- *
- * As a special exception, if other files instantiate templates or use macros
- * or inline functions from this file, or you compile this file and link it
- * with other works to produce a work based on this file, this file does not
- * by itself cause the resulting work to be covered by the GNU General Public
- * License. However the source code for this file must still be made available
- * in accordance with section (3) of the GNU General Public License.
- *
- * This exception does not invalidate any other reasons why a work based on
- * this file might be covered by the GNU General Public License.
- *
- * Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
- * at http: *sources.redhat.com/ecos/ecos-license/
- * -------------------------------------------
- *####ECOSGPLCOPYRIGHTEND####
- *==========================================================================
- *#####DESCRIPTIONBEGIN####
- *
- * Author(s): Andrew Lunn
- * Contributors: Andrew Lunn
- * Date: 2002-08-06
- * Purpose:
- * Description:
- *
- * This code is part of eCos (tm).
- *
- *####DESCRIPTIONEND####
- *
- *==========================================================================
- */
-
-#ifndef _SERVICES_CRC_CRC_H_
-#define _SERVICES_CRC_CRC_H_
+#ifndef __INCLUDE_CRC_H
+#define __INCLUDE_CRC_H
#include <linux/types.h>
-#ifndef __externC
-# ifdef __cplusplus
-# define __externC extern "C"
-# else
-# define __externC extern
-# endif
-#endif
-
-/* Compute a CRC, using the POSIX 1003 definition */
-extern uint32_t
-cyg_posix_crc32(unsigned char *s, int len);
-
-/* Gary S. Brown's 32 bit CRC */
-
-extern uint32_t
-cyg_crc32(unsigned char *s, int len);
-
-/* Gary S. Brown's 32 bit CRC, but accumulate the result from a */
-/* previous CRC calculation */
-
-extern uint32_t
-cyg_crc32_accumulate(uint32_t crc, unsigned char *s, int len);
-
-/* Ethernet FCS Algorithm */
-
-extern uint32_t
-cyg_ether_crc32(unsigned char *s, int len);
-
-/* Ethernet FCS algorithm, but accumulate the result from a previous */
-/* CRC calculation. */
-
-extern uint32_t
-cyg_ether_crc32_accumulate(uint32_t crc, unsigned char *s, int len);
-
/* 16 bit CRC with polynomial x^16+x^12+x^5+1 */
-
extern uint16_t cyg_crc16(const unsigned char *s, int len);
-#endif /* _SERVICES_CRC_CRC_H_ */
+uint32_t crc32(uint32_t, const void *, unsigned int);
+uint32_t crc32_no_comp(uint32_t, const void *, unsigned int);
+int file_crc(char *filename, unsigned long start, unsigned long size,
+ unsigned long *crc, unsigned long *total);
+
+#endif /* __INCLUDE_CRC_H */
diff --git a/include/dirent.h b/include/dirent.h
new file mode 100644
index 0000000000..5ee4c2063e
--- /dev/null
+++ b/include/dirent.h
@@ -0,0 +1,20 @@
+#ifndef __DIRENT_H
+#define __DIRENT_H
+
+struct dirent {
+ char d_name[256];
+};
+
+typedef struct dir {
+ struct device_d *dev;
+ struct fs_driver_d *fsdrv;
+ struct node_d *node;
+ struct dirent d;
+ void *priv; /* private data for the fs driver */
+} DIR;
+
+DIR *opendir(const char *pathname);
+struct dirent *readdir(DIR *dir);
+int closedir(DIR *dir);
+
+#endif /* __DIRENT_H */
diff --git a/include/fcntl.h b/include/fcntl.h
index 12f370a418..98020bdfb1 100644
--- a/include/fcntl.h
+++ b/include/fcntl.h
@@ -1,5 +1,5 @@
-#ifndef _ASM_GENERIC_FCNTL_H
-#define _ASM_GENERIC_FCNTL_H
+#ifndef __FCNTL_H
+#define __FCNTL_H
#include <linux/types.h>
@@ -24,97 +24,7 @@
#define O_RWSIZE_4 004000000
#define O_RWSIZE_8 010000000
-#define F_DUPFD 0 /* dup */
-#define F_GETFD 1 /* get close_on_exec */
-#define F_SETFD 2 /* set/clear close_on_exec */
-#define F_GETFL 3 /* get file->f_flags */
-#define F_SETFL 4 /* set file->f_flags */
-#ifndef F_GETLK
-#define F_GETLK 5
-#define F_SETLK 6
-#define F_SETLKW 7
-#endif
-#ifndef F_SETOWN
-#define F_SETOWN 8 /* for sockets. */
-#define F_GETOWN 9 /* for sockets. */
-#endif
-#ifndef F_SETSIG
-#define F_SETSIG 10 /* for sockets. */
-#define F_GETSIG 11 /* for sockets. */
-#endif
+int open(const char *pathname, int flags, ...);
+int creat(const char *pathname, mode_t mode);
-/* for F_[GET|SET]FL */
-#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
-
-/* for posix fcntl() and lockf() */
-#ifndef F_RDLCK
-#define F_RDLCK 0
-#define F_WRLCK 1
-#define F_UNLCK 2
-#endif
-
-/* for old implementation of bsd flock () */
-#ifndef F_EXLCK
-#define F_EXLCK 4 /* or 3 */
-#define F_SHLCK 8 /* or 4 */
-#endif
-
-/* for leases */
-#ifndef F_INPROGRESS
-#define F_INPROGRESS 16
-#endif
-
-/* operations for bsd flock(), also used by the kernel implementation */
-#define LOCK_SH 1 /* shared lock */
-#define LOCK_EX 2 /* exclusive lock */
-#define LOCK_NB 4 /* or'd with one of the above to prevent
- blocking */
-#define LOCK_UN 8 /* remove lock */
-
-#define LOCK_MAND 32 /* This is a mandatory flock ... */
-#define LOCK_READ 64 /* which allows concurrent read operations */
-#define LOCK_WRITE 128 /* which allows concurrent write operations */
-#define LOCK_RW 192 /* which allows concurrent read & write ops */
-
-#define F_LINUX_SPECIFIC_BASE 1024
-
-#ifndef HAVE_ARCH_STRUCT_FLOCK
-#ifndef __ARCH_FLOCK_PAD
-#define __ARCH_FLOCK_PAD
-#endif
-
-struct flock {
- short l_type;
- short l_whence;
- off_t l_start;
- off_t l_len;
- pid_t l_pid;
- __ARCH_FLOCK_PAD
-};
-#endif
-
-#ifndef CONFIG_64BIT
-
-#ifndef F_GETLK64
-#define F_GETLK64 12 /* using 'struct flock64' */
-#define F_SETLK64 13
-#define F_SETLKW64 14
-#endif
-
-#ifndef HAVE_ARCH_STRUCT_FLOCK64
-#ifndef __ARCH_FLOCK64_PAD
-#define __ARCH_FLOCK64_PAD
-#endif
-
-struct flock64 {
- short l_type;
- short l_whence;
- loff_t l_start;
- loff_t l_len;
- pid_t l_pid;
- __ARCH_FLOCK64_PAD
-};
-#endif
-#endif /* !CONFIG_64BIT */
-
-#endif /* _ASM_GENERIC_FCNTL_H */
+#endif /* __FCNTL_H */
diff --git a/include/fs.h b/include/fs.h
index b9d1e6e09a..6a592893a9 100644
--- a/include/fs.h
+++ b/include/fs.h
@@ -1,6 +1,12 @@
#ifndef __FS_H
#define __FS_H
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <dirent.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
#include <driver.h>
#include <filetype.h>
#include <linux/fs.h>
@@ -11,18 +17,6 @@ struct partition;
struct node_d;
struct stat;
-struct dirent {
- char d_name[256];
-};
-
-typedef struct dir {
- struct device_d *dev;
- struct fs_driver_d *fsdrv;
- struct node_d *node;
- struct dirent d;
- void *priv; /* private data for the fs driver */
-} DIR;
-
typedef struct filep {
struct fs_device_d *fsdev; /* The device this FILE belongs to */
char *path;
@@ -107,46 +101,11 @@ struct fs_device_d {
#define drv_to_fs_driver(d) container_of(d, struct fs_driver_d, drv)
-/*
- * standard posix file functions
- */
-int open(const char *pathname, int flags, ...);
-int creat(const char *pathname, mode_t mode);
-int unlink(const char *pathname);
-int close(int fd);
int flush(int fd);
-int lstat(const char *filename, struct stat *s);
-int stat(const char *filename, struct stat *s);
-int fstat(int fd, struct stat *s);
-ssize_t read(int fd, void *buf, size_t count);
-ssize_t pread(int fd, void *buf, size_t count, loff_t offset);
-int ioctl(int fd, int request, void *buf);
-ssize_t write(int fd, const void *buf, size_t count);
-ssize_t pwrite(int fd, const void *buf, size_t count, loff_t offset);
-
-loff_t lseek(int fildes, loff_t offset, int whence);
-int mkdir (const char *pathname, mode_t mode);
-
-/* Create a directory and its parents */
-int make_directory(const char *pathname);
-int rmdir (const char *pathname);
-
-const char *getcwd(void);
-int chdir(const char *pathname);
-
-DIR *opendir(const char *pathname);
-struct dirent *readdir(DIR *dir);
-int closedir(DIR *dir);
-
-int symlink(const char *pathname, const char *newpath);
-int readlink(const char *path, char *buf, size_t bufsiz);
-
-int mount (const char *device, const char *fsname, const char *path,
- const char *fsoptions);
-int umount(const char *pathname);
int umount_by_cdev(struct cdev *cdev);
/* not-so-standard functions */
+#define ERASE_SIZE_ALL ((loff_t) - 1)
int erase(int fd, loff_t count, loff_t offset);
int protect(int fd, size_t count, loff_t offset, int prot);
int protect_file(const char *file, int prot);
@@ -182,8 +141,6 @@ void automount_remove(const char *_path);
int automount_add(const char *path, const char *cmd);
void automount_print(void);
-int unlink_recursive(const char *path, char **failedpath);
-
int fsdev_open_cdev(struct fs_device_d *fsdev);
const char *cdev_get_mount_path(struct cdev *cdev);
const char *cdev_mount_default(struct cdev *cdev, const char *fsoptions);
diff --git a/include/globalvar.h b/include/globalvar.h
index e77209bd79..d0c79c07a8 100644
--- a/include/globalvar.h
+++ b/include/globalvar.h
@@ -14,6 +14,7 @@ int globalvar_add(const char *name,
int (*set)(struct device_d *dev, struct param_d *p, const char *val),
const char *(*get)(struct device_d *, struct param_d *p),
unsigned long flags);
+void globalvar_remove(const char *name);
char *globalvar_get_match(const char *match, const char *separator);
void globalvar_set_match(const char *match, const char *val);
diff --git a/include/libfile.h b/include/libfile.h
index d5b914a47a..de4f42dbd1 100644
--- a/include/libfile.h
+++ b/include/libfile.h
@@ -19,4 +19,11 @@ int copy_recursive(const char *src, const char *dst);
int compare_file(const char *f1, const char *f2);
+int open_and_lseek(const char *filename, int mode, loff_t pos);
+
+/* Create a directory and its parents */
+int make_directory(const char *pathname);
+
+int unlink_recursive(const char *path, char **failedpath);
+
#endif /* __LIBFILE_H */
diff --git a/include/mtd/utils.h b/include/mtd/utils.h
index fca64abd9d..58f89df90c 100644
--- a/include/mtd/utils.h
+++ b/include/mtd/utils.h
@@ -41,7 +41,7 @@
#define sys_errmsg errmsg
#define warnmsg(fmt, ...) do { \
- fprintf(stderr, "%s: warning!: " fmt "\n", PROGRAM_NAME, ##__VA_ARGS__); \
+ eprintf("%s: warning!: " fmt "\n", PROGRAM_NAME, ##__VA_ARGS__); \
} while(0)
#endif /* INCLUDE_MTD_UTILS_H */
diff --git a/include/net/davinci_emac.h b/include/platform_data/eth-davinci-emac.h
index caead1fecf..caead1fecf 100644
--- a/include/net/davinci_emac.h
+++ b/include/platform_data/eth-davinci-emac.h
diff --git a/include/net/designware.h b/include/platform_data/eth-designware.h
index 7a7a26abfd..7a7a26abfd 100644
--- a/include/net/designware.h
+++ b/include/platform_data/eth-designware.h
diff --git a/include/dm9000.h b/include/platform_data/eth-dm9000.h
index a9a4635d2a..a9a4635d2a 100644
--- a/include/dm9000.h
+++ b/include/platform_data/eth-dm9000.h
diff --git a/include/net/ep93xx_eth.h b/include/platform_data/eth-ep93xx.h
index 0fb11d0acd..0fb11d0acd 100644
--- a/include/net/ep93xx_eth.h
+++ b/include/platform_data/eth-ep93xx.h
diff --git a/include/fec.h b/include/platform_data/eth-fec.h
index 699761a998..699761a998 100644
--- a/include/fec.h
+++ b/include/platform_data/eth-fec.h
diff --git a/include/net/smc91111.h b/include/platform_data/eth-smc91111.h
index 72193bf972..72193bf972 100644
--- a/include/net/smc91111.h
+++ b/include/platform_data/eth-smc91111.h
diff --git a/include/smc911x.h b/include/platform_data/eth-smc911x.h
index 4a802ee52c..4a802ee52c 100644
--- a/include/smc911x.h
+++ b/include/platform_data/eth-smc911x.h
diff --git a/include/platform_ide.h b/include/platform_data/ide.h
index f71fbfbc01..f71fbfbc01 100644
--- a/include/platform_ide.h
+++ b/include/platform_data/ide.h
diff --git a/include/ns16550.h b/include/platform_data/serial-ns16550.h
index ccf950b077..ccf950b077 100644
--- a/include/ns16550.h
+++ b/include/platform_data/serial-ns16550.h
diff --git a/include/shell.h b/include/shell.h
index b98cac3dc5..65dad0e1d1 100644
--- a/include/shell.h
+++ b/include/shell.h
@@ -9,4 +9,15 @@
int shell_get_last_return_code(void);
+int run_shell(void);
+
+#ifdef CONFIG_SHELL_HUSH
+char *shell_expand(char *str);
+#else
+static inline char *shell_expand(char *str)
+{
+ return strdup(str);
+}
+#endif
+
#endif /* __SHELL_H__ */
diff --git a/include/stdio.h b/include/stdio.h
index d0817bd071..7b2a42b817 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -9,28 +9,30 @@
*/
/* serial stuff */
-void serial_printf(const char *fmt, ...) __attribute__ ((format(__printf__, 1, 2)));
-
-int sprintf(char *buf, const char *fmt, ...) __attribute__ ((format(__printf__, 2, 3)));
-int snprintf(char *buf, size_t size, const char *fmt, ...) __attribute__ ((format(__printf__, 3, 4)));
-int scnprintf(char *buf, size_t size, const char *fmt, ...) __attribute__ ((format(__printf__, 3, 4)));
-int vsprintf(char *buf, const char *fmt, va_list args);
-char *asprintf(const char *fmt, ...) __attribute__ ((format(__printf__, 1, 2)));
-char *vasprintf(const char *fmt, va_list ap);
-int vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
-int vscnprintf(char *buf, size_t size, const char *fmt, va_list args);
+void serial_printf(const char *fmt, ...) __attribute__ ((format(__printf__, 1, 2)));
+
+int sprintf(char *buf, const char *fmt, ...) __attribute__ ((format(__printf__, 2, 3)));
+int snprintf(char *buf, size_t size, const char *fmt, ...) __attribute__ ((format(__printf__, 3, 4)));
+int scnprintf(char *buf, size_t size, const char *fmt, ...) __attribute__ ((format(__printf__, 3, 4)));
+int vsprintf(char *buf, const char *fmt, va_list args);
+char *basprintf(const char *fmt, ...) __attribute__ ((format(__printf__, 1, 2)));
+int asprintf(char **strp, const char *fmt, ...) __attribute__ ((format(__printf__, 2, 3)));
+char *bvasprintf(const char *fmt, va_list ap);
+int vasprintf(char **strp, const char *fmt, va_list ap);
+int vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
+int vscnprintf(char *buf, size_t size, const char *fmt, va_list args);
#ifndef CONFIG_CONSOLE_NONE
/* stdin */
-int tstc(void);
+int tstc(void);
/* stdout */
-void console_putc(unsigned int ch, const char c);
-int getc(void);
-int console_puts(unsigned int ch, const char *s);
-void console_flush(void);
+void console_putc(unsigned int ch, const char c);
+int getchar(void);
+int console_puts(unsigned int ch, const char *s);
+void console_flush(void);
-int vprintf(const char *fmt, va_list args);
+int vprintf(const char *fmt, va_list args);
#else
static inline int tstc(void)
{
@@ -42,7 +44,7 @@ static inline int console_puts(unsigned int ch, const char *str)
return 0;
}
-static inline int getc(void)
+static inline int getchar(void)
{
return -EINVAL;
}
@@ -87,23 +89,20 @@ static inline void putchar(char c)
console_putc(CONSOLE_STDOUT, c);
}
-/* stderr */
-#define eputc(c) console_putc(CONSOLE_STDERR, c)
-#define eputs(s) console_puts(CONSOLE_STDERR, s)
-#define eprintf(fmt,args...) fprintf(stderr,fmt ,##args)
-
/*
* FILE based functions
*/
-#define stdin 0
-#define stdout 1
-#define stderr 2
+/* stderr */
+#define eprintf(fmt,args...) dprintf(STDERR_FILENO, fmt ,##args)
+
+#define STDIN_FILENO 0
+#define STDOUT_FILENO 1
+#define STDERR_FILENO 2
#define MAX_FILES 128
-int fprintf(int file, const char *fmt, ...) __attribute__ ((format(__printf__, 2, 3)));
-int fputs(int file, const char *s);
-int fputc(int file, const char c);
-int fgetc(int file);
+int dprintf(int file, const char *fmt, ...) __attribute__ ((format(__printf__, 2, 3)));
+int dputs(int file, const char *s);
+int dputc(int file, const char c);
#endif /* __STDIO_H */
diff --git a/include/string.h b/include/string.h
index a833da131b..0c557d6f15 100644
--- a/include/string.h
+++ b/include/string.h
@@ -4,5 +4,6 @@
#include <linux/string.h>
void *memdup(const void *, size_t);
+int strtobool(const char *str, int *val);
#endif /* __STRING_H */
diff --git a/include/sys/ioctl.h b/include/sys/ioctl.h
new file mode 100644
index 0000000000..6d6d3f5c00
--- /dev/null
+++ b/include/sys/ioctl.h
@@ -0,0 +1,6 @@
+#ifndef __SYS_IOCTL_H
+#define __SYS_IOCTL_H
+
+int ioctl(int fd, int request, void *buf);
+
+#endif /* __SYS_IOCTL_H */
diff --git a/include/sys/mount.h b/include/sys/mount.h
new file mode 100644
index 0000000000..978f3406e8
--- /dev/null
+++ b/include/sys/mount.h
@@ -0,0 +1,8 @@
+#ifndef __SYS_MOUNT_H
+#define __SYS_MOUNT_H
+
+int mount(const char *device, const char *fsname, const char *path,
+ const char *fsoptions);
+int umount(const char *pathname);
+
+#endif /* __SYS_MOUNT_H */
diff --git a/include/sys/stat.h b/include/sys/stat.h
new file mode 100644
index 0000000000..037e5f136d
--- /dev/null
+++ b/include/sys/stat.h
@@ -0,0 +1,9 @@
+#ifndef __STAT_H
+#define __STAT_H
+
+#include <linux/types.h>
+#include <linux/stat.h>
+
+int mkdir (const char *pathname, mode_t mode);
+
+#endif /* __STAT_H */
diff --git a/include/unistd.h b/include/unistd.h
new file mode 100644
index 0000000000..31f430a5b6
--- /dev/null
+++ b/include/unistd.h
@@ -0,0 +1,24 @@
+#ifndef __UNISTD_H
+#define __UNISTD_H
+
+#include <linux/types.h>
+
+struct stat;
+
+int unlink(const char *pathname);
+int close(int fd);
+int lstat(const char *filename, struct stat *s);
+int stat(const char *filename, struct stat *s);
+int fstat(int fd, struct stat *s);
+ssize_t read(int fd, void *buf, size_t count);
+ssize_t pread(int fd, void *buf, size_t count, loff_t offset);
+ssize_t write(int fd, const void *buf, size_t count);
+ssize_t pwrite(int fd, const void *buf, size_t count, loff_t offset);
+loff_t lseek(int fildes, loff_t offset, int whence);
+int rmdir (const char *pathname);
+int symlink(const char *pathname, const char *newpath);
+int readlink(const char *path, char *buf, size_t bufsiz);
+int chdir(const char *pathname);
+const char *getcwd(void);
+
+#endif /* __UNISTD_H */
diff --git a/include/w1_mac_address.h b/include/w1_mac_address.h
index 89dd914095..cd4be765f7 100644
--- a/include/w1_mac_address.h
+++ b/include/w1_mac_address.h
@@ -33,7 +33,7 @@ static inline int w1_local_mac_address_register(int ethid, char * oui, char *w1_
addr[i] = oui[i];
}
- tmp = asprintf("%s.id", w1_dev);
+ tmp = basprintf("%s.id", w1_dev);
if (!tmp)
return -ENOMEM;
diff --git a/lib/libfile.c b/lib/libfile.c
index a27460c10d..62e9b8ed22 100644
--- a/lib/libfile.c
+++ b/lib/libfile.c
@@ -91,7 +91,7 @@ char *read_file_line(const char *fmt, ...)
struct stat s;
va_start(args, fmt);
- filename = vasprintf(fmt, args);
+ filename = bvasprintf(fmt, args);
va_end(args);
ret = stat(filename, &s);
@@ -359,8 +359,8 @@ int copy_recursive(const char *src, const char *dst)
if (!strcmp(d->d_name, ".") || !strcmp(d->d_name, ".."))
continue;
- from = asprintf("%s/%s", src, d->d_name);
- to = asprintf("%s/%s", dst, d->d_name);
+ from = basprintf("%s/%s", src, d->d_name);
+ to = basprintf("%s/%s", dst, d->d_name);
ret = copy_recursive(from, to);
if (ret)
break;
@@ -442,3 +442,35 @@ err_out1:
close(fd1);
return ret;
}
+
+/**
+ * open_and_lseek - open file and lseek to position
+ * @filename: The file to open
+ * @mode: The file open mode
+ * @pos: The position to lseek to
+ *
+ * Return: If successful this function returns a positive filedescriptor
+ * number, otherwise a negative error code is returned
+ */
+int open_and_lseek(const char *filename, int mode, loff_t pos)
+{
+ int fd, ret;
+
+ fd = open(filename, mode | O_RDONLY);
+ if (fd < 0) {
+ perror("open");
+ return fd;
+ }
+
+ if (!pos)
+ return fd;
+
+ ret = lseek(fd, pos, SEEK_SET);
+ if (ret == -1) {
+ perror("lseek");
+ close(fd);
+ return -errno;
+ }
+
+ return fd;
+}
diff --git a/lib/logo/logo.c b/lib/logo/logo.c
index 614d8c0908..9edf212232 100644
--- a/lib/logo/logo.c
+++ b/lib/logo/logo.c
@@ -36,7 +36,7 @@ static void load_logo(int width, void *start, void *end)
char *filename;
size_t size = end - start;
- filename = asprintf("/logo/barebox-logo-%d.png", width);
+ filename = basprintf("/logo/barebox-logo-%d.png", width);
write_file(filename, start, size);
free(filename);
}
diff --git a/lib/make_directory.c b/lib/make_directory.c
index 7432efc192..29d08cf536 100644
--- a/lib/make_directory.c
+++ b/lib/make_directory.c
@@ -3,6 +3,7 @@
#include <errno.h>
#ifdef __BAREBOX__
#include <fs.h>
+#include <libfile.h>
#include <malloc.h>
#include <common.h>
#define STATIC
diff --git a/lib/parameter.c b/lib/parameter.c
index fd05b49adf..3d356fb972 100644
--- a/lib/parameter.c
+++ b/lib/parameter.c
@@ -27,6 +27,7 @@
#include <net.h>
#include <malloc.h>
#include <driver.h>
+#include <string.h>
#include <linux/err.h>
struct param_d *get_param_by_name(struct device_d *dev, const char *name)
@@ -314,10 +315,13 @@ static int param_int_set(struct device_d *dev, struct param_d *p, const char *va
if (!val)
return -EINVAL;
- *pi->value = simple_strtol(val, NULL, 0);
-
- if (pi->flags & PARAM_INT_FLAG_BOOL)
- *pi->value = !!*pi->value;
+ if (pi->flags & PARAM_INT_FLAG_BOOL) {
+ ret = strtobool(val, pi->value);
+ if (ret)
+ return ret;
+ } else {
+ *pi->value = simple_strtol(val, NULL, 0);
+ }
if (!pi->set)
return 0;
@@ -341,7 +345,7 @@ static const char *param_int_get(struct device_d *dev, struct param_d *p)
}
free(p->value);
- p->value = asprintf(pi->format, *pi->value);
+ p->value = basprintf(pi->format, *pi->value);
return p->value;
}
@@ -443,7 +447,7 @@ static const char *param_enum_get(struct device_d *dev, struct param_d *p)
free(p->value);
if (*pe->value >= pe->num_names)
- p->value = asprintf("invalid:%d", *pe->value);
+ p->value = basprintf("invalid:%d", *pe->value);
else
p->value = strdup(pe->names[*pe->value]);
@@ -556,7 +560,7 @@ struct param_d *dev_add_param_int_ro(struct device_d *dev, const char *name,
return ERR_PTR(ret);
}
- piro->param.value = asprintf(format, value);
+ piro->param.value = basprintf(format, value);
return &piro->param;
}
@@ -582,7 +586,7 @@ struct param_d *dev_add_param_llint_ro(struct device_d *dev, const char *name,
return ERR_PTR(ret);
}
- piro->param.value = asprintf(format, value);
+ piro->param.value = basprintf(format, value);
return &piro->param;
}
diff --git a/lib/readkey.c b/lib/readkey.c
index 2073a732f4..2870a5a9fe 100644
--- a/lib/readkey.c
+++ b/lib/readkey.c
@@ -53,15 +53,15 @@ int read_key(void)
{
char c;
char esc[5];
- c = getc();
+ c = getchar();
if (c == 27) {
int i = 0;
- esc[i++] = getc();
- esc[i++] = getc();
+ esc[i++] = getchar();
+ esc[i++] = getchar();
if (isdigit(esc[1])) {
while(1) {
- esc[i] = getc();
+ esc[i] = getchar();
if (esc[i++] == '~')
break;
if (i == ARRAY_SIZE(esc))
diff --git a/lib/readline_simple.c b/lib/readline_simple.c
index 1a40d113e3..c2960665fb 100644
--- a/lib/readline_simple.c
+++ b/lib/readline_simple.c
@@ -70,7 +70,7 @@ int readline (const char *prompt, char *line, int len)
show_activity(0);
}
#endif
- c = getc();
+ c = getchar();
/*
* Special character handling
diff --git a/lib/show_progress.c b/lib/show_progress.c
index f9aa1a945e..a32a13c16d 100644
--- a/lib/show_progress.c
+++ b/lib/show_progress.c
@@ -21,7 +21,6 @@
#include <fs.h>
#include <progress.h>
#include <asm-generic/div64.h>
-#include <linux/stringify.h>
#define HASHES_PER_LINE 65
@@ -58,7 +57,7 @@ void init_progression_bar(int max)
progress_max = max;
spin = 0;
if (progress_max && progress_max != FILESIZE_MAX)
- printf("\t[%"__stringify(HASHES_PER_LINE)"s]\r\t[", "");
+ printf("\t[%*s]\r\t[", HASHES_PER_LINE, "");
else
printf("\t");
}
diff --git a/lib/string.c b/lib/string.c
index 6a39eb5ced..a3e9fd819b 100644
--- a/lib/string.c
+++ b/lib/string.c
@@ -739,3 +739,46 @@ void *memdup(const void *orig, size_t size)
return buf;
}
EXPORT_SYMBOL(memdup);
+
+/**
+ * strtobool - convert a string to a boolean value
+ * @str - The string
+ * @val - The boolean value returned.
+ *
+ * This function treats
+ * - any positive (nonzero) number as true
+ * - "0" as false
+ * - "true" (case insensitive) as true
+ * - "false" (case insensitive) as false
+ *
+ * Every other value results in an error and the @val is not
+ * modified. The caller is expected to initialize @val with the
+ * correct default before calling strtobool.
+ *
+ * Returns 0 for success or negative error code if the variable does
+ * not exist or contains something this function does not recognize
+ * as true or false.
+ */
+int strtobool(const char *str, int *val)
+{
+ if (!str || !*str)
+ return -EINVAL;
+
+ if (simple_strtoul(str, NULL, 0) > 0) {
+ *val = true;
+ return 0;
+ }
+
+ if (!strcmp(str, "0") || !strcasecmp(str, "false")) {
+ *val = false;
+ return 0;
+ }
+
+ if (!strcasecmp(str, "true")) {
+ *val = true;
+ return 0;
+ }
+
+ return -EINVAL;
+}
+EXPORT_SYMBOL(strtobool);
diff --git a/lib/stringlist.c b/lib/stringlist.c
index 8a18366a96..8e92c1b207 100644
--- a/lib/stringlist.c
+++ b/lib/stringlist.c
@@ -34,7 +34,7 @@ int string_list_add_asprintf(struct string_list *sl, const char *fmt, ...)
va_start(args, fmt);
- new->str = vasprintf(fmt, args);
+ new->str = bvasprintf(fmt, args);
va_end(args);
diff --git a/lib/uncompress.c b/lib/uncompress.c
index 329c9fc366..3e4bc5f9e5 100644
--- a/lib/uncompress.c
+++ b/lib/uncompress.c
@@ -125,7 +125,8 @@ int uncompress(unsigned char *inbuf, int len,
break;
#endif
default:
- err = asprintf("cannot handle filetype %s", file_type_to_string(ft));
+ err = basprintf("cannot handle filetype %s",
+ file_type_to_string(ft));
error_fn(err);
free(err);
ret = -ENOSYS;
diff --git a/lib/unlink-recursive.c b/lib/unlink-recursive.c
index 78dc01593d..434fdc791b 100644
--- a/lib/unlink-recursive.c
+++ b/lib/unlink-recursive.c
@@ -1,4 +1,5 @@
#include <common.h>
+#include <libfile.h>
#include <errno.h>
#include <libbb.h>
#include <fs.h>
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 00b8863957..1122a4ad38 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -646,12 +646,11 @@ int scnprintf(char *buf, size_t size, const char *fmt, ...)
}
EXPORT_SYMBOL(scnprintf);
-/* Simplified asprintf. */
-char *vasprintf(const char *fmt, va_list ap)
+int vasprintf(char **strp, const char *fmt, va_list ap)
{
unsigned int len;
- char *p;
va_list aq;
+ char *p;
va_copy(aq, ap);
len = vsnprintf(NULL, 0, fmt, aq);
@@ -659,23 +658,56 @@ char *vasprintf(const char *fmt, va_list ap)
p = malloc(len + 1);
if (!p)
- return NULL;
+ return -1;
vsnprintf(p, len + 1, fmt, ap);
- return p;
+ *strp = p;
+
+ return len;
}
EXPORT_SYMBOL(vasprintf);
-char *asprintf(const char *fmt, ...)
+char *bvasprintf(const char *fmt, va_list ap)
+{
+ char *p;
+ int len;
+
+ len = vasprintf(&p, fmt, ap);
+ if (len < 0)
+ return NULL;
+
+ return p;
+}
+EXPORT_SYMBOL(bvasprintf);
+
+int asprintf(char **strp, const char *fmt, ...)
{
va_list ap;
char *p;
+ int len;
va_start(ap, fmt);
- p = vasprintf(fmt, ap);
+ len = vasprintf(&p, fmt, ap);
va_end(ap);
- return p;
+ return len;
}
EXPORT_SYMBOL(asprintf);
+
+char *basprintf(const char *fmt, ...)
+{
+ va_list ap;
+ char *p;
+ int len;
+
+ va_start(ap, fmt);
+ len = vasprintf(&p, fmt, ap);
+ va_end(ap);
+
+ if (len < 0)
+ return NULL;
+
+ return p;
+}
+EXPORT_SYMBOL(basprintf);
diff --git a/lib/xfuncs.c b/lib/xfuncs.c
index 152081c662..aaf0788544 100644
--- a/lib/xfuncs.c
+++ b/lib/xfuncs.c
@@ -109,7 +109,7 @@ char *xvasprintf(const char *fmt, va_list ap)
{
char *p;
- p = vasprintf(fmt, ap);
+ p = bvasprintf(fmt, ap);
if (!p)
panic("ERROR: out of memory\n");
return p;
diff --git a/net/dhcp.c b/net/dhcp.c
index 4433b442db..792ece491b 100644
--- a/net/dhcp.c
+++ b/net/dhcp.c
@@ -83,7 +83,7 @@ static char dhcp_tftpname[256];
static const char* dhcp_get_barebox_global(const char * var)
{
- char * var_global = asprintf("global.dhcp.%s", var);
+ char * var_global = basprintf("global.dhcp.%s", var);
const char *val;
if (!var_global)
@@ -96,7 +96,7 @@ static const char* dhcp_get_barebox_global(const char * var)
static int dhcp_set_barebox_global(const char * var, char *val)
{
- char * var_global = asprintf("global.dhcp.%s", var);
+ char * var_global = basprintf("global.dhcp.%s", var);
int ret;
if (!var_global)
@@ -717,7 +717,7 @@ out:
#ifdef CONFIG_GLOBALVAR
static void dhcp_global_add(const char *var)
{
- char *var_global = asprintf("dhcp.%s", var);
+ char *var_global = basprintf("dhcp.%s", var);
if (!var_global)
return;
diff --git a/net/dns.c b/net/dns.c
index 5488e9f7b8..2acdb935ed 100644
--- a/net/dns.c
+++ b/net/dns.c
@@ -80,9 +80,9 @@ static int dns_send(const char *name)
domain = getenv("net.domainname");
if (!strchr(name, '.') && domain && *domain)
- fullname = asprintf(".%s.%s.", name, domain);
+ fullname = basprintf(".%s.%s.", name, domain);
else
- fullname = asprintf(".%s.", name);
+ fullname = basprintf(".%s.", name);
/* replace dots in fullname with chunk len */
dotptr = fullname;
diff --git a/net/ifup.c b/net/ifup.c
index adab683e96..f22afc9a53 100644
--- a/net/ifup.c
+++ b/net/ifup.c
@@ -67,8 +67,8 @@ int ifup(const char *name, unsigned flags)
for (i = 0; i < ARRAY_SIZE(vars); i++)
setenv(vars[i], "");
- cmd = asprintf("source /env/network/%s", name);
- cmd_discover = asprintf("/env/network/%s-discover", name);
+ cmd = basprintf("source /env/network/%s", name);
+ cmd_discover = basprintf("/env/network/%s-discover", name);
ret = run_command(cmd);
if (ret) {
diff --git a/scripts/bareboximd.c b/scripts/bareboximd.c
index d4da681eca..7d4cbeb9a8 100644
--- a/scripts/bareboximd.c
+++ b/scripts/bareboximd.c
@@ -37,6 +37,8 @@
#include "../include/image-metadata.h"
+#define eprintf(args...) fprintf(stderr, ## args)
+
static void debug(const char *fmt, ...)
{
va_list ap;
diff --git a/scripts/imx/README b/scripts/imx/README
index 0d6d0d03a8..474b387cfc 100644
--- a/scripts/imx/README
+++ b/scripts/imx/README
@@ -30,6 +30,8 @@ check <width> <cond> <addr> <mask> Poll until condition becomes true.
while_all_bits_set,
while_any_bit_clear,
while_any_bit_set
+set_bits <width> <addr> <bits> set <bits> in register <addr>
+clear_bits <width> <addr> <bits> clear <bits> in register <addr>
the i.MX SoCs support a wide range of fancy things doing with the flash header.
We limit ourselves to a very simple case, that is the flash header has a fixed
diff --git a/scripts/imx/imx-image.c b/scripts/imx/imx-image.c
index 16f086af31..0d315a2668 100644
--- a/scripts/imx/imx-image.c
+++ b/scripts/imx/imx-image.c
@@ -252,8 +252,13 @@ static int add_header_v1(struct config_data *data, void *buf)
return 0;
}
-static int write_mem_v1(uint32_t addr, uint32_t val, int width)
+static int write_mem_v1(uint32_t addr, uint32_t val, int width, int set_bits, int clear_bits)
{
+ if (set_bits || clear_bits) {
+ fprintf(stderr, "This SoC does not support setting/clearing bits\n");
+ return -EINVAL;
+ }
+
if (curdcd > MAX_DCD - 3) {
fprintf(stderr, "At maximum %d dcd entried are allowed\n", MAX_DCD);
return -ENOMEM;
@@ -362,12 +367,20 @@ static void check_last_dcd(uint32_t cmd)
}
}
-static int write_mem_v2(uint32_t addr, uint32_t val, int width)
+static int write_mem_v2(uint32_t addr, uint32_t val, int width, int set_bits, int clear_bits)
{
uint32_t cmd;
cmd = (TAG_WRITE << 24) | width;
+ if (set_bits && clear_bits)
+ return -EINVAL;
+
+ if (set_bits)
+ cmd |= 3 << 3;
+ if (clear_bits)
+ cmd |= 2 << 3;
+
if (curdcd > MAX_DCD - 3) {
fprintf(stderr, "At maximum %d dcd entried are allowed\n", MAX_DCD);
return -ENOMEM;
@@ -449,13 +462,14 @@ static int check(struct config_data *data, uint32_t cmd, uint32_t addr, uint32_t
return 0;
}
-static int write_mem(struct config_data *data, uint32_t addr, uint32_t val, int width)
+static int write_mem(struct config_data *data, uint32_t addr, uint32_t val, int width,
+ int set_bits, int clear_bits)
{
switch (data->header_version) {
case 1:
- return write_mem_v1(addr, val, width);
+ return write_mem_v1(addr, val, width, set_bits, clear_bits);
case 2:
- return write_mem_v2(addr, val, width);
+ return write_mem_v2(addr, val, width, set_bits, clear_bits);
default:
return -EINVAL;
}
diff --git a/scripts/imx/imx-usb-loader.c b/scripts/imx/imx-usb-loader.c
index ed27831386..cf9d610823 100644
--- a/scripts/imx/imx-usb-loader.c
+++ b/scripts/imx/imx-usb-loader.c
@@ -412,7 +412,7 @@ int do_status(void)
#define V(a) (((a) >> 24) & 0xff), (((a) >> 16) & 0xff), (((a) >> 8) & 0xff), ((a) & 0xff)
-static int read_memory(unsigned addr, unsigned char *dest, unsigned cnt)
+static int read_memory(unsigned addr, void *dest, unsigned cnt)
{
static unsigned char read_reg_command[] = {
1,
@@ -506,6 +506,9 @@ static int write_memory(unsigned addr, unsigned val, int width)
write_reg_command[4] = (unsigned char)(addr >> 8);
write_reg_command[5] = (unsigned char)(addr);
+ if (verbose > 1)
+ printf("write memory reg: 0x%08x val: 0x%08x width: %d\n", addr, val, width);
+
switch (width) {
case 1:
ds = 0x8;
@@ -556,6 +559,31 @@ static int write_memory(unsigned addr, unsigned val, int width)
return err;
}
+static int modify_memory(unsigned addr, unsigned val, int width, int set_bits, int clear_bits)
+{
+ int err;
+
+ if (set_bits || clear_bits) {
+ uint32_t r;
+
+ err = read_memory(addr, &r, 4);
+ if (err < 0)
+ return err;
+
+ if (verbose > 1)
+ printf("reg 0x%08x val: 0x%08x %s0x%08x\n", addr, r,
+ set_bits ? "|= " : "&= ~", val);
+
+ if (set_bits)
+ r |= val;
+ if (clear_bits)
+ r &= ~val;
+ val = r;
+ }
+
+ return write_memory(addr, val, 4);
+}
+
static int load_file(void *buf, unsigned len, unsigned dladdr, unsigned char type)
{
static unsigned char dl_command[] = {
@@ -682,15 +710,24 @@ static int write_dcd_table_ivt(struct imx_flash_header_v2 *hdr, unsigned char *f
while (dcd < dcd_end) {
unsigned s_length = (dcd[1] << 8) + dcd[2];
unsigned char *s_end = dcd + s_length;
+ int set_bits = 0, clear_bits = 0;
- printf("sub dcd length %x\n", s_length);
+ printf("command: 0x%02x sub dcd length: 0x%04x, flags: 0x%02x\n", dcd[0], s_length, dcd[3]);
- if ((dcd[0] != 0xcc) || (dcd[3] != 0x04)) {
+ if ((dcd[0] != 0xcc)) {
printf("Skipping unknown sub tag 0x%02x with len %04x\n", dcd[0], s_length);
usleep(50000);
dcd += s_length;
continue;
}
+
+ if (dcd[3] & PARAMETER_FLAG_MASK) {
+ if (dcd[3] & PARAMETER_FLAG_SET)
+ set_bits = 1;
+ else
+ clear_bits = 1;
+ }
+
dcd += 4;
if (s_end > dcd_end) {
@@ -703,9 +740,8 @@ static int write_dcd_table_ivt(struct imx_flash_header_v2 *hdr, unsigned char *f
unsigned val = (dcd[4] << 24) | (dcd[5] << 16) | (dcd[6] << 8) | dcd[7];
dcd += 8;
- err = write_memory(addr, val, 4);
- if (err < 0)
- return err;
+
+ modify_memory(addr, val, 4, set_bits, clear_bits);
}
}
return err;
@@ -1203,11 +1239,10 @@ cleanup:
return ret;
}
-static int write_mem(struct config_data *data, uint32_t addr, uint32_t val, int width)
+static int write_mem(struct config_data *data, uint32_t addr, uint32_t val, int width,
+ int set_bits, int clear_bits)
{
- printf("wr 0x%08x 0x%08x\n", addr, val);
-
- return write_memory(addr, val, width);
+ return modify_memory(addr, val, width, set_bits, clear_bits);
}
static int parse_initfile(const char *filename)
diff --git a/scripts/imx/imx.c b/scripts/imx/imx.c
index 82ef97f80c..70936babfd 100644
--- a/scripts/imx/imx.c
+++ b/scripts/imx/imx.c
@@ -130,7 +130,8 @@ static int do_cmd_check(struct config_data *data, int argc, char *argv[])
return data->check(data, cmd, addr, mask);
}
-static int do_cmd_write_mem(struct config_data *data, int argc, char *argv[])
+static int write_mem(struct config_data *data, int argc, char *argv[],
+ int set_bits, int clear_bits)
{
uint32_t addr, val, width;
char *end;
@@ -170,7 +171,22 @@ static int do_cmd_write_mem(struct config_data *data, int argc, char *argv[])
return -EINVAL;
};
- return data->write_mem(data, addr, val, width);
+ return data->write_mem(data, addr, val, width, set_bits, clear_bits);
+}
+
+static int do_cmd_write_mem(struct config_data *data, int argc, char *argv[])
+{
+ return write_mem(data, argc, argv, 0, 0);
+}
+
+static int do_cmd_set_bits(struct config_data *data, int argc, char *argv[])
+{
+ return write_mem(data, argc, argv, 1, 0);
+}
+
+static int do_cmd_clear_bits(struct config_data *data, int argc, char *argv[])
+{
+ return write_mem(data, argc, argv, 0, 1);
}
static int do_loadaddr(struct config_data *data, int argc, char *argv[])
@@ -221,6 +237,10 @@ static int do_soc(struct config_data *data, int argc, char *argv[])
if (!strcmp(socs[i].name, soc)) {
data->header_version = socs[i].header_version;
data->cpu_type = socs[i].cpu_type;
+
+ if (data->cpu_type == 35)
+ data->load_size += HEADER_LEN;
+
return 0;
}
}
@@ -230,9 +250,6 @@ static int do_soc(struct config_data *data, int argc, char *argv[])
fprintf(stderr, "%s ", socs[i].name);
fprintf(stderr, "\n");
- if (data->cpu_type == 35)
- data->load_size += HEADER_LEN;
-
return -EINVAL;
}
@@ -337,6 +354,12 @@ struct command cmds[] = {
.name = "wm",
.parse = do_cmd_write_mem,
}, {
+ .name = "set_bits",
+ .parse = do_cmd_set_bits,
+ }, {
+ .name = "clear_bits",
+ .parse = do_cmd_clear_bits,
+ }, {
.name = "check",
.parse = do_cmd_check,
}, {
diff --git a/scripts/imx/imx.h b/scripts/imx/imx.h
index 85071b4ed3..a1369586a9 100644
--- a/scripts/imx/imx.h
+++ b/scripts/imx/imx.h
@@ -31,6 +31,8 @@ struct imx_boot_data {
#define TAG_DCD_HEADER 0xd2
#define DCD_VERSION 0x40
#define TAG_WRITE 0xcc
+#define PARAMETER_FLAG_MASK (1 << 3)
+#define PARAMETER_FLAG_SET (1 << 4)
#define TAG_CHECK 0xcf
struct imx_ivt_header {
@@ -64,7 +66,8 @@ struct config_data {
int header_version;
int cpu_type;
int (*check)(struct config_data *data, uint32_t cmd, uint32_t addr, uint32_t mask);
- int (*write_mem)(struct config_data *data, uint32_t addr, uint32_t val, int width);
+ int (*write_mem)(struct config_data *data, uint32_t addr, uint32_t val, int width,
+ int set_bits, int clear_bits);
int csf_space;
char *csf;
};