diff --git a/app/aboot/aboot.c b/app/aboot/aboot.c
index a9ac9d4..edcd171 100755
--- a/app/aboot/aboot.c
+++ b/app/aboot/aboot.c
@@ -103,6 +103,11 @@
 				  char **buf);
 
 void *info_buf;
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#if defined(ENABLE_PRODINFO_ACCESS)
+void *prodinfo_buf;
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end*/
 void write_device_info_mmc(device_info *dev);
 void write_device_info_flash(device_info *dev);
 static int aboot_save_boot_hash_mmc(uint32_t image_addr, uint32_t image_size);
@@ -114,6 +119,11 @@
 /* fastboot command function pointer */
 typedef void (*fastboot_cmd_fn) (const char *, void *, unsigned);
 bool get_perm_attr_status();
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#if defined(ENABLE_PRODINFO_ACCESS)
+void write_prod_info(prod_info *dev);
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end */
 
 struct fastboot_cmd_desc {
 	char * name;
@@ -171,6 +181,13 @@
 static const char *alarmboot_cmdline = " androidboot.alarmboot=true";
 static const char *loglevel         = " quiet";
 static const char *battchg_pause = " androidboot.mode=charger";
+/*[20200605][TracyChui] Implement get Serial Number start */
+#if defined(ENABLE_PRODINFO_ACCESS)
+static const char *cust_sn_cmdline = " androidboot.customer_serialno=";
+static const char *factory_sn_cmdline = " androidboot.factory_serialno=";
+static const char *UsbAdbEnable = " androidboot.adb_enable=1";
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end*/
 static const char *auth_kernel = " androidboot.authorized_kernel=true";
 static const char *secondary_gpt_enable = " gpt";
 #ifdef MDTP_SUPPORT
@@ -260,6 +277,11 @@
 static char *target_boot_params = NULL;
 static bool boot_reason_alarm;
 static bool devinfo_present = true;
+/*[20200605][TracyChui] Implement get Serial Number start */
+#if defined(ENABLE_PRODINFO_ACCESS)
+static bool prodinfo_present = true;
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end*/
 bool boot_into_fastboot = false;
 static uint32_t dt_size = 0;
 static char *vbcmdline;
@@ -270,6 +292,11 @@
 /* Assuming unauthorized kernel image by default */
 static int auth_kernel_img = 0;
 static device_info device = {DEVICE_MAGIC,0,0,0,0,{0},{0},{0},1,{0},0,{0}};
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#if defined(ENABLE_PRODINFO_ACCESS)
+static prod_info prod = {PRODINFO_MAGIC, {0}, {0}, 0};
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end*/
 
 /*[Arima_8910][jhchen] add fuse check property 20181031 begin*/
 #ifdef ENABLE_FUSE_CHECK
@@ -352,7 +379,18 @@
 
 char max_download_size[MAX_RSP_SIZE];
 char charger_screen_enabled[MAX_RSP_SIZE];
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#if defined(ENABLE_PRODINFO_ACCESS)
+char cust_sn_buf[PRODINFO_MAX_SSN_LEN + 1];
+char factory_sn_buf[PRODINFO_MAX_SSN_LEN + 1];
+char AdbEnable[MAX_RSP_SIZE];
+#endif
+#if defined(ENABLE_PRODINFO_ACCESS)
+char sn_buf[PRODINFO_MAX_ISN_LEN + 1];
+#else
 char sn_buf[13];
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end*/
 char display_panel_buf[MAX_PANEL_BUF_SIZE];
 char panel_display_mode[MAX_RSP_SIZE];
 char soc_version_str[MAX_RSP_SIZE];
@@ -496,6 +534,11 @@
 	int have_cmdline = 0;
 	unsigned char *cmdline_final = NULL;
 	int pause_at_bootup = 0;
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#if defined(ENABLE_PRODINFO_ACCESS)
+	int AdbEnable = 0;
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end*/
 	bool warm_boot = false;
 	bool gpt_exists = partition_gpt_exists();
 	int have_target_boot_params = 0;
@@ -567,6 +610,14 @@
 
 	cmdline_len += strlen(usb_sn_cmdline);
 	cmdline_len += strlen(sn_buf);
+/*[20200605][TracyChui] Implement get Serial Number start */
+#if defined(ENABLE_PRODINFO_ACCESS)
+	cmdline_len += strlen(cust_sn_cmdline);
+	cmdline_len += strlen(cust_sn_buf);
+	cmdline_len += strlen(factory_sn_cmdline);
+	cmdline_len += strlen(factory_sn_buf);
+#endif	
+/*[20200605][TracyChui] Implement get Serial Number end */
 
 #if VERIFIED_BOOT
 	if (VB_M <= target_get_vb_version())
@@ -613,6 +664,20 @@
 		cmdline_len += strlen(battchg_pause);
 	}
 
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#if defined(ENABLE_PRODINFO_ACCESS)
+	if (prod.is_adb_enabled) {
+		dprintf(CRITICAL, "Device will enable adb\n");
+
+		prod.is_adb_enabled = 0;
+		write_prod_info(&prod);
+
+		AdbEnable = 1;
+		cmdline_len += strlen(UsbAdbEnable);
+	}
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end*/
+
 	if(target_use_signed_kernel() && auth_kernel_img) {
 		cmdline_len += strlen(auth_kernel);
 	}
@@ -955,6 +1020,27 @@
 		if (have_cmdline) --dst;
 		have_cmdline = 1;
 		while ((*dst++ = *src++));
+		
+		/* [20200605][TracyChui] Implement get Serial Number */
+		#if defined(ENABLE_PRODINFO_ACCESS)
+        src = cust_sn_cmdline;
+		if (have_cmdline) --dst;
+		have_cmdline = 1;
+		while ((*dst++ = *src++));
+		src = cust_sn_buf;
+		if (have_cmdline) --dst;
+		have_cmdline = 1;
+		while ((*dst++ = *src++));
+		src = factory_sn_cmdline;
+		if (have_cmdline) --dst;
+		have_cmdline = 1;
+		while ((*dst++ = *src++));
+		src = factory_sn_buf;
+		if (have_cmdline) --dst;
+		have_cmdline = 1;
+		while ((*dst++ = *src++));
+		#endif
+    /*[20200605][TracyChui] Implement get Serial Number end */	
 		if (warm_boot) {
 			if (have_cmdline) --dst;
 			src = warmboot_cmdline;
@@ -1000,6 +1086,16 @@
 			while ((*dst++ = *src++));
 		}
 
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#if defined(ENABLE_PRODINFO_ACCESS)
+		if (AdbEnable) {
+			src = UsbAdbEnable;
+			if (have_cmdline) --dst;
+			while ((*dst++ = *src++));
+		}
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end*/
+
 		if(target_use_signed_kernel() && auth_kernel_img) {
 			src = auth_kernel;
 			if (have_cmdline) --dst;
@@ -2666,6 +2762,85 @@
 	}
 }
 
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#if defined(ENABLE_PRODINFO_ACCESS)
+void write_prod_info_mmc(prod_info *dev)
+{
+	unsigned long long ptn = 0;
+	unsigned long long size;
+	int index = INVALID_PTN;
+	uint32_t blocksize;
+	uint8_t lun = 0;
+	uint32_t ret = 0;
+
+	if (prodinfo_present)
+		index = partition_get_index("prodinfo");
+	else
+		index = partition_get_index("aboot");
+
+	ptn = partition_get_offset(index);
+	if(ptn == 0)
+	{
+		return;
+	}
+
+	lun = partition_get_lun(index);
+	mmc_set_lun(lun);
+
+	size = partition_get_size(index);
+
+	blocksize = mmc_get_device_blocksize();
+
+	if (prodinfo_present)
+		ret = mmc_write(ptn, blocksize, (void *)prodinfo_buf);
+	else
+		ret = mmc_write((ptn + size - blocksize), blocksize, (void *)prodinfo_buf);
+	if (ret)
+	{
+		dprintf(CRITICAL, "ERROR: Cannot write prod info\n");
+		ASSERT(0);
+	}
+}
+
+void read_prod_info_mmc(struct prod_info *info)
+{
+	unsigned long long ptn = 0;
+	unsigned long long size;
+	int index = INVALID_PTN;
+	uint32_t blocksize;
+	uint32_t ret  = 0;
+
+	if ((index = partition_get_index("prodinfo")) < 0)
+	{
+		prodinfo_present = false;
+		index = partition_get_index("aboot");
+	}
+
+	ptn = partition_get_offset(index);
+	if(ptn == 0)
+	{
+		return;
+	}
+
+	mmc_set_lun(partition_get_lun(index));
+
+	size = partition_get_size(index);
+
+	blocksize = mmc_get_device_blocksize();
+
+	if (prodinfo_present)
+		ret = mmc_read(ptn, (void *)prodinfo_buf, blocksize);
+	else
+		ret = mmc_read((ptn + size - blocksize), (void *)prodinfo_buf, blocksize);
+	if (ret)
+	{
+		dprintf(CRITICAL, "ERROR: Cannot read prod info\n");
+		ASSERT(0);
+	}
+}
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end*/
+
 void write_device_info_flash(device_info *dev)
 {
 	struct device_info *info = memalign(PAGE_SIZE, ROUNDUP(BOOT_IMG_MAX_PAGE_SIZE, PAGE_SIZE));
@@ -2997,6 +3172,54 @@
 		read_device_info_flash(dev);
 	}
 }
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#if defined(ENABLE_PRODINFO_ACCESS)
+void write_prod_info(prod_info *dev)
+{
+	if(target_is_emmc_boot())
+	{
+		struct prod_info *info = memalign(PAGE_SIZE, ROUNDUP(BOOT_IMG_MAX_PAGE_SIZE, PAGE_SIZE));
+		if(info == NULL)
+		{
+			dprintf(CRITICAL, "Failed to allocate memory for prod info struct\n");
+			ASSERT(0);
+		}
+		prodinfo_buf = info;
+		memcpy(info, dev, sizeof(struct prod_info));
+
+		write_prod_info_mmc(info);
+		free(info);
+	}
+}
+
+void read_prod_info(prod_info *dev)
+{
+	if(target_is_emmc_boot())
+	{
+		struct prod_info *info = memalign(PAGE_SIZE, ROUNDUP(BOOT_IMG_MAX_PAGE_SIZE, PAGE_SIZE));
+		if(info == NULL)
+		{
+			dprintf(CRITICAL, "Failed to allocate memory for prod info struct\n");
+			ASSERT(0);
+		}
+		prodinfo_buf = info;
+
+		read_prod_info_mmc(info);
+
+		if (memcmp(info->magic, PRODINFO_MAGIC, PRODINFO_MAGIC_SIZE))
+		{
+			memcpy(info->magic, PRODINFO_MAGIC, PRODINFO_MAGIC_SIZE);
+			memcpy(info->isn, "No_Serial_Number", PRODINFO_MAX_ISN_LEN);
+			memcpy(info->ssn, "No_Custer_Serial_Number", PRODINFO_MAX_SSN_LEN);
+			info->is_adb_enabled = 0;
+			write_prod_info(info);
+		}
+		memcpy(dev, info, sizeof(prod_info));
+		free(info);
+	}
+}
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end*/
 
 void reset_device_info()
 {
@@ -4704,6 +4927,18 @@
 	fastboot_okay("");
 }
 
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#if defined(ENABLE_PRODINFO_ACCESS)
+void CmdOemEnableAdb(const char *arg, void *data, unsigned size)
+{
+	dprintf(INFO, "Enabling Adb\n");
+	prod.is_adb_enabled = 1;
+	write_prod_info(&prod);
+	fastboot_okay("");
+}
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end*/
+
 void cmd_oem_off_mode_charger(const char *arg, void *data, unsigned size)
 {
 	char *p = NULL;
@@ -4816,6 +5051,12 @@
 	fastboot_info(response);
 	snprintf(response, sizeof(response), "\tDisplay panel: %s", (device.display_panel));
 	fastboot_info(response);
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#if defined(ENABLE_PRODINFO_ACCESS)
+	snprintf(response, sizeof(response), "\tAdb enabled: %s", prod.is_adb_enabled ? "true" : "false");
+	fastboot_info(response);
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end*/
 	fastboot_okay("");
 }
 
@@ -5215,6 +5456,11 @@
 						{"oem run-tests", cmd_oem_runtests},
 #endif
 #endif
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#if defined(ENABLE_PRODINFO_ACCESS)
+						{"oem adb_enable", CmdOemEnableAdb},
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end*/
 						};
 
 	int fastboot_cmds_count = sizeof(cmd_list)/sizeof(cmd_list[0]);
@@ -5257,6 +5503,15 @@
 			device.charger_screen_enabled);
 	fastboot_publish("charger-screen-enabled",
 			(const char *) charger_screen_enabled);
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#if defined(ENABLE_PRODINFO_ACCESS)
+    read_prod_info(&prod);
+	snprintf(AdbEnable, MAX_RSP_SIZE, "%d",
+			prod.is_adb_enabled);
+	fastboot_publish("adb-enabled",
+			(const char *) AdbEnable);
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end*/
 	fastboot_publish("off-mode-charge", (const char *) charger_screen_enabled);
 	snprintf(panel_display_mode, MAX_RSP_SIZE, "%s",
 			device.display_panel);
@@ -5330,6 +5585,11 @@
 	ASSERT((MEMBASE + MEMSIZE) > MEMBASE);
 
 	read_device_info(&device);
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#if defined(ENABLE_PRODINFO_ACCESS)
+	read_prod_info(&prod);
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end*/
 	read_allow_oem_unlock(&device);
 
 	/* Detect multi-slot support */
@@ -5350,8 +5610,22 @@
 	}
 
 	target_serialno((unsigned char *) sn_buf);
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#if defined(ENABLE_PRODINFO_ACCESS)
+	dprintf(CRITICAL,"serial number: %s\n",sn_buf);
+#else
 	dprintf(SPEW,"serial number: %s\n",sn_buf);
-
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end*/
+/*[20200605][TracyChui] Implement get Serial Number start */
+#if defined(ENABLE_PRODINFO_ACCESS)
+    read_prod_info(&prod);
+    snprintf((char *)cust_sn_buf, PRODINFO_MAX_SSN_LEN + 1, "%s", prod.ssn);
+	dprintf(CRITICAL,"customer serial number: %s\n", cust_sn_buf);
+	snprintf((char *)factory_sn_buf, PRODINFO_MAX_ISN_LEN + 1, "%s", prod.isn);
+	dprintf(CRITICAL,"factory serial number: %s\n", factory_sn_buf);
+#endif
+ /*[20200605][TracyChui] Implement get Serial Number end */   
 	memset(display_panel_buf, '\0', MAX_PANEL_BUF_SIZE);
 
 	/*
diff --git a/app/aboot/devinfo.h b/app/aboot/devinfo.h
old mode 100644
new mode 100755
index f7b02b4..d264250
--- a/app/aboot/devinfo.h
+++ b/app/aboot/devinfo.h
@@ -60,4 +60,23 @@
 	uint32_t user_public_key_length;
 	uint8_t user_public_key[MAX_USER_KEY_SIZE];
 };
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#if defined(ENABLE_PRODINFO_ACCESS)
+typedef struct prod_info prod_info;
+
+#define PRODINFO_MAGIC "ANDROID!PRODINFO"
+#define PRODINFO_MAGIC_SIZE 16  
+#define PRODINFO_MAX_ISN_LEN 32 
+#define PRODINFO_MAX_SSN_LEN 32 
+struct prod_info
+{
+	unsigned char magic[PRODINFO_MAGIC_SIZE];
+	unsigned char isn[PRODINFO_MAX_ISN_LEN];
+	unsigned char ssn[PRODINFO_MAX_SSN_LEN];
+	bool is_adb_enabled;
+};
+
+void read_prod_info(prod_info *dev);
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end*/
 #endif
diff --git a/app/aboot/fastboot.c b/app/aboot/fastboot.c
old mode 100644
new mode 100755
index cac7f8f..6aea42a
--- a/app/aboot/fastboot.c
+++ b/app/aboot/fastboot.c
@@ -38,6 +38,9 @@
 #include <dev/udc.h>
 #include "fastboot.h"
 #include <err.h>
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#include <devinfo.h>
+/*[20200605][TracyChui] Implement get Serial Number end*/
 
 #ifdef USB30_SUPPORT
 #include <usb30_udc.h>
@@ -638,7 +641,13 @@
 
 int fastboot_init(void *base, unsigned size)
 {
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#if defined(ENABLE_PRODINFO_ACCESS)
+	char sn_buf[PRODINFO_MAX_ISN_LEN + 1];
+#else
 	char sn_buf[13];
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end*/
 	thread_t *thr;
 	dprintf(INFO, "fastboot_init()\n");
 
diff --git a/makefile b/makefile
index 6a67921..eb88f91 100755
--- a/makefile
+++ b/makefile
@@ -81,6 +81,10 @@
 CFLAGS += -DENABLE_FUSE_CHECK=1
 # [Arima_8910][jhchen] 20181031 end
 
+#[20200605][TracyChui] Implement get Serial Number start
+CFLAGS += -DENABLE_PRODINFO_ACCESS=1
+#[20200605][TracyChui] Implement get Serial Number end
+
 # setup toolchain prefix
 TOOLCHAIN_PREFIX ?= arm-eabi-
 CFLAGS += -fstack-protector-all
@@ -186,6 +190,11 @@
   DEFINES += TARGET_USE_SYSTEM_AS_ROOT_IMAGE=0
 endif
 
+#[20200605][TracyChui]Show SW and modem version and internal storage size on fastboot screen start
+DEFINES += ARIMA_BOOTLOADER_VERSION=\"$(ARIMA_SW_VERSION_ABOOT)\"
+DEFINES += ARIMA_BASEBAND_VERSION=\"$(MODEM_BUILDID)\"
+#[20200605][TracyChui]Show SW and modem version and internal storage size on fastboot screen end
+
 # these need to be filled out by the project/target/platform rules.mk files
 TARGET :=
 PLATFORM :=
diff --git a/target/msm8953/init.c b/target/msm8953/init.c
old mode 100644
new mode 100755
index 2195f83..7e1fe9f
--- a/target/msm8953/init.c
+++ b/target/msm8953/init.c
@@ -61,6 +61,9 @@
 #include "target/display.h"
 #include "recovery.h"
 #include <ab_partition_parser.h>
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#include <devinfo.h>
+/*[20200605][TracyChui] Implement get Serial Number end*/
 
 #if LONG_PRESS_POWER_ON
 #include <shutdown_detect.h>
@@ -418,11 +421,22 @@
 
 void target_serialno(unsigned char *buf)
 {
+/*[20200605][TracyChui] Implement get Serial Number start*/
+#if defined(ENABLE_PRODINFO_ACCESS)
+	prod_info prod = {PRODINFO_MAGIC, {0}, {0}, 0};
+	if (target_is_emmc_boot()) {
+		read_prod_info(&prod);
+		snprintf((char *)buf, PRODINFO_MAX_SSN_LEN + 1, "%s", prod.ssn);
+	}
+#else
 	uint32_t serialno;
 	if (target_is_emmc_boot()) {
 		serialno = mmc_get_psn();
 		snprintf((char *)buf, 13, "%x", serialno);
 	}
+#endif
+/*[20200605][TracyChui] Implement get Serial Number end */
+
 }
 
 unsigned board_machtype(void)
