diff --git a/meta-arm/recipes-bsp/images/firmware-deploy-image.bb b/meta-arm/recipes-bsp/images/firmware-deploy-image.bb
index 2f347f0b..85bdc952 100644
--- a/meta-arm/recipes-bsp/images/firmware-deploy-image.bb
+++ b/meta-arm/recipes-bsp/images/firmware-deploy-image.bb
@@ -18,11 +18,14 @@ do_deploy() {
     firmware_loc=$(echo "${TMPDIR}" | sed "s/${TCLIBC}/musl/")
     firmware_loc="${firmware_loc}_${MACHINE}/deploy/images/${MACHINE}"
     for firmware in ${FIRMWARE_BINARIES}; do
-        echo "cp -av ${firmware_loc}/${firmware} ${DEPLOYDIR}/"
-        cp -av "${firmware_loc}/${firmware}" ${DEPLOYDIR}/
+        # Preserve the directory structure when copying
+        subdir="$(dirname -- "${firmware}")"
+        mkdir -p "${DEPLOYDIR}"/"${subdir}"
+        echo "cp -av ${firmware_loc}/${firmware} ${DEPLOYDIR}/${subdir}"
+        cp -av "${firmware_loc}/${firmware}" ${DEPLOYDIR}/"${subdir}"
         if [ -L "${firmware_loc}/${firmware}" ]; then
-            echo "cp -av ${firmware_loc}/$(readlink ${firmware_loc}/${firmware}) ${DEPLOYDIR}/"
-            cp -av "${firmware_loc}/$(readlink ${firmware_loc}/${firmware})" ${DEPLOYDIR}/
+            echo "cp -av ${firmware_loc}/$(readlink ${firmware_loc}/${firmware}) ${DEPLOYDIR}/${subdir}"
+            cp -av "${firmware_loc}/$(readlink ${firmware_loc}/${firmware})" ${DEPLOYDIR}/${subdir}
         fi
     done
 }
