mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 09:11:26 +03:00
gpu: host1x: Update host1x to align with v5.10
Update the host1x driver to Linux v5.10 with the 'Host1x/Tegra UAPI' series [0] applied. This driver is built as an external module for testing and development with upstream Linux kernels. [0] https://patchwork.ozlabs.org/project/linux-tegra/list/?series=215770 Bug 3205478 Change-Id: I32c1a492293ca30dd47d1edf75aa53aa9e74b400 Signed-off-by: Jon Hunter <jonathanh@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2460074 Tested-by: mobile promotions <svcmobile_promotions@nvidia.com> Reviewed-by: Shanker Donthineni <sdonthineni@nvidia.com> Reviewed-by: Mikko Perttunen <mperttunen@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> GVS: Gerrit_Virtual_Submit
This commit is contained in:
committed by
Laxman Dewangan
parent
cc5bcef3f6
commit
9f0b4d74ea
@@ -192,11 +192,9 @@ static unsigned int pin_job(struct host1x *host, struct host1x_job *job)
|
||||
goto unpin;
|
||||
}
|
||||
|
||||
err = dma_map_sg(dev, sgt->sgl, sgt->nents, dir);
|
||||
if (!err) {
|
||||
err = -ENOMEM;
|
||||
err = dma_map_sgtable(dev, sgt, dir, 0);
|
||||
if (err)
|
||||
goto unpin;
|
||||
}
|
||||
|
||||
job->unpins[job->num_unpins].dev = dev;
|
||||
job->unpins[job->num_unpins].dir = dir;
|
||||
@@ -253,7 +251,7 @@ static unsigned int pin_job(struct host1x *host, struct host1x_job *job)
|
||||
}
|
||||
|
||||
if (host->domain) {
|
||||
for_each_sg(sgt->sgl, sg, sgt->nents, j)
|
||||
for_each_sgtable_sg(sgt, sg, j)
|
||||
gather_size += sg->length;
|
||||
gather_size = iova_align(&host->iova, gather_size);
|
||||
|
||||
@@ -265,9 +263,9 @@ static unsigned int pin_job(struct host1x *host, struct host1x_job *job)
|
||||
goto put;
|
||||
}
|
||||
|
||||
err = iommu_map_sg(host->domain,
|
||||
err = iommu_map_sgtable(host->domain,
|
||||
iova_dma_addr(&host->iova, alloc),
|
||||
sgt->sgl, sgt->nents, IOMMU_READ);
|
||||
sgt, IOMMU_READ);
|
||||
if (err == 0) {
|
||||
__free_iova(&host->iova, alloc);
|
||||
err = -EINVAL;
|
||||
@@ -277,12 +275,9 @@ static unsigned int pin_job(struct host1x *host, struct host1x_job *job)
|
||||
job->unpins[job->num_unpins].size = gather_size;
|
||||
phys_addr = iova_dma_addr(&host->iova, alloc);
|
||||
} else if (sgt) {
|
||||
err = dma_map_sg(host->dev, sgt->sgl, sgt->nents,
|
||||
DMA_TO_DEVICE);
|
||||
if (!err) {
|
||||
err = -ENOMEM;
|
||||
err = dma_map_sgtable(host->dev, sgt, DMA_TO_DEVICE, 0);
|
||||
if (err)
|
||||
goto put;
|
||||
}
|
||||
|
||||
job->unpins[job->num_unpins].dir = DMA_TO_DEVICE;
|
||||
job->unpins[job->num_unpins].dev = host->dev;
|
||||
@@ -699,8 +694,7 @@ void host1x_job_unpin(struct host1x_job *job)
|
||||
}
|
||||
|
||||
if (unpin->dev && sgt)
|
||||
dma_unmap_sg(unpin->dev, sgt->sgl, sgt->nents,
|
||||
unpin->dir);
|
||||
dma_unmap_sgtable(unpin->dev, sgt, unpin->dir, 0);
|
||||
|
||||
host1x_bo_unpin(dev, unpin->bo, sgt);
|
||||
host1x_bo_put(unpin->bo);
|
||||
|
||||
@@ -293,19 +293,13 @@ int tegra_mipi_disable(struct tegra_mipi_device *dev)
|
||||
}
|
||||
EXPORT_SYMBOL(tegra_mipi_disable);
|
||||
|
||||
int tegra_mipi_wait(struct tegra_mipi_device *device)
|
||||
int tegra_mipi_finish_calibration(struct tegra_mipi_device *device)
|
||||
{
|
||||
struct tegra_mipi *mipi = device->mipi;
|
||||
void __iomem *status_reg = mipi->regs + (MIPI_CAL_STATUS << 2);
|
||||
u32 value;
|
||||
int err;
|
||||
|
||||
err = clk_enable(device->mipi->clk);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
mutex_lock(&device->mipi->lock);
|
||||
|
||||
err = readl_relaxed_poll_timeout(status_reg, value,
|
||||
!(value & MIPI_CAL_STATUS_ACTIVE) &&
|
||||
(value & MIPI_CAL_STATUS_DONE), 50,
|
||||
@@ -315,9 +309,9 @@ int tegra_mipi_wait(struct tegra_mipi_device *device)
|
||||
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL(tegra_mipi_wait);
|
||||
EXPORT_SYMBOL(tegra_mipi_finish_calibration);
|
||||
|
||||
int tegra_mipi_calibrate(struct tegra_mipi_device *device)
|
||||
int tegra_mipi_start_calibration(struct tegra_mipi_device *device)
|
||||
{
|
||||
const struct tegra_mipi_soc *soc = device->mipi->soc;
|
||||
unsigned int i;
|
||||
@@ -381,12 +375,16 @@ int tegra_mipi_calibrate(struct tegra_mipi_device *device)
|
||||
value |= MIPI_CAL_CTRL_START;
|
||||
tegra_mipi_writel(device->mipi, value, MIPI_CAL_CTRL);
|
||||
|
||||
mutex_unlock(&device->mipi->lock);
|
||||
clk_disable(device->mipi->clk);
|
||||
/*
|
||||
* Wait for min 72uS to let calibration logic finish calibration
|
||||
* sequence codes before waiting for pads idle state to apply the
|
||||
* results.
|
||||
*/
|
||||
usleep_range(75, 80);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(tegra_mipi_calibrate);
|
||||
EXPORT_SYMBOL(tegra_mipi_start_calibration);
|
||||
|
||||
static const struct tegra_mipi_pad tegra114_mipi_pads[] = {
|
||||
{ .data = MIPI_CAL_CONFIG_CSIA },
|
||||
|
||||
Reference in New Issue
Block a user