Snap for 11291747 from 8b95ddb951 to android12-5.10-keystone-qcom-release

Change-Id: I2f7a24ef31629b756a3cc9bb91b38e5634cfea19
Signed-off-by: Coastguard Worker <android-build-coastguard-worker@google.com>
This commit is contained in:
Android Build Coastguard Worker 2024-01-11 11:00:43 +00:00
commit d072db43ce
6 changed files with 2489 additions and 2502 deletions

File diff suppressed because it is too large Load Diff

View File

@ -2227,7 +2227,14 @@
__traceiter_android_vh_snd_compr_use_pause_in_drain
__traceiter_android_vh_sound_usb_support_cpu_suspend
__traceiter_android_vh_syscall_prctl_finished
__traceiter_android_vh_ufs_abort_success_ctrl
__traceiter_android_vh_ufs_compl_rsp_check_done
__traceiter_android_vh_ufs_err_check_ctrl
__traceiter_android_vh_ufs_err_handler
__traceiter_android_vh_ufs_err_print_ctrl
__traceiter_android_vh_ufs_perf_huristic_ctrl
__traceiter_android_vh_ufs_send_command
__traceiter_android_vh_ufs_send_command_post_change
__traceiter_android_vh_ufs_send_tm_command
__traceiter_cpu_frequency
__traceiter_gpu_mem_total
@ -2312,7 +2319,14 @@
__tracepoint_android_vh_snd_compr_use_pause_in_drain
__tracepoint_android_vh_sound_usb_support_cpu_suspend
__tracepoint_android_vh_syscall_prctl_finished
__tracepoint_android_vh_ufs_abort_success_ctrl
__tracepoint_android_vh_ufs_compl_rsp_check_done
__tracepoint_android_vh_ufs_err_check_ctrl
__tracepoint_android_vh_ufs_err_handler
__tracepoint_android_vh_ufs_err_print_ctrl
__tracepoint_android_vh_ufs_perf_huristic_ctrl
__tracepoint_android_vh_ufs_send_command
__tracepoint_android_vh_ufs_send_command_post_change
__tracepoint_android_vh_ufs_send_tm_command
__tracepoint_cpu_frequency
__tracepoint_gpu_mem_total

View File

@ -499,6 +499,13 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_madvise_cold_or_pageout_abort);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_compact_finished);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_wakeup_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_skip_swapcache);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_perf_huristic_ctrl);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_send_command_post_change);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_abort_success_ctrl);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_compl_rsp_check_done);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_err_handler);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_err_check_ctrl);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_err_print_ctrl);
/*
* For type visibility
*/

View File

@ -145,10 +145,7 @@ enum {
UFSHCD_STATE_EH_SCHEDULED_NON_FATAL,
};
/* UFSHCD error handling flags */
enum {
UFSHCD_EH_IN_PROGRESS = (1 << 0),
};
/* UFSHCD UIC layer error flags */
enum {
@ -161,12 +158,6 @@ enum {
UFSHCD_UIC_PA_GENERIC_ERROR = (1 << 6), /* Generic PA error */
};
#define ufshcd_set_eh_in_progress(h) \
((h)->eh_flags |= UFSHCD_EH_IN_PROGRESS)
#define ufshcd_eh_in_progress(h) \
((h)->eh_flags & UFSHCD_EH_IN_PROGRESS)
#define ufshcd_clear_eh_in_progress(h) \
((h)->eh_flags &= ~UFSHCD_EH_IN_PROGRESS)
struct ufs_pm_lvl_states ufs_pm_lvl_states[] = {
{UFS_ACTIVE_PWR_MODE, UIC_LINK_ACTIVE_STATE},
@ -2105,6 +2096,7 @@ void ufshcd_send_command(struct ufs_hba *hba, unsigned int task_tag)
}
/* Make sure that doorbell is committed immediately */
wmb();
trace_android_vh_ufs_send_command_post_change(hba, lrbp);
}
/**
@ -2770,7 +2762,9 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
}
/* Make sure descriptors are ready before ringing the doorbell */
wmb();
trace_android_vh_ufs_perf_huristic_ctrl(hba, lrbp, &err);
if (err)
goto out;
ufshcd_send_command(hba, tag);
out:
up_read(&hba->clk_scaling_lock);
@ -5203,7 +5197,7 @@ static irqreturn_t ufshcd_uic_cmd_compl(struct ufs_hba *hba, u32 intr_status)
}
/* Release the resources allocated for processing a SCSI command. */
static void ufshcd_release_scsi_cmd(struct ufs_hba *hba,
void ufshcd_release_scsi_cmd(struct ufs_hba *hba,
struct ufshcd_lrb *lrbp)
{
struct scsi_cmnd *cmd = lrbp->cmd;
@ -5214,6 +5208,7 @@ static void ufshcd_release_scsi_cmd(struct ufs_hba *hba,
ufshcd_release(hba);
ufshcd_clk_scaling_update_busy(hba);
}
EXPORT_SYMBOL_GPL(ufshcd_release_scsi_cmd);
/**
* __ufshcd_transfer_req_compl - handle SCSI and query command completion
@ -5234,9 +5229,13 @@ static void __ufshcd_transfer_req_compl(struct ufs_hba *hba,
lrbp->compl_time_stamp = ktime_get();
cmd = lrbp->cmd;
if (cmd) {
bool done = false;
if (unlikely(ufshcd_should_inform_monitor(hba, lrbp)))
ufshcd_update_monitor(hba, lrbp);
trace_android_vh_ufs_compl_command(hba, lrbp);
trace_android_vh_ufs_compl_rsp_check_done(hba, lrbp, &done);
if (done)
return;
ufshcd_add_command_trace(hba, index, "complete");
cmd->result = ufshcd_transfer_rsp_status(hba, lrbp);
ufshcd_release_scsi_cmd(hba, lrbp);
@ -5803,11 +5802,13 @@ static void ufshcd_exception_event_handler(struct work_struct *work)
}
/* Complete requests that have door-bell cleared */
static void ufshcd_complete_requests(struct ufs_hba *hba)
void ufshcd_complete_requests(struct ufs_hba *hba)
{
ufshcd_trc_handler(hba, false);
ufshcd_tmc_handler(hba);
}
EXPORT_SYMBOL_GPL(ufshcd_complete_requests);
/**
* ufshcd_quirk_dl_nac_errors - This function checks if error handling is
@ -5921,7 +5922,7 @@ static void ufshcd_clk_scaling_suspend(struct ufs_hba *hba, bool suspend)
}
}
static void ufshcd_err_handling_prepare(struct ufs_hba *hba)
void ufshcd_err_handling_prepare(struct ufs_hba *hba)
{
pm_runtime_get_sync(hba->dev);
if (pm_runtime_status_suspended(hba->dev) || hba->is_sys_suspended) {
@ -5956,8 +5957,9 @@ static void ufshcd_err_handling_prepare(struct ufs_hba *hba)
up_write(&hba->clk_scaling_lock);
cancel_work_sync(&hba->eeh_work);
}
EXPORT_SYMBOL_GPL(ufshcd_err_handling_prepare);
static void ufshcd_err_handling_unprepare(struct ufs_hba *hba)
void ufshcd_err_handling_unprepare(struct ufs_hba *hba)
{
ufshcd_scsi_unblock_requests(hba);
ufshcd_release(hba);
@ -5965,6 +5967,7 @@ static void ufshcd_err_handling_unprepare(struct ufs_hba *hba)
ufshcd_clk_scaling_suspend(hba, false);
pm_runtime_put(hba->dev);
}
EXPORT_SYMBOL_GPL(ufshcd_err_handling_unprepare);
static inline bool ufshcd_err_handling_should_stop(struct ufs_hba *hba)
{
@ -6037,10 +6040,16 @@ static void ufshcd_err_handler(struct work_struct *work)
bool err_tm = false;
int err = 0, pmc_err;
int tag;
bool err_handled = false;
bool needs_reset = false, needs_restore = false;
hba = container_of(work, struct ufs_hba, eh_work);
trace_android_vh_ufs_err_handler(hba, &err_handled);
if (err_handled)
return;
down(&hba->host_sem);
spin_lock_irqsave(hba->host->host_lock, flags);
if (ufshcd_err_handling_should_stop(hba)) {
@ -6346,14 +6355,16 @@ static irqreturn_t ufshcd_check_errors(struct ufs_hba *hba, u32 intr_status)
* update the transfer error masks to sticky bits, let's do this
* irrespective of current ufshcd_state.
*/
bool skip = false;
hba->saved_err |= hba->errors;
hba->saved_uic_err |= hba->uic_error;
trace_android_vh_ufs_err_print_ctrl(hba, &skip);
/* dump controller state before resetting */
if ((hba->saved_err &
if (!skip &&((hba->saved_err &
(INT_FATAL_ERRORS | UFSHCD_UIC_HIBERN8_MASK)) ||
(hba->saved_uic_err &&
(hba->saved_uic_err != UFSHCD_UIC_PA_GENERIC_ERROR))) {
(hba->saved_uic_err != UFSHCD_UIC_PA_GENERIC_ERROR)))) {
dev_err(hba->dev, "%s: saved_err 0x%x saved_uic_err 0x%x\n",
__func__, hba->saved_err,
hba->saved_uic_err);
@ -6418,6 +6429,7 @@ static irqreturn_t ufshcd_tmc_handler(struct ufs_hba *hba)
static irqreturn_t ufshcd_sl_intr(struct ufs_hba *hba, u32 intr_status)
{
irqreturn_t retval = IRQ_NONE;
bool err_check = false;
if (intr_status & UFSHCD_UIC_MASK)
retval |= ufshcd_uic_cmd_compl(hba, intr_status);
@ -6428,9 +6440,14 @@ static irqreturn_t ufshcd_sl_intr(struct ufs_hba *hba, u32 intr_status)
if (intr_status & UTP_TASK_REQ_COMPL)
retval |= ufshcd_tmc_handler(hba);
if (intr_status & UTP_TRANSFER_REQ_COMPL)
if (intr_status & UTP_TRANSFER_REQ_COMPL) {
retval |= ufshcd_trc_handler(hba, ufshcd_has_utrlcnr(hba));
trace_android_vh_ufs_err_check_ctrl(hba, &err_check);
if (err_check)
ufshcd_check_errors(hba, hba->errors);
}
return retval;
}
@ -7048,8 +7065,10 @@ static int ufshcd_abort(struct scsi_cmnd *cmd)
outstanding = __test_and_clear_bit(tag, &hba->outstanding_reqs);
spin_unlock_irqrestore(host->host_lock, flags);
if (outstanding)
if (outstanding) {
ufshcd_release_scsi_cmd(hba, lrbp);
trace_android_vh_ufs_abort_success_ctrl(hba, lrbp);
}
err = SUCCESS;

View File

@ -82,6 +82,19 @@ enum ufs_event_type {
UFS_EVT_CNT,
};
/* UFSHCD error handling flags */
enum {
UFSHCD_EH_IN_PROGRESS = (1 << 0),
};
#define ufshcd_set_eh_in_progress(h) \
((h)->eh_flags |= UFSHCD_EH_IN_PROGRESS)
#define ufshcd_eh_in_progress(h) \
((h)->eh_flags & UFSHCD_EH_IN_PROGRESS)
#define ufshcd_clear_eh_in_progress(h) \
((h)->eh_flags &= ~UFSHCD_EH_IN_PROGRESS)
/**
* struct uic_command - UIC command structure
* @command: UIC command
@ -1048,6 +1061,12 @@ int ufshcd_wait_for_register(struct ufs_hba *hba, u32 reg, u32 mask,
void ufshcd_parse_dev_ref_clk_freq(struct ufs_hba *hba, struct clk *refclk);
void ufshcd_update_evt_hist(struct ufs_hba *hba, u32 id, u32 val);
void ufshcd_hba_stop(struct ufs_hba *hba);
void ufshcd_complete_requests(struct ufs_hba *hba);
void ufshcd_release_scsi_cmd(struct ufs_hba *hba,
struct ufshcd_lrb *lrbp);
void ufshcd_err_handling_prepare(struct ufs_hba *hba);
void ufshcd_err_handling_unprepare(struct ufs_hba *hba);
static inline void check_upiu_size(void)
{

View File

@ -75,6 +75,40 @@ DECLARE_HOOK(android_vh_ufs_update_sdev,
DECLARE_HOOK(android_vh_ufs_clock_scaling,
TP_PROTO(struct ufs_hba *hba, bool *force_out, bool *force_scaling, bool *scale_up),
TP_ARGS(hba, force_out, force_scaling, scale_up));
DECLARE_HOOK(android_vh_ufs_send_command_post_change,
TP_PROTO(struct ufs_hba *hba, struct ufshcd_lrb *lrbp),
TP_ARGS(hba, lrbp));
DECLARE_HOOK(android_vh_ufs_perf_huristic_ctrl,
TP_PROTO(struct ufs_hba *hba,
struct ufshcd_lrb *lrbp, int *err),
TP_ARGS(hba, lrbp, err));
DECLARE_HOOK(android_vh_ufs_abort_success_ctrl,
TP_PROTO(struct ufs_hba *hba,
struct ufshcd_lrb *lrbp),
TP_ARGS(hba, lrbp));
DECLARE_HOOK(android_vh_ufs_err_handler,
TP_PROTO(struct ufs_hba *hba,
bool *err_handled),
TP_ARGS(hba, err_handled));
DECLARE_HOOK(android_vh_ufs_compl_rsp_check_done,
TP_PROTO(struct ufs_hba *hba,
struct ufshcd_lrb *lrbp, bool *done),
TP_ARGS(hba, lrbp, done));
DECLARE_HOOK(android_vh_ufs_err_print_ctrl,
TP_PROTO(struct ufs_hba *hba,
bool *skip),
TP_ARGS(hba, skip));
DECLARE_HOOK(android_vh_ufs_err_check_ctrl,
TP_PROTO(struct ufs_hba *hba,
bool *err_check),
TP_ARGS(hba, err_check));
#endif /* _TRACE_HOOK_UFSHCD_H */
/* This part must be outside protection */
#include <trace/define_trace.h>