mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-14 15:54:15 +08:00
drm fixes for v5.8-rc3
core: - fix VT registration regression ttm: - fix two fence leaks amdgpu: - Fix missed mutex unlock in DC error path - Fix firmware leak for sdma5 - DC bpc property fixes amdkfd: - Fix memleak in an error path radeon: - Fix copy paste typo in NI DPM spll validation rcar-du: - build fix tegra: - add missing zpos property - child driver registeration fix - debugfs cleanup fix - doc fix mcde: - reorder fbdev setup panel: - fix connector type - fix orienation for some panels sun4i: - fix dma/iommu configuration uvesafb: - respect blank flag -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJe9XhdAAoJEAx081l5xIa+9xEP/0xKWygNTFenNgr3cBTta882 OrUXn4T3Kss4ZPsax6UnPUXEMnBs5/+98S2QKc1EHK7EBHBtZ2EKJqz/xSkeYaOK RecM0zCjJfr5ujQwUlCN7EoGbNYhBUfJWLCvvsO5/DaOf7m1p2gwoa9ElXkDB3/v r8zoWbkyAcWfTJrZmzJU8/h/ilVat19Z2PRpRA5lkne/dPLVJ36zF/Yi+yXZuVXN knU7f0fVa7u+xBxm0xMtKAD02HmLoIOnCkNj2X7vUbkxGcJK2OcRoUDk2rWel4Km IZkkzLKPwtEkvyD7sZNPU7EsJWKX2Kmy0PYYWRIKTwOV3JhgtOZkj2D5zbXAGzBr bE+tyJS0bhwuG87IeEaensZ2vM+hFzAa7tFaYNm2lYJnuJyLvYbFwABlGkTJ91VI ivciHzUga4yW20iSW+0udiL4ADOvgVLVtlu4GlspGUssWI6mWg7U9wu6WyX8zPE6 j+cpMR4+x9KpmV92opU7BTiENE0Rn4AeKagOM54/th7R02TElHcKvgSnaE+JAPVz 9B7VNWDBoPoEqPmeNWzsseNp850RMVylb/f1js3rVtjigfsrJyVIFZhdkJ0H33Iq 4ZlOeX6wc4vvcx0OgNq7Gxt1zn1XRQqTLV+OSi4cmrABYhqNfpaInABIJi9AnZhg 6B1xvnZ0lmSSmyWuFkP+ =boAF -----END PGP SIGNATURE----- Merge tag 'drm-fixes-2020-06-26' of git://anongit.freedesktop.org/drm/drm Pull drm fixes from Dave Airlie: "Usual rc3 pickup, lots of little fixes all over. The core VT registration regression fix is probably the largest, otherwise ttm, amdgpu and tegra are the bulk, with some minor driver fixes. No i915 pull this week which may or may not mean I get 2x of it next week, we'll see how it goes. core: - fix VT registration regression ttm: - fix two fence leaks amdgpu: - Fix missed mutex unlock in DC error path - Fix firmware leak for sdma5 - DC bpc property fixes amdkfd: - Fix memleak in an error path radeon: - Fix copy paste typo in NI DPM spll validation rcar-du: - build fix tegra: - add missing zpos property - child driver registeration fix - debugfs cleanup fix - doc fix mcde: - reorder fbdev setup panel: - fix connector type - fix orienation for some panels sun4i: - fix dma/iommu configuration uvesafb: - respect blank flag" * tag 'drm-fixes-2020-06-26' of git://anongit.freedesktop.org/drm/drm: (25 commits) drm/amd: fix potential memleak in err branch drm/amd/display: Fix ineffective setting of max bpc property drm/amd/display: Enable output_bpc property on all outputs drm/amdgpu: add fw release for sdma v5_0 drm/fb-helper: Fix vt restore drm/radeon: fix fb_div check in ni_init_smc_spll_table() drm/amdgpu/display: Unlock mutex on error drm/sun4i: mixer: Call of_dma_configure if there's an IOMMU drm: panel-orientation-quirks: Use generic orientation-data for Acer S1003 drm: panel-orientation-quirks: Add quirk for Asus T101HA panel video: fbdev: uvesafb: fix "noblank" option handling drm/panel-simple: fix connector type for newhaven_nhd_43_480272ef_atxl drm/panel-simple: fix connector type for LogicPD Type28 Display drm: rcar-du: Fix build error drm: mcde: Fix forgotten user of drm->dev_private drm: mcde: Fix display initialization problem drm/tegra: Add zpos property for cursor planes gpu: host1x: Detach driver on unregister gpu: host1x: Correct trivial kernel-doc inconsistencies drm/tegra: hub: Register child devices ...
This commit is contained in:
commit
6a6c9b220a
@ -1298,8 +1298,12 @@ static int sdma_v5_0_sw_fini(void *handle)
|
||||
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < adev->sdma.num_instances; i++)
|
||||
for (i = 0; i < adev->sdma.num_instances; i++) {
|
||||
if (adev->sdma.instance[i].fw != NULL)
|
||||
release_firmware(adev->sdma.instance[i].fw);
|
||||
|
||||
amdgpu_ring_fini(&adev->sdma.instance[i].ring);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -428,6 +428,7 @@ struct kfd_process *kfd_create_process(struct file *filep)
|
||||
(int)process->lead_thread->pid);
|
||||
if (ret) {
|
||||
pr_warn("Creating procfs pid directory failed");
|
||||
kobject_put(process->kobj);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -5024,7 +5024,8 @@ create_validate_stream_for_sink(struct amdgpu_dm_connector *aconnector,
|
||||
struct drm_connector *connector = &aconnector->base;
|
||||
struct amdgpu_device *adev = connector->dev->dev_private;
|
||||
struct dc_stream_state *stream;
|
||||
int requested_bpc = connector->state ? connector->state->max_requested_bpc : 8;
|
||||
const struct drm_connector_state *drm_state = dm_state ? &dm_state->base : NULL;
|
||||
int requested_bpc = drm_state ? drm_state->max_requested_bpc : 8;
|
||||
enum dc_status dc_result = DC_OK;
|
||||
|
||||
do {
|
||||
|
@ -1058,7 +1058,6 @@ static const struct {
|
||||
{"link_settings", &dp_link_settings_debugfs_fops},
|
||||
{"phy_settings", &dp_phy_settings_debugfs_fop},
|
||||
{"test_pattern", &dp_phy_test_pattern_fops},
|
||||
{"output_bpc", &output_bpc_fops},
|
||||
{"vrr_range", &vrr_range_fops},
|
||||
#ifdef CONFIG_DRM_AMD_DC_HDCP
|
||||
{"hdcp_sink_capability", &hdcp_sink_capability_fops},
|
||||
@ -1142,6 +1141,9 @@ void connector_debugfs_init(struct amdgpu_dm_connector *connector)
|
||||
debugfs_create_file_unsafe("force_yuv420_output", 0644, dir, connector,
|
||||
&force_yuv420_output_fops);
|
||||
|
||||
debugfs_create_file("output_bpc", 0644, dir, connector,
|
||||
&output_bpc_fops);
|
||||
|
||||
connector->debugfs_dpcd_address = 0;
|
||||
connector->debugfs_dpcd_size = 0;
|
||||
|
||||
|
@ -510,8 +510,10 @@ static ssize_t srm_data_read(struct file *filp, struct kobject *kobj, struct bin
|
||||
|
||||
srm = psp_get_srm(work->hdcp.config.psp.handle, &srm_version, &srm_size);
|
||||
|
||||
if (!srm)
|
||||
return -EINVAL;
|
||||
if (!srm) {
|
||||
ret = -EINVAL;
|
||||
goto ret;
|
||||
}
|
||||
|
||||
if (pos >= srm_size)
|
||||
ret = 0;
|
||||
|
@ -227,6 +227,42 @@ int drm_fb_helper_debug_leave(struct fb_info *info)
|
||||
}
|
||||
EXPORT_SYMBOL(drm_fb_helper_debug_leave);
|
||||
|
||||
static int
|
||||
__drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper,
|
||||
bool force)
|
||||
{
|
||||
bool do_delayed;
|
||||
int ret;
|
||||
|
||||
if (!drm_fbdev_emulation || !fb_helper)
|
||||
return -ENODEV;
|
||||
|
||||
if (READ_ONCE(fb_helper->deferred_setup))
|
||||
return 0;
|
||||
|
||||
mutex_lock(&fb_helper->lock);
|
||||
if (force) {
|
||||
/*
|
||||
* Yes this is the _locked version which expects the master lock
|
||||
* to be held. But for forced restores we're intentionally
|
||||
* racing here, see drm_fb_helper_set_par().
|
||||
*/
|
||||
ret = drm_client_modeset_commit_locked(&fb_helper->client);
|
||||
} else {
|
||||
ret = drm_client_modeset_commit(&fb_helper->client);
|
||||
}
|
||||
|
||||
do_delayed = fb_helper->delayed_hotplug;
|
||||
if (do_delayed)
|
||||
fb_helper->delayed_hotplug = false;
|
||||
mutex_unlock(&fb_helper->lock);
|
||||
|
||||
if (do_delayed)
|
||||
drm_fb_helper_hotplug_event(fb_helper);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* drm_fb_helper_restore_fbdev_mode_unlocked - restore fbdev configuration
|
||||
* @fb_helper: driver-allocated fbdev helper, can be NULL
|
||||
@ -240,27 +276,7 @@ EXPORT_SYMBOL(drm_fb_helper_debug_leave);
|
||||
*/
|
||||
int drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper)
|
||||
{
|
||||
bool do_delayed;
|
||||
int ret;
|
||||
|
||||
if (!drm_fbdev_emulation || !fb_helper)
|
||||
return -ENODEV;
|
||||
|
||||
if (READ_ONCE(fb_helper->deferred_setup))
|
||||
return 0;
|
||||
|
||||
mutex_lock(&fb_helper->lock);
|
||||
ret = drm_client_modeset_commit(&fb_helper->client);
|
||||
|
||||
do_delayed = fb_helper->delayed_hotplug;
|
||||
if (do_delayed)
|
||||
fb_helper->delayed_hotplug = false;
|
||||
mutex_unlock(&fb_helper->lock);
|
||||
|
||||
if (do_delayed)
|
||||
drm_fb_helper_hotplug_event(fb_helper);
|
||||
|
||||
return ret;
|
||||
return __drm_fb_helper_restore_fbdev_mode_unlocked(fb_helper, false);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_fb_helper_restore_fbdev_mode_unlocked);
|
||||
|
||||
@ -1318,6 +1334,7 @@ int drm_fb_helper_set_par(struct fb_info *info)
|
||||
{
|
||||
struct drm_fb_helper *fb_helper = info->par;
|
||||
struct fb_var_screeninfo *var = &info->var;
|
||||
bool force;
|
||||
|
||||
if (oops_in_progress)
|
||||
return -EBUSY;
|
||||
@ -1327,7 +1344,25 @@ int drm_fb_helper_set_par(struct fb_info *info)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
drm_fb_helper_restore_fbdev_mode_unlocked(fb_helper);
|
||||
/*
|
||||
* Normally we want to make sure that a kms master takes precedence over
|
||||
* fbdev, to avoid fbdev flickering and occasionally stealing the
|
||||
* display status. But Xorg first sets the vt back to text mode using
|
||||
* the KDSET IOCTL with KD_TEXT, and only after that drops the master
|
||||
* status when exiting.
|
||||
*
|
||||
* In the past this was caught by drm_fb_helper_lastclose(), but on
|
||||
* modern systems where logind always keeps a drm fd open to orchestrate
|
||||
* the vt switching, this doesn't work.
|
||||
*
|
||||
* To not break the userspace ABI we have this special case here, which
|
||||
* is only used for the above case. Everything else uses the normal
|
||||
* commit function, which ensures that we never steal the display from
|
||||
* an active drm master.
|
||||
*/
|
||||
force = var->activate & FB_ACTIVATE_KD_TEXT;
|
||||
|
||||
__drm_fb_helper_restore_fbdev_mode_unlocked(fb_helper, force);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -30,12 +30,6 @@ struct drm_dmi_panel_orientation_data {
|
||||
int orientation;
|
||||
};
|
||||
|
||||
static const struct drm_dmi_panel_orientation_data acer_s1003 = {
|
||||
.width = 800,
|
||||
.height = 1280,
|
||||
.orientation = DRM_MODE_PANEL_ORIENTATION_RIGHT_UP,
|
||||
};
|
||||
|
||||
static const struct drm_dmi_panel_orientation_data asus_t100ha = {
|
||||
.width = 800,
|
||||
.height = 1280,
|
||||
@ -114,13 +108,19 @@ static const struct dmi_system_id orientation_data[] = {
|
||||
DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Acer"),
|
||||
DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "One S1003"),
|
||||
},
|
||||
.driver_data = (void *)&acer_s1003,
|
||||
.driver_data = (void *)&lcd800x1280_rightside_up,
|
||||
}, { /* Asus T100HA */
|
||||
.matches = {
|
||||
DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T100HAN"),
|
||||
},
|
||||
.driver_data = (void *)&asus_t100ha,
|
||||
}, { /* Asus T101HA */
|
||||
.matches = {
|
||||
DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T101HA"),
|
||||
},
|
||||
.driver_data = (void *)&lcd800x1280_rightside_up,
|
||||
}, { /* GPD MicroPC (generic strings, also match on bios date) */
|
||||
.matches = {
|
||||
DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Default string"),
|
||||
|
@ -812,7 +812,7 @@ static void mcde_display_enable(struct drm_simple_display_pipe *pipe,
|
||||
struct drm_crtc *crtc = &pipe->crtc;
|
||||
struct drm_plane *plane = &pipe->plane;
|
||||
struct drm_device *drm = crtc->dev;
|
||||
struct mcde *mcde = drm->dev_private;
|
||||
struct mcde *mcde = to_mcde(drm);
|
||||
const struct drm_display_mode *mode = &cstate->mode;
|
||||
struct drm_framebuffer *fb = plane->state->fb;
|
||||
u32 format = fb->format->format;
|
||||
|
@ -209,7 +209,6 @@ static int mcde_modeset_init(struct drm_device *drm)
|
||||
|
||||
drm_mode_config_reset(drm);
|
||||
drm_kms_helper_poll_init(drm);
|
||||
drm_fbdev_generic_setup(drm, 32);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -264,6 +263,8 @@ static int mcde_drm_bind(struct device *dev)
|
||||
if (ret < 0)
|
||||
goto unbind;
|
||||
|
||||
drm_fbdev_generic_setup(drm, 32);
|
||||
|
||||
return 0;
|
||||
|
||||
unbind:
|
||||
|
@ -2495,6 +2495,7 @@ static const struct panel_desc logicpd_type_28 = {
|
||||
.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
|
||||
.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE |
|
||||
DRM_BUS_FLAG_SYNC_DRIVE_NEGEDGE,
|
||||
.connector_type = DRM_MODE_CONNECTOR_DPI,
|
||||
};
|
||||
|
||||
static const struct panel_desc mitsubishi_aa070mc01 = {
|
||||
@ -2663,6 +2664,7 @@ static const struct panel_desc newhaven_nhd_43_480272ef_atxl = {
|
||||
.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
|
||||
.bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_DRIVE_POSEDGE |
|
||||
DRM_BUS_FLAG_SYNC_DRIVE_POSEDGE,
|
||||
.connector_type = DRM_MODE_CONNECTOR_DPI,
|
||||
};
|
||||
|
||||
static const struct display_timing nlt_nl192108ac18_02d_timing = {
|
||||
|
@ -2127,7 +2127,7 @@ static int ni_init_smc_spll_table(struct radeon_device *rdev)
|
||||
if (clk_s & ~(SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_SHIFT))
|
||||
ret = -EINVAL;
|
||||
|
||||
if (clk_s & ~(SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_SHIFT))
|
||||
if (fb_div & ~(SMC_NISLANDS_SPLL_DIV_TABLE_FBDIV_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_FBDIV_SHIFT))
|
||||
ret = -EINVAL;
|
||||
|
||||
if (clk_v & ~(SMC_NISLANDS_SPLL_DIV_TABLE_CLKV_MASK >> SMC_NISLANDS_SPLL_DIV_TABLE_CLKV_SHIFT))
|
||||
|
@ -31,6 +31,7 @@ config DRM_RCAR_DW_HDMI
|
||||
config DRM_RCAR_LVDS
|
||||
tristate "R-Car DU LVDS Encoder Support"
|
||||
depends on DRM && DRM_BRIDGE && OF
|
||||
select DRM_KMS_HELPER
|
||||
select DRM_PANEL
|
||||
select OF_FLATTREE
|
||||
select OF_OVERLAY
|
||||
|
@ -363,6 +363,19 @@ static int sun8i_mixer_bind(struct device *dev, struct device *master,
|
||||
mixer->engine.ops = &sun8i_engine_ops;
|
||||
mixer->engine.node = dev->of_node;
|
||||
|
||||
if (of_find_property(dev->of_node, "iommus", NULL)) {
|
||||
/*
|
||||
* This assume we have the same DMA constraints for
|
||||
* all our the mixers in our pipeline. This sounds
|
||||
* bad, but it has always been the case for us, and
|
||||
* DRM doesn't do per-device allocation either, so we
|
||||
* would need to fix DRM first...
|
||||
*/
|
||||
ret = of_dma_configure(drm->dev, dev->of_node, true);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* While this function can fail, we shouldn't do anything
|
||||
* if this happens. Some early DE2 DT entries don't provide
|
||||
|
@ -957,6 +957,7 @@ static struct drm_plane *tegra_dc_cursor_plane_create(struct drm_device *drm,
|
||||
}
|
||||
|
||||
drm_plane_helper_add(&plane->base, &tegra_cursor_plane_helper_funcs);
|
||||
drm_plane_create_zpos_immutable_property(&plane->base, 255);
|
||||
|
||||
return &plane->base;
|
||||
}
|
||||
|
@ -149,7 +149,9 @@ int tegra_display_hub_prepare(struct tegra_display_hub *hub)
|
||||
for (i = 0; i < hub->soc->num_wgrps; i++) {
|
||||
struct tegra_windowgroup *wgrp = &hub->wgrps[i];
|
||||
|
||||
tegra_windowgroup_enable(wgrp);
|
||||
/* Skip orphaned window group whose parent DC is disabled */
|
||||
if (wgrp->parent)
|
||||
tegra_windowgroup_enable(wgrp);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -166,7 +168,9 @@ void tegra_display_hub_cleanup(struct tegra_display_hub *hub)
|
||||
for (i = 0; i < hub->soc->num_wgrps; i++) {
|
||||
struct tegra_windowgroup *wgrp = &hub->wgrps[i];
|
||||
|
||||
tegra_windowgroup_disable(wgrp);
|
||||
/* Skip orphaned window group whose parent DC is disabled */
|
||||
if (wgrp->parent)
|
||||
tegra_windowgroup_disable(wgrp);
|
||||
}
|
||||
}
|
||||
|
||||
@ -944,6 +948,15 @@ static int tegra_display_hub_probe(struct platform_device *pdev)
|
||||
dev_err(&pdev->dev, "failed to register host1x client: %d\n",
|
||||
err);
|
||||
|
||||
err = devm_of_platform_populate(&pdev->dev);
|
||||
if (err < 0)
|
||||
goto unregister;
|
||||
|
||||
return err;
|
||||
|
||||
unregister:
|
||||
host1x_client_unregister(&hub->client);
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -883,8 +883,10 @@ static int ttm_bo_add_move_fence(struct ttm_buffer_object *bo,
|
||||
if (!fence)
|
||||
return 0;
|
||||
|
||||
if (no_wait_gpu)
|
||||
if (no_wait_gpu) {
|
||||
dma_fence_put(fence);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
dma_resv_add_shared_fence(bo->base.resv, fence);
|
||||
|
||||
|
@ -300,8 +300,10 @@ vm_fault_t ttm_bo_vm_fault_reserved(struct vm_fault *vmf,
|
||||
break;
|
||||
case -EBUSY:
|
||||
case -ERESTARTSYS:
|
||||
dma_fence_put(moving);
|
||||
return VM_FAULT_NOPAGE;
|
||||
default:
|
||||
dma_fence_put(moving);
|
||||
return VM_FAULT_SIGBUS;
|
||||
}
|
||||
|
||||
|
@ -686,8 +686,17 @@ EXPORT_SYMBOL(host1x_driver_register_full);
|
||||
*/
|
||||
void host1x_driver_unregister(struct host1x_driver *driver)
|
||||
{
|
||||
struct host1x *host1x;
|
||||
|
||||
driver_unregister(&driver->driver);
|
||||
|
||||
mutex_lock(&devices_lock);
|
||||
|
||||
list_for_each_entry(host1x, &devices, list)
|
||||
host1x_detach_driver(host1x, driver);
|
||||
|
||||
mutex_unlock(&devices_lock);
|
||||
|
||||
mutex_lock(&drivers_lock);
|
||||
list_del_init(&driver->list);
|
||||
mutex_unlock(&drivers_lock);
|
||||
|
@ -468,11 +468,18 @@ static int host1x_probe(struct platform_device *pdev)
|
||||
|
||||
err = host1x_register(host);
|
||||
if (err < 0)
|
||||
goto deinit_intr;
|
||||
goto deinit_debugfs;
|
||||
|
||||
err = devm_of_platform_populate(&pdev->dev);
|
||||
if (err < 0)
|
||||
goto unregister;
|
||||
|
||||
return 0;
|
||||
|
||||
deinit_intr:
|
||||
unregister:
|
||||
host1x_unregister(host);
|
||||
deinit_debugfs:
|
||||
host1x_debug_deinit(host);
|
||||
host1x_intr_deinit(host);
|
||||
deinit_syncpt:
|
||||
host1x_syncpt_deinit(host);
|
||||
|
@ -2402,7 +2402,8 @@ static int fbcon_blank(struct vc_data *vc, int blank, int mode_switch)
|
||||
ops->graphics = 1;
|
||||
|
||||
if (!blank) {
|
||||
var.activate = FB_ACTIVATE_NOW | FB_ACTIVATE_FORCE;
|
||||
var.activate = FB_ACTIVATE_NOW | FB_ACTIVATE_FORCE |
|
||||
FB_ACTIVATE_KD_TEXT;
|
||||
fb_set_var(info, &var);
|
||||
ops->graphics = 0;
|
||||
ops->var = info->var;
|
||||
|
@ -1836,7 +1836,7 @@ static int uvesafb_setup(char *options)
|
||||
else if (!strcmp(this_opt, "noedid"))
|
||||
noedid = true;
|
||||
else if (!strcmp(this_opt, "noblank"))
|
||||
blank = true;
|
||||
blank = false;
|
||||
else if (!strncmp(this_opt, "vtotal:", 7))
|
||||
vram_total = simple_strtoul(this_opt + 7, NULL, 0);
|
||||
else if (!strncmp(this_opt, "vremap:", 7))
|
||||
|
@ -48,6 +48,9 @@ struct host1x_client_ops {
|
||||
* @channel: host1x channel associated with this client
|
||||
* @syncpts: array of syncpoints requested for this client
|
||||
* @num_syncpts: number of syncpoints requested for this client
|
||||
* @parent: pointer to parent structure
|
||||
* @usecount: reference count for this structure
|
||||
* @lock: mutex for mutually exclusive concurrency
|
||||
*/
|
||||
struct host1x_client {
|
||||
struct list_head list;
|
||||
|
@ -205,6 +205,7 @@ struct fb_bitfield {
|
||||
#define FB_ACTIVATE_ALL 64 /* change all VCs on this fb */
|
||||
#define FB_ACTIVATE_FORCE 128 /* force apply even when no change*/
|
||||
#define FB_ACTIVATE_INV_MODE 256 /* invalidate videomode */
|
||||
#define FB_ACTIVATE_KD_TEXT 512 /* for KDSET vt ioctl */
|
||||
|
||||
#define FB_ACCELF_TEXT 1 /* (OBSOLETE) see fb_info.flags and vc_mode */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user