summaryrefslogtreecommitdiffstats
path: root/arch/arm/boards/sama5d3_xplained/board.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/boards/sama5d3_xplained/board.c')
-rw-r--r--arch/arm/boards/sama5d3_xplained/board.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/arch/arm/boards/sama5d3_xplained/board.c b/arch/arm/boards/sama5d3_xplained/board.c
new file mode 100644
index 0000000000..4d908e6b9f
--- /dev/null
+++ b/arch/arm/boards/sama5d3_xplained/board.c
@@ -0,0 +1,74 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include <common.h>
+#include <init.h>
+#include <envfs.h>
+#include <mach/at91/at91sam9_smc.h>
+#include <mach/at91/hardware.h>
+#include <linux/clk.h>
+
+static struct sam9_smc_config sama5d3_xplained_nand_smc_config = {
+ .ncs_read_setup = 1,
+ .nrd_setup = 2,
+ .ncs_write_setup = 1,
+ .nwe_setup = 2,
+
+ .ncs_read_pulse = 5,
+ .nrd_pulse = 3,
+ .ncs_write_pulse = 5,
+ .nwe_pulse = 3,
+
+ .read_cycle = 8,
+ .write_cycle = 8,
+
+ .mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE |
+ AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_DBW_8,
+ .tdf_cycles = 3,
+
+ .tclr = 3,
+ .tadl = 10,
+ .tar = 3,
+ .ocms = 0,
+ .trr = 4,
+ .twb = 5,
+ .rbnsel = 3,
+ .nfsel = 1
+};
+
+static int sama5d3_xplained_probe(struct device *dev)
+{
+ struct clk *clk;
+
+ barebox_set_hostname("sama5d3_xplained");
+
+ if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT_GENERIC))
+ defaultenv_append_directory(defaultenv_sama5d3_xplained);
+
+ add_generic_device("at91sam9-smc", DEVICE_ID_SINGLE, NULL,
+ SAMA5D3_BASE_HSMC + 0x600, 0xa0,
+ IORESOURCE_MEM, NULL);
+
+ clk = clk_lookup("hsmc_clk");
+ if (IS_ERR(clk))
+ dev_warn(dev, "couldn't get hsmc_clk: %pe\n", clk);
+
+ clk_enable(clk);
+
+ /* configure chip-select 3 (NAND) */
+ sama5_smc_configure(0, 3, &sama5d3_xplained_nand_smc_config);
+
+ return 0;
+}
+
+static const struct of_device_id sama5d3_xplained_of_match[] = {
+ { .compatible = "atmel,sama5d3-xplained" },
+ { /* sentinel */ },
+};
+MODULE_DEVICE_TABLE(of, sama5d3_xplained_of_match);
+
+static struct driver sama5d3_xplained_board_driver = {
+ .name = "board-sama5d3_xplained",
+ .probe = sama5d3_xplained_probe,
+ .of_compatible = sama5d3_xplained_of_match,
+};
+coredevice_platform_driver(sama5d3_xplained_board_driver);