diff options
author | Serge Semin <Sergey.Semin@baikalelectronics.ru> | 2020-07-14 15:57:50 +0300 |
---|---|---|
committer | Thomas Bogendoerfer <tsbogend@alpha.franken.de> | 2020-07-21 11:25:15 +0300 |
commit | 2121aa3e2312ccc1d6299154dc4f07a6ab8beee2 (patch) | |
tree | ab90922127eaec6eadd87dcf68dd006466d3fd8c /drivers/bus | |
parent | c9a56aa972f7c89b6e70e41cd04f4cadc5cc51d7 (diff) | |
download | linux-2121aa3e2312ccc1d6299154dc4f07a6ab8beee2.tar.xz |
mips: cdmm: Add mti,mips-cdmm dtb node support
Since having and mapping the CDMM block is platform specific, then
instead of just returning a zero-address, lets make the default CDMM
base address search method (mips_cdmm_phys_base()) to do something
useful. For instance to find the address in a dedicated dtb-node in
order to support of-based platforms by default.
Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Diffstat (limited to 'drivers/bus')
-rw-r--r-- | drivers/bus/mips_cdmm.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/bus/mips_cdmm.c b/drivers/bus/mips_cdmm.c index 1b14256376d2..9f7ed1fcd428 100644 --- a/drivers/bus/mips_cdmm.c +++ b/drivers/bus/mips_cdmm.c @@ -13,6 +13,8 @@ #include <linux/cpu.h> #include <linux/cpumask.h> #include <linux/io.h> +#include <linux/of_address.h> +#include <linux/of.h> #include <linux/platform_device.h> #include <linux/slab.h> #include <linux/smp.h> @@ -337,9 +339,22 @@ static phys_addr_t mips_cdmm_cur_base(void) * Picking a suitable physical address at which to map the CDMM region is * platform specific, so this weak function can be overridden by platform * code to pick a suitable value if none is configured by the bootloader. + * By default this method tries to find a CDMM-specific node in the system + * dtb. Note that this won't work for early serial console. */ phys_addr_t __weak mips_cdmm_phys_base(void) { + struct device_node *np; + struct resource res; + int err; + + np = of_find_compatible_node(NULL, NULL, "mti,mips-cdmm"); + if (np) { + err = of_address_to_resource(np, 0, &res); + if (!err) + return res.start; + } + return 0; } |