qcacmn: Fix hal_get_srng_ring_id() for Beryllium LMAC rings
For Beryllium LMAC rings, hal_get_srng_ring_id() provides the ring IDs separately per each LMAC only if that LMAC ring is a destination ring (This is done to use a common source ring for the DMAC rings). But the ring IDs for LMAC source rings like DIR_BUF_RX_SRC_DMA_RING are not being provided separately per LMAC. As a result, these ring IDs in split-PHY mode are colliding for the 2 LMACs. Fix this by doing the following. - Mark the DMAC common rings within the LMAC rings. - Provide ring ID separately per each LMAC if the ring is an LMAC ring but not a DMAC common ring. Change-Id: Ifdae085b5784a03763abfc4edb42d94593e3ea21 CRs-Fixed: 3282702
This commit is contained in:

committed by
Madan Koyyalamudi

parent
ffec5f3f9e
commit
527b0343a3
@@ -728,6 +728,7 @@ struct hal_hw_srng_config {
|
|||||||
enum hal_srng_dir ring_dir;
|
enum hal_srng_dir ring_dir;
|
||||||
uint32_t max_size;
|
uint32_t max_size;
|
||||||
bool nf_irq_support;
|
bool nf_irq_support;
|
||||||
|
bool dmac_cmn_ring;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_SHADOW_REGISTERS 40
|
#define MAX_SHADOW_REGISTERS 40
|
||||||
|
@@ -132,13 +132,11 @@ static int hal_get_srng_ring_id(struct hal_soc *hal, int ring_type,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* For BE, dmac_cmn_src_rxbuf_ring is set. If this is set
|
* Some DMAC rings share a common source ring, hence don't provide them
|
||||||
* and ring is dst and also lmac ring then provide ring id per lmac
|
* with separate ring IDs per LMAC.
|
||||||
*/
|
*/
|
||||||
if (ring_config->lmac_ring &&
|
if (ring_config->lmac_ring && !ring_config->dmac_cmn_ring) {
|
||||||
(!hal->dmac_cmn_src_rxbuf_ring ||
|
|
||||||
ring_config->ring_dir == HAL_SRNG_DST_RING)) {
|
|
||||||
ring_id = (ring_config->start_ring_id + ring_num +
|
ring_id = (ring_config->start_ring_id + ring_num +
|
||||||
(mac_id * HAL_MAX_RINGS_PER_LMAC));
|
(mac_id * HAL_MAX_RINGS_PER_LMAC));
|
||||||
} else {
|
} else {
|
||||||
|
@@ -2406,6 +2406,7 @@ struct hal_hw_srng_config hw_srng_table_5332[] = {
|
|||||||
.reg_start = {},
|
.reg_start = {},
|
||||||
.reg_size = {},
|
.reg_size = {},
|
||||||
.max_size = HAL_RXDMA_MAX_RING_SIZE_BE,
|
.max_size = HAL_RXDMA_MAX_RING_SIZE_BE,
|
||||||
|
.dmac_cmn_ring = TRUE,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -543,6 +543,7 @@ struct hal_hw_srng_config hw_srng_table_9224v1[] = {
|
|||||||
.reg_start = {},
|
.reg_start = {},
|
||||||
.reg_size = {},
|
.reg_size = {},
|
||||||
.max_size = HAL_RXDMA_MAX_RING_SIZE_BE,
|
.max_size = HAL_RXDMA_MAX_RING_SIZE_BE,
|
||||||
|
.dmac_cmn_ring = TRUE,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -543,6 +543,7 @@ struct hal_hw_srng_config hw_srng_table_9224v2[] = {
|
|||||||
.reg_start = {},
|
.reg_start = {},
|
||||||
.reg_size = {},
|
.reg_size = {},
|
||||||
.max_size = HAL_RXDMA_MAX_RING_SIZE_BE,
|
.max_size = HAL_RXDMA_MAX_RING_SIZE_BE,
|
||||||
|
.dmac_cmn_ring = TRUE,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user