Merge branch '2020-09-12-assorted-bugfixes'
authorTom Rini <trini@konsulko.com>
Mon, 14 Sep 2020 19:39:27 +0000 (15:39 -0400)
committerTom Rini <trini@konsulko.com>
Mon, 14 Sep 2020 19:39:46 +0000 (15:39 -0400)
- A large assortment of minor fixes
- Documentation improvements

12 files changed:
Makefile
arch/arm/mach-mediatek/Kconfig
cmd/nvedit.c
common/Kconfig
common/bootm.c
common/spl/spl_fit.c
doc/build/gcc.rst [new file with mode: 0644]
doc/build/index.rst
doc/build/source.rst [new file with mode: 0644]
drivers/mtd/nand/raw/nand_util.c
drivers/pci/pcie_mediatek.c
test/py/tests/test_env.py

index 3a18fb3..6665cd6 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2025,7 +2025,7 @@ CLEAN_FILES += include/bmp_logo.h include/bmp_logo_data.h tools/version.h \
 
 # Directories & files removed with 'make mrproper'
 MRPROPER_DIRS  += include/config include/generated spl tpl \
-                 .tmp_objdiff
+                 .tmp_objdiff doc/output
 MRPROPER_FILES += .config .config.old include/autoconf.mk* include/config.h \
                  ctags etags tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \
                  drivers/video/fonts/*.S
index 0042e57..7f40ba9 100644 (file)
@@ -47,10 +47,10 @@ config TARGET_MT8512
         select ARM64
        select MT8512
         help
-          The MediaTek MT8512 is a ARM64-based SoC with a quad-core Cortex-A53.
+          The MediaTek MT8512 is a ARM64-based SoC with a dual-core Cortex-A53.
           including UART, SPI, USB2.0 and OTG, SD and MMC cards, NAND, PWM,
-          Ethernet, IR TX/RX, I2C, I2S, S/PDIF, and built-in Wi-Fi / Bluetooth combo
-          chip and several DDR3 and DDR4 options.
+          IR RX, I2C, I2S, S/PDIF, and built-in Wi-Fi / Bluetooth digital
+          and several LPDDR3 and LPDDR4 options.
 
 config TARGET_MT8516
        bool "MediaTek MT8516 SoC"
index d188c6a..9f145dd 100644 (file)
@@ -1171,6 +1171,11 @@ static int do_env_import(struct cmd_tbl *cmdtp, int flag,
                uint32_t crc;
                env_t *ep = (env_t *)ptr;
 
+               if (size <= offsetof(env_t, data)) {
+                       printf("## Error: Invalid size 0x%zX\n", size);
+                       return 1;
+               }
+
                size -= offsetof(env_t, data);
                memcpy(&crc, &ep->crc, sizeof(crc));
 
index c58f08b..b1934b3 100644 (file)
@@ -378,7 +378,7 @@ config USE_BOOTARGS
 
 config BOOTARGS
        string "Boot arguments"
-       depends on USE_BOOTARGS
+       depends on USE_BOOTARGS && !USE_DEFAULT_ENV_FILE
        help
          This can be used to pass arguments to the bootm command. The value of
          CONFIG_BOOTARGS goes into the environment value "bootargs". Note that
@@ -395,7 +395,7 @@ config USE_BOOTCOMMAND
 
 config BOOTCOMMAND
        string "bootcmd value"
-       depends on USE_BOOTCOMMAND
+       depends on USE_BOOTCOMMAND && !USE_DEFAULT_ENV_FILE
        default "run distro_bootcmd" if DISTRO_DEFAULTS
        help
          This is the string of commands that will be used as bootcmd and if
@@ -416,7 +416,7 @@ config USE_PREBOOT
 
 config PREBOOT
        string "preboot default value"
-       depends on USE_PREBOOT
+       depends on USE_PREBOOT && !USE_DEFAULT_ENV_FILE
        default ""
        help
          This is the default of "preboot" environment variable.
index 247b600..b337749 100644 (file)
@@ -390,6 +390,8 @@ static int bootm_load_os(bootm_headers_t *images, int boot_progress)
                bootstage_error(BOOTSTAGE_ID_DECOMP_IMAGE);
                return err;
        }
+       /* We need the decompressed image size in the next steps */
+       images->os.image_len = load_end - load;
 
        flush_cache(flush_start, ALIGN(load_end, ARCH_DMA_MINALIGN) - flush_start);
 
index 365104f..a8bfd38 100644 (file)
@@ -349,9 +349,12 @@ static int spl_fit_append_fdt(struct spl_image_info *spl_image,
 
        /*
         * Use the address following the image as target address for the
-        * device tree.
+        * device tree. Load address is aligned to 8 bytes to match the required
+        * alignment specified for linux arm [1] and arm 64 [2] booting
+        * [1]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/arm/booting.rst#n126
+        * [2]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/arm64/booting.rst#n45
         */
-       image_info.load_addr = spl_image->load_addr + spl_image->size;
+       image_info.load_addr = ALIGN(spl_image->load_addr + spl_image->size, 8);
 
        /* Figure out which device tree the board wants to use */
        node = spl_fit_get_image_node(fit, images, FIT_FDT_PROP, index++);
diff --git a/doc/build/gcc.rst b/doc/build/gcc.rst
new file mode 100644 (file)
index 0000000..fcb0b1f
--- /dev/null
@@ -0,0 +1,119 @@
+Building with GCC
+=================
+
+Dependencies
+------------
+
+For building U-Boot you need a GCC compiler for your host platform. If you
+are not building on the target platform you further need  a GCC cross compiler.
+
+Debian based
+~~~~~~~~~~~~
+
+On Debian based systems the cross compiler packages are named
+gcc-<architecture>-linux-gnu.
+
+You could install GCC and the GCC cross compiler for the ARMv8 architecture with
+
+.. code-block:: bash
+
+    sudo apt-get gcc gcc-aarch64-linux-gnu
+
+Depending on the build targets further packages maybe needed
+
+.. code-block:: bash
+
+    sudo apt-get install bc bison build-essential coccinelle \
+      device-tree-compiler dfu-util efitools flex gdisk liblz4-tool \
+      libguestfs-tools libncurses-dev libpython3-dev libsdl2-dev libssl-dev \
+      lzma-alone openssl python3 python3-coverage python3-pyelftools \
+      python3-pytest python3-sphinxcontrib.apidoc python3-sphinx-rtd-theme swig
+
+Prerequisites
+-------------
+
+For some boards you have to build prerequisite files before you can build
+U-Boot, e.g. for the some boards you will need to build the ARM Trusted Firmware
+beforehand. Please, refer to the board specific documentation
+:doc:`../board/index`.
+
+Configuration
+-------------
+
+Directory configs/ contains the template configuration files for the maintained
+boards following the naming scheme::
+
+    <board name>_defconfig
+
+These files have been stripped of default settings. So you cannot use them
+directly. Instead their name serves as a make target to generate the actual
+configuration file .config. For instance the configuration template for the
+Odroid C2 board is called odroid-c2_defconfig. The corresponding .config file
+is generated by
+
+.. code-block:: bash
+
+    make odroid-c2_defconfig
+
+You can adjust the configuration using
+
+.. code-block:: bash
+
+    make menuconfig
+
+Building
+--------
+
+When cross compiling you will have to specify the prefix of the cross-compiler.
+You can either specify the value of the CROSS_COMPILE variable on the make
+command line or export it beforehand.
+
+.. code-block:: bash
+
+    CROSS_COMPILE=<compiler-prefix> make
+
+Assuming cross compiling on Debian for ARMv8 this would be
+
+.. code-block:: bash
+
+    CROSS_COMPILE=aarch64-linux-gnu- make
+
+Build parameters
+~~~~~~~~~~~~~~~~
+
+A list of available parameters for the make command can be obtained via
+
+.. code-block:: bash
+
+    make help
+
+You can speed up compilation by parallelization using the -j parameter, e.g.
+
+.. code-block:: bash
+
+    CROSS_COMPILE=aarch64-linux-gnu- make -j$(nproc)
+
+Further important build parameters are
+
+* O=<dir> - generate all output files in directory <dir>, including .config
+* V=1 - verbose build
+
+Other build targets
+~~~~~~~~~~~~~~~~~~~
+
+A list of all make targets can be obtained via
+
+.. code-block:: bash
+
+    make help
+
+Important ones are
+
+* clean - remove most generated files but keep the configuration
+* mrproper - remove all generated files + config + various backup files
+
+Installation
+------------
+
+The process for installing U-Boot on the target device is device specific.
+Please, refer to the board specific documentation :doc:`../board/index`.
index e0072af..5f90f95 100644 (file)
@@ -6,5 +6,7 @@ Build U-Boot
 .. toctree::
    :maxdepth: 2
 
+   source
+   gcc
    clang
    tools
diff --git a/doc/build/source.rst b/doc/build/source.rst
new file mode 100644 (file)
index 0000000..75720e2
--- /dev/null
@@ -0,0 +1,30 @@
+Obtaining the source
+=====================
+
+The source of the U-Boot project is maintained in a Git repository.
+
+You can download the source via
+
+.. code-block:: bash
+
+    git clone https://gitlab.denx.de/u-boot/u-boot.git
+
+A mirror of the source is maintained on Github
+
+.. code-block:: bash
+
+    git clone https://github.com/u-boot/u-boot
+
+The released versions are available as tags which use the naming scheme::
+
+    v<year>.<month>
+
+Release candidates are named::
+
+    v<year>.<month>-rc<number>
+
+To checkout the October 2020 release you would use:
+
+.. code-block:: bash
+
+    git checkout v2020.10
index 5b74ef0..00c3c6c 100644 (file)
@@ -635,14 +635,14 @@ int nand_write_skip_bad(struct mtd_info *mtd, loff_t offset, size_t *length,
        }
 
        while (left_to_write > 0) {
+               loff_t block_start = offset & ~(loff_t)(mtd->erasesize - 1);
                size_t block_offset = offset & (mtd->erasesize - 1);
                size_t write_size, truncated_write_size;
 
                WATCHDOG_RESET();
 
-               if (nand_block_isbad(mtd, offset & ~(mtd->erasesize - 1))) {
-                       printf("Skip bad block 0x%08llx\n",
-                               offset & ~(mtd->erasesize - 1));
+               if (nand_block_isbad(mtd, block_start)) {
+                       printf("Skip bad block 0x%08llx\n", block_start);
                        offset += mtd->erasesize - block_offset;
                        continue;
                }
index ad34f7c..55b6a40 100644 (file)
@@ -443,29 +443,36 @@ static void mtk_pcie_enable_port(struct mtk_pcie_port *port)
 
        err = clk_enable(&port->sys_ck);
        if (err)
-               goto exit;
+               goto err_sys_clk;
 
        err = reset_assert(&port->reset);
        if (err)
-               goto exit;
+               goto err_reset;
 
        err = reset_deassert(&port->reset);
        if (err)
-               goto exit;
+               goto err_reset;
 
        err = generic_phy_init(&port->phy);
        if (err)
-               goto exit;
+               goto err_phy_init;
 
        err = generic_phy_power_on(&port->phy);
        if (err)
-               goto exit;
+               goto err_phy_on;
 
        if (!mtk_pcie_startup_port(port))
                return;
 
        pr_err("Port%d link down\n", port->slot);
-exit:
+
+       generic_phy_power_off(&port->phy);
+err_phy_on:
+       generic_phy_exit(&port->phy);
+err_phy_init:
+err_reset:
+       clk_disable(&port->sys_ck);
+err_sys_clk:
        mtk_pcie_port_free(port);
 }
 
index 2ae8f25..9402796 100644 (file)
@@ -151,7 +151,7 @@ def validate_empty(state_test_env, var):
         Nothing.
     """
 
-    response = state_test_env.u_boot_console.run_command('echo $%s' % var)
+    response = state_test_env.u_boot_console.run_command('echo ${%s}' % var)
     assert response == ''
 
 def validate_set(state_test_env, var, value):