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

Commit a6326762 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "spi: spi-msm-geni: Add support in SPI driver for Trusted VM"

parents df78d110 25819e2d
Loading
Loading
Loading
Loading
+85 −62
Original line number Diff line number Diff line
@@ -163,6 +163,7 @@ struct spi_geni_master {
	bool cmd_done;
	bool set_miso_sampling;
	u32 miso_sampling_ctrl_val;
	bool is_le_vm;	/* LE VM usecase */
};

static struct spi_master *get_spi_master(struct device *dev)
@@ -1510,6 +1511,19 @@ static int spi_geni_probe(struct platform_device *pdev)
		goto spi_geni_probe_err;
	}
	geni_mas->wrapper_dev = &wrapper_pdev->dev;

	if (of_property_read_bool(pdev->dev.of_node, "qcom,le-vm")) {
		geni_mas->is_le_vm = true;
		dev_info(&pdev->dev, "LE-VM usecase\n");
	}

	/*
	 * For LE, clocks, gpio and icb voting will be provided by
	 * by LA. The SPI operates in GSI mode only for LE usecase,
	 * se irq not required. Below properties will not be present
	 * in SPI LE dt.
	 */
	if (!geni_mas->is_le_vm) {
		geni_mas->spi_rsc.wrapper_dev = &wrapper_pdev->dev;
		ret = geni_se_resources_init(rsc, SPI_CORE2X_VOTE,
					(DEFAULT_SE_CLK * DEFAULT_BUS_WIDTH));
@@ -1552,7 +1566,8 @@ static int spi_geni_probe(struct platform_device *pdev)
		rsc->se_clk = devm_clk_get(&pdev->dev, "se-clk");
		if (IS_ERR(rsc->se_clk)) {
			ret = PTR_ERR(rsc->se_clk);
		dev_err(&pdev->dev, "Err getting SE Core clk %d\n", ret);
			dev_err(&pdev->dev,
			"Err getting SE Core clk %d\n", ret);
			goto spi_geni_probe_err;
		}

@@ -1570,6 +1585,22 @@ static int spi_geni_probe(struct platform_device *pdev)
			goto spi_geni_probe_err;
		}

		geni_mas->irq = platform_get_irq(pdev, 0);
		if (geni_mas->irq < 0) {
			dev_err(&pdev->dev, "Err getting IRQ\n");
			ret = geni_mas->irq;
			goto spi_geni_probe_unmap;
		}

		ret = devm_request_irq(&pdev->dev, geni_mas->irq,
			geni_spi_irq, IRQF_TRIGGER_HIGH, "spi_geni", geni_mas);
		if (ret) {
			dev_err(&pdev->dev, "Request_irq failed:%d: err:%d\n",
					   geni_mas->irq, ret);
			goto spi_geni_probe_unmap;
		}
	}

	ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
	if (ret) {
		ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
@@ -1627,20 +1658,6 @@ static int spi_geni_probe(struct platform_device *pdev)
		goto spi_geni_probe_err;
	}

	geni_mas->irq = platform_get_irq(pdev, 0);
	if (geni_mas->irq < 0) {
		dev_err(&pdev->dev, "Err getting IRQ\n");
		ret = geni_mas->irq;
		goto spi_geni_probe_unmap;
	}
	ret = devm_request_irq(&pdev->dev, geni_mas->irq, geni_spi_irq,
			       IRQF_TRIGGER_HIGH, "spi_geni", geni_mas);
	if (ret) {
		dev_err(&pdev->dev, "Request_irq failed:%d: err:%d\n",
				   geni_mas->irq, ret);
		goto spi_geni_probe_unmap;
	}

	spi->mode_bits = (SPI_CPOL | SPI_CPHA | SPI_LOOP | SPI_CS_HIGH);
	spi->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32);
	spi->num_chipselect = SPI_NUM_CHIPSELECT;
@@ -1694,6 +1711,9 @@ static int spi_geni_runtime_suspend(struct device *dev)
	struct spi_master *spi = get_spi_master(dev);
	struct spi_geni_master *geni_mas = spi_master_get_devdata(spi);

	if (geni_mas->is_le_vm)
		return 0;

	if (geni_mas->shared_ee)
		goto exit_rt_suspend;

@@ -1716,6 +1736,9 @@ static int spi_geni_runtime_resume(struct device *dev)
	struct spi_master *spi = get_spi_master(dev);
	struct spi_geni_master *geni_mas = spi_master_get_devdata(spi);

	if (geni_mas->is_le_vm)
		return 0;

	if (geni_mas->shared_ee)
		goto exit_rt_resume;