提交 55a042b3 编写于 作者: D Dmitry Osipenko 提交者: Thierry Reding

soc/tegra: fuse: Fix reading registers using DMA on Tegra20

FUSE driver doesn't configure DMA channel properly, because of it DMA
transfer is never issued and tegra20_fuse_read() always return 0x0.
Signed-off-by: NDmitry Osipenko <digetx@gmail.com>
Acked-by: NJon Hunter <jonathanh@nvidia.com>
Signed-off-by: NThierry Reding <treding@nvidia.com>
上级 c641ec6e
...@@ -135,6 +135,7 @@ static int tegra_fuse_probe(struct platform_device *pdev) ...@@ -135,6 +135,7 @@ static int tegra_fuse_probe(struct platform_device *pdev)
/* take over the memory region from the early initialization */ /* take over the memory region from the early initialization */
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
fuse->phys = res->start;
fuse->base = devm_ioremap_resource(&pdev->dev, res); fuse->base = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(fuse->base)) if (IS_ERR(fuse->base))
return PTR_ERR(fuse->base); return PTR_ERR(fuse->base);
......
...@@ -59,7 +59,7 @@ static u32 tegra20_fuse_read(struct tegra_fuse *fuse, unsigned int offset) ...@@ -59,7 +59,7 @@ static u32 tegra20_fuse_read(struct tegra_fuse *fuse, unsigned int offset)
mutex_lock(&fuse->apbdma.lock); mutex_lock(&fuse->apbdma.lock);
fuse->apbdma.config.src_addr = fuse->apbdma.phys + FUSE_BEGIN + offset; fuse->apbdma.config.src_addr = fuse->phys + FUSE_BEGIN + offset;
err = dmaengine_slave_config(fuse->apbdma.chan, &fuse->apbdma.config); err = dmaengine_slave_config(fuse->apbdma.chan, &fuse->apbdma.config);
if (err) if (err)
...@@ -119,6 +119,8 @@ static int tegra20_fuse_probe(struct tegra_fuse *fuse) ...@@ -119,6 +119,8 @@ static int tegra20_fuse_probe(struct tegra_fuse *fuse)
fuse->apbdma.config.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; fuse->apbdma.config.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
fuse->apbdma.config.src_maxburst = 1; fuse->apbdma.config.src_maxburst = 1;
fuse->apbdma.config.dst_maxburst = 1; fuse->apbdma.config.dst_maxburst = 1;
fuse->apbdma.config.direction = DMA_DEV_TO_MEM;
fuse->apbdma.config.device_fc = false;
init_completion(&fuse->apbdma.wait); init_completion(&fuse->apbdma.wait);
mutex_init(&fuse->apbdma.lock); mutex_init(&fuse->apbdma.lock);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册