diff --git a/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh b/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
index 9ae60169ea98d3d00e296fefc989ff32b46aaaf5..25e5d1f521b739485998cd3d2d374bc44f790c2b 100755
--- a/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
+++ b/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh
@@ -34,7 +34,7 @@ qmi_wds_release() {
 	uci_revert_state network $interface cid
 }
 
-proto_qmi_setup() {
+_proto_qmi_setup() {
 	local interface="$1"
 
 	local device apn auth username password pincode delay modes cid pdh
@@ -132,6 +132,20 @@ proto_qmi_setup() {
 	ubus call network add_dynamic "$(json_dump)"
 }
 
+proto_qmi_setup() {
+	local ret
+
+	_proto_qmi_setup $@
+	ret=$?
+
+	[ "$ret" = 0 ] || {
+		logger "qmi bringup failed, retry in 15s"
+		sleep 15
+	}
+
+	return $rt
+}
+
 proto_qmi_teardown() {
 	local interface="$1"