Commit cf80a6fb authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'drm-fixes-for-v4.12-rc2' of git://people.freedesktop.org/~airlied/linux

Pull drm fixes from Dave Airlie:
 "Mostly nouveau and i915, fairly quiet as usual for rc2"

* tag 'drm-fixes-for-v4.12-rc2' of git://people.freedesktop.org/~airlied/linux:
  drm/atmel-hlcdc: Fix output initialization
  gpu: host1x: select IOMMU_IOVA
  drm/nouveau/fifo/gk104-: Silence a locking warning
  drm/nouveau/secboot: plug memory leak in ls_ucode_img_load_gr() error path
  drm/nouveau: Fix drm poll_helper handling
  drm/i915: don't do allocate_va_range again on PIN_UPDATE
  drm/i915: Fix rawclk readout for g4x
  drm/i915: Fix runtime PM for LPE audio
  drm/i915/glk: Fix DSI "*ERROR* ULPS is still active" messages
  drm/i915/gvt: avoid unnecessary vgpu switch
  drm/i915/gvt: not to restore in-context mmio
  drm/etnaviv: don't put fence in case of submit failure
  drm/i915/gvt: fix typo: "supporte" -> "support"
  drm: hdlcd: Fix the calculation of the scanout start address
parents 6fe1de43 d51aff16
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
*/ */
#include <drm/drmP.h> #include <drm/drmP.h>
#include <drm/drm_atomic.h>
#include <drm/drm_atomic_helper.h> #include <drm/drm_atomic_helper.h>
#include <drm/drm_crtc.h> #include <drm/drm_crtc.h>
#include <drm/drm_crtc_helper.h> #include <drm/drm_crtc_helper.h>
...@@ -226,16 +227,33 @@ static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = { ...@@ -226,16 +227,33 @@ static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = {
static int hdlcd_plane_atomic_check(struct drm_plane *plane, static int hdlcd_plane_atomic_check(struct drm_plane *plane,
struct drm_plane_state *state) struct drm_plane_state *state)
{ {
u32 src_w, src_h; struct drm_rect clip = { 0 };
struct drm_crtc_state *crtc_state;
u32 src_h = state->src_h >> 16;
src_w = state->src_w >> 16; /* only the HDLCD_REG_FB_LINE_COUNT register has a limit */
src_h = state->src_h >> 16; if (src_h >= HDLCD_MAX_YRES) {
DRM_DEBUG_KMS("Invalid source width: %d\n", src_h);
/* we can't do any scaling of the plane source */
if ((src_w != state->crtc_w) || (src_h != state->crtc_h))
return -EINVAL; return -EINVAL;
}
if (!state->fb || !state->crtc)
return 0; return 0;
crtc_state = drm_atomic_get_existing_crtc_state(state->state,
state->crtc);
if (!crtc_state) {
DRM_DEBUG_KMS("Invalid crtc state\n");
return -EINVAL;
}
clip.x2 = crtc_state->adjusted_mode.hdisplay;
clip.y2 = crtc_state->adjusted_mode.vdisplay;
return drm_plane_helper_check_state(state, &clip,
DRM_PLANE_HELPER_NO_SCALING,
DRM_PLANE_HELPER_NO_SCALING,
false, true);
} }
static void hdlcd_plane_atomic_update(struct drm_plane *plane, static void hdlcd_plane_atomic_update(struct drm_plane *plane,
...@@ -244,21 +262,20 @@ static void hdlcd_plane_atomic_update(struct drm_plane *plane, ...@@ -244,21 +262,20 @@ static void hdlcd_plane_atomic_update(struct drm_plane *plane,
struct drm_framebuffer *fb = plane->state->fb; struct drm_framebuffer *fb = plane->state->fb;
struct hdlcd_drm_private *hdlcd; struct hdlcd_drm_private *hdlcd;
struct drm_gem_cma_object *gem; struct drm_gem_cma_object *gem;
u32 src_w, src_h, dest_w, dest_h; u32 src_x, src_y, dest_h;
dma_addr_t scanout_start; dma_addr_t scanout_start;
if (!fb) if (!fb)
return; return;
src_w = plane->state->src_w >> 16; src_x = plane->state->src.x1 >> 16;
src_h = plane->state->src_h >> 16; src_y = plane->state->src.y1 >> 16;
dest_w = plane->state->crtc_w; dest_h = drm_rect_height(&plane->state->dst);
dest_h = plane->state->crtc_h;
gem = drm_fb_cma_get_gem_obj(fb, 0); gem = drm_fb_cma_get_gem_obj(fb, 0);
scanout_start = gem->paddr + fb->offsets[0] + scanout_start = gem->paddr + fb->offsets[0] +
plane->state->crtc_y * fb->pitches[0] + src_y * fb->pitches[0] +
plane->state->crtc_x * src_x * fb->format->cpp[0];
fb->format->cpp[0];
hdlcd = plane->dev->dev_private; hdlcd = plane->dev->dev_private;
hdlcd_write(hdlcd, HDLCD_REG_FB_LINE_LENGTH, fb->pitches[0]); hdlcd_write(hdlcd, HDLCD_REG_FB_LINE_LENGTH, fb->pitches[0]);
...@@ -305,7 +322,6 @@ static struct drm_plane *hdlcd_plane_init(struct drm_device *drm) ...@@ -305,7 +322,6 @@ static struct drm_plane *hdlcd_plane_init(struct drm_device *drm)
formats, ARRAY_SIZE(formats), formats, ARRAY_SIZE(formats),
DRM_PLANE_TYPE_PRIMARY, NULL); DRM_PLANE_TYPE_PRIMARY, NULL);
if (ret) { if (ret) {
devm_kfree(drm->dev, plane);
return ERR_PTR(ret); return ERR_PTR(ret);
} }
...@@ -329,7 +345,6 @@ int hdlcd_setup_crtc(struct drm_device *drm) ...@@ -329,7 +345,6 @@ int hdlcd_setup_crtc(struct drm_device *drm)
&hdlcd_crtc_funcs, NULL); &hdlcd_crtc_funcs, NULL);
if (ret) { if (ret) {
hdlcd_plane_destroy(primary); hdlcd_plane_destroy(primary);
devm_kfree(drm->dev, primary);
return ret; return ret;
} }
......
...@@ -152,8 +152,7 @@ static const struct drm_connector_funcs atmel_hlcdc_panel_connector_funcs = { ...@@ -152,8 +152,7 @@ static const struct drm_connector_funcs atmel_hlcdc_panel_connector_funcs = {
.atomic_destroy_state = drm_atomic_helper_connector_destroy_state, .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
}; };
static int atmel_hlcdc_attach_endpoint(struct drm_device *dev, static int atmel_hlcdc_attach_endpoint(struct drm_device *dev, int endpoint)
const struct device_node *np)
{ {
struct atmel_hlcdc_dc *dc = dev->dev_private; struct atmel_hlcdc_dc *dc = dev->dev_private;
struct atmel_hlcdc_rgb_output *output; struct atmel_hlcdc_rgb_output *output;
...@@ -161,6 +160,11 @@ static int atmel_hlcdc_attach_endpoint(struct drm_device *dev, ...@@ -161,6 +160,11 @@ static int atmel_hlcdc_attach_endpoint(struct drm_device *dev,
struct drm_bridge *bridge; struct drm_bridge *bridge;
int ret; int ret;
ret = drm_of_find_panel_or_bridge(dev->dev->of_node, 0, endpoint,
&panel, &bridge);
if (ret)
return ret;
output = devm_kzalloc(dev->dev, sizeof(*output), GFP_KERNEL); output = devm_kzalloc(dev->dev, sizeof(*output), GFP_KERNEL);
if (!output) if (!output)
return -EINVAL; return -EINVAL;
...@@ -177,10 +181,6 @@ static int atmel_hlcdc_attach_endpoint(struct drm_device *dev, ...@@ -177,10 +181,6 @@ static int atmel_hlcdc_attach_endpoint(struct drm_device *dev,
output->encoder.possible_crtcs = 0x1; output->encoder.possible_crtcs = 0x1;
ret = drm_of_find_panel_or_bridge(np, 0, 0, &panel, &bridge);
if (ret)
return ret;
if (panel) { if (panel) {
output->connector.dpms = DRM_MODE_DPMS_OFF; output->connector.dpms = DRM_MODE_DPMS_OFF;
output->connector.polled = DRM_CONNECTOR_POLL_CONNECT; output->connector.polled = DRM_CONNECTOR_POLL_CONNECT;
...@@ -220,22 +220,14 @@ static int atmel_hlcdc_attach_endpoint(struct drm_device *dev, ...@@ -220,22 +220,14 @@ static int atmel_hlcdc_attach_endpoint(struct drm_device *dev,
int atmel_hlcdc_create_outputs(struct drm_device *dev) int atmel_hlcdc_create_outputs(struct drm_device *dev)
{ {
struct device_node *remote; int endpoint, ret = 0;
int ret = -ENODEV;
int endpoint = 0; for (endpoint = 0; !ret; endpoint++)
ret = atmel_hlcdc_attach_endpoint(dev, endpoint);
while (true) {
/* Loop thru possible multiple connections to the output */ /* At least one device was successfully attached.*/
remote = of_graph_get_remote_node(dev->dev->of_node, 0, if (ret == -ENODEV && endpoint)
endpoint++); return 0;
if (!remote)
break;
ret = atmel_hlcdc_attach_endpoint(dev, remote);
of_node_put(remote);
if (ret)
return ret;
}
return ret; return ret;
} }
...@@ -44,6 +44,7 @@ static struct etnaviv_gem_submit *submit_create(struct drm_device *dev, ...@@ -44,6 +44,7 @@ static struct etnaviv_gem_submit *submit_create(struct drm_device *dev,
/* initially, until copy_from_user() and bo lookup succeeds: */ /* initially, until copy_from_user() and bo lookup succeeds: */
submit->nr_bos = 0; submit->nr_bos = 0;
submit->fence = NULL;
ww_acquire_init(&submit->ticket, &reservation_ww_class); ww_acquire_init(&submit->ticket, &reservation_ww_class);
} }
...@@ -294,6 +295,7 @@ static void submit_cleanup(struct etnaviv_gem_submit *submit) ...@@ -294,6 +295,7 @@ static void submit_cleanup(struct etnaviv_gem_submit *submit)
} }
ww_acquire_fini(&submit->ticket); ww_acquire_fini(&submit->ticket);
if (submit->fence)
dma_fence_put(submit->fence); dma_fence_put(submit->fence);
kfree(submit); kfree(submit);
} }
......
...@@ -1244,7 +1244,7 @@ static int dma_ctrl_write(struct intel_vgpu *vgpu, unsigned int offset, ...@@ -1244,7 +1244,7 @@ static int dma_ctrl_write(struct intel_vgpu *vgpu, unsigned int offset,
mode = vgpu_vreg(vgpu, offset); mode = vgpu_vreg(vgpu, offset);
if (GFX_MODE_BIT_SET_IN_MASK(mode, START_DMA)) { if (GFX_MODE_BIT_SET_IN_MASK(mode, START_DMA)) {
WARN_ONCE(1, "VM(%d): iGVT-g doesn't supporte GuC\n", WARN_ONCE(1, "VM(%d): iGVT-g doesn't support GuC\n",
vgpu->id); vgpu->id);
return 0; return 0;
} }
......
...@@ -340,6 +340,9 @@ void intel_gvt_restore_render_mmio(struct intel_vgpu *vgpu, int ring_id) ...@@ -340,6 +340,9 @@ void intel_gvt_restore_render_mmio(struct intel_vgpu *vgpu, int ring_id)
} else } else
v = mmio->value; v = mmio->value;
if (mmio->in_context)
continue;
I915_WRITE(mmio->reg, v); I915_WRITE(mmio->reg, v);
POSTING_READ(mmio->reg); POSTING_READ(mmio->reg);
......
...@@ -129,9 +129,13 @@ static void try_to_schedule_next_vgpu(struct intel_gvt *gvt) ...@@ -129,9 +129,13 @@ static void try_to_schedule_next_vgpu(struct intel_gvt *gvt)
struct vgpu_sched_data *vgpu_data; struct vgpu_sched_data *vgpu_data;
ktime_t cur_time; ktime_t cur_time;
/* no target to schedule */ /* no need to schedule if next_vgpu is the same with current_vgpu,
if (!scheduler->next_vgpu) * let scheduler chose next_vgpu again by setting it to NULL.
*/
if (scheduler->next_vgpu == scheduler->current_vgpu) {
scheduler->next_vgpu = NULL;
return; return;
}
/* /*
* after the flag is set, workload dispatch thread will * after the flag is set, workload dispatch thread will
......
...@@ -195,9 +195,12 @@ static int ppgtt_bind_vma(struct i915_vma *vma, ...@@ -195,9 +195,12 @@ static int ppgtt_bind_vma(struct i915_vma *vma,
u32 pte_flags; u32 pte_flags;
int ret; int ret;
ret = vma->vm->allocate_va_range(vma->vm, vma->node.start, vma->size); if (!(vma->flags & I915_VMA_LOCAL_BIND)) {
ret = vma->vm->allocate_va_range(vma->vm, vma->node.start,
vma->size);
if (ret) if (ret)
return ret; return ret;
}
vma->pages = vma->obj->mm.pages; vma->pages = vma->obj->mm.pages;
...@@ -2306,7 +2309,8 @@ static int aliasing_gtt_bind_vma(struct i915_vma *vma, ...@@ -2306,7 +2309,8 @@ static int aliasing_gtt_bind_vma(struct i915_vma *vma,
if (flags & I915_VMA_LOCAL_BIND) { if (flags & I915_VMA_LOCAL_BIND) {
struct i915_hw_ppgtt *appgtt = i915->mm.aliasing_ppgtt; struct i915_hw_ppgtt *appgtt = i915->mm.aliasing_ppgtt;
if (appgtt->base.allocate_va_range) { if (!(vma->flags & I915_VMA_LOCAL_BIND) &&
appgtt->base.allocate_va_range) {
ret = appgtt->base.allocate_va_range(&appgtt->base, ret = appgtt->base.allocate_va_range(&appgtt->base,
vma->node.start, vma->node.start,
vma->node.size); vma->node.size);
......
...@@ -3051,10 +3051,14 @@ enum skl_disp_power_wells { ...@@ -3051,10 +3051,14 @@ enum skl_disp_power_wells {
#define CLKCFG_FSB_667 (3 << 0) /* hrawclk 166 */ #define CLKCFG_FSB_667 (3 << 0) /* hrawclk 166 */
#define CLKCFG_FSB_800 (2 << 0) /* hrawclk 200 */ #define CLKCFG_FSB_800 (2 << 0) /* hrawclk 200 */
#define CLKCFG_FSB_1067 (6 << 0) /* hrawclk 266 */ #define CLKCFG_FSB_1067 (6 << 0) /* hrawclk 266 */
#define CLKCFG_FSB_1067_ALT (0 << 0) /* hrawclk 266 */
#define CLKCFG_FSB_1333 (7 << 0) /* hrawclk 333 */ #define CLKCFG_FSB_1333 (7 << 0) /* hrawclk 333 */
/* Note, below two are guess */ /*
#define CLKCFG_FSB_1600 (4 << 0) /* hrawclk 400 */ * Note that on at least on ELK the below value is reported for both
#define CLKCFG_FSB_1600_ALT (0 << 0) /* hrawclk 400 */ * 333 and 400 MHz BIOS FSB setting, but given that the gmch datasheet
* lists only 200/266/333 MHz FSB as supported let's decode it as 333 MHz.
*/
#define CLKCFG_FSB_1333_ALT (4 << 0) /* hrawclk 333 */
#define CLKCFG_FSB_MASK (7 << 0) #define CLKCFG_FSB_MASK (7 << 0)
#define CLKCFG_MEM_533 (1 << 4) #define CLKCFG_MEM_533 (1 << 4)
#define CLKCFG_MEM_667 (2 << 4) #define CLKCFG_MEM_667 (2 << 4)
......
...@@ -1798,13 +1798,11 @@ static int g4x_hrawclk(struct drm_i915_private *dev_priv) ...@@ -1798,13 +1798,11 @@ static int g4x_hrawclk(struct drm_i915_private *dev_priv)
case CLKCFG_FSB_800: case CLKCFG_FSB_800:
return 200000; return 200000;
case CLKCFG_FSB_1067: case CLKCFG_FSB_1067:
case CLKCFG_FSB_1067_ALT:
return 266667; return 266667;
case CLKCFG_FSB_1333: case CLKCFG_FSB_1333:
case CLKCFG_FSB_1333_ALT:
return 333333; return 333333;
/* these two are just a guess; one of them might be right */
case CLKCFG_FSB_1600:
case CLKCFG_FSB_1600_ALT:
return 400000;
default: default:
return 133333; return 133333;
} }
......
...@@ -410,11 +410,10 @@ static void glk_dsi_device_ready(struct intel_encoder *encoder) ...@@ -410,11 +410,10 @@ static void glk_dsi_device_ready(struct intel_encoder *encoder)
val |= (ULPS_STATE_ENTER | DEVICE_READY); val |= (ULPS_STATE_ENTER | DEVICE_READY);
I915_WRITE(MIPI_DEVICE_READY(port), val); I915_WRITE(MIPI_DEVICE_READY(port), val);
/* Wait for ULPS Not active */ /* Wait for ULPS active */
if (intel_wait_for_register(dev_priv, if (intel_wait_for_register(dev_priv,
MIPI_CTRL(port), GLK_ULPS_NOT_ACTIVE, MIPI_CTRL(port), GLK_ULPS_NOT_ACTIVE, 0, 20))
GLK_ULPS_NOT_ACTIVE, 20)) DRM_ERROR("ULPS not active\n");
DRM_ERROR("ULPS is still active\n");
/* Exit ULPS */ /* Exit ULPS */
val = I915_READ(MIPI_DEVICE_READY(port)); val = I915_READ(MIPI_DEVICE_READY(port));
......
...@@ -63,6 +63,7 @@ ...@@ -63,6 +63,7 @@
#include <linux/acpi.h> #include <linux/acpi.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/pm_runtime.h>
#include "i915_drv.h" #include "i915_drv.h"
#include <linux/delay.h> #include <linux/delay.h>
...@@ -121,6 +122,10 @@ lpe_audio_platdev_create(struct drm_i915_private *dev_priv) ...@@ -121,6 +122,10 @@ lpe_audio_platdev_create(struct drm_i915_private *dev_priv)
kfree(rsc); kfree(rsc);
pm_runtime_forbid(&platdev->dev);
pm_runtime_set_active(&platdev->dev);
pm_runtime_enable(&platdev->dev);
return platdev; return platdev;
err: err:
......
...@@ -360,6 +360,8 @@ nouveau_display_hpd_work(struct work_struct *work) ...@@ -360,6 +360,8 @@ nouveau_display_hpd_work(struct work_struct *work)
pm_runtime_get_sync(drm->dev->dev); pm_runtime_get_sync(drm->dev->dev);
drm_helper_hpd_irq_event(drm->dev); drm_helper_hpd_irq_event(drm->dev);
/* enable polling for external displays */
drm_kms_helper_poll_enable(drm->dev);
pm_runtime_mark_last_busy(drm->dev->dev); pm_runtime_mark_last_busy(drm->dev->dev);
pm_runtime_put_sync(drm->dev->dev); pm_runtime_put_sync(drm->dev->dev);
...@@ -413,10 +415,6 @@ nouveau_display_init(struct drm_device *dev) ...@@ -413,10 +415,6 @@ nouveau_display_init(struct drm_device *dev)
if (ret) if (ret)
return ret; return ret;
/* enable polling for external displays */
if (!dev->mode_config.poll_enabled)
drm_kms_helper_poll_enable(dev);
/* enable hotplug interrupts */ /* enable hotplug interrupts */
list_for_each_entry(connector, &dev->mode_config.connector_list, head) { list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
struct nouveau_connector *conn = nouveau_connector(connector); struct nouveau_connector *conn = nouveau_connector(connector);
......
...@@ -502,6 +502,9 @@ nouveau_drm_load(struct drm_device *dev, unsigned long flags) ...@@ -502,6 +502,9 @@ nouveau_drm_load(struct drm_device *dev, unsigned long flags)
pm_runtime_allow(dev->dev); pm_runtime_allow(dev->dev);
pm_runtime_mark_last_busy(dev->dev); pm_runtime_mark_last_busy(dev->dev);
pm_runtime_put(dev->dev); pm_runtime_put(dev->dev);
} else {
/* enable polling for external displays */
drm_kms_helper_poll_enable(dev);
} }
return 0; return 0;
...@@ -774,9 +777,6 @@ nouveau_pmops_runtime_resume(struct device *dev) ...@@ -774,9 +777,6 @@ nouveau_pmops_runtime_resume(struct device *dev)
ret = nouveau_do_resume(drm_dev, true); ret = nouveau_do_resume(drm_dev, true);
if (!drm_dev->mode_config.poll_enabled)
drm_kms_helper_poll_enable(drm_dev);
/* do magic */ /* do magic */
nvif_mask(&device->object, 0x088488, (1 << 25), (1 << 25)); nvif_mask(&device->object, 0x088488, (1 << 25), (1 << 25));
vga_switcheroo_set_dynamic_switch(pdev, VGA_SWITCHEROO_ON); vga_switcheroo_set_dynamic_switch(pdev, VGA_SWITCHEROO_ON);
......
...@@ -148,7 +148,7 @@ gk104_fifo_runlist_commit(struct gk104_fifo *fifo, int runl) ...@@ -148,7 +148,7 @@ gk104_fifo_runlist_commit(struct gk104_fifo *fifo, int runl)
case NVKM_MEM_TARGET_NCOH: target = 3; break; case NVKM_MEM_TARGET_NCOH: target = 3; break;
default: default:
WARN_ON(1); WARN_ON(1);
return; goto unlock;
} }
nvkm_wr32(device, 0x002270, (nvkm_memory_addr(mem) >> 12) | nvkm_wr32(device, 0x002270, (nvkm_memory_addr(mem) >> 12) |
...@@ -160,6 +160,7 @@ gk104_fifo_runlist_commit(struct gk104_fifo *fifo, int runl) ...@@ -160,6 +160,7 @@ gk104_fifo_runlist_commit(struct gk104_fifo *fifo, int runl)
& 0x00100000), & 0x00100000),
msecs_to_jiffies(2000)) == 0) msecs_to_jiffies(2000)) == 0)
nvkm_error(subdev, "runlist %d update timeout\n", runl); nvkm_error(subdev, "runlist %d update timeout\n", runl);
unlock:
mutex_unlock(&subdev->mutex); mutex_unlock(&subdev->mutex);
} }
......
...@@ -116,6 +116,7 @@ ls_ucode_img_load_gr(const struct nvkm_subdev *subdev, struct ls_ucode_img *img, ...@@ -116,6 +116,7 @@ ls_ucode_img_load_gr(const struct nvkm_subdev *subdev, struct ls_ucode_img *img,
ret = nvkm_firmware_get(subdev->device, f, &sig); ret = nvkm_firmware_get(subdev->device, f, &sig);
if (ret) if (ret)
goto free_data; goto free_data;
img->sig = kmemdup(sig->data, sig->size, GFP_KERNEL); img->sig = kmemdup(sig->data, sig->size, GFP_KERNEL);
if (!img->sig) { if (!img->sig) {
ret = -ENOMEM; ret = -ENOMEM;
...@@ -126,8 +127,9 @@ ls_ucode_img_load_gr(const struct nvkm_subdev *subdev, struct ls_ucode_img *img, ...@@ -126,8 +127,9 @@ ls_ucode_img_load_gr(const struct nvkm_subdev *subdev, struct ls_ucode_img *img,
img->ucode_data = ls_ucode_img_build(bl, code, data, img->ucode_data = ls_ucode_img_build(bl, code, data,
&img->ucode_desc); &img->ucode_desc);
if (IS_ERR(img->ucode_data)) { if (IS_ERR(img->ucode_data)) {
kfree(img->sig);
ret = PTR_ERR(img->ucode_data); ret = PTR_ERR(img->ucode_data);
goto free_data; goto free_sig;
} }
img->ucode_size = img->ucode_desc.image_size; img->ucode_size = img->ucode_desc.image_size;
......
config TEGRA_HOST1X config TEGRA_HOST1X
tristate "NVIDIA Tegra host1x driver" tristate "NVIDIA Tegra host1x driver"
depends on ARCH_TEGRA || (ARM && COMPILE_TEST) depends on ARCH_TEGRA || (ARM && COMPILE_TEST)
select IOMMU_IOVA if IOMMU_SUPPORT
help help
Driver for the NVIDIA Tegra host1x hardware. Driver for the NVIDIA Tegra host1x hardware.
......
...@@ -1809,10 +1809,6 @@ static int hdmi_lpe_audio_probe(struct platform_device *pdev) ...@@ -1809,10 +1809,6 @@ static int hdmi_lpe_audio_probe(struct platform_device *pdev)
pdata->notify_pending = false; pdata->notify_pending = false;
spin_unlock_irq(&pdata->lpe_audio_slock); spin_unlock_irq(&pdata->lpe_audio_slock);
/* runtime PM isn't enabled as default, since it won't save much on
* BYT/CHT devices; user who want the runtime PM should adjust the
* power/ontrol and power/autosuspend_delay_ms sysfs entries instead
*/
pm_runtime_use_autosuspend(&pdev->dev); pm_runtime_use_autosuspend(&pdev->dev);
pm_runtime_mark_last_busy(&pdev->dev); pm_runtime_mark_last_busy(&pdev->dev);
pm_runtime_set_active(&pdev->dev); pm_runtime_set_active(&pdev->dev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment