forked from luck/tmp_suning_uos_patched
drm-misc-next for 4.20:
UAPI Changes: - None Cross-subsystem Changes: - None Core Changes: - Allow drivers to disable features with per-device granularity (Ville) - Use EOPNOTSUPP when iface/feature is unsupported instead of EINVAL/errno soup (Chris) - Simplify M/N DP quirk by using constant N to limit size of M/N (Shawn) - add quirk for LG LP140WF6-SPM1 eDP panel (Shawn) Driver Changes: - i915/amdgpu: Disable DRIVER_ATOMIC for older/unsupported devices (Ville) - sun4i: add support for R40 HDMI PHY (Icenowy) Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Icenowy Zheng <icenowy@aosc.io> Cc: Lee, Shawn C <shawn.c.lee@intel.com> -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEfxcpfMSgdnQMs+QqlvcN/ahKBwoFAluiqZAACgkQlvcN/ahK BwrD7gf+O9hI1+sWAKs9/D2xz5G0Ap/wTUtPZprVx+UMg833T4E3q5esSTvlKd5q QdijWWFZ3Eu7osQB5QTvCHpJ1F1Q9DScYdD5rd0WRhZBGnBd2guFziFRhleXpQH1 CTo/xjS4Y1l1wEildvZdjPaDfXE0Q+uK8kl11AIVoYQvW6V28/pwCW+mmfMfQG4D lC9Lj5iPTDGLmbT3DZcH9ZUU8CZreJVPDn+mi8XsAOGt55YlCphl5XsOabNRzpCh 5VYZbauJqrlfa3/cbVuFpTqjqR5XRlMvzgdYH2Wa+9JreiReNCDs3CVL4YnLWe0p PIfE6ZC2ucX831aZOodV7KtwtLYc/Q== =oPPq -----END PGP SIGNATURE----- Merge tag 'drm-misc-next-2018-09-19' of git://anongit.freedesktop.org/drm/drm-misc into drm-next drm-misc-next for 4.20: UAPI Changes: - None Cross-subsystem Changes: - None Core Changes: - Allow drivers to disable features with per-device granularity (Ville) - Use EOPNOTSUPP when iface/feature is unsupported instead of EINVAL/errno soup (Chris) - Simplify M/N DP quirk by using constant N to limit size of M/N (Shawn) - add quirk for LG LP140WF6-SPM1 eDP panel (Shawn) Driver Changes: - i915/amdgpu: Disable DRIVER_ATOMIC for older/unsupported devices (Ville) - sun4i: add support for R40 HDMI PHY (Icenowy) Cc: Ville Syrjälä <ville.syrjala@linux.intel.com> Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Icenowy Zheng <icenowy@aosc.io> Cc: Lee, Shawn C <shawn.c.lee@intel.com> Signed-off-by: Dave Airlie <airlied@redhat.com> From: Sean Paul <sean@poorly.run> Link: https://patchwork.freedesktop.org/patch/msgid/20180919200218.GA186644@art_vandelay
This commit is contained in:
commit
795241040a
|
@ -107,6 +107,7 @@ Required properties:
|
|||
- compatible: value must be one of:
|
||||
* allwinner,sun8i-a83t-hdmi-phy
|
||||
* allwinner,sun8i-h3-hdmi-phy
|
||||
* allwinner,sun8i-r40-hdmi-phy
|
||||
* allwinner,sun50i-a64-hdmi-phy
|
||||
- reg: base address and size of memory-mapped region
|
||||
- clocks: phandles to the clocks feeding the HDMI PHY
|
||||
|
@ -116,9 +117,9 @@ Required properties:
|
|||
- resets: phandle to the reset controller driving the PHY
|
||||
- reset-names: must be "phy"
|
||||
|
||||
H3 and A64 HDMI PHY require additional clocks:
|
||||
H3, A64 and R40 HDMI PHY require additional clocks:
|
||||
- pll-0: parent of phy clock
|
||||
- pll-1: second possible phy clock parent (A64 only)
|
||||
- pll-1: second possible phy clock parent (A64/R40 only)
|
||||
|
||||
TV Encoder
|
||||
----------
|
||||
|
|
|
@ -61,8 +61,10 @@ static struct sg_table *map_udmabuf(struct dma_buf_attachment *at,
|
|||
GFP_KERNEL);
|
||||
if (ret < 0)
|
||||
goto err;
|
||||
if (!dma_map_sg(at->dev, sg->sgl, sg->nents, direction))
|
||||
if (!dma_map_sg(at->dev, sg->sgl, sg->nents, direction)) {
|
||||
ret = -EINVAL;
|
||||
goto err;
|
||||
}
|
||||
return sg;
|
||||
|
||||
err:
|
||||
|
|
|
@ -816,17 +816,13 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* warn the user if they mix atomic and non-atomic capable GPUs */
|
||||
if ((kms_driver.driver_features & DRIVER_ATOMIC) && !supports_atomic)
|
||||
DRM_ERROR("Mixing atomic and non-atomic capable GPUs!\n");
|
||||
/* support atomic early so the atomic debugfs stuff gets created */
|
||||
if (supports_atomic)
|
||||
kms_driver.driver_features |= DRIVER_ATOMIC;
|
||||
|
||||
dev = drm_dev_alloc(&kms_driver, &pdev->dev);
|
||||
if (IS_ERR(dev))
|
||||
return PTR_ERR(dev);
|
||||
|
||||
if (!supports_atomic)
|
||||
dev->driver_features &= ~DRIVER_ATOMIC;
|
||||
|
||||
ret = pci_enable_device(pdev);
|
||||
if (ret)
|
||||
goto err_free;
|
||||
|
@ -1078,7 +1074,7 @@ amdgpu_get_crtc_scanout_position(struct drm_device *dev, unsigned int pipe,
|
|||
|
||||
static struct drm_driver kms_driver = {
|
||||
.driver_features =
|
||||
DRIVER_USE_AGP |
|
||||
DRIVER_USE_AGP | DRIVER_ATOMIC |
|
||||
DRIVER_HAVE_IRQ | DRIVER_IRQ_SHARED | DRIVER_GEM |
|
||||
DRIVER_PRIME | DRIVER_RENDER | DRIVER_MODESET | DRIVER_SYNCOBJ,
|
||||
.load = amdgpu_driver_load_kms,
|
||||
|
|
|
@ -1251,7 +1251,7 @@ int drm_mode_atomic_ioctl(struct drm_device *dev,
|
|||
|
||||
/* disallow for drivers not supporting atomic: */
|
||||
if (!drm_core_check_feature(dev, DRIVER_ATOMIC))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/* disallow for userspace that has not enabled atomic cap (even
|
||||
* though this may be a bit overkill, since legacy userspace
|
||||
|
|
|
@ -398,7 +398,7 @@ int drm_legacy_addmap_ioctl(struct drm_device *dev, void *data,
|
|||
|
||||
if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
|
||||
!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
err = drm_addmap_core(dev, map->offset, map->size, map->type,
|
||||
map->flags, &maplist);
|
||||
|
@ -444,7 +444,7 @@ int drm_legacy_getmap_ioctl(struct drm_device *dev, void *data,
|
|||
|
||||
if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
|
||||
!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
idx = map->offset;
|
||||
if (idx < 0)
|
||||
|
@ -596,7 +596,7 @@ int drm_legacy_rmmap_ioctl(struct drm_device *dev, void *data,
|
|||
|
||||
if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
|
||||
!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
list_for_each_entry(r_list, &dev->maplist, head) {
|
||||
|
@ -860,7 +860,7 @@ int drm_legacy_addbufs_pci(struct drm_device *dev,
|
|||
struct drm_buf **temp_buflist;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_PCI_DMA))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!dma)
|
||||
return -EINVAL;
|
||||
|
@ -1064,7 +1064,7 @@ static int drm_legacy_addbufs_sg(struct drm_device *dev,
|
|||
struct drm_buf **temp_buflist;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_SG))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!dma)
|
||||
return -EINVAL;
|
||||
|
@ -1221,10 +1221,10 @@ int drm_legacy_addbufs(struct drm_device *dev, void *data,
|
|||
int ret;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
#if IS_ENABLED(CONFIG_AGP)
|
||||
if (request->flags & _DRM_AGP_BUFFER)
|
||||
|
@ -1267,10 +1267,10 @@ int __drm_legacy_infobufs(struct drm_device *dev,
|
|||
int count;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!dma)
|
||||
return -EINVAL;
|
||||
|
@ -1352,10 +1352,10 @@ int drm_legacy_markbufs(struct drm_device *dev, void *data,
|
|||
struct drm_buf_entry *entry;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!dma)
|
||||
return -EINVAL;
|
||||
|
@ -1400,10 +1400,10 @@ int drm_legacy_freebufs(struct drm_device *dev, void *data,
|
|||
struct drm_buf *buf;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!dma)
|
||||
return -EINVAL;
|
||||
|
@ -1455,10 +1455,10 @@ int __drm_legacy_mapbufs(struct drm_device *dev, void *data, int *p,
|
|||
int i;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!dma)
|
||||
return -EINVAL;
|
||||
|
@ -1545,7 +1545,7 @@ int drm_legacy_dma_ioctl(struct drm_device *dev, void *data,
|
|||
struct drm_file *file_priv)
|
||||
{
|
||||
if (!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (dev->driver->dma_ioctl)
|
||||
return dev->driver->dma_ioctl(dev, data, file_priv);
|
||||
|
|
|
@ -82,7 +82,7 @@ int drm_client_new(struct drm_device *dev, struct drm_client_dev *client,
|
|||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET) ||
|
||||
!dev->driver->dumb_create || !dev->driver->gem_prime_vmap)
|
||||
return -ENOTSUPP;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (funcs && !try_module_get(funcs->owner))
|
||||
return -ENODEV;
|
||||
|
|
|
@ -242,7 +242,7 @@ int drm_mode_gamma_set_ioctl(struct drm_device *dev,
|
|||
int ret = 0;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
crtc = drm_crtc_find(dev, file_priv, crtc_lut->crtc_id);
|
||||
if (!crtc)
|
||||
|
@ -320,7 +320,7 @@ int drm_mode_gamma_get_ioctl(struct drm_device *dev,
|
|||
int ret = 0;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
crtc = drm_crtc_find(dev, file_priv, crtc_lut->crtc_id);
|
||||
if (!crtc)
|
||||
|
|
|
@ -1725,7 +1725,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
|
|||
LIST_HEAD(export_list);
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
memset(&u_mode, 0, sizeof(struct drm_mode_modeinfo));
|
||||
|
||||
|
|
|
@ -178,7 +178,7 @@ int drm_legacy_getsareactx(struct drm_device *dev, void *data,
|
|||
|
||||
if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
|
||||
!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
|
||||
|
@ -226,7 +226,7 @@ int drm_legacy_setsareactx(struct drm_device *dev, void *data,
|
|||
|
||||
if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
|
||||
!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
list_for_each_entry(r_list, &dev->maplist, head) {
|
||||
|
@ -330,7 +330,7 @@ int drm_legacy_resctx(struct drm_device *dev, void *data,
|
|||
|
||||
if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
|
||||
!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (res->count >= DRM_RESERVED_CONTEXTS) {
|
||||
memset(&ctx, 0, sizeof(ctx));
|
||||
|
@ -364,7 +364,7 @@ int drm_legacy_addctx(struct drm_device *dev, void *data,
|
|||
|
||||
if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
|
||||
!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
ctx->handle = drm_legacy_ctxbitmap_next(dev);
|
||||
if (ctx->handle == DRM_KERNEL_CONTEXT) {
|
||||
|
@ -411,7 +411,7 @@ int drm_legacy_getctx(struct drm_device *dev, void *data,
|
|||
|
||||
if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
|
||||
!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/* This is 0, because we don't handle any context flags */
|
||||
ctx->flags = 0;
|
||||
|
@ -437,7 +437,7 @@ int drm_legacy_switchctx(struct drm_device *dev, void *data,
|
|||
|
||||
if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
|
||||
!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
DRM_DEBUG("%d\n", ctx->handle);
|
||||
return drm_context_switch(dev, dev->last_context, ctx->handle);
|
||||
|
@ -461,7 +461,7 @@ int drm_legacy_newctx(struct drm_device *dev, void *data,
|
|||
|
||||
if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
|
||||
!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
DRM_DEBUG("%d\n", ctx->handle);
|
||||
drm_context_switch_complete(dev, file_priv, ctx->handle);
|
||||
|
@ -487,7 +487,7 @@ int drm_legacy_rmctx(struct drm_device *dev, void *data,
|
|||
|
||||
if (!drm_core_check_feature(dev, DRIVER_KMS_LEGACY_CONTEXT) &&
|
||||
!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
DRM_DEBUG("%d\n", ctx->handle);
|
||||
if (ctx->handle != DRM_KERNEL_CONTEXT) {
|
||||
|
|
|
@ -405,7 +405,7 @@ int drm_mode_getcrtc(struct drm_device *dev,
|
|||
struct drm_plane *plane;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
crtc = drm_crtc_find(dev, file_priv, crtc_resp->crtc_id);
|
||||
if (!crtc)
|
||||
|
@ -580,7 +580,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
|
|||
int i;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/*
|
||||
* Universal plane src offsets are only 16.16, prevent havoc for
|
||||
|
|
|
@ -1257,15 +1257,22 @@ EXPORT_SYMBOL(drm_dp_stop_crc);
|
|||
|
||||
struct dpcd_quirk {
|
||||
u8 oui[3];
|
||||
u8 device_id[6];
|
||||
bool is_branch;
|
||||
u32 quirks;
|
||||
};
|
||||
|
||||
#define OUI(first, second, third) { (first), (second), (third) }
|
||||
#define DEVICE_ID(first, second, third, fourth, fifth, sixth) \
|
||||
{ (first), (second), (third), (fourth), (fifth), (sixth) }
|
||||
|
||||
#define DEVICE_ID_ANY DEVICE_ID(0, 0, 0, 0, 0, 0)
|
||||
|
||||
static const struct dpcd_quirk dpcd_quirk_list[] = {
|
||||
/* Analogix 7737 needs reduced M and N at HBR2 link rates */
|
||||
{ OUI(0x00, 0x22, 0xb9), true, BIT(DP_DPCD_QUIRK_LIMITED_M_N) },
|
||||
{ OUI(0x00, 0x22, 0xb9), DEVICE_ID_ANY, true, BIT(DP_DPCD_QUIRK_CONSTANT_N) },
|
||||
/* LG LP140WF6-SPM1 eDP panel */
|
||||
{ OUI(0x00, 0x22, 0xb9), DEVICE_ID('s', 'i', 'v', 'a', 'r', 'T'), false, BIT(DP_DPCD_QUIRK_CONSTANT_N) },
|
||||
};
|
||||
|
||||
#undef OUI
|
||||
|
@ -1284,6 +1291,7 @@ drm_dp_get_quirks(const struct drm_dp_dpcd_ident *ident, bool is_branch)
|
|||
const struct dpcd_quirk *quirk;
|
||||
u32 quirks = 0;
|
||||
int i;
|
||||
u8 any_device[] = DEVICE_ID_ANY;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(dpcd_quirk_list); i++) {
|
||||
quirk = &dpcd_quirk_list[i];
|
||||
|
@ -1294,12 +1302,19 @@ drm_dp_get_quirks(const struct drm_dp_dpcd_ident *ident, bool is_branch)
|
|||
if (memcmp(quirk->oui, ident->oui, sizeof(ident->oui)) != 0)
|
||||
continue;
|
||||
|
||||
if (memcmp(quirk->device_id, any_device, sizeof(any_device)) != 0 &&
|
||||
memcmp(quirk->device_id, ident->device_id, sizeof(ident->device_id)) != 0)
|
||||
continue;
|
||||
|
||||
quirks |= quirk->quirks;
|
||||
}
|
||||
|
||||
return quirks;
|
||||
}
|
||||
|
||||
#undef DEVICE_ID_ANY
|
||||
#undef DEVICE_ID
|
||||
|
||||
/**
|
||||
* drm_dp_read_desc - read sink/branch descriptor from DPCD
|
||||
* @aux: DisplayPort AUX channel
|
||||
|
|
|
@ -506,6 +506,9 @@ int drm_dev_init(struct drm_device *dev,
|
|||
dev->dev = parent;
|
||||
dev->driver = driver;
|
||||
|
||||
/* no per-device feature limits by default */
|
||||
dev->driver_features = ~0u;
|
||||
|
||||
INIT_LIST_HEAD(&dev->filelist);
|
||||
INIT_LIST_HEAD(&dev->filelist_internal);
|
||||
INIT_LIST_HEAD(&dev->clientlist);
|
||||
|
|
|
@ -222,7 +222,7 @@ int drm_mode_getencoder(struct drm_device *dev, void *data,
|
|||
struct drm_crtc *crtc;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
encoder = drm_encoder_find(dev, file_priv, enc_resp->encoder_id);
|
||||
if (!encoder)
|
||||
|
|
|
@ -113,6 +113,9 @@ int drm_mode_addfb(struct drm_device *dev, struct drm_mode_fb_cmd *or,
|
|||
struct drm_mode_fb_cmd2 r = {};
|
||||
int ret;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
r.pixel_format = drm_mode_legacy_fb_format(or->bpp, or->depth);
|
||||
if (r.pixel_format == DRM_FORMAT_INVALID) {
|
||||
DRM_DEBUG("bad {bpp:%d, depth:%d}\n", or->bpp, or->depth);
|
||||
|
@ -352,7 +355,7 @@ int drm_mode_addfb2(struct drm_device *dev,
|
|||
struct drm_framebuffer *fb;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
fb = drm_internal_framebuffer_create(dev, r, file_priv);
|
||||
if (IS_ERR(fb))
|
||||
|
@ -387,7 +390,7 @@ int drm_mode_addfb2_ioctl(struct drm_device *dev,
|
|||
* ADDFB.
|
||||
*/
|
||||
DRM_DEBUG_KMS("addfb2 broken on bigendian");
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
#endif
|
||||
return drm_mode_addfb2(dev, data, file_priv);
|
||||
|
@ -432,7 +435,7 @@ int drm_mode_rmfb(struct drm_device *dev, u32 fb_id,
|
|||
int found = 0;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
fb = drm_framebuffer_lookup(dev, file_priv, fb_id);
|
||||
if (!fb)
|
||||
|
@ -509,7 +512,7 @@ int drm_mode_getfb(struct drm_device *dev,
|
|||
int ret;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
fb = drm_framebuffer_lookup(dev, file_priv, r->fb_id);
|
||||
if (!fb)
|
||||
|
@ -582,7 +585,7 @@ int drm_mode_dirtyfb_ioctl(struct drm_device *dev,
|
|||
int ret;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
fb = drm_framebuffer_lookup(dev, file_priv, r->fb_id);
|
||||
if (!fb)
|
||||
|
|
|
@ -667,7 +667,7 @@ drm_gem_close_ioctl(struct drm_device *dev, void *data,
|
|||
int ret;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_GEM))
|
||||
return -ENODEV;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
ret = drm_gem_handle_delete(file_priv, args->handle);
|
||||
|
||||
|
@ -694,7 +694,7 @@ drm_gem_flink_ioctl(struct drm_device *dev, void *data,
|
|||
int ret;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_GEM))
|
||||
return -ENODEV;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
obj = drm_gem_object_lookup(file_priv, args->handle);
|
||||
if (obj == NULL)
|
||||
|
@ -745,7 +745,7 @@ drm_gem_open_ioctl(struct drm_device *dev, void *data,
|
|||
u32 handle;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_GEM))
|
||||
return -ENODEV;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
mutex_lock(&dev->object_name_lock);
|
||||
obj = idr_find(&dev->object_name_idr, (int) args->name);
|
||||
|
|
|
@ -248,7 +248,7 @@ static int drm_getcap(struct drm_device *dev, void *data, struct drm_file *file_
|
|||
|
||||
/* Other caps only work with KMS drivers */
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -ENOTSUPP;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
switch (req->capability) {
|
||||
case DRM_CAP_DUMB_BUFFER:
|
||||
|
@ -319,7 +319,7 @@ drm_setclientcap(struct drm_device *dev, void *data, struct drm_file *file_priv)
|
|||
break;
|
||||
case DRM_CLIENT_CAP_ATOMIC:
|
||||
if (!drm_core_check_feature(dev, DRIVER_ATOMIC))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
if (req->value > 1)
|
||||
return -EINVAL;
|
||||
file_priv->atomic = req->value;
|
||||
|
|
|
@ -104,7 +104,7 @@ int drm_irq_install(struct drm_device *dev, int irq)
|
|||
unsigned long sh_flags = 0;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (irq == 0)
|
||||
return -EINVAL;
|
||||
|
@ -175,7 +175,7 @@ int drm_irq_uninstall(struct drm_device *dev)
|
|||
int i;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
irq_enabled = dev->irq_enabled;
|
||||
dev->irq_enabled = false;
|
||||
|
|
|
@ -506,7 +506,7 @@ int drm_mode_create_lease_ioctl(struct drm_device *dev,
|
|||
|
||||
/* Can't lease without MODESET */
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/* Do not allow sub-leases */
|
||||
if (lessor->lessor)
|
||||
|
@ -615,7 +615,7 @@ int drm_mode_list_lessees_ioctl(struct drm_device *dev,
|
|||
|
||||
/* Can't lease without MODESET */
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
DRM_DEBUG_LEASE("List lessees for %d\n", lessor->lessee_id);
|
||||
|
||||
|
@ -671,7 +671,7 @@ int drm_mode_get_lease_ioctl(struct drm_device *dev,
|
|||
|
||||
/* Can't lease without MODESET */
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
DRM_DEBUG_LEASE("get lease for %d\n", lessee->lessee_id);
|
||||
|
||||
|
@ -726,7 +726,7 @@ int drm_mode_revoke_lease_ioctl(struct drm_device *dev,
|
|||
|
||||
/* Can't lease without MODESET */
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
mutex_lock(&dev->mode_config.idr_mutex);
|
||||
|
||||
|
|
|
@ -166,7 +166,7 @@ int drm_legacy_lock(struct drm_device *dev, void *data,
|
|||
int ret = 0;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
++file_priv->lock_count;
|
||||
|
||||
|
@ -256,7 +256,7 @@ int drm_legacy_unlock(struct drm_device *dev, void *data, struct drm_file *file_
|
|||
struct drm_master *master = file_priv->master;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (lock->context == DRM_KERNEL_CONTEXT) {
|
||||
DRM_ERROR("Process %d using kernel context %d\n",
|
||||
|
|
|
@ -97,8 +97,7 @@ int drm_mode_getresources(struct drm_device *dev, void *data,
|
|||
struct drm_connector_list_iter conn_iter;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
mutex_lock(&file_priv->fbs_lock);
|
||||
count = 0;
|
||||
|
|
|
@ -381,7 +381,7 @@ int drm_mode_obj_get_properties_ioctl(struct drm_device *dev, void *data,
|
|||
int ret = 0;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
drm_modeset_lock_all(dev);
|
||||
|
||||
|
@ -504,7 +504,7 @@ int drm_mode_obj_set_property_ioctl(struct drm_device *dev, void *data,
|
|||
int ret = -EINVAL;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
arg_obj = drm_mode_object_find(dev, file_priv, arg->obj_id, arg->obj_type);
|
||||
if (!arg_obj)
|
||||
|
|
|
@ -182,14 +182,14 @@ int drm_irq_by_busid(struct drm_device *dev, void *data,
|
|||
struct drm_irq_busid *p = data;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/* UMS was only ever support on PCI devices. */
|
||||
if (WARN_ON(!dev->pdev))
|
||||
return -EINVAL;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
return drm_pci_irq_by_busid(dev, p);
|
||||
}
|
||||
|
|
|
@ -477,7 +477,7 @@ int drm_mode_getplane_res(struct drm_device *dev, void *data,
|
|||
int count = 0;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
plane_ptr = u64_to_user_ptr(plane_resp->plane_id_ptr);
|
||||
|
||||
|
@ -514,7 +514,7 @@ int drm_mode_getplane(struct drm_device *dev, void *data,
|
|||
uint32_t __user *format_ptr;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
plane = drm_plane_find(dev, file_priv, plane_resp->plane_id);
|
||||
if (!plane)
|
||||
|
@ -781,7 +781,7 @@ int drm_mode_setplane(struct drm_device *dev, void *data,
|
|||
int ret;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/*
|
||||
* First, find the plane, crtc, and fb objects. If not available,
|
||||
|
@ -919,7 +919,7 @@ static int drm_mode_cursor_common(struct drm_device *dev,
|
|||
int ret = 0;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!req->flags || (~DRM_MODE_CURSOR_FLAGS & req->flags))
|
||||
return -EINVAL;
|
||||
|
@ -1023,7 +1023,7 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev,
|
|||
int ret = -EINVAL;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (page_flip->flags & ~DRM_MODE_PAGE_FLIP_FLAGS)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -844,7 +844,7 @@ int drm_prime_handle_to_fd_ioctl(struct drm_device *dev, void *data,
|
|||
struct drm_prime_handle *args = data;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_PRIME))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!dev->driver->prime_handle_to_fd)
|
||||
return -ENOSYS;
|
||||
|
@ -863,7 +863,7 @@ int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data,
|
|||
struct drm_prime_handle *args = data;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_PRIME))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!dev->driver->prime_fd_to_handle)
|
||||
return -ENOSYS;
|
||||
|
|
|
@ -464,7 +464,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
|
|||
uint64_t __user *values_ptr;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
property = drm_property_find(dev, file_priv, out_resp->prop_id);
|
||||
if (!property)
|
||||
|
@ -757,7 +757,7 @@ int drm_mode_getblob_ioctl(struct drm_device *dev,
|
|||
int ret = 0;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
blob = drm_property_lookup_blob(dev, out_resp->blob_id);
|
||||
if (!blob)
|
||||
|
@ -786,7 +786,7 @@ int drm_mode_createblob_ioctl(struct drm_device *dev,
|
|||
int ret = 0;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
blob = drm_property_create_blob(dev, out_resp->length, NULL);
|
||||
if (IS_ERR(blob))
|
||||
|
@ -823,7 +823,7 @@ int drm_mode_destroyblob_ioctl(struct drm_device *dev,
|
|||
int ret = 0;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
blob = drm_property_lookup_blob(dev, out_resp->blob_id);
|
||||
if (!blob)
|
||||
|
|
|
@ -89,10 +89,10 @@ int drm_legacy_sg_alloc(struct drm_device *dev, void *data,
|
|||
DRM_DEBUG("\n");
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_SG))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (dev->sg)
|
||||
return -EINVAL;
|
||||
|
@ -202,10 +202,10 @@ int drm_legacy_sg_free(struct drm_device *dev, void *data,
|
|||
struct drm_sg_mem *entry;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_LEGACY))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_SG))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
entry = dev->sg;
|
||||
dev->sg = NULL;
|
||||
|
|
|
@ -573,7 +573,7 @@ drm_syncobj_create_ioctl(struct drm_device *dev, void *data,
|
|||
struct drm_syncobj_create *args = data;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
|
||||
return -ENODEV;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/* no valid flags yet */
|
||||
if (args->flags & ~DRM_SYNCOBJ_CREATE_SIGNALED)
|
||||
|
@ -590,7 +590,7 @@ drm_syncobj_destroy_ioctl(struct drm_device *dev, void *data,
|
|||
struct drm_syncobj_destroy *args = data;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
|
||||
return -ENODEV;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
/* make sure padding is empty */
|
||||
if (args->pad)
|
||||
|
@ -605,7 +605,7 @@ drm_syncobj_handle_to_fd_ioctl(struct drm_device *dev, void *data,
|
|||
struct drm_syncobj_handle *args = data;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
|
||||
return -ENODEV;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (args->pad)
|
||||
return -EINVAL;
|
||||
|
@ -629,7 +629,7 @@ drm_syncobj_fd_to_handle_ioctl(struct drm_device *dev, void *data,
|
|||
struct drm_syncobj_handle *args = data;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
|
||||
return -ENODEV;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (args->pad)
|
||||
return -EINVAL;
|
||||
|
@ -921,7 +921,7 @@ drm_syncobj_wait_ioctl(struct drm_device *dev, void *data,
|
|||
int ret = 0;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
|
||||
return -ENODEV;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (args->flags & ~(DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL |
|
||||
DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT))
|
||||
|
@ -955,7 +955,7 @@ drm_syncobj_reset_ioctl(struct drm_device *dev, void *data,
|
|||
int ret;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
|
||||
return -ENODEV;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (args->pad != 0)
|
||||
return -EINVAL;
|
||||
|
@ -988,7 +988,7 @@ drm_syncobj_signal_ioctl(struct drm_device *dev, void *data,
|
|||
int ret;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
|
||||
return -ENODEV;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (args->pad != 0)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -1771,7 +1771,7 @@ int drm_crtc_get_sequence_ioctl(struct drm_device *dev, void *data,
|
|||
int ret;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!dev->irq_enabled)
|
||||
return -EINVAL;
|
||||
|
@ -1829,7 +1829,7 @@ int drm_crtc_queue_sequence_ioctl(struct drm_device *dev, void *data,
|
|||
unsigned long spin_flags;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EINVAL;
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!dev->irq_enabled)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -1384,14 +1384,14 @@ int i915_driver_load(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
struct drm_i915_private *dev_priv;
|
||||
int ret;
|
||||
|
||||
/* Enable nuclear pageflip on ILK+ */
|
||||
if (!i915_modparams.nuclear_pageflip && match_info->gen < 5)
|
||||
driver.driver_features &= ~DRIVER_ATOMIC;
|
||||
|
||||
dev_priv = i915_driver_create(pdev, ent);
|
||||
if (!dev_priv)
|
||||
return -ENOMEM;
|
||||
|
||||
/* Disable nuclear pageflip by default on pre-ILK */
|
||||
if (!i915_modparams.nuclear_pageflip && match_info->gen < 5)
|
||||
dev_priv->drm.driver_features &= ~DRIVER_ATOMIC;
|
||||
|
||||
ret = pci_enable_device(pdev);
|
||||
if (ret)
|
||||
goto out_fini;
|
||||
|
|
|
@ -6685,22 +6685,20 @@ intel_reduce_m_n_ratio(uint32_t *num, uint32_t *den)
|
|||
|
||||
static void compute_m_n(unsigned int m, unsigned int n,
|
||||
uint32_t *ret_m, uint32_t *ret_n,
|
||||
bool reduce_m_n)
|
||||
bool constant_n)
|
||||
{
|
||||
/*
|
||||
* Reduce M/N as much as possible without loss in precision. Several DP
|
||||
* dongles in particular seem to be fussy about too large *link* M/N
|
||||
* values. The passed in values are more likely to have the least
|
||||
* significant bits zero than M after rounding below, so do this first.
|
||||
* Several DP dongles in particular seem to be fussy about
|
||||
* too large link M/N values. Give N value as 0x8000 that
|
||||
* should be acceptable by specific devices. 0x8000 is the
|
||||
* specified fixed N value for asynchronous clock mode,
|
||||
* which the devices expect also in synchronous clock mode.
|
||||
*/
|
||||
if (reduce_m_n) {
|
||||
while ((m & 1) == 0 && (n & 1) == 0) {
|
||||
m >>= 1;
|
||||
n >>= 1;
|
||||
}
|
||||
}
|
||||
if (constant_n)
|
||||
*ret_n = 0x8000;
|
||||
else
|
||||
*ret_n = min_t(unsigned int, roundup_pow_of_two(n), DATA_LINK_N_MAX);
|
||||
|
||||
*ret_n = min_t(unsigned int, roundup_pow_of_two(n), DATA_LINK_N_MAX);
|
||||
*ret_m = div_u64((uint64_t) m * *ret_n, n);
|
||||
intel_reduce_m_n_ratio(ret_m, ret_n);
|
||||
}
|
||||
|
@ -6709,18 +6707,18 @@ void
|
|||
intel_link_compute_m_n(int bits_per_pixel, int nlanes,
|
||||
int pixel_clock, int link_clock,
|
||||
struct intel_link_m_n *m_n,
|
||||
bool reduce_m_n)
|
||||
bool constant_n)
|
||||
{
|
||||
m_n->tu = 64;
|
||||
|
||||
compute_m_n(bits_per_pixel * pixel_clock,
|
||||
link_clock * nlanes * 8,
|
||||
&m_n->gmch_m, &m_n->gmch_n,
|
||||
reduce_m_n);
|
||||
constant_n);
|
||||
|
||||
compute_m_n(pixel_clock, link_clock,
|
||||
&m_n->link_m, &m_n->link_n,
|
||||
reduce_m_n);
|
||||
constant_n);
|
||||
}
|
||||
|
||||
static inline bool intel_panel_use_ssc(struct drm_i915_private *dev_priv)
|
||||
|
|
|
@ -405,7 +405,7 @@ struct intel_link_m_n {
|
|||
void intel_link_compute_m_n(int bpp, int nlanes,
|
||||
int pixel_clock, int link_clock,
|
||||
struct intel_link_m_n *m_n,
|
||||
bool reduce_m_n);
|
||||
bool constant_n);
|
||||
|
||||
bool is_ccs_modifier(u64 modifier);
|
||||
#endif
|
||||
|
|
|
@ -1998,8 +1998,8 @@ intel_dp_compute_config(struct intel_encoder *encoder,
|
|||
struct intel_connector *intel_connector = intel_dp->attached_connector;
|
||||
struct intel_digital_connector_state *intel_conn_state =
|
||||
to_intel_digital_connector_state(conn_state);
|
||||
bool reduce_m_n = drm_dp_has_quirk(&intel_dp->desc,
|
||||
DP_DPCD_QUIRK_LIMITED_M_N);
|
||||
bool constant_n = drm_dp_has_quirk(&intel_dp->desc,
|
||||
DP_DPCD_QUIRK_CONSTANT_N);
|
||||
|
||||
if (HAS_PCH_SPLIT(dev_priv) && !HAS_DDI(dev_priv) && port != PORT_A)
|
||||
pipe_config->has_pch_encoder = true;
|
||||
|
@ -2064,7 +2064,7 @@ intel_dp_compute_config(struct intel_encoder *encoder,
|
|||
adjusted_mode->crtc_clock,
|
||||
pipe_config->port_clock,
|
||||
&pipe_config->dp_m_n,
|
||||
reduce_m_n);
|
||||
constant_n);
|
||||
|
||||
if (intel_connector->panel.downclock_mode != NULL &&
|
||||
dev_priv->drrs.type == SEAMLESS_DRRS_SUPPORT) {
|
||||
|
@ -2074,7 +2074,7 @@ intel_dp_compute_config(struct intel_encoder *encoder,
|
|||
intel_connector->panel.downclock_mode->clock,
|
||||
pipe_config->port_clock,
|
||||
&pipe_config->dp_m2_n2,
|
||||
reduce_m_n);
|
||||
constant_n);
|
||||
}
|
||||
|
||||
if (!HAS_DDI(dev_priv))
|
||||
|
|
|
@ -45,8 +45,8 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
|
|||
int lane_count, slots;
|
||||
const struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode;
|
||||
int mst_pbn;
|
||||
bool reduce_m_n = drm_dp_has_quirk(&intel_dp->desc,
|
||||
DP_DPCD_QUIRK_LIMITED_M_N);
|
||||
bool constant_n = drm_dp_has_quirk(&intel_dp->desc,
|
||||
DP_DPCD_QUIRK_CONSTANT_N);
|
||||
|
||||
if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
|
||||
return false;
|
||||
|
@ -87,7 +87,7 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder,
|
|||
adjusted_mode->crtc_clock,
|
||||
pipe_config->port_clock,
|
||||
&pipe_config->dp_m_n,
|
||||
reduce_m_n);
|
||||
constant_n);
|
||||
|
||||
pipe_config->dp_m_n.tu = slots;
|
||||
|
||||
|
|
|
@ -417,6 +417,14 @@ static const struct sun8i_hdmi_phy_variant sun8i_h3_hdmi_phy = {
|
|||
.phy_config = &sun8i_hdmi_phy_config_h3,
|
||||
};
|
||||
|
||||
static const struct sun8i_hdmi_phy_variant sun8i_r40_hdmi_phy = {
|
||||
.has_phy_clk = true,
|
||||
.has_second_pll = true,
|
||||
.phy_init = &sun8i_hdmi_phy_init_h3,
|
||||
.phy_disable = &sun8i_hdmi_phy_disable_h3,
|
||||
.phy_config = &sun8i_hdmi_phy_config_h3,
|
||||
};
|
||||
|
||||
static const struct of_device_id sun8i_hdmi_phy_of_table[] = {
|
||||
{
|
||||
.compatible = "allwinner,sun50i-a64-hdmi-phy",
|
||||
|
@ -430,6 +438,10 @@ static const struct of_device_id sun8i_hdmi_phy_of_table[] = {
|
|||
.compatible = "allwinner,sun8i-h3-hdmi-phy",
|
||||
.data = &sun8i_h3_hdmi_phy,
|
||||
},
|
||||
{
|
||||
.compatible = "allwinner,sun8i-r40-hdmi-phy",
|
||||
.data = &sun8i_r40_hdmi_phy,
|
||||
},
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include <drm/drm_atomic.h>
|
||||
#include <drm/drm_crtc_helper.h>
|
||||
#include <drm/drm_encoder.h>
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/ttm/ttm_bo_api.h>
|
||||
#include <drm/ttm/ttm_bo_driver.h>
|
||||
#include <drm/ttm/ttm_placement.h>
|
||||
|
@ -133,6 +134,13 @@ struct virtio_gpu_framebuffer {
|
|||
#define to_virtio_gpu_framebuffer(x) \
|
||||
container_of(x, struct virtio_gpu_framebuffer, base)
|
||||
|
||||
struct virtio_gpu_fbdev {
|
||||
struct drm_fb_helper helper;
|
||||
struct virtio_gpu_framebuffer vgfb;
|
||||
struct virtio_gpu_device *vgdev;
|
||||
struct delayed_work work;
|
||||
};
|
||||
|
||||
struct virtio_gpu_mman {
|
||||
struct ttm_bo_global_ref bo_global_ref;
|
||||
struct drm_global_reference mem_global_ref;
|
||||
|
|
|
@ -29,13 +29,6 @@
|
|||
|
||||
#define VIRTIO_GPU_FBCON_POLL_PERIOD (HZ / 60)
|
||||
|
||||
struct virtio_gpu_fbdev {
|
||||
struct drm_fb_helper helper;
|
||||
struct virtio_gpu_framebuffer vgfb;
|
||||
struct virtio_gpu_device *vgdev;
|
||||
struct delayed_work work;
|
||||
};
|
||||
|
||||
static int virtio_gpu_dirty_update(struct virtio_gpu_framebuffer *fb,
|
||||
bool store, int x, int y,
|
||||
int width, int height)
|
||||
|
|
|
@ -490,6 +490,15 @@ void virtio_gpu_cmd_transfer_to_host_2d(struct virtio_gpu_device *vgdev,
|
|||
{
|
||||
struct virtio_gpu_transfer_to_host_2d *cmd_p;
|
||||
struct virtio_gpu_vbuffer *vbuf;
|
||||
struct virtio_gpu_fbdev *vgfbdev = vgdev->vgfbdev;
|
||||
struct virtio_gpu_framebuffer *fb = &vgfbdev->vgfb;
|
||||
struct virtio_gpu_object *obj = gem_to_virtio_gpu_obj(fb->base.obj[0]);
|
||||
bool use_dma_api = !virtio_has_iommu_quirk(vgdev->vdev);
|
||||
|
||||
if (use_dma_api)
|
||||
dma_sync_sg_for_device(vgdev->vdev->dev.parent,
|
||||
obj->pages->sgl, obj->pages->nents,
|
||||
DMA_TO_DEVICE);
|
||||
|
||||
cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p));
|
||||
memset(cmd_p, 0, sizeof(*cmd_p));
|
||||
|
@ -789,6 +798,15 @@ void virtio_gpu_cmd_transfer_to_host_3d(struct virtio_gpu_device *vgdev,
|
|||
{
|
||||
struct virtio_gpu_transfer_host_3d *cmd_p;
|
||||
struct virtio_gpu_vbuffer *vbuf;
|
||||
struct virtio_gpu_fbdev *vgfbdev = vgdev->vgfbdev;
|
||||
struct virtio_gpu_framebuffer *fb = &vgfbdev->vgfb;
|
||||
struct virtio_gpu_object *obj = gem_to_virtio_gpu_obj(fb->base.obj[0]);
|
||||
bool use_dma_api = !virtio_has_iommu_quirk(vgdev->vdev);
|
||||
|
||||
if (use_dma_api)
|
||||
dma_sync_sg_for_device(vgdev->vdev->dev.parent,
|
||||
obj->pages->sgl, obj->pages->nents,
|
||||
DMA_TO_DEVICE);
|
||||
|
||||
cmd_p = virtio_gpu_alloc_cmd(vgdev, &vbuf, sizeof(*cmd_p));
|
||||
memset(cmd_p, 0, sizeof(*cmd_p));
|
||||
|
|
|
@ -45,6 +45,16 @@ struct drm_device {
|
|||
/* currently active master for this device. Protected by master_mutex */
|
||||
struct drm_master *master;
|
||||
|
||||
/**
|
||||
* @driver_features: per-device driver features
|
||||
*
|
||||
* Drivers can clear specific flags here to disallow
|
||||
* certain features on a per-device basis while still
|
||||
* sharing a single &struct drm_driver instance across
|
||||
* all devices.
|
||||
*/
|
||||
u32 driver_features;
|
||||
|
||||
/**
|
||||
* @unplugged:
|
||||
*
|
||||
|
|
|
@ -1261,12 +1261,12 @@ int drm_dp_read_desc(struct drm_dp_aux *aux, struct drm_dp_desc *desc,
|
|||
*/
|
||||
enum drm_dp_quirk {
|
||||
/**
|
||||
* @DP_DPCD_QUIRK_LIMITED_M_N:
|
||||
* @DP_DPCD_QUIRK_CONSTANT_N:
|
||||
*
|
||||
* The device requires main link attributes Mvid and Nvid to be limited
|
||||
* to 16 bits.
|
||||
* to 16 bits. So will give a constant value (0x8000) for compatability.
|
||||
*/
|
||||
DP_DPCD_QUIRK_LIMITED_M_N,
|
||||
DP_DPCD_QUIRK_CONSTANT_N,
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -653,14 +653,14 @@ static inline bool drm_dev_is_unplugged(struct drm_device *dev)
|
|||
* @dev: DRM device to check
|
||||
* @feature: feature flag
|
||||
*
|
||||
* This checks @dev for driver features, see &drm_driver.driver_features and the
|
||||
* various DRIVER_\* flags.
|
||||
* This checks @dev for driver features, see &drm_driver.driver_features,
|
||||
* &drm_device.driver_features, and the various DRIVER_\* flags.
|
||||
*
|
||||
* Returns true if the @feature is supported, false otherwise.
|
||||
*/
|
||||
static inline bool drm_core_check_feature(struct drm_device *dev, int feature)
|
||||
static inline bool drm_core_check_feature(struct drm_device *dev, u32 feature)
|
||||
{
|
||||
return dev->driver->driver_features & feature;
|
||||
return dev->driver->driver_features & dev->driver_features & feature;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue
Block a user