qcacld-3.0: Add fw ready uevent to update driver state
FW ready state guarantees the completion of 2nd stage power on reset sequence of wcn3990 target. Add fw ready uevent to update driver state, which is required to check if target registers are accessible or not, while recovery is in progress. Change-Id: I78d56644d4d4ac3a0371be625a2debed8ac7cebf CRs-Fixed: 2058451
This commit is contained in:
parent
69696fb954
commit
a1f6dacf0c
@ -72,7 +72,8 @@ enum cds_driver_state {
|
||||
CDS_DRIVER_STATE_LOADING = BIT(1),
|
||||
CDS_DRIVER_STATE_UNLOADING = BIT(2),
|
||||
CDS_DRIVER_STATE_RECOVERING = BIT(3),
|
||||
CDS_DRIVER_STATE_BAD = BIT(4)
|
||||
CDS_DRIVER_STATE_BAD = BIT(4),
|
||||
CDS_DRIVER_STATE_FW_READY = BIT(5),
|
||||
};
|
||||
|
||||
#define __CDS_IS_DRIVER_STATE(_state, _mask) (((_state) & (_mask)) == (_mask))
|
||||
@ -224,6 +225,18 @@ static inline void cds_set_fw_down(uint8_t value)
|
||||
cds_clear_fw_state(CDS_FW_STATE_DOWN);
|
||||
}
|
||||
|
||||
/**
|
||||
* cds_is_target_ready() - Is target is in ready state
|
||||
*
|
||||
* Return: true if target is in ready state and false otherwise.
|
||||
*/
|
||||
static inline bool cds_is_target_ready(void)
|
||||
{
|
||||
enum cds_driver_state state = cds_get_driver_state();
|
||||
|
||||
return __CDS_IS_DRIVER_STATE(state, CDS_DRIVER_STATE_FW_READY);
|
||||
}
|
||||
|
||||
/**
|
||||
* cds_set_recovery_in_progress() - Set recovery in progress
|
||||
* @value: value to set
|
||||
@ -252,6 +265,20 @@ static inline void cds_set_driver_in_bad_state(uint8_t value)
|
||||
cds_clear_driver_state(CDS_DRIVER_STATE_BAD);
|
||||
}
|
||||
|
||||
/**
|
||||
* cds_set_target_ready() - Set target ready state
|
||||
* @value: value to set
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
static inline void cds_set_target_ready(uint8_t value)
|
||||
{
|
||||
if (value)
|
||||
cds_set_driver_state(CDS_DRIVER_STATE_FW_READY);
|
||||
else
|
||||
cds_clear_driver_state(CDS_DRIVER_STATE_FW_READY);
|
||||
}
|
||||
|
||||
/**
|
||||
* cds_set_load_in_progress() - Set load in progress
|
||||
* @value: value to set
|
||||
|
@ -123,6 +123,17 @@ static bool hdd_is_recovery_in_progress(void *data)
|
||||
return cds_is_driver_recovering();
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_is_target_ready() - API to query if target is in ready state
|
||||
* @data: Private Data
|
||||
*
|
||||
* Return: bool
|
||||
*/
|
||||
static bool hdd_is_target_ready(void *data)
|
||||
{
|
||||
return cds_is_target_ready();
|
||||
}
|
||||
|
||||
/**
|
||||
* hdd_hif_init_driver_state_callbacks() - API to initialize HIF callbacks
|
||||
* @data: Private Data
|
||||
@ -141,6 +152,7 @@ static void hdd_hif_init_driver_state_callbacks(void *data,
|
||||
cbk->is_recovery_in_progress = hdd_is_recovery_in_progress;
|
||||
cbk->is_load_unload_in_progress = hdd_is_load_or_unload_in_progress;
|
||||
cbk->is_driver_unloading = hdd_is_driver_unloading;
|
||||
cbk->is_target_ready = hdd_is_target_ready;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1436,11 +1448,18 @@ static void wlan_hdd_purge_notifier(void)
|
||||
static void wlan_hdd_pld_uevent(struct device *dev,
|
||||
struct pld_uevent_data *uevent)
|
||||
{
|
||||
if (uevent->uevent == PLD_RECOVERY) {
|
||||
switch (uevent->uevent) {
|
||||
case PLD_RECOVERY:
|
||||
cds_set_recovery_in_progress(true);
|
||||
hdd_pld_ipa_uc_shutdown_pipes();
|
||||
} else if (uevent->uevent == PLD_FW_DOWN) {
|
||||
break;
|
||||
case PLD_FW_DOWN:
|
||||
cds_set_fw_state(CDS_FW_STATE_DOWN);
|
||||
cds_set_target_ready(false);
|
||||
break;
|
||||
case PLD_FW_READY:
|
||||
cds_set_target_ready(true);
|
||||
break;
|
||||
}
|
||||
|
||||
wlan_hdd_purge_notifier();
|
||||
|
@ -147,6 +147,7 @@ enum pld_driver_status {
|
||||
enum pld_uevent {
|
||||
PLD_RECOVERY,
|
||||
PLD_FW_DOWN,
|
||||
PLD_FW_READY,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -263,6 +263,10 @@ static int pld_snoc_uevent(struct device *dev,
|
||||
data.uevent = PLD_FW_DOWN;
|
||||
data.fw_down.crashed = uevent_data->crashed;
|
||||
break;
|
||||
case ICNSS_UEVENT_FW_READY:
|
||||
data.uevent = PLD_FW_READY;
|
||||
break;
|
||||
|
||||
default:
|
||||
goto out;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user