mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 17:25:35 +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;
|
goto unpin;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = dma_map_sg(dev, sgt->sgl, sgt->nents, dir);
|
err = dma_map_sgtable(dev, sgt, dir, 0);
|
||||||
if (!err) {
|
if (err)
|
||||||
err = -ENOMEM;
|
|
||||||
goto unpin;
|
goto unpin;
|
||||||
}
|
|
||||||
|
|
||||||
job->unpins[job->num_unpins].dev = dev;
|
job->unpins[job->num_unpins].dev = dev;
|
||||||
job->unpins[job->num_unpins].dir = dir;
|
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) {
|
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 += sg->length;
|
||||||
gather_size = iova_align(&host->iova, gather_size);
|
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;
|
goto put;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = iommu_map_sg(host->domain,
|
err = iommu_map_sgtable(host->domain,
|
||||||
iova_dma_addr(&host->iova, alloc),
|
iova_dma_addr(&host->iova, alloc),
|
||||||
sgt->sgl, sgt->nents, IOMMU_READ);
|
sgt, IOMMU_READ);
|
||||||
if (err == 0) {
|
if (err == 0) {
|
||||||
__free_iova(&host->iova, alloc);
|
__free_iova(&host->iova, alloc);
|
||||||
err = -EINVAL;
|
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;
|
job->unpins[job->num_unpins].size = gather_size;
|
||||||
phys_addr = iova_dma_addr(&host->iova, alloc);
|
phys_addr = iova_dma_addr(&host->iova, alloc);
|
||||||
} else if (sgt) {
|
} else if (sgt) {
|
||||||
err = dma_map_sg(host->dev, sgt->sgl, sgt->nents,
|
err = dma_map_sgtable(host->dev, sgt, DMA_TO_DEVICE, 0);
|
||||||
DMA_TO_DEVICE);
|
if (err)
|
||||||
if (!err) {
|
|
||||||
err = -ENOMEM;
|
|
||||||
goto put;
|
goto put;
|
||||||
}
|
|
||||||
|
|
||||||
job->unpins[job->num_unpins].dir = DMA_TO_DEVICE;
|
job->unpins[job->num_unpins].dir = DMA_TO_DEVICE;
|
||||||
job->unpins[job->num_unpins].dev = host->dev;
|
job->unpins[job->num_unpins].dev = host->dev;
|
||||||
@@ -699,8 +694,7 @@ void host1x_job_unpin(struct host1x_job *job)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (unpin->dev && sgt)
|
if (unpin->dev && sgt)
|
||||||
dma_unmap_sg(unpin->dev, sgt->sgl, sgt->nents,
|
dma_unmap_sgtable(unpin->dev, sgt, unpin->dir, 0);
|
||||||
unpin->dir);
|
|
||||||
|
|
||||||
host1x_bo_unpin(dev, unpin->bo, sgt);
|
host1x_bo_unpin(dev, unpin->bo, sgt);
|
||||||
host1x_bo_put(unpin->bo);
|
host1x_bo_put(unpin->bo);
|
||||||
|
|||||||
@@ -293,19 +293,13 @@ int tegra_mipi_disable(struct tegra_mipi_device *dev)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(tegra_mipi_disable);
|
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;
|
struct tegra_mipi *mipi = device->mipi;
|
||||||
void __iomem *status_reg = mipi->regs + (MIPI_CAL_STATUS << 2);
|
void __iomem *status_reg = mipi->regs + (MIPI_CAL_STATUS << 2);
|
||||||
u32 value;
|
u32 value;
|
||||||
int err;
|
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,
|
err = readl_relaxed_poll_timeout(status_reg, value,
|
||||||
!(value & MIPI_CAL_STATUS_ACTIVE) &&
|
!(value & MIPI_CAL_STATUS_ACTIVE) &&
|
||||||
(value & MIPI_CAL_STATUS_DONE), 50,
|
(value & MIPI_CAL_STATUS_DONE), 50,
|
||||||
@@ -315,9 +309,9 @@ int tegra_mipi_wait(struct tegra_mipi_device *device)
|
|||||||
|
|
||||||
return err;
|
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;
|
const struct tegra_mipi_soc *soc = device->mipi->soc;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
@@ -381,12 +375,16 @@ int tegra_mipi_calibrate(struct tegra_mipi_device *device)
|
|||||||
value |= MIPI_CAL_CTRL_START;
|
value |= MIPI_CAL_CTRL_START;
|
||||||
tegra_mipi_writel(device->mipi, value, MIPI_CAL_CTRL);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(tegra_mipi_calibrate);
|
EXPORT_SYMBOL(tegra_mipi_start_calibration);
|
||||||
|
|
||||||
static const struct tegra_mipi_pad tegra114_mipi_pads[] = {
|
static const struct tegra_mipi_pad tegra114_mipi_pads[] = {
|
||||||
{ .data = MIPI_CAL_CONFIG_CSIA },
|
{ .data = MIPI_CAL_CONFIG_CSIA },
|
||||||
|
|||||||
Reference in New Issue
Block a user