Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp785577ybi; Fri, 14 Jun 2019 03:22:07 -0700 (PDT) X-Google-Smtp-Source: APXvYqxwng7QNpFyXowWPb3OSH/SC1CJcd0mCYhPIQEZP9oPFwvwmcsaKdcd6nP/Qiq1w55p7CE0 X-Received: by 2002:aa7:9a92:: with SMTP id w18mr68390354pfi.167.1560507727061; Fri, 14 Jun 2019 03:22:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560507727; cv=none; d=google.com; s=arc-20160816; b=e7h+AC5vyzmFbMdfpAuRWopXjG0snFZf9MK0G6Sowe3WYzuFNeamkd3IOfjay5QQFE IWKfByW7L+8WU8P8hK6dGqB3VmXO6Gecrlvb4gTYB5jlmpcXWb/VeOve0z4am9YuTLo7 /gcqb0hKbX9Nb2IS8wCC3HM+stNs5YCy7/62xa9EqbV2YXOt7+TYsrApRU5J3CFnza2l alueh/Mg6iXsx12yQ7o4Qvn0Atq4iitupmhT7TDq1wIgCZxkzrhwT5YtmW9GTfFHRrfM XGQdBo0+D9StKlJsHB4WxPmeyhYdJ2mnGzGzLfQtrZAy6tSERKo93ZyWykZA3gQvTY+x ONmA== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=j0Cd9GGOgMoKm5X2hxzw/y200bYZ2yfLqG0iku08Mew=; b=a1tIZk9fSj91l2wadJ5P9lMvUNDvtb2XJpkIKA3IUjYrmloqtn1huiinSN1SsbtWDd MJOjKCWjti1b7Lw1gDdaia/T2y/C8GY0XUq7/pF1R061XoLNsUYOleTJutSS4C9jxAkk OvhW9iltIvW6SSKv0sE8IZNqAyFSSGbX6VQRgaKqnwxUYza86bYmzdghLKmeZBt7lAxN 9r1B4KYDE4en1EWj2ui7zy+NeRnwVmKUoNN4tqVlmM0PrD6xBD/R3Fo5Yc9S+2Iuj9VT 5kQgDX3Bt5EbVcNd46GbSMT7dmlJAz2tN8HI+RUZ/yqlPD11hs7UGsf0ZpoEQ3ttoUem 8daQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infradead.org header.s=bombadil.20170209 header.b=hvFLuMu9; 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 q11si2186862pgb.78.2019.06.14.03.21.51; Fri, 14 Jun 2019 03:22:07 -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; dkim=fail header.i=@infradead.org header.s=bombadil.20170209 header.b=hvFLuMu9; 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 S1727453AbfFNKVd (ORCPT + 99 others); Fri, 14 Jun 2019 06:21:33 -0400 Received: from bombadil.infradead.org ([198.137.202.133]:54908 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726255AbfFNKVc (ORCPT ); Fri, 14 Jun 2019 06:21:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20170209; h=Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender :Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From :Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=j0Cd9GGOgMoKm5X2hxzw/y200bYZ2yfLqG0iku08Mew=; b=hvFLuMu9hhbct610IILHoKzB6h 9xiBbW+itujDPTCkxN5lYpQl/q9AHF1Abvj2/AI5HlhercaNwDkiYVsy4lM6cK4IuXQXobmADVMKf Kezq7bSu5LgidPiEPlBBH9gjFFAbjqMHsmtWoowXgWyA9zrwIRU3GbyD/di96btH+rtlmYlCo0oga 98fxzdgw2I21AU9m8XuBwCPwLxNaHatTx0NTbkXJZjUkBtX9Bng11Ut70MnLLSimz35aTVrO49frG klCtnWbDmiofeuA40edY4sl9LWW4wndXGxqOOFg/Tng7wIbWy12ydD/3MHGkPeRh8yZtuorJL25mI JN7mKCBg==; Received: from clnet-p19-102.ikbnet.co.at ([83.175.77.102] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.92 #3 (Red Hat Linux)) id 1hbjKt-0005NQ-RE; Fri, 14 Jun 2019 10:21:32 +0000 From: Christoph Hellwig To: Geert Uytterhoeven , Greg Ungerer Cc: linux-m68k@lists.linux-m68k.org, iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] m68k: use the generic dma coherent remap allocator Date: Fri, 14 Jun 2019 12:21:25 +0200 Message-Id: <20190614102126.8402-2-hch@lst.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190614102126.8402-1-hch@lst.de> References: <20190614102126.8402-1-hch@lst.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This switche to using common code for the DMA allocations, including potential use of the CMA allocator if configure. Also add a comment where the existing behavior seems to be lacking. Signed-off-by: Christoph Hellwig --- arch/m68k/Kconfig | 2 ++ arch/m68k/kernel/dma.c | 59 ++++++++---------------------------------- 2 files changed, 13 insertions(+), 48 deletions(-) diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig index 218e037ef901..2571a8fba4b0 100644 --- a/arch/m68k/Kconfig +++ b/arch/m68k/Kconfig @@ -3,10 +3,12 @@ config M68K bool default y select ARCH_32BIT_OFF_T + select ARCH_HAS_DMA_MMAP_PGPROT if MMU && !COLDFIRE select ARCH_HAS_SYNC_DMA_FOR_DEVICE if HAS_DMA select ARCH_MIGHT_HAVE_PC_PARPORT if ISA select ARCH_NO_COHERENT_DMA_MMAP if !MMU select ARCH_NO_PREEMPT if !COLDFIRE + select DMA_DIRECT_REMAP if MMU && !COLDFIRE select HAVE_IDE select HAVE_AOUT if MMU select HAVE_DEBUG_BUGVERBOSE diff --git a/arch/m68k/kernel/dma.c b/arch/m68k/kernel/dma.c index b4aa853051bd..9c6a350a16d8 100644 --- a/arch/m68k/kernel/dma.c +++ b/arch/m68k/kernel/dma.c @@ -18,57 +18,20 @@ #include #if defined(CONFIG_MMU) && !defined(CONFIG_COLDFIRE) - -void *arch_dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, - gfp_t flag, unsigned long attrs) +pgprot_t arch_dma_mmap_pgprot(struct device *dev, pgprot_t prot, + unsigned long attrs) { - struct page *page, **map; - pgprot_t pgprot; - void *addr; - int i, order; - - pr_debug("dma_alloc_coherent: %d,%x\n", size, flag); - - size = PAGE_ALIGN(size); - order = get_order(size); - - page = alloc_pages(flag | __GFP_ZERO, order); - if (!page) - return NULL; - - *handle = page_to_phys(page); - map = kmalloc(sizeof(struct page *) << order, flag & ~__GFP_DMA); - if (!map) { - __free_pages(page, order); - return NULL; + /* + * XXX: this doesn't seem to handle the sun3 MMU at all. + */ + if (CPU_IS_040_OR_060) { + pgprot_val(prot) &= ~_PAGE_CACHE040; + pgprot_val(prot) |= _PAGE_GLOBAL040 | _PAGE_NOCACHE_S; + } else { + pgprot_val(prot) |= _PAGE_NOCACHE030; } - split_page(page, order); - - order = 1 << order; - size >>= PAGE_SHIFT; - map[0] = page; - for (i = 1; i < size; i++) - map[i] = page + i; - for (; i < order; i++) - __free_page(page + i); - pgprot = __pgprot(_PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_DIRTY); - if (CPU_IS_040_OR_060) - pgprot_val(pgprot) |= _PAGE_GLOBAL040 | _PAGE_NOCACHE_S; - else - pgprot_val(pgprot) |= _PAGE_NOCACHE030; - addr = vmap(map, size, VM_MAP, pgprot); - kfree(map); - - return addr; + return prot; } - -void arch_dma_free(struct device *dev, size_t size, void *addr, - dma_addr_t handle, unsigned long attrs) -{ - pr_debug("dma_free_coherent: %p, %x\n", addr, handle); - vfree(addr); -} - #else #include -- 2.20.1