Merge "lib: libc: correct strlcat implementation"
diff --git a/app/aboot/fastboot_test.c b/app/aboot/fastboot_test.c
index 64c0f7f..70bc64e 100644
--- a/app/aboot/fastboot_test.c
+++ b/app/aboot/fastboot_test.c
@@ -88,6 +88,13 @@
 	dprintf(INFO, "Running RPMB test case, please make sure RPMB key is provisioned ...\n");
 	struct device_info *write_info = memalign(PAGE_SIZE, 4096);
 	struct device_info *read_info = memalign(PAGE_SIZE, 4096);
+
+	if((write_info == NULL)||(read_info == NULL))
+	{
+		dprintf(CRITICAL, "Failed to allocate memory for devinfo %s %d \n",__FUNCTION__,__LINE__);
+		goto err;
+	}
+
 	if((read_device_info_rpmb((void*) read_info, PAGE_SIZE)) < 0)
 		dprintf(INFO, "RPMB READ TEST : [ FAIL ]\n");
 
@@ -104,6 +111,7 @@
 	else
 		dprintf(INFO, "RPMB READ/WRITE TEST: [ FAIL ]\n");
 
+err:
 	free(read_info);
 	free(write_info);
 #endif
diff --git a/dev/qpnp_wled/qpnp_wled.c b/dev/qpnp_wled/qpnp_wled.c
index 9cedbb7..3aa41f8 100644
--- a/dev/qpnp_wled/qpnp_wled.c
+++ b/dev/qpnp_wled/qpnp_wled.c
@@ -522,7 +522,7 @@
 			wled->strings[i] = i;
 
 	wled->ibb_bias_active = false;
-	wled->lab_fast_precharge = true;
+	wled->lab_fast_precharge = false;
 	wled->ibb_pwrup_dly_ms = config->pwr_up_delay;
 	wled->ibb_pwrdn_dly_ms = config->pwr_down_delay;
 	wled->ibb_discharge_en = config->ibb_discharge_en;
diff --git a/platform/msm_shared/dme.c b/platform/msm_shared/dme.c
index c6d651d..c98730b 100644
--- a/platform/msm_shared/dme.c
+++ b/platform/msm_shared/dme.c
@@ -493,13 +493,20 @@
 		return -UFS_FAILURE;
 	}
 
-	dev->lun_cfg[index].logical_blk_cnt = BE64(desc->logical_blk_cnt);
-
-	dev->lun_cfg[index].erase_blk_size = BE32(desc->erase_blk_size);
-
 	// use only the lower 32 bits for rpmb partition size
 	if (index == UFS_WLUN_RPMB)
 		dev->rpmb_num_blocks = BE32(desc->logical_blk_cnt >> 32);
+	/*
+	 rpmb will not use blk count and blk size from lun_cfg as it has
+	 its own entries in ufs_dev structure
+	*/
+	else
+	{
+		dev->lun_cfg[index].logical_blk_cnt = BE64(desc->logical_blk_cnt);
+		dev->lun_cfg[index].erase_blk_size = BE32(desc->erase_blk_size);
+	}
+
+
 
 	return UFS_SUCCESS;
 }
diff --git a/platform/msm_shared/partition_parser.c b/platform/msm_shared/partition_parser.c
index 65d58d4..22be711 100644
--- a/platform/msm_shared/partition_parser.c
+++ b/platform/msm_shared/partition_parser.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2011-2016, The Linux Foundation. All rights reserved.
 
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -454,6 +454,7 @@
 static unsigned int write_mbr(uint32_t size, uint8_t *mbrImage, uint32_t block_size)
 {
 	unsigned int ret;
+	uint64_t device_density;
 
 	/* Verify that passed in block is a valid MBR */
 	ret = partition_verify_mbr_signature(size, mbrImage);
@@ -461,6 +462,15 @@
 		goto end;
 	}
 
+	device_density = mmc_get_device_capacity();
+
+	/* Erasing the eMMC card before writing */
+	ret = mmc_erase_card(0x00000000, device_density);
+	if (ret) {
+		dprintf(CRITICAL, "Failed to erase the eMMC card\n");
+		goto end;
+	}
+
 	/* Write the MBR/EBR to mmc */
 	ret = write_mbr_in_blocks(size, mbrImage, block_size);
 	if (ret) {
diff --git a/platform/msm_shared/rpm-glink.c b/platform/msm_shared/rpm-glink.c
index 2635cd1..f564480 100644
--- a/platform/msm_shared/rpm-glink.c
+++ b/platform/msm_shared/rpm-glink.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2015-2016 The Linux Foundation. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -59,6 +59,19 @@
 
 extern glink_err_type glink_wait_link_down(glink_handle_type handle);
 
+static void rpmdatacpy(uint32_t * dst, uint32_t *src, uint32_t size)
+{
+	if(size%4)
+		ASSERT(0);
+	size = size/4;
+
+	while (size >0)
+	{
+		*dst++ = *src++;
+		size--;
+	}
+}
+
 glink_err_type rpm_glink_send_data(uint32_t *data, uint32_t len, msg_type type)
 {
 	rpm_req req;
@@ -198,7 +211,7 @@
 		return_buffer = vprovider(buffer, offset, &return_size);
 		if(return_buffer)
 		{
-			memcpy(rx_buffer+offset,return_buffer, return_size);
+			rpmdatacpy((uint32_t *)(rx_buffer + offset),(uint32_t *)return_buffer, return_size);
 			offset += return_size;
 		}
 	} while(return_buffer);
@@ -241,7 +254,7 @@
 		return_buffer = vprovider(buffer, offset, &return_size);
 		if(return_buffer)
 		{
-			memcpy(rx_buffer+offset,return_buffer, return_size);
+			rpmdatacpy((uint32_t *)(rx_buffer + offset),(uint32_t *)return_buffer, return_size);
 			offset += return_size;
 		}
 	} while(return_buffer);