Merge "[platform/msm7x30]: Add code to bump up the ACPU clock."
diff --git a/platform/msm7k/include/platform/iomap.h b/platform/msm7k/include/platform/iomap.h
index f2f1e35..9d58c30 100644
--- a/platform/msm7k/include/platform/iomap.h
+++ b/platform/msm7k/include/platform/iomap.h
@@ -47,6 +47,5 @@
 #define MSM_SHARED_BASE 0x00100000
 
 #define MSM_SDC1_BASE   0xA0400000
-#define MMC_BOOT_MCI_BASE   MSM_SDC1_BASE
 
 #endif
diff --git a/platform/msm7x30/include/platform/iomap.h b/platform/msm7x30/include/platform/iomap.h
index 5aec07c..789d5d7 100644
--- a/platform/msm7x30/include/platform/iomap.h
+++ b/platform/msm7x30/include/platform/iomap.h
@@ -43,8 +43,10 @@
 #define MSM_CSR_BASE    0xC0100000
 #define MSM_GCC_BASE 	0xC0182000
 
+#define MSM_SDC1_BASE   0xA0400000
 #define MSM_SDC2_BASE   0xA0500000
-#define MMC_BOOT_MCI_BASE   MSM_SDC2_BASE
+#define MSM_SDC3_BASE   0xA3000000
+#define MSM_SDC4_BASE   0xA3100000
 
 #define MSM_SHARED_BASE      0x00100000
 
diff --git a/platform/msm8x60/include/platform/iomap.h b/platform/msm8x60/include/platform/iomap.h
index 82d5eb2..ed64bd1 100755
--- a/platform/msm8x60/include/platform/iomap.h
+++ b/platform/msm8x60/include/platform/iomap.h
@@ -48,7 +48,6 @@
 #define MSM_GIC_DIST_BASE   0x02080000
 
 #define MSM_SDC1_BASE       0x12400000
-#define MMC_BOOT_MCI_BASE   MSM_SDC1_BASE
 
 #define MSM_SHARED_BASE      0x40000000
 
diff --git a/platform/msm_shared/include/mmc.h b/platform/msm_shared/include/mmc.h
index 0c5e7cc..9b49a34 100755
--- a/platform/msm_shared/include/mmc.h
+++ b/platform/msm_shared/include/mmc.h
@@ -29,15 +29,11 @@
 #ifndef __MMC_H__

 #define __MMC_H__

 

-#ifndef MMC_BOOT_MCI_BASE

-#define MMC_BOOT_MCI_BASE   0

-#endif

-

 #ifndef MMC_SLOT

 #define MMC_SLOT            0

 #endif

 

-#define MMC_BOOT_MCI_REG(offset)          (MMC_BOOT_MCI_BASE + offset)

+#define MMC_BOOT_MCI_REG(offset)          ((mmc_boot_mci_base) + offset)

 

 /*

  * Define Macros for SDCC Registers

diff --git a/platform/msm_shared/mmc.c b/platform/msm_shared/mmc.c
index d19eca5..a7d7c38 100644
--- a/platform/msm_shared/mmc.c
+++ b/platform/msm_shared/mmc.c
@@ -59,6 +59,9 @@
 static unsigned mmc_sdc_clk[] = { SDC1_CLK, SDC2_CLK, SDC3_CLK, SDC4_CLK};

 static unsigned mmc_sdc_pclk[] = { SDC1_PCLK, SDC2_PCLK, SDC3_PCLK, SDC4_PCLK};

 

+unsigned char mmc_slot = 0;

+unsigned int mmc_boot_mci_base = 0;

+

 int mmc_clock_enable_disable(unsigned id, unsigned enable);

 int mmc_clock_get_rate(unsigned id);

 int mmc_clock_set_rate(unsigned id, unsigned rate);

@@ -91,8 +94,8 @@
 

 #ifndef PLATFORM_MSM8X60

     int mmc_signed_ret = 0;

-    unsigned SDC_CLK = mmc_sdc_clk[MMC_SLOT - 1];

-    unsigned SDC_PCLK = mmc_sdc_pclk[MMC_SLOT - 1];

+    unsigned SDC_CLK = mmc_sdc_clk[mmc_slot - 1];

+    unsigned SDC_PCLK = mmc_sdc_pclk[mmc_slot - 1];

 

     if( host == NULL )

     {

@@ -2009,13 +2012,16 @@
 /*

  * Entry point to MMC boot process

  */

-unsigned int mmc_boot_main(void)

+unsigned int mmc_boot_main(unsigned char slot, unsigned int base)

 {

     unsigned int mmc_ret = MMC_BOOT_E_SUCCESS;

 

     memset( (struct mmc_boot_host*)&mmc_host, 0, sizeof( struct mmc_boot_host ) );

     memset( (struct mmc_boot_card*)&mmc_card, 0, sizeof(struct mmc_boot_card) );

 

+    mmc_slot = slot;

+    mmc_boot_mci_base = base;

+

 #ifndef PLATFORM_MSM8X60

     /* Waiting for modem to come up */

     while (readl(MSM_SHARED_BASE + 0x14) != 1);

diff --git a/target/msm7627_surf/init.c b/target/msm7627_surf/init.c
index 4b058b6..b3738a2 100644
--- a/target/msm7627_surf/init.c
+++ b/target/msm7627_surf/init.c
@@ -36,6 +36,7 @@
 #include <lib/ptable.h>
 #include <dev/flash.h>
 #include <smem.h>
+#include <platform/iomap.h>
 
 #define LINUX_MACHTYPE  1007014
 
@@ -117,7 +118,11 @@
 
 	if (target_is_emmc_boot())
 	{
-		mmc_boot_main();
+		if(mmc_boot_main(MMC_SLOT, MSM_SDC1_BASE))
+		{
+			dprintf(CRITICAL, "mmc init failed!");
+			ASSERT(0);
+		}
 		return;
 	}
 
diff --git a/target/msm7630_surf/init.c b/target/msm7630_surf/init.c
index b7efb5b..16d8981 100644
--- a/target/msm7630_surf/init.c
+++ b/target/msm7630_surf/init.c
@@ -38,6 +38,7 @@
 #include <dev/flash.h>
 #include <smem.h>
 #include <reg.h>
+#include <platform/iomap.h>
 
 #define LINUX_MACHTYPE_7x30_SURF          1007016
 #define LINUX_MACHTYPE_7x30_FFA           1007017
@@ -66,6 +67,8 @@
 #define DIFF_START_ADDR        0xF0F0F0F0
 #define NUM_PAGES_PER_BLOCK    0x40
 
+static unsigned mmc_sdc_base[] = { MSM_SDC1_BASE, MSM_SDC2_BASE, MSM_SDC3_BASE, MSM_SDC4_BASE};
+
 static struct ptable flash_ptable;
 static int hw_platform_type = -1;
 
@@ -179,6 +182,8 @@
 	unsigned total_num_of_blocks;
 	unsigned next_ptr_start_adr = 0;
 	unsigned blocks_per_1MB = 8; /* Default value of 2k page size on 256MB flash drive*/
+	unsigned base_addr;
+	unsigned char slot;
 	int i;
 
 	dprintf(INFO, "target_init()\n");
@@ -190,7 +195,20 @@
 
 	if (target_is_emmc_boot())
 	{
-		mmc_boot_main();
+		/* Trying Slot 2 first */
+		slot = 2;
+		base_addr = mmc_sdc_base[slot-1];
+		if(mmc_boot_main(slot, base_addr))
+		{
+			/* Trying Slot 4 next */
+			slot = 4;
+			base_addr = mmc_sdc_base[slot-1];
+			if(mmc_boot_main(slot, base_addr))
+			{
+				dprintf(CRITICAL, "mmc init failed!");
+				ASSERT(0);
+			}
+		}
 		return;
 	}
 
diff --git a/target/msm8660_surf/init.c b/target/msm8660_surf/init.c
index edebdfd..e91f125 100755
--- a/target/msm8660_surf/init.c
+++ b/target/msm8660_surf/init.c
@@ -63,7 +63,7 @@
 	keys_init();
 	keypad_init();
 #endif
-    if(mmc_boot_main())
+    if(mmc_boot_main(MMC_SLOT,MSM_SDC1_BASE))
     {
         dprintf(CRITICAL, "mmc init failed!");
         ASSERT(0);