03 Sep, 2015

18 commits

  • Add a driver for the ACT8846 PMIC. This supports several LDOs and BUCKs and
    is connected to the I2C bus. This driver supports using a regulator driver
    to access the regulators.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • Add header files for the peripherals and clocks supported on Rockchip
    platforms. The particular implementation (and register set) for each is
    SoC-specific, but it seems that the naming can be generic.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • This supports RK3288 at present. It does not implement functions or support
    for pull up/down.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • The Rockchip boot ROM requires a particular file format for booting from SPI.
    It consists of a 512-byte header encoded with RC4, some padding and then up
    to 32KB of executable code in 2KB blocks, separated by 2KB empty blocks.

    Add support to mkimage so that an SPL image (u-boot-spl-dtb.bin) can be
    converted to this format. This allows booting from SPI flash on supported
    machines.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • The Rockchip boot ROM requires a particular file format. It consists of
    64KB of zeroes, a 512-byte header encoded with RC4, and then some executable
    code.

    Add support to mkimage so that an SPL image (u-boot-spl-dtb.bin) can be
    converted to this format.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • Rockchip SoCs require certain formats for code that they execute, The
    simplest format is a 4-byte header at the start of a binary file. Add
    support for this so that we can create images that the boot ROM understands.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • Allow the image handler to store the original input file size so that it
    can reference it later.

    Signed-off-by: Simon Glass
    Reviewed-by: Joe Hershberger

    Simon Glass
     
  • At present there is an arbitrary limit of 4KB for padding. Rockchip needs
    more than that, so remove this restriction.

    Signed-off-by: Simon Glass
    Reviewed-by: Joe Hershberger

    Simon Glass
     
  • In SPL we need access to the CRU and other peripherals so we can set up
    SDRAM. Mark these so that they will remain in the device tree.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • Bring in required device tree files from Linux. Since mainline Linux is
    somewhat behind, use the files from the Chromium tree. We can re-sync once
    further code is acccepted upstream.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • Add support for the Rockchip serial device using the ns16550 driver.
    This uses driver model and device tree for both SPL and U-Boot proper.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • There can be only one do_reset(). When CONFIG_RESET is enabled this is
    provided by the reset uclass, and ARM's version should be disabled.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • All devices should bind without error. But when they don't, they can cause
    driver model init to fail. A real situation where this can happen is when
    there is a missing uclass.

    Add a debug() call to dm_scan_fdt_node to make this easier to track.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • When a uclass definition is missing, no drivers in that uclass can operate.
    This can happen if a board has a strange collection of options (e.g. the
    driver is enabled but the uclass is not).

    Unfortunately this is very confusing at present. Starting up driver model
    results in a -ENOENT error, which is pretty generic. Quite a big of digging
    is needed to get to the root cause.

    To help with this, change the error to a very strange one with no other
    users in U-Boot. Also add a debug message.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • Some SoCs want to adjust the input clock to the DWMMC block as a way of
    controlling the MMC bus clock. Update the get_mmc_clk() method to support
    this.

    Signed-off-by: Simon Glass
    Acked-by: Jaehoon Chung

    Simon Glass
     
  • At present SPL does not have its own option. But these features can
    increase SPL code size. Adjust the Kconfig and Makefile so that
    separate a SPL option can be selected.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • My original pinctrl patch operating using a peripheral ID enum. This was
    shared between pinmux and clock and provides an easy way to specify a device
    that needs to be controlled, even it is does not (yet) have a driver within
    driver model.

    Masahiro's new simple pinctrl gets around this by providing a
    set_state_simple() pinctrl method. By passing a device to that call the
    peripheral ID becomes unnecessary. If the driver needs it, it can calculate
    it itself and use it internally.

    However this does not solve the problem for peripheral clocks. The 'pure'
    solution would be to pass a driver to the clock uclass also. But this
    requires that all devices should have a driver, and a struct udevide. Also
    a key optimisation of the clock uclass is allowing a peripheral clock to
    be set even when there is no device for that clock.

    There may be a better way to achive the same goal, but for now it seems
    expedient to add in peripheral ID to the pinctrl uclass. Two methods are
    added - one to get the peripheral ID and one to select it. The existing
    set_state_simple() is effectively the union of these.

    Signed-off-by: Simon Glass

    Simon Glass
     
  • The pinctrl Kconfig options should have help messages. Add this to a few
    options.

    Signed-off-by: Simon Glass

    Simon Glass
     

01 Sep, 2015

1 commit


31 Aug, 2015

21 commits

  • Tom Rini
     
  • Signed-off-by: Boris Brezillon
    Acked-by: Hans de Goede
    Signed-off-by: Hans de Goede

    Boris Brezillon
     
  • This should depend on SPL_OF_CONTROL (it is not equivalent to
    SPL && OF_CONTROL).

    Signed-off-by: Masahiro Yamada
    Acked-by: Simon Glass

    Masahiro Yamada
     
  • This driver actually does nothing but test pinctrl uclass, and
    demonstrate how things work.

    To try this driver, uncomment /* #define DEBUG */ in the
    drivers/pinctrl/pinctrl-sandbox.c, and debug messages will be
    displayed.

    DRAM: 128 MiB
    sandbox pinmux: group = 1 (serial_a), function = 1 (serial)
    Using default environment

    In: cros-ec-keyb
    Out: lcd
    Err: lcd
    Net: Net Initialization Skipped
    eth0: eth@10002000, eth1: eth@80000000, eth5: eth@90000000
    => i2c dev 0
    Setting bus to 0
    sandbox pinmux: group = 0 (i2c), function = 0 (i2c)
    sandbox pinconf: group = 0 (i2c), param = 3, arg = 1

    Signed-off-by: Masahiro Yamada
    Acked-by: Simon Glass

    Masahiro Yamada
     
  • This creates a new framework for handling of pin control devices,
    i.e. devices that control different aspects of package pins.

    This uclass handles pinmuxing and pin configuration; pinmuxing
    controls switching among silicon blocks that share certain physical
    pins, pin configuration handles electronic properties such as pin-
    biasing, load capacitance etc.

    This framework can support the same device tree bindings, but if you
    do not need full interface support, you can disable some features to
    reduce memory foot print. Typically around 1.5KB is necessary to
    include full-featured uclass support on ARM board (CONFIG_PINCTRL +
    CONFIG_PINCTRL_FULL + CONFIG_PINCTRL_GENERIC + CONFIG_PINCTRL_PINMUX),
    for example.

    We are often limited on code size for SPL. Besides, we still have
    many boards that do not support device tree configuration. The full
    pinctrl, which requires OF_CONTROL, does not make sense for those
    boards. So, this framework also has a Do-It-Yourself (let's say
    simple pinctrl) interface. With CONFIG_PINCTRL_FULL disabled, the
    uclass itself provides no systematic mechanism for identifying the
    peripheral device, applying pinctrl settings, etc. They must be
    done in each low-level driver. In return, you can save much memory
    footprint and it might be useful especially for SPL.

    Signed-off-by: Masahiro Yamada
    Acked-by: Simon Glass

    Masahiro Yamada
     
  • This is useful when we want to bind a device, but do not need the
    pointer to the device.

    Signed-off-by: Masahiro Yamada
    Acked-by: Simon Glass

    Masahiro Yamada
     
  • The TPM is listed in the device tree. Enable the driver and 'tpm' command
    so that it can be used.

    Signed-off-by: Simon Glass
    Acked-by: Christophe Ricard
    Reviewed-by: Heiko Schocher

    Simon Glass
     
  • This command provides a few useful tests so enable it for common boards.

    Signed-off-by: Simon Glass
    Acked-by: Christophe Ricard
    Reviewed-by: Heiko Schocher

    Simon Glass
     
  • These tests come from Chrome OS code. They are not particularly tidy but can
    be useful for checking that the TPM is behaving correctly. Some knowledge of
    TPM operation is required to use these.

    Signed-off-by: Simon Glass
    Acked-by: Christophe Ricard
    Reviewed-by: Heiko Schocher

    Simon Glass
     
  • Add a few new functions which will be used by the test command in a future
    patch.

    Signed-off-by: Simon Glass
    Acked-by: Christophe Ricard
    Reviewed-by: Heiko Schocher

    Simon Glass
     
  • Add a command to display basic information about a TPM such as the model and
    open/close state. This can be useful for debugging.

    Signed-off-by: Simon Glass
    Acked-by: Christophe Ricard
    Reviewed-by: Heiko Schocher

    Simon Glass
     
  • Convert the tpm_tis_lpc driver to use driver model and update boards which
    use it.

    Signed-off-by: Simon Glass
    Acked-by: Christophe Ricard
    Reviewed-by: Heiko Schocher

    Simon Glass
     
  • Convert the tpm_tis_i2c driver to use driver model and update boards which
    use it.

    Signed-off-by: Simon Glass
    Acked-by: Christophe Ricard
    Reviewed-by: Heiko Schocher

    Simon Glass
     
  • Add a TPM node to the various Chromebooks so that driver can be converted to
    driver model.

    Signed-off-by: Simon Glass
    Acked-by: Christophe Ricard
    Reviewed-by: Heiko Schocher

    Simon Glass
     
  • Rather then crashing when there is no data, print an error. The error is
    printed by the caller to parse_byte_string().

    Acked-by: Christophe Ricard
    Signed-off-by: Simon Glass
    Reviewed-by: Heiko Schocher

    Simon Glass
     
  • Convert the sandbox TPM driver to use driver model. Add it to the device
    tree so that it can be found on start-up.

    Signed-off-by: Simon Glass
    Acked-by: Christophe Ricard
    Reviewed-by: Heiko Schocher

    Simon Glass
     
  • When a 'tpm' command fails, we set the return code but give no indication
    of failure. This can be confusing.

    Add an error message when any tpm command fails.

    Signed-off-by: Simon Glass
    Acked-by: Christophe Ricard
    Reviewed-by: Heiko Schocher

    Simon Glass
     
  • I2C chips can support a register offset, with registers accessible by
    sending this offset as the first part of any read or write transaction.
    Most I2C chips have a single byte offset, thus the offset length is 1.
    This provides access for up 256 registers.

    However other offset lengths are supported, including 0.

    Add a command to provide access to the offset length from the command
    line. This allows the offset length to be read or written.

    Signed-off-by: Simon Glass
    Acked-by: Christophe Ricard
    Reviewed-by: Heiko Schocher

    Simon Glass
     
  • Add driver model support to the TPM command and the TPM library. Both
    support only a single TPM at present.

    Signed-off-by: Simon Glass
    Acked-by: Christophe Ricard
    Reviewed-by: Heiko Schocher

    Simon Glass
     
  • Add a new uclass for TPMs which uses almost the same TIS (TPM Interface
    Specification) as is currently implemented. Since init() is handled by the
    normal driver model probe() method, we don't need to implement that. Also
    rename the transfer method to xfer() which is a less clumbsy name.

    Once all drivers and users are converted to driver model we can remove the
    old code.

    Signed-off-by: Simon Glass
    Acked-by: Christophe Ricard
    Reviewed-by: Heiko Schocher

    Simon Glass
     
  • Use a _US suffix for microseconds and a _MS suffic for milliseconds. Move
    all timeouts and delays into one place. Use mdelay() instead of udelay()
    where appropriate.

    Signed-off-by: Simon Glass
    Acked-by: Christophe Ricard
    Reviewed-by: Heiko Schocher

    Simon Glass