mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
drm/i915, intel_ips: When i915 loads after IPS, make IPS relink to i915.
The IPS driver is designed to be able to run detached from i915 and just not enable GPU turbo in that case, in order to avoid module dependencies between the two drivers. This means that we don't know what the load order between the two is going to be, and we had previously only supported IPS after (optionally) i915, but not i915 after IPS. If the wrong order was chosen, you'd get no GPU turbo, and something like half the possible graphics performance. Signed-off-by: Eric Anholt <[email protected]> Signed-off-by: Chris Wilson <[email protected]> Cc: [email protected]
This commit is contained in:
parent
f797d22121
commit
63ee41d794
3 changed files with 77 additions and 3 deletions
|
|
@ -34,6 +34,7 @@
|
|||
#include "i915_drm.h"
|
||||
#include "i915_drv.h"
|
||||
#include "i915_trace.h"
|
||||
#include "../../../platform/x86/intel_ips.h"
|
||||
#include <linux/pci.h>
|
||||
#include <linux/vgaarb.h>
|
||||
#include <linux/acpi.h>
|
||||
|
|
@ -1870,6 +1871,26 @@ out_unlock:
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(i915_gpu_turbo_disable);
|
||||
|
||||
/**
|
||||
* Tells the intel_ips driver that the i915 driver is now loaded, if
|
||||
* IPS got loaded first.
|
||||
*
|
||||
* This awkward dance is so that neither module has to depend on the
|
||||
* other in order for IPS to do the appropriate communication of
|
||||
* GPU turbo limits to i915.
|
||||
*/
|
||||
static void
|
||||
ips_ping_for_i915_load(void)
|
||||
{
|
||||
void (*link)(void);
|
||||
|
||||
link = symbol_get(ips_link_to_i915_driver);
|
||||
if (link) {
|
||||
link();
|
||||
symbol_put(ips_link_to_i915_driver);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* i915_driver_load - setup chip and create an initial config
|
||||
* @dev: DRM device
|
||||
|
|
@ -2075,6 +2096,8 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
|
|||
dev_priv->mchdev_lock = &mchdev_lock;
|
||||
spin_unlock(&mchdev_lock);
|
||||
|
||||
ips_ping_for_i915_load();
|
||||
|
||||
return 0;
|
||||
|
||||
out_workqueue_free:
|
||||
|
|
|
|||
Loading…
Reference in a new issue