qcacmn: Get back WAR to confirm WBM IDLE ring LSB write
On Lahaina platform it is seen that WBM IDLE ring init is failing, Write to WBM_IDLE link ring LSB write is failing. Add temporary WAR to do back to back write of WBM IDLE link ring LSB address config register. Change-Id: If0c20da06bafa3037845e9806934f9e4dfbd1c1c CRs-Fixed: 2690495
This commit is contained in:

committed by
nshrivas

parent
1347c3ab9c
commit
e4155588aa
@@ -1784,6 +1784,29 @@ void hal_get_hw_hptp_generic(struct hal_soc *hal_soc,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(WBM_IDLE_LSB_WRITE_CONFIRM_WAR)
|
||||||
|
/**
|
||||||
|
* hal_wbm_idle_lsb_write_confirm() - Check and update WBM_IDLE_LINK ring LSB
|
||||||
|
* @srng: srng handle
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
static void hal_wbm_idle_lsb_write_confirm(struct hal_srng *srng)
|
||||||
|
{
|
||||||
|
if (srng->ring_id == HAL_SRNG_WBM_IDLE_LINK) {
|
||||||
|
while (SRNG_SRC_REG_READ(srng, BASE_LSB) !=
|
||||||
|
((unsigned int)srng->ring_base_paddr & 0xffffffff))
|
||||||
|
SRNG_SRC_REG_WRITE(srng, BASE_LSB,
|
||||||
|
srng->ring_base_paddr &
|
||||||
|
0xffffffff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static void hal_wbm_idle_lsb_write_confirm(struct hal_srng *srng)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* hal_srng_src_hw_init - Private function to initialize SRNG
|
* hal_srng_src_hw_init - Private function to initialize SRNG
|
||||||
* source ring HW
|
* source ring HW
|
||||||
@@ -1811,6 +1834,8 @@ void hal_srng_src_hw_init_generic(struct hal_soc *hal,
|
|||||||
}
|
}
|
||||||
|
|
||||||
SRNG_SRC_REG_WRITE(srng, BASE_LSB, srng->ring_base_paddr & 0xffffffff);
|
SRNG_SRC_REG_WRITE(srng, BASE_LSB, srng->ring_base_paddr & 0xffffffff);
|
||||||
|
hal_wbm_idle_lsb_write_confirm(srng);
|
||||||
|
|
||||||
reg_val = SRNG_SM(SRNG_SRC_FLD(BASE_MSB, RING_BASE_ADDR_MSB),
|
reg_val = SRNG_SM(SRNG_SRC_FLD(BASE_MSB, RING_BASE_ADDR_MSB),
|
||||||
((uint64_t)(srng->ring_base_paddr) >> 32)) |
|
((uint64_t)(srng->ring_base_paddr) >> 32)) |
|
||||||
SRNG_SM(SRNG_SRC_FLD(BASE_MSB, RING_SIZE),
|
SRNG_SM(SRNG_SRC_FLD(BASE_MSB, RING_SIZE),
|
||||||
|
Reference in New Issue
Block a user