Skip to content
Permalink
Miquel-Raynal/…
Switch branches/tags

Commits on Dec 16, 2021

  1. spi: mxic: Add support for pipelined ECC operations

    Some SPI-NAND chips do not have a proper on-die ECC engine providing
    error correction/detection. This is particularly an issue on embedded
    devices with limited resources because all the computations must
    happen in software, unless an external hardware engine is provided.
    
    These external engines are new and can be of two categories: external
    or pipelined. Macronix is providing both, the former being already
    supported. The second, however, is very SoC implementation dependent
    and must be instantiated by the SPI host controller directly.
    
    An entire subsystem has been contributed to support these engines which
    makes the insertion into another subsystem such as SPI quite
    straightforward without the need for a lot of specific functions.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Reviewed-by: Mark Brown <broonie@kernel.org>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  2. spi: mxic: Add support for direct mapping

    Implement the ->dirmap_create() and ->dirmap_read/write() hooks to
    provide a fast path for read and write accesses.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Tested-by: Zhengxun Li <zhengxunli@mxic.com.tw>
    Reviewed-by: Zhengxun Li <zhengxunli@mxic.com.tw>
    Reviewed-by: Mark Brown <broonie@kernel.org>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  3. spi: mxic: Create a helper to ease the start of an operation

    Create the mxic_spi_mem_prep_op_cfg() helper to provide the content to
    write to the register controlling the next IO command. This helper will
    soon be used by the dirmap implementation and having this code
    factorized out earlier will clarify this addition.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Reviewed-by: Mark Brown <broonie@kernel.org>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  4. spi: mxic: Create a helper to configure the controller before an oper…

    …ation
    
    Create the mxic_spi_set_hc_cfg() helper to configure the HC_CFG
    register. This helper will soon be used by the dirmap implementation and
    having this code factorized out earlier will clarify this addition.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Reviewed-by: Mark Brown <broonie@kernel.org>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  5. spi: mxic: Fix the transmit path

    By working with external hardware ECC engines, we figured out that
    Under certain circumstances, it is needed for the SPI controller to
    check INT_TX_EMPTY and INT_RX_NOT_EMPTY in both receive and transmit
    path (not only in the receive path). The delay penalty being
    negligible, move this code in the common path.
    
    Fixes: b942d80 ("spi: Add MXIC controller driver")
    Cc: stable@vger.kernel.org
    Suggested-by: Mason Yang <masonccyang@mxic.com.tw>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Reviewed-by: Zhengxun Li <zhengxunli@mxic.com.tw>
    Reviewed-by: Mark Brown <broonie@kernel.org>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  6. mtd: spinand: Create direct mapping descriptors for ECC operations

    In order for pipelined ECC engines to be able to enable/disable the ECC
    engine only when needed and avoid races when future parallel-operations
    will be supported, we need to provide the information about the use of
    the ECC engine in the direct mapping hooks. As direct mapping
    configurations are meant to be static, it is best to create two new
    mappings: one for regular 'raw' accesses and one for accesses involving
    correction. It is up to the driver to use or not the new ECC enable
    boolean contained in the spi-mem operation.
    
    As dirmaps are not free (they consume a few pages of MMIO address space)
    and because these extra entries are only meant to be used by pipelined
    engines, let's limit their use to this specific type of engine and save
    a bit of memory with all the other setups.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  7. spi: spi-mem: Add an ecc_en parameter to the spi_mem_op structure

    Soon the SPI-NAND core will need a way to request a SPI controller to
    enable ECC support for a given operation. This is because of the
    pipelined integration of certain ECC engines, which are directly managed
    by the SPI controller itself.
    
    Introduce a spi_mem_op additional field for this purpose: ecc_en.
    
    So far this field is left unset and checked to be false by all
    the SPI controller drivers in their ->supports_op() hook, as they all
    call spi_mem_default_supports_op().
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  8. spi: spi-mem: Kill the spi_mem_dtr_supports_op() helper

    Now that spi_mem_default_supports_op() has access to the static
    controller capabilities (related to memory operations), let's use this
    new information in order to derive if the operation is supported or
    not by the controller. This way, there is no need for the
    spi_mem_dtr_supports_op() helper anymore.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  9. spi: spi-mem: Fill the spi-mem controller capabilities of all the dri…

    …vers
    
    Update all the spi controller drivers registering spi-mem operations to
    provide a spi-mem capabilities structure.
    
    For most of them, it is just a matter of referencing the newly created
    spi_mem_no_caps empty structure. Only Cadence and Macronix SPI
    controller drivers support DTR operations, so these two need to define
    a non-empty set of capabilities.
    
    Prevent any new controller to register a set of spi-mem operations
    without a capabilities structure.
    
    So far these capabilities are not used by the core, this is just a
    preparation change.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  10. spi: spi-mem: Introduce a capability structure

    Create a spi_controller_mem_caps structure and put it within the
    spi_controller_mem_ops structure as these are highly related. So far the
    only field in this structure is the support for dtr operations, but soon
    we will add another parameter.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  11. spi: spi-mem: Fix a DTR related check in spi_mem_dtr_supports_op()

    It seems that the number of command bytes must be "2" only when the
    command itself is sent in DTR mode. The current logic checks if the
    number of command bytes is "2" when any of the cycles is a DTR cycle. It
    is likely that so far no device was actually mixing DTR/non-DTR cycles
    in the same operation, explaining why this was left undetected until
    now.
    
    Fixes: 539cf68 ("spi: spi-mem: add spi_mem_dtr_supports_op()")
    Suggested-by: Boris Brezillon <boris.brezillon@collabora.com>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  12. mtd: spinand: Delay a little bit the dirmap creation

    As we will soon tweak the dirmap creation to act a little bit
    differently depending on the picked ECC engine, we need to initialize
    dirmaps after ECC engines. This should not have any effect as dirmaps
    are not yet used at this point.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  13. mtd: nand: mxic-ecc: Support SPI pipelined mode

    Introduce the support for another possible configuration: the ECC
    engine may work as DMA master (pipelined) and move itself the data
    to/from the NAND chip into the buffer, applying the necessary
    corrections/computations on the fly.
    
    This driver offers an ECC engine implementation that must be
    instatiated from a SPI controller driver.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  14. mtd: nand: ecc: Provide a helper to retrieve a pilelined engine device

    In a pipelined engine situation, we might either have the host which
    internally has support for error correction, or have it using an
    external hardware block for this purpose. In the former case, the host
    is also the ECC engine. In the latter case, it is not. In order to get
    the right pointers on the right devices (for example: in order to devm_*
    allocate variables), let's introduce this helper which can safely be
    called by pipelined ECC engines in order to retrieve the right device
    structure.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  15. mtd: nand: mxic-ecc: Add Macronix external ECC engine support

    Some SPI-NAND chips do not support on-die ECC. For these chips,
    correction must apply on the SPI controller end. In order to avoid
    doing all the calculations by software, Macronix provides a specific
    engine that can offload the intensive work.
    
    Add Macronix ECC engine support, this engine can work in conjunction
    with a SPI controller and a raw NAND controller, it can be pipelined
    or external and supports linear and syndrome layouts.
    
    Right now the simplest configuration is supported: SPI controller
    external and linear ECC engine.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  16. mtd: nand: Add a new helper to retrieve the ECC context

    Introduce nand_to_ecc_ctx() which will allow to easily jump to the
    private pointer of an ECC context given a NAND device. This is very
    handy, from the prepare or finish ECC hook, to get the internal context
    out of the NAND device object.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  17. mtd: nand: ecc: Add infrastructure to support hardware engines

    Add the necessary helpers to register/unregister hardware ECC engines
    that will be called from ECC engine drivers.
    
    Also add helpers to get the right engine from the user
    perspective. Keep a reference of the in use ECC engine in order to
    prevent modules to be unloaded. Put the reference when the engine gets
    retired.
    
    A static list of hardware (only) ECC engines is setup to keep track of
    the registered engines.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  18. mtd: spinand: macronix: Use random program load

    Macronix SPI-NAND chips might benefit from an external ECC
    engine. Such an engine might need to access random columns, thus needing
    to use random commands (0x84 instead of 0x02).
    
    Signed-off-by: Mason Yang <masonccyang@mxic.com.tw>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Mason Yang authored and intel-lab-lkp committed Dec 16, 2021
  19. dt-bindings: mtd: Describe Macronix NAND ECC engine

    Describe Macronix NAND ECC engine. This engine may be used as an
    external engine or can be pipelined with either a raw NAND controller or
    a SPI controller. Both hardware designs with a SPI controller are shown
    in the examples.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Reviewed-by: Rob Herring <robh@kernel.org>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  20. dt-bindings: spi: mxic: Document the nand-ecc-engine property

    This SPI controller supports interacting with an external ECC
    engine. The nand-ecc-engine property already exist in the NAND world but
    also applies to SPI controller nodes which have external correction
    capabilities like Macronix's.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Reviewed-by: Mark Brown <broonie@kernel.org>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  21. dt-bindings: spi: mxic: Convert to yaml

    Straightforward conversion from regular text to yaml schema of the
    Macronix SPI controller DT bindings.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Reviewed-by: Mark Brown <broonie@kernel.org>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  22. dt-bindings: spi: mxic: The interrupt property is not mandatory

    The interrupt property is not mandatory at all, this property should not
    be part of the required properties list, so move it into the optional
    properties list.
    
    Fixes: 326e5c8 ("dt-binding: spi: Document Macronix controller bindings")
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Reviewed-by: Mark Brown <broonie@kernel.org>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  23. dt-bindings: vendor-prefixes: Clarify Macronix prefix

    When looking at compatible prefixes, Macronix is sometimes referred as
    "mxicy":
    - mxicy,mx25r1635f
    - mxicy,mx25u6435f
    - mxicy,mx25v8035f
    - mxicy,mx25f0a-spi
    and sometimes as "mxic":
    - mxic,multi-itfc-v009-nand-controller
    - mxic,enable-randomizer-otp
    
    The oldest prefix that is also the one preferred by Macronix engineers
    is "mxicy", so document the other one and mark it deprecated.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Reviewed-by: Rob Herring <robh@kernel.org>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  24. dt-bindings: mtd: spi-nand: Convert spi-nand description file to yaml

    Let's get rid of spi-nand.txt by converting it to yaml schema. While at
    converting this file, let's actually pull all the generic properties
    from nand-chip.yaml which might apply to a SPI-NAND chip.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Reviewed-by: Rob Herring <robh@kernel.org>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  25. dt-bindings: mtd: nand-chip: Create a NAND chip description

    Move the NAND chip description out of the NAND controller file. Indeed,
    a subsequent part of the properties supported by a raw NAND chip are
    also supported by SPI-NAND chips. So let's create a generic NAND chip
    description which will be pulled by nand-controller.yaml and later by
    spi-nand.yaml as well.
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Reviewed-by: Rob Herring <robh@kernel.org>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  26. dt-bindings: mtd: nand-controller: Harmonize the property types

    Harmonize the different properties in this file by:
    * dropping the non-necessary allOf's
    * always defining the keywords in the following order:
        - first the "description" (when relevant),
        - then the "type"/"$ref" and the other generic keywords ("enum",
          "default", etc).
    
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  27. dt-bindings: mtd: nand-controller: Fix a comment in the examples

    The controller properties should be in the controller 'parent' node,
    while properties in the children nodes are specific to the NAND
    *chip*. This error was already present during the yaml conversion.
    
    Fixes: 2d472ab ("mtd: nand: document the NAND controller/NAND chip DT representation")
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Acked-by: Rob Herring <robh@kernel.org>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021
  28. dt-bindings: mtd: nand-controller: Fix the reg property description

    The reg property of a NAND device always references the chip-select(s).
    The ready/busy lines are described in the nand-rb property. I believe
    this was a harmless copy/paste error during the conversion to yaml.
    
    Fixes: 212e496 ("dt-bindings: mtd: Add YAML schemas for the generic NAND options")
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Acked-by: Rob Herring <robh@kernel.org>
    miquelraynal authored and intel-lab-lkp committed Dec 16, 2021

Commits on Dec 15, 2021

  1. spi: atmel,quadspi: Define sama7g5 QSPI

    sama7g5 embedds 2 instances of the QSPI controller:
    1/ One Octal Serial Peripheral Interface (QSPI0) Supporting up to
       200 MHz DDR. Octal, TwinQuad, HyperFlash and OctaFlash Protocols
       Supported
    2/ One Quad Serial Peripheral Interface (QSPI1) Supporting Up to
       90 MHz DDR/133 MHz SDR
    
    Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Link: https://lore.kernel.org/r/20211209122939.339810-3-tudor.ambarus@microchip.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    ambarus authored and broonie committed Dec 15, 2021
  2. spi: atmel,quadspi: Convert to json-schema

    Convert the Atmel QuadSPI controller Device Tree binding documentation
    to json-schema.
    
    Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Link: https://lore.kernel.org/r/20211209122939.339810-2-tudor.ambarus@microchip.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    ambarus authored and broonie committed Dec 15, 2021

Commits on Dec 13, 2021

  1. spi: Fix incorrect cs_setup delay handling

    Move the cs_setup delay to the end of spi_set_cs.
    
    From include/linux/spi/spi.h:
    
     * @cs_setup: delay to be introduced by the controller after CS is
       asserted
    
    The cs_setup delay needs to happen *after* CS is asserted, that is, at
    the end of spi_set_cs, not at the beginning. Otherwise we're just
    delaying before the SPI transaction starts at all, which isn't very
    useful.
    
    No drivers use this right now, but that is likely to change soon with an
    upcoming Apple SPI HID transport driver.
    
    Fixes: 25093bd ("spi: implement SW control for CS times")
    Signed-off-by: Hector Martin <marcan@marcan.st>
    Link: https://lore.kernel.org/r/20211210170534.177139-1-marcan@marcan.st
    Signed-off-by: Mark Brown <broonie@kernel.org>
    marcan authored and broonie committed Dec 13, 2021

Commits on Dec 1, 2021

  1. dt-bindings: mtd: spi-nor: Add a reference to spi-peripheral-props.yaml

    The spi-peripheral-props.yaml schema contains peripheral-specific
    properties for SPI controllers that should be present in the peripheral
    node. Add a reference to that so its constraints are followed.
    
    additionalProperties: false cannot be used since it marks the controller
    properties as unknown. Use unevaluatedProperties: false instead. This
    has the side effect of allowing extra properties that are not specified
    in the schema. The alternative is to list all the controller properties
    in this schema but that would mean every peripheral binding would have
    to repeat the same set of properties for each controller.
    
    Signed-off-by: Pratyush Yadav <p.yadav@ti.com>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Link: https://lore.kernel.org/r/20211109181911.2251-4-p.yadav@ti.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Pratyush Yadav authored and broonie committed Dec 1, 2021
  2. spi: dt-bindings: cdns,qspi-nor: Move peripheral-specific properties out

    The spi-peripheral-props.yaml schema contains peripheral-specific
    properties for SPI controllers that should be present in the peripheral
    node. Move peripheral-specific properties to a separate file and refer
    to it in spi-peripheral-props.yaml.
    
    Signed-off-by: Pratyush Yadav <p.yadav@ti.com>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Link: https://lore.kernel.org/r/20211109181911.2251-3-p.yadav@ti.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Pratyush Yadav authored and broonie committed Dec 1, 2021
  3. spi: dt-bindings: add schema listing peripheral-specific properties

    Many SPI controllers need to add properties to peripheral devices. This
    could be the delay in clock or data lines, etc. These properties are
    controller specific but need to be defined in the peripheral node
    because they are per-peripheral and there can be multiple peripherals
    attached to a controller.
    
    If these properties are not added to the peripheral binding, then the
    dtbs check emits a warning. But these properties do not make much sense
    in the peripheral binding because they are controller-specific and they
    will just pollute every peripheral binding. So this binding is added to
    collect all such properties from all such controllers. Peripheral
    bindings should simply refer to this binding and they should be rid of
    the warnings.
    
    There are some limitations with this approach. Firstly, there is no way
    to specify required properties. The schema contains properties for all
    controllers and there is no way to know which controller is being used.
    Secondly, there is no way to restrict additional properties. Since this
    schema will be used with an allOf operator, additionalProperties needs
    to be true. In addition, the peripheral schema will have to set
    unevaluatedProperties: false.
    
    Despite these limitations, this appears to be the best solution to this
    problem that doesn't involve modifying existing tools or schema specs.
    
    Signed-off-by: Pratyush Yadav <p.yadav@ti.com>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Link: https://lore.kernel.org/r/20211109181911.2251-2-p.yadav@ti.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Pratyush Yadav authored and broonie committed Dec 1, 2021

Commits on Nov 29, 2021

  1. spi: pxa2xx: Get rid of unused enable_loopback member

    There is no user of the enable_loopback member in the struct pxa2xx_spi_chip.
    Remote this legacy member completely.
    
    The mentioned in the documentation the testing phase can be performed with
    spidev_test tool.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20211123192723.44537-3-andriy.shevchenko@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    andy-shev authored and broonie committed Nov 29, 2021
Older