qcacmn: Add init path changes for UMAC HW reset feature

Add the changes to initialize UMAC HW reset context at SOC level.

Change-Id: I89afca81945ead67fb1a6454240281d89bec3ab9
CRs-Fixed: 3162080
这个提交包含在:
Shiva Krishna Pittala
2022-04-13 14:27:51 +05:30
提交者 Madan Koyyalamudi
父节点 f812869581
当前提交 df606bea4e
修改 4 个文件,包含 155 行新增0 行删除

查看文件

@@ -55,6 +55,7 @@
#ifndef REMOVE_PKT_LOG #ifndef REMOVE_PKT_LOG
#include <pktlog.h> #include <pktlog.h>
#endif #endif
#include <dp_umac_reset.h>
//#include "dp_tx.h" //#include "dp_tx.h"
@@ -2361,6 +2362,10 @@ struct dp_soc {
unsigned long vdev_stats_id_map; unsigned long vdev_stats_id_map;
bool txmon_hw_support; bool txmon_hw_support;
#ifdef DP_UMAC_HW_RESET_SUPPORT
struct dp_soc_umac_reset_ctx umac_reset_ctx;
#endif
}; };
#ifdef IPA_OFFLOAD #ifdef IPA_OFFLOAD

53
dp/wifi3.0/dp_umac_reset.c 普通文件
查看文件

@@ -0,0 +1,53 @@
/*
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#include <dp_types.h>
QDF_STATUS dp_soc_umac_reset_init(struct dp_soc *soc)
{
struct dp_soc_umac_reset_ctx *umac_reset_ctx;
size_t alloc_size;
if (!soc) {
dp_umac_reset_err("DP SOC is null");
return QDF_STATUS_E_NULL_VALUE;
}
umac_reset_ctx = &soc->umac_reset_ctx;
qdf_mem_zero(umac_reset_ctx, sizeof(*umac_reset_ctx));
umac_reset_ctx->current_state = UMAC_RESET_STATE_WAIT_FOR_PRE_RESET;
alloc_size = sizeof(struct umac_reset_shmem) +
DP_UMAC_RESET_SHMEM_ALIGN - 1;
umac_reset_ctx->shmem_vaddr_unaligned =
qdf_mem_alloc_consistent(soc->osdev, soc->osdev->dev,
alloc_size,
&umac_reset_ctx->shmem_paddr_unaligned);
if (!umac_reset_ctx->shmem_vaddr_unaligned) {
dp_umac_reset_err("shmem allocation failed");
return QDF_STATUS_E_NOMEM;
}
umac_reset_ctx->shmem_vaddr_aligned = (void *)(uintptr_t)qdf_roundup(
(uint64_t)(uintptr_t)umac_reset_ctx->shmem_vaddr_unaligned,
DP_UMAC_RESET_SHMEM_ALIGN);
umac_reset_ctx->shmem_paddr_aligned = qdf_roundup(
(uint64_t)umac_reset_ctx->shmem_paddr_unaligned,
DP_UMAC_RESET_SHMEM_ALIGN);
return QDF_STATUS_SUCCESS;
}

96
dp/wifi3.0/dp_umac_reset.h 普通文件
查看文件

@@ -0,0 +1,96 @@
/*
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef _DP_UMAC_RESET_H_
#define _DP_UMAC_RESET_H_
#ifdef DP_UMAC_HW_RESET_SUPPORT
#include <qdf_types.h>
#define dp_umac_reset_alert(params...) \
QDF_TRACE_FATAL(QDF_MODULE_ID_DP_UMAC_RESET, params)
#define dp_umac_reset_err(params...) \
QDF_TRACE_ERROR(QDF_MODULE_ID_DP_UMAC_RESET, params)
#define dp_umac_reset_warn(params...) \
QDF_TRACE_WARN(QDF_MODULE_ID_DP_UMAC_RESET, params)
#define dp_umac_reset_notice(params...) \
QDF_TRACE_INFO(QDF_MODULE_ID_DP_UMAC_RESET, params)
#define dp_umac_reset_info(params...) \
QDF_TRACE_INFO(QDF_MODULE_ID_DP_UMAC_RESET, params)
#define dp_umac_reset_debug(params...) \
QDF_TRACE_DEBUG(QDF_MODULE_ID_DP_UMAC_RESET, params)
#define DP_UMAC_RESET_SHMEM_ALIGN 8
struct dp_soc;
/**
* enum umac_reset_state - States required for UMAC reset state machine
* @UMAC_RESET_STATE_WAIT_FOR_PRE_RESET: Waiting for the PRE_RESET event
* @UMAC_RESET_STATE_PRE_RESET_RECEIVED: Received the PRE_RESET event
* @UMAC_RESET_STATE_HOST_PRE_RESET_COMPLETED: Host has completed handling the
* PRE_RESET event
* @UMAC_RESET_STATE_WAIT_FOR_POST_RESET: Waiting for the POST_RESET event
* @UMAC_RESET_STATE_POST_RESET_RECEIVED: Received the POST_RESET event
* @UMAC_RESET_STATE_HOST_POST_RESET_COMPLETED: Host has completed handling the
* POST_RESET event
*/
enum umac_reset_state {
UMAC_RESET_STATE_WAIT_FOR_PRE_RESET = 0,
UMAC_RESET_STATE_PRE_RESET_RECEIVED,
UMAC_RESET_STATE_HOST_PRE_RESET_COMPLETED,
UMAC_RESET_STATE_WAIT_FOR_POST_RESET,
UMAC_RESET_STATE_POST_RESET_RECEIVED,
UMAC_RESET_STATE_HOST_POST_RESET_COMPLETED,
};
/**
* struct umac_reset_shmem - Shared memory layout for UMAC reset feature
* @t2h_indication: target to host communicaton
* @h2t_indication: host to target communicaton
*/
struct umac_reset_shmem {
uint32_t t2h_indication;
uint32_t h2t_indication;
};
/**
* struct dp_soc_umac_reset_ctx - UMAC reset context at soc level
* @shmem_paddr_unaligned: Physical address of the shared memory (unaligned)
* @shmem_vaddr_unaligned: Virtual address of the shared memory (unaligned)
* @shmem_paddr_aligned: Physical address of the shared memory (aligned)
* @shmem_vaddr_aligned: Virtual address of the shared memory (aligned)
* @intr_offset: Offset of the UMAC reset interrupt w.r.t DP base interrupt
* @current_state: current state of the UMAC reset state machine
*/
struct dp_soc_umac_reset_ctx {
qdf_dma_addr_t shmem_paddr_unaligned;
struct umac_reset_shmem *shmem_vaddr_unaligned;
qdf_dma_addr_t shmem_paddr_aligned;
struct umac_reset_shmem *shmem_vaddr_aligned;
uint32_t intr_offset;
enum umac_reset_state current_state;
};
/**
* dp_soc_umac_reset_init() - Initialize UMAC reset context
* @soc: DP soc object
*
* Return: QDF status of operation
*/
QDF_STATUS dp_soc_umac_reset_init(struct dp_soc *soc);
#endif /* DP_UMAC_HW_RESET_SUPPORT */
#endif /* _DP_UMAC_RESET_H_ */

查看文件

@@ -580,6 +580,7 @@ typedef enum {
QDF_MODULE_ID_AFC, QDF_MODULE_ID_AFC,
QDF_MODULE_ID_WIFI_RADAR, QDF_MODULE_ID_WIFI_RADAR,
QDF_MODULE_ID_TWT, QDF_MODULE_ID_TWT,
QDF_MODULE_ID_DP_UMAC_RESET,
QDF_MODULE_ID_ANY, QDF_MODULE_ID_ANY,
QDF_MODULE_ID_MAX, QDF_MODULE_ID_MAX,
} QDF_MODULE_ID; } QDF_MODULE_ID;