msm: dcvs: cleanup debug prints.

The debug print mechanism is not much useful. Remove that code.

Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
(cherry picked from commit 0e1679b1ed8419f44c8976853f0070517f84cb14)

Signed-off-by: Ram Kumar Chakravarthy Chebathini <rcheba@codeaurora.org>
(cherry picked from commit fc7e8af6d5dee3744390220113483fec2e452081)

Change-Id: I5b574aa4bf2784f8cdfe065bb17ab8246d0d9e73
Signed-off-by: Sudhir Sharma <sudsha@codeaurora.org>
msm: dcvs: functions to start/stop/restart hrtimer.

The slack timer is supposed to be activated only when the core
is out of idle and that the governor for that core has started.
If any of the conditions is not met one should not activate
the slack timer.

To implement such a scheme, create two variables idle_entered,
and pending freq protected by their respective spinlocks
idle_state change_lock and pending_freq_lock. Whenever the
idle is entered or exited stop/start_slack_timer is called
which grabs the appropriate spinlocks and udpates the idle_entered
variable and starts and stops the hrtimer.

Moreover there are situations when a activated timer needs to
be restarted. This happens when a frequency is updated and a new
slack timer is received. We provide restart_slack_timer() callback
which cancels the hrtimer and restarts it only if the conditions
mentioned above are met.

There is also a situation when one has to forcefully cancel the timer
when the governor stops. Provide an api for that too. Note that one
cannot use stop_slack_timer becuase stop_slack_timer manipulates
idle_entered flag.

Also on related note, cleanup the code that handles pending_freq.
We get a new freq to set for a core when
- the slack timer expires
- when the governor starts when the cpu is brought back online
- when the cpu comes out of idle

Use pending_freq_lock to serialize updates to pending_freq.

Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
(cherry picked from commit d6911b9e6d9cf51a8a7acc7363b424e325658e1f)

Signed-off-by: Ram Kumar Chakravarthy Chebathini <rcheba@codeaurora.org>
(cherry picked from commit ac4d9b3c58b998ecf6b83f5ae920eb47e5aef006)

Change-Id: I4db5b4de0c02bef62749c9e727a59171ae3f4ac0
Signed-off-by: Sudhir Sharma <sudsha@codeaurora.org>
msm: dcvs: change tz buffer to 32KB.

Only around 32K of buffer is required for normal operation.
Request the scm buffer of 32kb from the contiguous area.

Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
(cherry picked from commit dca26f7215b4bc0ae4e4c17948f96c63d7af5266)

Signed-off-by: Ram Kumar Chakravarthy Chebathini <rcheba@codeaurora.org>
(cherry picked from commit 69e6a4d39b234cf02642337ecc6df5ef67b9b2c8)

Change-Id: Ie1c9997fdf79796458aacaa5d3169e24666fcac4
Signed-off-by: Sudhir Sharma <sudsha@codeaurora.org>
msm: dcvs: add thermal control.

Add capability to read the sensor data and report the temperature of
a core to the TZ.

Note that this was done earlier whenever a frequency update was done,
instead create a delayed workqueue per core. Also create a attribute
that controls the rate of thermal update per core.

If that attribute is not set use 60seconds as the default update rate.
If it is less than one second, default to using one second.

Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
(cherry picked from commit 80add4203ec4538046ca926e2747db6d01c14783)

Signed-off-by: Ram Kumar Chakravarthy Chebathini <rcheba@codeaurora.org>
(cherry picked from commit 2155283a8adf2c8b9dd27249f9c07a313a6ff710)

Change-Id: If91343b975d490c05ea63c9977d81f9572072773
Signed-off-by: Sudhir Sharma <sudsha@codeaurora.org>
msm: dcvs: get rid of unused attributes.

There are certain attributes that are not used. Get rid of them.

Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
(cherry picked from commit f3650430ba202eae30a60870cf5adb50bacfa057)

Signed-off-by: Ram Kumar Chakravarthy Chebathini <rcheba@codeaurora.org>
(cherry picked from commit 47b62ce68c47883e94d7d11e461df68626e1bf4a)

Change-Id: Ia666e025aae47918471a55575646455764ca42f8
Signed-off-by: Sudhir Sharma <sudsha@codeaurora.org>
msm: dcvs: force on the slack timer,

For performance reasons the kernel should execute
a ONLINE call on TZ when the governor starts. The return
 values from ONLINE call are a new frequency and a new
 slack timer.

This new frequency would be queued up for the thread to set it up
on that core.

The way we handle the new slack timer is interesting. When the
governor starts we really dont know what the state of idle pulses
is, this is indicated by setting idle_entered = -1.  However we
want to start the slack timer. To handle this situation create
a function to force on the hrtimer without checking idle_entered or
pending_freq.

Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
(cherry picked from commit 973671aee4b5f2955a0bb85107022189bc12e75c)

Signed-off-by: Ram Kumar Chakravarthy Chebathini <rcheba@codeaurora.org>
(cherry picked from commit 082cbae484c44d4d0096b0f406dc89e18a96bf8d)

Change-Id: I7f6cd678323588f6d411c17526dc04a5748ed9b4
Signed-off-by: Sudhir Sharma <sudsha@codeaurora.org>
msm: mpdcvs: add ftrace events.

Add ftrace events at interesting points in the dcvs and mpdecision code.

Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
(cherry picked from commit f17f2d347acf17097ab5c6907bdc5a4c9e631a6d)

Signed-off-by: Ram Kumar Chakravarthy Chebathini <rcheba@codeaurora.org>
(cherry picked from commit 950f6a4af8454ffff69b84bd3830c7091bc53c0c)

Change-Id: Ic5cc00539b837090010627f364428c157137f052
Signed-off-by: Sudhir Sharma <sudsha@codeaurora.org>
msm: dcvs: allow re-registration of cores.

If a core has already been registered with dcvs, just
return the previous dcvs core id if it is registered
again.

Signed-off-by: Steve Muckle <smuckle@codeaurora.org>
(cherry picked from commit b162e2b79d36fb7cb870b7b7184ed52ecafbf849)

Signed-off-by: Ram Kumar Chakravarthy Chebathini <rcheba@codeaurora.org>
(cherry picked from commit 629fcfc3aac9a9bd7b435a2057c8a4b5702613fb)

Change-Id: I03b3519f4659e1c3adfee99f0b361b233fa2a918
Signed-off-by: Sudhir Sharma <sudsha@codeaurora.org>
msm: dcvs: add frequency transient control to sysfs

It is useful to be able to toggle at runtime whether
particular DCVS points are used as transient levels. This
adds a sysfs node per core which when read returns a list
of the currently enabled DCVS transient levels. Writing
the frequency of a DCVS transient level toggles whether it
is enabled or not.

Change-Id: I69ebb6974e97efa832798047259b9acdfd08aa7c
Signed-off-by: Steve Muckle <smuckle@codeaurora.org>
(cherry picked from commit 2f6db34b3216695d4f624d2204d5e1356e62c3d5)
msm: dcvs: run dcvs, mpdecision threads at default priority

It is not necessary to run these threads at a realtime
priority level.

Change-Id: I8c6492f22e803811db5757c51beeeb81f93f32b6
Signed-off-by: Steve Muckle <smuckle@codeaurora.org>
(cherry picked from commit 8862f41f1c632ba84f0a21e8045d70278fd67fd3)
msm: dcvs: create cpu freq table dynamically

CPU frequencies can differ between different revisions, so create
the table of cpu frequencies dynamically based on data from
acpuclock rather than using a fixed table.

Some of the data in the table comes from sync points that will be
implemented between CPU and GPU frequencies. The sync points are
defined here, but the sync implementation itself will come in a
subsequent commit.

Change-Id: I24cf17b199df1e5d064c1894b269e49118b39ac7
Signed-off-by: Steve Muckle <smuckle@codeaurora.org>
(cherry picked from commit f9a8749b17961be653e9cbb426b1b72cada7f61c)
msm: dcvs: gpu minimum frequency levels

System performance is enhanced if the gpu frequency is given a
minimum corresponding to various frequency levels of CPU 0.

Change-Id: Iba168d708524fc8ef164428bb5f4e0631a499342
Signed-off-by: Steve Muckle <smuckle@codeaurora.org>
(cherry picked from commit 682c7a01c1d86518cdc7bec25cb413498811137b)
msm: kgsl: include msm-specific ion header

All msm_ion clients need to use <linux/msm_ion.h> instead of
<linux/ion.h>

Change-Id: Ibc0856a9bcced14d1531f229d8cb232b9f787151
Signed-off-by: Mitchel Humpherys <mitchelh@codeaurora.org>
msm: kgsl: Turn off the CP_DEBUG dynamic clock

The CP dynamic clock seems to be glitchy when the CP clocks are turned
back on after a power event. Turn off said dynamic clock control at
init time. The impact of leaving the dynamic clock control off is
negligible since the CP clock is only on when the CP is actually in
use.

CRs-fixed: 402119
CRs-fixed: 409253
CRs-fixed: 413224
Change-Id: Ic0dedbad783f8b911d9b57d1602d9b3976af1b3b
Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
Signed-off-by: Rajeev Kulkarni <krajeev@codeaurora.org>
msm: kgsl: Update A330 VBIF settings

Update the VBIF register settings for A330 for better performance and
stability per the latest testing and analysis.

CRs-Fixed: 416680
Change-Id: Ic0dedbad71bfd589b322bed503052315d0bd1940
Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
Signed-off-by: Rajeev Kulkarni <krajeev@codeaurora.org>
msm: kgsl: Issue conditional interrupts on internal submissions

Waittimestamp calls require interrupts to check if a timestamp
has passed.  The lack of these interrupts was causing waittimestamp
to wait longer than expected since the interrupts were less frequent.
Cause the conditional interrupts to be issued faster by allowing
internal command submissions to issue them.

CRs-fixed: 417577
Change-Id: Idb6f18261b3dd6fcbea5607d449d70ca54136e81
Signed-off-by: Carter Cooper <ccooper@codeaurora.org>
Signed-off-by: Rajeev Kulkarni <krajeev@codeaurora.org>
msm: kgsl: Remove incorrect check for current context

We remove an incorrect check for currently active context.
The intent of the original check was to ensure that the
current context is at least there/valid before we issue
a dummy command with a forced interrupt. However, this
check was implemented incorrectly, instead of checking
the context under which the function is running, the check
was probing the "drawctxt_active" which may not necessarily
be the same as the context for which the function was called.
We fix this by changing the check to instead look for the
context under which the kgsl_check_interrupt_timestamp() has
been called.

CRs-fixed: 426186
Change-Id: I6ac123d16888287b14e6e53028f482eb709f24c5
Signed-off-by: Harsh Vardhan Dwivedi <hdwivedi@codeaurora.org>
msm: kgsl: Disable clock gating earlier during snapshot

Disable clock gating earlier when recording the GPU snapshot.
This will ensure that there are no issues when reading register
values from the GPU hardware.

Change-Id: I173655b419c958f0b8cdfa4609c712e512ff2487
Signed-off-by: Carter Cooper <ccooper@codeaurora.org>
msm: kgsl: Disable HLSQ register reads from snapshot

Reading the A3XX HLSQ registers during a GPU hang recovery might cause
the device to hang.  Disable the the HLSQ register reads that would
cause recovery to fail until the failures are better understood.

Change-Id: I1553025fbd824bfacf91f062372d5731cd905cc4
Signed-off-by: Carter Cooper <ccooper@codeaurora.org>
Signed-off-by: Rajeev Kulkarni <krajeev@codeaurora.org>