diff --git a/package-21.02/kernel/tops/src/firmware.c b/package-21.02/kernel/tops/src/firmware.c
index 20a7db1..646212f 100644
--- a/package-21.02/kernel/tops/src/firmware.c
+++ b/package-21.02/kernel/tops/src/firmware.c
@@ -377,7 +377,7 @@
 	u32 boot_addr = TOPS_DEFAULT_BOOT_ADDR;
 	u32 i;
 
-	for (i = TOPS_PART_TYPE_IRAM0; i < __TOPS_PART_TYPE_MAX; i++) {
+	for (i = TOPS_PART_TYPE_IRAM0; i < TOPS_PART_TYPE_METADATA; i++) {
 		hdr = part->hdr[i];
 
 		if (le16_to_cpu(hdr->flags) & FW_PART_BOOT_OVERRIDE) {
@@ -565,19 +565,21 @@
 	u32 meta_len;
 	u32 ofs = 0;
 	u32 nattr;
-	u32 i;
+	int i;
 
 	if (!tfw || !part)
 		return -EINVAL;
 
-	if (FW_ROLE(tfw) > __TOPS_ROLE_TYPE_MAX)
+	if (FW_ROLE(tfw) >= __TOPS_ROLE_TYPE_MAX)
 		return -EINVAL;
 
 	phdr = part->hdr[TOPS_PART_TYPE_METADATA];
 	payload = part->payload[TOPS_PART_TYPE_METADATA];
-	meta_len = le32_to_cpu(phdr->size);
+	if (!phdr || !payload)
+		return 0;
 
-	if (!phdr || !payload || !meta_len)
+	meta_len = le32_to_cpu(phdr->size);
+	if (!meta_len)
 		return 0;
 
 	fw_info = &npu.fw_info[FW_ROLE(tfw)];
diff --git a/package-21.02/kernel/tops/src/mcu.c b/package-21.02/kernel/tops/src/mcu.c
index 94f465c..30cb032 100644
--- a/package-21.02/kernel/tops/src/mcu.c
+++ b/package-21.02/kernel/tops/src/mcu.c
@@ -1387,7 +1387,7 @@
 		return -ENOMEM;
 
 	npu.pd_links = devm_kmalloc_array(dev, npu.pd_num,
-					  sizeof(struct device_link),
+					  sizeof(*npu.pd_links),
 					  GFP_KERNEL);
 	if (!npu.pd_links)
 		return -ENOMEM;
diff --git a/package-21.02/kernel/tops/src/tnl_offload.c b/package-21.02/kernel/tops/src/tnl_offload.c
index c989054..aa19f75 100644
--- a/package-21.02/kernel/tops/src/tnl_offload.c
+++ b/package-21.02/kernel/tops/src/tnl_offload.c
@@ -123,9 +123,7 @@
 
 static inline bool skb_tops_valid(struct sk_buff *skb)
 {
-	return (skb
-		&& skb_hnat_tops(skb) >= 0
-		&& skb_hnat_tops(skb) <= __TOPS_ENTRY_MAX);
+	return (skb && skb_hnat_tops(skb) <= __TOPS_ENTRY_MAX);
 }
 
 static inline struct tops_tnl_type *skb_to_tnl_type(struct sk_buff *skb)
diff --git a/package-21.02/kernel/tops/src/trm-fs.c b/package-21.02/kernel/tops/src/trm-fs.c
index f2bd9bf..3728ee1 100644
--- a/package-21.02/kernel/tops/src/trm-fs.c
+++ b/package-21.02/kernel/tops/src/trm-fs.c
@@ -36,10 +36,8 @@
 		if (likely(dst))
 			return dst;
 
-		if (rty++ < 3)
-			msleep(100);
-		else
-			break;
+		rty++;
+		msleep(100);
 	}
 
 	return ERR_PTR(-ENOMEM);
diff --git a/package-21.02/kernel/tops/src/trm.c b/package-21.02/kernel/tops/src/trm.c
index 11991cf..5fdc909 100644
--- a/package-21.02/kernel/tops/src/trm.c
+++ b/package-21.02/kernel/tops/src/trm.c
@@ -120,13 +120,11 @@
 
 	for (i = 0; i < __TRM_HARDWARE_MAX; i++) {
 		trm_hw_cfg = trm_hw_configs[i];
-		if (unlikely(!trm_hw_cfg))
+		if (unlikely(!trm_hw_cfg || !trm_hw_cfg->trm_cfgs))
 			continue;
 
 		for (j = 0; j < trm_hw_cfg->cfg_len; j++) {
 			trm_cfg = &trm_hw_cfg->trm_cfgs[j];
-			if (unlikely(!trm_cfg))
-				continue;
 
 			if (!strncmp(trm_cfg->name, name, strlen(name))) {
 				mutex_lock(&trm_lock);
@@ -178,7 +176,7 @@
 			total -= RLY_DUMP_SUBBUF_DATA_MAX;
 		} else {
 			frag_len = total;
-			total -= total;
+			total = 0;
 			trm_hdr.last_frag = true;
 		}
 
