06 Feb, 2018

2 commits

  • These are declared in Kconfig, but some #defines have crept in.

    CONFIG_FPGA
    CONFIG_FPGA_ALTERA
    CONFIG_FPGA_CYCLON2
    CONFIG_FPGA_SOCFPGA
    CONFIG_FPGA_XILINX
    CONFIG_FPGA_ZYNQMPPL

    Signed-off-by: Tuomas Tynkkynen

    Tuomas Tynkkynen
     
  • In most places in the code we cast this to an unsigned long, but in one
    place we cast to an unsigned int. For consistency and to fix a warning
    on 64bit targets, always cast this to unsigned long. For the long term
    we should however change the declaration of dma_buf.

    Cc: Philipp Tomsich
    Acked-by: Lukasz Majewski
    Acked-by: Marek Vasut
    Signed-off-by: Tom Rini

    Tom Rini
     

05 Feb, 2018

6 commits


04 Feb, 2018

32 commits

  • Tom Rini
     
  • Tom Rini
     
  • This patch adds a sec_init call into arch_misc_init(). Doing so in
    conjunction with the patch "drivers/crypto/fsl: assign job-rings to
    non-TrustZone" enables use of the CAAM in Linux when OPTEE/TrustZone is
    active.

    u-boot will initialise the RNG and assign ownership of the job-ring
    registers to a non-TrustZone context. With recent changes by Lukas Auer to
    fully initialize the RNG in sec_init() this means that u-boot will hand-off
    the CAAM in a state that Linux then can use the CAAM without touching the
    reserved DECO registers.

    This change is safe both for the OPTEE/TrustZone boot path and the regular
    non-OPTEE/TrustZone boot path.

    Signed-off-by: Bryan O'Donoghue
    Cc: Fabio Estevam
    Cc: Peng Fan
    Cc: Marco Franchi
    Cc: Vanessa Maegima
    Cc: Stefano Babic
    Cc: Lukas Auer
    Tested-by: Lukas Auer
    Reviewed-by: Fabio Estevam

    Bryan O'Donoghue
     
  • After enabling TrustZone various parts of the CAAM silicon become
    inaccessible to non TrustZone contexts. The job-ring registers are designed
    to allow non TrustZone contexts like Linux to still submit jobs to CAAM
    even after TrustZone has been enabled.

    The default job-ring permissions after the BootROM look like this for
    job-ring zero.

    ms=0x00008001 ls=0x00008001

    The MS field is JRaMIDR_MS (job ring MID most significant).

    Referring to "Security Reference Manual for i.MX 7Dual and 7Solo
    Applications Processors, Rev. 0, 03/2017" section 8.10.4 we see that
    JROWN_NS controls whether or not a job-ring is accessible from non
    TrustZone.

    Bit 15 (TrustZone) is the logical inverse of bit 3 hence the above value of
    0x8001 shows that JROWN_NS=0 and TrustZone=1.

    Clearly then as soon as TrustZone becomes active the job-ring registers are
    no longer accessible from Linux, which is not what we want.

    This patch explicitly sets all job-ring registers to JROWN_NS=1 (non
    TrustZone) by default and to the Non-Secure MID 001. Both settings are
    required to successfully assign a job-ring to non-secure mode. If a piece
    of TrustZone firmware requires ownership of job-ring registers it can unset
    the JROWN_NS bit itself.

    This patch in conjunction with a modification of the Linux kernel to skip
    HWRNG initialisation makes CAAM usable to Linux with TrustZone enabled.

    Signed-off-by: Bryan O'Donoghue
    Cc: Fabio Estevam
    Cc: Peng Fan
    Cc: Alex Porosanu
    Cc: Ruchika Gupta
    Cc: Aneesh Bansal
    Link: https://github.com/OP-TEE/optee_os/issues/1408
    Link: https://tinyurl.com/yam5gv9a
    Tested-by: Lukas Auer

    Bryan O'Donoghue
     
  • We should take the MX6DP and MX6QP options in consideration
    in the I2C_PADS_INFO macro.

    Based on a patch by Pierluigi Passaro

    Signed-off-by: Eran Matityahu
    Reviewed-by: Fabio Estevam

    Eran Matityahu
     
  • We should take the MX6DP and MX6QP options in consideration
    when defining imx_iomux_v3_setup_pad().

    Based on a patch by Pierluigi Passaro

    Signed-off-by: Eran Matityahu
    Reviewed-by: Fabio Estevam

    Eran Matityahu
     
  • The original text is from the time that the config options were not
    converted to Kconfig.

    After the conversion to Kconfig only CONFIG_SECURE_BOOT and
    CONFIG_CMD_DEKBLOB need to be selected by the user.

    The other config options are automatically selected by the Kconfig
    logic.

    Signed-off-by: Fabio Estevam
    Reviewed-by: Breno Lima

    Fabio Estevam
     
  • The input keycode KEY_POWER is used in the imx6ull.dtsi file,
    hence include the input header where used.

    Signed-off-by: Stefan Agner

    Stefan Agner
     
  • fastboot tool is a convenient way to flash the eMMC, so
    add support for it.

    Examples of usages:

    On the mx6sabresd:

    => fastboot 0

    On the Linux PC connected via USB:

    $ sudo fastboot getvar bootloader-version -i 0x0525
    bootloader-version: U-Boot 2018.01-00550-g7517cfe
    finished. total time: 0.000s

    $ sudo fastboot reboot -i 0x0525

    (this causes the mx6sabresd to reboot)

    Signed-off-by: Fabio Estevam
    Tested-by: Shawn Guo

    Fabio Estevam
     
  • Select CONFIG_CMD_USB_MASS_STORAGE so that the 'ums' can be used.

    Signed-off-by: Fabio Estevam

    Fabio Estevam
     
  • Selecting CONFIG_USB_FUNCTION_MASS_STORAGE=y in the defconfig leads to
    the following error:

    cmd/built-in.o: In function `do_usb_mass_storage':
    cmd/usb_mass_storage.c:217: undefined reference to `fsg_main_thread'
    cmd/usb_mass_storage.c:170: undefined reference to `fsg_init'

    CONFIG_USB_FUNCTION_MASS_STORAGE option is built only for
    the non-SPL case as per the logic in drivers/usb/gadget/Makefile,
    so remove the incorrect CONFIG_SPL ifdefery to fix the build
    failure.

    Signed-off-by: Fabio Estevam
    Tested-by: Shawn Guo

    Fabio Estevam
     
  • Add board specific imx config file with recommended IPU Qos settings
    and adapted DDR configuration.

    Signed-off-by: Soeren Moch

    Soeren Moch
     
  • SION bit should be used in the situation that we need
    to read back the value of a pin and should not be set by
    default macro.

    We get some malfunction as raised by following thread

    https://www.spinics.net/lists/linux-usb/msg162574.html

    As reported by this application note:
    https://www.nxp.com/docs/en/application-note/AN5078.pdf

    The software input on (SION) bit is an option to force an input
    path to be active regardless of the value driven by the
    corresponding module. It is used when the nature direction
    of a pin depending on selected alternative function is an output,
    but it is needed to read the real logic value on a pin.

    The SION bit can be used in:
    • Loopback: the module of a selected alternative function drives
    the pad and also receives the pad value as an input
    • GPIO capture: the module of a selected alternative function
    drives the pin and the value is captured by the GPIO

    SION bit is not necessary when the pin is configured as a peripheral
    apart specific silicon bug. If an application needs to have this
    set, this should be done in board file or in dts file

    Signed-off-by: Michael Trimarchi
    Reviewed-by: Benoît Thébaudeau
    Signed-off-by: Michael Trimarchi
    Reviewed-by: Fabio Estevam

    Michael Trimarchi
     
  • Enable UHS and HS200 for mx7dsabresd.

    Read Speed improvement:
    Kingston SD10VG2/16GB SDHC 3.0 card
    22.2MB/s -> 73.7MB/s
    eMMC5.0 MTFC8GACAEAM:
    68MB/s -> 87MB/s

    Signed-off-by: Peng Fan
    Cc: Stefano Babic
    Cc: Fabio Estevam
    Cc: Jaehoon Chung

    Peng Fan
     
  • Introduce SDR104 and HS200 support
    The implementation takes linux kernel sdhci.c and sdhci-esdhc-imx.c
    as reference.
    - Implement esdhc_change_pinstate to dynamically change pad settings
    - Implement esdhc_set_timing
    - Implement esdhc_set_voltage to switch voltage
    - Implement fsl_esdhc_execute_tuning to execute time process
    - Enlarge the cfg->f_max to 200MHz.
    - Parse fsl,tuning-step, fsl,tuning-start-tap and
    fsl,strobe-dll-delay-target from device tree.
    - Parse no-1-8-v property
    - Introduce esdhc_soc_data to indicate the flags and caps

    Signed-off-by: Peng Fan
    Cc: Stefano Babic
    Cc: Fabio Estevam
    Cc: Jaehoon Chung
    Reviewed-by: Jaehoon Chung

    Peng Fan
     
  • The pinmux and tuning settings are from
    https://source.codeaurora.org/external/imx/linux-imx/tree/arch/
    arm/boot/dts/imx7s.dtsi?h=imx_4.9.11_1.0.0_ga
    https://source.codeaurora.org/external/imx/linux-imx/tree/arch/
    arm/boot/dts/imx7d-sdb.dts?h=imx_4.9.11_1.0.0_ga

    To support HS200 and SDR104, we need change pinmux settings dynamically.
    And configure tuning step and start tuning tap, otherwise you may
    see tuning failure.

    Signed-off-by: Peng Fan
    Cc: Stefano Babic
    Cc: Fabio Estevam
    Cc: Jaehoon Chung

    Peng Fan
     
  • Add entries that will be used for tuning control.
    The whole layout not changed, just expand reserved3[84] and
    rename other reservedx in sequence.

    Signed-off-by: Peng Fan
    Cc: Stefano Babic
    Cc: Fabio Estevam
    Cc: Jaehoon Chung
    Reviewed-by: Jaehoon Chung

    Peng Fan
     
  • The board header file included a reference to the starting point
    from nitrogen6x.h, but since so much changed, the file bears
    little resemblance to that file.

    Signed-off-by: Eric Nelson

    Eric Nelson
     
  • The initial implementation of mx6memcal reset the CPU after
    running the memory calibration procedure because the generic
    board has no information about which boot devices are available.

    Now that we have SDP support in SPL, use it to allow a full
    U-Boot to be uploaded (i.e. to use "mtest").

    Signed-off-by: Eric Nelson
    Reviewed-by: Fabio Estevam

    Eric Nelson
     
  • This patch just changes the order of configuration items in
    mx6memcal_defconfig to match the Kconfig layout, making it easier
    to track changes made using menuconfig.

    Signed-off-by: Eric Nelson
    Reviewed-by: Fabio Estevam

    Eric Nelson
     
  • Static variables are not available during board_init_f().
    'static uint32_t mx53_dram_size[2];' was used in board specific
    dram_init(), dram_init_banksize() and get_effective_memsize() to avoid
    multiple calls to get_ram_size().

    Reused dram initialization functions from arch/arm/mach-imx/mx5/mx53_dram.c

    Signed-off-by: Patrick Bruenn

    Patrick Bruenn
     
  • Static variables are not available during board_init_f().
    'static uint32_t mx53_dram_size[2];' was used in board specific
    dram_init(), dram_init_banksize() and get_effective_memsize() to avoid
    multiple calls to get_ram_size().

    Reused dram initialization functions from arch/arm/mach-imx/mx5/mx53_dram.c

    Signed-off-by: Patrick Bruenn

    Patrick Bruenn
     
  • Move dram_init(), dram_init_banksize() and get_effective_memsize() to
    arch/arm/mach-imx/mx5/mx53_dram.c, where it can be reused by m53evk and
    mx53loco.

    Signed-off-by: Patrick Bruenn

    Patrick Bruenn
     
  • Static variables are not available during board_init_f().
    'static uint32_t mx53_dram_size[2];' was used in board specific
    dram_init(), dram_init_banksize() and get_effective_memsize() to avoid
    multiple calls to get_ram_size().

    However multiple calls are better than undefined behavior...
    This fixes:
    https://lists.denx.de/pipermail/u-boot/2017-November/313214.html
    https://lists.denx.de/pipermail/u-boot/2017-December/314480.html

    Signed-off-by: Patrick Bruenn

    Patrick Bruenn
     
  • Validate the time at startup:
    - in case rtc error add to kernel command line RTC_ERROR
    - clamp date to 1-Jan-2036

    Signed-off-by: Nandor Han
    Signed-off-by: Martyn Welch
    Signed-off-by: Sebastian Reichel

    Nandor Han
     
  • The exact definition of a successful boot is defined by user-space.
    Determine the boot partition automatically. A partition is selected if
    file `/boot/bootcause/firstboot' exists (meaning that the partition has
    freshly installed software) OR if file `/boot/fitImage' exists.

    When userspace determines that new software was successfully installed,
    it must (1) delete `/boot/fitImage' on the _inactive_ partition and (2)
    remove `/boot/bootcause/firstboot'.

    Enable video, but do not display logos or other version information.
    Silence kernel console logging by default.

    Print a message to VGA screen in case of boot failure and reset bootcount
    to allow the user to attempt boot again.

    Signed-off-by: Ian Ray
    Signed-off-by: Martyn Welch
    Signed-off-by: Sebastian Reichel

    Ian Ray
     
  • Change the kernel command line to mount the root filesystem read-only in
    order to be able to run filesystem check on it on boot.

    Signed-off-by: Hannu Lounento
    Signed-off-by: Martyn Welch
    Signed-off-by: Sebastian Reichel

    Hannu Lounento
     
  • Enable bootcount using an EXT file.

    Signed-off-by: Ian Ray
    Signed-off-by: Martyn Welch
    Signed-off-by: Sebastian Reichel

    Ian Ray
     
  • Read boot script from shared partition, if available.

    Signed-off-by: Ian Ray
    Signed-off-by: Martyn Welch
    Signed-off-by: Sebastian Reichel

    Ian Ray
     
  • Modify configuration to support FIT. Set variable `confidx' from VPD,
    in order to load the correct device tree. Modify/simplify U-Boot
    environment to support loading FIT image.

    Signed-off-by: Ian Ray
    Signed-off-by: Martyn Welch
    Signed-off-by: Sebastian Reichel

    Ian Ray
     
  • Enable the hardware watchdog on bx50v3 to cause it to reset in the event
    the board hangs.

    Configure GPIO_9 pin as WDOG1_B so that a watchdog timeout results in a
    full system reset.

    The watchdog is used and reconfigured by systemd approximately 1.7 seconds
    into boot. Adding a few seconds for U-Boot and a few more seconds as a
    safety margin.

    Note that the PCIe controller is _not_ put back into a safe state prior
    to board reset. This is a problem if board reset is implemented as CPU
    reset.

    Signed-off-by: Ian Ray
    Signed-off-by: Martyn Welch
    Signed-off-by: Sebastian Reichel

    Martyn Welch
     
  • There are two I210s on the b850v3 and one on the b450v3 and b650v3.
    One is connected to Marvell 88e6240 which is already programmed.

    Follow the flow documented in doc/README.enetaddr: set the
    enet[0-9]*addr environment variable and let the driver program the
    hardware.

    The mapping from the driver's index to the environment variable's name
    is documented in README: Note for Redundant Ethernet Interfaces. It is
    assumed that eth_devices for the controllers on the board are always
    indexed in the same order.

    The environment variables are removed after programming the hardware
    because the variables seem to influence MAC addresses also after U-Boot.
    Specifically the MAC address of FEC (MC interface) would be incorrectly
    set: 'ethaddr', which maps to the first I210 chip and is set to I210's
    default address read from the driver by eth_write_hwaddr in eth_legacy.c
    because the variable is undefined (not set even by bx50v3.c), would
    result in the eth0 interface's MAC address to be set to I210's default
    address.

    Signed-off-by: Hannu Lounento
    Signed-off-by: Ian Ray
    Signed-off-by: Martyn Welch
    Signed-off-by: Sebastian Reichel

    Hannu Lounento