qcacmn: do not process duplicate descriptor frame in RX

once in a while the HW is sending a descriptor which
is already processed by host. This can be a potential HW
issue, as a WAR we are not processing such duplicate descriptors
instead increment a counter and continue with next descriptor.

Change-Id: I6c9bc6a9fb4705b42284171a32855411aa5dd73f
CRs-Fixed: 2338543
This commit is contained in:
Tallapragada Kalyan
2019-01-09 19:13:19 +05:30
committed by nshrivas
parent e88c0e8ffa
commit eff377a1d3
7 changed files with 119 additions and 4 deletions

View File

@@ -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
* any purpose with or without fee is hereby granted, provided that the
@@ -1334,4 +1334,48 @@ static inline void hal_setup_link_idle_list(void *halsoc,
num_entries);
}
/**
* hal_srng_dump_ring_desc() - Dump ring descriptor info
*
* @hal_soc: Opaque HAL SOC handle
* @hal_ring: Source ring pointer
* @ring_desc: Opaque ring descriptor handle
*/
static inline void hal_srng_dump_ring_desc(struct hal_soc *hal, void *hal_ring,
void *ring_desc)
{
struct hal_srng *srng = (struct hal_srng *)hal_ring;
QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
ring_desc, (srng->entry_size << 2));
}
/**
* hal_srng_dump_ring() - Dump last 128 descs of the ring
*
* @hal_soc: Opaque HAL SOC handle
* @hal_ring: Source ring pointer
*/
static inline void hal_srng_dump_ring(struct hal_soc *hal, void *hal_ring)
{
struct hal_srng *srng = (struct hal_srng *)hal_ring;
uint32_t *desc;
uint32_t tp, i;
tp = srng->u.dst_ring.tp;
for (i = 0; i < 128; i++) {
if (!tp)
tp = srng->ring_size;
desc = &srng->ring_base_vaddr[tp - srng->entry_size];
QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_DP,
QDF_TRACE_LEVEL_FATAL,
desc, (srng->entry_size << 2));
tp -= srng->entry_size;
}
}
#endif /* _HAL_APIH_ */