diff options
-rw-r--r-- | arch/arm/mach-stm32mp/ddrctrl.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/arch/arm/mach-stm32mp/ddrctrl.c b/arch/arm/mach-stm32mp/ddrctrl.c index 90fb5e8956..962d4c0d52 100644 --- a/arch/arm/mach-stm32mp/ddrctrl.c +++ b/arch/arm/mach-stm32mp/ddrctrl.c @@ -4,6 +4,7 @@ */ #include <common.h> +#include <init.h> #include <mach/stm32.h> #include <mach/ddr_regs.h> #include <mach/entry.h> @@ -119,3 +120,36 @@ void __noreturn stm32mp1_barebox_entry(void *boarddata) { barebox_arm_entry(STM32_DDR_BASE, stm32mp1_ddrctrl_ramsize(), boarddata); } + + +static int stm32mp1_ddr_probe(struct device_d *dev) +{ + struct resource *iores; + void __iomem *base; + + iores = dev_request_mem_resource(dev, 0); + if (IS_ERR(iores)) + return PTR_ERR(iores); + base = IOMEM(iores->start); + + arm_add_mem_device("ram0", STM32_DDR_BASE, ddrctrl_ramsize(base)); + + return 0; +} + +static __maybe_unused struct of_device_id stm32mp1_ddr_dt_ids[] = { + { .compatible = "st,stm32mp1-ddr" }, + { /* sentinel */ } +}; + +static struct driver_d stm32mp1_ddr_driver = { + .name = "stm32mp1-ddr", + .probe = stm32mp1_ddr_probe, + .of_compatible = DRV_OF_COMPAT(stm32mp1_ddr_dt_ids), +}; + +static int stm32mp1_ddr_init(void) +{ + return platform_driver_register(&stm32mp1_ddr_driver); +} +mem_initcall(stm32mp1_ddr_init); |