1. 02 9月, 2021 17 次提交
    • O
      psci: fix double declaration · 7befc849
      Oleksandr Suvorov 提交于
      The prototype of psci_features() duplicated. Remove extra declaration.
      
      Fixed: e21e3ffd ("psci: Fix warnings when compiling with W=1")
      Reported-by: NMichael Scott <mike@foundries.io>
      Signed-off-by: NOleksandr Suvorov <oleksandr.suvorov@foundries.io>
      7befc849
    • S
      ARM: Prevent the compiler from using NEON registers · f43312c9
      Samuel Holland 提交于
      For ARMv8-A, NEON is standard, so the compiler can use it even when no
      special target flags are provided. For example, it can use stores from
      NEON registers to zero-initialize large structures. GCC 11 decides to
      do this inside the DRAM init code for the Allwinner H6.
      
      However, GCC 11 has a bug where it generates misaligned NEON register
      stores even with -mstrict-align. Since the MMU is not enabled this early
      in SPL, the misaligned store causes an exception and breaks booting.
      
      Work around this issue by restricting the compiler to using GPRs only,
      not vector registers. This prevents any future surprises relating to
      NEON use as well.
      Signed-off-by: NSamuel Holland <samuel@sholland.org>
      Acked-by: NAndre Przywara <andre.przywara@arm.com>
      f43312c9
    • P
      arm: Use armv8_switch_to_el1 env to switch to EL1 · 30e5a449
      Peter Hoyes 提交于
      Use the environment variable armv8_switch_to_el1 to determine whether
      to switch to EL1 at runtime. This is an alternative to the
      CONFIG_ARMV8_SWITCH_TO_EL1 compile-time option.
      
      The environment variable will be ineffective if the ARMV8_MULTIENTRY
      config is used.
      
      This is required by the Armv8r64 architecture, which must be able to
      boot at S-EL1 for Linux but may need to boot at other ELs for other
      systems.
      Signed-off-by: NPeter Hoyes <Peter.Hoyes@arm.com>
      30e5a449
    • P
      vexpress64: Add BASER_FVP vexpress board variant · b53bbca6
      Peter Hoyes 提交于
      The BASER_FVP board variant is implemented on top of the BASE_FVP board
      config (which, in turn, is based on the Juno Versatile Express board
      config). They all share a similar memory map - for BASER_FVP the map is
      inverted from the BASE_FVP
      (https://developer.arm.com/documentation/100964/1114/Base-Platform/Base---memory/BaseR-Platform-memory-map)
      
       * Create new TARGET_VEXPRESS64_BASER_FVP target, which uses the same
         board config as BASE_FVP and JUNO
       * Adapt vexpress_aemv8a.h header file to support BASER_FVP (and rename
         to vexpress_aemv8.h)
       * Enable config to switch to EL1 for the BASER_FVP
       * Create vexpress_aemv8r defconfig
       * Provide an MPU memory map for the BASER_FVP
      
      For now, only single core boot is supported.
      Signed-off-by: NPeter Hoyes <Peter.Hoyes@arm.com>
      [trini: Add MAINTAINERS, move BOOTCOMMAND to defconfig]
      Signed-off-by: NTom Rini <trini@konsulko.com>
      b53bbca6
    • P
      armv8: Add ARMv8 MPU configuration logic · 2f5b7b74
      Peter Hoyes 提交于
      Armv8r64 is the first Armv8 platform that only has a PMSA at the
      current exception level. The architecture supplement for Armv8r64
      describes new fields in ID_AA64MMFR0_EL1 which can be used to detect
      whether a VMSA or PMSA is present. These fields are RES0 on Armv8a.
      
      Add logic to read these fields and, for the protection of the memory
      used by U-Boot, initialize the MPU instead of the MMU during init, then
      clear the MPU regions before transition to the next stage.
      
      Provide a default (blank) MPU memory map, which can be overridden by
      board configurations.
      Signed-off-by: NPeter Hoyes <Peter.Hoyes@arm.com>
      2f5b7b74
    • P
      armv8: Ensure EL1&0 VMSA is enabled · 37a757e2
      Peter Hoyes 提交于
      On Armv8-R, the EL1&0 memory system architecture is configurable as a
      VMSA or PMSA, and resets to an "architecturally unknown" value.
      
      Add code to armv8_switch_to_el1_m which detects whether the MSA at
      EL1&0 is configurable using the id_aa64mmfr0_el1 register MSA fields.
      If it is we must ensure the VMSA is enabled so that a rich OS can boot.
      
      The MSA and MSA_FRAC fields are described in the Armv8-R architecture
      profile supplement (section G1.3.7):
      https://developer.arm.com/documentation/ddi0600/latest/Signed-off-by: NPeter Hoyes <Peter.Hoyes@arm.com>
      37a757e2
    • P
      armv8: Disable pointer authentication traps for EL1 · 53b40e8d
      Peter Hoyes 提交于
      The use of ARMv8.3 pointer authentication (PAuth) is governed by fields
      in HCR_EL2, which trigger a 'trap to EL2' if not enabled. The reset
      value of these fields is 'architecturally unknown' so we must ensure
      that the fields are enabled (to disable the traps) if we are entering
      the kernel at EL1.
      
      The APK field disables PAuth instruction traps and the API field
      disables PAuth register traps
      
      Add code to disable the traps in armv8_switch_to_el1_m. Prior to doing
      so, it checks fields in the ID_AA64ISAR1_EL1 register to ensure pointer
      authentication is supported by the hardware.
      
      The runtime checks require a second temporary register, so add this to
      the EL1 transition macro signature and update 2 call sites.
      Signed-off-by: NPeter Hoyes <Peter.Hoyes@arm.com>
      53b40e8d
    • S
      arm: mach-snapdrgon: misc: Simplify msm_generate_mac_addr() · 15dd9412
      Stephan Gerhold 提交于
      The logic in msm_generate_mac_addr() was originally taken from the LK
      bootloader where the serial number is a string and must be parsed first.
      However, in U-Boot msm_board_serial() returns an u32 and
      msm_generate_mac_addr() has quite complicated code that will first
      print it as a hex string and then immediately parse it again.
      
      What this function actually does at the end is to put the serial number
      encoded as big endian (the order used for the hex string) into the u8 *mac.
      Use put_unaligned_be32() to do that with bit shifts instead of going
      through the string format.
      
      This should be slightly more efficient and cleaner but does not result
      in any functional difference.
      
      Cc: Ramon Fried <rfried.dev@gmail.com>
      Signed-off-by: NStephan Gerhold <stephan@gerhold.net>
      Reviewed-by: NRamon Fried <rfried.dev@gmail.com>
      15dd9412
    • S
      arm: mach-snapdragon: misc: Initialize eMMC if necessary · 1eb00624
      Stephan Gerhold 提交于
      At the moment U-Boot produces an empty MAC address (02:00:00:00:00:00)
      if the eMMC is not used by anything in U-Boot (e.g. with
      CONFIG_ENV_IS_NOWHERE=y instead of having the environment on eMMC).
      This happens because then there is nothing that actually initializes
      the eMMC and reads the "cid" that is later accessed.
      
      To fix this, call mmc_init() to ensure the eMMC is initialized.
      There is no functional difference if the eMMC is already initialized
      since then mmc_init() will just return without doing anything.
      Reviewed-by: NRamon Fried <rfried.dev@gmail.com>
      Signed-off-by: NStephan Gerhold <stephan@gerhold.net>
      1eb00624
    • C
      armv7: Add Position Independent Execution support · cd82f199
      Chia-Wei Wang 提交于
      A U-Boot image could be loaded and executed at a different
      location than it was linked at.
      
      For example, Aspeed takes a stable release version of U-Boot image
      as the golden one for recovery purposes. When the primary storage
      such as flash is corrupted, the golden image would be loaded to any
      SRAM/DRAM address on demands through ethernet/UART/etc and run for
      rescue.
      
      To deal with this condition, the PIE is needed as there is only one
      signed, golden image, which could be however executed at different
      places.
      
      This patch adds the PIE support for ARMv7 platform.
      Signed-off-by: NChia-Wei Wang <chiawei_wang@aspeedtech.com>
      cd82f199
    • C
      arm: Fix option dependency with Kconfig language · aa29b21d
      Chia-Wei Wang 提交于
      Use Kconfig 'depends on' instead of #if macro to
      express the option depdencies.
      Signed-off-by: NChia-Wei Wang <chiawei_wang@aspeedtech.com>
      aa29b21d
    • S
      arm: u8500: Prefer building in thumb mode by default · 8956854d
      Stephan Gerhold 提交于
      Enabling CONFIG_SYS_THUMB_BUILD produces a significantly smaller
      U-Boot binary (250 KiB vs 320 KiB) that still seems to be fully
      functional. Make use of that by default but keep it as "imply" so it
      can be disabled for testing in case this causes trouble for someone.
      Signed-off-by: NStephan Gerhold <stephan@gerhold.net>
      8956854d
    • S
      board: stemmy: Update documentation · f629895f
      Stephan Gerhold 提交于
      Over the time, the "stemmy" U-Boot board was tested on several other
      Samsung smartphones based on ST-Ericsson NovaThor Ux500. Convert the
      documentation to reStructuredText at doc/board/ste/stemmy.rst and
      make the device list complete. Also note that the board now boots
      into USB Fastboot instead of just ending up at the U-Boot prompt.
      
      The device table is mostly taken from the postmarketOS wiki article
      (https://wiki.postmarketos.org/wiki/ST-Ericsson_NovaThor_U8500).
      All the newly added devices were tested by Linus Walleij.
      Signed-off-by: NStephan Gerhold <stephan@gerhold.net>
      f629895f
    • S
      board: stemmy: Add basic Fastboot support · f64011e1
      Stephan Gerhold 提交于
      Make use of the new drivers for ARM U8500 introduced in the U-Boot
      2021.10 merge window by adding basic support for USB Fastboot with
      the "stemmy" board. As a first step this will always boot directly
      into USB Fastboot for now with the console displayed on the screen
      to make that obvious.
      
      Samsung uses quite strange GPT partition labels on these boards,
      so also add a bunch of fastboot_partition_alias_* to make this more
      easy to use.
      Signed-off-by: NStephan Gerhold <stephan@gerhold.net>
      f64011e1
    • S
      arm: dts: u8500: u-boot: Add fixed clock for eMMC · fc9d4b12
      Stephan Gerhold 提交于
      So far there is no need for a clock driver in U-Boot because the
      previous boot stage leaves all the necessary clocks on. However,
      some drivers in U-Boot (e.g. arm_pl180_mmci) depend on having a clock
      driver to obtain the clock frequency.
      
      Setting up the clock drivers properly is a bit tricky on U8500,
      so for now add a simple fixed-clock for the eMMC that allows obtaining
      the clock frequency. This should be replaced eventually if some board
      actually requires enabling some of the clocks.
      Signed-off-by: NStephan Gerhold <stephan@gerhold.net>
      fc9d4b12
    • S
      arm: dts: u8500: Update from Linux ux500-dts-for-v5.15 · 1ae43a0e
      Stephan Gerhold 提交于
      Update ste-dbx5x0.dtsi, ste-ab8500.dtsi and ste-ab8505.dtsi with
      the changes made in upstream Linux. They are taken from
      https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-nomadik.git/
      branch "ux500-dts-for-v5.15" (pending merge for Linux 5.15).
      
      The only relevant change for U-Boot here is
      "ARM: dts: ux500: ab8500: Link USB PHY to USB controller node" [1]
      which links the USB PHY to the USB controller. This is necessary on
      U-Boot because the PHY driver is implemented as part of the generic
      PHY subsystem that makes use of these bindings.
      
      [1]: https://lore.kernel.org/linux-arm-kernel/20210709182234.47232-1-stephan@gerhold.net/Signed-off-by: NStephan Gerhold <stephan@gerhold.net>
      1ae43a0e
    • S
      arm: u8500: Imply options for new drivers · 9f78ccf1
      Stephan Gerhold 提交于
      Imply the options for new drivers added for ARM U8500 during the
      U-Boot 2021.10 merge window. Adding these as "imply" in the Kconfig
      avoids having to add them to all the board defconfigs but still allows
      disabling them if wanted.
      
      Also select DM_USB_GADGET if DM_USB is selected because otherwise
      the Ux500 MUSB glue driver does not show up in the configuration.
      Signed-off-by: NStephan Gerhold <stephan@gerhold.net>
      9f78ccf1
  2. 01 9月, 2021 10 次提交
  3. 31 8月, 2021 11 次提交
  4. 26 8月, 2021 2 次提交
    • M
      xilinx: zynqmp: Update descriptions for u-boot.its · 060fa0e1
      Michal Simek 提交于
      Use TF-A instead of ATF in description. And update generic description with
      removing ATF because also configurations without it are supported.
      Signed-off-by: NMichal Simek <michal.simek@xilinx.com>
      060fa0e1
    • M
      xilinx: common: Enabling generic function for DT reselection · 52ff1626
      Michal Simek 提交于
      U-Boot support board detection at run time and based on it change DT.
      This feature is implemented for SOM Kria platforms which contain two
      eeproms which contain information about SOM module and CC (Carrier card).
      Full U-Boot starts with minimal DT file defined by
      CONFIG_DEFAULT_DEVICE_TREE which is available in multi DTB fit image.
      It is using default setup of board_name variable initializaed to
      DEVICE_TREE which corresponds to CONFIG_DEFAULT_DEVICE_TREE option.
      
      When DTB_RESELECT is enabled board_detection() is called. Keep it your mind
      that this code is called before relocation. board_detection() is calling
      xilinx_read_eeprom() which fills board_info (xilinx_board_description)
      structure which are parsed in board_name_decode().
      Based on DT configuration and amount of nvmemX aliases name of the board is
      composed by concatenating CONFIG_SYS_BOARD "-" <board_name> "-rev"
      <board_revision> "-" <cc_name> "-rev" <cc_revision>.
      
      If CC is not present or more are available it keeps going.
      
      When board name is composed and returned from board_name_decode() it is
      assigned to board_name variable which is used by
      board_fit_config_name_match() which is called via fdtdec_setup() when it
      goes over config options in multi dtb FIT image.
      
      From practical point of view multi DTB image is key point here which has to
      contain configs for detected combinations. Unfortunately as of now they
      have to be full DTBs and DTBOs are not supported.
      
      That's why configuration like:
      config_X {
      	description = "zynqmp-board-cc";
      	fdt = "board", "cc";
      };
      
      needs to be squashed together with:
      fdtoverlay -o zynqmp-board-cc -i arch/arm/dts/zynqmp-board.dtb \
      arch/arm/dts/zynqmp-cc.dtbo
      
      and only one dtb is in fit:
      config_X {
      	description = "zynqmp-board-cc";
      	fdt = "board-cc";
      };
      
      For creating multi DTBs fit image use mkimage -E, e.g.:
      mkimage -E -f all.its all.dtb
      
      When DTB_RESELECT is enabled xilinx_read_eeprom() is called before
      relocation and it uses calloc for getting a buffer. Because this is dynamic
      memory it is not relocated that's why xilinx_read_eeprom() is called again
      as the part of board_init(). This second read with calloc buffer placed in
      proper position board_late_init_xilinx() can setup u-boot variables as
      before.
      Signed-off-by: NMichal Simek <michal.simek@xilinx.com>
      52ff1626