lkml.org 
[lkml]   [2020]   [May]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v8 10/13] dmaengine: imx-sdma: remove ERR009165 on i.mx6ul
    Date
    ECSPI issue fixed from i.mx6ul at hardware level, no need
    ERR009165 anymore on those chips such as i.mx8mq.

    Signed-off-by: Robin Gong <yibin.gong@nxp.com>
    Acked-by: Vinod Koul <vkoul@kernel.org>
    ---
    drivers/dma/imx-sdma.c | 29 ++++++++++++++++++++++++++++-
    1 file changed, 28 insertions(+), 1 deletion(-)

    diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
    index db4132f..be86ae8 100644
    --- a/drivers/dma/imx-sdma.c
    +++ b/drivers/dma/imx-sdma.c
    @@ -419,6 +419,13 @@ struct sdma_driver_data {
    int num_events;
    struct sdma_script_start_addrs *script_addrs;
    bool check_ratio;
    + /*
    + * ecspi ERR009165 fixed should be done in sdma script
    + * and it has been fixed in soc from i.mx6ul.
    + * please get more information from the below link:
    + * https://www.nxp.com/docs/en/errata/IMX6DQCE.pdf
    + */
    + bool ecspi_fixed;
    };

    struct sdma_engine {
    @@ -539,6 +546,13 @@ static struct sdma_driver_data sdma_imx6q = {
    .script_addrs = &sdma_script_imx6q,
    };

    +static struct sdma_driver_data sdma_imx6ul = {
    + .chnenbl0 = SDMA_CHNENBL0_IMX35,
    + .num_events = 48,
    + .script_addrs = &sdma_script_imx6q,
    + .ecspi_fixed = true,
    +};
    +
    static struct sdma_script_start_addrs sdma_script_imx7d = {
    .ap_2_ap_addr = 644,
    .uart_2_mcu_addr = 819,
    @@ -587,6 +601,9 @@ static const struct platform_device_id sdma_devtypes[] = {
    .name = "imx7d-sdma",
    .driver_data = (unsigned long)&sdma_imx7d,
    }, {
    + .name = "imx6ul-sdma",
    + .driver_data = (unsigned long)&sdma_imx6ul,
    + }, {
    .name = "imx8mq-sdma",
    .driver_data = (unsigned long)&sdma_imx8mq,
    }, {
    @@ -603,6 +620,7 @@ static const struct of_device_id sdma_dt_ids[] = {
    { .compatible = "fsl,imx31-sdma", .data = &sdma_imx31, },
    { .compatible = "fsl,imx25-sdma", .data = &sdma_imx25, },
    { .compatible = "fsl,imx7d-sdma", .data = &sdma_imx7d, },
    + { .compatible = "fsl,imx6ul-sdma", .data = &sdma_imx6ul, },
    { .compatible = "fsl,imx8mq-sdma", .data = &sdma_imx8mq, },
    { /* sentinel */ }
    };
    @@ -1169,8 +1187,17 @@ static int sdma_config_channel(struct dma_chan *chan)
    if (sdmac->peripheral_type == IMX_DMATYPE_ASRC_SP ||
    sdmac->peripheral_type == IMX_DMATYPE_ASRC)
    sdma_set_watermarklevel_for_p2p(sdmac);
    - } else
    + } else {
    + /*
    + * ERR009165 fixed from i.mx6ul, no errata need,
    + * set bit31 to let sdma script skip the errata.
    + */
    + if (sdmac->peripheral_type == IMX_DMATYPE_CSPI &&
    + sdmac->direction == DMA_MEM_TO_DEV &&
    + sdmac->sdma->drvdata->ecspi_fixed)
    + __set_bit(31, &sdmac->watermark_level);
    __set_bit(sdmac->event_id0, sdmac->event_mask);
    + }

    /* Address */
    sdmac->shp_addr = sdmac->per_address;
    --
    2.7.4
    \
     
     \ /
      Last update: 2020-05-20 14:35    [W:5.611 / U:0.204 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site