diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2020-07-27 21:58:14 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2020-07-27 21:58:14 +0200 |
commit | e41d307e072de3642c0ce293ef3786ff1340440b (patch) | |
tree | 8bdd95ae53fc5cd6db7dae46058f545131d992b4 /arch/arm/mach-at91/ddramc.c | |
parent | 3322880d50b964c17021f9a6089d191b6cf1586b (diff) | |
parent | 424b33c88b90fe656dbe2c3a9c954ea6d4f7479b (diff) | |
download | barebox-e41d307e072de3642c0ce293ef3786ff1340440b.tar.gz barebox-e41d307e072de3642c0ce293ef3786ff1340440b.tar.xz |
Merge branch 'for-next/at91'
Diffstat (limited to 'arch/arm/mach-at91/ddramc.c')
-rw-r--r-- | arch/arm/mach-at91/ddramc.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/arch/arm/mach-at91/ddramc.c b/arch/arm/mach-at91/ddramc.c new file mode 100644 index 0000000000..a241ea9f0a --- /dev/null +++ b/arch/arm/mach-at91/ddramc.c @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2020 Ahmad Fatoum <a.fatoum@pengutronix.de> + */ + +#include <common.h> +#include <init.h> +#include <mach/ddramc.h> +#include <mach/hardware.h> +#include <asm/barebox-arm.h> +#include <mach/at91_ddrsdrc.h> +#include <mach/sama5_bootsource.h> +#include <asm/memory.h> +#include <pbl.h> +#include <io.h> + +static unsigned sama5_ramsize(void __iomem *base) +{ + return at91_get_ddram_size(base, true); +} + +void __noreturn sama5d2_barebox_entry(unsigned int r4, void *boarddata) +{ + __sama5d2_stashed_bootrom_r4 = r4; + barebox_arm_entry(SAMA5_DDRCS, sama5_ramsize(SAMA5D2_BASE_MPDDRC), + boarddata); +} + +static int sama5_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", SAMA5_DDRCS, sama5_ramsize(base)); + + return 0; +} + +static struct of_device_id sama5_ddr_dt_ids[] = { + { .compatible = "atmel,sama5d3-ddramc" }, + { /* sentinel */ } +}; + +static struct driver_d sama5_ddr_driver = { + .name = "sama5-ddramc", + .probe = sama5_ddr_probe, + .of_compatible = sama5_ddr_dt_ids, +}; + +static int sama5_ddr_init(void) +{ + return platform_driver_register(&sama5_ddr_driver); +} +mem_initcall(sama5_ddr_init); |