/* Max size of area it should be safe to request */
 #define NFP_CPP_SAFE_AREA_SIZE         SZ_2M
 
+/* NFP_MUTEX_WAIT_* are timeouts in seconds when waiting for a mutex */
+#define NFP_MUTEX_WAIT_FIRST_WARN      15
+#define NFP_MUTEX_WAIT_NEXT_WARN       5
+#define NFP_MUTEX_WAIT_ERROR           60
+
 struct device;
 
 struct nfp_cpp_area;
 
  */
 int nfp_cpp_mutex_lock(struct nfp_cpp_mutex *mutex)
 {
-       unsigned long warn_at = jiffies + 15 * HZ;
+       unsigned long warn_at = jiffies + NFP_MUTEX_WAIT_FIRST_WARN * HZ;
+       unsigned long err_at = jiffies + NFP_MUTEX_WAIT_ERROR * HZ;
        unsigned int timeout_ms = 1;
        int err;
 
                        return -ERESTARTSYS;
 
                if (time_is_before_eq_jiffies(warn_at)) {
-                       warn_at = jiffies + 60 * HZ;
+                       warn_at = jiffies + NFP_MUTEX_WAIT_NEXT_WARN * HZ;
                        nfp_warn(mutex->cpp,
                                 "Warning: waiting for NFP mutex [depth:%hd target:%d addr:%llx key:%08x]\n",
                                 mutex->depth,
                                 mutex->target, mutex->address, mutex->key);
                }
+               if (time_is_before_eq_jiffies(err_at)) {
+                       nfp_err(mutex->cpp, "Error: mutex wait timed out\n");
+                       return -EBUSY;
+               }
        }
 
        return err;
 
 struct nfp_resource *
 nfp_resource_acquire(struct nfp_cpp *cpp, const char *name)
 {
-       unsigned long warn_at = jiffies + 15 * HZ;
+       unsigned long warn_at = jiffies + NFP_MUTEX_WAIT_FIRST_WARN * HZ;
+       unsigned long err_at = jiffies + NFP_MUTEX_WAIT_ERROR * HZ;
        struct nfp_cpp_mutex *dev_mutex;
        struct nfp_resource *res;
        int err;
                }
 
                if (time_is_before_eq_jiffies(warn_at)) {
-                       warn_at = jiffies + 60 * HZ;
+                       warn_at = jiffies + NFP_MUTEX_WAIT_NEXT_WARN * HZ;
                        nfp_warn(cpp, "Warning: waiting for NFP resource %s\n",
                                 name);
                }
+               if (time_is_before_eq_jiffies(err_at)) {
+                       nfp_err(cpp, "Error: resource %s timed out\n", name);
+                       err = -EBUSY;
+                       goto err_free;
+               }
        }
 
        nfp_cpp_mutex_free(dev_mutex);