1. 20 Oct, 2018 18 commits
    • Andre Przywara's avatar
      allwinner: Prepare for executing code on the management processor · 11480b90
      Andre Przywara authored
      
      
      The more recent Allwinner SoCs contain an OpenRISC management
      controller (called arisc or CPUS), which shares the bus with the ARM cores,
      but runs on a separate power domain. This is meant to handle power
      management with the ARM cores off.
      There are efforts to run sophisticated firmware on that core
      (communicating via SCPI with the ARM world), but for now can use it for
      the rather simple task of helping to turn the ARM cores off. As this
      cannot be done by ARM code itself (because execution stops at the
      first of the three required steps), we can offload some instructions to
      this management processor.
      This introduces a helper function to hand over a bunch of instructions
      and triggers execution. We introduce a bakery lock to avoid two cores
      trying to use that (single) arisc core. The arisc code is expected to
      put itself into reset after is has finished execution.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      11480b90
    • Andre Przywara's avatar
      allwinner: PMIC: AXP803: Delay activation of DC1SW switch · ccd3ab2d
      Andre Przywara authored
      
      
      There are reports that activating the DC1SW before certain other
      regulators leads to the PMIC overheating and consequently shutting down.
      To avoid this situation, delay the activation of the DC1SW line until
      the very end, so those other lines are always activated earlier.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      ccd3ab2d
    • Andre Przywara's avatar
      allwinner: PMIC: AXP803: Setup basic voltage rails · fb4e9786
      Andre Przywara authored
      
      
      Based on the just introduced PMIC FDT framework, we check the DT for more
      voltage rails that need to be setup early:
      - DCDC1 is typically the main board power rail, used for I/O pins, for
      instance. The PMIC's default is 3.0V, but 3.3V is what most boards use,
      so this needs to be adjusted as soon as possible.
      - DCDC5 is supposed to be connected to the DRAM. The AXP has some
      configurable reset voltage, but some boards get that wrong, so we better
      set up this here to avoid over- or under-volting.
      - DLDO1,2,3 and FLDO1 mostly drive some graphics related IP, some boards
      need this to be up to enable HDMI or the LCD screen, so we get screen
      output in U-Boot.
      
      To get the right setup, but still being flexible, we query the DT for
      the required voltage and whether that regulator is actually used. That
      gives us some robust default setup U-Boot is happy with.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      fb4e9786
    • Andre Przywara's avatar
      allwinner: Scan AXP803 FDT node to setup initial power rails · ed80c1e2
      Andre Przywara authored
      
      
      Now that we have a pointer to the device tree blob, let's use that to
      do some initial setup of the PMIC:
      - We scan the DT for the compatible string to find the PMIC node.
      - We switch the N_VBUSEN pin if the DT property tells us so.
      - We scan over all regulator subnodes, and switch DC1SW if there is at
      least one other node referencing it (judging by the existence of a
      phandle property in that subnode).
      This is just the first part of the setup, a follow up patch will setup
      voltages.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      ed80c1e2
    • Andre Przywara's avatar
      allwinner: Pass FDT address to sunxi_pmic_setup() · df301601
      Andre Przywara authored
      
      
      For Allwinner boards we now use some heuritistics to find a preloaded
      .dtb file.
      
      Pass this address on to the PMIC setup routine, so that it can use the
      information contained therein to setup some initial power rails.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      df301601
    • Andre Przywara's avatar
      allwinner: Find DTB in BL33 image · 41538930
      Andre Przywara authored
      
      
      The initial PMIC setup for the Allwinner platform is quite board
      specific, and used to be guarded by reading the .dtb stub *name* from the
      SPL image in the legacy ATF port. This doesn't scale particularly well,
      and requires constant maintainance.
      Instead having the actual .dtb available would be much better, as the PMIC
      setup requirements could be read from there directly.
      The only available BL33 for Allwinner platforms so far is U-Boot, and
      fortunately U-Boot comes with the full featured .dtb, appended to the
      end of the U-Boot image.
      
      Introduce some code that scans the beginning of the BL33 image to look
      for the load address, which is followed by the image size. Adding those
      two values together gives us the end of the image and thus the .dtb
      address. Verify that this heuristic is valid by sanitising some values
      and checking the DTB magic.
      
      Print out the DTB address and the model name, if specified in the root
      node.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      41538930
    • Andre Przywara's avatar
      allwinner: A64: Add AXP803 PMIC support to power off the board · eae5fe79
      Andre Przywara authored
      
      
      Boards with the Allwinner A64 SoC are mostly paired with an AXP803 PMIC,
      which allows to programmatically power down the board.
      
      Use the newly introduced RSB driver to detect and program the PMIC on
      boot, then later to turn off the main voltage rails when receiving a
      PSCI SYSTEM_POWER_OFF command.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      eae5fe79
    • Andre Przywara's avatar
      allwinner: H6: Factor out I2C platform setup · d5ddf67a
      Andre Przywara authored
      
      
      In the H6 platform code there is a routine to do the platform
      initialisation of the R_I2C controller. We will need a very similar
      setup routine to initialise the RSB controller on the A64.
      
      Move this code to sunxi_common.c and generalise it to support all SoCs
      and also to cover the related RSB bus.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      d5ddf67a
    • Andre Przywara's avatar
      allwinner: H5: Implement power down for H5 reference design boards · 3d22228f
      Andre Przywara authored
      
      
      Allwinner produces reference board designs, which apparently most board
      vendors copy from. So every H5 board I checked uses regulators which are
      controlled by the same PortL GPIO pins to power the ARM CPU cores, the
      DRAM and the I/O ports.
      Add a SoC specific power down routine, which turns those regulators off
      when ATF detects running on an H5 SoC and the rich OS triggers a
      SYSTEM_POWEROFF PSCI call.
      
      NOTE: It sounds very tempting to turn the CPU power off, but this is not
      working as expected, instead the system is rebooting. Most probably this
      is due to VCC-SYS also being controlled by the same GPIO line, and
      turning this off requires an elaborate and not fully understood setup.
      Apparently not even Allwinner reference code is turning this regulator
      off. So for now we refrain to pulling down PL8, the power consumption is
      quite low anyway, so we are as close to poweroff as reasonably possible.
      Many thanks to Samuel for doing some research on that topic.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      3d22228f
    • Andre Przywara's avatar
      allwinner: Introduce GPIO helper function · 7020dca0
      Andre Przywara authored
      
      
      Many boards without a dedicated PMIC contain simple regulators, which
      can be controlled via GPIO pins.
      
      To later allow turning them off easily, introduce a simple function to
      configure a given pin as a GPIO out pin and set it to the desired level.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      7020dca0
    • Andre Przywara's avatar
      allwinner: Export sunxi_private.h · 4ec1a239
      Andre Przywara authored
      
      
      So far we have a sunxi_private.h header file in the common code directory.
      This holds the prototypes of various functions we share in *common*
      code. However we will need some of those in the platform specific code
      parts as well, and want to introduce new functions shared across the
      whole platform port.
      
      So move the sunxi_private.h file into the common/include directory, so
      that it becomes visible to all parts of the platform code.
      Fix up the existing #includes and add missing ones, also add the
      sunxi_read_soc_id() prototype here.
      
      This will be used in follow up patches.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      4ec1a239
    • Andre Przywara's avatar
      allwinner: A64/H5: Add basic and generic shutdown method · f953c30f
      Andre Przywara authored
      
      
      Some boards don't have a PMIC, so they can't easily turn their power
      off. To cover those boards anyway, let's turn off as many devices and
      clocks as possible, so that the power consumption is reduced. Then
      halt the last core, as before.
      This will later be extended with proper PMIC support for supported
      boards.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      f953c30f
    • Andre Przywara's avatar
      allwinner: Pass SoC ID to sunxi_pmic_setup() · fe57c7d4
      Andre Przywara authored
      
      
      In the BL31 platform setup we read the Allwinner SoC ID to identify the
      chip and print its name.
      In addition to that we will need to differentiate the power setup
      between the SoCs, to pass on the SoC ID to the PMIC setup routine.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      fe57c7d4
    • Andre Przywara's avatar
      allwinner: Introduce names for SoC IDs · 123bcb3f
      Andre Przywara authored
      
      
      We will soon make more use of the Allwinner SoC ID, to differentiate the
      platform setup.
      Introduce definitions to avoid dealing with magic numbers and make the
      code more readable.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      123bcb3f
    • Andre Przywara's avatar
      allwinner: H6: Fix SRAM size · f78f00aa
      Andre Przywara authored
      
      
      The SRAM in the Allwinner H6 SoC starts at 0x2000, with the last part
      ending at 0x117fff (although with gaps in between).
      So SUNXI_SRAM_SIZE should be 0xf8000, not 0x98000.
      
      Fix this to map the arisc exception vector area, which we will need
      shortly.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      f78f00aa
    • Andre Przywara's avatar
      allwinner: Disable USE_COHERENT_MEM · 43060513
      Andre Przywara authored
      
      
      According to the documentation, platforms may choose to trade memory
      footprint for performance (and elegancy) by not providing a separately
      mapped coherent page.
      
      Since a debug build is getting close to the SRAM size limit already, this
      allows us to save about 3.5KB of BSS and have some room for future
      enhancements.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      43060513
    • Andre Przywara's avatar
      allwinner: Adjust memory mapping to fit into 256MB · c3af6b00
      Andre Przywara authored
      
      
      At the moment we map as much of the DRAM into EL3 as possible, however
      we actually don't use it. The only exception is the secure DRAM for
      BL32 (if that is configured).
      
      To decrease the memory footprint of ATF, we save on some page tables by
      reducing the memory mapping to the actually required regions: SRAM, device
      MMIO, secure DRAM and U-Boot (to be used later).
      This introduces a non-identity mapping for the DRAM regions.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      c3af6b00
    • Andre Przywara's avatar
      allwinner: Unify platform.mk files · a80490c5
      Andre Przywara authored
      
      
      For the two different platforms we support in the Allwinner port we
      mostly rely on header files covering the differences. This leads to the
      platform.mk files in the respective directories to be almost identical.
      
      To avoid further divergence and make sure that one platform doesn't
      break accidentally, let's create a shared allwinner-common.mk file and
      include that from the platform directory.
      Signed-off-by: default avatarAndre Przywara <andre.przywara@arm.com>
      a80490c5
  2. 17 Oct, 2018 2 commits
    • Jorge Ramirez-Ortiz's avatar
      rcar_gen3: drivers: staging · 6ac2892a
      Jorge Ramirez-Ortiz authored
       - ddr
       - pfc [pin function controller]
       - qos [bandwidth]
      
      checkpatch.pl is generating too many errors.
      6ac2892a
    • Jorge Ramirez-Ortiz's avatar
      rcar-gen3: initial commit for the rcar-gen3 boards · 7e532c4b
      Jorge Ramirez-Ortiz authored
      Reference code:
      ==============
      
      rar_gen3: IPL and Secure Monitor Rev1.0.22
      https://github.com/renesas-rcar/arm-trusted-firmware [rcar_gen3]
      
      Author: Takuya Sakata <takuya.sakata.wz@bp.renesas.com>
      Date:   Thu Aug 30 21:26:41 2018 +0900
      	Update IPL and Secure Monitor Rev1.0.22
      
      General Information:
      ===================
      
      This port has been tested on the Salvator-X Soc_id r8a7795 revision
      ES1.1 (uses an SPD).
      
      Build Tested:
      -------------
      ATFW_OPT="LSI=H3 RCAR_DRAM_SPLIT=1 RCAR_LOSSY_ENABLE=1"
      MBEDTLS_DIR=$mbedtls
      
      $ make clean bl2 bl31 rcar PLAT=rcar ${ATFW_OPT} SPD=opteed
      
      Other dependencies:
      ------------------
      * mbed_tls:
        git@github.com:ARMmbed/mbedtls.git [devel]
      
        Merge: 68dbc94 f34a4c1
        Author: Simon Butcher <simon.butcher@arm.com>
        Date:   Thu Aug 30 00:57:28 2018 +0100
      
      * optee_os:
        https://github.com/BayLibre/optee_os
      
      
      
        Until it gets merged into OP-TEE, the port requires Renesas' Trusted
        Environment with a modification to support power management.
      
        Author: Jorge Ramirez-Ortiz <jramirez@baylibre.com>
        Date:   Thu Aug 30 16:49:49 2018 +0200
          plat-rcar: cpu-suspend: handle the power level
      Signed-off-by: default avatarJorge Ramirez-Ortiz <jramirez@baylibre.com>
      
      * u-boot:
        The port has beent tested using mainline uboot.
      
        Author: Fabio Estevam <festevam@gmail.com>
        Date:   Tue Sep 4 10:23:12 2018 -0300
      
      *linux:
        The port has beent tested using mainline kernel.
      
        Author: Linus Torvalds <torvalds@linux-foundation.org>
        Date:   Sun Sep 16 11:52:37 2018 -0700
            Linux 4.19-rc4
      
      Overview
      ---------
      
      BOOTROM starts the cpu at EL3; In this port BL2 will therefore be entered
      at this exception level (the Renesas' ATF reference tree [1] resets into
      EL1 before entering BL2 - see its bl2.ld.S)
      
      BL2 initializes DDR (and i2c to talk to the PMIC on some platforms)
      before determining the boot reason (cold or warm).
      
      During suspend all CPUs are switched off and the DDR is put in
      backup mode (some kind of self-refresh mode). This means that BL2 is
      always entered in a cold boot scenario.
      
      Once BL2 boots, it determines the boot reason, writes it to shared
      memory (BOOT_KIND_BASE) together with the BL31 parameters
      (PARAMS_BASE) and jumps to BL31.
      
      To all effects, BL31 is as if it is being entered in reset mode since
      it still needs to initialize the rest of the cores; this is the reason
      behind using direct shared memory access to  BOOT_KIND_BASE and
      PARAMS_BASE instead of using registers to get to those locations (see
      el3_common_macros.S and bl31_entrypoint.S for the RESET_TO_BL31 use
      case).
      
      Depending on the boot reason BL31 initializes the rest of the cores:
      in case of suspend, it uses a MBOX memory region to recover the
      program counters.
      
      [1] https://github.com/renesas-rcar/arm-trusted-firmware
      
      
      Tests
      -----
      
      * cpuidle
        -------
         enable kernel's cpuidle arm_idle driver and boot
      
      * system suspend
        --------------
        $ cat suspend.sh
          #!/bin/bash
          i2cset -f -y 7 0x30 0x20 0x0F
          read -p "Switch off SW23 and press return " foo
          echo mem > /sys/power/state
      
      * cpu hotplug:
        ------------
        $ cat offline.sh
          #!/bin/bash
          nbr=$1
          echo 0 > /sys/devices/system/cpu/cpu$nbr/online
          printf "ONLINE:  " && cat /sys/devices/system/cpu/online
          printf "OFFLINE: " && cat /sys/devices/system/cpu/offline
      
        $ cat online.sh
          #!/bin/bash
          nbr=$1
          echo 1 > /sys/devices/system/cpu/cpu$nbr/online
          printf "ONLINE:  " && cat /sys/devices/system/cpu/online
          printf "OFFLINE: " && cat /sys/devices/system/cpu/offline
      Signed-off-by: default avatarldts <jramirez@baylibre.com>
      7e532c4b
  3. 16 Oct, 2018 2 commits
  4. 15 Oct, 2018 3 commits
  5. 11 Oct, 2018 3 commits
  6. 10 Oct, 2018 4 commits
  7. 09 Oct, 2018 1 commit
  8. 07 Oct, 2018 1 commit
  9. 03 Oct, 2018 5 commits
    • Konstantin Porotchkin's avatar
      marvell: Move BLE from external repo to the platform folder · 37c4341b
      Konstantin Porotchkin authored
      
      
      The BLE is the pre-TF-A boot stage required by Marvell Armada
      BootROM for bringing up DRAM and allow the boot image copy to it.
      Since this is not a standard boot level and only uses the TF-A
      as a build environment, it was introduced out of source tree.
      However it turns out that such remote location introduces additional
      complexity to the upstream TF-A build process.
      In order to simplify the build environment the BLE source folder
      is relocated from the external repository to A8K platform directory.
      The build documentation is updated accordingly.
      Signed-off-by: default avatarKonstantin Porotchkin <kostap@marvell.com>
      37c4341b
    • Daniel Boulby's avatar
      FVP: Reclaim init code for the stack · cb4adb0d
      Daniel Boulby authored
      
      
      Map the initialization code for BL31 to overlap with the memory
      required for the secondary cores stack. Once BL31 has been
      initialized the memory can be remapped to RW data so that it can
      be used for secondary cores stacks. By moving code from .text to
      .text.init the size of the BL31 image is decreased by a page.
      
      Split arm_common.ld.S into two linker scripts, one for tzc_dram
      (arm_tzc_dram.ld.S) and one for reclaiming initialization code
      (arm_reclaim_init.ld.S) so that platforms can chose which memory
      regions they wish to include.
      
      Change-Id: I648e88f3eda1aa71765744cf34343ecda9320b32
      Signed-off-by: default avatarDaniel Boulby <daniel.boulby@arm.com>
      cb4adb0d
    • Daniel Boulby's avatar
      Mark GICV3, CCI and CCN boot time code as init · c9263e62
      Daniel Boulby authored
      
      
      Mark the GICv3, CCI and CCN code only used in Bl31 initialization
      with __init to be reclaimed once no longer needed.
      
      Change-Id: I3d77f36758450d9d1d87ecc60bc1c63fe4082667
      Signed-off-by: default avatarDaniel Boulby <daniel.boulby@arm.com>
      c9263e62
    • Daniel Boulby's avatar
      plat/arm: Mark arm platform initialization functions · 4d010d0d
      Daniel Boulby authored
      
      
      Mark the initialization functions found in the BL31 boot sequence
      as __init so they can be reclaimed when no longer needed.
      
      Change-Id: I687a89346419c7710ef5097feaa325d83c527697
      Signed-off-by: default avatarDaniel Boulby <daniel.boulby@arm.com>
      4d010d0d
    • Daniel Boulby's avatar
      Remove unused ROMLIB memory region macro · 8d30b498
      Daniel Boulby authored
      
      
      Remove ARM_MAP_BL_ROMLIB memory region macro as it is now split
      into two regions for code and data
      
      Change-Id: Ic17b5b584933c196db29fe83051d7e0a8e92911c
      Signed-off-by: default avatarDaniel Boulby <daniel.boulby@arm.com>
      8d30b498
  10. 02 Oct, 2018 1 commit