Merge "[msm7k]: Fix ACPU clock initialization"
diff --git a/AndroidBoot.mk b/AndroidBoot.mk
index 13316ac..fbe0527 100644
--- a/AndroidBoot.mk
+++ b/AndroidBoot.mk
@@ -3,6 +3,9 @@
TARGET_BOOTLOADER := $(PRODUCT_OUT)/appsboot.mbn
BOOTLOADER_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/BOOTLOADER_OBJ
+# Force GCC 4.4.0 crosstool chain for Android builds
+CROSS_TOOL := ../../../prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-
+
# Remove bootloader binary to trigger recompile when source changes
appsbootldr_clean:
$(hide) rm -f $(TARGET_BOOTLOADER)
@@ -12,7 +15,19 @@
mkdir -p $(BOOTLOADER_OUT)
+TARGET_EMMC := 0
ifeq ($(TARGET_USERIMAGES_USE_EXT2),true)
+ TARGET_EMMC := 1
+endif
+ifeq ($(TARGET_USERIMAGES_USE_EXT3),true)
+ TARGET_EMMC := 1
+endif
+ifeq ($(TARGET_USERIMAGES_USE_EXT4),true)
+ TARGET_EMMC := 1
+endif
+
+
+ifeq ($(TARGET_EMMC),1)
TARGET_BOOTLOADER_EMMC := $(PRODUCT_OUT)/EMMCBOOT.MBN
BOOTLOADER_EMMC_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/BOOTLOADER_EMMC_OBJ
@@ -24,13 +39,13 @@
mkdir -p $(BOOTLOADER_EMMC_OUT)
$(TARGET_BOOTLOADER): appsbootldr_clean emmc_appsbootldr_clean $(BOOTLOADER_OUT) $(BOOTLOADER_EMMC_OUT)
- $(MAKE) -C bootable/bootloader/lk BOOTLOADER_OUT=../../../$(BOOTLOADER_OUT) $(TARGET_PRODUCT)
- $(MAKE) -C bootable/bootloader/lk BOOTLOADER_OUT=../../../$(BOOTLOADER_EMMC_OUT) $(TARGET_PRODUCT) EMMC_BOOT=1
+ $(MAKE) -C bootable/bootloader/lk TOOLCHAIN_PREFIX=$(CROSS_TOOL) BOOTLOADER_OUT=../../../$(BOOTLOADER_OUT) $(TARGET_PRODUCT)
+ $(MAKE) -C bootable/bootloader/lk TOOLCHAIN_PREFIX=$(CROSS_TOOL) BOOTLOADER_OUT=../../../$(BOOTLOADER_EMMC_OUT) $(TARGET_PRODUCT) EMMC_BOOT=1
else
$(TARGET_BOOTLOADER): appsbootldr_clean $(BOOTLOADER_OUT)
- $(MAKE) -C bootable/bootloader/lk BOOTLOADER_OUT=../../../$(BOOTLOADER_OUT) $(TARGET_PRODUCT)
+ $(MAKE) -C bootable/bootloader/lk TOOLCHAIN_PREFIX=$(CROSS_TOOL) BOOTLOADER_OUT=../../../$(BOOTLOADER_OUT) $(TARGET_PRODUCT)
endif
@@ -47,5 +62,5 @@
$(TARGET_NANDWRITE): nandwrite_clean $(NANDWRITE_OUT)
@echo $(TARGET_PRODUCT)_nandwrite
- $(MAKE) -C bootable/bootloader/lk BOOTLOADER_OUT=../../../$(NANDWRITE_OUT) $(TARGET_PRODUCT)_nandwrite BUILD_NANDWRITE=1
+ $(MAKE) -C bootable/bootloader/lk TOOLCHAIN_PREFIX=$(CROSS_TOOL) BOOTLOADER_OUT=../../../$(NANDWRITE_OUT) $(TARGET_PRODUCT)_nandwrite BUILD_NANDWRITE=1
diff --git a/platform/msm_shared/include/mmc.h b/platform/msm_shared/include/mmc.h
index 8f2c4e7..1d230c1 100755
--- a/platform/msm_shared/include/mmc.h
+++ b/platform/msm_shared/include/mmc.h
@@ -479,6 +479,7 @@
#define MMC_BOOT_TYPE_SDHC 1
#define MMC_BOOT_TYPE_SDIO 2
#define MMC_BOOT_TYPE_MMCHC 3
+#define MMC_BOOT_TYPE_STD_MMC 4
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 5451a59..ecdd90f 100644
--- a/platform/msm_shared/mmc.c
+++ b/platform/msm_shared/mmc.c
@@ -189,10 +189,11 @@
{
card->rd_timeout_ns = 100000000;
}
- else if( card->type == MMC_BOOT_TYPE_STD_SD )
+ else if( (card->type == MMC_BOOT_TYPE_STD_SD) || (card->type == MMC_BOOT_TYPE_STD_MMC) )
{
timeout_ns = 10 * ( (card->csd.taac_ns ) +
( card->csd.nsac_clk_cycle / (host->mclk_rate/1000000000)));
+ card->rd_timeout_ns = timeout_ns;
}
else
{
@@ -220,11 +221,12 @@
{
card->wr_timeout_ns = 100000000;
}
- else if( card->type == MMC_BOOT_TYPE_STD_SD )
+ else if( card->type == MMC_BOOT_TYPE_STD_SD || (card->type == MMC_BOOT_TYPE_STD_MMC) )
{
timeout_ns = 10 * ( ( card->csd.taac_ns ) +
( card->csd.nsac_clk_cycle / ( host->mclk_rate/1000000000 ) ) );
timeout_ns = timeout_ns << card->csd.r2w_factor;
+ card->wr_timeout_ns = timeout_ns;
}
else
{
@@ -639,6 +641,14 @@
return MMC_BOOT_E_CARD_BUSY;
}
+ if(mmc_resp & MMC_BOOT_OCR_SEC_MODE)
+ {
+ card->type = MMC_BOOT_TYPE_MMCHC;
+ }
+ else
+ {
+ card->type = MMC_BOOT_TYPE_STD_MMC;
+ }
return MMC_BOOT_E_SUCCESS;
}
@@ -704,7 +714,7 @@
/* CMD3 Format:
* [31:0] stuff bits
*/
- if(card->type == MMC_BOOT_TYPE_SDHC)
+ if(card->type == MMC_BOOT_TYPE_SDHC || card->type == MMC_BOOT_TYPE_STD_SD)
{
cmd.cmd_index = CMD3_SEND_RELATIVE_ADDR;
cmd.argument = 0;
@@ -819,7 +829,7 @@
/* If we are deselecting card, we do not get response */
if( rca == card->rca && rca)
{
- if(card->type == MMC_BOOT_TYPE_SDHC)
+ if(card->type == MMC_BOOT_TYPE_SDHC || card->type == MMC_BOOT_TYPE_STD_SD)
cmd.resp_type = MMC_BOOT_RESP_R1B;
else
cmd.resp_type = MMC_BOOT_RESP_R1;
@@ -1184,7 +1194,6 @@
mmc_width = width-1;
}
- mmc_boot_send_ext_cmd (card, ext_csd_buf);
do
{
@@ -1193,8 +1202,7 @@
{
return mmc_ret;
}
- }while( (mmc_ret == MMC_BOOT_E_SUCCESS) &&
- (MMC_BOOT_CARD_STATUS(status) == MMC_BOOT_PROG_STATE));
+ }while(MMC_BOOT_CARD_STATUS(status) == MMC_BOOT_PROG_STATE);
if(MMC_BOOT_CARD_STATUS(status) != MMC_BOOT_TRAN_STATE)
return MMC_BOOT_E_FAILURE;
@@ -1543,9 +1551,21 @@
static unsigned int mmc_boot_adjust_interface_speed( struct mmc_boot_host* host,
struct mmc_boot_card* card )
{
- int mmc_ret;
+ unsigned int mmc_ret = MMC_BOOT_E_SUCCESS;
+ unsigned int status;
- mmc_boot_send_ext_cmd (card, ext_csd_buf);
+
+ do
+ {
+ mmc_ret = mmc_boot_get_card_status(card, 1, &status);
+ if(mmc_ret != MMC_BOOT_E_SUCCESS)
+ {
+ return mmc_ret;
+ }
+ }while(MMC_BOOT_CARD_STATUS(status) == MMC_BOOT_PROG_STATE);
+
+ if(MMC_BOOT_CARD_STATUS(status) != MMC_BOOT_TRAN_STATE)
+ return MMC_BOOT_E_FAILURE;
/* 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);
@@ -1850,7 +1870,7 @@
return MMC_BOOT_E_SUCCESS;
}
-static unsigned int mmc_boot_sd_init_card(void)
+static unsigned int mmc_boot_sd_init_card(struct mmc_boot_card* card)
{
unsigned int i,mmc_ret;
unsigned int ocr_cmd_arg;
@@ -1901,7 +1921,15 @@
}
else if (cmd.resp[0] & MMC_BOOT_SD_DEV_READY)
{
- /* Check for HC later */
+ /* Check for HC */
+ if(cmd.resp[0] & (1 << 30))
+ {
+ card->type = MMC_BOOT_TYPE_SDHC;
+ }
+ else
+ {
+ card->type = MMC_BOOT_TYPE_STD_SD;
+ }
break;
}
mdelay(50);
@@ -1959,12 +1987,7 @@
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;
- }
-
+ mmc_return = mmc_boot_sd_init_card(card);
return mmc_return;
}
}while( mmc_retry < host->cmd_retry );
@@ -1977,10 +2000,6 @@
Initialization not completed\n", mmc_return );
return MMC_BOOT_E_CARD_BUSY;
}
-
- /*Assuming high capacity mmc card*/
- card->type = MMC_BOOT_TYPE_MMCHC;
-
return MMC_BOOT_E_SUCCESS;
}
@@ -2118,7 +2137,7 @@
return mmc_return;
}
- if(card->type == MMC_BOOT_TYPE_SDHC)
+ if(card->type == MMC_BOOT_TYPE_SDHC || card->type == MMC_BOOT_TYPE_STD_SD)
{
mmc_return = mmc_boot_set_sd_hs(host, card);
if(mmc_return != MMC_BOOT_E_SUCCESS)