qcacld-3.0: Fix agc registers dump logic to avoid fw assert
Propagation from qcacld-2.0 to qcacld-3.0
- Current AGC registers dump logic is not correct and its not
reading correct target registers
- Add correct AGC register read recipe to read correct AGC data
- Wake up SoC before reading any target register
Change-Id: I38016f91bf3d124e93e304522058e97daa711f4a
CRs-Fixed: 911554
diff --git a/core/hif/src/mp_dev.c b/core/hif/src/mp_dev.c
index 276e60a..6d26173 100644
--- a/core/hif/src/mp_dev.c
+++ b/core/hif/src/mp_dev.c
@@ -60,6 +60,14 @@
#define BB_watchdog_ctrl_2 0x1a7c8
#define BB_watchdog_status_B 0x1a7e0
+
+#define PHY_BB_CHN_TABLES_INTF_ADDR 0x19894
+#define PHY_BB_CHN_TABLES_INTF_DATA 0x19898
+
+#define PHY_BB_CHN1_TABLES_INTF_ADDR 0x1a894
+#define PHY_BB_CHN1_TABLES_INTF_DATA 0x1a898
+
+
struct priv_ctrl_ctx {
uint32_t chaninfo_ctrl_orig;
uint32_t gain_min_offsets_orig;
@@ -253,6 +261,8 @@
int i, len = 30; /* check this value for Rome and Peregrine */
uint32_t chain0, chain1, chain_mask, val;
+ A_TARGET_ACCESS_BEGIN(scn);
+
chain_mask =
get_target_reg_bits(scn->mem, BB_multichain_enable,
MULTICHAIN_ENABLE_RX_CHAIN_MASK_MASK);
@@ -268,9 +278,11 @@
HIF_TRACE("%s: AGC history buffer dump: E", __func__);
if (chain0) {
for (i = 0; i < len; i++) {
- val =
- hif_read32_mb(scn->mem + BB_chaninfo_tab_b0 +
- i * 4);
+ hif_write32_mb(scn->mem +
+ PHY_BB_CHN_TABLES_INTF_ADDR,
+ BB_chaninfo_tab_b0 + i * 4);
+ val = hif_read32_mb(scn->mem +
+ PHY_BB_CHN_TABLES_INTF_DATA);
cdf_print("0x%x\t", val);
if (i % 4 == 0)
cdf_print("\n");
@@ -278,9 +290,11 @@
}
if (chain1) {
for (i = 0; i < len; i++) {
- val =
- hif_read32_mb(scn->mem + BB_chaninfo_tab_b1 +
- i * 4);
+ hif_write32_mb(scn->mem +
+ PHY_BB_CHN1_TABLES_INTF_ADDR,
+ BB_chaninfo_tab_b0 + i * 4);
+ val = hif_read32_mb(scn->mem +
+ PHY_BB_CHN1_TABLES_INTF_DATA);
cdf_print("0x%x\t", val);
if (i % 4 == 0)
cdf_print("\n");
@@ -290,6 +304,9 @@
/* restore original value */
hif_write32_mb(scn->mem + BB_gains_min_offsets,
g_priv_dump_ctx.gain_min_offsets_orig);
+
+ A_TARGET_ACCESS_END(scn);
+
return;
}