summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-at91/ddramc.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2020-07-27 21:58:14 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2020-07-27 21:58:14 +0200
commite41d307e072de3642c0ce293ef3786ff1340440b (patch)
tree8bdd95ae53fc5cd6db7dae46058f545131d992b4 /arch/arm/mach-at91/ddramc.c
parent3322880d50b964c17021f9a6089d191b6cf1586b (diff)
parent424b33c88b90fe656dbe2c3a9c954ea6d4f7479b (diff)
downloadbarebox-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.c59
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);