#define ROC_AURA_ID_MASK (BIT_ULL(16) - 1)
#define ROC_AURA_OP_LIMIT_MASK (BIT_ULL(36) - 1)
+#define ROC_NPA_MAX_BLOCK_SZ (128 * 1024)
#define ROC_CN10K_NPA_BATCH_ALLOC_MAX_PTRS 512
#define ROC_CN10K_NPA_BATCH_FREE_MAX_PTRS 15
return 0;
}
+static inline void
+roc_npa_batch_alloc_wait(uint64_t *cache_line)
+{
+ /* Batch alloc status code is updated in bits [5:6] of the first word
+ * of the 128 byte cache line.
+ */
+ while (((__atomic_load_n(cache_line, __ATOMIC_RELAXED) >> 5) & 0x3) ==
+ ALLOC_CCODE_INVAL)
+ ;
+}
+
static inline unsigned int
roc_npa_aura_batch_alloc_count(uint64_t *aligned_buf, unsigned int num)
{
/* Check each ROC cache line one by one */
for (i = 0; i < num; i += (ROC_ALIGN >> 3)) {
struct npa_batch_alloc_status_s *status;
- int ccode;
status = (struct npa_batch_alloc_status_s *)&aligned_buf[i];
- /* Status is updated in first 7 bits of each 128 byte cache
- * line. Wait until the status gets updated.
- */
- do {
- ccode = (volatile int)status->ccode;
- } while (ccode == ALLOC_CCODE_INVAL);
-
+ roc_npa_batch_alloc_wait(&aligned_buf[i]);
count += status->count;
}
/* Check each ROC cache line one by one */
for (i = 0; i < num; i += (ROC_ALIGN >> 3)) {
struct npa_batch_alloc_status_s *status;
- int line_count, ccode;
+ int line_count;
status = (struct npa_batch_alloc_status_s *)&aligned_buf[i];
- /* Status is updated in first 7 bits of each 128 byte cache
- * line. Wait until the status gets updated.
- */
- do {
- ccode = (volatile int)status->ccode;
- } while (ccode == ALLOC_CCODE_INVAL);
+ roc_npa_batch_alloc_wait(&aligned_buf[i]);
line_count = status->count;