Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp2524389ybi; Mon, 17 Jun 2019 06:22:00 -0700 (PDT) X-Google-Smtp-Source: APXvYqxmrLacFhDmawa49XfCM9O5AaMhOuSRXQDRYUvWnQwTDqxkS1rS3/G5itiw2uOpw1PqIC7/ X-Received: by 2002:a65:5241:: with SMTP id q1mr45737162pgp.298.1560777719855; Mon, 17 Jun 2019 06:21:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560777719; cv=none; d=google.com; s=arc-20160816; b=T7EZY7ym3AyVzlIEw35cJEO+Hv5pH8UMqpOdvUwMz3GUX/sD/EOvx2kfLY9mqnEQAT dYDiDk0kjlPl2wJtXMqkc+9SsDFqV3K4ztrwWLwY2AJ+pcpdzTwPa3Zvd6smoRy6UpON rgTBtaGEZZQM6jjwrysgyO22E4ng+RTrR/+cXUbQwBZYMNfqwfyspROUPo0nxd4JMIjd ejxymPplBUuaTOv7As7miElSldErAJznGF4tLr88AB/gXufl2FM1RMedT0D1XYYkSpad mZlGd16S+Yc+U7ufs5lmcL7cc4FykZBwgdTjmNeY9kERoSUeNtvA0ahCUQAIGdAFMT5x Pz3Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=HhaMuqxi1qoqwYTKvote6O6SNf7OfSJjJ7qV/qAB16w=; b=lfk42OIPLZaeOG/zPlXOLMrvZ/tAlBMDtxK8u5m4vjBTDDwhGT4/Tsa7agG1DhuQIE 3PUbyVDtTOjCu/rr8OkrSvfWK/JlXbFhI5CpIeAyNkql6Ohz7vY1Dg9qTI4887aGMkjb qWwZidvLX9Qs4BqZHSj5LVU69GzByEILQsfUjC714zEw9EnfszqcNZJFfawivTxhIPWH QUAiTAIvl49YfeHLkuGz7ubDSbhDmIZ3/1CBUBUgF5LLGMbcT7vNCyS1Bj6Evlzmw8My iiQ53Qbs6IHogZf4fjSBDoVJhC/7E6745lTv4Z06Vd1dgzixrOliDIs/xxMN87/QpGOs HC6Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v14si10293769pff.28.2019.06.17.06.21.43; Mon, 17 Jun 2019 06:21:59 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727377AbfFQNTt (ORCPT + 99 others); Mon, 17 Jun 2019 09:19:49 -0400 Received: from mout.kundenserver.de ([212.227.126.134]:49813 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725884AbfFQNTt (ORCPT ); Mon, 17 Jun 2019 09:19:49 -0400 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue012 [212.227.15.129]) with ESMTPA (Nemesis) id 1Mdf3x-1iBeCA3czx-00ZiHD; Mon, 17 Jun 2019 15:19:23 +0200 From: Arnd Bergmann To: Gustavo Pimentel , Vinod Koul Cc: Arnd Bergmann , Dan Williams , Andy Shevchenko , Russell King , Joao Pinto , dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] dmaengine: dw-edma: fix __iomem type confusion Date: Mon, 17 Jun 2019 15:18:43 +0200 Message-Id: <20190617131918.2518727-1-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Provags-ID: V03:K1:IJ2cWiplBAEydoX2Yb9hQnFL2P7ah7TKeoq1ZZi7L2xaKR8Odcu Bm+yhHmN7ihZ7UBIKGNeUi/emcpzj+lx+t8ahndzHW2U9HzEVQF71LPio13NXYG0eX0HCP9 Jl84HR+inURxpLIVwOj5r5j3yUHJxIRUBdCmiwuGx7X81RQtOOuWJGiV0P2TiL6SU8DiZjM +QnvtGm4l2suAXU2NZwog== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:v6MR+sdO3jI=:qd7jYXKTBWDmTSyhKRxl/E jxzoSIq/dXj68hWIbhedWT25QPFR7WnzxZV2KuedwcT3brgy7ArrrdUUYC9ruhAnqZnY6XxdJ MqvsqmyAcro4LE976+kcwi2Pvgn/kc79wuBwiC05L6a8tQWTuazcvpUZvri9TH1yf83bkFwwv 4Eoiz/fUxNAH6tQ4mF98s8bzFl3O1GgxHepSxs8lBLmjAHZLoyLos8y2+PDA9TzVRNych2bCO 6E0q3l3o+oghDJ9DiK7UEjAp2owts0SI1F50KpefSH85EjdhERYzDBN5lJmn4OsZPyFGea5Qm tNsokGBGM12wQIa2JxErKVOw1SehQx3PYbqiozYwzaK+UXMhPPza8c9lXhRZWUXrOwnCzeHvf 49k/G0CtMZZiAwB7iQk/7fcTTfBMubIcbLBtYkwUMOp6wphrx2OP3rc62jRQzSfdgc6apHF5D yvb4kH8kwCwtsjKpeJkv8b4d6VrwWMpI/u8HCLwisu7u//hZZMXHhzVTu/Zvu6sIzGw2K9cKW xHd/rQ+lq6s1mFJi01PNjfkvnzqgPdM5KrCRzuY0c4+d0XH5QffSjVnGAN90d3e2VHc8EGRh4 SUuUx+GCfsxpuYvTJP95Q91NB/CDXGf2vegyW3cvZarlSjj1aOxe9mFgq8HcKoa7EDG0RzWLM nxUV/Fdt31n/hbfam3DhpWrhQW0OwfW58XII2MsCnBcHMGwP6CpER6D05MleG8HGlGgnow5ci Q0h4FQpVokDTZ5XXaizBPvdM4JdHZ/IZtkSXFQ== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The new driver mixes up dma_addr_t and __iomem pointers, which results in warnings on some 32-bit architectures, like: drivers/dma/dw-edma/dw-edma-v0-core.c: In function '__dw_regs': drivers/dma/dw-edma/dw-edma-v0-core.c:28:9: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast] return (struct dw_edma_v0_regs __iomem *)dw->rg_region.vaddr; Make it use __iomem pointers consistently here, and avoid using dma_addr_t for __iomem tokens altogether. A small complication here is the debugfs code, which passes an __iomem token as the private data for debugfs files, requiring the use of extra __force. Fixes: 7e4b8a4fbe2c ("dmaengine: Add Synopsys eDMA IP version 0 support") Signed-off-by: Arnd Bergmann --- drivers/dma/dw-edma/dw-edma-core.h | 2 +- drivers/dma/dw-edma/dw-edma-pcie.c | 18 ++++++++-------- drivers/dma/dw-edma/dw-edma-v0-core.c | 10 ++++----- drivers/dma/dw-edma/dw-edma-v0-debugfs.c | 27 ++++++++++++------------ 4 files changed, 29 insertions(+), 28 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-edma-core.h index b6cc90cbc9dc..d03a6ad263bd 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -50,7 +50,7 @@ struct dw_edma_burst { struct dw_edma_region { phys_addr_t paddr; - dma_addr_t vaddr; + void __iomem * vaddr; size_t sz; }; diff --git a/drivers/dma/dw-edma/dw-edma-pcie.c b/drivers/dma/dw-edma/dw-edma-pcie.c index 4c96e1c948f2..dc85f55e1bb8 100644 --- a/drivers/dma/dw-edma/dw-edma-pcie.c +++ b/drivers/dma/dw-edma/dw-edma-pcie.c @@ -130,19 +130,19 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev, chip->id = pdev->devfn; chip->irq = pdev->irq; - dw->rg_region.vaddr = (dma_addr_t)pcim_iomap_table(pdev)[pdata->rg_bar]; + dw->rg_region.vaddr = pcim_iomap_table(pdev)[pdata->rg_bar]; dw->rg_region.vaddr += pdata->rg_off; dw->rg_region.paddr = pdev->resource[pdata->rg_bar].start; dw->rg_region.paddr += pdata->rg_off; dw->rg_region.sz = pdata->rg_sz; - dw->ll_region.vaddr = (dma_addr_t)pcim_iomap_table(pdev)[pdata->ll_bar]; + dw->ll_region.vaddr = pcim_iomap_table(pdev)[pdata->ll_bar]; dw->ll_region.vaddr += pdata->ll_off; dw->ll_region.paddr = pdev->resource[pdata->ll_bar].start; dw->ll_region.paddr += pdata->ll_off; dw->ll_region.sz = pdata->ll_sz; - dw->dt_region.vaddr = (dma_addr_t)pcim_iomap_table(pdev)[pdata->dt_bar]; + dw->dt_region.vaddr = pcim_iomap_table(pdev)[pdata->dt_bar]; dw->dt_region.vaddr += pdata->dt_off; dw->dt_region.paddr = pdev->resource[pdata->dt_bar].start; dw->dt_region.paddr += pdata->dt_off; @@ -158,17 +158,17 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev, pci_dbg(pdev, "Mode:\t%s\n", dw->mode == EDMA_MODE_LEGACY ? "Legacy" : "Unroll"); - pci_dbg(pdev, "Registers:\tBAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%pa, p=%pa)\n", + pci_dbg(pdev, "Registers:\tBAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n", pdata->rg_bar, pdata->rg_off, pdata->rg_sz, - &dw->rg_region.vaddr, &dw->rg_region.paddr); + dw->rg_region.vaddr, &dw->rg_region.paddr); - pci_dbg(pdev, "L. List:\tBAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%pa, p=%pa)\n", + pci_dbg(pdev, "L. List:\tBAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n", pdata->ll_bar, pdata->ll_off, pdata->ll_sz, - &dw->ll_region.vaddr, &dw->ll_region.paddr); + dw->ll_region.vaddr, &dw->ll_region.paddr); - pci_dbg(pdev, "Data:\tBAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%pa, p=%pa)\n", + pci_dbg(pdev, "Data:\tBAR=%u, off=0x%.8lx, sz=0x%zx bytes, addr(v=%p, p=%pa)\n", pdata->dt_bar, pdata->dt_off, pdata->dt_sz, - &dw->dt_region.vaddr, &dw->dt_region.paddr); + dw->dt_region.vaddr, &dw->dt_region.paddr); pci_dbg(pdev, "Nr. IRQs:\t%u\n", dw->nr_irqs); diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw-edma-v0-core.c index 8cafd51ff9ec..d670ebcc37b3 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -25,7 +25,7 @@ enum dw_edma_control { static inline struct dw_edma_v0_regs __iomem *__dw_regs(struct dw_edma *dw) { - return (struct dw_edma_v0_regs __iomem *)dw->rg_region.vaddr; + return dw->rg_region.vaddr; } #define SET(dw, name, value) \ @@ -192,13 +192,13 @@ u32 dw_edma_v0_core_status_abort_int(struct dw_edma *dw, enum dw_edma_dir dir) static void dw_edma_v0_core_write_chunk(struct dw_edma_chunk *chunk) { struct dw_edma_burst *child; - struct dw_edma_v0_lli *lli; - struct dw_edma_v0_llp *llp; + struct dw_edma_v0_lli __iomem *lli; + struct dw_edma_v0_llp __iomem *llp; u32 control = 0, i = 0; uintptr_t sar, dar, addr; int j; - lli = (struct dw_edma_v0_lli *)chunk->ll_region.vaddr; + lli = chunk->ll_region.vaddr; if (chunk->cb) control = DW_EDMA_V0_CB; @@ -224,7 +224,7 @@ static void dw_edma_v0_core_write_chunk(struct dw_edma_chunk *chunk) i++; } - llp = (struct dw_edma_v0_llp *)&lli[i]; + llp = (void __iomem *)&lli[i]; control = DW_EDMA_V0_LLP | DW_EDMA_V0_TCB; if (!chunk->cb) control |= DW_EDMA_V0_CB; diff --git a/drivers/dma/dw-edma/dw-edma-v0-debugfs.c b/drivers/dma/dw-edma/dw-edma-v0-debugfs.c index 5728b6fe938c..42739508c0d8 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-debugfs.c +++ b/drivers/dma/dw-edma/dw-edma-v0-debugfs.c @@ -14,7 +14,7 @@ #include "dw-edma-core.h" #define REGS_ADDR(name) \ - ((dma_addr_t *)®s->name) + ((void __force *)®s->name) #define REGISTER(name) \ { #name, REGS_ADDR(name) } @@ -40,11 +40,11 @@ static struct dentry *base_dir; static struct dw_edma *dw; -static struct dw_edma_v0_regs *regs; +static struct dw_edma_v0_regs __iomem *regs; static struct { - void *start; - void *end; + void __iomem *start; + void __iomem *end; } lim[2][EDMA_V0_MAX_NR_CH]; struct debugfs_entries { @@ -54,22 +54,23 @@ struct debugfs_entries { static int dw_edma_debugfs_u32_get(void *data, u64 *val) { + void __iomem *reg = (void __force __iomem *)data; if (dw->mode == EDMA_MODE_LEGACY && - data >= (void *)®s->type.legacy.ch) { - void *ptr = (void *)®s->type.legacy.ch; + reg >= (void __iomem *)®s->type.legacy.ch) { + void __iomem *ptr = ®s->type.legacy.ch; u32 viewport_sel = 0; unsigned long flags; u16 ch; for (ch = 0; ch < dw->wr_ch_cnt; ch++) - if (lim[0][ch].start >= data && data < lim[0][ch].end) { - ptr += (data - lim[0][ch].start); + if (lim[0][ch].start >= reg && reg < lim[0][ch].end) { + ptr += (reg - lim[0][ch].start); goto legacy_sel_wr; } for (ch = 0; ch < dw->rd_ch_cnt; ch++) - if (lim[1][ch].start >= data && data < lim[1][ch].end) { - ptr += (data - lim[1][ch].start); + if (lim[1][ch].start >= reg && reg < lim[1][ch].end) { + ptr += (reg - lim[1][ch].start); goto legacy_sel_rd; } @@ -86,7 +87,7 @@ static int dw_edma_debugfs_u32_get(void *data, u64 *val) raw_spin_unlock_irqrestore(&dw->lock, flags); } else { - *val = readl(data); + *val = readl(reg); } return 0; @@ -105,7 +106,7 @@ static void dw_edma_debugfs_create_x32(const struct debugfs_entries entries[], } } -static void dw_edma_debugfs_regs_ch(struct dw_edma_v0_ch_regs *regs, +static void dw_edma_debugfs_regs_ch(struct dw_edma_v0_ch_regs __iomem *regs, struct dentry *dir) { int nr_entries; @@ -288,7 +289,7 @@ void dw_edma_v0_debugfs_on(struct dw_edma_chip *chip) if (!dw) return; - regs = (struct dw_edma_v0_regs *)dw->rg_region.vaddr; + regs = dw->rg_region.vaddr; if (!regs) return; -- 2.20.0