diff options
279 files changed, 2008 insertions, 1339 deletions
diff --git a/Documentation/devicetree/bindings/barebox/barebox,state.rst b/Documentation/devicetree/bindings/barebox/barebox,state.rst index cebb5f8287..872bac061b 100644 --- a/Documentation/devicetree/bindings/barebox/barebox,state.rst +++ b/Documentation/devicetree/bindings/barebox/barebox,state.rst @@ -63,8 +63,8 @@ Optional Properties .. _barebox,state_backend_stridesize: The ``backend-stridesize`` is still optional but required whenever the -underlaying backend doesn't provide an information how to pad an instance of a -*state* variable set. This is valid for all underlaying backends which supports +underlying backend doesn't provide an information how to pad an instance of a +*state* variable set. This is valid for all underlying backends which support writes on a byte-by-byte manner or don't have eraseblocks (EEPROM, SRAM and NOR type flash backends). The ``backend-stridesize`` value is used by the ``direct`` backend storage type diff --git a/Documentation/user/bootchooser.rst b/Documentation/user/bootchooser.rst index 3d473b5969..9a75afbf5e 100644 --- a/Documentation/user/bootchooser.rst +++ b/Documentation/user/bootchooser.rst @@ -353,7 +353,7 @@ node. It then looks like: It could makes sense to store the result of the last *bootchooser* operation in the *state* variable set as well. In order to do so, add a node with the name ``last_chosen`` to the *state* variable set. *bootchooser* will use it if present. -The *state' variable set definition then looks like: +The *state* variable set definition then looks like: .. code-block:: text diff --git a/Documentation/user/usb.rst b/Documentation/user/usb.rst index ec219cfbe4..8396f3897c 100644 --- a/Documentation/user/usb.rst +++ b/Documentation/user/usb.rst @@ -35,6 +35,43 @@ command, they show up as ``/dev/diskx`` and can be used like any other device. USB device support ------------------ +barebox supports several different USB gadget drivers: + +- Device Firmware Upgrade (DFU) +- Android Fastboot +- serial gadget + +The recommended way to use USB gadget is with the :ref:`command_usbgadget` command. +While there are individual commands for :ref:`command_dfu` and :ref:`command_usbserial`, +the :ref:`command_usbgadget` commands supports registering composite gadgets. + +Partition description +^^^^^^^^^^^^^^^^^^^^^ + +The USB gadget commands for Android Fastboot and DFU take a partition description +which describes which barebox partitions are exported via USB. The partition +description is referred to as ``<desc>`` in the command help texts. It has +the general form ``partition(name)flags,partition(name)flags,...``. + +The **partition** field is the partition as accessible in barebox. This can be a +path in ``/dev/``, but could also be a regular file. + +The **name** field is the name under which the partition shall be exported. This +is the name under which the partition can be found with the host tool. + +Several **flags** are supported, each denoted by a single character: + +* ``s`` Safe mode. The file is downloaded completely before it is written (DFU specific) +* ``r`` Readback. The partition is allowed to be read back (DFU specific) +* ``c`` The file shall be created if it doesn't exist. Needed when a regular file is exported. +* ``u`` The partition is a MTD device and shall be flashed with a UBI image. + +Example: + +.. code-block:: sh + + /dev/nand0.barebox.bb(barebox)sr,/kernel(kernel)rc + DFU ^^^ @@ -43,16 +80,8 @@ Implementers Forum. It provides a vendor-independent way to update the firmware devices. The current specification is version 1.1 and can be downloaded here: http://www.usb.org/developers/devclass_docs/DFU_1.1.pdf -On the barebox side, the update is handled with the :ref:`command_dfu` command. -It is passed a list of partitions to provide to the host. The partition list -has the form ``<file>(<name>)<flags>``. ``file`` is the path to the device or -regular file which shall be updated. ``name`` is the name under which the partition -shall be provided to the host. For the possible ``flags`` see -:ref:`command_dfu`. A typical ``dfu`` command could look like this: - -.. code-block:: sh - - dfu "/dev/nand0.barebox.bb(barebox)sr,/dev/nand0.kernel.bb(kernel)r,/dev/nand0.root.bb(root)r" +On the barebox side, the update is handled with the :ref:`command_usbgadget` or the +:ref:`command_dfu` command. On the host side, the tool `dfu-util <http://dfu-util.gnumonks.org/>`_ can be used to update the partitions. It is available for most distributions and typically @@ -1,5 +1,5 @@ -VERSION = 2017 -PATCHLEVEL = 12 +VERSION = 2018 +PATCHLEVEL = 01 SUBLEVEL = 0 EXTRAVERSION = NAME = None diff --git a/arch/arm/boards/Makefile b/arch/arm/boards/Makefile index 456e6fea4b..ca187ccb89 100644 --- a/arch/arm/boards/Makefile +++ b/arch/arm/boards/Makefile @@ -67,7 +67,6 @@ obj-$(CONFIG_MACH_MAINSTONE) += mainstone/ obj-$(CONFIG_MACH_MARVELL_ARMADA_XP_GP) += marvell-armada-xp-gp/ obj-$(CONFIG_MACH_MB7707) += module-mb7707/ obj-$(CONFIG_MACH_MIOA701) += mioa701/ -obj-$(CONFIG_MACH_MMCCPU) += mmccpu/ obj-$(CONFIG_MACH_MX23EVK) += freescale-mx23-evk/ obj-$(CONFIG_MACH_MX28EVK) += freescale-mx28-evk/ obj-$(CONFIG_MACH_MX31MOBOARD) += mx31moboard/ diff --git a/arch/arm/boards/animeo_ip/Makefile b/arch/arm/boards/animeo_ip/Makefile index 510b142ff3..61c714b45d 100644 --- a/arch/arm/boards/animeo_ip/Makefile +++ b/arch/arm/boards/animeo_ip/Makefile @@ -1,2 +1,5 @@ obj-y += init.o + +lwl-y += lowlevel.o + bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-animeo_ip diff --git a/arch/arm/boards/animeo_ip/lowlevel.c b/arch/arm/boards/animeo_ip/lowlevel.c new file mode 100644 index 0000000000..b16ef31bf0 --- /dev/null +++ b/arch/arm/boards/animeo_ip/lowlevel.c @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> + * + * Under GPLv2 + */ + +#include <common.h> +#include <init.h> + +#include <asm/barebox-arm-head.h> +#include <asm/barebox-arm.h> + +#include <mach/at91sam9_sdramc.h> +#include <mach/at91sam9260.h> +#include <mach/hardware.h> + +void __naked __bare_init barebox_arm_reset_vector(void) +{ + arm_cpu_lowlevel_init(); + + arm_setup_stack(AT91SAM9260_SRAM_BASE + AT91SAM9260_SRAM_SIZE - 16); + + barebox_arm_entry(AT91_CHIPSELECT_1, + at91_get_sdram_size(IOMEM(AT91SAM9260_BASE_SDRAMC)), + NULL); +} diff --git a/arch/arm/boards/at91rm9200ek/Makefile b/arch/arm/boards/at91rm9200ek/Makefile index dec1c50455..a07c06a6d9 100644 --- a/arch/arm/boards/at91rm9200ek/Makefile +++ b/arch/arm/boards/at91rm9200ek/Makefile @@ -1,2 +1,5 @@ obj-y += init.o + +lwl-y += lowlevel.o + bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-at91rm9200ek diff --git a/arch/arm/mach-at91/at91rm9200_lowlevel_init.c b/arch/arm/boards/at91rm9200ek/lowlevel.c index f78e368086..a85a22e797 100644 --- a/arch/arm/mach-at91/at91rm9200_lowlevel_init.c +++ b/arch/arm/boards/at91rm9200ek/lowlevel.c @@ -4,19 +4,17 @@ * Under GPLv2 */ -#define __LOWLEVEL_INIT__ - #include <common.h> -#include <asm/system.h> -#include <asm/barebox-arm.h> +#include <init.h> + #include <asm/barebox-arm-head.h> -#include <mach/hardware.h> -#include <mach/at91rm9200.h> +#include <asm/barebox-arm.h> + #include <mach/at91rm9200_mc.h> +#include <mach/at91rm9200.h> #include <mach/at91_pio.h> #include <mach/at91_pmc.h> -#include <mach/io.h> -#include <init.h> +#include <mach/hardware.h> void static inline access_sdram(void) { diff --git a/arch/arm/boards/at91sam9260ek/Makefile b/arch/arm/boards/at91sam9260ek/Makefile index 6e07f189fa..9cc933a287 100644 --- a/arch/arm/boards/at91sam9260ek/Makefile +++ b/arch/arm/boards/at91sam9260ek/Makefile @@ -1,2 +1,5 @@ obj-y += init.o + +lwl-y += lowlevel.o + bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-at91sam9260ek diff --git a/arch/arm/boards/at91sam9260ek/lowlevel.c b/arch/arm/boards/at91sam9260ek/lowlevel.c new file mode 100644 index 0000000000..b16ef31bf0 --- /dev/null +++ b/arch/arm/boards/at91sam9260ek/lowlevel.c @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> + * + * Under GPLv2 + */ + +#include <common.h> +#include <init.h> + +#include <asm/barebox-arm-head.h> +#include <asm/barebox-arm.h> + +#include <mach/at91sam9_sdramc.h> +#include <mach/at91sam9260.h> +#include <mach/hardware.h> + +void __naked __bare_init barebox_arm_reset_vector(void) +{ + arm_cpu_lowlevel_init(); + + arm_setup_stack(AT91SAM9260_SRAM_BASE + AT91SAM9260_SRAM_SIZE - 16); + + barebox_arm_entry(AT91_CHIPSELECT_1, + at91_get_sdram_size(IOMEM(AT91SAM9260_BASE_SDRAMC)), + NULL); +} diff --git a/arch/arm/boards/at91sam9261ek/Makefile b/arch/arm/boards/at91sam9261ek/Makefile index 1764da93f2..e7a9cde419 100644 --- a/arch/arm/boards/at91sam9261ek/Makefile +++ b/arch/arm/boards/at91sam9261ek/Makefile @@ -1,4 +1,4 @@ obj-y += init.o -lwl-$(CONFIG_HAVE_AT91_LOWLEVEL_INIT) += lowlevel_init.o +lwl-y += lowlevel_init.o bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-at91sam9261ek diff --git a/arch/arm/boards/at91sam9261ek/lowlevel_init.c b/arch/arm/boards/at91sam9261ek/lowlevel_init.c index 056584166c..c4e4957ca7 100644 --- a/arch/arm/boards/at91sam9261ek/lowlevel_init.c +++ b/arch/arm/boards/at91sam9261ek/lowlevel_init.c @@ -4,16 +4,10 @@ * Under GPLv2 */ -#include <common.h> -#include <init.h> -#include <mach/hardware.h> -#include <mach/at91_rstc.h> -#include <mach/at91_wdt.h> -#include <mach/at91_pmc.h> -#include <mach/at91sam9_smc.h> -#include <mach/at91sam9_sdramc.h> -#include <mach/at91sam9_matrix.h> -#include <mach/at91_lowlevel_init.h> +#include <asm/barebox-arm.h> + +#include <mach/at91sam926x_board_init.h> +#include <mach/at91sam9261_matrix.h> #define MASTER_CLOCK 200 @@ -25,7 +19,7 @@ #define MASTER_PLL_DIV 1 #endif -void __bare_init at91sam926x_lowlevel_board_config(struct at91sam926x_lowlevel_cfg *cfg) +static void __bare_init at91sam9261ek_board_config(struct at91sam926x_board_cfg *cfg) { /* Disable Watchdog */ cfg->wdt_mr = @@ -106,3 +100,28 @@ void __bare_init at91sam926x_lowlevel_board_config(struct at91sam926x_lowlevel_c AT91_RSTC_RSTTYP_WAKEUP | AT91_RSTC_RSTTYP_WATCHDOG; } + +static void __bare_init at91sam9261ek_init(void) +{ + struct at91sam926x_board_cfg cfg; + + cfg.pio = IOMEM(AT91SAM9261_BASE_PIOC); + cfg.sdramc = IOMEM(AT91SAM9261_BASE_SDRAMC); + cfg.ebi_pio_is_peripha = false; + cfg.matrix_csa = AT91_MATRIX_EBICSA; + + at91sam9261ek_board_config(&cfg); + at91sam926x_board_init(&cfg); + + barebox_arm_entry(AT91_CHIPSELECT_1, at91_get_sdram_size(cfg.sdramc), + NULL); +} + +void __naked __bare_init barebox_arm_reset_vector(void) +{ + arm_cpu_lowlevel_init(); + + arm_setup_stack(AT91SAM9261_SRAM_BASE + AT91SAM9261_SRAM_SIZE - 16); + + at91sam9261ek_init(); +} diff --git a/arch/arm/boards/at91sam9263ek/Makefile b/arch/arm/boards/at91sam9263ek/Makefile index 2072cd4164..7af6fab8e1 100644 --- a/arch/arm/boards/at91sam9263ek/Makefile +++ b/arch/arm/boards/at91sam9263ek/Makefile @@ -1,4 +1,6 @@ -obj-y += init.o +obj-$(CONFIG_AT91_BOOTSTRAP) += init.o +obj-$(CONFIG_OF_DEVICE) += of_init.o + +lwl-y += lowlevel_init.o -lwl-$(CONFIG_HAVE_AT91_LOWLEVEL_INIT) += lowlevel_init.o bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-at91sam9263ek diff --git a/arch/arm/boards/at91sam9263ek/lowlevel_init.c b/arch/arm/boards/at91sam9263ek/lowlevel_init.c index 2f8b312d34..2004d70cbe 100644 --- a/arch/arm/boards/at91sam9263ek/lowlevel_init.c +++ b/arch/arm/boards/at91sam9263ek/lowlevel_init.c @@ -4,21 +4,17 @@ * Under GPLv2 */ -#include <common.h> -#include <init.h> -#include <mach/hardware.h> -#include <mach/at91_rstc.h> -#include <mach/at91_wdt.h> -#include <mach/at91_pmc.h> -#include <mach/at91sam9_smc.h> -#include <mach/at91sam9_sdramc.h> -#include <mach/at91sam9_matrix.h> -#include <mach/at91_lowlevel_init.h> +#include <linux/sizes.h> + +#include <asm/barebox-arm.h> + +#include <mach/at91sam926x_board_init.h> +#include <mach/at91sam9263_matrix.h> #define MASTER_PLL_MUL 171 #define MASTER_PLL_DIV 14 -void __bare_init at91sam926x_lowlevel_board_config(struct at91sam926x_lowlevel_cfg *cfg) +static void __bare_init at91sam9263ek_board_config(struct at91sam926x_board_cfg *cfg) { /* Disable Watchdog */ cfg->wdt_mr = @@ -102,3 +98,37 @@ void __bare_init at91sam926x_lowlevel_board_config(struct at91sam926x_lowlevel_c AT91_RSTC_RSTTYP_WAKEUP | AT91_RSTC_RSTTYP_WATCHDOG; } + +static void __bare_init at91sam9263ek_init(void *fdt) +{ + struct at91sam926x_board_cfg cfg; + + cfg.pio = IOMEM(AT91SAM9263_BASE_PIOD); + cfg.sdramc = IOMEM(AT91SAM9263_BASE_SDRAMC0); + cfg.ebi_pio_is_peripha = true; + cfg.matrix_csa = AT91_MATRIX_EBI0CSA; + + at91sam9263ek_board_config(&cfg); + at91sam926x_board_init(&cfg); + + barebox_arm_entry(AT91_CHIPSELECT_1, at91_get_sdram_size(cfg.sdramc), + fdt); +} + +extern char __dtb_at91sam9263ek_start[]; + +ENTRY_FUNCTION(start_at91sam9263ek, r0, r1, r2) +{ + void *fdt; + + arm_cpu_lowlevel_init(); + + arm_setup_stack(AT91SAM9263_SRAM0_BASE + AT91SAM9263_SRAM0_SIZE - 16); + + if (IS_ENABLED(CONFIG_MACH_AT91SAM9263EK_DT)) + fdt = __dtb_at91sam9263ek_start - get_runtime_offset(); + else + fdt = NULL; + + at91sam9263ek_init(fdt); +} diff --git a/arch/arm/boards/at91sam9263ek/of_init.c b/arch/arm/boards/at91sam9263ek/of_init.c new file mode 100644 index 0000000000..b4d216fa3e --- /dev/null +++ b/arch/arm/boards/at91sam9263ek/of_init.c @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2017 Sam Ravnborg <sam@ravnborg.org> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include <common.h> +#include <envfs.h> +#include <init.h> +#include <gpio.h> + +#include <mach/at91sam9263_matrix.h> +#include <mach/at91sam9_smc.h> +#include <mach/at91_rtt.h> +#include <mach/hardware.h> +#include <mach/iomux.h> +#include <mach/io.h> + +static int add_smc_devices(void) +{ + add_generic_device("at91sam9-smc", 0, NULL, AT91SAM9263_BASE_SMC0, 0x200, + IORESOURCE_MEM, NULL); + add_generic_device("at91sam9-smc", 1, NULL, AT91SAM9263_BASE_SMC1, 0x200, + IORESOURCE_MEM, NULL); + + return 0; +} +coredevice_initcall(add_smc_devices); + +static struct sam9_smc_config ek_nand_smc_config = { + .ncs_read_setup = 0, + .nrd_setup = 1, + .ncs_write_setup = 0, + .nwe_setup = 1, + + .ncs_read_pulse = 3, + .nrd_pulse = 3, + .ncs_write_pulse = 3, + .nwe_pulse = 3, + + .read_cycle = 5, + .write_cycle = 5, + + .mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE, + .tdf_cycles = 2, +}; + +static int at91sam9263_smc_init(void) +{ + unsigned long csa; + + if (!of_machine_is_compatible("atmel,at91sam9263ek")) + return 0; + + /* setup bus-width (8 or 16) */ + if (IS_ENABLED(CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16)) + ek_nand_smc_config.mode |= AT91_SMC_DBW_16; + else + ek_nand_smc_config.mode |= AT91_SMC_DBW_8; + + csa = at91_sys_read(AT91_MATRIX_EBI0CSA); + csa |= AT91_MATRIX_EBI0_CS3A_SMC_SMARTMEDIA; + at91_sys_write(AT91_MATRIX_EBI0CSA, csa); + + /* configure chip-select 3 (NAND) */ + sam9_smc_configure(0, 3, &ek_nand_smc_config); + + return 0; +} +device_initcall(at91sam9263_smc_init); + +static int at91sam9263ek_env_init(void) +{ + if (!of_machine_is_compatible("atmel,at91sam9263ek")) + return 0; + + at91_rtt_irq_fixup(IOMEM(AT91SAM9263_BASE_RTT0)); + at91_rtt_irq_fixup(IOMEM(AT91SAM9263_BASE_RTT1)); + + if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT_GENERIC)) + defaultenv_append_directory(defaultenv_at91sam9263ek); + + return 0; +} +late_initcall(at91sam9263ek_env_init); diff --git a/arch/arm/boards/at91sam9m10g45ek/Makefile b/arch/arm/boards/at91sam9m10g45ek/Makefile index dd8052157e..da011f825b 100644 --- a/arch/arm/boards/at91sam9m10g45ek/Makefile +++ b/arch/arm/boards/at91sam9m10g45ek/Makefile @@ -1,2 +1,5 @@ obj-y += init.o + +lwl-y += lowlevel.o + bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-at91sam9m10g45ek diff --git a/arch/arm/mach-at91/at91sam9g45_lowlevel_init.c b/arch/arm/boards/at91sam9m10g45ek/lowlevel.c index 2cdb7a6a5f..478ff11e1d 100644 --- a/arch/arm/mach-at91/at91sam9g45_lowlevel_init.c +++ b/arch/arm/boards/at91sam9m10g45ek/lowlevel.c @@ -2,19 +2,16 @@ * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> * * Under GPLv2 - */ - -#define __LOWLEVEL_INIT__ + */ #include <common.h> -#include <asm/system.h> -#include <asm/barebox-arm.h> +#include <init.h> + #include <asm/barebox-arm-head.h> +#include <asm/barebox-arm.h> + #include <mach/hardware.h> -#include <mach/io.h> #include <mach/at91sam9_ddrsdr.h> -#include <init.h> -#include <linux/sizes.h> void __naked __bare_init barebox_arm_reset_vector(void) { diff --git a/arch/arm/boards/at91sam9m10ihd/Makefile b/arch/arm/boards/at91sam9m10ihd/Makefile index f2acf201b4..06193007ad 100644 --- a/arch/arm/boards/at91sam9m10ihd/Makefile +++ b/arch/arm/boards/at91sam9m10ihd/Makefile @@ -1,2 +1,4 @@ obj-y += init.o obj-y += hw_version.o + +lwl-y += lowlevel.o diff --git a/arch/arm/mach-at91/at91sam9x5_lowlevel_init.c b/arch/arm/boards/at91sam9m10ihd/lowlevel.c index 48e69f947d..d5940b987a 100644 --- a/arch/arm/mach-at91/at91sam9x5_lowlevel_init.c +++ b/arch/arm/boards/at91sam9m10ihd/lowlevel.c @@ -2,25 +2,24 @@ * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> * * Under GPLv2 - */ - -#define __LOWLEVEL_INIT__ + */ #include <common.h> -#include <asm/system.h> -#include <asm/barebox-arm.h> +#include <init.h> + #include <asm/barebox-arm-head.h> -#include <mach/hardware.h> -#include <mach/io.h> +#include <asm/barebox-arm.h> + #include <mach/at91sam9_ddrsdr.h> -#include <init.h> -#include <linux/sizes.h> +#include <mach/at91sam9g45.h> +#include <mach/hardware.h> void __naked __bare_init barebox_arm_reset_vector(void) { arm_cpu_lowlevel_init(); - arm_setup_stack(AT91SAM9X5_SRAM_BASE + AT91SAM9X5_SRAM_SIZE - 16); + arm_setup_stack(AT91SAM9G45_SRAM_BASE + AT91SAM9G45_SRAM_SIZE - 16); - barebox_arm_entry(AT91_CHIPSELECT_1, at91sam9x5_get_ddram_size(), NULL); + barebox_arm_entry(AT91_CHIPSELECT_6, at91sam9g45_get_ddram_size(1), + NULL); } diff --git a/arch/arm/boards/at91sam9n12ek/Makefile b/arch/arm/boards/at91sam9n12ek/Makefile index f5d125a0e7..458b055918 100644 --- a/arch/arm/boards/at91sam9n12ek/Makefile +++ b/arch/arm/boards/at91sam9n12ek/Makefile @@ -1,2 +1,5 @@ obj-y += init.o + +lwl-y += lowlevel.o + bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-at91sam9n12ek diff --git a/arch/arm/mach-at91/at91sam9n12_lowlevel_init.c b/arch/arm/boards/at91sam9n12ek/lowlevel.c index 2b5cb158b0..47079336e6 100644 --- a/arch/arm/mach-at91/at91sam9n12_lowlevel_init.c +++ b/arch/arm/boards/at91sam9n12ek/lowlevel.c @@ -2,19 +2,16 @@ * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> * * Under GPLv2 - */ - -#define __LOWLEVEL_INIT__ + */ #include <common.h> -#include <asm/system.h> -#include <asm/barebox-arm.h> +#include <init.h> + #include <asm/barebox-arm-head.h> -#include <mach/hardware.h> -#include <mach/io.h> +#include <asm/barebox-arm.h> + #include <mach/at91sam9_ddrsdr.h> -#include <init.h> -#include <linux/sizes.h> +#include <mach/hardware.h> void __naked __bare_init barebox_arm_reset_vector(void) { diff --git a/arch/arm/boards/dss11/Makefile b/arch/arm/boards/dss11/Makefile index eb072c0161..e11fd5b692 100644 --- a/arch/arm/boards/dss11/Makefile +++ b/arch/arm/boards/dss11/Makefile @@ -1 +1,3 @@ obj-y += init.o + +lwl-y += lowlevel.o diff --git a/arch/arm/boards/dss11/lowlevel.c b/arch/arm/boards/dss11/lowlevel.c new file mode 100644 index 0000000000..b16ef31bf0 --- /dev/null +++ b/arch/arm/boards/dss11/lowlevel.c @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> + * + * Under GPLv2 + */ + +#include <common.h> +#include <init.h> + +#include <asm/barebox-arm-head.h> +#include <asm/barebox-arm.h> + +#include <mach/at91sam9_sdramc.h> +#include <mach/at91sam9260.h> +#include <mach/hardware.h> + +void __naked __bare_init barebox_arm_reset_vector(void) +{ + arm_cpu_lowlevel_init(); + + arm_setup_stack(AT91SAM9260_SRAM_BASE + AT91SAM9260_SRAM_SIZE - 16); + + barebox_arm_entry(AT91_CHIPSELECT_1, + at91_get_sdram_size(IOMEM(AT91SAM9260_BASE_SDRAMC)), + NULL); +} diff --git a/arch/arm/boards/haba-knx/Makefile b/arch/arm/boards/haba-knx/Makefile index d9db6aba62..b1c469dcf9 100644 --- a/arch/arm/boards/haba-knx/Makefile +++ b/arch/arm/boards/haba-knx/Makefile @@ -1,2 +1,5 @@ obj-y += init.o + +lwl-y += lowlevel.o + bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-haba-knx diff --git a/arch/arm/boards/haba-knx/lowlevel.c b/arch/arm/boards/haba-knx/lowlevel.c new file mode 100644 index 0000000000..b16ef31bf0 --- /dev/null +++ b/arch/arm/boards/haba-knx/lowlevel.c @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> + * + * Under GPLv2 + */ + +#include <common.h> +#include <init.h> + +#include <asm/barebox-arm-head.h> +#include <asm/barebox-arm.h> + +#include <mach/at91sam9_sdramc.h> +#include <mach/at91sam9260.h> +#include <mach/hardware.h> + +void __naked __bare_init barebox_arm_reset_vector(void) +{ + arm_cpu_lowlevel_init(); + + arm_setup_stack(AT91SAM9260_SRAM_BASE + AT91SAM9260_SRAM_SIZE - 16); + + barebox_arm_entry(AT91_CHIPSELECT_1, + at91_get_sdram_size(IOMEM(AT91SAM9260_BASE_SDRAMC)), + NULL); +} diff --git a/arch/arm/boards/mmccpu/Makefile b/arch/arm/boards/mmccpu/Makefile deleted file mode 100644 index 1398c26a0f..0000000000 --- a/arch/arm/boards/mmccpu/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -obj-y += init.o - -lwl-$(CONFIG_HAVE_AT91_LOWLEVEL_INIT) += lowlevel_init.o diff --git a/arch/arm/boards/mmccpu/env/bin/_update b/arch/arm/boards/mmccpu/env/bin/_update deleted file mode 100644 index 014bce3512..0000000000 --- a/arch/arm/boards/mmccpu/env/bin/_update +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh - -if [ -z "$part" -o -z "$image" ]; then - echo "define \$part and \$image" - exit 1 -fi - -if [ ! -e "$part" ]; then - echo "Partition $part does not exist" - exit 1 -fi - -if [ $# = 1 ]; then - image=$1 -fi - -if [ x$ip = xdhcp ]; then - dhcp -fi - -ping $eth0.serverip -if [ $? -ne 0 ] ; then - echo "update aborted" - exit 1 -fi - -unprotect $part - -echo -echo "erasing partition $part" -erase $part - -echo -echo "flashing $image to $part" -echo -tftp $image $part diff --git a/arch/arm/boards/mmccpu/env/bin/boot b/arch/arm/boards/mmccpu/env/bin/boot deleted file mode 100644 index 533dea7618..0000000000 --- a/arch/arm/boards/mmccpu/env/bin/boot +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh - -. /env/config - -if [ x$1 = xnand ]; then - root=nand - kernel=nand -fi - -if [ x$1 = xnet ]; then - root=net - kernel=net -fi - -if [ x$1 = xnor ]; then - root=nor - kernel=nor -fi - -if [ x$ip = xdhcp ]; then - bootargs="$bootargs ip=dhcp" -else - bootargs="$bootargs ip=$eth0.ipaddr:$eth0.serverip:$eth0.gateway:$eth0.netmask:::" -fi - -if [ x$root = xnand ]; then - bootargs="$bootargs root=$rootpart_nand rootfstype=jffs2" -elif [ x$root = xnor ]; then - bootargs="$bootargs root=$rootpart_nor rootfstype=jffs2" -else - bootargs="$bootargs root=/dev/nfs nfsroot=$eth0.serverip:$nfsroot,v3,tcp" -fi - -bootargs="$bootargs mtdparts=physmap-flash.0:$nor_parts" - -if [ $kernel = net ]; then - if [ x$ip = xdhcp ]; then - dhcp - fi - tftp $uimage uImage || exit 1 - bootm uImage -elif [ $kernel = nor ]; then - bootm /dev/nor0.kernel -else - bootm /dev/nand0.kernel.bb -fi - diff --git a/arch/arm/boards/mmccpu/env/bin/init b/arch/arm/boards/mmccpu/env/bin/init deleted file mode 100644 index ad9b65a765..0000000000 --- a/arch/arm/boards/mmccpu/env/bin/init +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh - -PATH=/env/bin -export PATH - -. /env/config -if [ -e /dev/nor0 ]; then - addpart /dev/nor0 $nor_parts -fi - -if [ -e /dev/nand0 ]; then - addpart /dev/nand0 $nand_parts -fi - -if [ -z $eth0.ethaddr ]; then - while [ -z $eth0.ethaddr ]; do - readline "no MAC address set for eth0. please enter the one found on your board: " eth0.ethaddr - done - echo -a /env/config "eth0.ethaddr=$eth0.ethaddr" -fi - -echo -echo -n "Hit any key to stop autoboot: " -timeout -a $autoboot_timeout -if [ $? != 0 ]; then - echo - echo "type update_kernel nor [<imagename>] to update kernel into flash" - echo "type update_root nor [<imagename>] to update rootfs into flash" - echo - exit -fi - -boot diff --git a/arch/arm/boards/mmccpu/env/bin/update_kernel b/arch/arm/boards/mmccpu/env/bin/update_kernel deleted file mode 100644 index 05c822d860..0000000000 --- a/arch/arm/boards/mmccpu/env/bin/update_kernel +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -. /env/config - -image=$uimage -if [ x$1 = xnand ]; then - part=/dev/nand0.kernel.bb -elif [ x$1 = xnor ]; then - part=/dev/nor0.kernel -else - echo "usage: $0 nor|nand [imagename]" - exit 1 -fi - -. /env/bin/_update $2 diff --git a/arch/arm/boards/mmccpu/env/bin/update_root b/arch/arm/boards/mmccpu/env/bin/update_root deleted file mode 100644 index a75137237b..0000000000 --- a/arch/arm/boards/mmccpu/env/bin/update_root +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh - -. /env/config - -image=$jffs2 -if [ x$1 = xnand ]; then - part=/dev/nand0.root.bb -elif [ x$1 = xnor ]; then - part=/dev/nor0.root -else - echo "usage: $0 nor|nand [imagename]" - exit 1 -fi - -. /env/bin/_update $2 - diff --git a/arch/arm/boards/mmccpu/env/config b/arch/arm/boards/mmccpu/env/config deleted file mode 100644 index 5367cd9f56..0000000000 --- a/arch/arm/boards/mmccpu/env/config +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh - -# can be either 'net', 'nor' or 'nand'' -kernel=nor -root=nor - -uimage=uImage-mmccpu -jffs2=root-mmccpu.jffs2 - -autoboot_timeout=3 - -nfsroot="/home/kschwinne/src/pengutronix/OSELAS.BSP-Bucyrus-Grabowski-trunk/platform-Bucyrus-mmccpu/root" - -bootargs="console=ttyS0,115200 mmccpu=p299" - -#nor_parts="256k(barebox)ro,128k(bareboxenv),1536k(kernel),-(root)" -nor_parts="256k(barebox)ro,128k(bareboxenv),1536k(kernel),10240k(root),10240k(rootbu),-(data)" -rootpart_nor="/dev/mtdblock3" - -#nand_parts="256k(barebox)ro,64k(bareboxenv),1536k(kernel),-(root)" -#rootpart_nand="/dev/mtdblock7" - -# use 'dhcp' to do dhcp in barebox and in kernel -ip=dhcp - -# or set your networking parameters here -#eth0.ipaddr=a.b.c.d -#eth0.netmask=a.b.c.d -#eth0.gateway=a.b.c.d -#eth0.serverip=a.b.c.d diff --git a/arch/arm/boards/mmccpu/init.c b/arch/arm/boards/mmccpu/init.c deleted file mode 100644 index 747c4b2742..0000000000 --- a/arch/arm/boards/mmccpu/init.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (C) 2007 Sascha Hauer, Pengutronix - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * - */ - -#include <common.h> -#include <net.h> -#include <init.h> -#include <environment.h> -#include <gpio.h> -#include <asm/armlinux.h> -#include <generated/mach-types.h> -#include <partition.h> -#include <fs.h> -#include <fcntl.h> -#include <io.h> -#include <mach/hardware.h> -#include <nand.h> -#include <linux/mtd/nand.h> -#include <mach/at91_pmc.h> -#include <mach/board.h> -#include <mach/iomux.h> -#include <mach/io.h> - -static struct macb_platform_data macb_pdata = { - .phy_flags = PHYLIB_FORCE_LINK, - .phy_addr = 4, -}; - -static int mmccpu_mem_init(void) -{ - at91_add_device_sdram(128 * 1024 * 1024); - - return 0; -} -mem_initcall(mmccpu_mem_init); - -static int mmccpu_devices_init(void) -{ - /* - * PB27 enables the 50MHz oscillator for Ethernet PHY - * 1 - enable - * 0 - disable - */ - at91_set_gpio_output(AT91_PIN_PB27, 1); - gpio_set_value(AT91_PIN_PB27, 1); /* 1- enable, 0 - disable */ - - at91_add_device_eth(0, &macb_pdata); - add_cfi_flash_device(0, AT91_CHIPSELECT_0, 0, 0); - - devfs_add_partition("nor0", 0x00000, 256 * 1024, DEVFS_PARTITION_FIXED, "self0"); - devfs_add_partition("nor0", 0x40000, 128 * 1024, DEVFS_PARTITION_FIXED, "env0"); - - armlinux_set_architecture(MACH_TYPE_MMCCPU); - - return 0; -} - -device_initcall(mmccpu_devices_init); - -static int mmccpu_console_init(void) -{ - barebox_set_model("Bucyrus MMC-CPU"); - barebox_set_hostname("mmccpu"); - - at91_register_uart(0, 0); - return 0; -} - -console_initcall(mmccpu_console_init); - -static int mmccpu_main_clock(void) -{ - at91_set_main_clock(18432000); - return 0; -} -pure_initcall(mmccpu_main_clock); diff --git a/arch/arm/boards/mmccpu/lowlevel_init.c b/arch/arm/boards/mmccpu/lowlevel_init.c deleted file mode 100644 index c193eae58e..0000000000 --- a/arch/arm/boards/mmccpu/lowlevel_init.c +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (C) 2009-2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> - * - * Under GPLv2 - */ - -#include <common.h> -#include <init.h> -#include <mach/hardware.h> -#include <mach/at91_rstc.h> -#include <mach/at91_wdt.h> -#include <mach/at91_pmc.h> -#include <mach/at91sam9_smc.h> -#include <mach/at91sam9_sdramc.h> -#include <mach/at91sam9_matrix.h> -#include <mach/at91_lowlevel_init.h> - -#define MASTER_PLL_MUL 54 -#define MASTER_PLL_DIV 4 - -void __bare_init at91sam926x_lowlevel_board_config(struct at91sam926x_lowlevel_cfg *cfg) -{ - /* Disable Watchdog */ - cfg->wdt_mr = - AT91_WDT_WDIDLEHLT | AT91_WDT_WDDBGHLT | - AT91_WDT_WDV | - AT91_WDT_WDDIS | - AT91_WDT_WDD; - - /* define PDC[31:16] as DATA[31:16] */ - cfg->ebi_pio_pdr = 0xFFFF0000; - /* no pull-up for D[31:16] */ - cfg->ebi_pio_ppudr = 0xFFFF0000; - /* EBI0_CSA, CS1 SDRAM, CS3 NAND Flash, 3.3V memories */ - cfg->ebi_csa = - AT91_MATRIX_EBI0_DBPUC | AT91_MATRIX_EBI0_VDDIOMSEL_1_8V | - AT91_MATRIX_EBI0_CS1A_SDRAMC | - AT91_MATRIX_EBI0_CS3A_SMC_SMARTMEDIA; - - cfg->smc_cs = 0; -#if 1 - cfg->smc_mode = - AT91_SMC_READMODE | AT91_SMC_WRITEMODE | - AT91_SMC_DBW_16 | - AT91_SMC_TDFMODE | - AT91_SMC_TDF_(6); - cfg->smc_cycle = - AT91_SMC_NWECYCLE_(16) | AT91_SMC_NRDCYCLE_(16); - cfg->smc_pulse = - AT91_SMC_NWEPULSE_(5) | AT91_SMC_NCS_WRPULSE_(7) | - AT91_SMC_NRDPULSE_(5) | AT91_SMC_NCS_RDPULSE_(13); - cfg->smc_setup = - AT91_SMC_NWESETUP_(3) | AT91_SMC_NCS_WRSETUP_(2) | - AT91_SMC_NRDSETUP_(8) | AT91_SMC_NCS_RDSETUP_(0); -#elif 0 /* slow setup */ - cfg->smc_mode = - AT91_SMC_READMODE | AT91_SMC_WRITEMODE | - AT91_SMC_DBW_16 | - AT91_SMC_TDFMODE | - AT91_SMC_TDF_(1); - cfg->smc_cycle = - AT91_SMC_NWECYCLE_(0xd00) | AT91_SMC_NRDCYCLE_(0xd00); - cfg->smc_pulse = - AT91_SMC_NWEPULSE_(5) | AT91_SMC_NCS_WRPULSE_(7) | - AT91_SMC_NRDPULSE_(5) | AT91_SMC_NCS_RDPULSE_(13); - cfg->smc_setup = - AT91_SMC_NWESETUP_(3) | AT91_SMC_NCS_WRSETUP_(2) | - AT91_SMC_NRDSETUP_(8) | AT91_SMC_NCS_RDSETUP_(0); -#else /* RONETIX' original values */ - cfg->smc_mode = - AT91_SMC_READMODE | AT91_SMC_WRITEMODE | - AT91_SMC_DBW_16 | - AT91_SMC_TDFMODE | - AT91_SMC_TDF_(6); - cfg->smc_cycle = - AT91_SMC_NWECYCLE_(22) | AT91_SMC_NRDCYCLE_(22); - cfg->smc_pulse = - AT91_SMC_NWEPULSE_(11) | AT91_SMC_NCS_WRPULSE_(11) | - AT91_SMC_NRDPULSE_(11) | AT91_SMC_NCS_RDPULSE_(11); - cfg->smc_setup = - AT91_SMC_NWESETUP_(10) | AT91_SMC_NCS_WRSETUP_(10) | - AT91_SMC_NRDSETUP_(10) | AT91_SMC_NCS_RDSETUP_(10); -#endif - - cfg->pmc_mor = - AT91_PMC_MOSCEN | - (255 << 8); /* Main Oscillator Start-up Time */ - cfg->pmc_pllar = - AT91_PMC_PLLA_WR_ERRATA | /* Bit 29 must be 1 when prog */ - AT91_PMC_OUT | - AT91_PMC_PLLCOUNT | /* PLL Counter */ - (2 << 28) | /* PLL Clock Frequency Range */ - ((MASTER_PLL_MUL - 1) << 16) | (MASTER_PLL_DIV); - /* PCK/2 = MCK Master Clock from PLLA */ - cfg->pmc_mckr1 = - AT91_PMC_CSS_SLOW | - AT91_PMC_PRES_1 | - AT91SAM9_PMC_MDIV_2 | - AT91_PMC_PDIV_1; - /* PCK/2 = MCK Master Clock from PLLA */ - cfg->pmc_mckr2 = - AT91_PMC_CSS_PLLA | - AT91_PMC_PRES_1 | - AT91SAM9_PMC_MDIV_2 | - AT91_PMC_PDIV_1; - - /* SDRAM */ - /* SDRAMC_TR - Refresh Timer register */ - cfg->sdrc_tr1 = 0x13C; - /* SDRAMC_CR - Configuration register*/ - cfg->sdrc_cr = - AT91_SDRAMC_NC_9 | - AT91_SDRAMC_NR_13 | - AT91_SDRAMC_NB_4 | - AT91_SDRAMC_CAS_3 | - AT91_SDRAMC_DBW_32 | - (2 << 8) | /* tWR - Write Recovery Delay */ - (8 << 12) | /* tRC - Row Cycle Delay */ - (2 << 16) | /* tRP - Row Precharge Delay */ - (2 << 20) | /* tRCD - Row to Column Delay */ - (5 << 24) | /* tRAS - Active to Precharge Delay */ - (12 << 28); /* tXSR - Exit Self Refresh to Active Delay */ - - /* Memory Device Register -> SDRAM */ - cfg->sdrc_mdr = AT91_SDRAMC_MD_SDRAM; - /* SDRAM_TR */ - cfg->sdrc_tr2 = 780; - - /* user reset enable */ - cfg->rstc_rmr = - AT91_RSTC_KEY | - AT91_RSTC_PROCRST | - AT91_RSTC_RSTTYP_WAKEUP | - AT91_RSTC_RSTTYP_WATCHDOG; -} diff --git a/arch/arm/boards/phytec-som-am335x/lowlevel.c b/arch/arm/boards/phytec-som-am335x/lowlevel.c index b1576ee21a..338d13a391 100644 --- a/arch/arm/boards/phytec-som-am335x/lowlevel.c +++ b/arch/arm/boards/phytec-som-am335x/lowlevel.c @@ -238,6 +238,7 @@ PHYTEC_ENTRY_MLO(start_am33xx_phytec_phycore_sram_128mb, am335x_phytec_phycore_s PHYTEC_ENTRY_MLO(start_am33xx_phytec_phycore_sram_256mb, am335x_phytec_phycore_som_mlo, PHYCORE_MT41J128M16125IT_256MB); PHYTEC_ENTRY_MLO(start_am33xx_phytec_phycore_sram_512mb, am335x_phytec_phycore_som_mlo, PHYCORE_MT41J256M16HA15EIT_512MB); PHYTEC_ENTRY_MLO(start_am33xx_phytec_phycore_sram_2x512mb, am335x_phytec_phycore_som_mlo, PHYCORE_MT41J512M8125IT_2x512MB); +PHYTEC_ENTRY_MLO(start_am33xx_phytec_phycore_r2_sram_1024mb, am335x_phytec_phycore_som_mlo, PHYCORE_R2_MT41K512M16HA125IT_1024MB); PHYTEC_ENTRY_UNIFIED_MLO(start_am33xx_phytec_phycore_r2_sram, am335x_phytec_phycore_som_mlo, PHYCORE_R2); PHYTEC_ENTRY(start_am33xx_phytec_phycore_nand_sdram, am335x_phytec_phycore_som_nand); PHYTEC_ENTRY(start_am33xx_phytec_phycore_emmc_sdram, am335x_phytec_phycore_som_emmc); diff --git a/arch/arm/boards/pm9261/Makefile b/arch/arm/boards/pm9261/Makefile index bff467b1dc..e9bf1212fe 100644 --- a/arch/arm/boards/pm9261/Makefile +++ b/arch/arm/boards/pm9261/Makefile @@ -1,4 +1,4 @@ obj-y += init.o -lwl-$(CONFIG_HAVE_AT91_LOWLEVEL_INIT) += lowlevel_init.o +lwl-y += lowlevel_init.o bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-pm9261 diff --git a/arch/arm/boards/pm9261/lowlevel_init.c b/arch/arm/boards/pm9261/lowlevel_init.c index 91a64b4158..a4cb8af697 100644 --- a/arch/arm/boards/pm9261/lowlevel_init.c +++ b/arch/arm/boards/pm9261/lowlevel_init.c @@ -4,22 +4,16 @@ * Under GPLv2 */ -#include <common.h> -#include <init.h> -#include <mach/hardware.h> -#include <mach/at91_rstc.h> -#include <mach/at91_wdt.h> -#include <mach/at91_pmc.h> -#include <mach/at91sam9_smc.h> -#include <mach/at91sam9_sdramc.h> +#include <asm/barebox-arm.h> + +#include <mach/at91sam926x_board_init.h> #include <mach/at91sam9_matrix.h> -#include <mach/at91_lowlevel_init.h> #define MASTER_PLL_DIV 15 #define MASTER_PLL_MUL 162 #define MAIN_PLL_DIV 2 -void __bare_init at91sam926x_lowlevel_board_config(struct at91sam926x_lowlevel_cfg *cfg) +static void __bare_init pm9261_board_config(struct at91sam926x_board_cfg *cfg) { /* Disable Watchdog */ cfg->wdt_mr = @@ -100,3 +94,28 @@ void __bare_init at91sam926x_lowlevel_board_config(struct at91sam926x_lowlevel_c AT91_RSTC_RSTTYP_WAKEUP | AT91_RSTC_RSTTYP_WATCHDOG; } + +static void __bare_init pm9261_init(void) +{ + struct at91sam926x_board_cfg cfg; + + cfg.pio = IOMEM(AT91SAM9261_BASE_PIOC); + cfg.sdramc = IOMEM(AT91SAM9261_BASE_SDRAMC); + cfg.ebi_pio_is_peripha = false; + cfg.matrix_csa = AT91_MATRIX_EBICSA; + + pm9261_board_config(&cfg); + at91sam926x_board_init(&cfg); + + barebox_arm_entry(AT91_CHIPSELECT_1, at91_get_sdram_size(cfg.sdramc), + NULL); +} + +void __naked __bare_init barebox_arm_reset_vector(void) +{ + arm_cpu_lowlevel_init(); + + arm_setup_stack(AT91SAM9261_SRAM_BASE + AT91SAM9261_SRAM_SIZE - 16); + + pm9261_init(); +} diff --git a/arch/arm/boards/pm9263/Makefile b/arch/arm/boards/pm9263/Makefile index 1398c26a0f..68bfbfa926 100644 --- a/arch/arm/boards/pm9263/Makefile +++ b/arch/arm/boards/pm9263/Makefile @@ -1,3 +1,3 @@ obj-y += init.o -lwl-$(CONFIG_HAVE_AT91_LOWLEVEL_INIT) += lowlevel_init.o +lwl-y += lowlevel_init.o diff --git a/arch/arm/boards/pm9263/lowlevel_init.c b/arch/arm/boards/pm9263/lowlevel_init.c index 6336d51063..6849f0a5bf 100644 --- a/arch/arm/boards/pm9263/lowlevel_init.c +++ b/arch/arm/boards/pm9263/lowlevel_init.c @@ -4,22 +4,18 @@ * Under GPLv2 */ -#include <common.h> -#include <init.h> -#include <mach/hardware.h> -#include <mach/at91_rstc.h> -#include <mach/at91_wdt.h> -#include <mach/at91_pmc.h> -#include <mach/at91sam9_smc.h> -#include <mach/at91sam9_sdramc.h> -#include <mach/at91sam9_matrix.h> -#include <mach/at91_lowlevel_init.h> +#include <linux/sizes.h> + +#include <asm/barebox-arm.h> + +#include <mach/at91sam926x_board_init.h> +#include <mach/at91sam9263_matrix.h> #define MASTER_PLL_DIV 6 #define MASTER_PLL_MUL 65 #define MAIN_PLL_DIV 2 /* 2 or 4 */ -void __bare_init at91sam926x_lowlevel_board_config(struct at91sam926x_lowlevel_cfg *cfg) +static void __bare_init pm9263_board_config(struct at91sam926x_board_cfg *cfg) { /* Disable Watchdog */ cfg->wdt_mr = @@ -119,3 +115,28 @@ void __bare_init at91sam926x_lowlevel_board_config(struct at91sam926x_lowlevel_c AT91_RSTC_RSTTYP_WAKEUP | AT91_RSTC_RSTTYP_WATCHDOG; } + +static void __bare_init pm9263_board_init(void) +{ + struct at91sam926x_board_cfg cfg; + + cfg.pio = IOMEM(AT91SAM9263_BASE_PIOD); + cfg.sdramc = IOMEM(AT91SAM9263_BASE_SDRAMC0); + cfg.ebi_pio_is_peripha = true; + cfg.matrix_csa = AT91_MATRIX_EBI0CSA; + + pm9263_board_config(&cfg); + at91sam926x_board_init(&cfg); + + barebox_arm_entry(AT91_CHIPSELECT_1, at91_get_sdram_size(cfg.sdramc), + NULL); +} + +void __naked __bare_init barebox_arm_reset_vector(void) +{ + arm_cpu_lowlevel_init(); + + arm_setup_stack(AT91SAM9263_SRAM0_BASE + AT91SAM9263_SRAM0_SIZE - 16); + + pm9263_board_init(); +} diff --git a/arch/arm/boards/pm9g45/Makefile b/arch/arm/boards/pm9g45/Makefile index d81b1881b3..abf50243e5 100644 --- a/arch/arm/boards/pm9g45/Makefile +++ b/arch/arm/boards/pm9g45/Makefile @@ -1,2 +1,5 @@ obj-y += init.o + +lwl-y += lowlevel.o + bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-pm9g45 diff --git a/arch/arm/boards/pm9g45/lowlevel.c b/arch/arm/boards/pm9g45/lowlevel.c new file mode 100644 index 0000000000..67454bde26 --- /dev/null +++ b/arch/arm/boards/pm9g45/lowlevel.c @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> + * + * Under GPLv2 + */ + +#include <common.h> +#include <init.h> + +#include <asm/barebox-arm-head.h> +#include <asm/barebox-arm.h> + +#include <mach/at91sam9_ddrsdr.h> +#include <mach/hardware.h> + +void __naked __bare_init barebox_arm_reset_vector(void) +{ + arm_cpu_lowlevel_init(); + + arm_setup_stack(AT91SAM9G45_SRAM_BASE + AT91SAM9G45_SRAM_SIZE - 16); + + barebox_arm_entry(AT91_CHIPSELECT_6, at91sam9g45_get_ddram_size(1), + NULL); +} diff --git a/arch/arm/boards/qil-a926x/Makefile b/arch/arm/boards/qil-a926x/Makefile index 0c7bc3f043..82e46b369f 100644 --- a/arch/arm/boards/qil-a926x/Makefile +++ b/arch/arm/boards/qil-a926x/Makefile @@ -1,2 +1,5 @@ obj-y += init.o + +lwl-y += lowlevel.o + bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-qil-a926x diff --git a/arch/arm/boards/qil-a926x/lowlevel.c b/arch/arm/boards/qil-a926x/lowlevel.c new file mode 100644 index 0000000000..b16ef31bf0 --- /dev/null +++ b/arch/arm/boards/qil-a926x/lowlevel.c @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> + * + * Under GPLv2 + */ + +#include <common.h> +#include <init.h> + +#include <asm/barebox-arm-head.h> +#include <asm/barebox-arm.h> + +#include <mach/at91sam9_sdramc.h> +#include <mach/at91sam9260.h> +#include <mach/hardware.h> + +void __naked __bare_init barebox_arm_reset_vector(void) +{ + arm_cpu_lowlevel_init(); + + arm_setup_stack(AT91SAM9260_SRAM_BASE + AT91SAM9260_SRAM_SIZE - 16); + + barebox_arm_entry(AT91_CHIPSELECT_1, + at91_get_sdram_size(IOMEM(AT91SAM9260_BASE_SDRAMC)), + NULL); +} diff --git a/arch/arm/boards/sama5d3_xplained/Makefile b/arch/arm/boards/sama5d3_xplained/Makefile index 3c301cb0cd..fc6d83be8c 100644 --- a/arch/arm/boards/sama5d3_xplained/Makefile +++ b/arch/arm/boards/sama5d3_xplained/Makefile @@ -1,2 +1,3 @@ obj-y += init.o +lwl-y += lowlevel.o bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-sama5d3_xplained diff --git a/arch/arm/mach-at91/sama5d3_lowlevel_init.c b/arch/arm/boards/sama5d3_xplained/lowlevel.c index 01d28514d1..b791f2a03c 100644 --- a/arch/arm/mach-at91/sama5d3_lowlevel_init.c +++ b/arch/arm/boards/sama5d3_xplained/lowlevel.c @@ -2,18 +2,16 @@ * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> * * Under GPLv2 - */ - -#define __LOWLEVEL_INIT__ + */ #include <common.h> -#include <linux/sizes.h> #include <init.h> -#include <asm/system.h> -#include <asm/barebox-arm.h> + #include <asm/barebox-arm-head.h> -#include <mach/hardware.h> +#include <asm/barebox-arm.h> + #include <mach/at91sam9_ddrsdr.h> +#include <mach/hardware.h> void __naked __bare_init barebox_arm_reset_vector(void) { diff --git a/arch/arm/boards/sama5d3xek/Makefile b/arch/arm/boards/sama5d3xek/Makefile index 32dcb4283c..6ed914fc0a 100644 --- a/arch/arm/boards/sama5d3xek/Makefile +++ b/arch/arm/boards/sama5d3xek/Makefile @@ -1,3 +1,4 @@ obj-y += init.o obj-$(CONFIG_W1) += hw_version.o +lwl-y += lowlevel.o bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-sama5d3xek diff --git a/arch/arm/boards/sama5d3xek/lowlevel.c b/arch/arm/boards/sama5d3xek/lowlevel.c new file mode 100644 index 0000000000..b791f2a03c --- /dev/null +++ b/arch/arm/boards/sama5d3xek/lowlevel.c @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> + * + * Under GPLv2 + */ + +#include <common.h> +#include <init.h> + +#include <asm/barebox-arm-head.h> +#include <asm/barebox-arm.h> + +#include <mach/at91sam9_ddrsdr.h> +#include <mach/hardware.h> + +void __naked __bare_init barebox_arm_reset_vector(void) +{ + arm_cpu_lowlevel_init(); + + arm_setup_stack(SAMA5D3_SRAM_BASE + SAMA5D3_SRAM_SIZE - 16); + + barebox_arm_entry(SAMA5_DDRCS, at91sama5_get_ddram_size(), NULL); +} diff --git a/arch/arm/boards/sama5d4_xplained/Makefile b/arch/arm/boards/sama5d4_xplained/Makefile index 44550f5288..8873dfc22c 100644 --- a/arch/arm/boards/sama5d4_xplained/Makefile +++ b/arch/arm/boards/sama5d4_xplained/Makefile @@ -1 +1,2 @@ obj-y += sama5d4_xplained.o +lwl-y += lowlevel.o diff --git a/arch/arm/boards/sama5d4_xplained/lowlevel.c b/arch/arm/boards/sama5d4_xplained/lowlevel.c new file mode 100644 index 0000000000..b791f2a03c --- /dev/null +++ b/arch/arm/boards/sama5d4_xplained/lowlevel.c @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> + * + * Under GPLv2 + */ + +#include <common.h> +#include <init.h> + +#include <asm/barebox-arm-head.h> +#include <asm/barebox-arm.h> + +#include <mach/at91sam9_ddrsdr.h> +#include <mach/hardware.h> + +void __naked __bare_init barebox_arm_reset_vector(void) +{ + arm_cpu_lowlevel_init(); + + arm_setup_stack(SAMA5D3_SRAM_BASE + SAMA5D3_SRAM_SIZE - 16); + + barebox_arm_entry(SAMA5_DDRCS, at91sama5_get_ddram_size(), NULL); +} diff --git a/arch/arm/boards/sama5d4ek/Makefile b/arch/arm/boards/sama5d4ek/Makefile index 4363b39243..152750bbe0 100644 --- a/arch/arm/boards/sama5d4ek/Makefile +++ b/arch/arm/boards/sama5d4ek/Makefile @@ -1 +1,2 @@ obj-y += sama5d4ek.o +lwl-y += lowlevel.o diff --git a/arch/arm/boards/sama5d4ek/lowlevel.c b/arch/arm/boards/sama5d4ek/lowlevel.c new file mode 100644 index 0000000000..b791f2a03c --- /dev/null +++ b/arch/arm/boards/sama5d4ek/lowlevel.c @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> + * + * Under GPLv2 + */ + +#include <common.h> +#include <init.h> + +#include <asm/barebox-arm-head.h> +#include <asm/barebox-arm.h> + +#include <mach/at91sam9_ddrsdr.h> +#include <mach/hardware.h> + +void __naked __bare_init barebox_arm_reset_vector(void) +{ + arm_cpu_lowlevel_init(); + + arm_setup_stack(SAMA5D3_SRAM_BASE + SAMA5D3_SRAM_SIZE - 16); + + barebox_arm_entry(SAMA5_DDRCS, at91sama5_get_ddram_size(), NULL); +} diff --git a/arch/arm/boards/telit-evk-pro3/Makefile b/arch/arm/boards/telit-evk-pro3/Makefile index eb072c0161..e11fd5b692 100644 --- a/arch/arm/boards/telit-evk-pro3/Makefile +++ b/arch/arm/boards/telit-evk-pro3/Makefile @@ -1 +1,3 @@ obj-y += init.o + +lwl-y += lowlevel.o diff --git a/arch/arm/boards/telit-evk-pro3/lowlevel.c b/arch/arm/boards/telit-evk-pro3/lowlevel.c new file mode 100644 index 0000000000..b16ef31bf0 --- /dev/null +++ b/arch/arm/boards/telit-evk-pro3/lowlevel.c @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> + * + * Under GPLv2 + */ + +#include <common.h> +#include <init.h> + +#include <asm/barebox-arm-head.h> +#include <asm/barebox-arm.h> + +#include <mach/at91sam9_sdramc.h> +#include <mach/at91sam9260.h> +#include <mach/hardware.h> + +void __naked __bare_init barebox_arm_reset_vector(void) +{ + arm_cpu_lowlevel_init(); + + arm_setup_stack(AT91SAM9260_SRAM_BASE + AT91SAM9260_SRAM_SIZE - 16); + + barebox_arm_entry(AT91_CHIPSELECT_1, + at91_get_sdram_size(IOMEM(AT91SAM9260_BASE_SDRAMC)), + NULL); +} diff --git a/arch/arm/boards/tny-a926x/Makefile b/arch/arm/boards/tny-a926x/Makefile index dba2f8cfcf..d400788757 100644 --- a/arch/arm/boards/tny-a926x/Makefile +++ b/arch/arm/boards/tny-a926x/Makefile @@ -1,9 +1,10 @@ obj-y += init.o -bootstrap-$(CONFIG_MACH_TNY_A9263) = tny_a9263_bootstrap.o -obj-$(CONFIG_AT91_BOOTSTRAP) += $(bootstrap-y) +obj-$(CONFIG_AT91_BOOTSTRAP) += tny_a9263_bootstrap.o -lowlevel_init-$(CONFIG_MACH_TNY_A9263) = tny_a9263_lowlevel_init.o -lwl-$(CONFIG_HAVE_AT91_LOWLEVEL_INIT) += $(lowlevel_init-y) +lwl-$(CONFIG_MACH_TNY_A9260) += tny_a9260_lowlevel.o +lwl-$(CONFIG_MACH_TNY_A9G20) += tny_a9260_lowlevel.o +lwl-$(CONFIG_MACH_TNY_A9263) += tny_a9263_lowlevel.o + bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-tny-a926x diff --git a/arch/arm/boards/tny-a926x/tny_a9260_lowlevel.c b/arch/arm/boards/tny-a926x/tny_a9260_lowlevel.c new file mode 100644 index 0000000000..b16ef31bf0 --- /dev/null +++ b/arch/arm/boards/tny-a926x/tny_a9260_lowlevel.c @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> + * + * Under GPLv2 + */ + +#include <common.h> +#include <init.h> + +#include <asm/barebox-arm-head.h> +#include <asm/barebox-arm.h> + +#include <mach/at91sam9_sdramc.h> +#include <mach/at91sam9260.h> +#include <mach/hardware.h> + +void __naked __bare_init barebox_arm_reset_vector(void) +{ + arm_cpu_lowlevel_init(); + + arm_setup_stack(AT91SAM9260_SRAM_BASE + AT91SAM9260_SRAM_SIZE - 16); + + barebox_arm_entry(AT91_CHIPSELECT_1, + at91_get_sdram_size(IOMEM(AT91SAM9260_BASE_SDRAMC)), + NULL); +} diff --git a/arch/arm/boards/tny-a926x/tny_a9263_lowlevel_init.c b/arch/arm/boards/tny-a926x/tny_a9263_lowlevel.c index 1b146da625..4b57b74e13 100644 --- a/arch/arm/boards/tny-a926x/tny_a9263_lowlevel_init.c +++ b/arch/arm/boards/tny-a926x/tny_a9263_lowlevel.c @@ -1,30 +1,24 @@ /* - * Copyright (C) 2009-2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> + * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> * * Under GPLv2 */ #include <common.h> #include <init.h> -#include <mach/hardware.h> -#include <mach/at91_rstc.h> -#include <mach/at91_wdt.h> -#include <mach/at91_pmc.h> -#include <mach/at91sam9_smc.h> -#include <mach/at91sam9_sdramc.h> -#include <mach/at91sam9_matrix.h> -#include <mach/at91_lowlevel_init.h> + +#include <asm/barebox-arm-head.h> +#include <asm/barebox-arm.h> + +#include <mach/at91sam926x_board_init.h> +#include <mach/at91sam9263_matrix.h> #define MASTER_CLOCK 180 -#if MASTER_CLOCK == 200 -#define MASTER_PLL_MUL 100 -#else #define MASTER_PLL_MUL 90 -#endif #define MASTER_PLL_DIV 6 -void __bare_init at91sam926x_lowlevel_board_config(struct at91sam926x_lowlevel_cfg *cfg) +static void __bare_init tny_a9263_board_config(struct at91sam926x_board_cfg *cfg) { /* Disable Watchdog */ cfg->wdt_mr = @@ -105,3 +99,30 @@ void __bare_init at91sam926x_lowlevel_board_config(struct at91sam926x_lowlevel_c AT91_RSTC_RSTTYP_WAKEUP | AT91_RSTC_RSTTYP_WATCHDOG; } + +static void __bare_init tny_a9263_init(void) +{ + struct at91sam926x_board_cfg cfg; + + cfg.pio = IOMEM(AT91SAM9263_BASE_PIOD); + cfg.sdramc = IOMEM(AT91SAM9263_BASE_SDRAMC0); + cfg.ebi_pio_is_peripha = true; + cfg.matrix_csa = AT91_MATRIX_EBI0CSA; + + tny_a9263_board_config(&cfg); + + at91sam926x_board_init(&cfg); + + barebox_arm_entry(AT91_CHIPSELECT_1, + at91_get_sdram_size(IOMEM(AT91SAM9263_BASE_SDRAMC0)), + NULL); +} + +void __naked __bare_init barebox_arm_reset_vector(void) +{ + arm_cpu_lowlevel_init(); + + arm_setup_stack(AT91SAM9263_SRAM0_BASE + AT91SAM9263_SRAM0_SIZE - 16); + + tny_a9263_init(); +} diff --git a/arch/arm/boards/usb-a926x/Makefile b/arch/arm/boards/usb-a926x/Makefile index 4f09581e33..65cc4082fc 100644 --- a/arch/arm/boards/usb-a926x/Makefile +++ b/arch/arm/boards/usb-a926x/Makefile @@ -1,9 +1,9 @@ obj-y += init.o -bootstrap-$(CONFIG_MACH_USB_A9263) = usb_a9263_bootstrap.o -obj-$(CONFIG_AT91_BOOTSTRAP) += $(bootstrap-y) +obj-$(CONFIG_AT91_BOOTSTRAP) += usb_a9263_bootstrap.o -lowlevel_init-$(CONFIG_MACH_USB_A9263) = usb_a9263_lowlevel_init.o +lwl-$(CONFIG_MACH_USB_A9260) += usb_a9260_lowlevel.o +lwl-$(CONFIG_MACH_USB_A9G20) += usb_a9260_lowlevel.o +lwl-$(CONFIG_MACH_USB_A9263) += usb_a9263_lowlevel.o -lwl-$(CONFIG_HAVE_AT91_LOWLEVEL_INIT) += $(lowlevel_init-y) bbenv-$(CONFIG_DEFAULT_ENVIRONMENT_GENERIC) += defaultenv-usb-a926x diff --git a/arch/arm/boards/usb-a926x/usb_a9260_lowlevel.c b/arch/arm/boards/usb-a926x/usb_a9260_lowlevel.c new file mode 100644 index 0000000000..b16ef31bf0 --- /dev/null +++ b/arch/arm/boards/usb-a926x/usb_a9260_lowlevel.c @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> + * + * Under GPLv2 + */ + +#include <common.h> +#include <init.h> + +#include <asm/barebox-arm-head.h> +#include <asm/barebox-arm.h> + +#include <mach/at91sam9_sdramc.h> +#include <mach/at91sam9260.h> +#include <mach/hardware.h> + +void __naked __bare_init barebox_arm_reset_vector(void) +{ + arm_cpu_lowlevel_init(); + + arm_setup_stack(AT91SAM9260_SRAM_BASE + AT91SAM9260_SRAM_SIZE - 16); + + barebox_arm_entry(AT91_CHIPSELECT_1, + at91_get_sdram_size(IOMEM(AT91SAM9260_BASE_SDRAMC)), + NULL); +} diff --git a/arch/arm/boards/usb-a926x/usb_a9263_lowlevel_init.c b/arch/arm/boards/usb-a926x/usb_a9263_lowlevel.c index f6dc58e3f6..066452b956 100644 --- a/arch/arm/boards/usb-a926x/usb_a9263_lowlevel_init.c +++ b/arch/arm/boards/usb-a926x/usb_a9263_lowlevel.c @@ -4,16 +4,12 @@ * Under GPLv2 */ -#include <common.h> -#include <init.h> -#include <mach/hardware.h> -#include <mach/at91_rstc.h> -#include <mach/at91_wdt.h> -#include <mach/at91_pmc.h> -#include <mach/at91sam9_smc.h> -#include <mach/at91sam9_sdramc.h> -#include <mach/at91sam9_matrix.h> -#include <mach/at91_lowlevel_init.h> +#include <linux/sizes.h> + +#include <asm/barebox-arm.h> + +#include <mach/at91sam926x_board_init.h> +#include <mach/at91sam9263_matrix.h> #define MASTER_CLOCK 180 @@ -24,7 +20,7 @@ #endif #define MASTER_PLL_DIV 6 -void __bare_init at91sam926x_lowlevel_board_config(struct at91sam926x_lowlevel_cfg *cfg) +static void __bare_init usb_a9263_board_config(struct at91sam926x_board_cfg *cfg) { /* Disable Watchdog */ cfg->wdt_mr = @@ -109,3 +105,28 @@ void __bare_init at91sam926x_lowlevel_board_config(struct at91sam926x_lowlevel_c AT91_RSTC_RSTTYP_WAKEUP | AT91_RSTC_RSTTYP_WATCHDOG; } + +static void __bare_init usb_a9263_init(void) +{ + struct at91sam926x_board_cfg cfg; + + cfg.pio = IOMEM(AT91SAM9263_BASE_PIOD); + cfg.sdramc = IOMEM(AT91SAM9263_BASE_SDRAMC0); + cfg.ebi_pio_is_peripha = true; + cfg.matrix_csa = AT91_MATRIX_EBI0CSA; + + usb_a9263_board_config(&cfg); + at91sam926x_board_init(&cfg); + + barebox_arm_entry(AT91_CHIPSELECT_1, at91_get_sdram_size(cfg.sdramc), + NULL); +} + +void __naked __bare_init barebox_arm_reset_vector(void) +{ + arm_cpu_lowlevel_init(); + + arm_setup_stack(AT91SAM9263_SRAM0_BASE + AT91SAM9263_SRAM0_SIZE - 16); + + usb_a9263_init(); +} diff --git a/arch/arm/configs/at91sam9263ek_defconfig b/arch/arm/configs/at91sam9263ek_defconfig index b28614d43e..e8ad841fa1 100644 --- a/arch/arm/configs/at91sam9263ek_defconfig +++ b/arch/arm/configs/at91sam9263ek_defconfig @@ -1,10 +1,12 @@ CONFIG_ARCH_AT91SAM9263=y +CONFIG_AT91_MULTI_BOARDS=y +CONFIG_MACH_AT91SAM9263EK=y CONFIG_BAREBOX_MAX_IMAGE_SIZE=0x40000 CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y -CONFIG_PBL_IMAGE=y CONFIG_MMU=y CONFIG_EXPERIMENTAL=y CONFIG_MALLOC_TLSF=y +CONFIG_RELOCATABLE=y CONFIG_PROMPT="9263-EK:" CONFIG_GLOB=y CONFIG_HUSH_FANCY_PROMPT=y @@ -18,6 +20,7 @@ CONFIG_CONSOLE_ACTIVATE_ALL=y CONFIG_DEFAULT_ENVIRONMENT_GENERIC=y # CONFIG_CMD_ARM_CPUINFO is not set CONFIG_LONGHELP=y +CONFIG_CMD_IOMEM=y CONFIG_CMD_MEMINFO=y # CONFIG_CMD_BOOTU is not set CONFIG_CMD_GO=y @@ -36,6 +39,7 @@ CONFIG_CMD_EDIT=y CONFIG_CMD_SPLASH=y CONFIG_CMD_READLINE=y CONFIG_CMD_TIMEOUT=y +CONFIG_CMD_CLK=y CONFIG_CMD_FLASH=y CONFIG_CMD_GPIO=y CONFIG_CMD_LED=y @@ -43,6 +47,7 @@ CONFIG_CMD_LED_TRIGGER=y CONFIG_CMD_OFTREE=y CONFIG_NET=y CONFIG_NET_NFS=y +CONFIG_OF_BAREBOX_DRIVERS=y CONFIG_DRIVER_NET_MACB=y # CONFIG_SPI is not set CONFIG_MTD=y @@ -62,9 +67,12 @@ CONFIG_VIDEO=y CONFIG_DRIVER_VIDEO_ATMEL=y CONFIG_MCI=y CONFIG_MCI_ATMEL=y +CONFIG_SRAM=y CONFIG_LED=y CONFIG_LED_GPIO=y +CONFIG_LED_GPIO_OF=y CONFIG_LED_TRIGGERS=y +CONFIG_KEYBOARD_GPIO=y CONFIG_FS_TFTP=y CONFIG_FS_FAT=y CONFIG_FS_FAT_LFN=y diff --git a/arch/arm/configs/mmccpu_defconfig b/arch/arm/configs/mmccpu_defconfig deleted file mode 100644 index 8143b9862d..0000000000 --- a/arch/arm/configs/mmccpu_defconfig +++ /dev/null @@ -1,37 +0,0 @@ -CONFIG_ARCH_AT91SAM9263=y -CONFIG_MACH_MMCCPU=y -CONFIG_ARM_OPTIMZED_STRING_FUNCTIONS=y -CONFIG_GLOB=y -CONFIG_PROMPT_HUSH_PS2="y" -CONFIG_CMDLINE_EDITING=y -CONFIG_AUTO_COMPLETE=y -CONFIG_BOOTM_SHOW_TYPE=y -CONFIG_PARTITION=y -CONFIG_DEFAULT_ENVIRONMENT_PATH="arch/arm/boards/mmccpu/env" -CONFIG_LONGHELP=y -CONFIG_CMD_MEMINFO=y -CONFIG_CMD_GO=y -CONFIG_CMD_RESET=y -CONFIG_CMD_PARTITION=y -CONFIG_CMD_EXPORT=y -CONFIG_CMD_LOADENV=y -CONFIG_CMD_PRINTENV=y -CONFIG_CMD_SAVEENV=y -CONFIG_CMD_SLEEP=y -CONFIG_CMD_DHCP=y -CONFIG_CMD_PING=y -CONFIG_CMD_TFTP=y -CONFIG_CMD_EDIT=y -CONFIG_CMD_READLINE=y -CONFIG_CMD_TIMEOUT=y -CONFIG_CMD_CRC=y -CONFIG_CMD_FLASH=y -CONFIG_CMD_GPIO=y -CONFIG_NET=y -CONFIG_DRIVER_NET_MACB=y -# CONFIG_SPI is not set -CONFIG_I2C=y -CONFIG_MTD=y -CONFIG_DRIVER_CFI=y -CONFIG_CFI_BUFFER_WRITE=y -CONFIG_FS_TFTP=y diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index 4f13d4e372..0526a6f407 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -104,7 +104,7 @@ pbl-dtb-$(CONFIG_MACH_ZII_VF610_DEV) += \ vf610-zii-cfu1-rev-a.dtb.o \ vf610-zii-spu3-rev-a.dtb.o \ vf610-zii-scu4-aib-rev-c.dtb.o - +pbl-dtb-$(CONFIG_MACH_AT91SAM9263EK_DT) += at91sam9263ek.dtb.o pbl-dtb-$(CONFIG_MACH_AT91SAM9X5EK) += at91sam9x5ek.dtb.o clean-files := *.dtb *.dtb.S .*.dtc .*.pre .*.dts *.dtb.lzo diff --git a/arch/arm/dts/at91sam9263ek.dts b/arch/arm/dts/at91sam9263ek.dts new file mode 100644 index 0000000000..3681b845d9 --- /dev/null +++ b/arch/arm/dts/at91sam9263ek.dts @@ -0,0 +1,48 @@ +#include <arm/at91sam9263ek.dts> +/ { + chosen { + environment@0 { + compatible = "barebox,environment"; + device-path = &nand_controller, "partname:bareboxenv"; + }; + }; + + ahb { + apb { + mmc1: mmc@fff84000 { + pinctrl-0 = < + &pinctrl_board_mmc1 + &pinctrl_mmc1_clk + &pinctrl_mmc1_slot0_cmd_dat0 + &pinctrl_mmc1_slot0_dat1_3>; + cd-gpios = <&pioE 18 GPIO_ACTIVE_HIGH>; + status = "okay"; + slot@0 { + reg = <0>; + bus-width = <4>; + cd-gpios = <&pioE 18 GPIO_ACTIVE_HIGH>; + wp-gpios = <&pioE 19 GPIO_ACTIVE_HIGH>; + }; + }; + }; + }; + + + pinctrl@fffff200 { + pinctrl_board_mmc1: mmc1-board { + atmel,pins = + <AT91_PIOE 18 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH /* PE18 gpio CD pin pull up and deglitch */ + AT91_PIOE 19 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP>; /* PE19 gpio WP pin pull up */ + }; + }; +}; + +&pioB { + /* Enable the 50MHz oscillator for Ethernet PHY */ + phy_50mhz { + gpio-hog; + gpios = <27 GPIO_ACTIVE_LOW>; + output-high; + line-name = "PHY 50 MHz oscillator"; + }; +}; diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig index 3b572ebdfe..0a9cf3ad13 100644 --- a/arch/arm/mach-at91/Kconfig +++ b/arch/arm/mach-at91/Kconfig @@ -20,6 +20,13 @@ config COMMON_CLK_AT91 select COMMON_CLK select MFD_SYSCON +config MACH_AT91SAM9263EK_DT + def_bool y + depends on MACH_AT91SAM9263EK && OFDEVICE + help + Enabled for at91sam9263ek - evaluation kit. + But only if we need the device tree (bootstrap do not use DT) + config HAVE_AT91_SMD bool @@ -29,7 +36,12 @@ config HAVE_AT91_H32MX config HAVE_AT91_GENERATED_CLK bool -config HAVE_AT91_LOWLEVEL_INIT +# Select if board support bootstrap +config HAVE_AT91_BOOTSTRAP + bool + +# Select if board uses the common at91sam926x_board_init +config AT91SAM926X_BOARD_INIT bool config AT91SAM9_SMC @@ -71,9 +83,6 @@ config AT91SAM9G45_RESET config HAVE_AT91_LOAD_BAREBOX_SRAM bool -config AT91SAM9_LOWLEVEL_INIT - bool - comment "Atmel AT91 System-on-Chip" config SOC_AT91RM9200 @@ -88,7 +97,6 @@ config SOC_AT91SAM9260 select HAVE_AT91_DBGU0 select HAS_MACB select AT91SAM9_RESET - select AT91SAM9_LOWLEVEL_INIT help Select this if you are using one of Atmel's AT91SAM9260, AT91SAM9XE or AT91SAM9G20 SoC. @@ -98,7 +106,6 @@ config SOC_AT91SAM9261 select SOC_AT91SAM9 select HAVE_AT91_DBGU0 select AT91SAM9_RESET - select AT91SAM9_LOWLEVEL_INIT help Select this if you are using one of Atmel's AT91SAM9261 or AT91SAM9G10 SoC. @@ -108,7 +115,6 @@ config SOC_AT91SAM9263 select HAVE_AT91_DBGU1 select HAS_MACB select AT91SAM9_RESET - select AT91SAM9_LOWLEVEL_INIT select HAVE_AT91_LOAD_BAREBOX_SRAM config SOC_AT91SAM9G45 @@ -229,6 +235,8 @@ config SUPPORT_CALAO_DAB_MMX config SUPPORT_CALAO_MOB_TNY_MD2 bool +if !AT91_MULTI_BOARDS + # ---------------------------------------------------------- if ARCH_AT91RM9200 @@ -306,7 +314,8 @@ config MACH_AT91SAM9261EK select HAS_DM9000 select HAVE_AT91_DATAFLASH_CARD select HAVE_NAND_ATMEL_BUSWIDTH_16 - select HAVE_AT91_LOWLEVEL_INIT + select HAVE_AT91_BOOTSTRAP + select AT91SAM926X_BOARD_INIT help Select this if you are using Atmel's AT91SAM9261-EK Evaluation Kit. <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3820> @@ -314,7 +323,8 @@ config MACH_AT91SAM9261EK config MACH_PM9261 bool "Ronetix PM9261" select HAS_DM9000 - select HAVE_AT91_LOWLEVEL_INIT + select HAVE_AT91_BOOTSTRAP + select AT91SAM926X_BOARD_INIT help Say y here if you are using the Ronetix PM9261 Board @@ -398,34 +408,26 @@ if ARCH_AT91SAM9263 choice prompt "AT91SAM9263 Board Type" -config MACH_AT91SAM9263EK - bool "Atmel AT91SAM9263-EK" - select HAVE_AT91_LOWLEVEL_INIT - select HAVE_NAND_ATMEL_BUSWIDTH_16 - help - Say y here if you are using Atmel's AT91SAM9263-EK Evaluation board - -config MACH_MMCCPU - bool "Bucyrus MMC-CPU" - help - Say y here if you are using the Bucyrus MMC-CPU - config MACH_PM9263 bool "Ronetix PM9263" - select HAVE_AT91_LOWLEVEL_INIT + select HAVE_AT91_BOOTSTRAP + select AT91SAM926X_BOARD_INIT help Say y here if you are using the Ronetix PM9263 Board config MACH_TNY_A9263 bool "CALAO TNY-A9263" select SUPPORT_CALAO_MOB_TNY_MD2 + select HAVE_AT91_BOOTSTRAP + select AT91SAM926X_BOARD_INIT help Select this if you are using a Calao Systems TNY-A9263. <http://www.calao-systems.com> config MACH_USB_A9263 bool "CALAO USB-A9263" - select HAVE_AT91_LOWLEVEL_INIT + select HAVE_AT91_BOOTSTRAP + select AT91SAM926X_BOARD_INIT help Select this if you are using a Calao Systems USB-A9263. <http://www.calao-systems.com> @@ -518,6 +520,7 @@ config MACH_SAMA5D4_XPLAINED endchoice endif +endif # ---------------------------------------------------------- @@ -528,6 +531,18 @@ config AT91_MULTI_BOARDS if AT91_MULTI_BOARDS +config MACH_AT91SAM9263EK + bool "Atmel AT91SAM9263-EK" + depends on ARCH_AT91SAM9263 + select OFDEVICE + select COMMON_CLK_OF_PROVIDER + select HAVE_AT91_USB_CLK + select HAVE_NAND_ATMEL_BUSWIDTH_16 + select HAVE_AT91_BOOTSTRAP + select AT91SAM926X_BOARD_INIT + help + Say y here if you are using Atmel's AT91SAM9263-EK Evaluation board + config MACH_AT91SAM9X5EK bool "Atmel AT91SAM9x5 Series Evaluation Kit" depends on ARCH_AT91SAM9X5 @@ -596,7 +611,7 @@ config CALAO_MB_QIL_A9260 config AT91_BOOTSTRAP bool "at91 bootstrap" - depends on HAVE_AT91_LOWLEVEL_INIT + depends on HAVE_AT91_BOOTSTRAP select BOOTSTRAP config AT91_LOAD_BAREBOX_SRAM diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile index 0892fb4b57..664201ceb6 100644 --- a/arch/arm/mach-at91/Makefile +++ b/arch/arm/mach-at91/Makefile @@ -1,4 +1,4 @@ -obj-y += setup.o irq_fixup.o +obj-y += setup.o ifeq ($(CONFIG_COMMON_CLK_OF_PROVIDER),) obj-y += clock.o @@ -6,19 +6,7 @@ endif obj-$(CONFIG_CMD_AT91_BOOT_TEST) += boot_test_cmd.o -obj-$(CONFIG_AT91_BOOTSTRAP) += bootstrap.o -sam926x_lowlevel_init-$(CONFIG_AT91SAM9_LOWLEVEL_INIT) = at91sam926x_lowlevel_init.o -lowlevel_init-$(CONFIG_HAVE_AT91_LOWLEVEL_INIT) = $(sam926x_lowlevel_init-y) -lowlevel_init-$(CONFIG_SOC_AT91SAM9260) += at91sam9260_lowlevel_init.o -lowlevel_init-$(CONFIG_SOC_AT91SAM9261) += at91sam9261_lowlevel_init.o -lowlevel_init-$(CONFIG_SOC_AT91SAM9263) += at91sam9263_lowlevel_init.o -lowlevel_init-$(CONFIG_SOC_AT91SAM9G45) += at91sam9g45_lowlevel_init.o -lowlevel_init-$(CONFIG_SOC_AT91SAM9X5) += at91sam9x5_lowlevel_init.o -lowlevel_init-$(CONFIG_SOC_AT91SAM9N12) += at91sam9n12_lowlevel_init.o -lowlevel_init-$(CONFIG_ARCH_AT91RM9200) = at91rm9200_lowlevel_init.o -lowlevel_init-$(CONFIG_ARCH_SAMA5D3) += sama5d3_lowlevel_init.o -lowlevel_init-$(CONFIG_ARCH_SAMA5D4) += sama5d3_lowlevel_init.o -lwl-y += $(lowlevel_init-y) +obj-$(CONFIG_AT91_BOOTSTRAP) += bootstrap.o obj-$(CONFIG_AT91SAM9_RESET) += at91sam9_reset.o obj-$(CONFIG_AT91SAM9G45_RESET) += at91sam9g45_reset.o @@ -29,8 +17,10 @@ obj-$(CONFIG_AT91SAM9_SMC) += sam9_smc.o obj-$(CONFIG_ARCH_AT91RM9200) += at91rm9200.o at91rm9200_time.o at91rm9200_devices.o obj-$(CONFIG_ARCH_AT91SAM9260) += at91sam9260.o at91sam9260_devices.o obj-$(CONFIG_ARCH_AT91SAM9261) += at91sam9261.o at91sam9261_devices.o -obj-$(CONFIG_ARCH_AT91SAM9263) += at91sam9263.o at91sam9263_devices.o obj-$(CONFIG_ARCH_AT91SAM9G10) += at91sam9261.o at91sam9261_devices.o +ifeq ($(CONFIG_OFDEVICE),) +obj-$(CONFIG_ARCH_AT91SAM9263) += at91sam9263.o at91sam9263_devices.o +endif obj-$(CONFIG_ARCH_AT91SAM9G20) += at91sam9260.o at91sam9260_devices.o obj-$(CONFIG_ARCH_AT91SAM9G45) += at91sam9g45.o at91sam9g45_devices.o obj-$(CONFIG_ARCH_AT91SAM9X5) += at91sam9x5_devices.o diff --git a/arch/arm/mach-at91/at91rm9200.c b/arch/arm/mach-at91/at91rm9200.c index d12e8d97bf..ba680eb81f 100644 --- a/arch/arm/mach-at91/at91rm9200.c +++ b/arch/arm/mach-at91/at91rm9200.c @@ -4,7 +4,6 @@ #include <mach/hardware.h> #include <mach/at91_pmc.h> -#include "soc.h" #include "clock.h" #include "generic.h" @@ -235,6 +234,9 @@ static void __init at91rm9200_initialize(void) at91_add_rm9200_gpio(3, AT91RM9200_BASE_PIOD); } -AT91_SOC_START(rm9200) - .init = at91rm9200_initialize, -AT91_SOC_END +static int at91rm9200_setup(void) +{ + at91_boot_soc = at91rm9200_initialize; + return 0; +} +pure_initcall(at91rm9200_setup); diff --git a/arch/arm/mach-at91/at91sam9260.c b/arch/arm/mach-at91/at91sam9260.c index fbd7884141..8975bf4665 100644 --- a/arch/arm/mach-at91/at91sam9260.c +++ b/arch/arm/mach-at91/at91sam9260.c @@ -4,7 +4,6 @@ #include <mach/hardware.h> #include <mach/at91_pmc.h> -#include "soc.h" #include "generic.h" #include "clock.h" @@ -236,6 +235,9 @@ static void at91sam9260_initialize(void) at91_add_sam9_smc(DEVICE_ID_SINGLE, AT91SAM9260_BASE_SMC, 0x200); } -AT91_SOC_START(sam9260) - .init = at91sam9260_initialize, -AT91_SOC_END +static int at91sam9260_setup(void) +{ + at91_boot_soc = at91sam9260_initialize; + return 0; +} +pure_initcall(at91sam9260_setup); diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c index 99919b3f82..1cb8983514 100644 --- a/arch/arm/mach-at91/at91sam9260_devices.c +++ b/arch/arm/mach-at91/at91sam9260_devices.c @@ -19,6 +19,7 @@ #include <mach/at91_pmc.h> #include <mach/at91sam9260_matrix.h> #include <mach/at91sam9_sdramc.h> +#include <mach/at91_rtt.h> #include <mach/iomux.h> #include <mach/io.h> #include <mach/cpu.h> diff --git a/arch/arm/mach-at91/at91sam9260_lowlevel_init.c b/arch/arm/mach-at91/at91sam9260_lowlevel_init.c deleted file mode 100644 index 7f84185ef9..0000000000 --- a/arch/arm/mach-at91/at91sam9260_lowlevel_init.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> - * - * Under GPLv2 - */ - -#define __LOWLEVEL_INIT__ - -#include <common.h> -#include <asm/system.h> -#include <asm/barebox-arm.h> -#include <asm/barebox-arm-head.h> -#include <mach/hardware.h> -#include <mach/at91_pmc.h> -#include <mach/at91_pio.h> -#include <mach/at91_rstc.h> -#include <mach/at91_wdt.h> -#include <mach/at91sam9_matrix.h> -#include <mach/at91sam9_sdramc.h> -#include <mach/at91sam9_smc.h> -#include <mach/at91_lowlevel_init.h> -#include <mach/io.h> -#include <init.h> -#include <linux/sizes.h> - -void __bare_init at91sam9260_lowlevel_init(void) -{ - struct at91sam926x_lowlevel_cfg cfg; - - cfg.pio = IOMEM(AT91SAM9260_BASE_PIOC); - cfg.sdramc = IOMEM(AT91SAM9260_BASE_SDRAMC); - cfg.ebi_pio_is_peripha = false; - cfg.matrix_csa = AT91_MATRIX_EBICSA; - - at91sam926x_lowlevel_init(&cfg); - - barebox_arm_entry(AT91_CHIPSELECT_1, at91_get_sdram_size(cfg.sdramc), - NULL); -} - -void __naked __bare_init barebox_arm_reset_vector(void) -{ - arm_cpu_lowlevel_init(); - - arm_setup_stack(AT91SAM9260_SRAM_BASE + AT91SAM9260_SRAM_SIZE - 16); - - at91sam9260_lowlevel_init(); -} diff --git a/arch/arm/mach-at91/at91sam9261.c b/arch/arm/mach-at91/at91sam9261.c index 37a65ecd3d..35aaa9c96a 100644 --- a/arch/arm/mach-at91/at91sam9261.c +++ b/arch/arm/mach-at91/at91sam9261.c @@ -4,7 +4,6 @@ #include <mach/hardware.h> #include <mach/at91_pmc.h> -#include "soc.h" #include "generic.h" #include "clock.h" @@ -228,6 +227,9 @@ static void at91sam9261_initialize(void) at91_add_sam9_smc(DEVICE_ID_SINGLE, AT91SAM9261_BASE_SMC, 0x200); } -AT91_SOC_START(sam9261) - .init = at91sam9261_initialize, -AT91_SOC_END +static int at91sam9261_setup(void) +{ + at91_boot_soc = at91sam9261_initialize; + return 0; +} +pure_initcall(at91sam9261_setup); diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c index e63e0e7516..6be390937d 100644 --- a/arch/arm/mach-at91/at91sam9261_devices.c +++ b/arch/arm/mach-at91/at91sam9261_devices.c @@ -18,6 +18,7 @@ #include <mach/at91_pmc.h> #include <mach/at91sam9261_matrix.h> #include <mach/at91sam9_sdramc.h> +#include <mach/at91_rtt.h> #include <mach/board.h> #include <mach/iomux.h> #include <mach/io.h> diff --git a/arch/arm/mach-at91/at91sam9261_lowlevel_init.c b/arch/arm/mach-at91/at91sam9261_lowlevel_init.c deleted file mode 100644 index 0ad7f0a0c5..0000000000 --- a/arch/arm/mach-at91/at91sam9261_lowlevel_init.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> - * - * Under GPLv2 - */ - -#define __LOWLEVEL_INIT__ - -#include <common.h> -#include <asm/system.h> -#include <asm/barebox-arm.h> -#include <asm/barebox-arm-head.h> -#include <mach/hardware.h> -#include <mach/at91_pmc.h> -#include <mach/at91_pio.h> -#include <mach/at91_rstc.h> -#include <mach/at91_wdt.h> -#include <mach/at91sam9_matrix.h> -#include <mach/at91sam9_sdramc.h> -#include <mach/at91sam9_smc.h> -#include <mach/at91_lowlevel_init.h> -#include <mach/io.h> -#include <init.h> -#include <linux/sizes.h> - -void __bare_init at91sam9261_lowlevel_init(void) -{ - struct at91sam926x_lowlevel_cfg cfg; - - cfg.pio = IOMEM(AT91SAM9261_BASE_PIOC); - cfg.sdramc = IOMEM(AT91SAM9261_BASE_SDRAMC); - cfg.ebi_pio_is_peripha = false; - cfg.matrix_csa = AT91_MATRIX_EBICSA; - - at91sam926x_lowlevel_init(&cfg); - - barebox_arm_entry(AT91_CHIPSELECT_1, at91_get_sdram_size(cfg.sdramc), - NULL); -} - -void __naked __bare_init barebox_arm_reset_vector(void) -{ - arm_cpu_lowlevel_init(); - - arm_setup_stack(AT91SAM9261_SRAM_BASE + AT91SAM9261_SRAM_SIZE - 16); - - at91sam9261_lowlevel_init(); -} diff --git a/arch/arm/mach-at91/at91sam9263.c b/arch/arm/mach-at91/at91sam9263.c index 35d187b4b5..ee48115ea8 100644 --- a/arch/arm/mach-at91/at91sam9263.c +++ b/arch/arm/mach-at91/at91sam9263.c @@ -4,7 +4,6 @@ #include <mach/hardware.h> #include <mach/at91_pmc.h> -#include "soc.h" #include "clock.h" #include "generic.h" @@ -249,6 +248,9 @@ static void at91sam9263_initialize(void) at91_add_sam9_smc(1, AT91SAM9263_BASE_SMC1, 0x200); } -AT91_SOC_START(sam9263) - .init = at91sam9263_initialize, -AT91_SOC_END +static int at91sam9263_setup(void) +{ + at91_boot_soc = at91sam9263_initialize; + return 0; +} +pure_initcall(at91sam9263_setup); diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c index 559b77e9d8..6302684b2d 100644 --- a/arch/arm/mach-at91/at91sam9263_devices.c +++ b/arch/arm/mach-at91/at91sam9263_devices.c @@ -18,6 +18,7 @@ #include <mach/at91_pmc.h> #include <mach/at91sam9263_matrix.h> #include <mach/at91sam9_sdramc.h> +#include <mach/at91_rtt.h> #include <mach/board.h> #include <mach/iomux.h> #include <mach/io.h> diff --git a/arch/arm/mach-at91/at91sam9263_lowlevel_init.c b/arch/arm/mach-at91/at91sam9263_lowlevel_init.c deleted file mode 100644 index 0be84551f8..0000000000 --- a/arch/arm/mach-at91/at91sam9263_lowlevel_init.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2009-2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> - * - * Under GPLv2 - */ - -#define __LOWLEVEL_INIT__ - -#include <common.h> -#include <asm/system.h> -#include <asm/barebox-arm.h> -#include <asm/barebox-arm-head.h> -#include <mach/hardware.h> -#include <mach/at91_pmc.h> -#include <mach/at91_pio.h> -#include <mach/at91_rstc.h> -#include <mach/at91_wdt.h> -#include <mach/at91sam9_matrix.h> -#include <mach/at91sam9_sdramc.h> -#include <mach/at91sam9_smc.h> -#include <mach/at91_lowlevel_init.h> -#include <mach/io.h> -#include <init.h> -#include <linux/sizes.h> - -void __bare_init at91sam9263_lowlevel_init(void) -{ - struct at91sam926x_lowlevel_cfg cfg; - - cfg.pio = IOMEM(AT91SAM9263_BASE_PIOD); - cfg.sdramc = IOMEM(AT91SAM9263_BASE_SDRAMC0); - cfg.ebi_pio_is_peripha = true; - cfg.matrix_csa = AT91_MATRIX_EBI0CSA; - - at91sam926x_lowlevel_init(&cfg); - - barebox_arm_entry(AT91_CHIPSELECT_1, at91_get_sdram_size(cfg.sdramc), - NULL); -} - -void __naked __bare_init barebox_arm_reset_vector(void) -{ - arm_cpu_lowlevel_init(); - - arm_setup_stack(AT91SAM9263_SRAM0_BASE + AT91SAM9263_SRAM0_SIZE - 16); - - at91sam9263_lowlevel_init(); -} diff --git a/arch/arm/mach-at91/at91sam9g45.c b/arch/arm/mach-at91/at91sam9g45.c index ce6ce90db2..c70036b389 100644 --- a/arch/arm/mach-at91/at91sam9g45.c +++ b/arch/arm/mach-at91/at91sam9g45.c @@ -6,7 +6,6 @@ #include <mach/at91_pmc.h> #include <mach/cpu.h> -#include "soc.h" #include "generic.h" #include "clock.h" @@ -264,6 +263,9 @@ static void at91sam9g45_initialize(void) at91_add_sam9_smc(DEVICE_ID_SINGLE, AT91SAM9G45_BASE_SMC, 0x200); } -AT91_SOC_START(sam9g45) - .init = at91sam9g45_initialize, -AT91_SOC_END +static int at91sam9g45_setup(void) +{ + at91_boot_soc = at91sam9g45_initialize; + return 0; +} +pure_initcall(at91sam9g45_setup); diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c index bc41320405..67ca3590c3 100644 --- a/arch/arm/mach-at91/at91sam9g45_devices.c +++ b/arch/arm/mach-at91/at91sam9g45_devices.c @@ -18,6 +18,7 @@ #include <mach/at91_pmc.h> #include <mach/at91sam9g45_matrix.h> #include <mach/at91sam9_ddrsdr.h> +#include <mach/at91_rtt.h> #include <mach/board.h> #include <mach/iomux.h> #include <mach/io.h> diff --git a/arch/arm/mach-at91/at91sam9n12.c b/arch/arm/mach-at91/at91sam9n12.c index c551f9a744..7ab44e4964 100644 --- a/arch/arm/mach-at91/at91sam9n12.c +++ b/arch/arm/mach-at91/at91sam9n12.c @@ -6,7 +6,6 @@ #include <mach/io.h> #include <mach/cpu.h> -#include "soc.h" #include "generic.h" #include "clock.h" @@ -220,6 +219,9 @@ static void at91sam9n12_initialize(void) at91_add_sam9_smc(DEVICE_ID_SINGLE, AT91SAM9N12_BASE_SMC, 0x200); } -AT91_SOC_START(sam9n12) - .init = at91sam9n12_initialize, -AT91_SOC_END +static int at91sam9n12_setup(void) +{ + at91_boot_soc = at91sam9n12_initialize; + return 0; +} +pure_initcall(at91sam9n12_setup); diff --git a/arch/arm/mach-at91/generic.h b/arch/arm/mach-at91/generic.h index a47bcb2c57..d125e5ffd0 100644 --- a/arch/arm/mach-at91/generic.h +++ b/arch/arm/mach-at91/generic.h @@ -8,8 +8,15 @@ * published by the Free Software Foundation. */ - /* Clocks */ +/* function called by setup to perform late init */ +extern void (*at91_boot_soc)(void); + +/* Clocks */ +#ifdef CONFIG_COMMON_CLK_OF_PROVIDER +static inline int __init at91_clock_init(void) { return 0; } +#else extern int __init at91_clock_init(void); +#endif static inline struct device_d *at91_add_rm9200_gpio(int id, resource_size_t start) { @@ -35,5 +42,3 @@ static inline struct device_d *at91_add_sam9_smc(int id, resource_size_t start, return add_generic_device("at91sam9-smc", id, NULL, start, size, IORESOURCE_MEM, NULL); } - -void at91_rtt_irq_fixup(void *base); diff --git a/arch/arm/mach-at91/include/mach/at91_lowlevel_init.h b/arch/arm/mach-at91/include/mach/at91_lowlevel_init.h deleted file mode 100644 index 6b37e49e96..0000000000 --- a/arch/arm/mach-at91/include/mach/at91_lowlevel_init.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2009-2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> - * - * Under GPLv2 - */ - -#ifndef __AT91_LOWLEVEL_INIT_H__ -#define __AT91_LOWLEVEL_INIT_H__ - -struct at91sam926x_lowlevel_cfg { - /* SoC specific */ - void __iomem *pio; - void __iomem *sdramc; - u32 ebi_pio_is_peripha; - u32 matrix_csa; - - /* board specific */ - u32 wdt_mr; - u32 ebi_pio_pdr; - u32 ebi_pio_ppudr; - u32 ebi_csa; - u32 smc_cs; - u32 smc_mode; - u32 smc_cycle; - u32 smc_pulse; - u32 smc_setup; - u32 pmc_mor; - u32 pmc_pllar; - u32 pmc_mckr1; - u32 pmc_mckr2; - u32 sdrc_cr; - u32 sdrc_tr1; - u32 sdrc_mdr; - u32 sdrc_tr2; - u32 rstc_rmr; -}; - -#ifdef CONFIG_HAVE_AT91_LOWLEVEL_INIT -void at91sam926x_lowlevel_board_config(struct at91sam926x_lowlevel_cfg *cfg); -void at91sam926x_lowlevel_init(struct at91sam926x_lowlevel_cfg *cfg); -#else -static inline void at91sam926x_lowlevel_board_config(struct at91sam926x_lowlevel_cfg *cfg) {} -static inline void at91sam926x_lowlevel_init(struct at91sam926x_lowlevel_cfg *cfg) {} -#endif - -#endif /* __AT91_LOWLEVEL_INIT_H__ */ diff --git a/arch/arm/mach-at91/include/mach/at91_rtt.h b/arch/arm/mach-at91/include/mach/at91_rtt.h index 7ec75de8bb..ad29df1918 100644 --- a/arch/arm/mach-at91/include/mach/at91_rtt.h +++ b/arch/arm/mach-at91/include/mach/at91_rtt.h @@ -16,6 +16,8 @@ #ifndef AT91_RTT_H #define AT91_RTT_H +#include <io.h> + #define AT91_RTT_MR 0x00 /* Real-time Mode Register */ #define AT91_RTT_RTPRES (0xffff << 0) /* Real-time Timer Prescaler Value */ #define AT91_RTT_ALMIEN (1 << 16) /* Alarm Interrupt Enable */ @@ -32,4 +34,18 @@ #define AT91_RTT_ALMS (1 << 0) /* Real-time Alarm Status */ #define AT91_RTT_RTTINC (1 << 1) /* Real-time Timer Increment */ + +/* + * As the RTT is powered by the backup power so if the interrupt + * is still on when the kernel start, the kernel will end up with + * dead lock interrupt that it can not clear. Because the interrupt line is + * shared with the basic timer (PIT) on AT91_ID_SYS. + */ +static inline void at91_rtt_irq_fixup(void *base) +{ + void __iomem *reg = base + AT91_RTT_MR; + u32 mr = readl(reg); + + writel(mr & ~(AT91_RTT_ALMIEN | AT91_RTT_RTTINCIEN), reg); +} #endif diff --git a/arch/arm/mach-at91/at91sam926x_lowlevel_init.c b/arch/arm/mach-at91/include/mach/at91sam926x_board_init.h index 5dd8bc4e60..70ae903374 100644 --- a/arch/arm/mach-at91/at91sam926x_lowlevel_init.c +++ b/arch/arm/mach-at91/include/mach/at91sam926x_board_init.h @@ -1,38 +1,59 @@ +#ifndef __AT91SAM926X_BOARD_INIT_H__ +#define __AT91SAM926X_BOARD_INIT_H__ /* * Copyright (C) 2008 Ronetix Ilko Iliev (www.ronetix.at) * Copyright (C) 2009-2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> * * Under GPLv2 - */ - -#define __LOWLEVEL_INIT__ + */ #include <common.h> -#include <asm/system.h> -#include <asm/barebox-arm.h> -#include <asm/barebox-arm-head.h> -#include <mach/hardware.h> -#include <mach/at91_pmc.h> -#include <mach/at91_pio.h> -#include <mach/at91_rstc.h> -#include <mach/at91_wdt.h> -#include <mach/at91sam9_matrix.h> +#include <init.h> + #include <mach/at91sam9_sdramc.h> #include <mach/at91sam9_smc.h> -#include <mach/at91_lowlevel_init.h> +#include <mach/at91_rstc.h> +#include <mach/at91_pio.h> +#include <mach/at91_pmc.h> +#include <mach/at91_wdt.h> +#include <mach/hardware.h> #include <mach/gpio.h> -#include <mach/io.h> -#include <init.h> -#include <linux/sizes.h> - -#include "gpio.h" -static void inline access_sdram(void) +struct at91sam926x_board_cfg { + /* SoC specific */ + void __iomem *pio; + void __iomem *sdramc; + u32 ebi_pio_is_peripha; + u32 matrix_csa; + + /* board specific */ + u32 wdt_mr; + u32 ebi_pio_pdr; + u32 ebi_pio_ppudr; + u32 ebi_csa; + u32 smc_cs; + u32 smc_mode; + u32 smc_cycle; + u32 smc_pulse; + u32 smc_setup; + u32 pmc_mor; + u32 pmc_pllar; + u32 pmc_mckr1; + u32 pmc_mckr2; + u32 sdrc_cr; + u32 sdrc_tr1; + u32 sdrc_mdr; + u32 sdrc_tr2; + u32 rstc_rmr; +}; + + +static void __always_inline access_sdram(void) { writel(0x00000000, AT91_SDRAM_BASE); } -static void inline pmc_check_mckrdy(void) +static void __always_inline pmc_check_mckrdy(void) { u32 r; @@ -41,7 +62,7 @@ static void inline pmc_check_mckrdy(void) } while (!(r & AT91_PMC_MCKRDY)); } -static int inline running_in_sram(void) +static int __always_inline running_in_sram(void) { u32 addr = get_pc(); @@ -49,75 +70,59 @@ static int inline running_in_sram(void) return addr == 0; } -#define at91_sdramc_read(field) \ - __raw_readl(cfg->sdramc + field) - -#define at91_sdramc_write(field, value) \ - __raw_writel(value, cfg->sdramc + field) - -void __bare_init at91sam926x_sdramc_init(struct at91sam926x_lowlevel_cfg *cfg) +static void __always_inline at91sam926x_sdramc_init(struct at91sam926x_board_cfg *cfg) { u32 r; int i; int in_sram = running_in_sram(); - /* - * SDRAMC Check if Refresh Timer Counter is already initialized - */ - r = at91_sdramc_read(AT91_SDRAMC_TR); + /* SDRAMC Check if Refresh Timer Counter is already initialized */ + r = __raw_readl(cfg->sdramc + AT91_SDRAMC_TR); if (r && !in_sram) return; /* SDRAMC_MR : Normal Mode */ - at91_sdramc_write(AT91_SDRAMC_MR, AT91_SDRAMC_MODE_NORMAL); + __raw_writel(AT91_SDRAMC_MR, cfg->sdramc + AT91_SDRAMC_MODE_NORMAL); /* SDRAMC_TR - Refresh Timer register */ - at91_sdramc_write(AT91_SDRAMC_TR, cfg->sdrc_tr1); + __raw_writel(AT91_SDRAMC_TR, cfg->sdramc + cfg->sdrc_tr1); /* SDRAMC_CR - Configuration register*/ - at91_sdramc_write(AT91_SDRAMC_CR, cfg->sdrc_cr); + __raw_writel(AT91_SDRAMC_CR, cfg->sdramc + cfg->sdrc_cr); /* Memory Device Type */ - at91_sdramc_write(AT91_SDRAMC_MDR, cfg->sdrc_mdr); + __raw_writel(AT91_SDRAMC_MDR, cfg->sdramc + cfg->sdrc_mdr); /* SDRAMC_MR : Precharge All */ - at91_sdramc_write(AT91_SDRAMC_MR, AT91_SDRAMC_MODE_PRECHARGE); - - /* access SDRAM */ + __raw_writel(AT91_SDRAMC_MR, cfg->sdramc + AT91_SDRAMC_MODE_PRECHARGE); access_sdram(); /* SDRAMC_MR : refresh */ - at91_sdramc_write(AT91_SDRAMC_MR, AT91_SDRAMC_MODE_REFRESH); + __raw_writel(AT91_SDRAMC_MR, cfg->sdramc + AT91_SDRAMC_MODE_REFRESH); /* access SDRAM 8 times */ for (i = 0; i < 8; i++) access_sdram(); /* SDRAMC_MR : Load Mode Register */ - at91_sdramc_write(AT91_SDRAMC_MR, AT91_SDRAMC_MODE_LMR); - - /* access SDRAM */ + __raw_writel(AT91_SDRAMC_MR, cfg->sdramc + AT91_SDRAMC_MODE_LMR); access_sdram(); /* SDRAMC_MR : Normal Mode */ - at91_sdramc_write(AT91_SDRAMC_MR, AT91_SDRAMC_MODE_NORMAL); - - /* access SDRAM */ + __raw_writel(AT91_SDRAMC_MR, cfg->sdramc + AT91_SDRAMC_MODE_NORMAL); access_sdram(); /* SDRAMC_TR : Refresh Timer Counter */ - at91_sdramc_write(AT91_SDRAMC_TR, cfg->sdrc_tr2); - - /* access SDRAM */ + __raw_writel(AT91_SDRAMC_TR, cfg->sdramc + cfg->sdrc_tr2); access_sdram(); } -void __bare_init at91sam926x_lowlevel_init(struct at91sam926x_lowlevel_cfg *cfg) +static void __always_inline at91sam926x_board_init(struct at91sam926x_board_cfg *cfg) { u32 r; - int in_sram = running_in_sram(); - at91sam926x_lowlevel_board_config(cfg); + if (!IS_ENABLED(CONFIG_AT91SAM926X_BOARD_INIT)) + return; __raw_writel(cfg->wdt_mr, AT91_BASE_WDT + AT91_WDT_MR); @@ -131,64 +136,41 @@ void __bare_init at91sam926x_lowlevel_init(struct at91sam926x_lowlevel_cfg *cfg) /* flash */ at91_smc_write(cfg->smc_cs, AT91_SAM9_SMC_MODE, cfg->smc_mode); - at91_smc_write(cfg->smc_cs, AT91_SMC_CYCLE, cfg->smc_cycle); - at91_smc_write(cfg->smc_cs, AT91_SMC_PULSE, cfg->smc_pulse); - at91_smc_write(cfg->smc_cs, AT91_SMC_SETUP, cfg->smc_setup); - /* - * PMC Check if the PLL is already initialized - */ + /* PMC Check if the PLL is already initialized */ r = at91_pmc_read(AT91_PMC_MCKR); - if (r & AT91_PMC_CSS && !in_sram) + if ((r & AT91_PMC_CSS) && !running_in_sram()) return; - /* - * Enable the Main Oscillator - */ + /* Enable the Main Oscillator */ at91_pmc_write(AT91_CKGR_MOR, cfg->pmc_mor); - do { r = at91_pmc_read(AT91_PMC_SR); } while (!(r & AT91_PMC_MOSCS)); - /* - * PLLAR: x MHz for PCK - */ + /* PLLAR: x MHz for PCK */ at91_pmc_write(AT91_CKGR_PLLAR, cfg->pmc_pllar); - do { r = at91_pmc_read(AT91_PMC_SR); } while (!(r & AT91_PMC_LOCKA)); - /* - * PCK/x = MCK Master Clock from SLOW - */ + /* PCK/x = MCK Master Clock from SLOW */ at91_pmc_write(AT91_PMC_MCKR, cfg->pmc_mckr1); - pmc_check_mckrdy(); - /* - * PCK/x = MCK Master Clock from PLLA - */ + /* PCK/x = MCK Master Clock from PLLA */ at91_pmc_write(AT91_PMC_MCKR, cfg->pmc_mckr2); - pmc_check_mckrdy(); - /* - * Init SDRAM - */ + /* Init SDRAM */ at91sam926x_sdramc_init(cfg); /* User reset enable*/ at91_sys_write(AT91_RSTC_MR, cfg->rstc_rmr); -#ifdef CONFIG_SYS_MATRIX_MCFG_REMAP - /* MATRIX_MCFG - REMAP all masters */ - at91_sys_write(AT91_MATRIX_MCFG0, 0x1FF); -#endif /* * When boot from external boot * we need to enable mck and ohter clock @@ -197,3 +179,5 @@ void __bare_init at91sam926x_lowlevel_init(struct at91sam926x_lowlevel_cfg *cfg) */ at91_pmc_write(AT91_PMC_PCER, 0xffffffff); } + +#endif /* __AT91SAM926X_BOARD_INIT_H__ */ diff --git a/arch/arm/mach-at91/irq_fixup.c b/arch/arm/mach-at91/irq_fixup.c deleted file mode 100644 index 9815ac2ca5..0000000000 --- a/arch/arm/mach-at91/irq_fixup.c +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (C) 2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> - * - * Under GPLv2 only - */ - -#include <io.h> -#include <mach/at91_rtt.h> - -/* - * As the RTT is powered by the backup power so if the interrupt - * is still on when the kernel start, the kernel will end up with - * dead lock interrupt that it can not clear. Because the interrupt line is - * shared with the basic timer (PIT) on AT91_ID_SYS. - */ -void at91_rtt_irq_fixup(void *base) -{ - void __iomem *reg = base + AT91_RTT_MR; - u32 mr = readl(reg); - - writel(mr & ~(AT91_RTT_ALMIEN | AT91_RTT_RTTINCIEN), reg); -} diff --git a/arch/arm/mach-at91/sama5d3.c b/arch/arm/mach-at91/sama5d3.c index 85efb2d78f..b52c6b49be 100644 --- a/arch/arm/mach-at91/sama5d3.c +++ b/arch/arm/mach-at91/sama5d3.c @@ -7,7 +7,6 @@ #include <mach/cpu.h> #include <linux/clk.h> -#include "soc.h" #include "generic.h" #include "clock.h" @@ -391,6 +390,9 @@ static void sama5d3_initialize(void) at91_add_sam9_smc(DEVICE_ID_SINGLE, SAMA5D3_BASE_HSMC + 0x600, 0xa0); } -AT91_SOC_START(sama5d3) - .init = sama5d3_initialize, -AT91_SOC_END +static int sama5d3_setup(void) +{ + at91_boot_soc = sama5d3_initialize; + return 0; +} +pure_initcall(sama5d3_setup); diff --git a/arch/arm/mach-at91/sama5d4.c b/arch/arm/mach-at91/sama5d4.c index 4d380ed88e..d6b18fca24 100644 --- a/arch/arm/mach-at91/sama5d4.c +++ b/arch/arm/mach-at91/sama5d4.c @@ -16,7 +16,6 @@ #include <mach/cpu.h> #include <linux/clk.h> -#include "soc.h" #include "generic.h" #include "clock.h" @@ -299,6 +298,9 @@ static void sama5d4_initialize(void) at91_add_sam9_smc(DEVICE_ID_SINGLE, SAMA5D4_BASE_HSMC + 0x600, 0xa0); } -AT91_SOC_START(sama5d4) - .init = sama5d4_initialize, -AT91_SOC_END +static int sama5d4_setup(void) +{ + at91_boot_soc = sama5d4_initialize; + return 0; +} +pure_initcall(sama5d4_setup); diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c index 8f32af043d..7a19c45ea4 100644 --- a/arch/arm/mach-at91/setup.c +++ b/arch/arm/mach-at91/setup.c @@ -14,10 +14,10 @@ #include <mach/cpu.h> #include <mach/at91_dbgu.h> -#include "soc.h" #include "generic.h" -struct at91_init_soc __initdata at91_boot_soc; +/* function called by at91_detect() - if assigned */ +void __initdata (*at91_boot_soc)(void); struct at91_socinfo at91_soc_initdata; EXPORT_SYMBOL(at91_soc_initdata); @@ -48,39 +48,32 @@ static void __init soc_detect(u32 dbgu_base) at91_soc_initdata.type = AT91_SOC_RM9200; if (at91_soc_initdata.subtype == AT91_SOC_SUBTYPE_NONE) at91_soc_initdata.subtype = AT91_SOC_RM9200_BGA; - at91_boot_soc = at91rm9200_soc; break; case ARCH_ID_AT91SAM9260: at91_soc_initdata.type = AT91_SOC_SAM9260; - at91_boot_soc = at91sam9260_soc; break; case ARCH_ID_AT91SAM9261: at91_soc_initdata.type = AT91_SOC_SAM9261; - at91_boot_soc = at91sam9261_soc; break; case ARCH_ID_AT91SAM9263: at91_soc_initdata.type = AT91_SOC_SAM9263; - at91_boot_soc = at91sam9263_soc; break; case ARCH_ID_AT91SAM9G20: at91_soc_initdata.type = AT91_SOC_SAM9G20; - at91_boot_soc = at91sam9260_soc; break; case ARCH_ID_AT91SAM9G45: at91_soc_initdata.type = AT91_SOC_SAM9G45; if (cidr == ARCH_ID_AT91SAM9G45ES) at91_soc_initdata.subtype = AT91_SOC_SAM9G45ES; - at91_boot_soc = at91sam9g45_soc; break; case ARCH_ID_AT91SAM9RL64: at91_soc_initdata.type = AT91_SOC_SAM9RL; - at91_boot_soc = at91sam9rl_soc; break; case ARCH_ID_AT91SAM9X5: @@ -89,17 +82,14 @@ static void __init soc_detect(u32 dbgu_base) case ARCH_ID_AT91SAM9N12: at91_soc_initdata.type = AT91_SOC_SAM9N12; - at91_boot_soc = at91sam9n12_soc; break; case ARCH_ID_SAMA5: if (at91_soc_initdata.exid & ARCH_EXID_SAMA5D3) { at91_soc_initdata.type = AT91_SOC_SAMA5D3; - at91_boot_soc = at91sama5d3_soc; } else { if (at91_soc_initdata.exid & ARCH_EXID_SAMA5D4) { at91_soc_initdata.type = AT91_SOC_SAMA5D4; - at91_boot_soc = at91sama5d4_soc; } } break; @@ -108,13 +98,11 @@ static void __init soc_detect(u32 dbgu_base) /* at91sam9g10 */ if ((socid & ~AT91_CIDR_EXT) == ARCH_ID_AT91SAM9G10) { at91_soc_initdata.type = AT91_SOC_SAM9G10; - at91_boot_soc = at91sam9261_soc; } /* at91sam9xe */ else if ((cidr & AT91_CIDR_ARCH) == ARCH_FAMILY_AT91SAM9XE) { at91_soc_initdata.type = AT91_SOC_SAM9260; at91_soc_initdata.subtype = AT91_SOC_SAM9XE; - at91_boot_soc = at91sam9260_soc; } if (!at91_soc_is_detected()) @@ -283,17 +271,11 @@ static int at91_detect(void) pr_info("AT91: Detected soc subtype: %s\n", at91_get_soc_subtype(&at91_soc_initdata)); - if (IS_ENABLED(CONFIG_COMMON_CLK_OF_PROVIDER)) - return 0; - - if (!at91_soc_is_enabled()) - panic("AT91: Soc not enabled"); - /* Init clock subsystem */ at91_clock_init(); - if (at91_boot_soc.init) - at91_boot_soc.init(); + if (at91_boot_soc != NULL) + at91_boot_soc(); return 0; } diff --git a/arch/arm/mach-at91/soc.h b/arch/arm/mach-at91/soc.h deleted file mode 100644 index 76e4621f8a..0000000000 --- a/arch/arm/mach-at91/soc.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (C) 2011 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> - * - * Under GPLv2 - */ - -struct at91_init_soc { - int builtin; - void (*init)(void); -}; - -extern struct at91_init_soc at91_boot_soc; -extern struct at91_init_soc at91rm9200_soc; -extern struct at91_init_soc at91sam9260_soc; -extern struct at91_init_soc at91sam9261_soc; -extern struct at91_init_soc at91sam9263_soc; -extern struct at91_init_soc at91sam9g45_soc; -extern struct at91_init_soc at91sam9rl_soc; -extern struct at91_init_soc at91sam9x5_soc; -extern struct at91_init_soc at91sam9n12_soc; -extern struct at91_init_soc at91sama5d3_soc; -extern struct at91_init_soc at91sama5d4_soc; - -#define AT91_SOC_START(_name) \ -struct at91_init_soc __initdata at91##_name##_soc \ - __used \ - = { \ - .builtin = 1, \ - -#define AT91_SOC_END \ -}; - -static inline int at91_soc_is_enabled(void) -{ - return at91_boot_soc.builtin; -} - -#if !defined(CONFIG_SOC_AT91RM9200) -#define at91rm9200_soc at91_boot_soc -#endif - -#if !defined(CONFIG_SOC_AT91SAM9260) -#define at91sam9260_soc at91_boot_soc -#endif - -#if !defined(CONFIG_SOC_AT91SAM9261) -#define at91sam9261_soc at91_boot_soc -#endif - -#if !defined(CONFIG_SOC_AT91SAM9263) -#define at91sam9263_soc at91_boot_soc -#endif - -#if !defined(CONFIG_SOC_AT91SAM9G45) -#define at91sam9g45_soc at91_boot_soc -#endif - -#if !defined(CONFIG_SOC_AT91SAM9RL) -#define at91sam9rl_soc at91_boot_soc -#endif - -#if !defined(CONFIG_SOC_AT91SAM9X5) -#define at91sam9x5_soc at91_boot_soc -#endif - -#if !defined(CONFIG_SOC_AT91SAM9N12) -#define at91sam9n12_soc at91_boot_soc -#endif - -#if !defined(CONFIG_ARCH_SAMA5D3) -#define at91sama5d3_soc at91_boot_soc -#endif - -#if !defined(CONFIG_ARCH_SAMA5D4) -#define at91sama5d4_soc at91_boot_soc -#endif diff --git a/arch/arm/mach-imx/include/mach/imx6.h b/arch/arm/mach-imx/include/mach/imx6.h index e0ced7edc6..288c7539ae 100644 --- a/arch/arm/mach-imx/include/mach/imx6.h +++ b/arch/arm/mach-imx/include/mach/imx6.h @@ -109,6 +109,8 @@ static inline int __imx6_cpu_revision(void) return IMX_CHIP_REV_1_4; case 0x05: return IMX_CHIP_REV_1_5; + case 0x06: + return IMX_CHIP_REV_1_6; case 0x100: return IMX_CHIP_REV_2_0; } diff --git a/arch/arm/mach-imx/include/mach/imx7-ccm-regs.h b/arch/arm/mach-imx/include/mach/imx7-ccm-regs.h index a4217cca5d..97fe240fc4 100644 --- a/arch/arm/mach-imx/include/mach/imx7-ccm-regs.h +++ b/arch/arm/mach-imx/include/mach/imx7-ccm-regs.h @@ -6,6 +6,7 @@ #define CCM_CCGRn_CLR(n) (0x4008 + 16 * (n)) #define CCM_CCGR_UART1 148 +#define CCM_CCGR_UART2 149 #define CCM_CCGR_SETTINGn(n, s) ((s) << ((n) * 4)) #define CCM_CCGR_SETTINGn_NOT_NEEDED(n) CCM_CCGR_SETTINGn(n, 0b00) @@ -28,5 +29,7 @@ #define UART1_CLK_ROOT CLOCK_ROOT_INDEX(0xaf80) #define UART1_CLK_ROOT__OSC_24M CCM_TARGET_ROOTn_MUX(0b000) +#define UART2_CLK_ROOT CLOCK_ROOT_INDEX(0xb000) +#define UART2_CLK_ROOT__OSC_24M CCM_TARGET_ROOTn_MUX(0b000) #endif diff --git a/arch/arm/mach-imx/include/mach/imx7-regs.h b/arch/arm/mach-imx/include/mach/imx7-regs.h index 8774c32d73..8625d0b619 100644 --- a/arch/arm/mach-imx/include/mach/imx7-regs.h +++ b/arch/arm/mach-imx/include/mach/imx7-regs.h @@ -78,7 +78,7 @@ #define MX7_ECSPI2_BASE_ADDR (MX7_AIPS3_BASE_ADDR + 0x30000) #define MX7_ECSPI3_BASE_ADDR (MX7_AIPS3_BASE_ADDR + 0x40000) #define MX7_UART1_BASE_ADDR (MX7_AIPS3_BASE_ADDR + 0x60000) -#define MX7_UART2_BASE_ADDR (MX7_AIPS3_BASE_ADDR + 0x70000) +#define MX7_UART2_BASE_ADDR (MX7_AIPS3_BASE_ADDR + 0x90000) #define MX7_UART3_BASE_ADDR (MX7_AIPS3_BASE_ADDR + 0x80000) #define MX7_SAI1_BASE_ADDR (MX7_AIPS3_BASE_ADDR + 0xA0000) #define MX7_SAI2_BASE_ADDR (MX7_AIPS3_BASE_ADDR + 0xB0000) diff --git a/arch/arm/mach-imx/include/mach/revision.h b/arch/arm/mach-imx/include/mach/revision.h index 908a0a1d74..d9495d967f 100644 --- a/arch/arm/mach-imx/include/mach/revision.h +++ b/arch/arm/mach-imx/include/mach/revision.h @@ -8,6 +8,7 @@ #define IMX_CHIP_REV_1_3 0x13 #define IMX_CHIP_REV_1_4 0x14 #define IMX_CHIP_REV_1_5 0x15 +#define IMX_CHIP_REV_1_6 0x16 #define IMX_CHIP_REV_2_0 0x20 #define IMX_CHIP_REV_2_1 0x21 #define IMX_CHIP_REV_2_2 0x22 diff --git a/commands/Kconfig b/commands/Kconfig index eee4b6aee8..72fadb6c70 100644 --- a/commands/Kconfig +++ b/commands/Kconfig @@ -234,7 +234,7 @@ config CMD_VERSION depends on BANNER prompt "version" help - Pring barebox version. Example: + Print barebox version. Example: barebox 2014.05.0-00142-gb289373 #177 Mon May 12 20:35:55 CEST 2014 diff --git a/common/Makefile b/common/Makefile index 8cd0ab3001..5351ef0f77 100644 --- a/common/Makefile +++ b/common/Makefile @@ -63,27 +63,29 @@ obj-$(CONFIG_BAREBOX_UPDATE_IMX_NAND_FCB) += imx-bbu-nand-fcb.o obj-$(CONFIG_CONSOLE_RATP) += ratp.o obj-$(CONFIG_BOOT) += boot.o -quiet_cmd_pwd_h = PWDH $@ ifdef CONFIG_PASSWORD -ifneq ($(CONFIG_PASSWORD_DEFAULT),"") -PASSWD_FILE := $(shell cd $(srctree); find $(CONFIG_PASSWORD_DEFAULT) -type f) -cmd_pwd_h = echo -n "static const char default_passwd[] = \"" > $@; \ - cat $< | tr -d '\n' >> $@; \ - echo "\";" >> $@ -include/generated/passwd.h: $(PASSWD_FILE) - $(call if_changed,pwd_h) +ifeq ($(CONFIG_PASSWORD_DEFAULT),"") +define filechk_passwd + echo "static const char default_passwd[] = \"\";" +endef else -cmd_pwd_h = echo "static const char default_passwd[] = \"\";" > $@ - -include/generated/passwd.h: FORCE - $(call if_changed,pwd_h) +define filechk_passwd +( \ +echo -n "static const char default_passwd[] = \""; \ +cat $(shell find $(srctree) -name $(CONFIG_PASSWORD_DEFAULT) -type f) | tr -d '\n';\ +echo "\";" \ +) +endef endif +include/generated/passwd.h: $(srctree)/$(src)/Makefile FORCE + $(call filechk,passwd) + targets += include/generated/passwd.h $(obj)/password.o: include/generated/passwd.h -endif +endif # CONFIG_PASSWORD # dependencies on generated files need to be listed explicitly $(obj)/version.o: include/generated/compile.h diff --git a/common/blspec.c b/common/blspec.c index b258e6600b..6171461a72 100644 --- a/common/blspec.c +++ b/common/blspec.c @@ -107,7 +107,8 @@ static int blspec_boot(struct bootentry *be, int verbose, int dryrun) } pr_info("booting %s from %s\n", blspec_entry_var_get(entry, "title"), - entry->cdev ? dev_name(entry->cdev->dev) : "none"); + (entry->cdev && entry->cdev->dev) ? + dev_name(entry->cdev->dev) : "none"); ret = bootm_boot(&data); if (ret) @@ -505,7 +506,7 @@ int blspec_scan_directory(struct bootentries *bootentries, const char *root) found++; - if (entry->cdev) { + if (entry->cdev && entry->cdev->dev) { devname = xstrdup(dev_name(entry->cdev->dev)); if (entry->cdev->dev->parent) hwdevname = xstrdup(dev_name(entry->cdev->dev->parent)); diff --git a/common/file-list.c b/common/file-list.c index 8d61b76cbb..eb469cf9be 100644 --- a/common/file-list.c +++ b/common/file-list.c @@ -92,6 +92,9 @@ static int file_list_parse_one(struct file_list *files, const char *partstr, con case 'c': flags |= FILE_LIST_FLAG_CREATE; break; + case 'u': + flags |= FILE_LIST_FLAG_UBI; + break; default: pr_err("Unknown flag '%c'\n", *partstr); return -EINVAL; diff --git a/common/filetype.c b/common/filetype.c index 323da026af..f9c034ff2a 100644 --- a/common/filetype.c +++ b/common/filetype.c @@ -25,6 +25,7 @@ #include <errno.h> #include <envfs.h> #include <disks.h> +#include <image-sparse.h> struct filetype_str { const char *name; /* human readable filetype */ @@ -64,6 +65,7 @@ static const struct filetype_str filetype_str[] = { [filetype_mxs_bootstream] = { "Freescale MXS bootstream", "mxsbs" }, [filetype_socfpga_xload] = { "SoCFPGA prebootloader image", "socfpga-xload" }, [filetype_kwbimage_v1] = { "MVEBU kwbimage (v1)", "kwb" }, + [filetype_android_sparse] = { "Android sparse image", "sparse" }, }; const char *file_type_to_string(enum filetype f) @@ -301,6 +303,9 @@ enum filetype file_detect_type(const void *_buf, size_t bufsize) (buf8[0x1e] == 0 || buf8[0x1e] == 1)) return filetype_kwbimage_v1; + if (is_sparse_image(_buf)) + return filetype_android_sparse; + if (bufsize < 64) return filetype_unknown; diff --git a/common/image-fit.c b/common/image-fit.c index 4d4b29ac26..12379a67ff 100644 --- a/common/image-fit.c +++ b/common/image-fit.c @@ -610,6 +610,7 @@ struct fit_handle *fit_open(const char *filename, bool verbose, { struct fit_handle *handle = NULL; const char *desc = "(no description)"; + struct device_node *root; int ret; handle = xzalloc(sizeof(struct fit_handle)); @@ -622,12 +623,13 @@ struct fit_handle *fit_open(const char *filename, bool verbose, goto err; } - handle->root = of_unflatten_dtb(handle->fit); - if (IS_ERR(handle->root)) { - ret = PTR_ERR(handle->root); + root = of_unflatten_dtb(handle->fit); + if (IS_ERR(root)) { + ret = PTR_ERR(root); goto err; } + handle->root = root; handle->verify = verify; of_property_read_string(handle->root, "description", &desc); diff --git a/common/ubiformat.c b/common/ubiformat.c index 0f05f09c0f..f728119b9a 100644 --- a/common/ubiformat.c +++ b/common/ubiformat.c @@ -689,3 +689,64 @@ out_close: return err; } +int ubiformat_write(struct mtd_info *mtd, const void *buf, size_t count, + loff_t offset) +{ + int writesize = mtd->writesize >> mtd->subpage_sft; + size_t retlen; + int ret; + + if (offset & (mtd->writesize - 1)) + return -EINVAL; + + if (count & (mtd->writesize - 1)) + return -EINVAL; + + while (count) { + size_t now; + + now = ALIGN(offset, mtd->erasesize) - offset; + if (now > count) + now = count; + + if (!now) { + const struct ubi_ec_hdr *ec = buf; + const struct ubi_vid_hdr *vid; + + if (be32_to_cpu(ec->magic) != UBI_EC_HDR_MAGIC) { + pr_err("bad UBI magic %#08x, should be %#08x", + be32_to_cpu(ec->magic), UBI_EC_HDR_MAGIC); + return -EINVAL; + } + + /* skip ec header */ + offset += writesize; + buf += writesize; + count -= writesize; + + if (!count) + break; + + vid = buf; + if (be32_to_cpu(vid->magic) != UBI_VID_HDR_MAGIC) { + pr_err("bad UBI magic %#08x, should be %#08x", + be32_to_cpu(vid->magic), UBI_VID_HDR_MAGIC); + return -EINVAL; + } + + continue; + } + + ret = mtd_write(mtd, offset, now, &retlen, buf); + if (ret < 0) + return ret; + if (retlen != now) + return -EIO; + + buf += now; + count -= now; + offset += now; + } + + return 0; +} diff --git a/defaultenv/Makefile b/defaultenv/Makefile index 33e0eceef9..f313b04e84 100644 --- a/defaultenv/Makefile +++ b/defaultenv/Makefile @@ -14,7 +14,7 @@ quiet_cmd_env_default = ENV $@ cmd_env_default = ($(srctree)/scripts/genenv $(srctree) $(objtree) $@ $(CONFIG_DEFAULT_ENVIRONMENT_PATH)) $(obj)/barebox_default_env: FORCE - $(call cmd,env_default) + $(call if_changed,env_default) quiet_cmd_env_h = ENVH $@ cmd_env_h = cat $< | (cd $(obj) && $(objtree)/scripts/bin2c "__aligned(4) default_environment") > $@; \ @@ -27,4 +27,4 @@ quiet_cmd_env_zero = ENVZ $@ cmd_env_zero = ($(objtree)/scripts/bareboxenv -z $(CONFIG_DEFAULT_ENVIRONMENT_PATH) $@) $(obj)/barebox_zero_env: FORCE - $(call cmd,env_zero) + $(call if_changed,env_zero) diff --git a/drivers/mci/imx-esdhc.c b/drivers/mci/imx-esdhc.c index 55e8371dd8..b91f94b99c 100644 --- a/drivers/mci/imx-esdhc.c +++ b/drivers/mci/imx-esdhc.c @@ -630,7 +630,6 @@ static int fsl_esdhc_probe(struct device_d *dev) host->clk = clk_get(dev, "per"); if (IS_ERR(host->clk)) return PTR_ERR(host->clk); - clk_enable(host->clk); ret = clk_enable(host->clk); if (ret) { diff --git a/drivers/net/e1000/eeprom.c b/drivers/net/e1000/eeprom.c index 23fb05ec72..748d8afe79 100644 --- a/drivers/net/e1000/eeprom.c +++ b/drivers/net/e1000/eeprom.c @@ -1504,6 +1504,7 @@ int e1000_register_invm(struct e1000_hw *hw) return ret; strcpy(hw->invm.dev.name, "invm"); + hw->invm.dev.id = hw->dev->id; hw->invm.dev.parent = hw->dev; ret = register_device(&hw->invm.dev); if (ret < 0) { diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig index dd1b21451d..84945744ef 100644 --- a/drivers/spi/Kconfig +++ b/drivers/spi/Kconfig @@ -38,7 +38,7 @@ config DRIVER_SPI_IMX_0_7 config DRIVER_SPI_IMX_2_3 bool - depends on ARCH_IMX50 || ARCH_IMX51 || ARCH_IMX53 || ARCH_IMX6 + depends on ARCH_IMX50 || ARCH_IMX51 || ARCH_IMX53 || ARCH_IMX6 || ARCH_IMX7 default y config DRIVER_SPI_MXS diff --git a/drivers/spi/imx_spi.c b/drivers/spi/imx_spi.c index 0827de7786..10621d00c8 100644 --- a/drivers/spi/imx_spi.c +++ b/drivers/spi/imx_spi.c @@ -624,6 +624,13 @@ static int imx_spi_probe(struct device_d *dev) goto err_free; } + ret = clk_enable(imx->clk); + if (ret) { + dev_err(dev, "Failed to enable clock: %s\n", + strerror(ret)); + return ret; + } + imx->chipselect = devdata->chipselect; imx->xchg_single = devdata->xchg_single; imx->do_transfer = devdata->do_transfer; diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig index 64347f0d18..b612d39a8e 100644 --- a/drivers/usb/gadget/Kconfig +++ b/drivers/usb/gadget/Kconfig @@ -57,6 +57,7 @@ config USB_GADGET_FASTBOOT bool select BANNER select FILE_LIST + select IMAGE_SPARSE prompt "Android Fastboot support" endif diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c index 85c64c05c8..2ba5977239 100644 --- a/drivers/usb/gadget/f_fastboot.c +++ b/drivers/usb/gadget/f_fastboot.c @@ -32,11 +32,14 @@ #include <ubiformat.h> #include <stdlib.h> #include <file-list.h> +#include <magicvar.h> +#include <linux/sizes.h> #include <progress.h> #include <environment.h> #include <globalvar.h> #include <restart.h> #include <console_countdown.h> +#include <image-sparse.h> #include <usb/ch9.h> #include <usb/gadget.h> #include <usb/fastboot.h> @@ -45,6 +48,7 @@ #include <linux/compiler.h> #include <linux/stat.h> #include <linux/mtd/mtd-abi.h> +#include <linux/mtd/mtd.h> #define FASTBOOT_VERSION "0.4" @@ -56,6 +60,8 @@ #define EP_BUFFER_SIZE 4096 +static unsigned int fastboot_max_download_size = SZ_8M; + struct fb_variable { char *name; char *value; @@ -316,6 +322,8 @@ static int fastboot_bind(struct usb_configuration *c, struct usb_function *f) fb_setvar(var, "0.4"); var = fb_addvar(f_fb, "bootloader-version"); fb_setvar(var, release_string); + var = fb_addvar(f_fb, "max-download-size"); + fb_setvar(var, "%u", fastboot_max_download_size); if (IS_ENABLED(CONFIG_BAREBOX_UPDATE) && opts->export_bbu) bbu_handlers_iterate(fastboot_add_bbu_variables, f_fb); @@ -526,7 +534,7 @@ static int fastboot_tx_write(struct f_fastboot *f_fb, const char *buffer, unsign return 0; } -static int fastboot_tx_print(struct f_fastboot *f_fb, const char *fmt, ...) +int fastboot_tx_print(struct f_fastboot *f_fb, const char *fmt, ...) { char buf[64]; va_list ap; @@ -687,6 +695,197 @@ static void __maybe_unused cb_boot(struct usb_ep *ep, struct usb_request *req, fastboot_tx_print(f_fb, "OKAY"); } +static struct mtd_info *get_mtd(struct f_fastboot *f_fb, const char *filename) +{ + int fd, ret; + struct mtd_info_user meminfo; + + fd = open(filename, O_RDONLY); + if (fd < 0) + return ERR_PTR(-errno); + + ret = ioctl(fd, MEMGETINFO, &meminfo); + + close(fd); + + if (ret) + return ERR_PTR(ret); + + return meminfo.mtd; +} + +static int do_ubiformat(struct f_fastboot *f_fb, struct mtd_info *mtd, + const char *file) +{ + struct ubiformat_args args = { + .yes = 1, + .image = file, + }; + + if (!file) + args.novtbl = 1; + + if (!IS_ENABLED(CONFIG_UBIFORMAT)) { + fastboot_tx_print(f_fb, "FAILubiformat is not available"); + return -ENODEV; + } + + return ubiformat(mtd, &args); +} + + +static int check_ubi(struct f_fastboot *f_fb, struct file_list_entry *fentry, + enum filetype filetype) +{ + struct mtd_info *mtd; + + mtd = get_mtd(f_fb, fentry->filename); + + /* + * Issue a warning when we are about to write a UBI image to a MTD device + * and the FILE_LIST_FLAG_UBI is not given as this means we loose all + * erase counters. + */ + if (!IS_ERR(mtd) && filetype == filetype_ubi && + !(fentry->flags & FILE_LIST_FLAG_UBI)) { + fastboot_tx_print(f_fb, "INFOwriting UBI image to MTD device, " + "add the 'u' "); + fastboot_tx_print(f_fb, "INFOflag to the partition description"); + return 0; + } + + if (!(fentry->flags & FILE_LIST_FLAG_UBI)) + return 0; + + if (!IS_ENABLED(CONFIG_UBIFORMAT)) { + fastboot_tx_print(f_fb, "FAILformat not available"); + return -ENOSYS; + } + + if (IS_ERR(mtd)) { + fastboot_tx_print(f_fb, "FAILUBI flag given on non-MTD device"); + return -EINVAL; + } + + if (filetype == filetype_ubi) { + fastboot_tx_print(f_fb, "INFOThis is an UBI image..."); + return 1; + } else { + fastboot_tx_print(f_fb, "FAILThis is no UBI image but %s", + file_type_to_string(filetype)); + return -EINVAL; + } +} + +static int fastboot_handle_sparse(struct f_fastboot *f_fb, + struct file_list_entry *fentry) +{ + struct sparse_image_ctx *sparse; + void *buf = NULL; + int ret, fd; + unsigned int flags = O_RDWR; + int bufsiz = SZ_128K; + struct stat s; + struct mtd_info *mtd = NULL; + + ret = stat(fentry->filename, &s); + if (ret) { + if (fentry->flags & FILE_LIST_FLAG_CREATE) + flags |= O_CREAT; + else + return ret; + } + + fd = open(fentry->filename, flags); + if (fd < 0) + return -errno; + + ret = fstat(fd, &s); + if (ret) + goto out_close_fd; + + sparse = sparse_image_open(FASTBOOT_TMPFILE); + if (IS_ERR(sparse)) { + pr_err("Cannot open sparse image\n"); + ret = PTR_ERR(sparse); + goto out_close_fd; + } + + if (S_ISREG(s.st_mode)) { + ret = ftruncate(fd, sparse_image_size(sparse)); + if (ret) + goto out; + } + + buf = malloc(bufsiz); + if (!buf) { + ret = -ENOMEM; + goto out; + } + + if (fentry->flags & FILE_LIST_FLAG_UBI) { + mtd = get_mtd(f_fb, fentry->filename); + if (IS_ERR(mtd)) { + ret = PTR_ERR(mtd); + goto out; + } + } + + while (1) { + int retlen; + loff_t pos; + + ret = sparse_image_read(sparse, buf, &pos, bufsiz, &retlen); + if (ret) + goto out; + if (!retlen) + break; + + if (pos == 0) { + ret = check_ubi(f_fb, fentry, file_detect_type(buf, retlen)); + if (ret < 0) + goto out; + } + + if (fentry->flags & FILE_LIST_FLAG_UBI) { + if (!IS_ENABLED(CONFIG_UBIFORMAT)) { + ret = -ENOSYS; + goto out; + } + + if (pos == 0) { + ret = do_ubiformat(f_fb, mtd, NULL); + if (ret) + goto out; + } + + ret = ubiformat_write(mtd, buf, retlen, pos); + if (ret) + goto out; + } else { + pos = lseek(fd, pos, SEEK_SET); + if (pos == -1) { + ret = -errno; + goto out; + } + + ret = write_full(fd, buf, retlen); + if (ret < 0) + goto out; + } + } + + ret = 0; + +out: + free(buf); + sparse_image_close(sparse); +out_close_fd: + close(fd); + + return ret; +} + static void cb_flash(struct usb_ep *ep, struct usb_request *req, const char *cmd) { struct f_fastboot *f_fb = req->context; @@ -706,33 +905,27 @@ static void cb_flash(struct usb_ep *ep, struct usb_request *req, const char *cmd filename = fentry->filename; - if (filetype == filetype_ubi) { - int fd; - struct mtd_info_user meminfo; - struct ubiformat_args args = { - .yes = 1, - .image = FASTBOOT_TMPFILE, - }; - - fd = open(filename, O_RDONLY); - if (fd < 0) - goto copy; + if (filetype == filetype_android_sparse) { + ret = fastboot_handle_sparse(f_fb, fentry); + if (ret) { + fastboot_tx_print(f_fb, "FAILwriting sparse image: %s", + strerror(-ret)); + return; + } - ret = ioctl(fd, MEMGETINFO, &meminfo); - close(fd); - /* Not a MTD device, ubiformat is not a valid operation */ - if (ret) - goto copy; + goto out; + } - fastboot_tx_print(f_fb, "INFOThis is an UBI image..."); + ret = check_ubi(f_fb, fentry, filetype); + if (ret < 0) + return; - if (!IS_ENABLED(CONFIG_UBIFORMAT)) { - fastboot_tx_print(f_fb, "FAILubiformat is not available"); - return; - } + if (ret > 0) { + struct mtd_info *mtd; - ret = ubiformat(meminfo.mtd, &args); + mtd = get_mtd(f_fb, fentry->filename); + ret = do_ubiformat(f_fb, mtd, FASTBOOT_TMPFILE); if (ret) { fastboot_tx_print(f_fb, "FAILwrite partition: %s", strerror(-ret)); return; @@ -973,3 +1166,17 @@ static void rx_handler_command(struct usb_ep *ep, struct usb_request *req) memset(req->buf, 0, EP_BUFFER_SIZE); usb_ep_queue(ep, req); } + +static int fastboot_globalvars_init(void) +{ + globalvar_add_simple_int("usbgadget.fastboot_max_download_size", + &fastboot_max_download_size, "%u"); + + return 0; +} + +device_initcall(fastboot_globalvars_init); + +BAREBOX_MAGICVAR_NAMED(global_usbgadget_fastboot_max_download_size, + global.usbgadget.fastboot_max_download_size, + "Fastboot maximum download size"); diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c index 7c05e857b3..d343c5c059 100644 --- a/drivers/video/atmel_lcdfb.c +++ b/drivers/video/atmel_lcdfb.c @@ -23,7 +23,6 @@ #include <init.h> #include <mach/hardware.h> #include <mach/io.h> -#include <mach/cpu.h> #include <errno.h> #include <linux/clk.h> @@ -34,12 +33,12 @@ #define ATMEL_LCDC_DMA_BURST_LEN 8 /* words */ #define ATMEL_LCDC_FIFO_SIZE 512 /* words */ -static unsigned long compute_hozval(unsigned long xres, unsigned long lcdcon2) +static unsigned long compute_hozval(struct atmel_lcdfb_info *sinfo, + unsigned long xres, unsigned long lcdcon2) { unsigned long value; - if (!(cpu_is_at91sam9261() || cpu_is_at91sam9g10() - || cpu_is_at32ap7000())) + if (!sinfo->have_hozval) return xres; value = xres; @@ -133,7 +132,7 @@ static void atmel_lcdfb_setup_core(struct fb_info *info) lcdc_writel(sinfo, ATMEL_LCDC_DMAFRMCFG, value); /* Set pixel clock */ - if (cpu_is_at91sam9g45() && !cpu_is_at91sam9g45es()) + if (sinfo->have_alt_pixclock) pix_factor = 1; clk_value_khz = clk_get_rate(sinfo->lcdc_clk) / 1000; @@ -191,7 +190,7 @@ static void atmel_lcdfb_setup_core(struct fb_info *info) lcdc_writel(sinfo, ATMEL_LCDC_TIM2, value); /* Horizontal value (aka line size) */ - hozval_linesz = compute_hozval(mode->xres, + hozval_linesz = compute_hozval(sinfo, mode->xres, lcdc_readl(sinfo, ATMEL_LCDC_LCDCON2)); /* Display size */ @@ -243,14 +242,39 @@ static int atmel_lcdc_probe(struct device_d *dev) return atmel_lcdc_register(dev, &atmel_lcdfb_data); } +static struct atmel_lcdfb_config at91sam9261_config = { + .have_hozval = true, + .have_intensity_bit = true, +}; + +static struct atmel_lcdfb_config at91sam9263_config = { + .have_intensity_bit = true, +}; + +static struct atmel_lcdfb_config at91sam9g10_config = { + .have_hozval = true, +}; + +static struct atmel_lcdfb_config at91sam9g45_config = { + .have_alt_pixclock = true, +}; + +static struct atmel_lcdfb_config at91sam9rl_config = { + .have_intensity_bit = true, +}; + +static struct atmel_lcdfb_config at32ap_config = { + .have_hozval = true, +}; + static __maybe_unused struct of_device_id atmel_lcdfb_compatible[] = { - { .compatible = "atmel,at91sam9261-lcdc", }, - { .compatible = "atmel,at91sam9263-lcdc", }, - { .compatible = "atmel,at91sam9g10-lcdc", }, - { .compatible = "atmel,at91sam9g45-lcdc", }, + { .compatible = "atmel,at91sam9261-lcdc", .data = &at91sam9261_config, }, + { .compatible = "atmel,at91sam9263-lcdc", .data = &at91sam9263_config, }, + { .compatible = "atmel,at91sam9g10-lcdc", .data = &at91sam9g10_config, }, + { .compatible = "atmel,at91sam9g45-lcdc", .data = &at91sam9g45_config, }, { .compatible = "atmel,at91sam9g45es-lcdc", }, - { .compatible = "atmel,at91sam9rl-lcdc", }, - { .compatible = "atmel,at32ap-lcdc", }, + { .compatible = "atmel,at91sam9rl-lcdc", .data = &at91sam9rl_config, }, + { .compatible = "atmel,at32ap-lcdc", .data = &at32ap_config, }, { /* sentinel */ } }; diff --git a/drivers/video/atmel_lcdfb.h b/drivers/video/atmel_lcdfb.h index a011d42019..b8458924ba 100644 --- a/drivers/video/atmel_lcdfb.h +++ b/drivers/video/atmel_lcdfb.h @@ -4,6 +4,12 @@ struct atmel_lcdfb_info; +struct atmel_lcdfb_config { + bool have_alt_pixclock; + bool have_hozval; + bool have_intensity_bit; +}; + struct atmel_lcdfb_devdata { void (*start)(struct atmel_lcdfb_info *sinfo); void (*stop)(struct atmel_lcdfb_info *sinfo, u32 flags); @@ -24,7 +30,9 @@ struct atmel_lcdfb_info { unsigned int lcdcon2; unsigned int dmacon; unsigned int lcd_wiring_mode; + bool have_alt_pixclock; bool have_intensity_bit; + bool have_hozval; int gpio_power_control; bool gpio_power_control_active_low; diff --git a/drivers/video/atmel_lcdfb_core.c b/drivers/video/atmel_lcdfb_core.c index 45b0c63d06..c6ece5b785 100644 --- a/drivers/video/atmel_lcdfb_core.c +++ b/drivers/video/atmel_lcdfb_core.c @@ -27,6 +27,8 @@ #include <linux/clk.h> #include <malloc.h> +#include <mach/cpu.h> + #include "atmel_lcdfb.h" static void atmel_lcdfb_start_clock(struct atmel_lcdfb_info *sinfo) @@ -130,7 +132,7 @@ static int atmel_lcdfb_check_var(struct fb_info *info) = info->bits_per_pixel; break; case 16: - /* Older SOCs use IBGR:555 rather than BGR:565. */ + /* Older SOCs use BGR:555 rather than BGR:565. */ if (sinfo->have_intensity_bit) info->green.length = 5; else @@ -280,9 +282,7 @@ static int power_control_init(struct device_d *dev, } /* - * Syntax: atmel,lcd-wiring-mode: lcd wiring mode "RGB", "BRG", "IRGB", "IBRG" - * The optional "I" indicates that green has an intensity bit as used by some - * older displays + * Syntax: atmel,lcd-wiring-mode: lcd wiring mode "RGB", "BGR" */ static int of_get_wiring_mode(struct device_node *np, struct atmel_lcdfb_info *sinfo) @@ -294,22 +294,13 @@ static int of_get_wiring_mode(struct device_node *np, if (ret < 0) { /* Not present, use defaults */ sinfo->lcd_wiring_mode = ATMEL_LCDC_WIRING_BGR; - sinfo->have_intensity_bit = false; return 0; } if (!strcasecmp(mode, "BGR")) { sinfo->lcd_wiring_mode = ATMEL_LCDC_WIRING_BGR; - sinfo->have_intensity_bit = false; } else if (!strcasecmp(mode, "RGB")) { sinfo->lcd_wiring_mode = ATMEL_LCDC_WIRING_RGB; - sinfo->have_intensity_bit = false; - } else if (!strcasecmp(mode, "IBGR")) { - sinfo->lcd_wiring_mode = ATMEL_LCDC_WIRING_BGR; - sinfo->have_intensity_bit = true; - } else if (!strcasecmp(mode, "IRGB")) { - sinfo->lcd_wiring_mode = ATMEL_LCDC_WIRING_RGB; - sinfo->have_intensity_bit = true; } else { return -ENODEV; } @@ -338,8 +329,17 @@ static int lcdfb_of_init(struct device_d *dev, struct atmel_lcdfb_info *sinfo) struct fb_info *info = &sinfo->info; struct display_timings *modes; struct device_node *display; + struct atmel_lcdfb_config *config; int ret; + /* Driver data - optional */ + ret = dev_get_drvdata(dev, (const void **)&config); + if (!ret) { + sinfo->have_hozval = config->have_hozval; + sinfo->have_intensity_bit = config->have_intensity_bit; + sinfo->have_alt_pixclock = config->have_alt_pixclock; + } + /* Required properties */ display = of_parse_phandle(dev->device_node, "display", 0); if (!display) { @@ -415,7 +415,13 @@ static int lcdfb_pdata_init(struct device_d *dev, struct atmel_lcdfb_info *sinfo sinfo->lcdcon2 = pdata->default_lcdcon2; sinfo->dmacon = pdata->default_dmacon; sinfo->lcd_wiring_mode = pdata->lcd_wiring_mode; + + sinfo->have_alt_pixclock = cpu_is_at91sam9g45() && + !cpu_is_at91sam9g45es(); sinfo->have_intensity_bit = pdata->have_intensity_bit; + sinfo->have_hozval = cpu_is_at91sam9261() || + cpu_is_at91sam9g10() || + cpu_is_at32ap7000(); info = &sinfo->info; info->modes.modes = pdata->mode_list; diff --git a/dts/Bindings/arm/ccn.txt b/dts/Bindings/arm/ccn.txt index 29801456c9..43b5a71a5a 100644 --- a/dts/Bindings/arm/ccn.txt +++ b/dts/Bindings/arm/ccn.txt @@ -15,7 +15,7 @@ Required properties: Example: - ccn@0x2000000000 { + ccn@2000000000 { compatible = "arm,ccn-504"; reg = <0x20 0x00000000 0 0x1000000>; interrupts = <0 181 4>; diff --git a/dts/Bindings/arm/omap/crossbar.txt b/dts/Bindings/arm/omap/crossbar.txt index bb5727ae00..ecb360ed0e 100644 --- a/dts/Bindings/arm/omap/crossbar.txt +++ b/dts/Bindings/arm/omap/crossbar.txt @@ -49,7 +49,7 @@ An interrupt consumer on an SoC using crossbar will use: interrupts = <GIC_SPI request_number interrupt_level> Example: - device_x@0x4a023000 { + device_x@4a023000 { /* Crossbar 8 used */ interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>; ... diff --git a/dts/Bindings/arm/tegra/nvidia,tegra20-mc.txt b/dts/Bindings/arm/tegra/nvidia,tegra20-mc.txt index 866d93421e..f9632bacbd 100644 --- a/dts/Bindings/arm/tegra/nvidia,tegra20-mc.txt +++ b/dts/Bindings/arm/tegra/nvidia,tegra20-mc.txt @@ -8,7 +8,7 @@ Required properties: - interrupts : Should contain MC General interrupt. Example: - memory-controller@0x7000f000 { + memory-controller@7000f000 { compatible = "nvidia,tegra20-mc"; reg = <0x7000f000 0x024 0x7000f03c 0x3c4>; diff --git a/dts/Bindings/clock/axi-clkgen.txt b/dts/Bindings/clock/axi-clkgen.txt index fb40da303d..aca94fe941 100644 --- a/dts/Bindings/clock/axi-clkgen.txt +++ b/dts/Bindings/clock/axi-clkgen.txt @@ -17,7 +17,7 @@ Optional properties: - clock-output-names : From common clock binding. Example: - clock@0xff000000 { + clock@ff000000 { compatible = "adi,axi-clkgen"; #clock-cells = <0>; reg = <0xff000000 0x1000>; diff --git a/dts/Bindings/clock/brcm,bcm2835-aux-clock.txt b/dts/Bindings/clock/brcm,bcm2835-aux-clock.txt index 7a837d2182..4acfc8f641 100644 --- a/dts/Bindings/clock/brcm,bcm2835-aux-clock.txt +++ b/dts/Bindings/clock/brcm,bcm2835-aux-clock.txt @@ -23,7 +23,7 @@ Example: clocks = <&clk_osc>; }; - aux: aux@0x7e215004 { + aux: aux@7e215004 { compatible = "brcm,bcm2835-aux"; #clock-cells = <1>; reg = <0x7e215000 0x8>; diff --git a/dts/Bindings/clock/exynos4-clock.txt b/dts/Bindings/clock/exynos4-clock.txt index bc61c952cb..17bb113653 100644 --- a/dts/Bindings/clock/exynos4-clock.txt +++ b/dts/Bindings/clock/exynos4-clock.txt @@ -24,7 +24,7 @@ tree sources. Example 1: An example of a clock controller node is listed below. - clock: clock-controller@0x10030000 { + clock: clock-controller@10030000 { compatible = "samsung,exynos4210-clock"; reg = <0x10030000 0x20000>; #clock-cells = <1>; diff --git a/dts/Bindings/clock/exynos5250-clock.txt b/dts/Bindings/clock/exynos5250-clock.txt index 536eacd106..aff266a12e 100644 --- a/dts/Bindings/clock/exynos5250-clock.txt +++ b/dts/Bindings/clock/exynos5250-clock.txt @@ -22,7 +22,7 @@ tree sources. Example 1: An example of a clock controller node is listed below. - clock: clock-controller@0x10010000 { + clock: clock-controller@10010000 { compatible = "samsung,exynos5250-clock"; reg = <0x10010000 0x30000>; #clock-cells = <1>; diff --git a/dts/Bindings/clock/exynos5410-clock.txt b/dts/Bindings/clock/exynos5410-clock.txt index 4527de3ea2..c68b0d29b3 100644 --- a/dts/Bindings/clock/exynos5410-clock.txt +++ b/dts/Bindings/clock/exynos5410-clock.txt @@ -30,7 +30,7 @@ Example 1: An example of a clock controller node is listed below. #clock-cells = <0>; }; - clock: clock-controller@0x10010000 { + clock: clock-controller@10010000 { compatible = "samsung,exynos5410-clock"; reg = <0x10010000 0x30000>; #clock-cells = <1>; diff --git a/dts/Bindings/clock/exynos5420-clock.txt b/dts/Bindings/clock/exynos5420-clock.txt index d54f42cf04..717a7b1531 100644 --- a/dts/Bindings/clock/exynos5420-clock.txt +++ b/dts/Bindings/clock/exynos5420-clock.txt @@ -23,7 +23,7 @@ tree sources. Example 1: An example of a clock controller node is listed below. - clock: clock-controller@0x10010000 { + clock: clock-controller@10010000 { compatible = "samsung,exynos5420-clock"; reg = <0x10010000 0x30000>; #clock-cells = <1>; diff --git a/dts/Bindings/clock/exynos5440-clock.txt b/dts/Bindings/clock/exynos5440-clock.txt index 5f7005f730..c7d227c31e 100644 --- a/dts/Bindings/clock/exynos5440-clock.txt +++ b/dts/Bindings/clock/exynos5440-clock.txt @@ -21,7 +21,7 @@ tree sources. Example: An example of a clock controller node is listed below. - clock: clock-controller@0x10010000 { + clock: clock-controller@10010000 { compatible = "samsung,exynos5440-clock"; reg = <0x160000 0x10000>; #clock-cells = <1>; diff --git a/dts/Bindings/clock/ti-keystone-pllctrl.txt b/dts/Bindings/clock/ti-keystone-pllctrl.txt index 3e6a81e998..c35cb6c4af 100644 --- a/dts/Bindings/clock/ti-keystone-pllctrl.txt +++ b/dts/Bindings/clock/ti-keystone-pllctrl.txt @@ -14,7 +14,7 @@ Required properties: Example: -pllctrl: pll-controller@0x02310000 { +pllctrl: pll-controller@02310000 { compatible = "ti,keystone-pllctrl", "syscon"; reg = <0x02310000 0x200>; }; diff --git a/dts/Bindings/clock/zx296702-clk.txt b/dts/Bindings/clock/zx296702-clk.txt index e85ecb510d..5c91c9e4f1 100644 --- a/dts/Bindings/clock/zx296702-clk.txt +++ b/dts/Bindings/clock/zx296702-clk.txt @@ -20,13 +20,13 @@ ID in its "clocks" phandle cell. See include/dt-bindings/clock/zx296702-clock.h for the full list of zx296702 clock IDs. -topclk: topcrm@0x09800000 { +topclk: topcrm@09800000 { compatible = "zte,zx296702-topcrm-clk"; reg = <0x09800000 0x1000>; #clock-cells = <1>; }; -uart0: serial@0x09405000 { +uart0: serial@09405000 { compatible = "zte,zx296702-uart"; reg = <0x09405000 0x1000>; interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>; diff --git a/dts/Bindings/crypto/fsl-sec4.txt b/dts/Bindings/crypto/fsl-sec4.txt index 7aef0eae58..76aec8a372 100644 --- a/dts/Bindings/crypto/fsl-sec4.txt +++ b/dts/Bindings/crypto/fsl-sec4.txt @@ -456,7 +456,7 @@ System ON/OFF key driver Definition: this is phandle to the register map node. EXAMPLE: - snvs-pwrkey@0x020cc000 { + snvs-pwrkey@020cc000 { compatible = "fsl,sec-v4.0-pwrkey"; regmap = <&snvs>; interrupts = <0 4 0x4> @@ -545,7 +545,7 @@ FULL EXAMPLE interrupts = <93 2>; }; - snvs-pwrkey@0x020cc000 { + snvs-pwrkey@020cc000 { compatible = "fsl,sec-v4.0-pwrkey"; regmap = <&sec_mon>; interrupts = <0 4 0x4>; diff --git a/dts/Bindings/devfreq/event/rockchip-dfi.txt b/dts/Bindings/devfreq/event/rockchip-dfi.txt index 001dd63979..148191b0fc 100644 --- a/dts/Bindings/devfreq/event/rockchip-dfi.txt +++ b/dts/Bindings/devfreq/event/rockchip-dfi.txt @@ -9,7 +9,7 @@ Required properties: - clock-names : the name of clock used by the DFI, must be "pclk_ddr_mon"; Example: - dfi: dfi@0xff630000 { + dfi: dfi@ff630000 { compatible = "rockchip,rk3399-dfi"; reg = <0x00 0xff630000 0x00 0x4000>; rockchip,pmu = <&pmugrf>; diff --git a/dts/Bindings/display/atmel,lcdc.txt b/dts/Bindings/display/atmel,lcdc.txt index 1a21202778..acb5a01321 100644 --- a/dts/Bindings/display/atmel,lcdc.txt +++ b/dts/Bindings/display/atmel,lcdc.txt @@ -27,7 +27,7 @@ Optional properties: Example: - fb0: fb@0x00500000 { + fb0: fb@00500000 { compatible = "atmel,at91sam9g45-lcdc"; reg = <0x00500000 0x1000>; interrupts = <23 3 0>; @@ -41,7 +41,7 @@ Example: Example for fixed framebuffer memory: - fb0: fb@0x00500000 { + fb0: fb@00500000 { compatible = "atmel,at91sam9263-lcdc"; reg = <0x00700000 0x1000 0x70000000 0x200000>; [...] diff --git a/dts/Bindings/dma/qcom_hidma_mgmt.txt b/dts/Bindings/dma/qcom_hidma_mgmt.txt index 55492c264d..b3408cc57b 100644 --- a/dts/Bindings/dma/qcom_hidma_mgmt.txt +++ b/dts/Bindings/dma/qcom_hidma_mgmt.txt @@ -73,7 +73,7 @@ Hypervisor OS configuration: max-read-transactions = <31>; channel-reset-timeout-cycles = <0x500>; - hidma_24: dma-controller@0x5c050000 { + hidma_24: dma-controller@5c050000 { compatible = "qcom,hidma-1.0"; reg = <0 0x5c050000 0x0 0x1000>, <0 0x5c0b0000 0x0 0x1000>; @@ -85,7 +85,7 @@ Hypervisor OS configuration: Guest OS configuration: - hidma_24: dma-controller@0x5c050000 { + hidma_24: dma-controller@5c050000 { compatible = "qcom,hidma-1.0"; reg = <0 0x5c050000 0x0 0x1000>, <0 0x5c0b0000 0x0 0x1000>; diff --git a/dts/Bindings/dma/zxdma.txt b/dts/Bindings/dma/zxdma.txt index abec59f35f..0ab80f69e5 100644 --- a/dts/Bindings/dma/zxdma.txt +++ b/dts/Bindings/dma/zxdma.txt @@ -13,7 +13,7 @@ Required properties: Example: Controller: - dma: dma-controller@0x09c00000{ + dma: dma-controller@09c00000{ compatible = "zte,zx296702-dma"; reg = <0x09c00000 0x1000>; clocks = <&topclk ZX296702_DMA_ACLK>; diff --git a/dts/Bindings/eeprom/at25.txt b/dts/Bindings/eeprom/at25.txt index 1d3447165c..e823d90b80 100644 --- a/dts/Bindings/eeprom/at25.txt +++ b/dts/Bindings/eeprom/at25.txt @@ -1,7 +1,12 @@ EEPROMs (SPI) compatible with Atmel at25. Required properties: -- compatible : "atmel,at25". +- compatible : Should be "<vendor>,<type>", and generic value "atmel,at25". + Example "<vendor>,<type>" values: + "microchip,25lc040" + "st,m95m02" + "st,m95256" + - reg : chip select number - spi-max-frequency : max spi frequency to use - pagesize : size of the eeprom page @@ -13,7 +18,7 @@ Optional properties: - spi-cpol : SPI inverse clock polarity, as per spi-bus bindings. - read-only : this parameter-less property disables writes to the eeprom -Obsolete legacy properties are can be used in place of "size", "pagesize", +Obsolete legacy properties can be used in place of "size", "pagesize", "address-width", and "read-only": - at25,byte-len : total eeprom size in bytes - at25,addr-mode : addr-mode flags, as defined in include/linux/spi/eeprom.h @@ -22,8 +27,8 @@ Obsolete legacy properties are can be used in place of "size", "pagesize", Additional compatible properties are also allowed. Example: - at25@0 { - compatible = "atmel,at25", "st,m95256"; + eeprom@0 { + compatible = "st,m95256", "atmel,at25"; reg = <0> spi-max-frequency = <5000000>; spi-cpha; diff --git a/dts/Bindings/gpio/gpio-altera.txt b/dts/Bindings/gpio/gpio-altera.txt index 826a7208ca..146e554b3c 100644 --- a/dts/Bindings/gpio/gpio-altera.txt +++ b/dts/Bindings/gpio/gpio-altera.txt @@ -30,7 +30,7 @@ Optional properties: Example: -gpio_altr: gpio@0xff200000 { +gpio_altr: gpio@ff200000 { compatible = "altr,pio-1.0"; reg = <0xff200000 0x10>; interrupts = <0 45 4>; diff --git a/dts/Bindings/gpio/gpio-pca953x.txt b/dts/Bindings/gpio/gpio-pca953x.txt index 7f57271df2..0d0158728f 100644 --- a/dts/Bindings/gpio/gpio-pca953x.txt +++ b/dts/Bindings/gpio/gpio-pca953x.txt @@ -27,7 +27,7 @@ Required properties: ti,tca6424 ti,tca9539 ti,tca9554 - onsemi,pca9654 + onnn,pca9654 exar,xra1202 Optional properties: diff --git a/dts/Bindings/hwmon/jc42.txt b/dts/Bindings/hwmon/jc42.txt index 07a250498f..f569db58f6 100644 --- a/dts/Bindings/hwmon/jc42.txt +++ b/dts/Bindings/hwmon/jc42.txt @@ -34,6 +34,10 @@ Required properties: - reg: I2C address +Optional properties: +- smbus-timeout-disable: When set, the smbus timeout function will be disabled. + This is not supported on all chips. + Example: temp-sensor@1a { diff --git a/dts/Bindings/i2c/i2c-jz4780.txt b/dts/Bindings/i2c/i2c-jz4780.txt index 231e4cc400..d4a082acf9 100644 --- a/dts/Bindings/i2c/i2c-jz4780.txt +++ b/dts/Bindings/i2c/i2c-jz4780.txt @@ -18,7 +18,7 @@ Optional properties: Example / { - i2c4: i2c4@0x10054000 { + i2c4: i2c4@10054000 { compatible = "ingenic,jz4780-i2c"; reg = <0x10054000 0x1000>; diff --git a/dts/Bindings/iio/pressure/hp03.txt b/dts/Bindings/iio/pressure/hp03.txt index 54e7e70bce..831dbee7a5 100644 --- a/dts/Bindings/iio/pressure/hp03.txt +++ b/dts/Bindings/iio/pressure/hp03.txt @@ -10,7 +10,7 @@ Required properties: Example: -hp03@0x77 { +hp03@77 { compatible = "hoperf,hp03"; reg = <0x77>; xclr-gpio = <&portc 0 0x0>; diff --git a/dts/Bindings/input/touchscreen/bu21013.txt b/dts/Bindings/input/touchscreen/bu21013.txt index ca5a2c8648..56d835242a 100644 --- a/dts/Bindings/input/touchscreen/bu21013.txt +++ b/dts/Bindings/input/touchscreen/bu21013.txt @@ -15,7 +15,7 @@ Optional properties: Example: i2c@80110000 { - bu21013_tp@0x5c { + bu21013_tp@5c { compatible = "rohm,bu21013_tp"; reg = <0x5c>; touch-gpio = <&gpio2 20 0x4>; diff --git a/dts/Bindings/interrupt-controller/arm,gic.txt b/dts/Bindings/interrupt-controller/arm,gic.txt index 560d8a727b..2f32446486 100644 --- a/dts/Bindings/interrupt-controller/arm,gic.txt +++ b/dts/Bindings/interrupt-controller/arm,gic.txt @@ -155,7 +155,7 @@ Example: <0x0 0xe112f000 0 0x02000>, <0x0 0xe1140000 0 0x10000>, <0x0 0xe1160000 0 0x10000>; - v2m0: v2m@0x8000 { + v2m0: v2m@8000 { compatible = "arm,gic-v2m-frame"; msi-controller; reg = <0x0 0x80000 0 0x1000>; @@ -163,7 +163,7 @@ Example: .... - v2mN: v2m@0x9000 { + v2mN: v2m@9000 { compatible = "arm,gic-v2m-frame"; msi-controller; reg = <0x0 0x90000 0 0x1000>; diff --git a/dts/Bindings/interrupt-controller/img,meta-intc.txt b/dts/Bindings/interrupt-controller/img,meta-intc.txt index 80994adab3..42431f4469 100644 --- a/dts/Bindings/interrupt-controller/img,meta-intc.txt +++ b/dts/Bindings/interrupt-controller/img,meta-intc.txt @@ -71,7 +71,7 @@ Example 2: * An interrupt generating device that is wired to a Meta external * trigger block. */ - uart1: uart@0x02004c00 { + uart1: uart@02004c00 { // Interrupt source '5' that is level-sensitive. // Note that there are only two cells as specified in the // interrupt parent's '#interrupt-cells' property. diff --git a/dts/Bindings/interrupt-controller/img,pdc-intc.txt b/dts/Bindings/interrupt-controller/img,pdc-intc.txt index a691185503..5dc2a55ad8 100644 --- a/dts/Bindings/interrupt-controller/img,pdc-intc.txt +++ b/dts/Bindings/interrupt-controller/img,pdc-intc.txt @@ -51,7 +51,7 @@ Example 1: /* * TZ1090 PDC block */ - pdc: pdc@0x02006000 { + pdc: pdc@02006000 { // This is an interrupt controller node. interrupt-controller; diff --git a/dts/Bindings/interrupt-controller/st,spear3xx-shirq.txt b/dts/Bindings/interrupt-controller/st,spear3xx-shirq.txt index 715a013ed4..2ab0ea3986 100644 --- a/dts/Bindings/interrupt-controller/st,spear3xx-shirq.txt +++ b/dts/Bindings/interrupt-controller/st,spear3xx-shirq.txt @@ -39,7 +39,7 @@ Example: The following is an example from the SPEAr320 SoC dtsi file. -shirq: interrupt-controller@0xb3000000 { +shirq: interrupt-controller@b3000000 { compatible = "st,spear320-shirq"; reg = <0xb3000000 0x1000>; interrupts = <28 29 30 1>; diff --git a/dts/Bindings/mailbox/altera-mailbox.txt b/dts/Bindings/mailbox/altera-mailbox.txt index c2619797ce..49cfc8c337 100644 --- a/dts/Bindings/mailbox/altera-mailbox.txt +++ b/dts/Bindings/mailbox/altera-mailbox.txt @@ -14,7 +14,7 @@ Optional properties: depends on the interrupt controller parent. Example: - mbox_tx: mailbox@0x100 { + mbox_tx: mailbox@100 { compatible = "altr,mailbox-1.0"; reg = <0x100 0x8>; interrupt-parent = < &gic_0 >; @@ -22,7 +22,7 @@ Example: #mbox-cells = <1>; }; - mbox_rx: mailbox@0x200 { + mbox_rx: mailbox@200 { compatible = "altr,mailbox-1.0"; reg = <0x200 0x8>; interrupt-parent = < &gic_0 >; @@ -40,7 +40,7 @@ support only one channel).The equivalent "mbox-names" property value can be used to give a name to the communication channel to be used by the client user. Example: - mclient0: mclient0@0x400 { + mclient0: mclient0@400 { compatible = "client-1.0"; reg = <0x400 0x10>; mbox-names = "mbox-tx", "mbox-rx"; diff --git a/dts/Bindings/mailbox/brcm,iproc-pdc-mbox.txt b/dts/Bindings/mailbox/brcm,iproc-pdc-mbox.txt index 0f3ee81d92..9bcdf20876 100644 --- a/dts/Bindings/mailbox/brcm,iproc-pdc-mbox.txt +++ b/dts/Bindings/mailbox/brcm,iproc-pdc-mbox.txt @@ -15,7 +15,7 @@ Optional properties: - brcm,use-bcm-hdr: present if a BCM header precedes each frame. Example: - pdc0: iproc-pdc0@0x612c0000 { + pdc0: iproc-pdc0@612c0000 { compatible = "brcm,iproc-pdc-mbox"; reg = <0 0x612c0000 0 0x445>; /* PDC FS0 regs */ interrupts = <GIC_SPI 187 IRQ_TYPE_LEVEL_HIGH>; diff --git a/dts/Bindings/media/exynos5-gsc.txt b/dts/Bindings/media/exynos5-gsc.txt index 0d4fdaedc6..bc963a6d30 100644 --- a/dts/Bindings/media/exynos5-gsc.txt +++ b/dts/Bindings/media/exynos5-gsc.txt @@ -17,7 +17,7 @@ Optional properties: Example: -gsc_0: gsc@0x13e00000 { +gsc_0: gsc@13e00000 { compatible = "samsung,exynos5250-gsc"; reg = <0x13e00000 0x1000>; interrupts = <0 85 0>; diff --git a/dts/Bindings/media/mediatek-vcodec.txt b/dts/Bindings/media/mediatek-vcodec.txt index 46c15c5417..2a615d84a6 100644 --- a/dts/Bindings/media/mediatek-vcodec.txt +++ b/dts/Bindings/media/mediatek-vcodec.txt @@ -68,7 +68,7 @@ vcodec_dec: vcodec@16000000 { "vdec_bus_clk_src"; }; - vcodec_enc: vcodec@0x18002000 { + vcodec_enc: vcodec@18002000 { compatible = "mediatek,mt8173-vcodec-enc"; reg = <0 0x18002000 0 0x1000>, /*VENC_SYS*/ <0 0x19002000 0 0x1000>; /*VENC_LT_SYS*/ diff --git a/dts/Bindings/media/rcar_vin.txt b/dts/Bindings/media/rcar_vin.txt index 6e4ef8caf7..19357d0bbe 100644 --- a/dts/Bindings/media/rcar_vin.txt +++ b/dts/Bindings/media/rcar_vin.txt @@ -44,7 +44,7 @@ Device node example vin0 = &vin0; }; - vin0: vin@0xe6ef0000 { + vin0: vin@e6ef0000 { compatible = "renesas,vin-r8a7790", "renesas,rcar-gen2-vin"; clocks = <&mstp8_clks R8A7790_CLK_VIN0>; reg = <0 0xe6ef0000 0 0x1000>; diff --git a/dts/Bindings/media/samsung-fimc.txt b/dts/Bindings/media/samsung-fimc.txt index e4e15d8d75..48c599dacb 100644 --- a/dts/Bindings/media/samsung-fimc.txt +++ b/dts/Bindings/media/samsung-fimc.txt @@ -138,7 +138,7 @@ Example: }; /* MIPI CSI-2 bus IF sensor */ - s5c73m3: sensor@0x1a { + s5c73m3: sensor@1a { compatible = "samsung,s5c73m3"; reg = <0x1a>; vddio-supply = <...>; diff --git a/dts/Bindings/media/sh_mobile_ceu.txt b/dts/Bindings/media/sh_mobile_ceu.txt index 1ce4e46bcb..17a8e81ca0 100644 --- a/dts/Bindings/media/sh_mobile_ceu.txt +++ b/dts/Bindings/media/sh_mobile_ceu.txt @@ -8,7 +8,7 @@ Bindings, specific for the sh_mobile_ceu_camera.c driver: Example: -ceu0: ceu@0xfe910000 { +ceu0: ceu@fe910000 { compatible = "renesas,sh-mobile-ceu"; reg = <0xfe910000 0xa0>; interrupt-parent = <&intcs>; diff --git a/dts/Bindings/media/video-interfaces.txt b/dts/Bindings/media/video-interfaces.txt index 3994b0143d..258b8dfddf 100644 --- a/dts/Bindings/media/video-interfaces.txt +++ b/dts/Bindings/media/video-interfaces.txt @@ -154,7 +154,7 @@ imx074 is linked to ceu0 through the MIPI CSI-2 receiver (csi2). ceu0 has a 'port' node which may indicate that at any time only one of the following data pipelines can be active: ov772x -> ceu0 or imx074 -> csi2 -> ceu0. - ceu0: ceu@0xfe910000 { + ceu0: ceu@fe910000 { compatible = "renesas,sh-mobile-ceu"; reg = <0xfe910000 0xa0>; interrupts = <0x880>; @@ -193,9 +193,9 @@ pipelines can be active: ov772x -> ceu0 or imx074 -> csi2 -> ceu0. }; }; - i2c0: i2c@0xfff20000 { + i2c0: i2c@fff20000 { ... - ov772x_1: camera@0x21 { + ov772x_1: camera@21 { compatible = "ovti,ov772x"; reg = <0x21>; vddio-supply = <®ulator1>; @@ -219,7 +219,7 @@ pipelines can be active: ov772x -> ceu0 or imx074 -> csi2 -> ceu0. }; }; - imx074: camera@0x1a { + imx074: camera@1a { compatible = "sony,imx074"; reg = <0x1a>; vddio-supply = <®ulator1>; @@ -239,7 +239,7 @@ pipelines can be active: ov772x -> ceu0 or imx074 -> csi2 -> ceu0. }; }; - csi2: csi2@0xffc90000 { + csi2: csi2@ffc90000 { compatible = "renesas,sh-mobile-csi2"; reg = <0xffc90000 0x1000>; interrupts = <0x17a0>; diff --git a/dts/Bindings/memory-controllers/ti/emif.txt b/dts/Bindings/memory-controllers/ti/emif.txt index fd823d6091..152eeccbde 100644 --- a/dts/Bindings/memory-controllers/ti/emif.txt +++ b/dts/Bindings/memory-controllers/ti/emif.txt @@ -46,7 +46,7 @@ Optional properties: Example: -emif1: emif@0x4c000000 { +emif1: emif@4c000000 { compatible = "ti,emif-4d"; ti,hwmods = "emif2"; phy-type = <1>; diff --git a/dts/Bindings/mfd/ti-keystone-devctrl.txt b/dts/Bindings/mfd/ti-keystone-devctrl.txt index 20963c76b4..71a1f59639 100644 --- a/dts/Bindings/mfd/ti-keystone-devctrl.txt +++ b/dts/Bindings/mfd/ti-keystone-devctrl.txt @@ -13,7 +13,7 @@ Required properties: Example: -devctrl: device-state-control@0x02620000 { +devctrl: device-state-control@02620000 { compatible = "ti,keystone-devctrl", "syscon"; reg = <0x02620000 0x1000>; }; diff --git a/dts/Bindings/misc/brcm,kona-smc.txt b/dts/Bindings/misc/brcm,kona-smc.txt index 6c9f176f35..05b47232ed 100644 --- a/dts/Bindings/misc/brcm,kona-smc.txt +++ b/dts/Bindings/misc/brcm,kona-smc.txt @@ -9,7 +9,7 @@ Required properties: - reg : Location and size of bounce buffer Example: - smc@0x3404c000 { + smc@3404c000 { compatible = "brcm,bcm11351-smc", "brcm,kona-smc"; reg = <0x3404c000 0x400>; //1 KiB in SRAM }; diff --git a/dts/Bindings/mmc/brcm,kona-sdhci.txt b/dts/Bindings/mmc/brcm,kona-sdhci.txt index aaba2483b4..7f5dd83f5b 100644 --- a/dts/Bindings/mmc/brcm,kona-sdhci.txt +++ b/dts/Bindings/mmc/brcm,kona-sdhci.txt @@ -12,7 +12,7 @@ Refer to clocks/clock-bindings.txt for generic clock consumer properties. Example: -sdio2: sdio@0x3f1a0000 { +sdio2: sdio@3f1a0000 { compatible = "brcm,kona-sdhci"; reg = <0x3f1a0000 0x10000>; clocks = <&sdio3_clk>; diff --git a/dts/Bindings/mmc/brcm,sdhci-iproc.txt b/dts/Bindings/mmc/brcm,sdhci-iproc.txt index 954561d09a..fa90d253dc 100644 --- a/dts/Bindings/mmc/brcm,sdhci-iproc.txt +++ b/dts/Bindings/mmc/brcm,sdhci-iproc.txt @@ -24,7 +24,7 @@ Optional properties: Example: -sdhci0: sdhci@0x18041000 { +sdhci0: sdhci@18041000 { compatible = "brcm,sdhci-iproc-cygnus"; reg = <0x18041000 0x100>; interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>; diff --git a/dts/Bindings/mmc/ti-omap-hsmmc.txt b/dts/Bindings/mmc/ti-omap-hsmmc.txt index 3a4ac401e6..19f5508a75 100644 --- a/dts/Bindings/mmc/ti-omap-hsmmc.txt +++ b/dts/Bindings/mmc/ti-omap-hsmmc.txt @@ -55,7 +55,7 @@ Examples: [hwmod populated DMA resources] - mmc1: mmc@0x4809c000 { + mmc1: mmc@4809c000 { compatible = "ti,omap4-hsmmc"; reg = <0x4809c000 0x400>; ti,hwmods = "mmc1"; @@ -67,7 +67,7 @@ Examples: [generic DMA request binding] - mmc1: mmc@0x4809c000 { + mmc1: mmc@4809c000 { compatible = "ti,omap4-hsmmc"; reg = <0x4809c000 0x400>; ti,hwmods = "mmc1"; diff --git a/dts/Bindings/mtd/gpmc-nor.txt b/dts/Bindings/mtd/gpmc-nor.txt index 131d3a74d0..c8567b40fe 100644 --- a/dts/Bindings/mtd/gpmc-nor.txt +++ b/dts/Bindings/mtd/gpmc-nor.txt @@ -82,15 +82,15 @@ gpmc: gpmc@6e000000 { label = "bootloader-nor"; reg = <0 0x40000>; }; - partition@0x40000 { + partition@40000 { label = "params-nor"; reg = <0x40000 0x40000>; }; - partition@0x80000 { + partition@80000 { label = "kernel-nor"; reg = <0x80000 0x200000>; }; - partition@0x280000 { + partition@280000 { label = "filesystem-nor"; reg = <0x240000 0x7d80000>; }; diff --git a/dts/Bindings/mtd/jedec,spi-nor.txt b/dts/Bindings/mtd/jedec,spi-nor.txt index 376fa2f50e..956bb046e5 100644 --- a/dts/Bindings/mtd/jedec,spi-nor.txt +++ b/dts/Bindings/mtd/jedec,spi-nor.txt @@ -13,7 +13,6 @@ Required properties: at25df321a at25df641 at26df081a - en25s64 mr25h128 mr25h256 mr25h10 @@ -33,7 +32,6 @@ Required properties: s25fl008k s25fl064k sst25vf040b - sst25wf040b m25p40 m25p80 m25p16 diff --git a/dts/Bindings/mtd/mtk-nand.txt b/dts/Bindings/mtd/mtk-nand.txt index dbf9e054c1..0431841de7 100644 --- a/dts/Bindings/mtd/mtk-nand.txt +++ b/dts/Bindings/mtd/mtk-nand.txt @@ -131,7 +131,7 @@ Example: read-only; reg = <0x00000000 0x00400000>; }; - android@0x00400000 { + android@00400000 { label = "android"; reg = <0x00400000 0x12c00000>; }; diff --git a/dts/Bindings/net/altera_tse.txt b/dts/Bindings/net/altera_tse.txt index a706297998..0e21df94a5 100644 --- a/dts/Bindings/net/altera_tse.txt +++ b/dts/Bindings/net/altera_tse.txt @@ -52,7 +52,7 @@ Optional properties: Example: - tse_sub_0_eth_tse_0: ethernet@0x1,00000000 { + tse_sub_0_eth_tse_0: ethernet@1,00000000 { compatible = "altr,tse-msgdma-1.0"; reg = <0x00000001 0x00000000 0x00000400>, <0x00000001 0x00000460 0x00000020>, @@ -90,7 +90,7 @@ Example: }; }; - tse_sub_1_eth_tse_0: ethernet@0x1,00001000 { + tse_sub_1_eth_tse_0: ethernet@1,00001000 { compatible = "altr,tse-msgdma-1.0"; reg = <0x00000001 0x00001000 0x00000400>, <0x00000001 0x00001460 0x00000020>, diff --git a/dts/Bindings/net/mdio.txt b/dts/Bindings/net/mdio.txt index 96a53f89aa..e3e1603f25 100644 --- a/dts/Bindings/net/mdio.txt +++ b/dts/Bindings/net/mdio.txt @@ -18,7 +18,7 @@ Example : This example shows these optional properties, plus other properties required for the TI Davinci MDIO driver. - davinci_mdio: ethernet@0x5c030000 { + davinci_mdio: ethernet@5c030000 { compatible = "ti,davinci_mdio"; reg = <0x5c030000 0x1000>; #address-cells = <1>; diff --git a/dts/Bindings/net/socfpga-dwmac.txt b/dts/Bindings/net/socfpga-dwmac.txt index b30d04b54e..17d6819669 100644 --- a/dts/Bindings/net/socfpga-dwmac.txt +++ b/dts/Bindings/net/socfpga-dwmac.txt @@ -28,7 +28,7 @@ Required properties: Example: -gmii_to_sgmii_converter: phy@0x100000240 { +gmii_to_sgmii_converter: phy@100000240 { compatible = "altr,gmii-to-sgmii-2.0"; reg = <0x00000001 0x00000240 0x00000008>, <0x00000001 0x00000200 0x00000040>; diff --git a/dts/Bindings/nios2/nios2.txt b/dts/Bindings/nios2/nios2.txt index d6d0a94cb3..b95e831bcb 100644 --- a/dts/Bindings/nios2/nios2.txt +++ b/dts/Bindings/nios2/nios2.txt @@ -36,7 +36,7 @@ Optional properties: Example: -cpu@0x0 { +cpu@0 { device_type = "cpu"; compatible = "altr,nios2-1.0"; reg = <0>; diff --git a/dts/Bindings/pci/altera-pcie.txt b/dts/Bindings/pci/altera-pcie.txt index 495880193a..a1dc9366a8 100644 --- a/dts/Bindings/pci/altera-pcie.txt +++ b/dts/Bindings/pci/altera-pcie.txt @@ -25,7 +25,7 @@ Optional properties: - bus-range: PCI bus numbers covered Example - pcie_0: pcie@0xc00000000 { + pcie_0: pcie@c00000000 { compatible = "altr,pcie-root-port-1.0"; reg = <0xc0000000 0x20000000>, <0xff220000 0x00004000>; diff --git a/dts/Bindings/pci/fsl,imx6q-pcie.txt b/dts/Bindings/pci/fsl,imx6q-pcie.txt index 7b1e48bf17..149d8f7f86 100644 --- a/dts/Bindings/pci/fsl,imx6q-pcie.txt +++ b/dts/Bindings/pci/fsl,imx6q-pcie.txt @@ -52,7 +52,7 @@ Additional required properties for imx7d-pcie: Example: - pcie@0x01000000 { + pcie@01000000 { compatible = "fsl,imx6q-pcie", "snps,dw-pcie"; reg = <0x01ffc000 0x04000>, <0x01f00000 0x80000>; diff --git a/dts/Bindings/pci/hisilicon-pcie.txt b/dts/Bindings/pci/hisilicon-pcie.txt index bdb7ab39d2..7bf9df047a 100644 --- a/dts/Bindings/pci/hisilicon-pcie.txt +++ b/dts/Bindings/pci/hisilicon-pcie.txt @@ -21,7 +21,7 @@ Optional properties: - dma-coherent: Present if DMA operations are coherent. Hip05 Example (note that Hip06 is the same except compatible): - pcie@0xb0080000 { + pcie@b0080000 { compatible = "hisilicon,hip05-pcie", "snps,dw-pcie"; reg = <0 0xb0080000 0 0x10000>, <0x220 0x00000000 0 0x2000>; reg-names = "rc_dbi", "config"; diff --git a/dts/Bindings/phy/sun4i-usb-phy.txt b/dts/Bindings/phy/sun4i-usb-phy.txt index cbc7847dbf..c1ce5a0a65 100644 --- a/dts/Bindings/phy/sun4i-usb-phy.txt +++ b/dts/Bindings/phy/sun4i-usb-phy.txt @@ -45,7 +45,7 @@ Optional properties: - usb3_vbus-supply : regulator phandle for controller usb3 vbus Example: - usbphy: phy@0x01c13400 { + usbphy: phy@01c13400 { #phy-cells = <1>; compatible = "allwinner,sun4i-a10-usb-phy"; /* phy base regs, phy1 pmu reg, phy2 pmu reg */ diff --git a/dts/Bindings/pinctrl/brcm,cygnus-pinmux.txt b/dts/Bindings/pinctrl/brcm,cygnus-pinmux.txt index 3600d5c6c4..3914529a32 100644 --- a/dts/Bindings/pinctrl/brcm,cygnus-pinmux.txt +++ b/dts/Bindings/pinctrl/brcm,cygnus-pinmux.txt @@ -25,7 +25,7 @@ Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt For example: - pinmux: pinmux@0x0301d0c8 { + pinmux: pinmux@0301d0c8 { compatible = "brcm,cygnus-pinmux"; reg = <0x0301d0c8 0x1b0>; diff --git a/dts/Bindings/pinctrl/pinctrl-atlas7.txt b/dts/Bindings/pinctrl/pinctrl-atlas7.txt index eecf028ff4..bf9b07016c 100644 --- a/dts/Bindings/pinctrl/pinctrl-atlas7.txt +++ b/dts/Bindings/pinctrl/pinctrl-atlas7.txt @@ -96,14 +96,14 @@ For example, pinctrl might have subnodes like the following: For a specific board, if it wants to use sd1, it can add the following to its board-specific .dts file. -sd1: sd@0x12340000 { +sd1: sd@12340000 { pinctrl-names = "default"; pinctrl-0 = <&sd1_pmx0>; } or -sd1: sd@0x12340000 { +sd1: sd@12340000 { pinctrl-names = "default"; pinctrl-0 = <&sd1_pmx1>; } diff --git a/dts/Bindings/pinctrl/pinctrl-sirf.txt b/dts/Bindings/pinctrl/pinctrl-sirf.txt index 5f55be59d9..f8420520e1 100644 --- a/dts/Bindings/pinctrl/pinctrl-sirf.txt +++ b/dts/Bindings/pinctrl/pinctrl-sirf.txt @@ -41,7 +41,7 @@ For example, pinctrl might have subnodes like the following: For a specific board, if it wants to use uart2 without hardware flow control, it can add the following to its board-specific .dts file. -uart2: uart@0xb0070000 { +uart2: uart@b0070000 { pinctrl-names = "default"; pinctrl-0 = <&uart2_noflow_pins_a>; } diff --git a/dts/Bindings/pinctrl/rockchip,pinctrl.txt b/dts/Bindings/pinctrl/rockchip,pinctrl.txt index 4864e3a74d..a01a3b8a23 100644 --- a/dts/Bindings/pinctrl/rockchip,pinctrl.txt +++ b/dts/Bindings/pinctrl/rockchip,pinctrl.txt @@ -136,7 +136,7 @@ Example for rk3188: #size-cells = <1>; ranges; - gpio0: gpio0@0x2000a000 { + gpio0: gpio0@2000a000 { compatible = "rockchip,rk3188-gpio-bank0"; reg = <0x2000a000 0x100>; interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>; @@ -149,7 +149,7 @@ Example for rk3188: #interrupt-cells = <2>; }; - gpio1: gpio1@0x2003c000 { + gpio1: gpio1@2003c000 { compatible = "rockchip,gpio-bank"; reg = <0x2003c000 0x100>; interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>; diff --git a/dts/Bindings/regulator/regulator.txt b/dts/Bindings/regulator/regulator.txt index 378f6dc8b8..3cbf56ce66 100644 --- a/dts/Bindings/regulator/regulator.txt +++ b/dts/Bindings/regulator/regulator.txt @@ -107,7 +107,7 @@ regulators (twl_reg1 and twl_reg2), ... }; - mmc: mmc@0x0 { + mmc: mmc@0 { ... ... vmmc-supply = <&twl_reg1>; diff --git a/dts/Bindings/serial/efm32-uart.txt b/dts/Bindings/serial/efm32-uart.txt index 8adbab268c..4f8d8fde0c 100644 --- a/dts/Bindings/serial/efm32-uart.txt +++ b/dts/Bindings/serial/efm32-uart.txt @@ -12,7 +12,7 @@ Optional properties: Example: -uart@0x4000c400 { +uart@4000c400 { compatible = "energymicro,efm32-uart"; reg = <0x4000c400 0x400>; interrupts = <15>; diff --git a/dts/Bindings/serio/allwinner,sun4i-ps2.txt b/dts/Bindings/serio/allwinner,sun4i-ps2.txt index f311472990..75996b6111 100644 --- a/dts/Bindings/serio/allwinner,sun4i-ps2.txt +++ b/dts/Bindings/serio/allwinner,sun4i-ps2.txt @@ -14,7 +14,7 @@ Required properties: Example: - ps20: ps2@0x01c2a000 { + ps20: ps2@01c2a000 { compatible = "allwinner,sun4i-a10-ps2"; reg = <0x01c2a000 0x400>; interrupts = <0 62 4>; diff --git a/dts/Bindings/soc/ti/keystone-navigator-qmss.txt b/dts/Bindings/soc/ti/keystone-navigator-qmss.txt index 64c66a5644..77cd42cc5f 100644 --- a/dts/Bindings/soc/ti/keystone-navigator-qmss.txt +++ b/dts/Bindings/soc/ti/keystone-navigator-qmss.txt @@ -220,7 +220,7 @@ qmss: qmss@2a40000 { #address-cells = <1>; #size-cells = <1>; ranges; - pdsp0@0x2a10000 { + pdsp0@2a10000 { reg = <0x2a10000 0x1000>, <0x2a0f000 0x100>, <0x2a0c000 0x3c8>, diff --git a/dts/Bindings/sound/adi,axi-i2s.txt b/dts/Bindings/sound/adi,axi-i2s.txt index 5875ca459e..4248b662de 100644 --- a/dts/Bindings/sound/adi,axi-i2s.txt +++ b/dts/Bindings/sound/adi,axi-i2s.txt @@ -21,7 +21,7 @@ please check: Example: - i2s: i2s@0x77600000 { + i2s: i2s@77600000 { compatible = "adi,axi-i2s-1.00.a"; reg = <0x77600000 0x1000>; clocks = <&clk 15>, <&audio_clock>; diff --git a/dts/Bindings/sound/adi,axi-spdif-tx.txt b/dts/Bindings/sound/adi,axi-spdif-tx.txt index 4eb7997674..7b664e7cb4 100644 --- a/dts/Bindings/sound/adi,axi-spdif-tx.txt +++ b/dts/Bindings/sound/adi,axi-spdif-tx.txt @@ -20,7 +20,7 @@ please check: Example: - spdif: spdif@0x77400000 { + spdif: spdif@77400000 { compatible = "adi,axi-spdif-tx-1.00.a"; reg = <0x77600000 0x1000>; clocks = <&clk 15>, <&audio_clock>; diff --git a/dts/Bindings/sound/ak4613.txt b/dts/Bindings/sound/ak4613.txt index 1783f9ef09..49a2e74fd9 100644 --- a/dts/Bindings/sound/ak4613.txt +++ b/dts/Bindings/sound/ak4613.txt @@ -20,7 +20,7 @@ Optional properties: Example: &i2c { - ak4613: ak4613@0x10 { + ak4613: ak4613@10 { compatible = "asahi-kasei,ak4613"; reg = <0x10>; }; diff --git a/dts/Bindings/sound/ak4642.txt b/dts/Bindings/sound/ak4642.txt index 340784db68..58e48ee971 100644 --- a/dts/Bindings/sound/ak4642.txt +++ b/dts/Bindings/sound/ak4642.txt @@ -17,7 +17,7 @@ Optional properties: Example 1: &i2c { - ak4648: ak4648@0x12 { + ak4648: ak4648@12 { compatible = "asahi-kasei,ak4642"; reg = <0x12>; }; diff --git a/dts/Bindings/sound/da7218.txt b/dts/Bindings/sound/da7218.txt index 5ca5a709b6..3ab9dfef38 100644 --- a/dts/Bindings/sound/da7218.txt +++ b/dts/Bindings/sound/da7218.txt @@ -73,7 +73,7 @@ Example: compatible = "dlg,da7218"; reg = <0x1a>; interrupt-parent = <&gpio6>; - interrupts = <11 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <11 IRQ_TYPE_LEVEL_LOW>; wakeup-source; VDD-supply = <®_audio>; diff --git a/dts/Bindings/sound/da7219.txt b/dts/Bindings/sound/da7219.txt index cf61681826..5b54d2d045 100644 --- a/dts/Bindings/sound/da7219.txt +++ b/dts/Bindings/sound/da7219.txt @@ -77,7 +77,7 @@ Example: reg = <0x1a>; interrupt-parent = <&gpio6>; - interrupts = <11 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <11 IRQ_TYPE_LEVEL_LOW>; VDD-supply = <®_audio>; VDDMIC-supply = <®_audio>; diff --git a/dts/Bindings/sound/max98371.txt b/dts/Bindings/sound/max98371.txt index 6c285235e6..8b2b2704b5 100644 --- a/dts/Bindings/sound/max98371.txt +++ b/dts/Bindings/sound/max98371.txt @@ -10,7 +10,7 @@ Required properties: Example: &i2c { - max98371: max98371@0x31 { + max98371: max98371@31 { compatible = "maxim,max98371"; reg = <0x31>; }; diff --git a/dts/Bindings/sound/max9867.txt b/dts/Bindings/sound/max9867.txt index 394cd4eb17..b8bd914ee6 100644 --- a/dts/Bindings/sound/max9867.txt +++ b/dts/Bindings/sound/max9867.txt @@ -10,7 +10,7 @@ Required properties: Example: &i2c { - max9867: max9867@0x18 { + max9867: max9867@18 { compatible = "maxim,max9867"; reg = <0x18>; }; diff --git a/dts/Bindings/sound/renesas,fsi.txt b/dts/Bindings/sound/renesas,fsi.txt index 0d0ab51105..0cf0f819b8 100644 --- a/dts/Bindings/sound/renesas,fsi.txt +++ b/dts/Bindings/sound/renesas,fsi.txt @@ -20,7 +20,7 @@ Required properties: Example: -sh_fsi2: sh_fsi2@0xec230000 { +sh_fsi2: sh_fsi2@ec230000 { compatible = "renesas,sh_fsi2"; reg = <0xec230000 0x400>; interrupts = <0 146 0x4>; diff --git a/dts/Bindings/sound/rockchip-spdif.txt b/dts/Bindings/sound/rockchip-spdif.txt index 0a1dc4e181..ec20c1271e 100644 --- a/dts/Bindings/sound/rockchip-spdif.txt +++ b/dts/Bindings/sound/rockchip-spdif.txt @@ -33,7 +33,7 @@ Required properties on RK3288: Example for the rk3188 SPDIF controller: -spdif: spdif@0x1011e000 { +spdif: spdif@1011e000 { compatible = "rockchip,rk3188-spdif", "rockchip,rk3066-spdif"; reg = <0x1011e000 0x2000>; interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>; diff --git a/dts/Bindings/sound/st,sti-asoc-card.txt b/dts/Bindings/sound/st,sti-asoc-card.txt index 40068ec0e9..9c1ee52fed 100644 --- a/dts/Bindings/sound/st,sti-asoc-card.txt +++ b/dts/Bindings/sound/st,sti-asoc-card.txt @@ -51,7 +51,7 @@ Optional properties: Example: - sti_uni_player1: sti-uni-player@0x8D81000 { + sti_uni_player1: sti-uni-player@8D81000 { compatible = "st,stih407-uni-player-hdmi"; #sound-dai-cells = <0>; st,syscfg = <&syscfg_core>; @@ -63,7 +63,7 @@ Example: st,tdm-mode = <1>; }; - sti_uni_player2: sti-uni-player@0x8D82000 { + sti_uni_player2: sti-uni-player@8D82000 { compatible = "st,stih407-uni-player-pcm-out"; #sound-dai-cells = <0>; st,syscfg = <&syscfg_core>; @@ -74,7 +74,7 @@ Example: dma-names = "tx"; }; - sti_uni_player3: sti-uni-player@0x8D85000 { + sti_uni_player3: sti-uni-player@8D85000 { compatible = "st,stih407-uni-player-spdif"; #sound-dai-cells = <0>; st,syscfg = <&syscfg_core>; @@ -85,7 +85,7 @@ Example: dma-names = "tx"; }; - sti_uni_reader1: sti-uni-reader@0x8D84000 { + sti_uni_reader1: sti-uni-reader@8D84000 { compatible = "st,stih407-uni-reader-hdmi"; #sound-dai-cells = <0>; st,syscfg = <&syscfg_core>; diff --git a/dts/Bindings/spi/efm32-spi.txt b/dts/Bindings/spi/efm32-spi.txt index 2c1e6a4393..e0fa61a1be 100644 --- a/dts/Bindings/spi/efm32-spi.txt +++ b/dts/Bindings/spi/efm32-spi.txt @@ -19,7 +19,7 @@ Recommended properties : Example: -spi1: spi@0x4000c400 { /* USART1 */ +spi1: spi@4000c400 { /* USART1 */ #address-cells = <1>; #size-cells = <0>; compatible = "energymicro,efm32-spi"; diff --git a/dts/Bindings/spi/fsl-imx-cspi.txt b/dts/Bindings/spi/fsl-imx-cspi.txt index 5bf13960f7..e3c48b20b1 100644 --- a/dts/Bindings/spi/fsl-imx-cspi.txt +++ b/dts/Bindings/spi/fsl-imx-cspi.txt @@ -12,24 +12,30 @@ Required properties: - "fsl,imx53-ecspi" for SPI compatible with the one integrated on i.MX53 and later Soc - reg : Offset and length of the register set for the device - interrupts : Should contain CSPI/eCSPI interrupt -- cs-gpios : Specifies the gpio pins to be used for chipselects. - clocks : Clock specifiers for both ipg and per clocks. - clock-names : Clock names should include both "ipg" and "per" See the clock consumer binding, Documentation/devicetree/bindings/clock/clock-bindings.txt -- dmas: DMA specifiers for tx and rx dma. See the DMA client binding, - Documentation/devicetree/bindings/dma/dma.txt -- dma-names: DMA request names should include "tx" and "rx" if present. -Obsolete properties: -- fsl,spi-num-chipselects : Contains the number of the chipselect +Recommended properties: +- cs-gpios : GPIOs to use as chip selects, see spi-bus.txt. While the native chip +select lines can be used, they appear to always generate a pulse between each +word of a transfer. Most use cases will require GPIO based chip selects to +generate a valid transaction. Optional properties: +- num-cs : Number of total chip selects, see spi-bus.txt. +- dmas: DMA specifiers for tx and rx dma. See the DMA client binding, +Documentation/devicetree/bindings/dma/dma.txt. +- dma-names: DMA request names, if present, should include "tx" and "rx". - fsl,spi-rdy-drctl: Integer, representing the value of DRCTL, the register controlling the SPI_READY handling. Note that to enable the DRCTL consideration, the SPI_READY mode-flag needs to be set too. Valid values are: 0 (disabled), 1 (edge-triggered burst) and 2 (level-triggered burst). +Obsolete properties: +- fsl,spi-num-chipselects : Contains the number of the chipselect + Example: ecspi@70010000 { diff --git a/dts/Bindings/thermal/thermal.txt b/dts/Bindings/thermal/thermal.txt index 88b6ea1ad2..44d7cb2cb2 100644 --- a/dts/Bindings/thermal/thermal.txt +++ b/dts/Bindings/thermal/thermal.txt @@ -239,7 +239,7 @@ cpus { * A simple fan controller which supports 10 speeds of operation * (represented as 0-9). */ - fan0: fan@0x48 { + fan0: fan@48 { ... cooling-min-level = <0>; cooling-max-level = <9>; @@ -252,7 +252,7 @@ ocp { /* * A simple IC with a single bandgap temperature sensor. */ - bandgap0: bandgap@0x0000ED00 { + bandgap0: bandgap@0000ED00 { ... #thermal-sensor-cells = <0>; }; @@ -330,7 +330,7 @@ ocp { /* * A simple IC with several bandgap temperature sensors. */ - bandgap0: bandgap@0x0000ED00 { + bandgap0: bandgap@0000ED00 { ... #thermal-sensor-cells = <1>; }; @@ -447,7 +447,7 @@ one thermal zone. /* * A simple IC with a single temperature sensor. */ - adc: sensor@0x49 { + adc: sensor@49 { ... #thermal-sensor-cells = <0>; }; @@ -458,7 +458,7 @@ ocp { /* * A simple IC with a single bandgap temperature sensor. */ - bandgap0: bandgap@0x0000ED00 { + bandgap0: bandgap@0000ED00 { ... #thermal-sensor-cells = <0>; }; @@ -516,7 +516,7 @@ with many sensors and many cooling devices. /* * An IC with several temperature sensor. */ - adc_dummy: sensor@0x50 { + adc_dummy: sensor@50 { ... #thermal-sensor-cells = <1>; /* sensor internal ID */ }; diff --git a/dts/Bindings/ufs/ufs-qcom.txt b/dts/Bindings/ufs/ufs-qcom.txt index 1f69ee1a61..21d9a93db2 100644 --- a/dts/Bindings/ufs/ufs-qcom.txt +++ b/dts/Bindings/ufs/ufs-qcom.txt @@ -32,7 +32,7 @@ Optional properties: Example: - ufsphy1: ufsphy@0xfc597000 { + ufsphy1: ufsphy@fc597000 { compatible = "qcom,ufs-phy-qmp-20nm"; reg = <0xfc597000 0x800>; reg-names = "phy_mem"; @@ -53,7 +53,7 @@ Example: <&clock_gcc clk_gcc_ufs_rx_cfg_clk>; }; - ufshc@0xfc598000 { + ufshc@fc598000 { ... phys = <&ufsphy1>; phy-names = "ufsphy"; diff --git a/dts/Bindings/ufs/ufshcd-pltfrm.txt b/dts/Bindings/ufs/ufshcd-pltfrm.txt index a99ed5565b..c39dfef76a 100644 --- a/dts/Bindings/ufs/ufshcd-pltfrm.txt +++ b/dts/Bindings/ufs/ufshcd-pltfrm.txt @@ -46,7 +46,7 @@ Note: If above properties are not defined it can be assumed that the supply regulators or clocks are always on. Example: - ufshc@0xfc598000 { + ufshc@fc598000 { compatible = "jedec,ufs-1.1"; reg = <0xfc598000 0x800>; interrupts = <0 28 0>; diff --git a/dts/Bindings/usb/am33xx-usb.txt b/dts/Bindings/usb/am33xx-usb.txt index 7a33f22c81..7a198a3040 100644 --- a/dts/Bindings/usb/am33xx-usb.txt +++ b/dts/Bindings/usb/am33xx-usb.txt @@ -95,6 +95,7 @@ usb: usb@47400000 { reg = <0x47401300 0x100>; reg-names = "phy"; ti,ctrl_mod = <&ctrl_mod>; + #phy-cells = <0>; }; usb0: usb@47401000 { @@ -141,6 +142,7 @@ usb: usb@47400000 { reg = <0x47401b00 0x100>; reg-names = "phy"; ti,ctrl_mod = <&ctrl_mod>; + #phy-cells = <0>; }; usb1: usb@47401800 { diff --git a/dts/Bindings/usb/ehci-st.txt b/dts/Bindings/usb/ehci-st.txt index 9feea6c3e4..065c91d955 100644 --- a/dts/Bindings/usb/ehci-st.txt +++ b/dts/Bindings/usb/ehci-st.txt @@ -22,7 +22,7 @@ See: Documentation/devicetree/bindings/reset/reset.txt Example: - ehci1: usb@0xfe203e00 { + ehci1: usb@fe203e00 { compatible = "st,st-ehci-300x"; reg = <0xfe203e00 0x100>; interrupts = <GIC_SPI 148 IRQ_TYPE_NONE>; diff --git a/dts/Bindings/usb/ohci-st.txt b/dts/Bindings/usb/ohci-st.txt index d893ec9131..44c998c16f 100644 --- a/dts/Bindings/usb/ohci-st.txt +++ b/dts/Bindings/usb/ohci-st.txt @@ -20,7 +20,7 @@ See: Documentation/devicetree/bindings/reset/reset.txt Example: - ohci0: usb@0xfe1ffc00 { + ohci0: usb@fe1ffc00 { compatible = "st,st-ohci-300x"; reg = <0xfe1ffc00 0x100>; interrupts = <GIC_SPI 149 IRQ_TYPE_NONE>; diff --git a/dts/Bindings/watchdog/ingenic,jz4740-wdt.txt b/dts/Bindings/watchdog/ingenic,jz4740-wdt.txt index e27763ef00..3c7a1cd13b 100644 --- a/dts/Bindings/watchdog/ingenic,jz4740-wdt.txt +++ b/dts/Bindings/watchdog/ingenic,jz4740-wdt.txt @@ -6,7 +6,7 @@ reg: Register address and length for watchdog registers Example: -watchdog: jz4740-watchdog@0x10002000 { +watchdog: jz4740-watchdog@10002000 { compatible = "ingenic,jz4740-watchdog"; reg = <0x10002000 0x100>; }; diff --git a/dts/src/arc/axc003.dtsi b/dts/src/arc/axc003.dtsi index 4e6e9f57e7..dc91c663bc 100644 --- a/dts/src/arc/axc003.dtsi +++ b/dts/src/arc/axc003.dtsi @@ -35,6 +35,14 @@ reg = <0x80 0x10>, <0x100 0x10>; #clock-cells = <0>; clocks = <&input_clk>; + + /* + * Set initial core pll output frequency to 90MHz. + * It will be applied at the core pll driver probing + * on early boot. + */ + assigned-clocks = <&core_clk>; + assigned-clock-rates = <90000000>; }; core_intc: archs-intc@cpu { diff --git a/dts/src/arc/axc003_idu.dtsi b/dts/src/arc/axc003_idu.dtsi index 63954a8b01..69ff4895f2 100644 --- a/dts/src/arc/axc003_idu.dtsi +++ b/dts/src/arc/axc003_idu.dtsi @@ -35,6 +35,14 @@ reg = <0x80 0x10>, <0x100 0x10>; #clock-cells = <0>; clocks = <&input_clk>; + + /* + * Set initial core pll output frequency to 100MHz. + * It will be applied at the core pll driver probing + * on early boot. + */ + assigned-clocks = <&core_clk>; + assigned-clock-rates = <100000000>; }; core_intc: archs-intc@cpu { diff --git a/dts/src/arc/hsdk.dts b/dts/src/arc/hsdk.dts index 8f627c200d..006aa3de53 100644 --- a/dts/src/arc/hsdk.dts +++ b/dts/src/arc/hsdk.dts @@ -114,6 +114,14 @@ reg = <0x00 0x10>, <0x14B8 0x4>; #clock-cells = <0>; clocks = <&input_clk>; + + /* + * Set initial core pll output frequency to 1GHz. + * It will be applied at the core pll driver probing + * on early boot. + */ + assigned-clocks = <&core_clk>; + assigned-clock-rates = <1000000000>; }; serial: serial@5000 { diff --git a/dts/src/arm/am33xx.dtsi b/dts/src/arm/am33xx.dtsi index 1b81c4e757..d37f950258 100644 --- a/dts/src/arm/am33xx.dtsi +++ b/dts/src/arm/am33xx.dtsi @@ -630,6 +630,7 @@ reg-names = "phy"; status = "disabled"; ti,ctrl_mod = <&usb_ctrl_mod>; + #phy-cells = <0>; }; usb0: usb@47401000 { @@ -678,6 +679,7 @@ reg-names = "phy"; status = "disabled"; ti,ctrl_mod = <&usb_ctrl_mod>; + #phy-cells = <0>; }; usb1: usb@47401800 { diff --git a/dts/src/arm/am4372.dtsi b/dts/src/arm/am4372.dtsi index e5b061469b..4714a59fd8 100644 --- a/dts/src/arm/am4372.dtsi +++ b/dts/src/arm/am4372.dtsi @@ -927,7 +927,8 @@ reg = <0x48038000 0x2000>, <0x46000000 0x400000>; reg-names = "mpu", "dat"; - interrupts = <80>, <81>; + interrupts = <GIC_SPI 80 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 81 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "tx", "rx"; status = "disabled"; dmas = <&edma 8 2>, @@ -941,7 +942,8 @@ reg = <0x4803C000 0x2000>, <0x46400000 0x400000>; reg-names = "mpu", "dat"; - interrupts = <82>, <83>; + interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 83 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "tx", "rx"; status = "disabled"; dmas = <&edma 10 2>, diff --git a/dts/src/arm/am437x-cm-t43.dts b/dts/src/arm/am437x-cm-t43.dts index 9e92d48057..3b9a94c274 100644 --- a/dts/src/arm/am437x-cm-t43.dts +++ b/dts/src/arm/am437x-cm-t43.dts @@ -301,8 +301,8 @@ status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&spi0_pins>; - dmas = <&edma 16 - &edma 17>; + dmas = <&edma 16 0 + &edma 17 0>; dma-names = "tx0", "rx0"; flash: w25q64cvzpig@0 { diff --git a/dts/src/arm/armada-385-db-ap.dts b/dts/src/arm/armada-385-db-ap.dts index 25d2d720dc..678aa02333 100644 --- a/dts/src/arm/armada-385-db-ap.dts +++ b/dts/src/arm/armada-385-db-ap.dts @@ -236,6 +236,7 @@ usb3_phy: usb3_phy { compatible = "usb-nop-xceiv"; vcc-supply = <®_xhci0_vbus>; + #phy-cells = <0>; }; reg_xhci0_vbus: xhci0-vbus { diff --git a/dts/src/arm/armada-385-linksys.dtsi b/dts/src/arm/armada-385-linksys.dtsi index e1f355ffc8..434dc9aaa5 100644 --- a/dts/src/arm/armada-385-linksys.dtsi +++ b/dts/src/arm/armada-385-linksys.dtsi @@ -66,6 +66,7 @@ usb3_1_phy: usb3_1-phy { compatible = "usb-nop-xceiv"; vcc-supply = <&usb3_1_vbus>; + #phy-cells = <0>; }; usb3_1_vbus: usb3_1-vbus { diff --git a/dts/src/arm/armada-385-synology-ds116.dts b/dts/src/arm/armada-385-synology-ds116.dts index 36ad571e76..0a3552ebda 100644 --- a/dts/src/arm/armada-385-synology-ds116.dts +++ b/dts/src/arm/armada-385-synology-ds116.dts @@ -191,11 +191,13 @@ usb3_0_phy: usb3_0_phy { compatible = "usb-nop-xceiv"; vcc-supply = <®_usb3_0_vbus>; + #phy-cells = <0>; }; usb3_1_phy: usb3_1_phy { compatible = "usb-nop-xceiv"; vcc-supply = <®_usb3_1_vbus>; + #phy-cells = <0>; }; reg_usb3_0_vbus: usb3-vbus0 { diff --git a/dts/src/arm/armada-388-gp.dts b/dts/src/arm/armada-388-gp.dts index f503955dbd..51b4ee6df1 100644 --- a/dts/src/arm/armada-388-gp.dts +++ b/dts/src/arm/armada-388-gp.dts @@ -276,11 +276,13 @@ usb2_1_phy: usb2_1_phy { compatible = "usb-nop-xceiv"; vcc-supply = <®_usb2_1_vbus>; + #phy-cells = <0>; }; usb3_phy: usb3_phy { compatible = "usb-nop-xceiv"; vcc-supply = <®_usb3_vbus>; + #phy-cells = <0>; }; reg_usb3_vbus: usb3-vbus { diff --git a/dts/src/arm/aspeed-g4.dtsi b/dts/src/arm/aspeed-g4.dtsi index 45d815a86d..de08d9045c 100644 --- a/dts/src/arm/aspeed-g4.dtsi +++ b/dts/src/arm/aspeed-g4.dtsi @@ -219,7 +219,7 @@ compatible = "aspeed,ast2400-vuart"; reg = <0x1e787000 0x40>; reg-shift = <2>; - interrupts = <10>; + interrupts = <8>; clocks = <&clk_uart>; no-loopback-test; status = "disabled"; diff --git a/dts/src/arm/at91-tse850-3.dts b/dts/src/arm/at91-tse850-3.dts index 5f29010cdb..9b82cc8843 100644 --- a/dts/src/arm/at91-tse850-3.dts +++ b/dts/src/arm/at91-tse850-3.dts @@ -221,6 +221,7 @@ jc42@18 { compatible = "nxp,se97b", "jedec,jc-42.4-temp"; reg = <0x18>; + smbus-timeout-disable; }; dpot: mcp4651-104@28 { diff --git a/dts/src/arm/bcm-nsp.dtsi b/dts/src/arm/bcm-nsp.dtsi index 528b9e3bc1..dcc55aa845 100644 --- a/dts/src/arm/bcm-nsp.dtsi +++ b/dts/src/arm/bcm-nsp.dtsi @@ -85,7 +85,7 @@ timer@20200 { compatible = "arm,cortex-a9-global-timer"; reg = <0x20200 0x100>; - interrupts = <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_PPI 11 IRQ_TYPE_EDGE_RISING>; clocks = <&periph_clk>; }; @@ -93,7 +93,7 @@ compatible = "arm,cortex-a9-twd-timer"; reg = <0x20600 0x20>; interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | - IRQ_TYPE_LEVEL_HIGH)>; + IRQ_TYPE_EDGE_RISING)>; clocks = <&periph_clk>; }; diff --git a/dts/src/arm/bcm283x.dtsi b/dts/src/arm/bcm283x.dtsi index 013431e3d7..dcde93c85c 100644 --- a/dts/src/arm/bcm283x.dtsi +++ b/dts/src/arm/bcm283x.dtsi @@ -639,5 +639,6 @@ usbphy: phy { compatible = "usb-nop-xceiv"; + #phy-cells = <0>; }; }; diff --git a/dts/src/arm/bcm958623hr.dts b/dts/src/arm/bcm958623hr.dts index 3bc50849d0..b8bde13de9 100644 --- a/dts/src/arm/bcm958623hr.dts +++ b/dts/src/arm/bcm958623hr.dts @@ -141,10 +141,6 @@ status = "okay"; }; -&sata { - status = "okay"; -}; - &qspi { bspi-sel = <0>; flash: m25p80@0 { diff --git a/dts/src/arm/bcm958625hr.dts b/dts/src/arm/bcm958625hr.dts index d94d14b3c7..6a44b80217 100644 --- a/dts/src/arm/bcm958625hr.dts +++ b/dts/src/arm/bcm958625hr.dts @@ -177,10 +177,6 @@ status = "okay"; }; -&sata { - status = "okay"; -}; - &srab { compatible = "brcm,bcm58625-srab", "brcm,nsp-srab"; status = "okay"; diff --git a/dts/src/arm/da850-lego-ev3.dts b/dts/src/arm/da850-lego-ev3.dts index 413dbd5d9f..81942ae83e 100644 --- a/dts/src/arm/da850-lego-ev3.dts +++ b/dts/src/arm/da850-lego-ev3.dts @@ -178,7 +178,7 @@ */ battery { pinctrl-names = "default"; - pintctrl-0 = <&battery_pins>; + pinctrl-0 = <&battery_pins>; compatible = "lego,ev3-battery"; io-channels = <&adc 4>, <&adc 3>; io-channel-names = "voltage", "current"; @@ -392,7 +392,7 @@ batt_volt_en { gpio-hog; gpios = <6 GPIO_ACTIVE_HIGH>; - output-low; + output-high; }; }; diff --git a/dts/src/arm/dm814x.dtsi b/dts/src/arm/dm814x.dtsi index 9708157f5d..681f548740 100644 --- a/dts/src/arm/dm814x.dtsi +++ b/dts/src/arm/dm814x.dtsi @@ -75,6 +75,7 @@ reg = <0x47401300 0x100>; reg-names = "phy"; ti,ctrl_mod = <&usb_ctrl_mod>; + #phy-cells = <0>; }; usb0: usb@47401000 { @@ -385,6 +386,7 @@ reg = <0x1b00 0x100>; reg-names = "phy"; ti,ctrl_mod = <&usb_ctrl_mod>; + #phy-cells = <0>; }; }; diff --git a/dts/src/arm/exynos5800-peach-pi.dts b/dts/src/arm/exynos5800-peach-pi.dts index b2b95ff205..0029ec2781 100644 --- a/dts/src/arm/exynos5800-peach-pi.dts +++ b/dts/src/arm/exynos5800-peach-pi.dts @@ -664,6 +664,10 @@ status = "okay"; }; +&mixer { + status = "okay"; +}; + /* eMMC flash */ &mmc_0 { status = "okay"; diff --git a/dts/src/arm/imx53.dtsi b/dts/src/arm/imx53.dtsi index 589a67c5f7..84f17f7abb 100644 --- a/dts/src/arm/imx53.dtsi +++ b/dts/src/arm/imx53.dtsi @@ -433,15 +433,6 @@ clock-names = "ipg", "per"; }; - srtc: srtc@53fa4000 { - compatible = "fsl,imx53-rtc", "fsl,imx25-rtc"; - reg = <0x53fa4000 0x4000>; - interrupts = <24>; - interrupt-parent = <&tzic>; - clocks = <&clks IMX5_CLK_SRTC_GATE>; - clock-names = "ipg"; - }; - iomuxc: iomuxc@53fa8000 { compatible = "fsl,imx53-iomuxc"; reg = <0x53fa8000 0x4000>; diff --git a/dts/src/arm/logicpd-som-lv-37xx-devkit.dts b/dts/src/arm/logicpd-som-lv-37xx-devkit.dts index 38faa90007..2fa5eb4bd4 100644 --- a/dts/src/arm/logicpd-som-lv-37xx-devkit.dts +++ b/dts/src/arm/logicpd-som-lv-37xx-devkit.dts @@ -72,7 +72,8 @@ }; &gpmc { - ranges = <1 0 0x08000000 0x1000000>; /* CS1: 16MB for LAN9221 */ + ranges = <0 0 0x30000000 0x1000000 /* CS0: 16MB for NAND */ + 1 0 0x2c000000 0x1000000>; /* CS1: 16MB for LAN9221 */ ethernet@gpmc { pinctrl-names = "default"; diff --git a/dts/src/arm/logicpd-som-lv.dtsi b/dts/src/arm/logicpd-som-lv.dtsi index 26cce4d184..29cb804d10 100644 --- a/dts/src/arm/logicpd-som-lv.dtsi +++ b/dts/src/arm/logicpd-som-lv.dtsi @@ -33,11 +33,12 @@ hsusb2_phy: hsusb2_phy { compatible = "usb-nop-xceiv"; reset-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>; /* gpio_4 */ + #phy-cells = <0>; }; }; &gpmc { - ranges = <0 0 0x00000000 0x1000000>; /* CS0: 16MB for NAND */ + ranges = <0 0 0x30000000 0x1000000>; /* CS0: 16MB for NAND */ nand@0,0 { compatible = "ti,omap2-nand"; @@ -121,7 +122,7 @@ &mmc3 { interrupts-extended = <&intc 94 &omap3_pmx_core2 0x46>; - pinctrl-0 = <&mmc3_pins>; + pinctrl-0 = <&mmc3_pins &wl127x_gpio>; pinctrl-names = "default"; vmmc-supply = <&wl12xx_vmmc>; non-removable; @@ -132,8 +133,8 @@ wlcore: wlcore@2 { compatible = "ti,wl1273"; reg = <2>; - interrupt-parent = <&gpio5>; - interrupts = <24 IRQ_TYPE_LEVEL_HIGH>; /* gpio 152 */ + interrupt-parent = <&gpio1>; + interrupts = <2 IRQ_TYPE_LEVEL_HIGH>; /* gpio 2 */ ref-clock-frequency = <26000000>; }; }; @@ -157,8 +158,6 @@ OMAP3_CORE1_IOPAD(0x2166, PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc2_dat5.sdmmc3_dat1 */ OMAP3_CORE1_IOPAD(0x2168, PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc2_dat6.sdmmc3_dat2 */ OMAP3_CORE1_IOPAD(0x216a, PIN_INPUT_PULLUP | MUX_MODE3) /* sdmmc2_dat6.sdmmc3_dat3 */ - OMAP3_CORE1_IOPAD(0x2184, PIN_INPUT_PULLUP | MUX_MODE4) /* mcbsp4_clkx.gpio_152 */ - OMAP3_CORE1_IOPAD(0x2a0c, PIN_OUTPUT | MUX_MODE4) /* sys_boot1.gpio_3 */ OMAP3_CORE1_IOPAD(0x21d0, PIN_INPUT_PULLUP | MUX_MODE3) /* mcspi1_cs1.sdmmc3_cmd */ OMAP3_CORE1_IOPAD(0x21d2, PIN_INPUT_PULLUP | MUX_MODE3) /* mcspi1_cs2.sdmmc_clk */ >; @@ -228,6 +227,12 @@ OMAP3_WKUP_IOPAD(0x2a0e, PIN_OUTPUT | MUX_MODE4) /* sys_boot2.gpio_4 */ >; }; + wl127x_gpio: pinmux_wl127x_gpio_pin { + pinctrl-single,pins = < + OMAP3_WKUP_IOPAD(0x2a0c, PIN_INPUT | MUX_MODE4) /* sys_boot0.gpio_2 */ + OMAP3_WKUP_IOPAD(0x2a0c, PIN_OUTPUT | MUX_MODE4) /* sys_boot1.gpio_3 */ + >; + }; }; &omap3_pmx_core2 { diff --git a/dts/src/arm/ls1021a-qds.dts b/dts/src/arm/ls1021a-qds.dts index 940875316d..67b4de0e34 100644 --- a/dts/src/arm/ls1021a-qds.dts +++ b/dts/src/arm/ls1021a-qds.dts @@ -215,7 +215,7 @@ reg = <0x2a>; VDDA-supply = <®_3p3v>; VDDIO-supply = <®_3p3v>; - clocks = <&sys_mclk 1>; + clocks = <&sys_mclk>; }; }; }; diff --git a/dts/src/arm/ls1021a-twr.dts b/dts/src/arm/ls1021a-twr.dts index a8b148ad1d..44715c8ef7 100644 --- a/dts/src/arm/ls1021a-twr.dts +++ b/dts/src/arm/ls1021a-twr.dts @@ -187,7 +187,7 @@ reg = <0x0a>; VDDA-supply = <®_3p3v>; VDDIO-supply = <®_3p3v>; - clocks = <&sys_mclk 1>; + clocks = <&sys_mclk>; }; }; diff --git a/dts/src/arm/meson.dtsi b/dts/src/arm/meson.dtsi index 4926133077..0d9faf1a51 100644 --- a/dts/src/arm/meson.dtsi +++ b/dts/src/arm/meson.dtsi @@ -85,15 +85,6 @@ reg = <0x7c00 0x200>; }; - gpio_intc: interrupt-controller@9880 { - compatible = "amlogic,meson-gpio-intc"; - reg = <0xc1109880 0x10>; - interrupt-controller; - #interrupt-cells = <2>; - amlogic,channel-interrupts = <64 65 66 67 68 69 70 71>; - status = "disabled"; - }; - hwrng: rng@8100 { compatible = "amlogic,meson-rng"; reg = <0x8100 0x8>; @@ -191,6 +182,15 @@ status = "disabled"; }; + gpio_intc: interrupt-controller@9880 { + compatible = "amlogic,meson-gpio-intc"; + reg = <0x9880 0x10>; + interrupt-controller; + #interrupt-cells = <2>; + amlogic,channel-interrupts = <64 65 66 67 68 69 70 71>; + status = "disabled"; + }; + wdt: watchdog@9900 { compatible = "amlogic,meson6-wdt"; reg = <0x9900 0x8>; diff --git a/dts/src/arm/nspire.dtsi b/dts/src/arm/nspire.dtsi index ec2283b1a6..1a5ae4cd10 100644 --- a/dts/src/arm/nspire.dtsi +++ b/dts/src/arm/nspire.dtsi @@ -56,6 +56,7 @@ usb_phy: usb_phy { compatible = "usb-nop-xceiv"; + #phy-cells = <0>; }; vbus_reg: vbus_reg { diff --git a/dts/src/arm/omap3-beagle-xm.dts b/dts/src/arm/omap3-beagle-xm.dts index 683b96a8f7..0349fcc9dc 100644 --- a/dts/src/arm/omap3-beagle-xm.dts +++ b/dts/src/arm/omap3-beagle-xm.dts @@ -90,6 +90,7 @@ compatible = "usb-nop-xceiv"; reset-gpios = <&gpio5 19 GPIO_ACTIVE_LOW>; /* gpio_147 */ vcc-supply = <&hsusb2_power>; + #phy-cells = <0>; }; tfp410: encoder0 { diff --git a/dts/src/arm/omap3-beagle.dts b/dts/src/arm/omap3-beagle.dts index 4d2eaf843f..3ca8991a6c 100644 --- a/dts/src/arm/omap3-beagle.dts +++ b/dts/src/arm/omap3-beagle.dts @@ -64,6 +64,7 @@ compatible = "usb-nop-xceiv"; reset-gpios = <&gpio5 19 GPIO_ACTIVE_LOW>; /* gpio_147 */ vcc-supply = <&hsusb2_power>; + #phy-cells = <0>; }; sound { diff --git a/dts/src/arm/omap3-cm-t3x.dtsi b/dts/src/arm/omap3-cm-t3x.dtsi index 31d5ebf388..ab6003fe5a 100644 --- a/dts/src/arm/omap3-cm-t3x.dtsi +++ b/dts/src/arm/omap3-cm-t3x.dtsi @@ -43,12 +43,14 @@ hsusb1_phy: hsusb1_phy { compatible = "usb-nop-xceiv"; vcc-supply = <&hsusb1_power>; + #phy-cells = <0>; }; /* HS USB Host PHY on PORT 2 */ hsusb2_phy: hsusb2_phy { compatible = "usb-nop-xceiv"; vcc-supply = <&hsusb2_power>; + #phy-cells = <0>; }; ads7846reg: ads7846-reg { diff --git a/dts/src/arm/omap3-evm-common.dtsi b/dts/src/arm/omap3-evm-common.dtsi index dbc3f030a1..ee64191e41 100644 --- a/dts/src/arm/omap3-evm-common.dtsi +++ b/dts/src/arm/omap3-evm-common.dtsi @@ -29,6 +29,7 @@ compatible = "usb-nop-xceiv"; reset-gpios = <&gpio1 21 GPIO_ACTIVE_LOW>; /* gpio_21 */ vcc-supply = <&hsusb2_power>; + #phy-cells = <0>; }; leds { diff --git a/dts/src/arm/omap3-gta04.dtsi b/dts/src/arm/omap3-gta04.dtsi index 4504908c23..3dc56fb156 100644 --- a/dts/src/arm/omap3-gta04.dtsi +++ b/dts/src/arm/omap3-gta04.dtsi @@ -120,6 +120,7 @@ hsusb2_phy: hsusb2_phy { compatible = "usb-nop-xceiv"; reset-gpios = <&gpio6 14 GPIO_ACTIVE_LOW>; + #phy-cells = <0>; }; tv0: connector { diff --git a/dts/src/arm/omap3-igep0020-common.dtsi b/dts/src/arm/omap3-igep0020-common.dtsi index 667f962457..ecbec23af4 100644 --- a/dts/src/arm/omap3-igep0020-common.dtsi +++ b/dts/src/arm/omap3-igep0020-common.dtsi @@ -58,6 +58,7 @@ compatible = "usb-nop-xceiv"; reset-gpios = <&gpio1 24 GPIO_ACTIVE_LOW>; /* gpio_24 */ vcc-supply = <&hsusb1_power>; + #phy-cells = <0>; }; tfp410: encoder { diff --git a/dts/src/arm/omap3-igep0030-common.dtsi b/dts/src/arm/omap3-igep0030-common.dtsi index e94d942745..443f717074 100644 --- a/dts/src/arm/omap3-igep0030-common.dtsi +++ b/dts/src/arm/omap3-igep0030-common.dtsi @@ -37,6 +37,7 @@ hsusb2_phy: hsusb2_phy { compatible = "usb-nop-xceiv"; reset-gpios = <&gpio2 22 GPIO_ACTIVE_LOW>; /* gpio_54 */ + #phy-cells = <0>; }; }; diff --git a/dts/src/arm/omap3-lilly-a83x.dtsi b/dts/src/arm/omap3-lilly-a83x.dtsi index 343a36d803..7ada1e93e1 100644 --- a/dts/src/arm/omap3-lilly-a83x.dtsi +++ b/dts/src/arm/omap3-lilly-a83x.dtsi @@ -51,6 +51,7 @@ hsusb1_phy: hsusb1_phy { compatible = "usb-nop-xceiv"; vcc-supply = <®_vcc3>; + #phy-cells = <0>; }; }; diff --git a/dts/src/arm/omap3-overo-base.dtsi b/dts/src/arm/omap3-overo-base.dtsi index f25e158e71..ac141fcd17 100644 --- a/dts/src/arm/omap3-overo-base.dtsi +++ b/dts/src/arm/omap3-overo-base.dtsi @@ -51,6 +51,7 @@ compatible = "usb-nop-xceiv"; reset-gpios = <&gpio6 23 GPIO_ACTIVE_LOW>; /* gpio_183 */ vcc-supply = <&hsusb2_power>; + #phy-cells = <0>; }; /* Regulator to trigger the nPoweron signal of the Wifi module */ diff --git a/dts/src/arm/omap3-pandora-common.dtsi b/dts/src/arm/omap3-pandora-common.dtsi index 53e007abdc..cd53dc6c00 100644 --- a/dts/src/arm/omap3-pandora-common.dtsi +++ b/dts/src/arm/omap3-pandora-common.dtsi @@ -205,6 +205,7 @@ compatible = "usb-nop-xceiv"; reset-gpios = <&gpio1 16 GPIO_ACTIVE_LOW>; /* GPIO_16 */ vcc-supply = <&vaux2>; + #phy-cells = <0>; }; /* HS USB Host VBUS supply diff --git a/dts/src/arm/omap3-tao3530.dtsi b/dts/src/arm/omap3-tao3530.dtsi index 9a601d1524..6f5bd027b7 100644 --- a/dts/src/arm/omap3-tao3530.dtsi +++ b/dts/src/arm/omap3-tao3530.dtsi @@ -46,6 +46,7 @@ compatible = "usb-nop-xceiv"; reset-gpios = <&gpio6 2 GPIO_ACTIVE_LOW>; /* gpio_162 */ vcc-supply = <&hsusb2_power>; + #phy-cells = <0>; }; sound { diff --git a/dts/src/arm/omap3.dtsi b/dts/src/arm/omap3.dtsi index 90b5c7148f..bb33935df7 100644 --- a/dts/src/arm/omap3.dtsi +++ b/dts/src/arm/omap3.dtsi @@ -715,6 +715,7 @@ compatible = "ti,ohci-omap3"; reg = <0x48064400 0x400>; interrupts = <76>; + remote-wakeup-connected; }; usbhsehci: ehci@48064800 { diff --git a/dts/src/arm/omap4-droid4-xt894.dts b/dts/src/arm/omap4-droid4-xt894.dts index 8b93d37310..24a463f864 100644 --- a/dts/src/arm/omap4-droid4-xt894.dts +++ b/dts/src/arm/omap4-droid4-xt894.dts @@ -73,6 +73,7 @@ /* HS USB Host PHY on PORT 1 */ hsusb1_phy: hsusb1_phy { compatible = "usb-nop-xceiv"; + #phy-cells = <0>; }; /* LCD regulator from sw5 source */ diff --git a/dts/src/arm/omap4-duovero.dtsi b/dts/src/arm/omap4-duovero.dtsi index 6e6810c258..eb123b24c8 100644 --- a/dts/src/arm/omap4-duovero.dtsi +++ b/dts/src/arm/omap4-duovero.dtsi @@ -43,6 +43,7 @@ hsusb1_phy: hsusb1_phy { compatible = "usb-nop-xceiv"; reset-gpios = <&gpio2 30 GPIO_ACTIVE_LOW>; /* gpio_62 */ + #phy-cells = <0>; pinctrl-names = "default"; pinctrl-0 = <&hsusb1phy_pins>; diff --git a/dts/src/arm/omap4-panda-common.dtsi b/dts/src/arm/omap4-panda-common.dtsi index 22c1eee9b0..5501d1b4e6 100644 --- a/dts/src/arm/omap4-panda-common.dtsi +++ b/dts/src/arm/omap4-panda-common.dtsi @@ -89,6 +89,7 @@ hsusb1_phy: hsusb1_phy { compatible = "usb-nop-xceiv"; reset-gpios = <&gpio2 30 GPIO_ACTIVE_LOW>; /* gpio_62 */ + #phy-cells = <0>; vcc-supply = <&hsusb1_power>; clocks = <&auxclk3_ck>; clock-names = "main_clk"; diff --git a/dts/src/arm/omap4-var-som-om44.dtsi b/dts/src/arm/omap4-var-som-om44.dtsi index 6500bfc8d1..10fce28ceb 100644 --- a/dts/src/arm/omap4-var-som-om44.dtsi +++ b/dts/src/arm/omap4-var-som-om44.dtsi @@ -44,6 +44,7 @@ reset-gpios = <&gpio6 17 GPIO_ACTIVE_LOW>; /* gpio 177 */ vcc-supply = <&vbat>; + #phy-cells = <0>; clocks = <&auxclk3_ck>; clock-names = "main_clk"; diff --git a/dts/src/arm/omap4.dtsi b/dts/src/arm/omap4.dtsi index 1dc5a76b3c..cc1a07a362 100644 --- a/dts/src/arm/omap4.dtsi +++ b/dts/src/arm/omap4.dtsi @@ -398,7 +398,7 @@ elm: elm@48078000 { compatible = "ti,am3352-elm"; reg = <0x48078000 0x2000>; - interrupts = <4>; + interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>; ti,hwmods = "elm"; status = "disabled"; }; @@ -1081,14 +1081,13 @@ usbhsohci: ohci@4a064800 { compatible = "ti,ohci-omap3"; reg = <0x4a064800 0x400>; - interrupt-parent = <&gic>; interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>; + remote-wakeup-connected; }; usbhsehci: ehci@4a064c00 { compatible = "ti,ehci-omap"; reg = <0x4a064c00 0x400>; - interrupt-parent = <&gic>; interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>; }; }; diff --git a/dts/src/arm/omap5-board-common.dtsi b/dts/src/arm/omap5-board-common.dtsi index 575ecffb0e..1b20838bb9 100644 --- a/dts/src/arm/omap5-board-common.dtsi +++ b/dts/src/arm/omap5-board-common.dtsi @@ -73,12 +73,14 @@ clocks = <&auxclk1_ck>; clock-names = "main_clk"; clock-frequency = <19200000>; + #phy-cells = <0>; }; /* HS USB Host PHY on PORT 3 */ hsusb3_phy: hsusb3_phy { compatible = "usb-nop-xceiv"; reset-gpios = <&gpio3 15 GPIO_ACTIVE_LOW>; /* gpio3_79 ETH_NRESET */ + #phy-cells = <0>; }; tpd12s015: encoder { diff --git a/dts/src/arm/omap5-cm-t54.dts b/dts/src/arm/omap5-cm-t54.dts index 5b172a04b6..5e21fb430a 100644 --- a/dts/src/arm/omap5-cm-t54.dts +++ b/dts/src/arm/omap5-cm-t54.dts @@ -63,12 +63,14 @@ hsusb2_phy: hsusb2_phy { compatible = "usb-nop-xceiv"; reset-gpios = <&gpio3 12 GPIO_ACTIVE_LOW>; /* gpio3_76 HUB_RESET */ + #phy-cells = <0>; }; /* HS USB Host PHY on PORT 3 */ hsusb3_phy: hsusb3_phy { compatible = "usb-nop-xceiv"; reset-gpios = <&gpio3 19 GPIO_ACTIVE_LOW>; /* gpio3_83 ETH_RESET */ + #phy-cells = <0>; }; leds { diff --git a/dts/src/arm/omap5.dtsi b/dts/src/arm/omap5.dtsi index 4cd0005e46..51a7fb3d7b 100644 --- a/dts/src/arm/omap5.dtsi +++ b/dts/src/arm/omap5.dtsi @@ -940,6 +940,7 @@ compatible = "ti,ohci-omap3"; reg = <0x4a064800 0x400>; interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>; + remote-wakeup-connected; }; usbhsehci: ehci@4a064c00 { diff --git a/dts/src/arm/r8a7790.dtsi b/dts/src/arm/r8a7790.dtsi index 2f017fee40..62baabd757 100644 --- a/dts/src/arm/r8a7790.dtsi +++ b/dts/src/arm/r8a7790.dtsi @@ -1201,6 +1201,7 @@ clock-names = "extal", "usb_extal"; #clock-cells = <2>; #power-domain-cells = <0>; + #reset-cells = <1>; }; prr: chipid@ff000044 { diff --git a/dts/src/arm/r8a7792.dtsi b/dts/src/arm/r8a7792.dtsi index 131f65b042..3d080e0737 100644 --- a/dts/src/arm/r8a7792.dtsi +++ b/dts/src/arm/r8a7792.dtsi @@ -829,6 +829,7 @@ clock-names = "extal"; #clock-cells = <2>; #power-domain-cells = <0>; + #reset-cells = <1>; }; }; diff --git a/dts/src/arm/r8a7793.dtsi b/dts/src/arm/r8a7793.dtsi index 58eae569b4..0cd1035de1 100644 --- a/dts/src/arm/r8a7793.dtsi +++ b/dts/src/arm/r8a7793.dtsi @@ -1088,6 +1088,7 @@ clock-names = "extal", "usb_extal"; #clock-cells = <2>; #power-domain-cells = <0>; + #reset-cells = <1>; }; rst: reset-controller@e6160000 { diff --git a/dts/src/arm/r8a7794.dtsi b/dts/src/arm/r8a7794.dtsi index 905e50c9b5..5643976c13 100644 --- a/dts/src/arm/r8a7794.dtsi +++ b/dts/src/arm/r8a7794.dtsi @@ -1099,6 +1099,7 @@ clock-names = "extal", "usb_extal"; #clock-cells = <2>; #power-domain-cells = <0>; + #reset-cells = <1>; }; rst: reset-controller@e6160000 { diff --git a/dts/src/arm/rk3066a-marsboard.dts b/dts/src/arm/rk3066a-marsboard.dts index c6d92c25df..d23ee6d911 100644 --- a/dts/src/arm/rk3066a-marsboard.dts +++ b/dts/src/arm/rk3066a-marsboard.dts @@ -83,6 +83,10 @@ }; }; +&cpu0 { + cpu0-supply = <&vdd_arm>; +}; + &i2c1 { status = "okay"; clock-frequency = <400000>; diff --git a/dts/src/arm/rk3288.dtsi b/dts/src/arm/rk3288.dtsi index cd24894ee5..6102e4e7f3 100644 --- a/dts/src/arm/rk3288.dtsi +++ b/dts/src/arm/rk3288.dtsi @@ -956,7 +956,7 @@ iep_mmu: iommu@ff900800 { compatible = "rockchip,iommu"; reg = <0x0 0xff900800 0x0 0x40>; - interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH 0>; + interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "iep_mmu"; #iommu-cells = <0>; status = "disabled"; diff --git a/dts/src/arm/sun4i-a10.dtsi b/dts/src/arm/sun4i-a10.dtsi index b91300d49a..5840f5c75c 100644 --- a/dts/src/arm/sun4i-a10.dtsi +++ b/dts/src/arm/sun4i-a10.dtsi @@ -502,8 +502,8 @@ reg = <0x01c16000 0x1000>; interrupts = <58>; clocks = <&ccu CLK_AHB_HDMI0>, <&ccu CLK_HDMI>, - <&ccu 9>, - <&ccu 18>; + <&ccu CLK_PLL_VIDEO0_2X>, + <&ccu CLK_PLL_VIDEO1_2X>; clock-names = "ahb", "mod", "pll-0", "pll-1"; dmas = <&dma SUN4I_DMA_NORMAL 16>, <&dma SUN4I_DMA_NORMAL 16>, diff --git a/dts/src/arm/sun5i-a10s.dtsi b/dts/src/arm/sun5i-a10s.dtsi index 6ae4d95e23..316cb8b294 100644 --- a/dts/src/arm/sun5i-a10s.dtsi +++ b/dts/src/arm/sun5i-a10s.dtsi @@ -82,8 +82,8 @@ reg = <0x01c16000 0x1000>; interrupts = <58>; clocks = <&ccu CLK_AHB_HDMI>, <&ccu CLK_HDMI>, - <&ccu 9>, - <&ccu 16>; + <&ccu CLK_PLL_VIDEO0_2X>, + <&ccu CLK_PLL_VIDEO1_2X>; clock-names = "ahb", "mod", "pll-0", "pll-1"; dmas = <&dma SUN4I_DMA_NORMAL 16>, <&dma SUN4I_DMA_NORMAL 16>, diff --git a/dts/src/arm/sun6i-a31.dtsi b/dts/src/arm/sun6i-a31.dtsi index 8bfa12b548..72d3fe44ec 100644 --- a/dts/src/arm/sun6i-a31.dtsi +++ b/dts/src/arm/sun6i-a31.dtsi @@ -429,8 +429,8 @@ interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>; clocks = <&ccu CLK_AHB1_HDMI>, <&ccu CLK_HDMI>, <&ccu CLK_HDMI_DDC>, - <&ccu 7>, - <&ccu 13>; + <&ccu CLK_PLL_VIDEO0_2X>, + <&ccu CLK_PLL_VIDEO1_2X>; clock-names = "ahb", "mod", "ddc", "pll-0", "pll-1"; resets = <&ccu RST_AHB1_HDMI>; reset-names = "ahb"; diff --git a/dts/src/arm/sun7i-a20.dtsi b/dts/src/arm/sun7i-a20.dtsi index 68dfa82544..59655e42e4 100644 --- a/dts/src/arm/sun7i-a20.dtsi +++ b/dts/src/arm/sun7i-a20.dtsi @@ -581,8 +581,8 @@ reg = <0x01c16000 0x1000>; interrupts = <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>; clocks = <&ccu CLK_AHB_HDMI0>, <&ccu CLK_HDMI>, - <&ccu 9>, - <&ccu 18>; + <&ccu CLK_PLL_VIDEO0_2X>, + <&ccu CLK_PLL_VIDEO1_2X>; clock-names = "ahb", "mod", "pll-0", "pll-1"; dmas = <&dma SUN4I_DMA_NORMAL 16>, <&dma SUN4I_DMA_NORMAL 16>, diff --git a/dts/src/arm/sun8i-a83t-tbs-a711.dts b/dts/src/arm/sun8i-a83t-tbs-a711.dts index 9871553893..a021ee6da3 100644 --- a/dts/src/arm/sun8i-a83t-tbs-a711.dts +++ b/dts/src/arm/sun8i-a83t-tbs-a711.dts @@ -146,6 +146,7 @@ status = "okay"; axp81x: pmic@3a3 { + compatible = "x-powers,axp813"; reg = <0x3a3>; interrupt-parent = <&r_intc>; interrupts = <0 IRQ_TYPE_LEVEL_LOW>; diff --git a/dts/src/arm/tango4-common.dtsi b/dts/src/arm/tango4-common.dtsi index 0ec1b0a317..ff72a8efb7 100644 --- a/dts/src/arm/tango4-common.dtsi +++ b/dts/src/arm/tango4-common.dtsi @@ -156,7 +156,6 @@ reg = <0x6e000 0x400>; ranges = <0 0x6e000 0x400>; interrupt-parent = <&gic>; - interrupt-controller; #address-cells = <1>; #size-cells = <1>; diff --git a/dts/src/arm/vf610-zii-dev-rev-c.dts b/dts/src/arm/vf610-zii-dev-rev-c.dts index 02a6227c71..4b8edc8982 100644 --- a/dts/src/arm/vf610-zii-dev-rev-c.dts +++ b/dts/src/arm/vf610-zii-dev-rev-c.dts @@ -121,7 +121,7 @@ switch0port10: port@10 { reg = <10>; label = "dsa"; - phy-mode = "xgmii"; + phy-mode = "xaui"; link = <&switch1port10>; }; }; @@ -208,7 +208,7 @@ switch1port10: port@10 { reg = <10>; label = "dsa"; - phy-mode = "xgmii"; + phy-mode = "xaui"; link = <&switch0port10>; }; }; @@ -359,7 +359,7 @@ }; &i2c1 { - at24mac602@0 { + at24mac602@50 { compatible = "atmel,24c02"; reg = <0x50>; read-only; diff --git a/dts/src/arm64/allwinner/sun50i-a64-bananapi-m64.dts b/dts/src/arm64/allwinner/sun50i-a64-bananapi-m64.dts index 45bdbfb961..4a8d3f83a3 100644 --- a/dts/src/arm64/allwinner/sun50i-a64-bananapi-m64.dts +++ b/dts/src/arm64/allwinner/sun50i-a64-bananapi-m64.dts @@ -75,6 +75,7 @@ pinctrl-0 = <&rgmii_pins>; phy-mode = "rgmii"; phy-handle = <&ext_rgmii_phy>; + phy-supply = <®_dc1sw>; status = "okay"; }; diff --git a/dts/src/arm64/allwinner/sun50i-a64-pine64.dts b/dts/src/arm64/allwinner/sun50i-a64-pine64.dts index 806442d3e8..604cdaedac 100644 --- a/dts/src/arm64/allwinner/sun50i-a64-pine64.dts +++ b/dts/src/arm64/allwinner/sun50i-a64-pine64.dts @@ -77,6 +77,7 @@ pinctrl-0 = <&rmii_pins>; phy-mode = "rmii"; phy-handle = <&ext_rmii_phy1>; + phy-supply = <®_dc1sw>; status = "okay"; }; diff --git a/dts/src/arm64/allwinner/sun50i-a64-sopine-baseboard.dts b/dts/src/arm64/allwinner/sun50i-a64-sopine-baseboard.dts index 0eb2acedf8..abe179de35 100644 --- a/dts/src/arm64/allwinner/sun50i-a64-sopine-baseboard.dts +++ b/dts/src/arm64/allwinner/sun50i-a64-sopine-baseboard.dts @@ -82,6 +82,7 @@ pinctrl-0 = <&rgmii_pins>; phy-mode = "rgmii"; phy-handle = <&ext_rgmii_phy>; + phy-supply = <®_dc1sw>; status = "okay"; }; @@ -95,7 +96,7 @@ &mmc2 { pinctrl-names = "default"; pinctrl-0 = <&mmc2_pins>; - vmmc-supply = <®_vcc3v3>; + vmmc-supply = <®_dcdc1>; vqmmc-supply = <®_vcc1v8>; bus-width = <8>; non-removable; diff --git a/dts/src/arm64/allwinner/sun50i-a64-sopine.dtsi b/dts/src/arm64/allwinner/sun50i-a64-sopine.dtsi index a5da18a6f2..43418bd881 100644 --- a/dts/src/arm64/allwinner/sun50i-a64-sopine.dtsi +++ b/dts/src/arm64/allwinner/sun50i-a64-sopine.dtsi @@ -45,19 +45,10 @@ #include "sun50i-a64.dtsi" -/ { - reg_vcc3v3: vcc3v3 { - compatible = "regulator-fixed"; - regulator-name = "vcc3v3"; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - }; -}; - &mmc0 { pinctrl-names = "default"; pinctrl-0 = <&mmc0_pins>; - vmmc-supply = <®_vcc3v3>; + vmmc-supply = <®_dcdc1>; non-removable; disable-wp; bus-width = <4>; diff --git a/dts/src/arm64/allwinner/sun50i-h5-orangepi-zero-plus2.dts b/dts/src/arm64/allwinner/sun50i-h5-orangepi-zero-plus2.dts index b6b7a561df..a42fd79a62 100644 --- a/dts/src/arm64/allwinner/sun50i-h5-orangepi-zero-plus2.dts +++ b/dts/src/arm64/allwinner/sun50i-h5-orangepi-zero-plus2.dts @@ -71,7 +71,7 @@ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin>; vmmc-supply = <®_vcc3v3>; bus-width = <4>; - cd-gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; + cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; status = "okay"; }; diff --git a/dts/src/arm64/amlogic/meson-gxbb.dtsi b/dts/src/arm64/amlogic/meson-gxbb.dtsi index ead895a4e9..1fb8b9d6cb 100644 --- a/dts/src/arm64/amlogic/meson-gxbb.dtsi +++ b/dts/src/arm64/amlogic/meson-gxbb.dtsi @@ -753,12 +753,12 @@ &uart_B { clocks = <&xtal>, <&clkc CLKID_UART1>, <&xtal>; - clock-names = "xtal", "core", "baud"; + clock-names = "xtal", "pclk", "baud"; }; &uart_C { clocks = <&xtal>, <&clkc CLKID_UART2>, <&xtal>; - clock-names = "xtal", "core", "baud"; + clock-names = "xtal", "pclk", "baud"; }; &vpu { diff --git a/dts/src/arm64/amlogic/meson-gxl.dtsi b/dts/src/arm64/amlogic/meson-gxl.dtsi index 8ed981f59e..6524b89e71 100644 --- a/dts/src/arm64/amlogic/meson-gxl.dtsi +++ b/dts/src/arm64/amlogic/meson-gxl.dtsi @@ -688,7 +688,7 @@ &uart_A { clocks = <&xtal>, <&clkc CLKID_UART0>, <&xtal>; - clock-names = "xtal", "core", "baud"; + clock-names = "xtal", "pclk", "baud"; }; &uart_AO { @@ -703,12 +703,12 @@ &uart_B { clocks = <&xtal>, <&clkc CLKID_UART1>, <&xtal>; - clock-names = "xtal", "core", "baud"; + clock-names = "xtal", "pclk", "baud"; }; &uart_C { clocks = <&xtal>, <&clkc CLKID_UART2>, <&xtal>; - clock-names = "xtal", "core", "baud"; + clock-names = "xtal", "pclk", "baud"; }; &vpu { diff --git a/dts/src/arm64/renesas/salvator-common.dtsi b/dts/src/arm64/renesas/salvator-common.dtsi index a298df74ca..dbe2648649 100644 --- a/dts/src/arm64/renesas/salvator-common.dtsi +++ b/dts/src/arm64/renesas/salvator-common.dtsi @@ -255,7 +255,6 @@ &avb { pinctrl-0 = <&avb_pins>; pinctrl-names = "default"; - renesas,no-ether-link; phy-handle = <&phy0>; status = "okay"; diff --git a/dts/src/arm64/renesas/ulcb.dtsi b/dts/src/arm64/renesas/ulcb.dtsi index 0d85b315ce..73439cf486 100644 --- a/dts/src/arm64/renesas/ulcb.dtsi +++ b/dts/src/arm64/renesas/ulcb.dtsi @@ -145,7 +145,6 @@ &avb { pinctrl-0 = <&avb_pins>; pinctrl-names = "default"; - renesas,no-ether-link; phy-handle = <&phy0>; status = "okay"; diff --git a/dts/src/arm64/rockchip/rk3328-rock64.dts b/dts/src/arm64/rockchip/rk3328-rock64.dts index d4f80786e7..3890468678 100644 --- a/dts/src/arm64/rockchip/rk3328-rock64.dts +++ b/dts/src/arm64/rockchip/rk3328-rock64.dts @@ -132,6 +132,8 @@ assigned-clocks = <&cru SCLK_MAC2IO>, <&cru SCLK_MAC2IO_EXT>; assigned-clock-parents = <&gmac_clkin>, <&gmac_clkin>; clock_in_out = "input"; + /* shows instability at 1GBit right now */ + max-speed = <100>; phy-supply = <&vcc_io>; phy-mode = "rgmii"; pinctrl-names = "default"; diff --git a/dts/src/arm64/rockchip/rk3328.dtsi b/dts/src/arm64/rockchip/rk3328.dtsi index 41d61840fb..2426da6319 100644 --- a/dts/src/arm64/rockchip/rk3328.dtsi +++ b/dts/src/arm64/rockchip/rk3328.dtsi @@ -514,7 +514,7 @@ tsadc: tsadc@ff250000 { compatible = "rockchip,rk3328-tsadc"; reg = <0x0 0xff250000 0x0 0x100>; - interrupts = <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH 0>; + interrupts = <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>; assigned-clocks = <&cru SCLK_TSADC>; assigned-clock-rates = <50000>; clocks = <&cru SCLK_TSADC>, <&cru PCLK_TSADC>; diff --git a/dts/src/arm64/rockchip/rk3399-puma.dtsi b/dts/src/arm64/rockchip/rk3399-puma.dtsi index 910628d18a..1fc5060d70 100644 --- a/dts/src/arm64/rockchip/rk3399-puma.dtsi +++ b/dts/src/arm64/rockchip/rk3399-puma.dtsi @@ -155,17 +155,6 @@ regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; }; - - vdd_log: vdd-log { - compatible = "pwm-regulator"; - pwms = <&pwm2 0 25000 0>; - regulator-name = "vdd_log"; - regulator-min-microvolt = <800000>; - regulator-max-microvolt = <1400000>; - regulator-always-on; - regulator-boot-on; - status = "okay"; - }; }; &cpu_b0 { diff --git a/dts/src/arm64/socionext/uniphier-ld11-ref.dts b/dts/src/arm64/socionext/uniphier-ld11-ref.dts index dd7193acc7..6bdefb26b3 100644 --- a/dts/src/arm64/socionext/uniphier-ld11-ref.dts +++ b/dts/src/arm64/socionext/uniphier-ld11-ref.dts @@ -40,7 +40,6 @@ }; ðsc { - interrupt-parent = <&gpio>; interrupts = <0 8>; }; diff --git a/dts/src/arm64/socionext/uniphier-ld20-ref.dts b/dts/src/arm64/socionext/uniphier-ld20-ref.dts index d99e373135..254d6795c6 100644 --- a/dts/src/arm64/socionext/uniphier-ld20-ref.dts +++ b/dts/src/arm64/socionext/uniphier-ld20-ref.dts @@ -40,7 +40,6 @@ }; ðsc { - interrupt-parent = <&gpio>; interrupts = <0 8>; }; diff --git a/dts/src/arm64/socionext/uniphier-pxs3-ref.dts b/dts/src/arm64/socionext/uniphier-pxs3-ref.dts index 864feeb351..f9f06fcfb9 100644 --- a/dts/src/arm64/socionext/uniphier-pxs3-ref.dts +++ b/dts/src/arm64/socionext/uniphier-pxs3-ref.dts @@ -38,8 +38,7 @@ }; ðsc { - interrupt-parent = <&gpio>; - interrupts = <0 8>; + interrupts = <4 8>; }; &serial0 { diff --git a/dts/src/arm64/socionext/uniphier-pxs3.dtsi b/dts/src/arm64/socionext/uniphier-pxs3.dtsi index 48e733136d..0ac2ace824 100644 --- a/dts/src/arm64/socionext/uniphier-pxs3.dtsi +++ b/dts/src/arm64/socionext/uniphier-pxs3.dtsi @@ -198,8 +198,8 @@ gpio-controller; #gpio-cells = <2>; gpio-ranges = <&pinctrl 0 0 0>, - <&pinctrl 96 0 0>, - <&pinctrl 160 0 0>; + <&pinctrl 104 0 0>, + <&pinctrl 168 0 0>; gpio-ranges-group-names = "gpio_range0", "gpio_range1", "gpio_range2"; @@ -741,6 +741,28 @@ int creat(const char *pathname, mode_t mode) } EXPORT_SYMBOL(creat); +int ftruncate(int fd, loff_t length) +{ + struct fs_driver_d *fsdrv; + FILE *f; + int ret; + + if (check_fd(fd)) + return -errno; + + f = &files[fd]; + + fsdrv = f->fsdev->driver; + + ret = fsdrv->truncate(&f->fsdev->dev, f, length); + if (ret) + return ret; + + f->size = length; + + return 0; +} + int ioctl(int fd, int request, void *buf) { struct fs_driver_d *fsdrv; diff --git a/images/Makefile.am33xx b/images/Makefile.am33xx index 3f291438c1..50fa0196cc 100644 --- a/images/Makefile.am33xx +++ b/images/Makefile.am33xx @@ -51,6 +51,12 @@ FILE_barebox-am33xx-phytec-phycore-r2-mlo.spi.img = start_am33xx_phytec_phycore_ am33xx-mlo-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-r2-mlo.img am33xx-mlospi-$(CONFIG_MACH_PHYTEC_SOM_AM335X) += barebox-am33xx-phytec-phycore-r2-mlo.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_phycore_sram_256mb FILE_barebox-am33xx-phytec-phycore-mlo-256mb.img = start_am33xx_phytec_phycore_sram_256mb.pblx.mlo FILE_barebox-am33xx-phytec-phycore-mlo-256mb.spi.img = start_am33xx_phytec_phycore_sram_256mb.pblx.mlospi diff --git a/images/Makefile.at91 b/images/Makefile.at91 index dc6c1db4b1..c7d86563a7 100644 --- a/images/Makefile.at91 +++ b/images/Makefile.at91 @@ -5,3 +5,7 @@ pblx-$(CONFIG_MACH_AT91SAM9X5EK) += start_at91sam9x5ek FILE_barebox-at91sam9x5ek.img = start_at91sam9x5ek.pblx image-$(CONFIG_MACH_AT91SAM9X5EK) += barebox-at91sam9x5ek.img + +pblx-$(CONFIG_MACH_AT91SAM9263EK) += start_at91sam9263ek +FILE_barebox-at91sam9263ek.img = start_at91sam9263ek.pblx +image-$(CONFIG_MACH_AT91SAM9263EK) += barebox-at91sam9263ek.img diff --git a/include/file-list.h b/include/file-list.h index 1e02539d4d..404d8d64bb 100644 --- a/include/file-list.h +++ b/include/file-list.h @@ -4,6 +4,7 @@ #define FILE_LIST_FLAG_SAFE (1 << 0) #define FILE_LIST_FLAG_READBACK (1 << 1) #define FILE_LIST_FLAG_CREATE (1 << 2) +#define FILE_LIST_FLAG_UBI (1 << 3) struct file_list_entry { char *name; diff --git a/include/filetype.h b/include/filetype.h index c84905d782..b98dcb5014 100644 --- a/include/filetype.h +++ b/include/filetype.h @@ -39,6 +39,7 @@ enum filetype { filetype_mxs_bootstream, filetype_socfpga_xload, filetype_kwbimage_v1, + filetype_android_sparse, filetype_max, }; diff --git a/include/image-sparse.h b/include/image-sparse.h new file mode 100644 index 0000000000..29242f4fd5 --- /dev/null +++ b/include/image-sparse.h @@ -0,0 +1,67 @@ +/* + * This is from the Android Project, + * Repository: https://android.googlesource.com/platform/system/core + * File: libsparse/sparse_format.h + * Commit: 28fa5bc347390480fe190294c6c385b6a9f0d68b + * Copyright (C) 2010 The Android Open Source Project + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef _IMAGE_SPARSE_H +#define _IMAGE_SPARSE_H + +struct sparse_header { + __le32 magic; /* 0xed26ff3a */ + __le16 major_version; /* (0x1) - reject images with higher major versions */ + __le16 minor_version; /* (0x0) - allow images with higer minor versions */ + __le16 file_hdr_sz; /* 28 bytes for first revision of the file format */ + __le16 chunk_hdr_sz; /* 12 bytes for first revision of the file format */ + __le32 blk_sz; /* block size in bytes, must be a multiple of 4 (4096) */ + __le32 total_blks; /* total blocks in the non-sparse output image */ + __le32 total_chunks; /* total chunks in the sparse input image */ + __le32 image_checksum; /* CRC32 checksum of the original data, counting "don't care" */ + /* as 0. Standard 802.3 polynomial, use a Public Domain */ + /* table implementation */ +}; + +#define SPARSE_HEADER_MAGIC 0xed26ff3a + +#define CHUNK_TYPE_RAW 0xCAC1 +#define CHUNK_TYPE_FILL 0xCAC2 +#define CHUNK_TYPE_DONT_CARE 0xCAC3 +#define CHUNK_TYPE_CRC32 0xCAC4 + +struct chunk_header { + __le16 chunk_type; /* 0xCAC1 -> raw; 0xCAC2 -> fill; 0xCAC3 -> don't care */ + __le16 reserved1; + __le32 chunk_sz; /* in blocks in output image */ + __le32 total_sz; /* in bytes of chunk input file including chunk header and data */ +}; + +/* Following a Raw or Fill or CRC32 chunk is data. + * For a Raw chunk, it's the data in chunk_sz * blk_sz. + * For a Fill chunk, it's 4 bytes of the fill data. + * For a CRC32 chunk, it's 4 bytes of CRC32 + */ + +static inline int is_sparse_image(const void *buf) +{ + const struct sparse_header *s = buf; + + if ((le32_to_cpu(s->magic) == SPARSE_HEADER_MAGIC) && + (le16_to_cpu(s->major_version) == 1)) + return 1; + + return 0; +} + +struct sparse_image_ctx; + +struct sparse_image_ctx *sparse_image_open(const char *path); +int sparse_image_read(struct sparse_image_ctx *si, void *buf, + loff_t *pos, size_t len, int *retlen); +void sparse_image_close(struct sparse_image_ctx *si); +loff_t sparse_image_size(struct sparse_image_ctx *si); + +#endif /* _IMAGE_SPARSE_H */ diff --git a/include/ubiformat.h b/include/ubiformat.h index b195fd8392..8305a853c7 100644 --- a/include/ubiformat.h +++ b/include/ubiformat.h @@ -20,4 +20,7 @@ struct ubiformat_args { int ubiformat(struct mtd_info *mtd, struct ubiformat_args *args); +int ubiformat_write(struct mtd_info *mtd, const void *buf, size_t count, + loff_t offset); + #endif /* __UBIFORMAT_H */ diff --git a/include/unistd.h b/include/unistd.h index 31f430a5b6..f392e6dd6c 100644 --- a/include/unistd.h +++ b/include/unistd.h @@ -20,5 +20,6 @@ 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); +int ftruncate(int fd, loff_t length); #endif /* __UNISTD_H */ diff --git a/lib/Kconfig b/lib/Kconfig index 9562b1b8c2..637b3f1003 100644 --- a/lib/Kconfig +++ b/lib/Kconfig @@ -79,6 +79,9 @@ config LIBSCAN config LIBUBIGEN bool +config IMAGE_SPARSE + bool + config STMP_DEVICE bool diff --git a/lib/Makefile b/lib/Makefile index 8f7ef4e4ed..66c59fe15e 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -32,6 +32,7 @@ obj-$(CONFIG_GENERIC_FIND_NEXT_BIT) += find_next_bit.o obj-y += glob.o obj-y += notifier.o obj-y += random.o +obj-$(CONFIG_IMAGE_SPARSE) += image-sparse.o obj-y += lzo/ obj-$(CONFIG_LZ4_DECOMPRESS) += lz4/ obj-y += show_progress.o diff --git a/lib/image-sparse.c b/lib/image-sparse.c new file mode 100644 index 0000000000..7137d15fd0 --- /dev/null +++ b/lib/image-sparse.c @@ -0,0 +1,249 @@ +/* + * Copyright (c) 2009, Google Inc. + * All rights reserved. + * + * Copyright (c) 2009-2014, The Linux Foundation. All rights reserved. + * Portions Copyright 2014 Broadcom Corporation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of The Linux Foundation nor + * the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * NOTE: + * Although it is very similar, this license text is not identical + * to the "BSD-3-Clause", therefore, DO NOT MODIFY THIS LICENSE TEXT! + */ +#define pr_fmt(fmt) "image-sparse: " fmt + +#include <config.h> +#include <common.h> +#include <image-sparse.h> +#include <unistd.h> +#include <malloc.h> +#include <fs.h> +#include <libfile.h> +#include <linux/sizes.h> + +#include <linux/math64.h> + +#ifndef CONFIG_FASTBOOT_FLASH_FILLBUF_SIZE +#define CONFIG_FASTBOOT_FLASH_FILLBUF_SIZE (1024 * 512) +#endif + +struct sparse_image_ctx { + int fd; + struct sparse_header sparse; + int processed_chunks; + struct chunk_header chunk; + loff_t pos; + size_t remaining; + uint32_t fill_val; +}; + +int sparse_seek(struct sparse_image_ctx *si) +{ + unsigned int chunk_data_sz, payload; + loff_t offs; + int ret; + +again: + if (si->processed_chunks == si->sparse.total_chunks) + return 0; + + /* Read and skip over chunk header */ + ret = read_full(si->fd, &si->chunk, + sizeof(struct chunk_header)); + if (ret < 0) + return ret; + if (ret < sizeof(struct chunk_header)) + return -EINVAL; + + pr_debug("=== Chunk Header ===\n"); + pr_debug("chunk_type: 0x%x\n", si->chunk.chunk_type); + pr_debug("chunk_data_sz: 0x%x\n", si->chunk.chunk_sz); + pr_debug("total_size: 0x%x\n", si->chunk.total_sz); + + if (si->sparse.chunk_hdr_sz > sizeof(struct chunk_header)) { + /* + * Skip the remaining bytes in a header that is longer + * than we expected. + */ + offs = lseek(si->fd, si->sparse.chunk_hdr_sz - + sizeof(struct chunk_header), SEEK_CUR); + if (offs == -1) + return -errno; + } + + chunk_data_sz = si->sparse.blk_sz * si->chunk.chunk_sz; + payload = si->chunk.total_sz - si->sparse.chunk_hdr_sz; + + si->processed_chunks++; + + switch (si->chunk.chunk_type) { + case CHUNK_TYPE_RAW: + if (payload != chunk_data_sz) + return -EINVAL; + + si->remaining = payload; + + break; + + case CHUNK_TYPE_FILL: + if (payload != sizeof(uint32_t)) + return -EINVAL; + + ret = read_full(si->fd, &si->fill_val, sizeof(uint32_t)); + if (ret < 0) + return ret; + if (ret < sizeof(uint32_t)) + return -EINVAL; + + si->remaining = chunk_data_sz; + + break; + + case CHUNK_TYPE_DONT_CARE: + si->pos += chunk_data_sz; + goto again; + + case CHUNK_TYPE_CRC32: + if (payload != sizeof(uint32_t)) + return -EINVAL; + + offs = lseek(si->fd, chunk_data_sz, SEEK_CUR); + if (offs == -1) + return -EINVAL; + goto again; + + default: + pr_err("Unknown chunk type 0x%04x", + si->chunk.chunk_type); + return -EINVAL; + } + + return 1; +} + +loff_t sparse_image_size(struct sparse_image_ctx *si) +{ + return (loff_t)si->sparse.blk_sz * si->sparse.total_blks; +} + +struct sparse_image_ctx *sparse_image_open(const char *path) +{ + struct sparse_image_ctx *si; + loff_t offs; + int ret; + + si = xzalloc(sizeof(*si)); + + si->fd = open(path, O_RDONLY); + if (si->fd < 0) { + ret = -errno; + goto out; + } + + /* Read and skip over sparse image header */ + read(si->fd, &si->sparse, sizeof(struct sparse_header)); + + if (si->sparse.file_hdr_sz > sizeof(struct sparse_header)) { + /* + * Skip the remaining bytes in a header that is longer than + * we expected. + */ + offs = lseek(si->fd, si->sparse.file_hdr_sz, SEEK_SET); + if (offs == -1) { + ret = -errno; + goto out; + } + } + + ret = sparse_seek(si); + if (ret < 0) + goto out; + + return si; +out: + free(si); + + return ERR_PTR(ret); +} + +int sparse_image_read(struct sparse_image_ctx *si, void *buf, loff_t *pos, + size_t len, int *retlen) +{ + size_t now; + int ret, i; + + if (si->remaining == 0) { + ret = sparse_seek(si); + if (ret < 0) + return ret; + if (ret == 0) { + *retlen = 0; + return 0; + } + } + + *pos = si->pos; + + now = min(si->remaining, len); + + switch (si->chunk.chunk_type) { + case CHUNK_TYPE_RAW: + ret = read_full(si->fd, buf, now); + if (ret < 0) + return ret; + if (ret < now) + return -EINVAL; + + break; + + case CHUNK_TYPE_FILL: + if (now & 3) + return -EINVAL; + + for (i = 0; i < now / sizeof(uint32_t); i++) { + uint32_t *buf32 = buf; + + buf32[i] = si->fill_val; + } + + break; + default: + return -EINVAL; + } + + si->pos += now; + si->remaining -= now; + + *retlen = now; + + return 0; +} + +void sparse_image_close(struct sparse_image_ctx *si) +{ + close(si->fd); + free(si); +} diff --git a/net/dhcp.c b/net/dhcp.c index 18f347d2f8..946efaa1bf 100644 --- a/net/dhcp.c +++ b/net/dhcp.c @@ -45,7 +45,7 @@ struct bootp { char bp_sname[64]; /* Server host name */ char bp_file[128]; /* Boot file name */ char bp_vend[0]; /* Vendor information */ -}; +} __packed; /* DHCP States */ typedef enum { diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index 310dcdc941..f3771902b7 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include @@ -205,11 +205,13 @@ else arg-check = $(if $(strip $(cmd_$@)),,1) endif -# >'< substitution is for echo to work, -# >$< substitution to preserve $ when reloading .cmd file -# note: when using inline perl scripts [perl -e '...$$t=1;...'] -# in $(cmd_xxx) double $$ your perl vars -make-cmd = $(subst \\,\\\\,$(subst \#,\\\#,$(subst $$,$$$$,$(call escsq,$(cmd_$(1)))))) +# Replace >$< with >$$< to preserve $ when reloading the .cmd file +# (needed for make) +# Replace >#< with >\#< to avoid starting a comment in the .cmd file +# (needed for make) +# Replace >'< with >'\''< to be able to enclose the whole string in '...' +# (needed for the shell) +make-cmd = $(call escsq,$(subst \#,\\\#,$(subst $$,$$$$,$(cmd_$(1))))) # Find any prerequisites that is newer than target or that does not exist. # PHONY targets skipped in both cases. @@ -220,7 +222,7 @@ any-prereq = $(filter-out $(PHONY),$?) $(filter-out $(PHONY) $(wildcard $^),$^) if_changed = $(if $(strip $(any-prereq) $(arg-check)), \ @set -e; \ $(echo-cmd) $(cmd_$(1)); \ - echo 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd) + printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd) # Execute the command and also postprocess generated .d dependencies file. if_changed_dep = $(if $(strip $(any-prereq) $(arg-check) ), \ diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index b084bacabe..d202a7299c 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -292,7 +292,7 @@ quiet_cmd_env = ENV $@ cmd_env=$(srctree)/scripts/genenv $(srctree) $(objtree) $@ $< %.bbenv$(DEFAULT_COMPRESSION_SUFFIX): % FORCE - $(call cmd,env) + $(call if_changed,env) # Bzip2 # --------------------------------------------------------------------------- |