ram: stm32_sdram: Adds stm32f429-disco fixes for HardFault at booting

- adds reading FMC swap setting from DTB to SDRAM driver
- sets FMC swap for stm32f429-disco board
- changes ram start address to 0x90000000

Signed-off-by: Radoslaw Pietrzyk <radoslaw.pietrzyk@gmail.com>
Acked-by: Patrice Chotard <patrice.chotard@st.com>
diff --git a/drivers/ram/stm32_sdram.c b/drivers/ram/stm32_sdram.c
index dc39f33..f6cac8e 100644
--- a/drivers/ram/stm32_sdram.c
+++ b/drivers/ram/stm32_sdram.c
@@ -11,6 +11,8 @@
 #include <asm/io.h>
 
 #define MEM_MODE_MASK	GENMASK(2, 0)
+#define SWP_FMC_OFFSET 10
+#define SWP_FMC_MASK	GENMASK(SWP_FMC_OFFSET+1, SWP_FMC_OFFSET)
 #define NOT_FOUND	0xff
 
 struct stm32_fmc_regs {
@@ -256,27 +258,36 @@
 	struct ofnode_phandle_args args;
 	u32 *syscfg_base;
 	u32 mem_remap;
+	u32 swp_fmc;
 	ofnode bank_node;
 	char *bank_name;
 	u8 bank = 0;
 	int ret;
 
-	mem_remap = dev_read_u32_default(dev, "st,mem_remap", NOT_FOUND);
-	if (mem_remap != NOT_FOUND) {
-		ret = dev_read_phandle_with_args(dev, "st,syscfg", NULL, 0, 0,
+	ret = dev_read_phandle_with_args(dev, "st,syscfg", NULL, 0, 0,
 						 &args);
-		if (ret) {
-			debug("%s: can't find syscon device (%d)\n", __func__,
-			      ret);
-			return ret;
-		}
-
+	if (ret) {
+		dev_dbg(dev, "%s: can't find syscon device (%d)\n", __func__, ret);
+	} else {
 		syscfg_base = (u32 *)ofnode_get_addr(args.node);
 
-		/* set memory mapping selection */
-		clrsetbits_le32(syscfg_base, MEM_MODE_MASK, mem_remap);
-	} else {
-		debug("%s: cannot find st,mem_remap property\n", __func__);
+		mem_remap = dev_read_u32_default(dev, "st,mem_remap", NOT_FOUND);
+		if (mem_remap != NOT_FOUND) {
+			/* set memory mapping selection */
+			clrsetbits_le32(syscfg_base, MEM_MODE_MASK, mem_remap);
+		} else {
+			dev_dbg(dev, "%s: cannot find st,mem_remap property\n", __func__);
+		}
+		
+		swp_fmc = dev_read_u32_default(dev, "st,swp_fmc", NOT_FOUND);
+		if (swp_fmc != NOT_FOUND) {
+			/* set fmc swapping selection */
+			clrsetbits_le32(syscfg_base, SWP_FMC_MASK, swp_fmc << SWP_FMC_OFFSET);
+		} else {
+			dev_dbg(dev, "%s: cannot find st,swp_fmc property\n", __func__);
+		}
+
+		dev_dbg(dev, "syscfg %x = %x\n", (u32)syscfg_base, *syscfg_base);
 	}
 
 	dev_for_each_subnode(bank_node, dev) {