diff --git a/platform/msm_shared/include/mmc.h b/platform/msm_shared/include/mmc.h
index 9b49a34..a58abbe 100755
--- a/platform/msm_shared/include/mmc.h
+++ b/platform/msm_shared/include/mmc.h
@@ -250,6 +250,10 @@
 
 #define MMC_BOOT_MCI_FIFO                 MMC_BOOT_MCI_REG(0x080)
 
+/* Card status */
+#define MMC_BOOT_CARD_STATUS(x)          ((x>>9) & 0x0F)
+#define MMC_BOOT_TRAN_STATE              4
+
 /* SD Memory Card bus commands */
 #define CMD0_GO_IDLE_STATE               0
 #define CMD1_SEND_OP_COND                1
@@ -257,8 +261,10 @@
 #define CMD3_SEND_RELATIVE_ADDR          3
 #define CMD4_SET_DSR                     4
 #define CMD6_SWITCH_FUNC                 6
+#define ACMD6_SET_BUS_WIDTH              6    /* SD card */
 #define CMD7_SELECT_DESELECT_CARD        7
 #define CMD8_SEND_EXT_CSD                8
+#define CMD8_SEND_IF_COND                8    /* SD card */
 #define CMD9_SEND_CSD                    9
 #define CMD10_SEND_CID                   10
 #define CMD12_STOP_TRANSMISSION          12
@@ -272,7 +278,9 @@
 #define CMD32_ERASE_WR_BLK_START         32
 #define CMD33_ERASE_WR_BLK_END           33
 #define CMD38_ERASE                      38
-#define CMD55_APP_CMD                    55
+#define ACMD41_SEND_OP_COND              41    /* SD card */
+#define ACMD51_SEND_SCR                  51    /* SD card */
+#define CMD55_APP_CMD                    55    /* SD card */
 
 /* Switch Function Modes */
 #define MMC_BOOT_SWITCH_FUNC_CHECK        0
@@ -360,6 +368,13 @@
 #define MMC_BOOT_EXT_CMMC_HS_TIMING       185
 #define MMC_BOOT_EXT_CMMC_BUS_WIDTH       183
 
+/* For SD */
+#define MMC_BOOT_SD_HC_VOLT_SUPPLIED      0x000001AA
+#define MMC_BOOT_SD_NEG_OCR               0x00FF8000
+#define MMC_BOOT_SD_HC_HCS                0x40000000
+#define MMC_BOOT_SD_DEV_READY             0x80000000
+#define MMC_BOOT_SD_SWITCH_HS             0x80FFFF01
+
 /* Data structure definitions */
 struct mmc_boot_command
 {
@@ -439,6 +454,7 @@
 #define MMC_BOOT_TYPE_STD_SD             0
 #define MMC_BOOT_TYPE_SDHC               1
 #define MMC_BOOT_TYPE_SDIO               2
+#define MMC_BOOT_TYPE_MMCHC              3
     unsigned int status;
 #define MMC_BOOT_STATUS_INACTIVE         0
 #define MMC_BOOT_STATUS_ACTIVE           1
diff --git a/platform/msm_shared/mmc.c b/platform/msm_shared/mmc.c
index ab390f6..4f657e1 100644
--- a/platform/msm_shared/mmc.c
+++ b/platform/msm_shared/mmc.c
@@ -181,7 +181,7 @@
         return MMC_BOOT_E_INVAL;
     }
 
-    if( card->type == MMC_BOOT_TYPE_SDHC )
+    if( (card->type == MMC_BOOT_TYPE_MMCHC) || (card->type == MMC_BOOT_TYPE_SDHC) )
     {
         card->rd_timeout_ns = 100000000;
     }
@@ -212,7 +212,7 @@
         return MMC_BOOT_E_INVAL;
     }
 
-    if( card->type == MMC_BOOT_TYPE_SDHC )
+    if( (card->type == MMC_BOOT_TYPE_MMCHC) || (card->type == MMC_BOOT_TYPE_SDHC) )
     {
         card->wr_timeout_ns = 100000000;
     }
@@ -497,7 +497,8 @@
            Spcial case for ACMD41: it seems to always fail CRC even if
            the response is valid
            */
-        else if (( mmc_status & MMC_BOOT_MCI_STAT_CMD_RESP_END ) || (cmd_index == CMD1_SEND_OP_COND))
+        else if (( mmc_status & MMC_BOOT_MCI_STAT_CMD_RESP_END ) || (cmd_index == CMD1_SEND_OP_COND)
+                || (cmd_index == CMD8_SEND_IF_COND))
         {
             /* 3i. Read MCI_RESP_CMD register to verify that response index is
                equal to command index */
@@ -508,7 +509,8 @@
             if( ( mmc_resp == cmd_index ) ||
                     ( cmd->resp_type == MMC_BOOT_RESP_R2 ||
                       cmd->resp_type == MMC_BOOT_RESP_R3 ||
-                      cmd->resp_type == MMC_BOOT_RESP_R6 ) )
+                      cmd->resp_type == MMC_BOOT_RESP_R6 ||
+                      cmd->resp_type == MMC_BOOT_RESP_R7 ) )
             {
                 /* 3j. If resp index is equal to cmd index, read command resp
                    from MCI_RESPn registers
@@ -541,7 +543,12 @@
            but CRC check failed. */
         else if( ( mmc_status & MMC_BOOT_MCI_STAT_CMD_CRC_FAIL )  )
         {
-            mmc_return = MMC_BOOT_E_CRC_FAIL;
+            if(cmd_index == ACMD41_SEND_OP_COND)
+            {
+                cmd->resp[0] = readl( MMC_BOOT_MCI_RESP_0);
+            }
+            else
+                mmc_return = MMC_BOOT_E_CRC_FAIL;
             break;
         }
 
@@ -686,17 +693,36 @@
     /* CMD3 Format:
      * [31:0] stuff bits
      */
-    cmd.cmd_index = CMD3_SEND_RELATIVE_ADDR;
-    cmd.argument = (MMC_RCA << 16);
-    card->rca =  (cmd.argument >> 16);
-    cmd.cmd_type = MMC_BOOT_CMD_ADDRESS;
-    cmd.resp_type = MMC_BOOT_RESP_R1;
-
-    /* send command */
-    mmc_ret = mmc_boot_send_command( &cmd );
-    if( mmc_ret != MMC_BOOT_E_SUCCESS )
+    if(card->type == MMC_BOOT_TYPE_SDHC)
     {
-        return mmc_ret;
+        cmd.cmd_index = CMD3_SEND_RELATIVE_ADDR;
+        cmd.argument = 0;
+        cmd.cmd_type = MMC_BOOT_CMD_BCAST_W_RESP;
+        cmd.resp_type = MMC_BOOT_RESP_R6;
+
+        /* send command */
+        mmc_ret = mmc_boot_send_command( &cmd );
+        if( mmc_ret != MMC_BOOT_E_SUCCESS )
+        {
+            return mmc_ret;
+        }
+        /* For sD, card will send RCA. Store it */
+        card->rca =  (cmd.resp[0] >> 16);
+    }
+    else
+    {
+        cmd.cmd_index = CMD3_SEND_RELATIVE_ADDR;
+        cmd.argument = (MMC_RCA << 16);
+        card->rca =  (cmd.argument >> 16);
+        cmd.cmd_type = MMC_BOOT_CMD_ADDRESS;
+        cmd.resp_type = MMC_BOOT_RESP_R1;
+
+        /* send command */
+        mmc_ret = mmc_boot_send_command( &cmd );
+        if( mmc_ret != MMC_BOOT_E_SUCCESS )
+        {
+            return mmc_ret;
+        }
     }
 
     return MMC_BOOT_E_SUCCESS;
@@ -782,7 +808,10 @@
     /* If we are deselecting card, we do not get response */
     if( rca == card->rca && rca)
     {
-        cmd.resp_type = MMC_BOOT_RESP_R1;
+        if(card->type == MMC_BOOT_TYPE_SDHC)
+            cmd.resp_type = MMC_BOOT_RESP_R1B;
+        else
+            cmd.resp_type = MMC_BOOT_RESP_R1;
     }
     else
     {
@@ -887,7 +916,7 @@
  * Get the card's current status
  */
 static unsigned int mmc_boot_get_card_status( struct mmc_boot_card* card,
-        unsigned int prg_enabled )
+        unsigned int prg_enabled, unsigned int* status )
 {
     struct mmc_boot_command cmd;
     unsigned int mmc_ret = MMC_BOOT_E_SUCCESS;
@@ -918,6 +947,7 @@
         return mmc_ret;
     }
 
+    *status = cmd.resp[0];
     return MMC_BOOT_E_SUCCESS;
 }
 /*
@@ -1099,6 +1129,8 @@
         mmc_width = width-1;
     }
 
+    mmc_boot_send_ext_cmd (card);
+
     mmc_ret = mmc_boot_switch_cmd(card, MMC_BOOT_ACCESS_WRITE, MMC_BOOT_EXT_CMMC_BUS_WIDTH, mmc_width);
 
     if( mmc_ret != MMC_BOOT_E_SUCCESS )
@@ -1306,15 +1338,16 @@
     unsigned int addr;
     unsigned int xfer_type;
     unsigned int write_error;
+    unsigned int status;
 
     if( ( host == NULL ) || ( card == NULL ) )
     {
         return MMC_BOOT_E_INVAL;
     }
 
-    /* Set block length. High Capacity MMC card uses fixed 512 bytes block
+    /* Set block length. High Capacity MMC/SD card uses fixed 512 bytes block
        length. So no need to send CMD16. */
-    if( card->type != MMC_BOOT_TYPE_SDHC )
+    if( (card->type != MMC_BOOT_TYPE_MMCHC) && (card->type != MMC_BOOT_TYPE_SDHC) )
     {
         mmc_ret = mmc_boot_set_block_len( card, card->wr_block_len );
         if( mmc_ret != MMC_BOOT_E_SUCCESS )
@@ -1329,9 +1362,9 @@
     xfer_type = (data_len > card->rd_block_len) ? MMC_BOOT_XFER_MULTI_BLOCK :
         MMC_BOOT_XFER_SINGLE_BLOCK;
 
-    /* For SDHC data address is specified in unit of 512B */
-    addr = ( card->type != MMC_BOOT_TYPE_SDHC ) ? (unsigned int) data_addr :
-        (unsigned int) (data_addr / 512);
+    /* For MMCHC/SDHC data address is specified in unit of 512B */
+    addr = ( (card->type != MMC_BOOT_TYPE_MMCHC) && (card->type != MMC_BOOT_TYPE_SDHC) ) 
+        ? (unsigned int) data_addr : (unsigned int) (data_addr / 512);
 
     /* Set the FLOW_ENA bit of MCI_CLK register to 1 */
     mmc_reg = readl( MMC_BOOT_MCI_CLK );
@@ -1446,7 +1479,7 @@
     }
     else
     {
-        mmc_ret = mmc_boot_get_card_status( card, 1 );
+        mmc_ret = mmc_boot_get_card_status( card, 1, &status );
         if( mmc_ret != MMC_BOOT_E_SUCCESS )
         {
             dprintf(CRITICAL, "Error No.%d: Failure getting card status of Card(RCA:%x)\n",
@@ -1484,7 +1517,6 @@
     /* Setting HS_TIMING in EXT_CSD (CMD6) */
     mmc_ret = mmc_boot_switch_cmd(card, MMC_BOOT_ACCESS_WRITE, MMC_BOOT_EXT_CMMC_HS_TIMING, 1);
 
-    mmc_boot_send_ext_cmd (card);
     if(mmc_ret!= MMC_BOOT_E_SUCCESS)
     {
         return mmc_ret;
@@ -1525,9 +1557,9 @@
         return MMC_BOOT_E_INVAL;
     }
 
-    /* Set block length. High Capacity MMC card uses fixed 512 bytes block
+    /* Set block length. High Capacity MMC/SD card uses fixed 512 bytes block
        length. So no need to send CMD16. */
-    if( card->type != MMC_BOOT_TYPE_SDHC )
+    if( (card->type != MMC_BOOT_TYPE_MMCHC) && (card->type != MMC_BOOT_TYPE_SDHC) )
     {
         mmc_ret = mmc_boot_set_block_len( card, card->rd_block_len );
         if( mmc_ret != MMC_BOOT_E_SUCCESS )
@@ -1562,9 +1594,9 @@
        size. */
     writel( data_len, MMC_BOOT_MCI_DATA_LENGTH );
 
-    /* For SDHC data address is specified in unit of 512B */
-    addr = ( card->type != MMC_BOOT_TYPE_SDHC ) ? (unsigned int) data_addr :
-        (unsigned int) (data_addr / 512);
+    /* For MMCHC/SDHC data address is specified in unit of 512B */
+    addr = ( (card->type != MMC_BOOT_TYPE_MMCHC) && (card->type != MMC_BOOT_TYPE_SDHC) )
+        ? (unsigned int) data_addr :(unsigned int) (data_addr / 512);
 
     /* Set appropriate fields and write the MCI_DATA_CTL register. */
     /* Set ENABLE bit to 1 to enable the data transfer. */
@@ -1762,6 +1794,88 @@
     return MMC_BOOT_E_SUCCESS;
 }
 
+static unsigned int mmc_boot_send_app_cmd(unsigned int rca)
+{
+    struct mmc_boot_command cmd;
+    unsigned int mmc_ret = MMC_BOOT_E_SUCCESS;
+
+    memset( (struct mmc_boot_command *)&cmd, 0,
+            sizeof(struct mmc_boot_command) );
+
+    cmd.cmd_index = CMD55_APP_CMD;
+    cmd.argument = (rca << 16);
+    cmd.cmd_type = MMC_BOOT_CMD_ADDRESS;
+    cmd.resp_type = MMC_BOOT_RESP_R1;
+
+    mmc_ret = mmc_boot_send_command(&cmd);
+
+    if( mmc_ret != MMC_BOOT_E_SUCCESS )
+    {
+        return mmc_ret;
+    }
+
+    return MMC_BOOT_E_SUCCESS;
+}
+
+static unsigned int mmc_boot_sd_init_card(void)
+{
+    unsigned int i,mmc_ret;
+    unsigned int ocr_cmd_arg;
+    struct mmc_boot_command cmd;
+
+    memset( (struct mmc_boot_command *)&cmd, 0,
+            sizeof(struct mmc_boot_command) );
+
+    /* Send CMD8 to set interface condition */
+    for(i=0;i<3;i++)
+    {
+        cmd.cmd_index = CMD8_SEND_IF_COND;
+        cmd.argument = MMC_BOOT_SD_HC_VOLT_SUPPLIED;
+        cmd.cmd_type = MMC_BOOT_CMD_BCAST_W_RESP;
+        cmd.resp_type = MMC_BOOT_RESP_R7;
+
+        mmc_ret = mmc_boot_send_command(&cmd);
+        if( mmc_ret == MMC_BOOT_E_SUCCESS )
+        {
+            if(cmd.resp[0] != MMC_BOOT_SD_HC_VOLT_SUPPLIED)
+                return MMC_BOOT_E_FAILURE;
+            /* Set argument for ACMD41 */
+            ocr_cmd_arg = MMC_BOOT_SD_NEG_OCR | MMC_BOOT_SD_HC_HCS;
+            break;
+        }
+        mdelay(1);
+    }
+
+    /* Send ACMD41 to set operating condition */
+    /* Try for a max of 1 sec as per spec */
+    for(i=0;i<20;i++)
+    {
+        mmc_ret = mmc_boot_send_app_cmd(0);
+        if( mmc_ret != MMC_BOOT_E_SUCCESS )
+        {
+            return mmc_ret;
+        }
+
+        cmd.cmd_index = ACMD41_SEND_OP_COND;
+        cmd.argument = ocr_cmd_arg;
+        cmd.cmd_type = MMC_BOOT_CMD_BCAST_W_RESP;
+        cmd.resp_type = MMC_BOOT_RESP_R3;
+
+        mmc_ret = mmc_boot_send_command(&cmd);
+        if( mmc_ret != MMC_BOOT_E_SUCCESS )
+        {
+            return mmc_ret;
+        }
+        else if (cmd.resp[0] & MMC_BOOT_SD_DEV_READY)
+        {
+            /* Check for HC later */
+            break;
+        }
+        mdelay(50);
+    }
+    return MMC_BOOT_E_SUCCESS;
+}
+
 /*
  * Routine to initialize MMC card. It resets a card to idle state, verify operating
  * voltage and set the card inready state.
@@ -1778,7 +1892,7 @@
         return MMC_BOOT_E_INVAL;
     }
 
-    /* 1. Card Reset - not necessary*/
+    /* 1. Card Reset - CMD0 */
     mmc_return = mmc_boot_reset_cards();
     if( mmc_return != MMC_BOOT_E_SUCCESS )
     {
@@ -1810,6 +1924,14 @@
         {
             dprintf(CRITICAL, "Error No. %d: Failure Initializing MMC Card!\n",
                     mmc_return );
+
+            /* Check for sD card */
+            mmc_return = mmc_boot_sd_init_card();
+            if (mmc_return == MMC_BOOT_E_SUCCESS)
+            {
+                card->type = MMC_BOOT_TYPE_SDHC;
+            }
+
             return mmc_return;
         }
     }while( mmc_retry < host->cmd_retry );
@@ -1824,12 +1946,101 @@
     }
 
     /*Assuming high capacity mmc card*/
-    card->type = MMC_BOOT_TYPE_SDHC;
+    card->type = MMC_BOOT_TYPE_MMCHC;
 
     return MMC_BOOT_E_SUCCESS;
 }
 
 
+static unsigned int mmc_boot_set_sd_bus_width(struct mmc_boot_card* card, unsigned int width)
+{
+    struct mmc_boot_command cmd;
+    unsigned int mmc_ret = MMC_BOOT_E_SUCCESS;
+    unsigned int sd_reg;
+
+    mmc_ret = mmc_boot_send_app_cmd(card->rca);
+
+    if( mmc_ret != MMC_BOOT_E_SUCCESS )
+    {
+        return mmc_ret;
+    }
+
+    memset( (struct mmc_boot_command *)&cmd, 0,
+            sizeof(struct mmc_boot_command) );
+
+    /* Send ACMD6 to set bus width */
+    cmd.cmd_index = ACMD6_SET_BUS_WIDTH;
+    /* 10 => 4 bit wide */
+    cmd.argument = (1<<1);
+    cmd.cmd_type = MMC_BOOT_CMD_ADDRESS;
+    cmd.resp_type = MMC_BOOT_RESP_R1;
+
+    mmc_ret = mmc_boot_send_command(&cmd);
+
+    if( mmc_ret != MMC_BOOT_E_SUCCESS )
+    {
+        return mmc_ret;
+    }
+
+    /* set MCI_CLK accordingly */
+    sd_reg = readl( MMC_BOOT_MCI_CLK );
+    sd_reg &= ~MMC_BOOT_MCI_CLK_WIDEBUS_MODE;
+    if ( width == MMC_BOOT_BUS_WIDTH_1_BIT )
+    {
+        sd_reg |=  MMC_BOOT_MCI_CLK_WIDEBUS_1_BIT;
+    }
+    else if (width == MMC_BOOT_BUS_WIDTH_4_BIT )
+    {
+        sd_reg |=  MMC_BOOT_MCI_CLK_WIDEBUS_4_BIT;
+    }
+    else if (width == MMC_BOOT_BUS_WIDTH_8_BIT )
+    {
+        sd_reg |=  MMC_BOOT_MCI_CLK_WIDEBUS_8_BIT;
+    }
+    writel( sd_reg, MMC_BOOT_MCI_CLK );
+
+    mdelay(10); // Giving some time to card to stabilize.
+
+    return MMC_BOOT_E_SUCCESS;
+}
+
+static unsigned int mmc_boot_set_sd_hs(struct mmc_boot_host* host, struct mmc_boot_card* card)
+{
+    struct mmc_boot_command cmd;
+    unsigned int mmc_ret;
+
+    memset( (struct mmc_boot_command *)&cmd, 0,
+            sizeof(struct mmc_boot_command) );
+
+    /* Send CMD6 function mode 1 to set high speed */
+    /* Not using mode 0 to read current consumption */
+    cmd.cmd_index = CMD6_SWITCH_FUNC;
+    cmd.argument = MMC_BOOT_SD_SWITCH_HS;
+    cmd.cmd_type = MMC_BOOT_CMD_ADDRESS;
+    cmd.resp_type = MMC_BOOT_RESP_R1;
+
+    mmc_ret = mmc_boot_send_command(&cmd);
+
+    if( mmc_ret != MMC_BOOT_E_SUCCESS )
+    {
+        return mmc_ret;
+    }
+
+    mdelay(1);
+
+#ifdef PLATFORM_MSM8X60
+    mmc_ret = mmc_boot_enable_clock( host, MMC_CLK_48MHZ);
+#else
+    mmc_ret = mmc_boot_enable_clock( host, MMC_CLK_50MHZ);
+#endif
+    if( mmc_ret != MMC_BOOT_E_SUCCESS )
+    {
+        return MMC_BOOT_E_CLK_ENABLE_FAIL;
+    }
+
+    return MMC_BOOT_E_SUCCESS;
+}
+
 /*
  * Performs initialization and identification of all the MMC cards connected
  * to the host.
@@ -1838,6 +2049,7 @@
 static unsigned int mmc_boot_init_and_identify_cards( struct mmc_boot_host* host, struct mmc_boot_card* card )
 {
     unsigned int mmc_return = MMC_BOOT_E_SUCCESS;
+    unsigned int status;
 
     /* Basic check */
     if( host == NULL )
@@ -1873,23 +2085,50 @@
         return mmc_return;
     }
 
-    /* set interface speed */
-    mmc_return = mmc_boot_adjust_interface_speed( host, card );
-    if( mmc_return != MMC_BOOT_E_SUCCESS )
+    if(card->type == MMC_BOOT_TYPE_SDHC)
     {
-        dprintf(CRITICAL, "Error No.%d: Error adjusting interface speed!\n",
-                mmc_return );
+        mmc_return = mmc_boot_set_sd_hs(host, card);
+        if(mmc_return != MMC_BOOT_E_SUCCESS)
+        {
+            return mmc_return;
+        }
+
+        mmc_return = mmc_boot_set_sd_bus_width(card, MMC_BOOT_BUS_WIDTH_4_BIT);
+        if(mmc_return != MMC_BOOT_E_SUCCESS)
+        {
+            return mmc_return;
+        }
+    }
+    else
+    {
+        /* set interface speed */
+        mmc_return = mmc_boot_adjust_interface_speed( host, card );
+        if( mmc_return != MMC_BOOT_E_SUCCESS )
+        {
+            dprintf(CRITICAL, "Error No.%d: Error adjusting interface speed!\n",
+                    mmc_return );
+            return mmc_return;
+        }
+
+        /* enable wide bus */
+        mmc_return = mmc_boot_set_bus_width( card, MMC_BOOT_BUS_WIDTH_4_BIT );
+        if( mmc_return != MMC_BOOT_E_SUCCESS )
+        {
+            dprintf(CRITICAL, "Error No.%d: Failure to set wide bus for Card(RCA:%x)\n",
+                    mmc_return, card->rca );
+            return mmc_return;
+        }
+    }
+
+    /* Just checking whether we're in TRAN state after changing speed and bus width */
+    mmc_return = mmc_boot_get_card_status(card, 1, &status);
+    if(mmc_return != MMC_BOOT_E_SUCCESS)
+    {
         return mmc_return;
     }
 
-    /* enable wide bus */
-    mmc_return = mmc_boot_set_bus_width( card, MMC_BOOT_BUS_WIDTH_4_BIT );
-    if( mmc_return != MMC_BOOT_E_SUCCESS )
-    {
-        dprintf(CRITICAL, "Error No.%d: Failure to set wide bus for Card(RCA:%x)\n",
-                mmc_return, card->rca );
-        return mmc_return;
-    }
+    if(MMC_BOOT_CARD_STATUS(status) != MMC_BOOT_TRAN_STATE)
+        return MMC_BOOT_E_FAILURE;
 
     return MMC_BOOT_E_SUCCESS;
 }
diff --git a/target/msm7630_surf/init.c b/target/msm7630_surf/init.c
index 2e7bdd9..371ad1e 100644
--- a/target/msm7630_surf/init.c
+++ b/target/msm7630_surf/init.c
@@ -88,7 +88,7 @@
 	},
 	{
 		.start = DIFF_START_ADDR,
-		.length = 115 /* In MB */,
+		.length = 120 /* In MB */,
 		.name = "system",
 	},
 	{
@@ -205,8 +205,8 @@
 			base_addr = mmc_sdc_base[slot-1];
 			if(mmc_boot_main(slot, base_addr))
 			{
-//				dprintf(CRITICAL, "mmc init failed!");
-//				ASSERT(0);
+				dprintf(CRITICAL, "mmc init failed!");
+				ASSERT(0);
 			}
 		}
 		return;
diff --git a/target/msm7630_surf/tools/makefile b/target/msm7630_surf/tools/makefile
index 4082eee..db458e6 100644
--- a/target/msm7630_surf/tools/makefile
+++ b/target/msm7630_surf/tools/makefile
@@ -35,7 +35,7 @@
 	rm -f $(APPSBOOTHEADER_DIR)/emmc_appsboothd.mbn
 
 emmc_appsboothd.mbn: mkheader $(OUTBIN)
-	$(SRC_DIR)/mkheader $(OUTBIN) $(APPSBOOTHEADER_DIR)/emmc_appsboothd.mbn unified-boot
+	$(SRC_DIR)/mkheader $(OUTBIN) $(APPSBOOTHEADER_DIR)/emmc_appsboothd.mbn
 
 mkheader: $(SRC_DIR)/mkheader.c
 	${COMPILER} -DMEMBASE=$(MEMBASE) $(SRC_DIR)/mkheader.c -o $(SRC_DIR)/mkheader
diff --git a/target/msm7630_surf/tools/mkheader.c b/target/msm7630_surf/tools/mkheader.c
index 852443c..c7ad742 100644
--- a/target/msm7630_surf/tools/mkheader.c
+++ b/target/msm7630_surf/tools/mkheader.c
@@ -66,7 +66,7 @@
 		magic[11] = 0x00000001; /* cookie version */
 		magic[12] = 0x00000002; /* file formats */
 		magic[13] = 0x00000000;
-		magic[14] = 0x00500000; /* not setting size for boot.img */
+		magic[14] = 0x00000000; /* not setting size for boot.img */
 		magic[15] = 0x00000000;
 		magic[16] = 0x00000000;
 		magic[17] = 0x00000000;
diff --git a/target/qsd8250_ffa/init.c b/target/qsd8250_ffa/init.c
index 6a99bf9..ddf91d8 100644
--- a/target/qsd8250_ffa/init.c
+++ b/target/qsd8250_ffa/init.c
@@ -61,7 +61,7 @@
 	},
 	{
 		.start = DIFF_START_ADDR,
-		.length = 95 /* In MB */,
+		.length = 100 /* In MB */,
 		.name = "system",
 	},
 	{
diff --git a/target/qsd8250_surf/init.c b/target/qsd8250_surf/init.c
index 9aebf05..eccf1c5 100644
--- a/target/qsd8250_surf/init.c
+++ b/target/qsd8250_surf/init.c
@@ -61,7 +61,7 @@
 	},
 	{
 		.start = DIFF_START_ADDR,
-		.length = 95 /* In MB */,
+		.length = 100 /* In MB */,
 		.name = "system",
 	},
 	{
diff --git a/target/qsd8650a_st1x/init.c b/target/qsd8650a_st1x/init.c
index 5d1cc63..68ef80a 100644
--- a/target/qsd8650a_st1x/init.c
+++ b/target/qsd8650a_st1x/init.c
@@ -61,21 +61,21 @@
 	},
 	{
 		.start = 40,
-		.length = 760 /* 95MB */,
+		.length = 800 /* 100MB */,
 		.name = "system",
 	},
 	{
-		.start = 800,
+		.start = 840,
 		.length = 240 /* 30MB */,
 		.name = "cache",
 	},
 	{
-		.start = 1040,
+		.start = 1080,
 		.length = 3 /* 384KB */,
 		.name = "misc",
 	},
 	{
-		.start = 1043,
+		.start = 1083,
 		.length = VARIABLE_LENGTH,
 		.name = "userdata",
 	},
