提交 6a63b098 编写于 作者: T Thomas Petazzoni 提交者: Jason Cooper

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: NThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Tested-by: NAndrew Lunn <andrew@lunn.ch>
Tested-by: NSebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Signed-off-by: NJason Cooper <jason@lakedaemon.net>
上级 9b6e4c0a
...@@ -748,6 +748,22 @@ static const struct of_device_id of_mvebu_mbus_ids[] = { ...@@ -748,6 +748,22 @@ static const struct of_device_id of_mvebu_mbus_ids[] = {
/* /*
* Public API of the driver * 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, int mvebu_mbus_add_window_remap_flags(const char *devname, phys_addr_t base,
size_t size, phys_addr_t remap, size_t size, phys_addr_t remap,
unsigned int flags) unsigned int flags)
...@@ -776,14 +792,8 @@ int mvebu_mbus_add_window_remap_flags(const char *devname, phys_addr_t base, ...@@ -776,14 +792,8 @@ int mvebu_mbus_add_window_remap_flags(const char *devname, phys_addr_t base,
else if (flags == MVEBU_MBUS_PCI_WA) else if (flags == MVEBU_MBUS_PCI_WA)
attr |= 0x28; attr |= 0x28;
if (!mvebu_mbus_window_conflicts(s, base, size, target, attr)) { return mvebu_mbus_add_window_remap_by_id(target, attr, base,
pr_err("cannot add window '%s', conflicts with another window\n", size, remap);
devname);
return -EINVAL;
}
return mvebu_mbus_alloc_window(s, base, size, remap, target, attr);
} }
int mvebu_mbus_add_window(const char *devname, phys_addr_t base, size_t size) 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 *devname, phys_addr_t base, size_t size) ...@@ -792,6 +802,13 @@ int mvebu_mbus_add_window(const char *devname, phys_addr_t base, size_t size)
MVEBU_MBUS_NO_REMAP, 0); 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 mvebu_mbus_del_window(phys_addr_t base, size_t size)
{ {
int win; int win;
......
...@@ -62,8 +62,14 @@ static inline const struct mbus_dram_target_info *mv_mbus_dram_info(void) ...@@ -62,8 +62,14 @@ static inline const struct mbus_dram_target_info *mv_mbus_dram_info(void)
int mvebu_mbus_add_window_remap_flags(const char *devname, phys_addr_t base, int mvebu_mbus_add_window_remap_flags(const char *devname, phys_addr_t base,
size_t size, phys_addr_t remap, size_t size, phys_addr_t remap,
unsigned int flags); 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, int mvebu_mbus_add_window(const char *devname, phys_addr_t base,
size_t size); 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_del_window(phys_addr_t base, size_t size);
int mvebu_mbus_init(const char *soc, phys_addr_t mbus_phys_base, int mvebu_mbus_init(const char *soc, phys_addr_t mbus_phys_base,
size_t mbus_size, phys_addr_t sdram_phys_base, size_t mbus_size, phys_addr_t sdram_phys_base,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册