Browse Source

Merge branch '2020-09-12-assorted-bugfixes'

- A large assortment of minor fixes
- Documentation improvements
Tom Rini 3 years ago
parent
commit
00e5fda006

+ 1 - 1
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'
 # Directories & files removed with 'make mrproper'
 MRPROPER_DIRS  += include/config include/generated spl tpl \
 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 \
 MRPROPER_FILES += .config .config.old include/autoconf.mk* include/config.h \
 		  ctags etags tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \
 		  ctags etags tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \
 		  drivers/video/fonts/*.S
 		  drivers/video/fonts/*.S

+ 3 - 3
arch/arm/mach-mediatek/Kconfig

@@ -47,10 +47,10 @@ config TARGET_MT8512
         select ARM64
         select ARM64
 	select MT8512
 	select MT8512
         help
         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,
           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
 config TARGET_MT8516
 	bool "MediaTek MT8516 SoC"
 	bool "MediaTek MT8516 SoC"

+ 5 - 0
cmd/nvedit.c

@@ -1171,6 +1171,11 @@ static int do_env_import(struct cmd_tbl *cmdtp, int flag,
 		uint32_t crc;
 		uint32_t crc;
 		env_t *ep = (env_t *)ptr;
 		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);
 		size -= offsetof(env_t, data);
 		memcpy(&crc, &ep->crc, sizeof(crc));
 		memcpy(&crc, &ep->crc, sizeof(crc));
 
 

+ 3 - 3
common/Kconfig

@@ -378,7 +378,7 @@ config USE_BOOTARGS
 
 
 config BOOTARGS
 config BOOTARGS
 	string "Boot arguments"
 	string "Boot arguments"
-	depends on USE_BOOTARGS
+	depends on USE_BOOTARGS && !USE_DEFAULT_ENV_FILE
 	help
 	help
 	  This can be used to pass arguments to the bootm command. The value of
 	  This can be used to pass arguments to the bootm command. The value of
 	  CONFIG_BOOTARGS goes into the environment value "bootargs". Note that
 	  CONFIG_BOOTARGS goes into the environment value "bootargs". Note that
@@ -395,7 +395,7 @@ config USE_BOOTCOMMAND
 
 
 config BOOTCOMMAND
 config BOOTCOMMAND
 	string "bootcmd value"
 	string "bootcmd value"
-	depends on USE_BOOTCOMMAND
+	depends on USE_BOOTCOMMAND && !USE_DEFAULT_ENV_FILE
 	default "run distro_bootcmd" if DISTRO_DEFAULTS
 	default "run distro_bootcmd" if DISTRO_DEFAULTS
 	help
 	help
 	  This is the string of commands that will be used as bootcmd and if
 	  This is the string of commands that will be used as bootcmd and if
@@ -416,7 +416,7 @@ config USE_PREBOOT
 
 
 config PREBOOT
 config PREBOOT
 	string "preboot default value"
 	string "preboot default value"
-	depends on USE_PREBOOT
+	depends on USE_PREBOOT && !USE_DEFAULT_ENV_FILE
 	default ""
 	default ""
 	help
 	help
 	  This is the default of "preboot" environment variable.
 	  This is the default of "preboot" environment variable.

+ 2 - 0
common/bootm.c

@@ -390,6 +390,8 @@ static int bootm_load_os(bootm_headers_t *images, int boot_progress)
 		bootstage_error(BOOTSTAGE_ID_DECOMP_IMAGE);
 		bootstage_error(BOOTSTAGE_ID_DECOMP_IMAGE);
 		return err;
 		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);
 	flush_cache(flush_start, ALIGN(load_end, ARCH_DMA_MINALIGN) - flush_start);
 
 

+ 5 - 2
common/spl/spl_fit.c

@@ -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
 	 * 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 */
 	/* Figure out which device tree the board wants to use */
 	node = spl_fit_get_image_node(fit, images, FIT_FDT_PROP, index++);
 	node = spl_fit_get_image_node(fit, images, FIT_FDT_PROP, index++);

+ 119 - 0
doc/build/gcc.rst

@@ -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`.

+ 2 - 0
doc/build/index.rst

@@ -6,5 +6,7 @@ Build U-Boot
 .. toctree::
 .. toctree::
    :maxdepth: 2
    :maxdepth: 2
 
 
+   source
+   gcc
    clang
    clang
    tools
    tools

+ 30 - 0
doc/build/source.rst

@@ -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

+ 3 - 3
drivers/mtd/nand/raw/nand_util.c

@@ -635,14 +635,14 @@ int nand_write_skip_bad(struct mtd_info *mtd, loff_t offset, size_t *length,
 	}
 	}
 
 
 	while (left_to_write > 0) {
 	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 block_offset = offset & (mtd->erasesize - 1);
 		size_t write_size, truncated_write_size;
 		size_t write_size, truncated_write_size;
 
 
 		WATCHDOG_RESET();
 		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;
 			offset += mtd->erasesize - block_offset;
 			continue;
 			continue;
 		}
 		}

+ 13 - 6
drivers/pci/pcie_mediatek.c

@@ -443,29 +443,36 @@ static void mtk_pcie_enable_port(struct mtk_pcie_port *port)
 
 
 	err = clk_enable(&port->sys_ck);
 	err = clk_enable(&port->sys_ck);
 	if (err)
 	if (err)
-		goto exit;
+		goto err_sys_clk;
 
 
 	err = reset_assert(&port->reset);
 	err = reset_assert(&port->reset);
 	if (err)
 	if (err)
-		goto exit;
+		goto err_reset;
 
 
 	err = reset_deassert(&port->reset);
 	err = reset_deassert(&port->reset);
 	if (err)
 	if (err)
-		goto exit;
+		goto err_reset;
 
 
 	err = generic_phy_init(&port->phy);
 	err = generic_phy_init(&port->phy);
 	if (err)
 	if (err)
-		goto exit;
+		goto err_phy_init;
 
 
 	err = generic_phy_power_on(&port->phy);
 	err = generic_phy_power_on(&port->phy);
 	if (err)
 	if (err)
-		goto exit;
+		goto err_phy_on;
 
 
 	if (!mtk_pcie_startup_port(port))
 	if (!mtk_pcie_startup_port(port))
 		return;
 		return;
 
 
 	pr_err("Port%d link down\n", port->slot);
 	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);
 	mtk_pcie_port_free(port);
 }
 }
 
 

+ 1 - 1
test/py/tests/test_env.py

@@ -151,7 +151,7 @@ def validate_empty(state_test_env, var):
         Nothing.
         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 == ''
     assert response == ''
 
 
 def validate_set(state_test_env, var, value):
 def validate_set(state_test_env, var, value):