We regularly post about Bootlin contributions to the Linux kernel, but we more rarely post about our U-Boot contributions. Even though we are a bit less active in U-Boot than we are in Linux, we do quite a bit of upstream U-Boot work as well. In this blog post, we do a review of our most significant U-Boot contributions in 2018.
U-Boot 2018.03
Maxime Ripard contributed support for using multiple U-Boot environments. Thanks to this, multiple U-Boot environment backends can be compiled into a single U-Boot binary, so that it can support falling back to a different environment backend if needed. For example, U-Boot can try to load an environment from a file in a FAT partition, and if that fails, try to load from raw MMC storage. As explained by Maxime Ripard in his cover letter, this is useful to help converting Allwinner-based platforms from an environment stored in raw MMC to an environment stored in a FAT partition.
U-Boot 2018.05
Miquèl Raynal contributed support for the Allwinner A33 based Nintendo NES Classic platform. It was also the first Allwinner A33 platform supported in U-Boot that boots from NAND, so as part of this work, Miquèl had to change the Allwinner NAND driver used in the SPL to make it work on Allwinner A31, which required using PIO transfers instead of DMA, and a number of other changes.
U-Boot 2018.07
Miquèl Raynal contributed generic support for TPMv2, and also specifically support for TPMv2 chips over SPI. We will publish a more detailed blog post about this topic in the near future.
U-Boot 2018.09
Quentin Schulz improved the env import
command so that it can filter the environment variables it loads from the provided environment. This allows to white-list only a few selected environment variables in cases where the system is locked down by secure boot, but we still need a small writable U-Boot environment to store a few variables. As part of this release, Miquèl Raynal also contributed a few TPM-related fixes.
U-Boot 2018.11
- Miquèl Raynal contributed a lot of changes in the MTD subsystem, which brought support for SPI NAND flash memories in U-Boot. We described this work in a previous blog post. Boris Brezillon helped by submitting a number of fixes related to this effort.
- Miquèl Raynal contributed a new
mtd
command, which can be used in a generic way to access all flash memories. This command will replace commands such assf
,nand
, etc. We will publish in the near future a separate blog post about this topic. - Quentin Schulz contributed a SPI controller driver for the ARM PL022 SPI controller, which we are using on an old STMicro SPEAr600 platform.
- Maxime Ripard contributed a brand new subsystem to support One Wire devices. This work was initially started by Maxime years ago as part of our work on the CHIP platform from Nextthing, and was picked up by Eugen Hristev from Microchip who pushed it all the way to upstream U-Boot.
U-Boot 2019.01
- Grégory Clement contributed the support for the Microchip/Microsemi Ocelot and Luton MIPS platforms, which includes the core code, but also a GPIO driver and a pinctrl driver.
- Boris Brezillon contributed a number of fixes in the MTD subsystem to address various issues introduced by our work on this subsystem in the previous release.
- Quentin Schulz contributed support for the VSC8574 and VSC8584 Ethernet PHYs from Microchip/Microsemi.
- Miquèl Raynal improved the NAND controller driver for Marvell platforms by adding raw read support, which was used to add support for NAND chips using 2 KB pages and a ECC strength of 8 bits.
Overall contribution statistics
Overall, during this year, Bootlin engineer Miquèl Raynal contributed 90 commits, Maxime Ripard 33 commits, Boris Brezillon 24 commits, Quentin Schulz 14 commits, Grégory Clement 9 commits and Mylène Josserand 2 commits, a total of 172 commits, including some significant new features: SPI NAND support, TPMv2 support, One Wire subsystem, Ocelot and Luton platform support, ARM PL022 SPI controller support, support for additional Ethernet PHY, support for multiple environments.
We expect to continue our involvement in upstream U-Boot development, starting with a new network driver for the Microchip/Microsemi Ocelot and Luton platforms.
Detailed list of our contributions
- Boris Brezillon (24):
- mtd: nand: pxa3xx: Fix READOOB implementation
- mtd: Fallback to ->_read/write_oob() when ->_read/write() is missing
- mtd: Add sanity checks in mtd_write/read_oob()
- mtd: nand: Add core infrastructure to deal with NAND devices
- mtd: nand: Pass mode information to nand_page_io_req
- spi: Extend the core to ease integration of SPI memory controllers
- mtd: spinand: Add initial support for the MX35LF1GE4AB chip
- dt-bindings: Add bindings for SPI NAND devices
- mtd: Use default mtdparts/mtids when not defined in the environment
- dfu: nand: Add missing dependency on CMD_MTDPARTS
- mtd: Make {MTDIDS, MTDPARTS}_DEFAULT visible when MTD_PARTITIONS is selected
- cmd: ubi: Remove useless call to mtdparts_init()
- mtd: Drop duplicate MTD_PARTITIONS Kconfig option
- mtd: Add a function to report when the MTD dev list has been updated
- mtd: Parse mtdparts/mtdids again when the MTD list has been updated
- mtd: Delete partitions attached to the device when a device is deleted
- mtd: sf: Make sure we don’t register the same device twice
- mtd: Use get_mtdids() instead of env_get(“mtdids”) in mtd_search_alternate_name()
- mtd: Be more strict on the “mtdparts=” prefix check
- mtd: Make sure the name passed in mtdparts fits in mtd_name[]
- mtd: Make sure we don’t parse MTD partitions belonging to another dev
- mtd: Don’t stop MTD partition creation when it fails on one device
- mtd: sf: Unregister the MTD device prior to removing the spi_flash obj
- mtd: sf: Make sf_mtd.c more robust
- Gregory CLEMENT (9):
- DW SPI: Allow to overload the management of the external CS
- pinctrl: mscc: Add gpio and pinctrl driver for MSCC MIPS SoCs (VcoreIII based)
- gpio: mscc-bitbang-spi: Add a simple gpio driver for bitbgang spi
- MIPS: move create_tlb() in an proper header: mipsregs.h
- MIPS: Allow to prefetch and lock instructions into cache
- MSCC: add support for Ocelot SoCs
- MSCC: add support for Luton SoCs
- MSCC: add board support for the Ocelots based evaluation boards
- MSCC: add board support for the Luton based evaluation board
- Maxime Ripard (33):
- sunxi: maintainers: Add myself for the TBS A711
- dfu: select HASH
- cmd: crc32: Disable by default on sunXi
- cmd: unzip: Disable by default on sunXi
- cmd: loadb: Disable by default on sunXi
- cmd: loads: Disable by default on sunXi
- cmd: misc: Disable by default on sunXi
- video: bpp8: Disable by default on sunXi
- video: bpp16: Disable by default on sunXi
- net: regex: Disable by default on sunXi
- Makefile: Add size check to the u-boot.itb make target
- sunxi: Add limit with the MMC environment
- cmd: nvedit: Get rid of the env lookup
- env: Rename env_driver_lookup_default and env_get_default_location
- env: Pass additional parameters to the env lookup function
- env: Make the env save message a bit more explicit
- env: Make it explicit where we’re loading our environment from
- env: fat: Make the debug messages play a little nicer
- env: mmc: Make the debug messages play a little nicer
- env: common: Make the debug messages play a little nicer
- env: Support multiple environments
- env: Initialise all the environments
- env: mmc: depends on the MMC framework
- env: Allow to build multiple environments in Kconfig
- env: Mark env_get_location as weak
- sunxi: Transition from the MMC to a FAT-based environment
- env: sunxi: Enable FAT-based environment support by default
- MAINTAINERS: Update email address for Maxime Ripard
- Revert “sunxi: binman: Add U-Boot binary size check”
- w1: Add 1-Wire uclass
- w1: Add 1-Wire gpio driver
- W1-EEPROM: Add an W1-EEPROM uclass for 1 wire EEPROMs
- W1-EEPROM: add support for Maxim DS24 eeprom families
- Miquel Raynal (90):
- ARM: mvebu: Allow MVNETA to be selected with Armada 3700 SoCs
- pinctrl: mvebu: Make drivers depend on the pinctrl framework
- doc: bindings: soft-spi: update documentation to match the code
- spl: fix binman_sym output check
- mtd: nand: sunxi: fix ECC strength choice
- spl: nand: sunxi: fix second case of modulo by zero error
- spl: nand: sunxi: fix typo on register name
- spl: nand: sunxi: introduce the nand_wait_int() helper
- spl: nand: sunxi: introduce the nand_wait_cmd_fifo_empty() helper
- spl: nand: sunxi: add missing status clear
- spl: nand: sunxi: create an helper to handle command execution
- spl: nand: sunxi: ensure enough time has passed after changing the column
- spl: nand: sunxi: make the reset column helper more generic
- sunxi: spl: deassert the NAND controller reset line
- spl: nand: sunxi: declare the ecc_bytes array globally
- spl: nand: sunxi: use PIO instead of DMA
- sunxi: spl: remove DMA related settings of the NAND controller
- sunxi: allow NAND support to be compiled for sun8i platforms
- sunxi: dts: enable NAND on NES classic
- sunxi: automatically select SPL_NAND_SUPPORT in Kconfig
- sunxi: make NAND_SUNXI use ARCH_SUNXI as default in Kconfig
- sunxi: move the NAND parameters to Kconfig
- configs: add NAND support for NES Classic
- tpm: remove redundant blank line
- tpm: remove extra spaces between a function and its opening bracket
- tpm: substitute deprecated uint
_t types with their u equivalent - tpm: align arguments with open parenthesis
- tpm: use the BIT() macro where applicable
- tpm: fix spelling
- tpm: add extra blank lines between declarations and code
- tpm: add Revision ID field in the chip structure
- tpm: prepare introduction of TPMv2.x support in Kconfig
- tpm: disociate TPMv1.x specific and generic code
- tpm: add missing parameter in private data structure description
- tpm: prepare support for TPMv2.x commands
- tpm: add macros to enhance TPM commands readability
- tpm: add possible traces to analyze buffers returned by the TPM
- tpm: report driver error code to upper layer
- tpm: add TPM2_Startup command support
- tpm: add TPM2_SelfTest command support
- tpm: add TPM2_Clear command support
- tpm: add TPM2_PCR_Extend command support
- tpm: add TPM2_PCR_Read command support
- tpm: add TPM2_GetCapability command support
- tpm: add dictionary attack mitigation commands support
- tpm: add TPM2_HierarchyChangeAuth command support
- tpm: add PCR authentication commands support
- tpm: add support for TPMv2.x SPI modules
- tpm2: tis_spi: add the possibility to reset the chip with a gpio
- doc: device-tree-bindings: add TIS TPMv2.0 SPI module info
- test/py: add TPMv2.x test suite
- tpm: add a Sandbox TPMv2.x driver
- doc: device-tree-bindings: add Sandbox TPMv2.0 module info
- sandbox: dts: add Sandbox TPMv2.x node
- configs: add TPMv2.x support in Sandbox
- mtd: remove stale comment in mtd_oob_ops structure
- tpm: fix typo in kernel doc
- tpm: compile Sandbox driver by default
- tpm: remove stale symbol in Kconfig
- tpm: allow TPM v1 and v2 to be compiled at the same time
- test/py: tpm2: switch from ‘tpm’ to ‘tpm2’ command
- tpm: make TPM_V2 be compiled by default
- sandbox: compile both TPM stack versions and drivers
- tpm: sandbox: fix wrong check on pcr_map
- tpm: sandbox: fix wrong assignment with a simplification
- mtd: Fallback to ->_read/write() when ->_read/write_oob() is missing
- mtd: move definitions to enlarge their range
- mtd: move all flash categories inside MTD submenu
- mtd: move NAND files into a raw/ subdirectory
- mtd: rename nand into rawnand in Kconfig prompt
- mtd: spinand: Add initial support for the MX35LF2GE4AB chip
- mtd: declare MTD_PARTITIONS symbol in Kconfig
- mtd: mtdpart: balance debug messages
- cmd: ubi: delete useless and misleading definitions
- cmd: mtdparts: add fallthrough in switch statement
- lib: strto: parse all lowercase metric prefixes in ustrtoul[l]
- lib: strto: fix metric suffix parsing in strtoul[l]
- cmd: mtdparts: accept spi-nand devices
- cmd: mtdparts: remove mandatory ‘mtdparts=’ prefix
- dm: drop unused helper in MTD header
- mtd: uclass: add probe function
- mtd: mtdpart: add a generic mtdparts-like parser
- mtd: uboot: search for an equivalent MTD name with the mtdids
- mtd: mtdpart: implement proper partition handling
- cmd: mtd: add ‘mtd’ command
- cmd: ubi: clean the partition handling
- cmd: mtdparts: describe as legacy
- mtd: nand: pxa3xx: add raw read support
- mtd: nand: pxa3xx: re-read a page in raw mode on uncorrectable error
- mtd: rawnand: pxa3xx: fix 2kiB pages with 8b strength chips layout
- Mylène Josserand (2):
- Quentin Schulz (14):
- net: designware: set the PS bit when resetting DMA bus in MII configuration
- env: add the same prefix to error messages to make it detectable by tests
- test/py: return a RAM address different from 0 as it can be interpreted as NULL
- test/py: remove hacks for non-zero RAM base address in tests
- hashtable: do not recreate whole hash table if vars are passed to himport_r
- cmd: nvedit: env import can now import only variables passed as parameters
- test/py: add test for whitelist of variables while importing environment
- arm: spear: enable GPIO3 and 4 clocks when the GPIO controller driver is built
- spi: add support for ARM PL022 SPI controller
- arm: spear: enable SSP1, 2 and 3 clocks when SPI controller driver is built
- arm: spear: fix enabling of SSP2 clock
- net: phy: mscc: add support for VSC8584 PHY
- net: phy: mscc: factorize part of config function for VSC8584
- net: phy: mscc: add support for VSC8574 PHY