i2c: mxs: ensure that DMA buffers are safe for DMA
authorMatthias Schiffer <matthias.schiffer@ew.tq-group.com>
Mon, 13 Feb 2023 15:25:50 +0000 (16:25 +0100)
committerWolfram Sang <wsa@kernel.org>
Thu, 16 Mar 2023 19:47:32 +0000 (20:47 +0100)
commit5190417bdf72c71b65bd9892103c6186816a6e8b
tree6669239b6c8c65d75b6605bb2ae9ce468a0f910c
parent1c7885004567e8951d65a983be095f254dd20bef
i2c: mxs: ensure that DMA buffers are safe for DMA

We found that after commit 9c46929e7989
("ARM: implement THREAD_INFO_IN_TASK for uniprocessor systems"), the
PCF85063 RTC driver stopped working on i.MX28 due to regmap_bulk_read()
reading bogus data into a stack buffer. This is caused by the i2c-mxs
driver using DMA transfers even for messages without the I2C_M_DMA_SAFE
flag, and the aforementioned commit enabling vmapped stacks.

As the MXS I2C controller requires DMA for reads of >4 bytes, DMA can't be
disabled, so the issue is fixed by using i2c_get_dma_safe_msg_buf() to
create a bounce buffer when needed.

Fixes: 9c46929e7989 ("ARM: implement THREAD_INFO_IN_TASK for uniprocessor systems")
Signed-off-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
Signed-off-by: Wolfram Sang <wsa@kernel.org>
drivers/i2c/busses/i2c-mxs.c