arm: omap4: Fix SDRAM AUTO DETECTION

Commit "8602114 omap: emif: configure emif only when required"
breaks SDRAM_AUTO_DETECTION.
The issue is dmm_init() depends on emif_sizes[](SDRAM Auto detection)
done in do_sdram_init(). The above commit moves dmm_init() above
do_sdram_init() because of which dmm_init() uses uninitialized
emif_sizes[].
So instead of using global emif_sizes[], get sdram details locally
and calculate emif sizes.

Reported-by: Michael Cashwell <mboards@prograde.net>
Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
diff --git a/arch/arm/cpu/armv7/omap-common/emif-common.c b/arch/arm/cpu/armv7/omap-common/emif-common.c
index 9eb1279..cdb4439 100644
--- a/arch/arm/cpu/armv7/omap-common/emif-common.c
+++ b/arch/arm/cpu/armv7/omap-common/emif-common.c
@@ -655,20 +655,27 @@
 	return phy;
 }
 
-static u32 get_emif_mem_size(struct emif_device_details *devices)
+static u32 get_emif_mem_size(u32 base)
 {
 	u32 size_mbytes = 0, temp;
+	struct emif_device_details dev_details;
+	struct lpddr2_device_details cs0_dev_details, cs1_dev_details;
+	u32 emif_nr = emif_num(base);
 
-	if (!devices)
-		return 0;
+	emif_reset_phy(base);
+	dev_details.cs0_device_details = emif_get_device_details(emif_nr, CS0,
+						&cs0_dev_details);
+	dev_details.cs1_device_details = emif_get_device_details(emif_nr, CS1,
+						&cs1_dev_details);
+	emif_reset_phy(base);
 
-	if (devices->cs0_device_details) {
-		temp = devices->cs0_device_details->density;
+	if (dev_details.cs0_device_details) {
+		temp = dev_details.cs0_device_details->density;
 		size_mbytes += lpddr2_density_2_size_in_mbytes[temp];
 	}
 
-	if (devices->cs1_device_details) {
-		temp = devices->cs1_device_details->density;
+	if (dev_details.cs1_device_details) {
+		temp = dev_details.cs1_device_details->density;
 		size_mbytes += lpddr2_density_2_size_in_mbytes[temp];
 	}
 	/* convert to bytes */
@@ -1040,13 +1047,9 @@
 	/* Return if no devices on this EMIF */
 	if (!dev_details.cs0_device_details &&
 	    !dev_details.cs1_device_details) {
-		emif_sizes[emif_nr - 1] = 0;
 		return;
 	}
 
-	if (!in_sdram)
-		emif_sizes[emif_nr - 1] = get_emif_mem_size(&dev_details);
-
 	/*
 	 * Get device timings:
 	 * - Default timings specified by JESD209-2 if
@@ -1108,8 +1111,8 @@
 	mapped_size = 0;
 	section_cnt = 3;
 	sys_addr = CONFIG_SYS_SDRAM_BASE;
-	emif1_size = emif_sizes[0];
-	emif2_size = emif_sizes[1];
+	emif1_size = get_emif_mem_size(EMIF1_BASE);
+	emif2_size = get_emif_mem_size(EMIF2_BASE);
 	debug("emif1_size 0x%x emif2_size 0x%x\n", emif1_size, emif2_size);
 
 	if (!emif1_size && !emif2_size)