Skip to content

Commit 1054106

Browse files
committed
Merge remote-tracking branch 'lineage-sm8250/lineage-20' into android16
2 parents 49e69f2 + d12e9eb commit 1054106

7 files changed

Lines changed: 143 additions & 13 deletions

File tree

scripts/as-version.sh

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,9 @@ set -- $(LC_ALL=C "$@" -Wa,--version -c -x assembler /dev/null -o /dev/null 2>/d
5151
IFS=' '
5252
set -- $1
5353

54-
min_tool_version=$(dirname $0)/min-tool-version.sh
55-
5654
if [ "$1" = GNU -a "$2" = assembler ]; then
5755
shift $(($# - 1))
5856
version=$1
59-
min_version=$($min_tool_version binutils)
6057
name=GNU
6158
else
6259
echo "$orig_args: unknown assembler invoked" >&2
@@ -68,15 +65,5 @@ fi
6865
version=${version%-*}
6966

7067
cversion=$(get_canonical_version $version)
71-
min_cversion=$(get_canonical_version $min_version)
72-
73-
if [ "$cversion" -lt "$min_cversion" ]; then
74-
echo >&2 "***"
75-
echo >&2 "*** Assembler is too old."
76-
echo >&2 "*** Your $name assembler version: $version"
77-
echo >&2 "*** Minimum $name assembler version: $min_version"
78-
echo >&2 "***"
79-
exit 1
80-
fi
8168

8269
echo $name $cversion

techpack/display/msm/sde/sde_crtc.c

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,47 @@ static int _sde_debugfs_fps_status(struct inode *inode, struct file *file)
215215
}
216216
#endif
217217

218+
static ssize_t early_wakeup_store(struct device *device,
219+
struct device_attribute *attr, const char *buf, size_t count)
220+
{
221+
struct drm_crtc *crtc;
222+
struct sde_crtc *sde_crtc;
223+
struct msm_drm_private *priv;
224+
u32 crtc_id;
225+
bool trigger;
226+
227+
if (!device || !buf || !count) {
228+
SDE_ERROR("invalid input param(s)\n");
229+
return -EINVAL;
230+
}
231+
232+
if (kstrtobool(buf, &trigger) < 0)
233+
return -EINVAL;
234+
235+
if (!trigger)
236+
return count;
237+
238+
crtc = dev_get_drvdata(device);
239+
if (!crtc || !crtc->dev || !crtc->dev->dev_private) {
240+
SDE_ERROR("invalid crtc\n");
241+
return -EINVAL;
242+
}
243+
244+
sde_crtc = to_sde_crtc(crtc);
245+
priv = crtc->dev->dev_private;
246+
247+
crtc_id = drm_crtc_index(crtc);
248+
if (crtc_id >= ARRAY_SIZE(priv->disp_thread)) {
249+
SDE_ERROR("invalid crtc index[%d]\n", crtc_id);
250+
return -EINVAL;
251+
}
252+
253+
kthread_queue_work(&priv->disp_thread[crtc_id].worker,
254+
&sde_crtc->early_wakeup_work);
255+
256+
return count;
257+
}
258+
218259
static ssize_t fps_periodicity_ms_store(struct device *device,
219260
struct device_attribute *attr, const char *buf, size_t count)
220261
{
@@ -402,12 +443,14 @@ static DEVICE_ATTR_RO(vsync_event);
402443
static DEVICE_ATTR_RO(measured_fps);
403444
static DEVICE_ATTR_RW(fps_periodicity_ms);
404445
static DEVICE_ATTR_RO(retire_frame_event);
446+
static DEVICE_ATTR_WO(early_wakeup);
405447

406448
static struct attribute *sde_crtc_dev_attrs[] = {
407449
&dev_attr_vsync_event.attr,
408450
&dev_attr_measured_fps.attr,
409451
&dev_attr_fps_periodicity_ms.attr,
410452
&dev_attr_retire_frame_event.attr,
453+
&dev_attr_early_wakeup.attr,
411454
NULL
412455
};
413456

@@ -6262,6 +6305,40 @@ static void __sde_crtc_idle_notify_work(struct kthread_work *work)
62626305
}
62636306
}
62646307

6308+
/*
6309+
* __sde_crtc_early_wakeup_work - trigger early wakeup from user space
6310+
*/
6311+
static void __sde_crtc_early_wakeup_work(struct kthread_work *work)
6312+
{
6313+
struct sde_crtc *sde_crtc = container_of(work, struct sde_crtc,
6314+
early_wakeup_work);
6315+
struct drm_crtc *crtc;
6316+
struct drm_device *dev;
6317+
struct msm_drm_private *priv;
6318+
struct sde_kms *sde_kms;
6319+
6320+
if (!sde_crtc) {
6321+
SDE_ERROR("invalid sde crtc\n");
6322+
return;
6323+
}
6324+
6325+
if (!sde_crtc->enabled) {
6326+
SDE_INFO("sde crtc is not enabled\n");
6327+
return;
6328+
}
6329+
6330+
crtc = &sde_crtc->base;
6331+
dev = crtc->dev;
6332+
if (!dev) {
6333+
SDE_ERROR("invalid drm device\n");
6334+
return;
6335+
}
6336+
6337+
priv = dev->dev_private;
6338+
sde_kms = to_sde_kms(priv->kms);
6339+
sde_kms_trigger_early_wakeup(sde_kms, crtc);
6340+
}
6341+
62656342
/* initialize crtc */
62666343
struct drm_crtc *sde_crtc_init(struct drm_device *dev, struct drm_plane *plane)
62676344
{
@@ -6353,6 +6430,8 @@ struct drm_crtc *sde_crtc_init(struct drm_device *dev, struct drm_plane *plane)
63536430

63546431
kthread_init_delayed_work(&sde_crtc->idle_notify_work,
63556432
__sde_crtc_idle_notify_work);
6433+
kthread_init_work(&sde_crtc->early_wakeup_work,
6434+
__sde_crtc_early_wakeup_work);
63566435

63576436
SDE_DEBUG("crtc=%d new_llcc=%d, old_llcc=%d\n",
63586437
crtc->base.id,

techpack/display/msm/sde/sde_crtc.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ struct sde_crtc_misr_info {
272272
* @misr_frame_count : misr frame count provided by client
273273
* @misr_data : store misr data before turning off the clocks.
274274
* @idle_notify_work: delayed worker to notify idle timeout to user space
275+
* @early_wakeup_work: work to trigger early wakeup
275276
* @power_event : registered power event handle
276277
* @cur_perf : current performance committed to clock/bandwidth driver
277278
* @plane_mask_old: keeps track of the planes used in the previous commit
@@ -349,6 +350,7 @@ struct sde_crtc {
349350
bool misr_enable_debugfs;
350351
u32 misr_frame_count;
351352
struct kthread_delayed_work idle_notify_work;
353+
struct kthread_work early_wakeup_work;
352354

353355
struct sde_power_event *power_event;
354356

techpack/display/msm/sde/sde_encoder.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6320,3 +6320,27 @@ void sde_encoder_recovery_events_handler(struct drm_encoder *encoder,
63206320
sde_enc = to_sde_encoder_virt(encoder);
63216321
sde_enc->recovery_events_enabled = enabled;
63226322
}
6323+
6324+
void sde_encoder_trigger_early_wakeup(struct drm_encoder *drm_enc)
6325+
{
6326+
struct sde_encoder_virt *sde_enc = NULL;
6327+
struct msm_drm_private *priv = NULL;
6328+
6329+
priv = drm_enc->dev->dev_private;
6330+
sde_enc = to_sde_encoder_virt(drm_enc);
6331+
if (!sde_enc->crtc || (sde_enc->crtc->index
6332+
>= ARRAY_SIZE(priv->disp_thread))) {
6333+
SDE_DEBUG_ENC(sde_enc,
6334+
"invalid cached CRTC: %d or crtc index: %d\n",
6335+
sde_enc->crtc == NULL,
6336+
sde_enc->crtc ? sde_enc->crtc->index : -EINVAL);
6337+
return;
6338+
}
6339+
6340+
if (sde_enc->rc_state == SDE_ENC_RC_STATE_IDLE) {
6341+
SDE_ATRACE_BEGIN("sde_encoder_resource_control");
6342+
sde_encoder_resource_control(drm_enc,
6343+
SDE_ENC_RC_EVENT_EARLY_WAKEUP);
6344+
SDE_ATRACE_END("sde_encoder_resource_control");
6345+
}
6346+
}

techpack/display/msm/sde/sde_encoder.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,4 +399,10 @@ static inline struct sde_kms *sde_encoder_get_kms(struct drm_encoder *drm_enc)
399399
return to_sde_kms(priv->kms);
400400
}
401401

402+
/**
403+
* sde_encoder_trigger_early_wakeup - trigger early wake up
404+
* @drm_enc: Pointer to drm encoder structure
405+
*/
406+
void sde_encoder_trigger_early_wakeup(struct drm_encoder *drm_enc);
407+
402408
#endif /* __SDE_ENCODER_H__ */

techpack/display/msm/sde/sde_kms.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3933,3 +3933,26 @@ int sde_kms_handle_recovery(struct drm_encoder *encoder)
39333933
SDE_EVT32(DRMID(encoder), MSM_ENC_ACTIVE_REGION);
39343934
return sde_encoder_wait_for_event(encoder, MSM_ENC_ACTIVE_REGION);
39353935
}
3936+
3937+
void sde_kms_trigger_early_wakeup(struct sde_kms *sde_kms,
3938+
struct drm_crtc *crtc)
3939+
{
3940+
struct msm_drm_private *priv;
3941+
struct drm_encoder *drm_enc;
3942+
3943+
if (!sde_kms || !crtc) {
3944+
SDE_ERROR("invalid argument sde_kms %pK crtc %pK\n",
3945+
sde_kms, crtc);
3946+
return;
3947+
}
3948+
3949+
priv = sde_kms->dev->dev_private;
3950+
3951+
SDE_ATRACE_BEGIN("sde_kms_trigger_early_wakeup");
3952+
drm_for_each_encoder_mask(drm_enc, crtc->dev, crtc->state->encoder_mask)
3953+
sde_encoder_trigger_early_wakeup(drm_enc);
3954+
3955+
if (sde_kms->first_kickoff)
3956+
sde_power_scale_reg_bus(&priv->phandle, VOTE_INDEX_HIGH, false);
3957+
SDE_ATRACE_END("sde_kms_trigger_early_wakeup");
3958+
}

techpack/display/msm/sde/sde_kms.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,4 +671,13 @@ int sde_kms_handle_recovery(struct drm_encoder *encoder);
671671
*/
672672
void sde_kms_update_pm_qos_irq_request(struct sde_kms *sde_kms,
673673
bool enable, bool skip_lock);
674+
675+
/**
676+
* sde_kms_trigger_early_wakeup - trigger early wake up
677+
* @sde_kms: pointer to sde_kms structure
678+
* @crtc: pointer to drm_crtc structure
679+
*/
680+
void sde_kms_trigger_early_wakeup(struct sde_kms *sde_kms,
681+
struct drm_crtc *crtc);
682+
674683
#endif /* __sde_kms_H__ */

0 commit comments

Comments
 (0)