qcacmn: Provide API for dp soc reinit
dp_soc_reinit is a flag to check if the Rx descriptor memory can be reused across WiFi up/down Provide an API which checks the flag and returns either true or false based on the value set CRs-Fixed: 2354186 Change-Id: I8c1afbfe0f743d7c9ab37a42a9ef0c6ac1fbf39c
This commit is contained in:
@@ -807,6 +807,8 @@ static inline int dp_get_mac_id_for_mac(struct dp_soc *soc, uint32_t mac_id)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool dp_is_soc_reinit(struct dp_soc *soc);
|
||||||
|
|
||||||
#ifdef WDI_EVENT_ENABLE
|
#ifdef WDI_EVENT_ENABLE
|
||||||
QDF_STATUS dp_h2t_cfg_stats_msg_send(struct dp_pdev *pdev,
|
QDF_STATUS dp_h2t_cfg_stats_msg_send(struct dp_pdev *pdev,
|
||||||
uint32_t stats_type_upload_mask,
|
uint32_t stats_type_upload_mask,
|
||||||
|
@@ -1147,7 +1147,7 @@ static int dp_srng_setup(struct dp_soc *soc, struct dp_srng *srng,
|
|||||||
srng->alloc_size = (num_entries * entry_size) + ring_base_align - 1;
|
srng->alloc_size = (num_entries * entry_size) + ring_base_align - 1;
|
||||||
srng->num_entries = num_entries;
|
srng->num_entries = num_entries;
|
||||||
|
|
||||||
if (!soc->dp_soc_reinit) {
|
if (!dp_is_soc_reinit(soc)) {
|
||||||
srng->base_vaddr_unaligned =
|
srng->base_vaddr_unaligned =
|
||||||
qdf_mem_alloc_consistent(soc->osdev,
|
qdf_mem_alloc_consistent(soc->osdev,
|
||||||
soc->osdev->dev,
|
soc->osdev->dev,
|
||||||
@@ -1269,7 +1269,7 @@ static void dp_srng_deinit(struct dp_soc *soc, struct dp_srng *srng,
|
|||||||
static void dp_srng_cleanup(struct dp_soc *soc, struct dp_srng *srng,
|
static void dp_srng_cleanup(struct dp_soc *soc, struct dp_srng *srng,
|
||||||
int ring_type, int ring_num)
|
int ring_type, int ring_num)
|
||||||
{
|
{
|
||||||
if (!soc->dp_soc_reinit) {
|
if (!dp_is_soc_reinit(soc)) {
|
||||||
if (!srng->hal_srng && (srng->alloc_size == 0)) {
|
if (!srng->hal_srng && (srng->alloc_size == 0)) {
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||||
FL("Ring type: %d, num:%d not setup"),
|
FL("Ring type: %d, num:%d not setup"),
|
||||||
@@ -1884,7 +1884,7 @@ static int dp_hw_link_desc_pool_setup(struct dp_soc *soc)
|
|||||||
total_mem_size, num_link_desc_banks);
|
total_mem_size, num_link_desc_banks);
|
||||||
|
|
||||||
for (i = 0; i < num_link_desc_banks; i++) {
|
for (i = 0; i < num_link_desc_banks; i++) {
|
||||||
if (!soc->dp_soc_reinit) {
|
if (!dp_is_soc_reinit(soc)) {
|
||||||
baseaddr = &soc->link_desc_banks[i].
|
baseaddr = &soc->link_desc_banks[i].
|
||||||
base_paddr_unaligned;
|
base_paddr_unaligned;
|
||||||
soc->link_desc_banks[i].base_vaddr_unaligned =
|
soc->link_desc_banks[i].base_vaddr_unaligned =
|
||||||
@@ -1918,7 +1918,7 @@ static int dp_hw_link_desc_pool_setup(struct dp_soc *soc)
|
|||||||
/* Allocate last bank in case total memory required is not exact
|
/* Allocate last bank in case total memory required is not exact
|
||||||
* multiple of max_alloc_size
|
* multiple of max_alloc_size
|
||||||
*/
|
*/
|
||||||
if (!soc->dp_soc_reinit) {
|
if (!dp_is_soc_reinit(soc)) {
|
||||||
baseaddr = &soc->link_desc_banks[i].
|
baseaddr = &soc->link_desc_banks[i].
|
||||||
base_paddr_unaligned;
|
base_paddr_unaligned;
|
||||||
soc->link_desc_banks[i].base_vaddr_unaligned =
|
soc->link_desc_banks[i].base_vaddr_unaligned =
|
||||||
@@ -2008,7 +2008,7 @@ static int dp_hw_link_desc_pool_setup(struct dp_soc *soc)
|
|||||||
|
|
||||||
for (i = 0; i < num_scatter_bufs; i++) {
|
for (i = 0; i < num_scatter_bufs; i++) {
|
||||||
baseaddr = &soc->wbm_idle_scatter_buf_base_paddr[i];
|
baseaddr = &soc->wbm_idle_scatter_buf_base_paddr[i];
|
||||||
if (!soc->dp_soc_reinit) {
|
if (!dp_is_soc_reinit(soc)) {
|
||||||
buf_size = soc->wbm_idle_scatter_buf_size;
|
buf_size = soc->wbm_idle_scatter_buf_size;
|
||||||
soc->wbm_idle_scatter_buf_base_vaddr[i] =
|
soc->wbm_idle_scatter_buf_base_vaddr[i] =
|
||||||
qdf_mem_alloc_consistent(soc->osdev,
|
qdf_mem_alloc_consistent(soc->osdev,
|
||||||
@@ -3169,7 +3169,7 @@ static struct cdp_pdev *dp_pdev_attach_wifi3(struct cdp_soc_t *txrx_soc,
|
|||||||
struct dp_soc *soc = (struct dp_soc *)txrx_soc;
|
struct dp_soc *soc = (struct dp_soc *)txrx_soc;
|
||||||
struct dp_pdev *pdev = NULL;
|
struct dp_pdev *pdev = NULL;
|
||||||
|
|
||||||
if (soc->dp_soc_reinit)
|
if (dp_is_soc_reinit(soc))
|
||||||
pdev = soc->pdev_list[pdev_id];
|
pdev = soc->pdev_list[pdev_id];
|
||||||
else
|
else
|
||||||
pdev = qdf_mem_malloc(sizeof(*pdev));
|
pdev = qdf_mem_malloc(sizeof(*pdev));
|
||||||
@@ -3684,7 +3684,7 @@ static void dp_pdev_detach_wifi3(struct cdp_pdev *txrx_pdev, int force)
|
|||||||
struct dp_pdev *pdev = (struct dp_pdev *)txrx_pdev;
|
struct dp_pdev *pdev = (struct dp_pdev *)txrx_pdev;
|
||||||
struct dp_soc *soc = pdev->soc;
|
struct dp_soc *soc = pdev->soc;
|
||||||
|
|
||||||
if (soc->dp_soc_reinit) {
|
if (dp_is_soc_reinit(soc)) {
|
||||||
dp_pdev_detach(txrx_pdev, force);
|
dp_pdev_detach(txrx_pdev, force);
|
||||||
} else {
|
} else {
|
||||||
dp_pdev_deinit(txrx_pdev, force);
|
dp_pdev_deinit(txrx_pdev, force);
|
||||||
@@ -3935,7 +3935,7 @@ static void dp_soc_detach_wifi3(void *txrx_soc)
|
|||||||
{
|
{
|
||||||
struct dp_soc *soc = (struct dp_soc *)txrx_soc;
|
struct dp_soc *soc = (struct dp_soc *)txrx_soc;
|
||||||
|
|
||||||
if (soc->dp_soc_reinit) {
|
if (dp_is_soc_reinit(soc)) {
|
||||||
dp_soc_detach(txrx_soc);
|
dp_soc_detach(txrx_soc);
|
||||||
} else {
|
} else {
|
||||||
dp_soc_deinit(txrx_soc);
|
dp_soc_deinit(txrx_soc);
|
||||||
@@ -9818,6 +9818,17 @@ void dp_is_hw_dbs_enable(struct dp_soc *soc,
|
|||||||
*max_mac_rings = (dbs_enable)?(*max_mac_rings):1;
|
*max_mac_rings = (dbs_enable)?(*max_mac_rings):1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* dp_is_soc_reinit() - Check if soc reinit is true
|
||||||
|
* @soc: DP SoC context
|
||||||
|
*
|
||||||
|
* Return: true or false
|
||||||
|
*/
|
||||||
|
bool dp_is_soc_reinit(struct dp_soc *soc)
|
||||||
|
{
|
||||||
|
return soc->dp_soc_reinit;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* dp_set_pktlog_wifi3() - attach txrx vdev
|
* dp_set_pktlog_wifi3() - attach txrx vdev
|
||||||
* @pdev: Datapath PDEV handle
|
* @pdev: Datapath PDEV handle
|
||||||
|
@@ -1245,7 +1245,7 @@ QDF_STATUS dp_mon_link_desc_pool_setup(struct dp_soc *soc, uint32_t mac_id)
|
|||||||
for (i = 0; i < num_link_desc_banks; i++) {
|
for (i = 0; i < num_link_desc_banks; i++) {
|
||||||
baseaddr = &dp_pdev->link_desc_banks[mac_for_pdev][i].
|
baseaddr = &dp_pdev->link_desc_banks[mac_for_pdev][i].
|
||||||
base_paddr_unaligned;
|
base_paddr_unaligned;
|
||||||
if (!soc->dp_soc_reinit) {
|
if (!dp_is_soc_reinit(soc)) {
|
||||||
dp_pdev->link_desc_banks[mac_for_pdev][i].
|
dp_pdev->link_desc_banks[mac_for_pdev][i].
|
||||||
base_vaddr_unaligned =
|
base_vaddr_unaligned =
|
||||||
qdf_mem_alloc_consistent(soc->osdev,
|
qdf_mem_alloc_consistent(soc->osdev,
|
||||||
@@ -1290,7 +1290,7 @@ QDF_STATUS dp_mon_link_desc_pool_setup(struct dp_soc *soc, uint32_t mac_id)
|
|||||||
*/
|
*/
|
||||||
baseaddr = &dp_pdev->link_desc_banks[mac_for_pdev][i].
|
baseaddr = &dp_pdev->link_desc_banks[mac_for_pdev][i].
|
||||||
base_paddr_unaligned;
|
base_paddr_unaligned;
|
||||||
if (!soc->dp_soc_reinit) {
|
if (!dp_is_soc_reinit(soc)) {
|
||||||
dp_pdev->link_desc_banks[mac_for_pdev][i].
|
dp_pdev->link_desc_banks[mac_for_pdev][i].
|
||||||
base_vaddr_unaligned =
|
base_vaddr_unaligned =
|
||||||
qdf_mem_alloc_consistent(soc->osdev,
|
qdf_mem_alloc_consistent(soc->osdev,
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016-2018 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
* any purpose with or without fee is hereby granted, provided that the
|
* any purpose with or without fee is hereby granted, provided that the
|
||||||
@@ -101,7 +101,7 @@ QDF_STATUS dp_tx_desc_pool_alloc(struct dp_soc *soc, uint8_t pool_id,
|
|||||||
|
|
||||||
desc_size = DP_TX_DESC_SIZE(sizeof(*tx_desc_elem));
|
desc_size = DP_TX_DESC_SIZE(sizeof(*tx_desc_elem));
|
||||||
tx_desc_pool->elem_size = desc_size;
|
tx_desc_pool->elem_size = desc_size;
|
||||||
if (!soc->dp_soc_reinit)
|
if (!dp_is_soc_reinit(soc))
|
||||||
qdf_mem_multi_pages_alloc(soc->osdev,
|
qdf_mem_multi_pages_alloc(soc->osdev,
|
||||||
&tx_desc_pool->desc_pages,
|
&tx_desc_pool->desc_pages,
|
||||||
desc_size, num_elem,
|
desc_size, num_elem,
|
||||||
@@ -196,7 +196,7 @@ QDF_STATUS dp_tx_ext_desc_pool_alloc(struct dp_soc *soc, uint8_t pool_id,
|
|||||||
soc->tx_ext_desc[pool_id].elem_size = HAL_TX_EXT_DESC_WITH_META_DATA;
|
soc->tx_ext_desc[pool_id].elem_size = HAL_TX_EXT_DESC_WITH_META_DATA;
|
||||||
soc->tx_ext_desc[pool_id].elem_count = num_elem;
|
soc->tx_ext_desc[pool_id].elem_count = num_elem;
|
||||||
memctx = qdf_get_dma_mem_context((&soc->tx_ext_desc[pool_id]), memctx);
|
memctx = qdf_get_dma_mem_context((&soc->tx_ext_desc[pool_id]), memctx);
|
||||||
if (!soc->dp_soc_reinit) {
|
if (!dp_is_soc_reinit(soc)) {
|
||||||
qdf_mem_multi_pages_alloc(soc->osdev,
|
qdf_mem_multi_pages_alloc(soc->osdev,
|
||||||
&soc->tx_ext_desc[pool_id].
|
&soc->tx_ext_desc[pool_id].
|
||||||
desc_pages,
|
desc_pages,
|
||||||
@@ -220,7 +220,7 @@ QDF_STATUS dp_tx_ext_desc_pool_alloc(struct dp_soc *soc, uint8_t pool_id,
|
|||||||
*/
|
*/
|
||||||
soc->tx_ext_desc[pool_id].link_elem_size =
|
soc->tx_ext_desc[pool_id].link_elem_size =
|
||||||
sizeof(struct dp_tx_ext_desc_elem_s);
|
sizeof(struct dp_tx_ext_desc_elem_s);
|
||||||
if (!soc->dp_soc_reinit) {
|
if (!dp_is_soc_reinit(soc)) {
|
||||||
qdf_mem_multi_pages_alloc(soc->osdev,
|
qdf_mem_multi_pages_alloc(soc->osdev,
|
||||||
&soc->tx_ext_desc[pool_id].
|
&soc->tx_ext_desc[pool_id].
|
||||||
desc_link_pages,
|
desc_link_pages,
|
||||||
@@ -341,7 +341,7 @@ QDF_STATUS dp_tx_tso_desc_pool_alloc(struct dp_soc *soc, uint8_t pool_id,
|
|||||||
tso_desc_pool = &soc->tx_tso_desc[pool_id];
|
tso_desc_pool = &soc->tx_tso_desc[pool_id];
|
||||||
tso_desc_pool->num_free = 0;
|
tso_desc_pool->num_free = 0;
|
||||||
desc_size = DP_TX_DESC_SIZE(sizeof(struct qdf_tso_seg_elem_t));
|
desc_size = DP_TX_DESC_SIZE(sizeof(struct qdf_tso_seg_elem_t));
|
||||||
if (!soc->dp_soc_reinit)
|
if (!dp_is_soc_reinit(soc))
|
||||||
qdf_mem_multi_pages_alloc(soc->osdev,
|
qdf_mem_multi_pages_alloc(soc->osdev,
|
||||||
&tso_desc_pool->desc_pages,
|
&tso_desc_pool->desc_pages,
|
||||||
desc_size,
|
desc_size,
|
||||||
@@ -419,7 +419,7 @@ QDF_STATUS dp_tx_tso_num_seg_pool_alloc(struct dp_soc *soc, uint8_t pool_id,
|
|||||||
tso_num_seg_pool = &soc->tx_tso_num_seg[pool_id];
|
tso_num_seg_pool = &soc->tx_tso_num_seg[pool_id];
|
||||||
tso_num_seg_pool->num_free = 0;
|
tso_num_seg_pool->num_free = 0;
|
||||||
desc_size = DP_TX_DESC_SIZE(sizeof(struct qdf_tso_num_seg_elem_t));
|
desc_size = DP_TX_DESC_SIZE(sizeof(struct qdf_tso_num_seg_elem_t));
|
||||||
if (!soc->dp_soc_reinit)
|
if (!dp_is_soc_reinit(soc))
|
||||||
qdf_mem_multi_pages_alloc(soc->osdev,
|
qdf_mem_multi_pages_alloc(soc->osdev,
|
||||||
&tso_num_seg_pool->desc_pages,
|
&tso_num_seg_pool->desc_pages,
|
||||||
desc_size,
|
desc_size,
|
||||||
|
Reference in New Issue
Block a user