Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d826c0a7 authored by Vipin Deep Kaur's avatar Vipin Deep Kaur Committed by Gerrit - the friendly Code Review server
Browse files

platform: qcom-geni-se: Disable CMD_DONE in DMA mode for I2C and SPI



For I2C and SPI, CMD_DONE should be enabled only in fifo mode for
transfer completion. Disable CMD_DONE for DMA mode and cancel cmd
to avoid race condition between cmd_done, dma_done and cmd_done,
cancel_irq.

Change-Id: I89e227d4b43cd93c27c3d536c3615dddc693ddb7
Signed-off-by: default avatarVipin Deep Kaur <vkaur@codeaurora.org>
parent 49f04345
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -357,9 +357,12 @@ static int geni_se_select_dma_mode(void __iomem *base)
	geni_write_reg(0xFFFFFFFF, base, SE_IRQ_EN);

	common_geni_m_irq_en = geni_read_reg(base, SE_GENI_M_IRQ_EN);
	if (proto != UART)
	if (proto != UART) {
		common_geni_m_irq_en &=
			~(M_TX_FIFO_WATERMARK_EN | M_RX_FIFO_WATERMARK_EN);
		if (proto != I3C)
			common_geni_m_irq_en &= ~M_CMD_DONE_EN;
	}

	geni_write_reg(common_geni_m_irq_en, base, SE_GENI_M_IRQ_EN);
	geni_dma_mode = geni_read_reg(base, SE_GENI_DMA_MODE_EN);
@@ -478,6 +481,14 @@ EXPORT_SYMBOL(geni_setup_s_cmd);
 */
void geni_cancel_m_cmd(void __iomem *base)
{
	unsigned int common_geni_m_irq_en;
	int proto = get_se_proto(base);

	if (proto != UART && proto != I3C) {
		common_geni_m_irq_en = geni_read_reg(base, SE_GENI_M_IRQ_EN);
		common_geni_m_irq_en &= ~M_CMD_DONE_EN;
		geni_write_reg(common_geni_m_irq_en, base, SE_GENI_M_IRQ_EN);
	}
	geni_write_reg(M_GENI_CMD_CANCEL, base, SE_GENI_M_CMD_CTRL_REG);
}
EXPORT_SYMBOL(geni_cancel_m_cmd);