diff options
author | Stephen Warren <swarren@wwwdotorg.org> | 2015-03-25 02:07:33 (GMT) |
---|---|---|
committer | Marek Vasut <marex@denx.de> | 2015-04-14 03:47:59 (GMT) |
commit | 927c1fa266ead17acb09e9397dbd33578f3ee267 (patch) | |
tree | 58a8b23869008d8a1b99bb2e33969095bbf4e53e | |
parent | fc909c0563da20f3a564aa598dbe5966defabdcc (diff) | |
download | u-boot-927c1fa266ead17acb09e9397dbd33578f3ee267.tar.xz |
Create API to map between CPU physical and bus addresses
On some SoCs, DMA-capable peripherals see a different address space to
the CPU's physical address space. Create an API to allow platform-agnostic
drivers to convert between the two address spaces when programming DMA
operations.
This API will exist on all platforms, but will have a dummy implementation
when this feature is not required. Other platforms will enable
CONFIG_PHYS_TO_BUS and provide the required implementation.
Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
-rw-r--r-- | drivers/Kconfig | 8 | ||||
-rw-r--r-- | include/phys2bus.h | 25 |
2 files changed, 33 insertions, 0 deletions
diff --git a/drivers/Kconfig b/drivers/Kconfig index dcce532..941aa0c 100644 --- a/drivers/Kconfig +++ b/drivers/Kconfig @@ -53,3 +53,11 @@ source "drivers/crypto/Kconfig" source "drivers/thermal/Kconfig" endmenu + +config PHYS_TO_BUS + bool + help + Some SoCs use a different address map for CPU physical addresses and + peripheral DMA master accesses. If yours does, select this option in + your platform's Kconfig, and implement the appropriate mapping + functions in your platform's support code. diff --git a/include/phys2bus.h b/include/phys2bus.h new file mode 100644 index 0000000..87b6d69 --- /dev/null +++ b/include/phys2bus.h @@ -0,0 +1,25 @@ +/* + * Copyright 2015 Stephen Warren + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#ifndef _BUS_ADDR_H +#define _BUS_ADDR_H + +#ifdef CONFIG_PHYS_TO_BUS +unsigned long phys_to_bus(unsigned long phys); +unsigned long bus_to_phys(unsigned long bus); +#else +static inline unsigned long phys_to_bus(unsigned long phys) +{ + return phys; +} + +static inline unsigned long bus_to_phys(unsigned long bus) +{ + return bus; +} +#endif + +#endif |