On 11/2/2020 10:19 PM, Dhananjay Phadke wrote: > On Mon, 2 Nov 2020 09:24:32 +0530, Rayagonda Kokatanur wrote: > >> Handle single or multi byte master read request with or without >> repeated start. >> >> Fixes: c245d94ed106 ("i2c: iproc: Add multi byte read-write support for slave mode") >> Signed-off-by: Rayagonda Kokatanur <rayagonda.kokatanur@xxxxxxxxxxxx> >> --- >> drivers/i2c/busses/i2c-bcm-iproc.c | 215 +++++++++++++++++++++++------ >> 1 file changed, 170 insertions(+), 45 deletions(-) >> >> diff --git a/drivers/i2c/busses/i2c-bcm-iproc.c b/drivers/i2c/busses/i2c-bcm-iproc.c >> index 7a235f9f5884..22e04055b447 100644 >> --- a/drivers/i2c/busses/i2c-bcm-iproc.c >> +++ b/drivers/i2c/busses/i2c-bcm-iproc.c >> @@ -160,6 +160,11 @@ >> >> #define IE_S_ALL_INTERRUPT_SHIFT 21 >> #define IE_S_ALL_INTERRUPT_MASK 0x3f >> +/* >> + * It takes ~18us to reading 10bytes of data, hence to keep tasklet >> + * running for less time, max slave read per tasklet is set to 10 bytes. >> + */ >> +#define MAX_SLAVE_RX_PER_INT 10 >> > > In patch [3/6], you've enabled IS_S_RX_THLD_SHIFT in slave ISR bitmask, > however it's not actually used in processing rx events. > > Instead of hardcoding this threshold here, it's better to add a > device-tree knob for rx threshold, program it in controller and handle > that RX_THLD interrupt. This will give more flexibility to drain the rx > fifo earlier than - > (1) waiting for FIFO_FULL interrupt for transactions > 64B. > (2) waiting for start of read transaction in case of master write-read. The Device Tree is really intended to describe the hardware FIFO size, not watermarks, as those tend to be more of a policy/work load decision. Maybe this is something that can be added as a module parameter, or configurable via ioctl() at some point. -- Florian