Merge "platform: project: msm8996: Add support for 6gb ddr"
diff --git a/dev/qpnp_haptic/qpnp_haptic.c b/dev/qpnp_haptic/qpnp_haptic.c
index 51de2e5..a4e3820 100644
--- a/dev/qpnp_haptic/qpnp_haptic.c
+++ b/dev/qpnp_haptic/qpnp_haptic.c
@@ -87,6 +87,9 @@
 {
 	struct qpnp_hap vib_config = {0};
 
+	if(!target_is_pmi_enabled())
+		return;
+
 	get_vibration_type(&vib_config);
 	/* Configure the ACTUATOR TYPE register as ERM*/
 	pmic_spmi_reg_mask_write(QPNP_HAP_ACT_TYPE_REG,
@@ -149,6 +152,9 @@
 /* Turn off vibrator */
 void pm_vib_turn_off(void)
 {
+	if(!target_is_pmi_enabled())
+		return;
+
 	/* Disable control register */
 	pmic_spmi_reg_mask_write(QPNP_HAP_EN_CTL_REG,
 					QPNP_HAP_PLAY_MASK, QPNP_HAP_PLAY_DIS);
diff --git a/dev/qpnp_wled/qpnp_wled.c b/dev/qpnp_wled/qpnp_wled.c
index 9282a7b..4267372 100644
--- a/dev/qpnp_wled/qpnp_wled.c
+++ b/dev/qpnp_wled/qpnp_wled.c
@@ -33,6 +33,7 @@
 #include <qpnp_wled.h>
 #include <pm8x41_wled.h>
 #include <qtimer.h>
+#include <target.h>
 
 static int qpnp_wled_avdd_target_voltages[NUM_SUPPORTED_AVDD_VOLTAGES] = {
 	7900, 7600, 7300, 6400, 6100, 5800,
@@ -598,6 +599,9 @@
 	int rc;
 	struct qpnp_wled *wled;
 
+	if(!target_is_pmi_enabled())
+		return ERR_NOT_FOUND;
+
 	wled = malloc(sizeof(struct qpnp_wled));
 	if (!wled)
 		return ERR_NO_MEMORY;
diff --git a/include/target.h b/include/target.h
index 62369ed..a9a1eea 100644
--- a/include/target.h
+++ b/include/target.h
@@ -95,6 +95,7 @@
 int target_get_qmp_regsize();
 uint32_t target_ddr_cfg_reg();
 
+bool target_is_pmi_enabled(void);
 #if PON_VIB_SUPPORT
 void get_vibration_type();
 #endif
diff --git a/platform/msm8952/include/platform/iomap.h b/platform/msm8952/include/platform/iomap.h
index 5b9bab8..6f4b28f 100644
--- a/platform/msm8952/include/platform/iomap.h
+++ b/platform/msm8952/include/platform/iomap.h
@@ -164,6 +164,7 @@
  * and size in MB
  */
 #define RPMB_SND_RCV_BUF            0xA0000000
+#define RPMB_SND_RCV_BUF_512        0x9FE00000
 #define RPMB_SND_RCV_BUF_SZ         0x1
 
 /* QSEECOM: Secure app region notification */
diff --git a/platform/msm8952/platform.c b/platform/msm8952/platform.c
index ab85001..77b8f8a 100644
--- a/platform/msm8952/platform.c
+++ b/platform/msm8952/platform.c
@@ -66,11 +66,22 @@
 	{    MSM_IOMAP_BASE,        MSM_IOMAP_BASE,          MSM_IOMAP_SIZE,         IOMAP_MEMORY},
 	{    APPS_SS_BASE,          APPS_SS_BASE,            APPS_SS_SIZE,           IOMAP_MEMORY},
 	{    MSM_SHARED_IMEM_BASE,  MSM_SHARED_IMEM_BASE,    1,                      COMMON_MEMORY},
-	{    SCRATCH_ADDR,          SCRATCH_ADDR,            511,                    SCRATCH_MEMORY},
+	{    SCRATCH_ADDR,          SCRATCH_ADDR,            SCRATCH_SIZE,           SCRATCH_MEMORY},
 	{    MIPI_FB_ADDR,          MIPI_FB_ADDR,            20,                     COMMON_MEMORY},
 	{    RPMB_SND_RCV_BUF,      RPMB_SND_RCV_BUF,        RPMB_SND_RCV_BUF_SZ,    IOMAP_MEMORY},
 };
 
+static mmu_section_t mmu_section_table_512[] = {
+/*           Physical addr,         Virtual addr,            Size (in MB),     Flags */
+	{    MEMBASE,               MEMBASE,                 (MEMSIZE / MB),         LK_MEMORY},
+	{    MSM_IOMAP_BASE,        MSM_IOMAP_BASE,          MSM_IOMAP_SIZE,         IOMAP_MEMORY},
+	{    APPS_SS_BASE,          APPS_SS_BASE,            APPS_SS_SIZE,           IOMAP_MEMORY},
+	{    MSM_SHARED_IMEM_BASE,  MSM_SHARED_IMEM_BASE,    1,                      COMMON_MEMORY},
+	{    SCRATCH_ADDR_512,      SCRATCH_ADDR_512,        SCRATCH_SIZE_512,       SCRATCH_MEMORY},
+	{    MIPI_FB_ADDR,          MIPI_FB_ADDR,            20,                     COMMON_MEMORY},
+	{    RPMB_SND_RCV_BUF_512,  RPMB_SND_RCV_BUF_512,    RPMB_SND_RCV_BUF_SZ,    IOMAP_MEMORY},
+};
+
 void platform_early_init(void)
 {
 	board_init();
@@ -111,9 +122,10 @@
 {
 	uint32_t i;
 	uint32_t sections;
-	uint32_t table_size = ARRAY_SIZE(mmu_section_table);
+	uint32_t table_size;
 	uint32_t ddr_start = get_ddr_start();
 	uint32_t smem_addr = platform_get_smem_base_addr();
+	mmu_section_t *table_addr;
 
 	/*Mapping the ddr start address for loading the kernel about 90 MB*/
 	sections = 90;
@@ -128,19 +140,32 @@
 
 	/* Configure the MMU page entries for memory read from the
 	   mmu_section_table */
+	if(smem_get_ddr_size() > 0x20000000)
+	{
+		table_addr = mmu_section_table;
+		table_size = ARRAY_SIZE(mmu_section_table);
+	}
+	else
+	{
+		table_addr = mmu_section_table_512;
+		table_size = ARRAY_SIZE(mmu_section_table_512);
+	}
+
 	for (i = 0; i < table_size; i++)
 	{
-		sections = mmu_section_table[i].num_of_sections;
+		sections = table_addr->num_of_sections;
 
 		while (sections--)
 		{
-			arm_mmu_map_section(mmu_section_table[i].paddress +
+			arm_mmu_map_section(table_addr->paddress +
 								sections * MB,
-								mmu_section_table[i].vaddress +
+								table_addr->vaddress +
 								sections * MB,
-								mmu_section_table[i].flags);
+								table_addr->flags);
 		}
+		table_addr++;
 	}
+
 }
 
 addr_t platform_get_virt_to_phys_mapping(addr_t virt_addr)
diff --git a/project/msm8952.mk b/project/msm8952.mk
index d7d74b9..b6f5dd6 100644
--- a/project/msm8952.mk
+++ b/project/msm8952.mk
@@ -23,9 +23,13 @@
 ENABLE_SECAPP_LOADER := 1
 ENABLE_RPMB_SUPPORT := 1
 #enable fbcon display menu
+ifneq (,$(findstring DISPLAY_SPLASH_SCREEN,$(DEFINES)))
 ENABLE_FBCON_DISPLAY_MSG := 1
-endif
-endif
+else
+ENABLE_FBCON_DISPLAY_MSG := 0
+endif #DISPLAY_SPLASH_SCREEN END
+endif #ENABLE_VBOOT_MOTA_SUPPORT END
+endif #VERIFIED_BOOT
 
 
 
diff --git a/target/init.c b/target/init.c
index a0e0e10..ff2869b 100644
--- a/target/init.c
+++ b/target/init.c
@@ -242,6 +242,11 @@
 {
 }
 
+__WEAK bool target_is_pmi_enabled(void)
+{
+	return 1;
+}
+
 /* Default CFG delay value */
 __WEAK uint32_t target_ddr_cfg_val()
 {
@@ -358,8 +363,11 @@
 		case PMIC_IS_PMI8950:
 		case PMIC_IS_PMI8994:
 		case PMIC_IS_PMI8996:
-			value = REG_READ(PMIC_SLAVE_ID|
-			BAT_IF_BAT_PRES_STATUS);
+			if(target_is_pmi_enabled())
+			{
+				value = REG_READ(PMIC_SLAVE_ID|
+						BAT_IF_BAT_PRES_STATUS);
+			}
 			break;
 		default:
 			dprintf(CRITICAL, "ERROR: Couldn't get the pmic type\n");
@@ -391,10 +399,13 @@
 		case PMIC_IS_PMI8950:
 		case PMIC_IS_PMI8994:
 		case PMIC_IS_PMI8996:
-			if (!pm_fg_usr_get_vbat(1, &vbat)) {
-				vbat = vbat*1000; //uv
-			} else {
-				dprintf(CRITICAL, "ERROR: Get battery voltage failed!!!\n");
+			if(target_is_pmi_enabled())
+			{
+				if (!pm_fg_usr_get_vbat(1, &vbat)) {
+					vbat = vbat*1000; //uv
+				} else {
+					dprintf(CRITICAL, "ERROR: Get battery voltage failed!!!\n");
+				}
 			}
 			break;
 		default:
diff --git a/target/msm8952/init.c b/target/msm8952/init.c
index 77d685c..112a3c8 100644
--- a/target/msm8952/init.c
+++ b/target/msm8952/init.c
@@ -292,21 +292,25 @@
 
 	spmi_init(PMIC_ARB_CHANNEL_NUM, PMIC_ARB_OWNER_ID);
 
-	if(platform_is_msm8937() || platform_is_msm8917())
+	if(target_is_pmi_enabled())
 	{
-		uint8_t pmi_rev = 0;
-		uint32_t pmi_type = 0;
-
-		pmi_type = board_pmic_target(1) & 0xffff;
-		if(pmi_type == PMIC_IS_PMI8950)
+		if(platform_is_msm8937() || platform_is_msm8917())
 		{
-			/* read pmic spare register for rev */
-			pmi_rev = pmi8950_get_pmi_subtype();
-			if(pmi_rev)
-				board_pmi_target_set(1,pmi_rev);
+			uint8_t pmi_rev = 0;
+			uint32_t pmi_type = 0;
+
+			pmi_type = board_pmic_target(1) & 0xffff;
+			if(pmi_type == PMIC_IS_PMI8950)
+			{
+				/* read pmic spare register for rev */
+				pmi_rev = pmi8950_get_pmi_subtype();
+				if(pmi_rev)
+					board_pmi_target_set(1,pmi_rev);
+			}
 		}
 	}
 
+
 	target_keystatus();
 
 	target_sdc_init();
@@ -317,12 +321,14 @@
 	}
 
 #if LONG_PRESS_POWER_ON
-	shutdown_detect();
+	if(target_is_pmi_enabled())
+		shutdown_detect();
 #endif
 
 #if PON_VIB_SUPPORT
 	/* turn on vibrator to indicate that phone is booting up to end user */
-	vib_timed_turn_on(VIBRATE_TIME);
+	if(target_is_pmi_enabled())
+		vib_timed_turn_on(VIBRATE_TIME);
 #endif
 
 	if (target_use_signed_kernel())
@@ -492,7 +498,11 @@
 	else
 		reset_type = PON_PSHOLD_HARD_RESET;
 
-	pm8994_reset_configure(reset_type);
+	if(target_is_pmi_enabled())
+		pm8994_reset_configure(reset_type);
+	else
+		pm8x41_reset_configure(reset_type);
+
 
 	ret = scm_halt_pmic_arbiter();
 	if (ret)
@@ -527,8 +537,12 @@
 {
 	uint8_t pon_reason = pm8x41_get_pon_reason();
 	uint8_t is_cold_boot = pm8x41_get_is_cold_boot();
-	bool usb_present_sts = !(USBIN_UV_RT_STS &
-				pm8x41_reg_read(SMBCHG_USB_RT_STS));
+	bool usb_present_sts = 1;	/* don't care by default */
+
+	if(target_is_pmi_enabled())
+		usb_present_sts = (!(USBIN_UV_RT_STS &
+						 pm8x41_reg_read(SMBCHG_USB_RT_STS)));
+
 	dprintf(INFO, "%s : pon_reason is:0x%x cold_boot:%d usb_sts:%d\n", __func__,
 		pon_reason, is_cold_boot, usb_present_sts);
 	/* In case of fastboot reboot,adb reboot or if we see the power key
@@ -548,7 +562,8 @@
 void target_uninit(void)
 {
 #if PON_VIB_SUPPORT
-	turn_off_vib_early();
+	if(target_is_pmi_enabled())
+		turn_off_vib_early();
 #endif
 	mmc_put_card_to_sleep(dev);
 	sdhci_mode_disable(&dev->host);
@@ -741,6 +756,15 @@
 	crypto_init_params(&ce_params);
 }
 
+bool target_is_pmi_enabled(void)
+{
+	if(platform_is_msm8917() &&
+	   (board_hardware_subtype() ==	HW_PLATFORM_SUBTYPE_SNAP_NOPMI))
+		return 0;
+	else
+		return 1;
+}
+
 uint32_t target_get_pmic()
 {
 	return PMIC_IS_PMI8950;
diff --git a/target/msm8952/meminfo.c b/target/msm8952/meminfo.c
index bb23004..7d32c85 100644
--- a/target/msm8952/meminfo.c
+++ b/target/msm8952/meminfo.c
@@ -76,10 +76,16 @@
 
 void *target_get_scratch_address(void)
 {
-	return ((void *)SCRATCH_ADDR);
+	if(smem_get_ddr_size() > 0x20000000)
+		return ((void *)SCRATCH_ADDR);
+	else
+		return ((void *)SCRATCH_ADDR_512);
 }
 
 unsigned target_get_max_flash_size(void)
 {
-	return (511 * 1024 * 1024);
+	if(smem_get_ddr_size() > 0x20000000)
+		return (SCRATCH_SIZE * 1024 * 1024);
+	else
+		return (SCRATCH_SIZE_512 * 1024 * 1024);
 }
diff --git a/target/msm8952/rules.mk b/target/msm8952/rules.mk
index e6ecd1b..d50f8d9 100644
--- a/target/msm8952/rules.mk
+++ b/target/msm8952/rules.mk
@@ -13,6 +13,10 @@
 
 BASE_ADDR        := 0x80000000
 SCRATCH_ADDR     := 0xA0100000
+SCRATCH_ADDR_512 := 0x91400000
+
+SCRATCH_SIZE     := 511
+SCRATCH_SIZE_512 := 234
 
 DEFINES += DISPLAY_SPLASH_SCREEN=1
 DEFINES += DISPLAY_TYPE_MIPI=1
@@ -36,7 +40,11 @@
 	MEMSIZE=$(MEMSIZE) \
 	MEMBASE=$(MEMBASE) \
 	BASE_ADDR=$(BASE_ADDR) \
-	SCRATCH_ADDR=$(SCRATCH_ADDR)
+	SCRATCH_ADDR=$(SCRATCH_ADDR) \
+	SCRATCH_ADDR_512=$(SCRATCH_ADDR_512) \
+	SCRATCH_SIZE=$(SCRATCH_SIZE) \
+	SCRATCH_SIZE_512=$(SCRATCH_SIZE_512)
+
 
 
 OBJS += \
diff --git a/target/msm8996/init.c b/target/msm8996/init.c
index dc3186d..f9e63ee 100644
--- a/target/msm8996/init.c
+++ b/target/msm8996/init.c
@@ -370,7 +370,8 @@
 		case HW_PLATFORM_MTP:
 		case HW_PLATFORM_FLUID:
 		case HW_PLATFORM_QRD:
-			pm_appsbl_chg_check_weak_battery_status(1);
+			if(target_is_pmi_enabled())
+				pm_appsbl_chg_check_weak_battery_status(1);
 			break;
 		default:
 			/* Charging not supported */