diff --git a/src/dsp/firmware_update.c b/src/dsp/firmware_update.c
index d733d0a..d7e238b 100644
--- a/src/dsp/firmware_update.c
+++ b/src/dsp/firmware_update.c
@@ -341,7 +341,7 @@
 	static const struct pldm_package_header_format_revision_info {
 		pldm_uuid identifier;
 		size_t magic;
-	} revision_info[1 + PLDM_PACKAGE_HEADER_FORMAT_REVISION_FR03H] = {
+	} revision_info[1 + PLDM_PACKAGE_HEADER_FORMAT_REVISION_FR04H] = {
 		[0] = {
 			.identifier = {0},
 			.magic = 0,
@@ -375,14 +375,27 @@
 				LIBPLDM_SIZEAT(struct pldm_package_component_image_information, component_opaque_data) +
 				LIBPLDM_SIZEAT(struct pldm_package_iter, infos),
 		},
+		[PLDM_PACKAGE_HEADER_FORMAT_REVISION_FR04H] = { /* PLDM_PACKAGE_HEADER_FORMAT_REVISION_FR04H */
+			.identifier = PLDM_PACKAGE_HEADER_IDENTIFIER_V1_3,
+			.magic =
+				LIBPLDM_SIZEAT(struct pldm__package_header_information, package) +
+				LIBPLDM_SIZEAT(struct pldm_package_firmware_device_id_record, reference_manifest_data) +
+				LIBPLDM_SIZEAT(struct pldm_descriptor, descriptor_data) +
+				LIBPLDM_SIZEAT(struct pldm_package_downstream_device_id_record, reference_manifest_data) +
+				LIBPLDM_SIZEAT(struct pldm_package_component_image_information, component_opaque_data) +
+				LIBPLDM_SIZEAT(struct pldm_package_iter, infos),
+		},
 	};
 
 	const struct pldm_package_header_format_revision_info *info;
+	uint32_t package_payload_checksum = 0;
 	uint32_t package_header_checksum = 0;
 	size_t package_header_variable_size;
 	size_t package_header_payload_size;
 	size_t package_header_areas_size;
 	uint16_t package_header_size;
+	void *package_payload_offset;
+	size_t package_payload_size;
 	PLDM_MSGBUF_DEFINE_P(buf);
 	int checksums = 1;
 	int rc;
@@ -395,11 +408,11 @@
 		return -EINVAL;
 	}
 
-	if (pin->format.revision > PLDM_PACKAGE_HEADER_FORMAT_REVISION_FR03H) {
+	if (pin->format.revision > PLDM_PACKAGE_HEADER_FORMAT_REVISION_FR04H) {
 		return -ENOTSUP;
 	}
 	static_assert(ARRAY_SIZE(revision_info) ==
-			      1 + PLDM_PACKAGE_HEADER_FORMAT_REVISION_FR03H,
+			      1 + PLDM_PACKAGE_HEADER_FORMAT_REVISION_FR04H,
 		      "Mismatched array bounds test");
 
 	info = &revision_info[pin->format.revision];
@@ -437,6 +450,10 @@
 	    memcmp(revision_info[PLDM_PACKAGE_HEADER_FORMAT_REVISION_FR03H]
 			   .identifier,
 		   hdr->package_header_identifier,
+		   sizeof(hdr->package_header_identifier)) != 0 &&
+	    memcmp(revision_info[PLDM_PACKAGE_HEADER_FORMAT_REVISION_FR04H]
+			   .identifier,
+		   hdr->package_header_identifier,
 		   sizeof(hdr->package_header_identifier)) != 0) {
 		return pldm_msgbuf_discard(buf, -ENOTSUP);
 	}
@@ -449,6 +466,11 @@
 		return pldm_msgbuf_discard(buf, -ENOTSUP);
 	}
 
+	if (hdr->package_header_format_revision >=
+	    PLDM_PACKAGE_HEADER_FORMAT_REVISION_FR04H) {
+		checksums = 2;
+	}
+
 	rc = pldm_msgbuf_extract(buf, package_header_size);
 	if (rc) {
 		return pldm_msgbuf_discard(buf, rc);
@@ -511,6 +533,19 @@
 
 	pldm_msgbuf_extract(buf, package_header_checksum);
 
+	if (hdr->package_header_format_revision >=
+	    PLDM_PACKAGE_HEADER_FORMAT_REVISION_FR04H) {
+		pldm_msgbuf_extract(buf, package_payload_checksum);
+		rc = pldm_msgbuf_span_remaining(buf, &package_payload_offset,
+						&package_payload_size);
+		if (rc) {
+			return pldm_msgbuf_discard(buf, rc);
+		}
+	} else {
+		package_payload_offset = NULL;
+		package_payload_size = 0;
+	}
+
 	rc = pldm_msgbuf_complete(buf);
 	if (rc) {
 		return rc;
@@ -525,6 +560,19 @@
 		return rc;
 	}
 
+	if (hdr->package_header_format_revision >=
+	    PLDM_PACKAGE_HEADER_FORMAT_REVISION_FR04H) {
+		rc = pldm_edac_crc32_validate(package_payload_checksum,
+					      package_payload_offset,
+					      package_payload_size);
+		if (rc) {
+#if 0
+			printf("payload checksum failure, expected: %#08" PRIx32 ", found: %#08" PRIx32 "\n", package_payload_checksum, pldm_edac_crc32(package_payload_offset, package_payload_size));
+#endif
+			return rc;
+		}
+	}
+
 	/* We stash these to resolve component images later */
 	hdr->package.ptr = data;
 	hdr->package.length = length;
@@ -636,6 +684,7 @@
 	struct variable_field *field,
 	struct pldm_package_firmware_device_id_record *rec)
 {
+	size_t firmware_device_package_data_offset;
 	PLDM_MSGBUF_DEFINE_P(buf);
 	uint16_t record_len = 0;
 	int rc;
@@ -686,6 +735,17 @@
 		return pldm_msgbuf_discard(buf, rc);
 	}
 
+	if (hdr->package_header_format_revision >=
+	    PLDM_PACKAGE_HEADER_FORMAT_REVISION_FR04H) {
+		rc = pldm_msgbuf_extract_uint32_to_size(
+			buf, rec->reference_manifest_data.length);
+		if (rc) {
+			return pldm_msgbuf_discard(buf, rc);
+		}
+	} else {
+		rec->reference_manifest_data.length = 0;
+	}
+
 	rc = pldm_msgbuf_span_required(
 		buf, hdr->component_bitmap_bit_length / 8,
 		(void **)&rec->applicable_components.bitmap.ptr);
@@ -699,7 +759,12 @@
 		buf, rec->component_image_set_version_string.length,
 		(void **)&rec->component_image_set_version_string.ptr);
 
-	pldm_msgbuf_span_until(buf, rec->firmware_device_package_data.length,
+	/* The total length reserved for `package_data` and `reference_manifest_data` */
+	firmware_device_package_data_offset =
+		rec->firmware_device_package_data.length +
+		rec->reference_manifest_data.length;
+
+	pldm_msgbuf_span_until(buf, firmware_device_package_data_offset,
 			       (void **)&rec->record_descriptors.ptr,
 			       &rec->record_descriptors.length);
 
@@ -710,6 +775,17 @@
 		rec->firmware_device_package_data.ptr = NULL;
 	}
 
+	if (hdr->package_header_format_revision >=
+	    PLDM_PACKAGE_HEADER_FORMAT_REVISION_FR04H) {
+		pldm_msgbuf_span_required(
+			buf, rec->reference_manifest_data.length,
+			(void **)&rec->reference_manifest_data.ptr);
+
+	} else {
+		assert(rec->reference_manifest_data.length == 0);
+		rec->reference_manifest_data.ptr = NULL;
+	}
+
 	return pldm_msgbuf_complete_consumed(buf);
 }
 
@@ -3269,6 +3345,7 @@
 	struct pldm_package_downstream_device_id_record_iter *iter,
 	struct pldm_package_downstream_device_id_record *rec)
 {
+	size_t package_data_offset;
 	PLDM_MSGBUF_DEFINE_P(buf);
 	uint16_t record_len = 0;
 	int rc;
@@ -3324,6 +3401,14 @@
 		return pldm_msgbuf_discard(buf, rc);
 	}
 
+	if (hdr->package_header_format_revision >=
+	    PLDM_PACKAGE_HEADER_FORMAT_REVISION_FR04H) {
+		pldm_msgbuf_extract_uint32_to_size(
+			buf, rec->reference_manifest_data.length);
+	} else {
+		rec->reference_manifest_data.length = 0;
+	}
+
 	rc = pldm_msgbuf_span_required(
 		buf, hdr->component_bitmap_bit_length / 8,
 		(void **)&rec->applicable_components.bitmap.ptr);
@@ -3344,13 +3429,28 @@
 		rec->self_contained_activation_min_version_comparison_stamp = 0;
 	}
 
-	pldm_msgbuf_span_until(buf, rec->package_data.length,
+	/* The total length reserved for `package_data` and `reference_manifest_data` */
+	package_data_offset =
+		rec->package_data.length + rec->reference_manifest_data.length;
+
+	pldm_msgbuf_span_until(buf, package_data_offset,
 			       (void **)&rec->record_descriptors.ptr,
 			       &rec->record_descriptors.length);
 
 	pldm_msgbuf_span_required(buf, rec->package_data.length,
 				  (void **)&rec->package_data.ptr);
 
+	/* Supported in package header revision 1.3 (FR04H) and above. */
+	if (hdr->package_header_format_revision >=
+	    PLDM_PACKAGE_HEADER_FORMAT_REVISION_FR04H) {
+		pldm_msgbuf_span_required(
+			buf, rec->reference_manifest_data.length,
+			(void **)&rec->reference_manifest_data.ptr);
+	} else {
+		assert(rec->reference_manifest_data.length == 0);
+		rec->reference_manifest_data.ptr = NULL;
+	}
+
 	return pldm_msgbuf_complete_consumed(buf);
 }
 
