conf->oq.refill_threshold = OCTEP_OQ_REFILL_THRESHOLD;
        conf->oq.oq_intr_pkt = OCTEP_OQ_INTR_PKT_THRESHOLD;
        conf->oq.oq_intr_time = OCTEP_OQ_INTR_TIME_THRESHOLD;
+       conf->oq.wmark = OCTEP_OQ_WMARK_MIN;
 
        conf->msix_cfg.non_ioq_msix = CNXK_NUM_NON_IOQ_INTR;
        conf->msix_cfg.ioq_msix = conf->pf_ring_cfg.active_io_rings;
        reg_val = ((u64)time_threshold << 32) |
                  CFG_GET_OQ_INTR_PKT(oct->conf);
        octep_write_csr64(oct, CNXK_SDP_R_OUT_INT_LEVELS(oq_no), reg_val);
+
+       /* set watermark for backpressure */
+       reg_val = octep_read_csr64(oct, CNXK_SDP_R_OUT_WMARK(oq_no));
+       reg_val &= ~0xFFFFFFFFULL;
+       reg_val |= CFG_GET_OQ_WMARK(oct->conf);
+       octep_write_csr64(oct, CNXK_SDP_R_OUT_WMARK(oq_no), reg_val);
 }
 
 /* Setup registers for a PF mailbox */
 
 /* Packet threshold for Tx queue interrupt */
 #define OCTEP_IQ_INTR_THRESHOLD     0x0
 
+/* Minimum watermark for backpressure */
+#define OCTEP_OQ_WMARK_MIN 256
+
 /* Rx Queue: maximum descriptors per ring */
 #define OCTEP_OQ_MAX_DESCRIPTORS   1024
 
 #define CFG_GET_OQ_REFILL_THRESHOLD(cfg)  ((cfg)->oq.refill_threshold)
 #define CFG_GET_OQ_INTR_PKT(cfg)          ((cfg)->oq.oq_intr_pkt)
 #define CFG_GET_OQ_INTR_TIME(cfg)         ((cfg)->oq.oq_intr_time)
+#define CFG_GET_OQ_WMARK(cfg)             ((cfg)->oq.wmark)
 
 #define CFG_GET_PORTS_MAX_IO_RINGS(cfg)    ((cfg)->pf_ring_cfg.max_io_rings)
 #define CFG_GET_PORTS_ACTIVE_IO_RINGS(cfg) ((cfg)->pf_ring_cfg.active_io_rings)
         * default. The time is specified in microseconds.
         */
        u32 oq_intr_time;
+
+       /* Water mark for backpressure.
+        * Output queue sends backpressure signal to source when
+        * free buffer count falls below wmark.
+        */
+       u32 wmark;
 };
 
 /* Tx/Rx configuration */
 
 #define    CNXK_SDP_R_OUT_SLIST_DBELL(ring)          \
        (CNXK_SDP_R_OUT_SLIST_DBELL_START + ((ring) * CNXK_RING_OFFSET))
 
+#define    CNXK_SDP_R_OUT_WMARK(ring)         \
+       (CNXK_SDP_R_OUT_WMARK_START + ((ring) * CNXK_RING_OFFSET))
+
 #define    CNXK_SDP_R_OUT_CNTS(ring)          \
        (CNXK_SDP_R_OUT_CNTS_START + ((ring) * CNXK_RING_OFFSET))