diff options
Diffstat (limited to 'drivers/soc/qcom/qcom-geni-se.c')
| -rw-r--r-- | drivers/soc/qcom/qcom-geni-se.c | 30 | 
1 files changed, 28 insertions, 2 deletions
diff --git a/drivers/soc/qcom/qcom-geni-se.c b/drivers/soc/qcom/qcom-geni-se.c index 5bdfb1565c14..7d649d2cf31e 100644 --- a/drivers/soc/qcom/qcom-geni-se.c +++ b/drivers/soc/qcom/qcom-geni-se.c @@ -104,7 +104,6 @@ static const char * const icc_path_names[] = {"qup-core", "qup-config",  #define GENI_OUTPUT_CTRL		0x24  #define GENI_CGC_CTRL			0x28  #define GENI_CLK_CTRL_RO		0x60 -#define GENI_IF_DISABLE_RO		0x64  #define GENI_FW_S_REVISION_RO		0x6c  #define SE_GENI_BYTE_GRAN		0x254  #define SE_GENI_TX_PACKING_CFG0		0x260 @@ -322,6 +321,30 @@ static void geni_se_select_dma_mode(struct geni_se *se)  		writel_relaxed(val, se->base + SE_GENI_DMA_MODE_EN);  } +static void geni_se_select_gpi_mode(struct geni_se *se) +{ +	u32 val; + +	geni_se_irq_clear(se); + +	writel(0, se->base + SE_IRQ_EN); + +	val = readl(se->base + SE_GENI_S_IRQ_EN); +	val &= ~S_CMD_DONE_EN; +	writel(val, se->base + SE_GENI_S_IRQ_EN); + +	val = readl(se->base + SE_GENI_M_IRQ_EN); +	val &= ~(M_CMD_DONE_EN | M_TX_FIFO_WATERMARK_EN | +		 M_RX_FIFO_WATERMARK_EN | M_RX_FIFO_LAST_EN); +	writel(val, se->base + SE_GENI_M_IRQ_EN); + +	writel(GENI_DMA_MODE_EN, se->base + SE_GENI_DMA_MODE_EN); + +	val = readl(se->base + SE_GSI_EVENT_EN); +	val |= (DMA_RX_EVENT_EN | DMA_TX_EVENT_EN | GENI_M_EVENT_EN | GENI_S_EVENT_EN); +	writel(val, se->base + SE_GSI_EVENT_EN); +} +  /**   * geni_se_select_mode() - Select the serial engine transfer mode   * @se:		Pointer to the concerned serial engine. @@ -329,7 +352,7 @@ static void geni_se_select_dma_mode(struct geni_se *se)   */  void geni_se_select_mode(struct geni_se *se, enum geni_se_xfer_mode mode)  { -	WARN_ON(mode != GENI_SE_FIFO && mode != GENI_SE_DMA); +	WARN_ON(mode != GENI_SE_FIFO && mode != GENI_SE_DMA && mode != GENI_GPI_DMA);  	switch (mode) {  	case GENI_SE_FIFO: @@ -338,6 +361,9 @@ void geni_se_select_mode(struct geni_se *se, enum geni_se_xfer_mode mode)  	case GENI_SE_DMA:  		geni_se_select_dma_mode(se);  		break; +	case GENI_GPI_DMA: +		geni_se_select_gpi_mode(se); +		break;  	case GENI_SE_INVALID:  	default:  		break;  |