forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MIPS: IP32: use generic dma noncoherent ops
Provide phys_to_dma/dma_to_phys helpers, everything else is generic. Signed-off-by: Christoph Hellwig <[email protected]> Patchwork: https://patchwork.linux-mips.org/patch/19546/ Signed-off-by: Paul Burton <[email protected]> Cc: Florian Fainelli <[email protected]> Cc: David Daney <[email protected]> Cc: Kevin Cernekee <[email protected]> Cc: Jiaxun Yang <[email protected]> Cc: Tom Bogendoerfer <[email protected]> Cc: Huacai Chen <[email protected]> Cc: [email protected] Cc: [email protected]
- Loading branch information
1 parent
e905086
commit 03df822
Showing
4 changed files
with
39 additions
and
94 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
/* | ||
* Copyright (C) 2006 Ralf Baechle <[email protected]> | ||
*/ | ||
#include <linux/dma-direct.h> | ||
#include <asm/ip32/crime.h> | ||
|
||
/* | ||
* Few notes. | ||
* 1. CPU sees memory as two chunks: 0-256M@0x0, and the rest @0x40000000+256M | ||
* 2. PCI sees memory as one big chunk @0x0 (or we could use 0x40000000 for | ||
* native-endian) | ||
* 3. All other devices see memory as one big chunk at 0x40000000 | ||
* 4. Non-PCI devices will pass NULL as struct device* | ||
* | ||
* Thus we translate differently, depending on device. | ||
*/ | ||
|
||
#define RAM_OFFSET_MASK 0x3fffffffUL | ||
|
||
dma_addr_t __phys_to_dma(struct device *dev, phys_addr_t paddr) | ||
{ | ||
dma_addr_t dma_addr = paddr & RAM_OFFSET_MASK; | ||
|
||
if (!dev) | ||
dma_addr += CRIME_HI_MEM_BASE; | ||
return dma_addr; | ||
} | ||
|
||
phys_addr_t __dma_to_phys(struct device *dev, dma_addr_t dma_addr) | ||
{ | ||
phys_addr_t paddr = dma_addr & RAM_OFFSET_MASK; | ||
|
||
if (dma_addr >= 256*1024*1024) | ||
paddr += CRIME_HI_MEM_BASE; | ||
return paddr; | ||
} |