diff --git a/config-arm/TR181-USGv2.XML b/config-arm/TR181-USGv2.XML
index 7e717f14..7235f36a 100644
--- a/config-arm/TR181-USGv2.XML
+++ b/config-arm/TR181-USGv2.XML
@@ -539,6 +539,28 @@
true
+
+
+
+ X_RDKCENTRAL-COM_FwDwld_AvlMem_RsrvThreshold
+
+ unsignedInt
+
+ uint32
+
+ true
+
+
+
+
+ X_RDKCENTRAL-COM_FwDwld_ImageProcMemPercent
+
+ unsignedInt
+
+ uint32
+
+ true
+
diff --git a/source-arm/TR-181/board_sbapi/Makefile.am b/source-arm/TR-181/board_sbapi/Makefile.am
index 92a3e78b..e0f98e3d 100644
--- a/source-arm/TR-181/board_sbapi/Makefile.am
+++ b/source-arm/TR-181/board_sbapi/Makefile.am
@@ -114,7 +114,7 @@ if CORE_NET_LIB_FEATURE_SUPPORT
libCcspPandM_board_sbapi_la_LDFLAGS += -lnet
endif
-libCcspPandM_board_sbapi_la_LDFLAGS = -lccsp_common -ltime_conversion -lwebconfig_framework -lmsgpackc
+libCcspPandM_board_sbapi_la_LDFLAGS = -lccsp_common -ltime_conversion -lwebconfig_framework -lmsgpackc -lfw_download_chk
if FEATURE_HOTSPOT_SUPPORT
libCcspPandM_board_sbapi_la_LDFLAGS += -lHotspotApi
endif
diff --git a/source-arm/TR-181/board_sbapi/cosa_deviceinfo_apis.c b/source-arm/TR-181/board_sbapi/cosa_deviceinfo_apis.c
index e4dbb6af..d3877691 100644
--- a/source-arm/TR-181/board_sbapi/cosa_deviceinfo_apis.c
+++ b/source-arm/TR-181/board_sbapi/cosa_deviceinfo_apis.c
@@ -98,6 +98,7 @@
#include "cosa_drg_common.h"
#include "safec_lib_common.h"
#include "ansc_string_util.h"
+#include "fw_download_check.h"
#define DEVICE_PROPERTIES "/etc/device.properties"
#define PARTNERS_INFO_FILE "/nvram/partners_defaults.json"
@@ -4732,6 +4733,12 @@ FirmwareDownloadAndFactoryReset(void* arg)
}
CcspTraceWarning(("%s: ImageName %s, url %s\n", __FUNCTION__, Imagename, URL));
+ if(can_proceed_fw_download() == FW_DWNLD_MEMCHK_NOT_ENOUGH_MEM)
+ {
+ CcspTraceError(("FirmwareDownloadAndFactoryReset : Not enough memory to proceed firmware download\n"));
+ commonSyseventSet("fw_update_inprogress", "false");
+ return NULL;
+ }
if( RETURN_ERR == cm_hal_FWupdateAndFactoryReset( URL, Imagename ))
{
CcspTraceError(("FirmwareDownloadAndFactoryReset :cm_hal_FWupdateAndFactoryReset failed for webpa.\n"));
diff --git a/source/TR-181/middle_layer_src/cosa_deviceinfo_dml.c b/source/TR-181/middle_layer_src/cosa_deviceinfo_dml.c
index 99468f6e..ecc26078 100644
--- a/source/TR-181/middle_layer_src/cosa_deviceinfo_dml.c
+++ b/source/TR-181/middle_layer_src/cosa_deviceinfo_dml.c
@@ -792,6 +792,22 @@ DeviceInfo_GetParamUlongValue
CosaDmlDiGetFactoryResetCount(NULL,puLong);
return TRUE;
}
+
+ if (strcmp(ParamName, "X_RDKCENTRAL-COM_FwDwld_AvlMem_RsrvThreshold") == 0)
+ {
+ char buf[10]= {0};
+ syscfg_get( NULL, "FwDwld_AvlMem_RsrvThreshold", buf, sizeof(buf));
+ *puLong = atoi(buf);
+ return TRUE;
+ }
+
+ if (strcmp(ParamName, "X_RDKCENTRAL-COM_FwDwld_ImageProcMemPercent") == 0)
+ {
+ char buf[10]= {0};
+ syscfg_get( NULL, "FwDwld_ImageProcMemPercent", buf, sizeof(buf));
+ *puLong = atoi(buf);
+ return TRUE;
+ }
/* CcspTraceWarning(("Unsupported parameter '%s'\n", ParamName)); */
return FALSE;
@@ -1402,7 +1418,23 @@ DeviceInfo_SetParamUlongValue
fprintf(fp, "%s\n", buff);
fclose(fp);
return TRUE;
- }
+ }
+
+ if (strcmp(ParamName, "X_RDKCENTRAL-COM_FwDwld_AvlMem_RsrvThreshold") == 0)
+ {
+ if (syscfg_set_u_commit (NULL, "FwDwld_AvlMem_RsrvThreshold", uValue) != 0) {
+ return FALSE;
+ }
+ return TRUE;
+ }
+
+ if (strcmp(ParamName, "X_RDKCENTRAL-COM_FwDwld_ImageProcMemPercent") == 0)
+ {
+ if (syscfg_set_u_commit (NULL, "FwDwld_ImageProcMemPercent", uValue) != 0) {
+ return FALSE;
+ }
+ return TRUE;
+ }
/* CcspTraceWarning(("Unsupported parameter '%s'\n", ParamName)); */
return FALSE;
}