On Mon, Apr 27, 2020 at 02:01:29PM +0800, Dilip Kota wrote:Sure, i will do as separate patch.
On 4/24/2020 7:25 PM, Mark Brown wrote:The single line change to fix the offset sounds like an especially good
On Fri, Apr 24, 2020 at 06:42:30PM +0800, Dilip Kota wrote:While preparing the patches, i got puzzled to go with separate patches (for
Synchronize tx, rx and error interrupts by registering to theThis sounds like at least three different changes mixed together in one
same interrupt handler. Interrupt handler will recognize and process
the appropriate interrupt on the basis of interrupt status register.
Also, establish synchronization between the interrupt handler and
transfer operation by taking the locks and registering the interrupt
handler as thread IRQ which avoids the bottom half.
Fixes the wrongly populated interrupt register offsets too.
commit, it makes it quite hard to tell what's going on. If nothing else
the conversion from a workqueue to threaded interrupts should probably
be split out from merging the interrupts.
threaded interrupts, unified interrupt handler and fixing the register
offset) or as a single patch!!.
Finally i choose to go with single patch, because establishing
synchronization is the major reason for this change, for that reason
threaded interrupts and unified interrupts changes are done. And the fixing
offset is a single line change, so included in this patch itself. And, on a
lighter note, the whole patch is coming under 45 lines of code changes.
Please let me know your view.
candidate for splitting out as a separate patch. It's not really about
the number of lines but rather complexity.
Yes, taking mutex and defining in the single ISR will be better i feel while adding support for multiple SoCs with different number of interrupt lines.
So this is another separate change and TBH it doesn't seem like a hugelantiq_ssc_err_interrupt() getting called, only if LTQ_SPI_IRNEN_E is set in-static irqreturn_t lantiq_ssc_err_interrupt(int irq, void *data)Why drop this?
+static irqreturn_t lantiq_ssc_err_interrupt(struct lantiq_ssc_spi *spi)
{
- struct lantiq_ssc_spi *spi = data;
u32 stat = lantiq_ssc_readl(spi, LTQ_SPI_STAT);
- if (!(stat & LTQ_SPI_STAT_ERRORS))
- return IRQ_NONE;
-
the interrupt status register.
Once the 'LTQ_SPI_IRNEN_E' bit is set, there is no chance of all error bits
being unset in the SPI_STAT register, so the 'if condition' will never be
successful. Hence dropped it.
win in that it's still potentially adding a bit of robustness.
Does the mutex not do this regardless of how the interrupt handlers areIt's not clear to me that it's a benefit to combine all the interruptsLets take a case where Tx/Rx transfer interrupt got triggered and followed
unconditionally - obviously where they're shared we need to but could
that be accomplished with IRQF_SHARED and even if it can't it seems like
something conditional would be better.
by error interrupt(before finishing the tx/rx interrupt execution) which is
very less likely to occur, unified interrupt handler establishes
synchronization.
Comparatively, unified interrupt handler is better for adding support to the
latest SoCs on which SPI have single interrupt line for tx,rx and errors.
On basis of these two points i felt to go with unified interrupt handler.
wired up?