diff --git a/plat/arm/css/sgi/include/sgi_variant.h b/plat/arm/css/sgi/include/sgi_variant.h
index dea580b..56dc334 100644
--- a/plat/arm/css/sgi/include/sgi_variant.h
+++ b/plat/arm/css/sgi/include/sgi_variant.h
@@ -21,4 +21,10 @@
 
 extern sgi_platform_info_t sgi_plat_info;
 
+/* returns the part number of the platform*/
+unsigned int plat_arm_sgi_get_platform_id(void);
+
+/* returns the configuration id of the platform */
+unsigned int plat_arm_sgi_get_config_id(void);
+
 #endif /* SGI_VARIANT_H */
diff --git a/plat/arm/css/sgi/sgi_bl31_setup.c b/plat/arm/css/sgi/sgi_bl31_setup.c
index d44f89c..a254388 100644
--- a/plat/arm/css/sgi/sgi_bl31_setup.c
+++ b/plat/arm/css/sgi/sgi_bl31_setup.c
@@ -42,53 +42,11 @@
 		panic();
 };
 
-/*******************************************************************************
- * This function sets the sgi_platform_id and sgi_config_id
- ******************************************************************************/
-int sgi_identify_platform(unsigned long hw_config)
-{
-	void *fdt;
-	int nodeoffset;
-	const unsigned int *property;
-
-	fdt = (void *)hw_config;
-
-	/* Check the validity of the fdt */
-	assert(fdt_check_header(fdt) == 0);
-
-	nodeoffset = fdt_subnode_offset(fdt, 0, "system-id");
-	if (nodeoffset < 0) {
-		ERROR("Failed to get system-id node offset\n");
-		return -1;
-	}
-
-	property = fdt_getprop(fdt, nodeoffset, "platform-id", NULL);
-	if (property == NULL) {
-		ERROR("Failed to get platform-id property\n");
-		return -1;
-	}
-
-	sgi_plat_info.platform_id = fdt32_to_cpu(*property);
-
-	property = fdt_getprop(fdt, nodeoffset, "config-id", NULL);
-	if (property == NULL) {
-		ERROR("Failed to get config-id property\n");
-		return -1;
-	}
-
-	sgi_plat_info.config_id = fdt32_to_cpu(*property);
-
-	return 0;
-}
-
 void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1,
 				u_register_t arg2, u_register_t arg3)
 {
-	int ret;
-
-	ret = sgi_identify_platform(arg2);
-	if (ret == -1)
-		panic();
+	sgi_plat_info.platform_id = plat_arm_sgi_get_platform_id();
+	sgi_plat_info.config_id = plat_arm_sgi_get_config_id();
 
 	arm_bl31_early_platform_setup((void *)arg0, arg1, arg2, (void *)arg3);
 }
diff --git a/plat/arm/css/sgi/sgi_image_load.c b/plat/arm/css/sgi/sgi_image_load.c
index d97583e..39069ca 100644
--- a/plat/arm/css/sgi/sgi_image_load.c
+++ b/plat/arm/css/sgi/sgi_image_load.c
@@ -9,6 +9,7 @@
 #include <desc_image_load.h>
 #include <libfdt.h>
 #include <platform.h>
+#include <sgi_variant.h>
 
 /*******************************************************************************
  * This function inserts Platform information via device tree nodes as,
@@ -23,7 +24,6 @@
 	void *fdt;
 	int nodeoffset, err;
 	unsigned int platid = 0, platcfg = 0;
-	char *platform_name;
 
 	mem_params = get_bl_mem_params_node(HW_CONFIG_ID);
 	if (mem_params == NULL) {
@@ -39,38 +39,20 @@
 		return -1;
 	}
 
-	platform_name = (char *)fdt_getprop(fdt, 0, "compatible", NULL);
-
-	if (platform_name == NULL) {
-		ERROR("Invalid HW_CONFIG DTB passed\n");
-		return -1;
-	}
-
-	if (strcmp(platform_name, "arm,sgi575") == 0) {
-		platid = mmio_read_32(SSC_VERSION) & SSC_VERSION_PART_NUM_MASK;
-		platcfg = (mmio_read_32(SSC_VERSION) >> SSC_VERSION_CONFIG_SHIFT)
-				& SSC_VERSION_CONFIG_MASK;
-	} else if (strcmp(platform_name, "arm,sgi-clark") == 0) {
-		platid = mmio_read_32(SID_REG_BASE + SID_SYSTEM_ID_OFFSET)
-				& SID_SYSTEM_ID_PART_NUM_MASK;
-		platcfg = mmio_read_32(SID_REG_BASE + SID_SYSTEM_CFG_OFFSET);
-	} else {
-		WARN("Invalid platform\n");
-		return -1;
-	}
-
 	nodeoffset = fdt_subnode_offset(fdt, 0, "system-id");
 	if (nodeoffset < 0) {
 		ERROR("Failed to get system-id node offset\n");
 		return -1;
 	}
 
+	platid = plat_arm_sgi_get_platform_id();
 	err = fdt_setprop_u32(fdt, nodeoffset, "platform-id", platid);
 	if (err < 0) {
 		ERROR("Failed to set platform-id\n");
 		return -1;
 	}
 
+	platcfg = plat_arm_sgi_get_config_id();
 	err = fdt_setprop_u32(fdt, nodeoffset, "config-id", platcfg);
 	if (err < 0) {
 		ERROR("Failed to set config-id\n");
