mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 01:34:14 +08:00
Merge tag 'drm-fixes-for-4.8-rc2' of git://people.freedesktop.org/~airlied/linux
Pull drm fixes from Dave Airlie: "This contains a bunch of amdgpu fixes, and some i915 regression fixes. It also contains some fixes for an older regression with some EDID changes and some 6bpc panels. Then there are the lockdep, cirrus and rcar-du regression fixes from this window" * tag 'drm-fixes-for-4.8-rc2' of git://people.freedesktop.org/~airlied/linux: drm/cirrus: Fix NULL pointer dereference when registering the fbdev drm/edid: Set 8 bpc color depth for displays with "DFP 1.x compliant TMDS". drm/i915/dp: Revert "drm/i915/dp: fall back to 18 bpp when sink capability is unknown" drm/edid: Add 6 bpc quirk for display AEO model 0. drm: Paper over locking inversion after registration rework drm: rcar-du: Link HDMI encoder with bridge drm/ttm: Wait for a BO to become idle before unbinding it from GTT drm/i915/fbdev: Check for the framebuffer before use drm/amdgpu: update golden setting of polaris10 drm/amdgpu: update golden setting of stoney drm/amdgpu: update golden setting of polaris11 drm/amdgpu: update golden setting of carrizo drm/amdgpu: update golden setting of iceland drm/amd/amdgpu: change pptable output format from ASCII to binary drm/amdgpu/ci: add mullins to default case for smc ucode drm/amdgpu/gmc7: add missing mullins case drm/i915: Never fully mask the the EI up rps interrupt on SNB/IVB drm/i915: Wait up to 3ms for the pcu to ack the cdclk change request on SKL
This commit is contained in:
commit
cb0d93aaf0
@ -305,7 +305,7 @@ static ssize_t amdgpu_get_pp_table(struct device *dev,
|
||||
struct drm_device *ddev = dev_get_drvdata(dev);
|
||||
struct amdgpu_device *adev = ddev->dev_private;
|
||||
char *table = NULL;
|
||||
int size, i;
|
||||
int size;
|
||||
|
||||
if (adev->pp_enabled)
|
||||
size = amdgpu_dpm_get_pp_table(adev, &table);
|
||||
@ -315,10 +315,7 @@ static ssize_t amdgpu_get_pp_table(struct device *dev,
|
||||
if (size >= PAGE_SIZE)
|
||||
size = PAGE_SIZE - 1;
|
||||
|
||||
for (i = 0; i < size; i++) {
|
||||
sprintf(buf + i, "%02x", table[i]);
|
||||
}
|
||||
sprintf(buf + i, "\n");
|
||||
memcpy(buf, table, size);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
@ -335,7 +335,7 @@ static int amdgpu_move_vram_ram(struct ttm_buffer_object *bo,
|
||||
if (unlikely(r)) {
|
||||
goto out_cleanup;
|
||||
}
|
||||
r = ttm_bo_move_ttm(bo, true, no_wait_gpu, new_mem);
|
||||
r = ttm_bo_move_ttm(bo, true, interruptible, no_wait_gpu, new_mem);
|
||||
out_cleanup:
|
||||
ttm_bo_mem_put(bo, &tmp_mem);
|
||||
return r;
|
||||
@ -368,7 +368,7 @@ static int amdgpu_move_ram_vram(struct ttm_buffer_object *bo,
|
||||
if (unlikely(r)) {
|
||||
return r;
|
||||
}
|
||||
r = ttm_bo_move_ttm(bo, true, no_wait_gpu, &tmp_mem);
|
||||
r = ttm_bo_move_ttm(bo, true, interruptible, no_wait_gpu, &tmp_mem);
|
||||
if (unlikely(r)) {
|
||||
goto out_cleanup;
|
||||
}
|
||||
|
@ -5779,6 +5779,7 @@ static int ci_dpm_init_microcode(struct amdgpu_device *adev)
|
||||
break;
|
||||
case CHIP_KAVERI:
|
||||
case CHIP_KABINI:
|
||||
case CHIP_MULLINS:
|
||||
default: BUG();
|
||||
}
|
||||
|
||||
|
@ -270,7 +270,8 @@ static const u32 tonga_mgcg_cgcg_init[] =
|
||||
|
||||
static const u32 golden_settings_polaris11_a11[] =
|
||||
{
|
||||
mmCB_HW_CONTROL, 0xfffdf3cf, 0x00006208,
|
||||
mmCB_HW_CONTROL, 0x0000f3cf, 0x00007208,
|
||||
mmCB_HW_CONTROL_2, 0x0f000000, 0x0f000000,
|
||||
mmCB_HW_CONTROL_3, 0x000001ff, 0x00000040,
|
||||
mmDB_DEBUG2, 0xf00fffff, 0x00000400,
|
||||
mmPA_SC_ENHANCE, 0xffffffff, 0x20000001,
|
||||
@ -279,7 +280,7 @@ static const u32 golden_settings_polaris11_a11[] =
|
||||
mmPA_SC_RASTER_CONFIG_1, 0x0000003f, 0x00000000,
|
||||
mmRLC_CGCG_CGLS_CTRL, 0x00000003, 0x0001003c,
|
||||
mmRLC_CGCG_CGLS_CTRL_3D, 0xffffffff, 0x0001003c,
|
||||
mmSQ_CONFIG, 0x07f80000, 0x07180000,
|
||||
mmSQ_CONFIG, 0x07f80000, 0x01180000,
|
||||
mmTA_CNTL_AUX, 0x000f000f, 0x000b0000,
|
||||
mmTCC_CTRL, 0x00100000, 0xf31fff7f,
|
||||
mmTCP_ADDR_CONFIG, 0x000003ff, 0x000000f3,
|
||||
@ -301,8 +302,8 @@ static const u32 polaris11_golden_common_all[] =
|
||||
static const u32 golden_settings_polaris10_a11[] =
|
||||
{
|
||||
mmATC_MISC_CG, 0x000c0fc0, 0x000c0200,
|
||||
mmCB_HW_CONTROL, 0xfffdf3cf, 0x00007208,
|
||||
mmCB_HW_CONTROL_2, 0, 0x0f000000,
|
||||
mmCB_HW_CONTROL, 0x0001f3cf, 0x00007208,
|
||||
mmCB_HW_CONTROL_2, 0x0f000000, 0x0f000000,
|
||||
mmCB_HW_CONTROL_3, 0x000001ff, 0x00000040,
|
||||
mmDB_DEBUG2, 0xf00fffff, 0x00000400,
|
||||
mmPA_SC_ENHANCE, 0xffffffff, 0x20000001,
|
||||
@ -409,6 +410,7 @@ static const u32 golden_settings_iceland_a11[] =
|
||||
mmPA_SC_LINE_STIPPLE_STATE, 0x0000ff0f, 0x00000000,
|
||||
mmPA_SC_RASTER_CONFIG, 0x3f3fffff, 0x00000002,
|
||||
mmPA_SC_RASTER_CONFIG_1, 0x0000003f, 0x00000000,
|
||||
mmRLC_CGCG_CGLS_CTRL, 0x00000003, 0x0000003c,
|
||||
mmSQ_RANDOM_WAVE_PRI, 0x001fffff, 0x000006fd,
|
||||
mmTA_CNTL_AUX, 0x000f000f, 0x000b0000,
|
||||
mmTCC_CTRL, 0x00100000, 0xf31fff7f,
|
||||
@ -505,8 +507,10 @@ static const u32 cz_golden_settings_a11[] =
|
||||
mmGB_GPU_ID, 0x0000000f, 0x00000000,
|
||||
mmPA_SC_ENHANCE, 0xffffffff, 0x00000001,
|
||||
mmPA_SC_LINE_STIPPLE_STATE, 0x0000ff0f, 0x00000000,
|
||||
mmRLC_CGCG_CGLS_CTRL, 0x00000003, 0x0000003c,
|
||||
mmSQ_RANDOM_WAVE_PRI, 0x001fffff, 0x000006fd,
|
||||
mmTA_CNTL_AUX, 0x000f000f, 0x00010000,
|
||||
mmTCC_CTRL, 0x00100000, 0xf31fff7f,
|
||||
mmTCC_EXE_DISABLE, 0x00000002, 0x00000002,
|
||||
mmTCP_ADDR_CONFIG, 0x0000000f, 0x000000f3,
|
||||
mmTCP_CHAN_STEER_LO, 0xffffffff, 0x00001302
|
||||
|
@ -144,6 +144,7 @@ static int gmc_v7_0_init_microcode(struct amdgpu_device *adev)
|
||||
break;
|
||||
case CHIP_KAVERI:
|
||||
case CHIP_KABINI:
|
||||
case CHIP_MULLINS:
|
||||
return 0;
|
||||
default: BUG();
|
||||
}
|
||||
|
@ -103,6 +103,11 @@ static const u32 stoney_mgcg_cgcg_init[] =
|
||||
mmMC_MEM_POWER_LS, 0xffffffff, 0x00000104
|
||||
};
|
||||
|
||||
static const u32 golden_settings_stoney_common[] =
|
||||
{
|
||||
mmMC_HUB_RDREQ_UVD, MC_HUB_RDREQ_UVD__PRESCALE_MASK, 0x00000004,
|
||||
mmMC_RD_GRP_OTH, MC_RD_GRP_OTH__UVD_MASK, 0x00600000
|
||||
};
|
||||
|
||||
static void gmc_v8_0_init_golden_registers(struct amdgpu_device *adev)
|
||||
{
|
||||
@ -142,6 +147,9 @@ static void gmc_v8_0_init_golden_registers(struct amdgpu_device *adev)
|
||||
amdgpu_program_register_sequence(adev,
|
||||
stoney_mgcg_cgcg_init,
|
||||
(const u32)ARRAY_SIZE(stoney_mgcg_cgcg_init));
|
||||
amdgpu_program_register_sequence(adev,
|
||||
golden_settings_stoney_common,
|
||||
(const u32)ARRAY_SIZE(golden_settings_stoney_common));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -185,14 +185,23 @@ int cirrus_driver_load(struct drm_device *dev, unsigned long flags)
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* cirrus_modeset_init() is initializing/registering the emulated fbdev
|
||||
* and DRM internals can access/test some of the fields in
|
||||
* mode_config->funcs as part of the fbdev registration process.
|
||||
* Make sure dev->mode_config.funcs is properly set to avoid
|
||||
* dereferencing a NULL pointer.
|
||||
* FIXME: mode_config.funcs assignment should probably be done in
|
||||
* cirrus_modeset_init() (that's a common pattern seen in other DRM
|
||||
* drivers).
|
||||
*/
|
||||
dev->mode_config.funcs = &cirrus_mode_funcs;
|
||||
r = cirrus_modeset_init(cdev);
|
||||
if (r) {
|
||||
dev_err(&dev->pdev->dev, "Fatal error during modeset init: %d\n", r);
|
||||
goto out;
|
||||
}
|
||||
|
||||
dev->mode_config.funcs = (void *)&cirrus_mode_funcs;
|
||||
|
||||
return 0;
|
||||
out:
|
||||
cirrus_driver_unload(dev);
|
||||
|
@ -1121,16 +1121,14 @@ static int drm_connector_register_all(struct drm_device *dev)
|
||||
struct drm_connector *connector;
|
||||
int ret;
|
||||
|
||||
mutex_lock(&dev->mode_config.mutex);
|
||||
|
||||
drm_for_each_connector(connector, dev) {
|
||||
/* FIXME: taking the mode config mutex ends up in a clash with
|
||||
* fbcon/backlight registration */
|
||||
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
|
||||
ret = drm_connector_register(connector);
|
||||
if (ret)
|
||||
goto err;
|
||||
}
|
||||
|
||||
mutex_unlock(&dev->mode_config.mutex);
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
|
@ -74,6 +74,8 @@
|
||||
#define EDID_QUIRK_FORCE_8BPC (1 << 8)
|
||||
/* Force 12bpc */
|
||||
#define EDID_QUIRK_FORCE_12BPC (1 << 9)
|
||||
/* Force 6bpc */
|
||||
#define EDID_QUIRK_FORCE_6BPC (1 << 10)
|
||||
|
||||
struct detailed_mode_closure {
|
||||
struct drm_connector *connector;
|
||||
@ -100,6 +102,9 @@ static struct edid_quirk {
|
||||
/* Unknown Acer */
|
||||
{ "ACR", 2423, EDID_QUIRK_FIRST_DETAILED_PREFERRED },
|
||||
|
||||
/* AEO model 0 reports 8 bpc, but is a 6 bpc panel */
|
||||
{ "AEO", 0, EDID_QUIRK_FORCE_6BPC },
|
||||
|
||||
/* Belinea 10 15 55 */
|
||||
{ "MAX", 1516, EDID_QUIRK_PREFER_LARGE_60 },
|
||||
{ "MAX", 0x77e, EDID_QUIRK_PREFER_LARGE_60 },
|
||||
@ -3862,6 +3867,20 @@ static void drm_add_display_info(struct edid *edid,
|
||||
/* HDMI deep color modes supported? Assign to info, if so */
|
||||
drm_assign_hdmi_deep_color_info(edid, info, connector);
|
||||
|
||||
/*
|
||||
* Digital sink with "DFP 1.x compliant TMDS" according to EDID 1.3?
|
||||
*
|
||||
* For such displays, the DFP spec 1.0, section 3.10 "EDID support"
|
||||
* tells us to assume 8 bpc color depth if the EDID doesn't have
|
||||
* extensions which tell otherwise.
|
||||
*/
|
||||
if ((info->bpc == 0) && (edid->revision < 4) &&
|
||||
(edid->input & DRM_EDID_DIGITAL_TYPE_DVI)) {
|
||||
info->bpc = 8;
|
||||
DRM_DEBUG("%s: Assigning DFP sink color depth as %d bpc.\n",
|
||||
connector->name, info->bpc);
|
||||
}
|
||||
|
||||
/* Only defined for 1.4 with digital displays */
|
||||
if (edid->revision < 4)
|
||||
return;
|
||||
@ -4082,6 +4101,9 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
|
||||
|
||||
drm_add_display_info(edid, &connector->display_info, connector);
|
||||
|
||||
if (quirks & EDID_QUIRK_FORCE_6BPC)
|
||||
connector->display_info.bpc = 6;
|
||||
|
||||
if (quirks & EDID_QUIRK_FORCE_8BPC)
|
||||
connector->display_info.bpc = 8;
|
||||
|
||||
|
@ -5691,15 +5691,7 @@ static bool skl_cdclk_pcu_ready(struct drm_i915_private *dev_priv)
|
||||
|
||||
static bool skl_cdclk_wait_for_pcu_ready(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < 15; i++) {
|
||||
if (skl_cdclk_pcu_ready(dev_priv))
|
||||
return true;
|
||||
udelay(10);
|
||||
}
|
||||
|
||||
return false;
|
||||
return _wait_for(skl_cdclk_pcu_ready(dev_priv), 3000, 10) == 0;
|
||||
}
|
||||
|
||||
static void skl_set_cdclk(struct drm_i915_private *dev_priv, int cdclk, int vco)
|
||||
@ -12114,21 +12106,11 @@ connected_sink_compute_bpp(struct intel_connector *connector,
|
||||
pipe_config->pipe_bpp = connector->base.display_info.bpc*3;
|
||||
}
|
||||
|
||||
/* Clamp bpp to default limit on screens without EDID 1.4 */
|
||||
if (connector->base.display_info.bpc == 0) {
|
||||
int type = connector->base.connector_type;
|
||||
int clamp_bpp = 24;
|
||||
|
||||
/* Fall back to 18 bpp when DP sink capability is unknown. */
|
||||
if (type == DRM_MODE_CONNECTOR_DisplayPort ||
|
||||
type == DRM_MODE_CONNECTOR_eDP)
|
||||
clamp_bpp = 18;
|
||||
|
||||
if (bpp > clamp_bpp) {
|
||||
DRM_DEBUG_KMS("clamping display bpp (was %d) to default limit of %d\n",
|
||||
bpp, clamp_bpp);
|
||||
pipe_config->pipe_bpp = clamp_bpp;
|
||||
}
|
||||
/* Clamp bpp to 8 on screens without EDID 1.4 */
|
||||
if (connector->base.display_info.bpc == 0 && bpp > 24) {
|
||||
DRM_DEBUG_KMS("clamping display bpp (was %d) to default limit of 24\n",
|
||||
bpp);
|
||||
pipe_config->pipe_bpp = 24;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -782,7 +782,7 @@ void intel_fbdev_set_suspend(struct drm_device *dev, int state, bool synchronous
|
||||
struct intel_fbdev *ifbdev = dev_priv->fbdev;
|
||||
struct fb_info *info;
|
||||
|
||||
if (!ifbdev)
|
||||
if (!ifbdev || !ifbdev->fb)
|
||||
return;
|
||||
|
||||
info = ifbdev->helper.fbdev;
|
||||
@ -827,31 +827,28 @@ void intel_fbdev_set_suspend(struct drm_device *dev, int state, bool synchronous
|
||||
|
||||
void intel_fbdev_output_poll_changed(struct drm_device *dev)
|
||||
{
|
||||
struct drm_i915_private *dev_priv = to_i915(dev);
|
||||
if (dev_priv->fbdev)
|
||||
drm_fb_helper_hotplug_event(&dev_priv->fbdev->helper);
|
||||
struct intel_fbdev *ifbdev = to_i915(dev)->fbdev;
|
||||
|
||||
if (ifbdev && ifbdev->fb)
|
||||
drm_fb_helper_hotplug_event(&ifbdev->helper);
|
||||
}
|
||||
|
||||
void intel_fbdev_restore_mode(struct drm_device *dev)
|
||||
{
|
||||
int ret;
|
||||
struct drm_i915_private *dev_priv = to_i915(dev);
|
||||
struct intel_fbdev *ifbdev = dev_priv->fbdev;
|
||||
struct drm_fb_helper *fb_helper;
|
||||
struct intel_fbdev *ifbdev = to_i915(dev)->fbdev;
|
||||
|
||||
if (!ifbdev)
|
||||
return;
|
||||
|
||||
intel_fbdev_sync(ifbdev);
|
||||
if (!ifbdev->fb)
|
||||
return;
|
||||
|
||||
fb_helper = &ifbdev->helper;
|
||||
|
||||
ret = drm_fb_helper_restore_fbdev_mode_unlocked(fb_helper);
|
||||
if (ret) {
|
||||
if (drm_fb_helper_restore_fbdev_mode_unlocked(&ifbdev->helper)) {
|
||||
DRM_DEBUG("failed to restore crtc mode\n");
|
||||
} else {
|
||||
mutex_lock(&fb_helper->dev->struct_mutex);
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
intel_fb_obj_invalidate(ifbdev->fb->obj, ORIGIN_GTT);
|
||||
mutex_unlock(&fb_helper->dev->struct_mutex);
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
}
|
||||
}
|
||||
|
@ -4892,7 +4892,8 @@ void gen6_rps_idle(struct drm_i915_private *dev_priv)
|
||||
else
|
||||
gen6_set_rps(dev_priv, dev_priv->rps.idle_freq);
|
||||
dev_priv->rps.last_adj = 0;
|
||||
I915_WRITE(GEN6_PMINTRMSK, 0xffffffff);
|
||||
I915_WRITE(GEN6_PMINTRMSK,
|
||||
gen6_sanitize_rps_pm_mask(dev_priv, ~0));
|
||||
}
|
||||
mutex_unlock(&dev_priv->rps.hw_lock);
|
||||
|
||||
|
@ -1151,7 +1151,7 @@ nouveau_bo_move_flipd(struct ttm_buffer_object *bo, bool evict, bool intr,
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
ret = ttm_bo_move_ttm(bo, true, no_wait_gpu, new_mem);
|
||||
ret = ttm_bo_move_ttm(bo, true, intr, no_wait_gpu, new_mem);
|
||||
out:
|
||||
ttm_bo_mem_put(bo, &tmp_mem);
|
||||
return ret;
|
||||
@ -1179,7 +1179,7 @@ nouveau_bo_move_flips(struct ttm_buffer_object *bo, bool evict, bool intr,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = ttm_bo_move_ttm(bo, true, no_wait_gpu, &tmp_mem);
|
||||
ret = ttm_bo_move_ttm(bo, true, intr, no_wait_gpu, &tmp_mem);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
|
@ -346,7 +346,7 @@ static int radeon_move_vram_ram(struct ttm_buffer_object *bo,
|
||||
if (unlikely(r)) {
|
||||
goto out_cleanup;
|
||||
}
|
||||
r = ttm_bo_move_ttm(bo, true, no_wait_gpu, new_mem);
|
||||
r = ttm_bo_move_ttm(bo, true, interruptible, no_wait_gpu, new_mem);
|
||||
out_cleanup:
|
||||
ttm_bo_mem_put(bo, &tmp_mem);
|
||||
return r;
|
||||
@ -379,7 +379,7 @@ static int radeon_move_ram_vram(struct ttm_buffer_object *bo,
|
||||
if (unlikely(r)) {
|
||||
return r;
|
||||
}
|
||||
r = ttm_bo_move_ttm(bo, true, no_wait_gpu, &tmp_mem);
|
||||
r = ttm_bo_move_ttm(bo, true, interruptible, no_wait_gpu, &tmp_mem);
|
||||
if (unlikely(r)) {
|
||||
goto out_cleanup;
|
||||
}
|
||||
|
@ -125,6 +125,7 @@ int rcar_du_hdmienc_init(struct rcar_du_device *rcdu,
|
||||
|
||||
/* Link drm_bridge to encoder */
|
||||
bridge->encoder = encoder;
|
||||
encoder->bridge = bridge;
|
||||
|
||||
ret = drm_bridge_attach(rcdu->ddev, bridge);
|
||||
if (ret) {
|
||||
|
@ -354,7 +354,8 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
|
||||
|
||||
if (!(old_man->flags & TTM_MEMTYPE_FLAG_FIXED) &&
|
||||
!(new_man->flags & TTM_MEMTYPE_FLAG_FIXED))
|
||||
ret = ttm_bo_move_ttm(bo, evict, no_wait_gpu, mem);
|
||||
ret = ttm_bo_move_ttm(bo, evict, interruptible, no_wait_gpu,
|
||||
mem);
|
||||
else if (bdev->driver->move)
|
||||
ret = bdev->driver->move(bo, evict, interruptible,
|
||||
no_wait_gpu, mem);
|
||||
|
@ -45,7 +45,7 @@ void ttm_bo_free_old_node(struct ttm_buffer_object *bo)
|
||||
}
|
||||
|
||||
int ttm_bo_move_ttm(struct ttm_buffer_object *bo,
|
||||
bool evict,
|
||||
bool evict, bool interruptible,
|
||||
bool no_wait_gpu, struct ttm_mem_reg *new_mem)
|
||||
{
|
||||
struct ttm_tt *ttm = bo->ttm;
|
||||
@ -53,6 +53,14 @@ int ttm_bo_move_ttm(struct ttm_buffer_object *bo,
|
||||
int ret;
|
||||
|
||||
if (old_mem->mem_type != TTM_PL_SYSTEM) {
|
||||
ret = ttm_bo_wait(bo, interruptible, no_wait_gpu);
|
||||
|
||||
if (unlikely(ret != 0)) {
|
||||
if (ret != -ERESTARTSYS)
|
||||
pr_err("Failed to expire sync object before unbinding TTM\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ttm_tt_unbind(ttm);
|
||||
ttm_bo_free_old_node(bo);
|
||||
ttm_flag_masked(&old_mem->placement, TTM_PL_FLAG_SYSTEM,
|
||||
|
@ -962,6 +962,7 @@ void ttm_mem_io_free(struct ttm_bo_device *bdev,
|
||||
*
|
||||
* @bo: A pointer to a struct ttm_buffer_object.
|
||||
* @evict: 1: This is an eviction. Don't try to pipeline.
|
||||
* @interruptible: Sleep interruptible if waiting.
|
||||
* @no_wait_gpu: Return immediately if the GPU is busy.
|
||||
* @new_mem: struct ttm_mem_reg indicating where to move.
|
||||
*
|
||||
@ -976,7 +977,7 @@ void ttm_mem_io_free(struct ttm_bo_device *bdev,
|
||||
*/
|
||||
|
||||
extern int ttm_bo_move_ttm(struct ttm_buffer_object *bo,
|
||||
bool evict, bool no_wait_gpu,
|
||||
bool evict, bool interruptible, bool no_wait_gpu,
|
||||
struct ttm_mem_reg *new_mem);
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user