|
@@ -26,6 +26,27 @@ rt_err_t rt_ofw_get_address_by_name(struct rt_ofw_node *np, const char *name,
|
|
|
int rt_ofw_get_address_array(struct rt_ofw_node *np, int nr, rt_uint64_t *out_regs);
|
|
|
|
|
|
rt_uint64_t rt_ofw_translate_address(struct rt_ofw_node *np, const char *range_type, rt_uint64_t address);
|
|
|
+rt_uint64_t rt_ofw_reverse_address(struct rt_ofw_node *np, const char *range_type, rt_uint64_t address);
|
|
|
+
|
|
|
+rt_inline rt_uint64_t rt_ofw_translate_dma2cpu(struct rt_ofw_node *np, rt_uint64_t address)
|
|
|
+{
|
|
|
+ rt_uint64_t bus_addr, cpu_addr;
|
|
|
+
|
|
|
+ bus_addr = rt_ofw_reverse_address(np, "dma-ranges", address);
|
|
|
+ cpu_addr = rt_ofw_translate_address(np, "ranges", bus_addr);
|
|
|
+
|
|
|
+ return cpu_addr != ~0ULL ? cpu_addr : address;
|
|
|
+}
|
|
|
+
|
|
|
+rt_inline rt_uint64_t rt_ofw_translate_cpu2dma(struct rt_ofw_node *np, rt_uint64_t address)
|
|
|
+{
|
|
|
+ rt_uint64_t bus_addr, dma_addr;
|
|
|
+
|
|
|
+ bus_addr = rt_ofw_reverse_address(np, "ranges", address);
|
|
|
+ dma_addr = rt_ofw_translate_address(np, "dma-ranges", bus_addr);
|
|
|
+
|
|
|
+ return dma_addr != ~0ULL ? dma_addr : address;
|
|
|
+}
|
|
|
|
|
|
void *rt_ofw_iomap(struct rt_ofw_node *np, int index);
|
|
|
void *rt_ofw_iomap_by_name(struct rt_ofw_node *np, const char *name);
|