05.02.2019 19:41, Sowjanya Komatineni пишет:
>> Please use "./scripts/checkpatch.pl --strict *.patch" and fix all its
>> complains, but only those that really make sense. For example ignore the
>> "CHECK: Lines should not end with a '('" warnings.
>>
>> Here checkpatch recommends to use the BIT() macro:
>>
>> CHECK: Prefer using the BIT macro
>> #394: FILE: drivers/i2c/busses/i2c-tegra.c:136:
>> +#define DATA_DMA_DIR_TX (1 << 0)
>>
>> CHECK: Prefer using the BIT macro
>> #395: FILE: drivers/i2c/busses/i2c-tegra.c:137:
>> +#define DATA_DMA_DIR_RX (1 << 1)
>
> I used checkpatch script, and it didn’t showed these errors. Probably
> checkpatch script versions are different. I am using the one from 5.0-rc4
Please notice the "--strict" flag, it makes checkpatch to report some extra
warnings.
>> +static int tegra_i2c_dma_submit(struct tegra_i2c_dev *i2c_dev, size_t
>> +len) {
>> + struct dma_async_tx_descriptor *dma_desc;
>> + enum dma_transfer_direction dir;
>> + struct dma_chan *chan;
>> +
>> + dev_dbg(i2c_dev->dev, "starting DMA for length: %zu\n", len);
>> + reinit_completion(&i2c_dev->dma_complete);
>> + dir = i2c_dev->msg_read ? DMA_DEV_TO_MEM : DMA_MEM_TO_DEV;
>> + chan = i2c_dev->msg_read ? i2c_dev->rx_dma_chan : i2c_dev->tx_dma_chan;
>> + dma_desc = dmaengine_prep_slave_single(chan, i2c_dev->dma_phys,
>> + len, dir, DMA_PREP_INTERRUPT |
>> + DMA_CTRL_ACK);
>> + if (!dma_desc) {
>> + dev_err(i2c_dev->dev, "failed to get DMA descriptor\n");
>> + return -EIO;
>>
>> Returning the -EIO is technically incorrect because there is no hardware
>> failure here. The dmaengine_prep_slave_single() merely allocates the DMA
>> descriptor, hence it should be either -EINVAL (preferably) or at least
>> -ENOMEM.
>>
>> Oh, another important moment is that physically contiguous dma_buf
>> allocation isn't guaranteed by the DMA API. This may become a problem for
>> T186+ that can transfer up to 64K. We need to enforce the
>> contiguous-allocation requirement by using >
>> dma_alloc_attrs(DMA_ATTR_FORCE_CONTIGUOUS) instead of the
>> dma_alloc_coherent(), please see my other comment below.
>
> Failure returned from dma submit will be returned by i2c xfer message and
> using EIO here as dmaengine_prep_slave_single can result in multiple failures
> (invalid segment length, failing dma desc allocation, dma length/memory
> check, no available dma sg-reg)
> As per I2C fault codes, EIO can be used indicating when something went wrong
> during performing IO operation.
Sounds wrong, IO failure means that error comes from hardware. In this case it
comes from software.
> Using EINVAL doesn’t suit if failure is from allocation and using ENOMEM
> doesn’t suit if failure is due to length/memory, segment length check.
-EINVAL is the universal error code, suitable for such cases. We are expecting
that dma_desc is not NULL, and it is the invalid value from our perspective if
dma_desc is NULL.
> Will use FORCE_CONTIGUOUS.
>
>
>
>>> + dma_buf = dma_alloc_coherent(i2c_dev->dev, i2c_dev->dma_buf_size,
>>> + &dma_phys, GFP_KERNEL | __GFP_NOWARN);
>>
>> Please use dma_alloc_attrs() instead of dma_alloc_coherent() because it
>> could return a sparse allocation. This is especially troublesome > for ARM64
>> platforms because IOMMU_DOMAIN_DMA is used by default there. We need to
>> explicitly ask for the contiguous allocation:
>>
>>
>> dma_buf = dma_alloc_attrs(i2c_dev->dev, i2c_dev->dma_buf_size,
>> &dma_phys, GFP_KERNEL,
>> DMA_ATTR_FORCE_CONTIGUOUS |
>> DMA_ATTR_NO_WARN);
>>
> Will switch to use dma_alloc_attrs with CONTIGUOUS
>>
>>
>>
>>
>> CHECK: multiple assignments should be avoided
>> #763: FILE: drivers/i2c/busses/i2c-tegra.c:993:
>> + i2c_dev->is_curr_dma_xfer = dma = false
>>
>> CHECK: Unnecessary parentheses around 'i2c_dev->msg_err == I2C_ERR_NONE'
>> #877: FILE: drivers/i2c/busses/i2c-tegra.c:1105:
>> + if (i2c_dev->msg_read && (i2c_dev->msg_err ==
>> + I2C_ERR_NONE)) {
>> CHECK: Alignment should match open parenthesis
>> #883: FILE: drivers/i2c/busses/i2c-tegra.c:1111:
>>
>>
> Somehow Checkscript didn’t showed this either when I ran. Probably due to
> diff script versions. I am using the one from 5.0-rc4.
>
Please use the "--strict" flag for checkpatch, it will show this warning.