aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/mvebu/patches-3.10/0038-bus-mvebu-mbus-Add-new-API-for-window-creation.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/mvebu/patches-3.10/0038-bus-mvebu-mbus-Add-new-API-for-window-creation.patch')
-rw-r--r--target/linux/mvebu/patches-3.10/0038-bus-mvebu-mbus-Add-new-API-for-window-creation.patch90
1 files changed, 90 insertions, 0 deletions
diff --git a/target/linux/mvebu/patches-3.10/0038-bus-mvebu-mbus-Add-new-API-for-window-creation.patch b/target/linux/mvebu/patches-3.10/0038-bus-mvebu-mbus-Add-new-API-for-window-creation.patch
new file mode 100644
index 0000000000..4ebb3f3216
--- /dev/null
+++ b/target/linux/mvebu/patches-3.10/0038-bus-mvebu-mbus-Add-new-API-for-window-creation.patch
@@ -0,0 +1,90 @@
+From 93b6bd1bf81cffd3e5739478c4434bf25458ec7d Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Date: Fri, 5 Jul 2013 14:54:16 +0200
+Subject: [PATCH 038/203] bus: mvebu-mbus: Add new API for window creation
+
+We add an API to create MBus address decoding windows from the target
+ID and attribute. This function will be used later and deprecate the
+current name based scheme.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Tested-by: Andrew Lunn <andrew@lunn.ch>
+Tested-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
+---
+ drivers/bus/mvebu-mbus.c | 33 +++++++++++++++++++++++++--------
+ include/linux/mbus.h | 6 ++++++
+ 2 files changed, 31 insertions(+), 8 deletions(-)
+
+--- a/drivers/bus/mvebu-mbus.c
++++ b/drivers/bus/mvebu-mbus.c
+@@ -748,6 +748,22 @@ static const struct of_device_id of_mveb
+ /*
+ * Public API of the driver
+ */
++int mvebu_mbus_add_window_remap_by_id(unsigned int target,
++ unsigned int attribute,
++ phys_addr_t base, size_t size,
++ phys_addr_t remap)
++{
++ struct mvebu_mbus_state *s = &mbus_state;
++
++ if (!mvebu_mbus_window_conflicts(s, base, size, target, attribute)) {
++ pr_err("cannot add window '%x:%x', conflicts with another window\n",
++ target, attribute);
++ return -EINVAL;
++ }
++
++ return mvebu_mbus_alloc_window(s, base, size, remap, target, attribute);
++}
++
+ int mvebu_mbus_add_window_remap_flags(const char *devname, phys_addr_t base,
+ size_t size, phys_addr_t remap,
+ unsigned int flags)
+@@ -776,14 +792,8 @@ int mvebu_mbus_add_window_remap_flags(co
+ else if (flags == MVEBU_MBUS_PCI_WA)
+ attr |= 0x28;
+
+- if (!mvebu_mbus_window_conflicts(s, base, size, target, attr)) {
+- pr_err("cannot add window '%s', conflicts with another window\n",
+- devname);
+- return -EINVAL;
+- }
+-
+- return mvebu_mbus_alloc_window(s, base, size, remap, target, attr);
+-
++ return mvebu_mbus_add_window_remap_by_id(target, attr, base,
++ size, remap);
+ }
+
+ int mvebu_mbus_add_window(const char *devname, phys_addr_t base, size_t size)
+@@ -792,6 +802,13 @@ int mvebu_mbus_add_window(const char *de
+ MVEBU_MBUS_NO_REMAP, 0);
+ }
+
++int mvebu_mbus_add_window_by_id(unsigned int target, unsigned int attribute,
++ phys_addr_t base, size_t size)
++{
++ return mvebu_mbus_add_window_remap_by_id(target, attribute, base,
++ size, MVEBU_MBUS_NO_REMAP);
++}
++
+ int mvebu_mbus_del_window(phys_addr_t base, size_t size)
+ {
+ int win;
+--- a/include/linux/mbus.h
++++ b/include/linux/mbus.h
+@@ -62,8 +62,14 @@ static inline const struct mbus_dram_tar
+ int mvebu_mbus_add_window_remap_flags(const char *devname, phys_addr_t base,
+ size_t size, phys_addr_t remap,
+ unsigned int flags);
++int mvebu_mbus_add_window_remap_by_id(unsigned int target,
++ unsigned int attribute,
++ phys_addr_t base, size_t size,
++ phys_addr_t remap);
+ int mvebu_mbus_add_window(const char *devname, phys_addr_t base,
+ size_t size);
++int mvebu_mbus_add_window_by_id(unsigned int target, unsigned int attribute,
++ phys_addr_t base, size_t size);
+ int mvebu_mbus_del_window(phys_addr_t base, size_t size);
+ int mvebu_mbus_init(const char *soc, phys_addr_t mbus_phys_base,
+ size_t mbus_size, phys_addr_t sdram_phys_base,