Short summary of fixes pull:
probe-helper: - never return negative values from .get_modes() plus driver fixes nouveau: - clear bo resource bus after eviction - documentation fixes -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEchf7rIzpz2NEoWjlaA3BHVMLeiMFAmXytIgACgkQaA3BHVML eiPuXAgAl8nqkA6c5SlAbXsamAHorjznl816Y5LeL4YgRWZpzrkTkxtpS6aP/4r4 s9RbQzzxd6rmV56kTjQywPZRAVuUkZ3220vcfFie2JFOrysnfz7xEpCkOS1KT9uO JparsT3HbWHqlA2kQ5iHQWdgq6fBWTftoVF5vRmCkJsj9NoDtchCMBHPc0xfTSa0 +NAvkX9F3ktXYB8vibpotKC0mn8chUul3EtnAINjUJVKjbjvPlJ048FVJTuI1yoe RDiih3k0A20KF2kpldAlQdhOCFgCy62O8/jYhZFjMonB25y7fHdmyVgSQP2UhvYS vIkX+B87c38VD3EJANNLOllJj8+Xog== =+tQp -----END PGP SIGNATURE----- Merge tag 'drm-misc-next-fixes-2024-03-14' of https://gitlab.freedesktop.org/drm/misc/kernel into drm-next Short summary of fixes pull: probe-helper: - never return negative values from .get_modes() plus driver fixes nouveau: - clear bo resource bus after eviction - documentation fixes Signed-off-by: Dave Airlie <airlied@redhat.com> From: Thomas Zimmermann <tzimmermann@suse.de> Link: https://patchwork.freedesktop.org/patch/msgid/20240314082833.GA8761@localhost.localdomain
This commit is contained in:
commit
02ac437111
@ -441,23 +441,21 @@ lt8912_connector_mode_valid(struct drm_connector *connector,
|
||||
static int lt8912_connector_get_modes(struct drm_connector *connector)
|
||||
{
|
||||
const struct drm_edid *drm_edid;
|
||||
int ret = -1;
|
||||
int num = 0;
|
||||
struct lt8912 *lt = connector_to_lt8912(connector);
|
||||
u32 bus_format = MEDIA_BUS_FMT_RGB888_1X24;
|
||||
int ret, num;
|
||||
|
||||
drm_edid = drm_bridge_edid_read(lt->hdmi_port, connector);
|
||||
drm_edid_connector_update(connector, drm_edid);
|
||||
if (drm_edid) {
|
||||
num = drm_edid_connector_add_modes(connector);
|
||||
} else {
|
||||
return ret;
|
||||
}
|
||||
if (!drm_edid)
|
||||
return 0;
|
||||
|
||||
num = drm_edid_connector_add_modes(connector);
|
||||
|
||||
ret = drm_display_info_set_bus_formats(&connector->display_info,
|
||||
&bus_format, 1);
|
||||
if (ret)
|
||||
num = ret;
|
||||
if (ret < 0)
|
||||
num = 0;
|
||||
|
||||
drm_edid_free(drm_edid);
|
||||
return num;
|
||||
|
@ -294,8 +294,8 @@ static struct mipi_dsi_device *lt9611uxc_attach_dsi(struct lt9611uxc *lt9611uxc,
|
||||
static int lt9611uxc_connector_get_modes(struct drm_connector *connector)
|
||||
{
|
||||
struct lt9611uxc *lt9611uxc = connector_to_lt9611uxc(connector);
|
||||
unsigned int count;
|
||||
const struct drm_edid *drm_edid;
|
||||
int count;
|
||||
|
||||
drm_edid = drm_bridge_edid_read(<9611uxc->bridge, connector);
|
||||
drm_edid_connector_update(connector, drm_edid);
|
||||
|
@ -274,19 +274,24 @@ EXPORT_SYMBOL(drm_panel_disable);
|
||||
* The modes probed from the panel are automatically added to the connector
|
||||
* that the panel is attached to.
|
||||
*
|
||||
* Return: The number of modes available from the panel on success or a
|
||||
* negative error code on failure.
|
||||
* Return: The number of modes available from the panel on success, or 0 on
|
||||
* failure (no modes).
|
||||
*/
|
||||
int drm_panel_get_modes(struct drm_panel *panel,
|
||||
struct drm_connector *connector)
|
||||
{
|
||||
if (!panel)
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
|
||||
if (panel->funcs && panel->funcs->get_modes)
|
||||
return panel->funcs->get_modes(panel, connector);
|
||||
if (panel->funcs && panel->funcs->get_modes) {
|
||||
int num;
|
||||
|
||||
return -EOPNOTSUPP;
|
||||
num = panel->funcs->get_modes(panel, connector);
|
||||
if (num > 0)
|
||||
return num;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_panel_get_modes);
|
||||
|
||||
|
@ -422,6 +422,13 @@ static int drm_helper_probe_get_modes(struct drm_connector *connector)
|
||||
|
||||
count = connector_funcs->get_modes(connector);
|
||||
|
||||
/* The .get_modes() callback should not return negative values. */
|
||||
if (count < 0) {
|
||||
drm_err(connector->dev, ".get_modes() returned %pe\n",
|
||||
ERR_PTR(count));
|
||||
count = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Fallback for when DDC probe failed in drm_get_edid() and thus skipped
|
||||
* override/firmware EDID.
|
||||
|
@ -74,16 +74,15 @@ static int exynos_dp_get_modes(struct analogix_dp_plat_data *plat_data,
|
||||
{
|
||||
struct exynos_dp_device *dp = to_dp(plat_data);
|
||||
struct drm_display_mode *mode;
|
||||
int num_modes = 0;
|
||||
|
||||
if (dp->plat_data.panel)
|
||||
return num_modes;
|
||||
return 0;
|
||||
|
||||
mode = drm_mode_create(connector->dev);
|
||||
if (!mode) {
|
||||
DRM_DEV_ERROR(dp->dev,
|
||||
"failed to create a new display mode.\n");
|
||||
return num_modes;
|
||||
return 0;
|
||||
}
|
||||
|
||||
drm_display_mode_from_videomode(&dp->vm, mode);
|
||||
@ -94,7 +93,7 @@ static int exynos_dp_get_modes(struct analogix_dp_plat_data *plat_data,
|
||||
drm_mode_set_name(mode);
|
||||
drm_mode_probed_add(connector, mode);
|
||||
|
||||
return num_modes + 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int exynos_dp_bridge_attach(struct analogix_dp_plat_data *plat_data,
|
||||
|
@ -316,14 +316,14 @@ static int vidi_get_modes(struct drm_connector *connector)
|
||||
*/
|
||||
if (!ctx->raw_edid) {
|
||||
DRM_DEV_DEBUG_KMS(ctx->dev, "raw_edid is null.\n");
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
}
|
||||
|
||||
edid_len = (1 + ctx->raw_edid->extensions) * EDID_LENGTH;
|
||||
edid = kmemdup(ctx->raw_edid, edid_len, GFP_KERNEL);
|
||||
if (!edid) {
|
||||
DRM_DEV_DEBUG_KMS(ctx->dev, "failed to allocate edid\n");
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
}
|
||||
|
||||
drm_connector_update_edid_property(connector, edid);
|
||||
|
@ -887,11 +887,11 @@ static int hdmi_get_modes(struct drm_connector *connector)
|
||||
int ret;
|
||||
|
||||
if (!hdata->ddc_adpt)
|
||||
return -ENODEV;
|
||||
return 0;
|
||||
|
||||
edid = drm_get_edid(connector, hdata->ddc_adpt);
|
||||
if (!edid)
|
||||
return -ENODEV;
|
||||
return 0;
|
||||
|
||||
hdata->dvi_mode = !connector->display_info.is_hdmi;
|
||||
DRM_DEV_DEBUG_KMS(hdata->dev, "%s : width[%d] x height[%d]\n",
|
||||
|
@ -72,14 +72,14 @@ static int imx_pd_connector_get_modes(struct drm_connector *connector)
|
||||
int ret;
|
||||
|
||||
if (!mode)
|
||||
return -EINVAL;
|
||||
return 0;
|
||||
|
||||
ret = of_get_drm_display_mode(np, &imxpd->mode,
|
||||
&imxpd->bus_flags,
|
||||
OF_USE_NATIVE_MODE);
|
||||
if (ret) {
|
||||
drm_mode_destroy(connector->dev, mode);
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
drm_mode_copy(mode, &imxpd->mode);
|
||||
|
@ -1256,6 +1256,8 @@ out:
|
||||
drm_vma_node_unmap(&nvbo->bo.base.vma_node,
|
||||
bdev->dev_mapping);
|
||||
nouveau_ttm_io_mem_free_locked(drm, nvbo->bo.resource);
|
||||
nvbo->bo.resource->bus.offset = 0;
|
||||
nvbo->bo.resource->bus.addr = NULL;
|
||||
goto retry;
|
||||
}
|
||||
|
||||
|
@ -1432,6 +1432,10 @@ r535_gsp_msg_post_event(void *priv, u32 fn, void *repv, u32 repc)
|
||||
|
||||
/**
|
||||
* r535_gsp_msg_run_cpu_sequencer() -- process I/O commands from the GSP
|
||||
* @priv: gsp pointer
|
||||
* @fn: function number (ignored)
|
||||
* @repv: pointer to libos print RPC
|
||||
* @repc: message size
|
||||
*
|
||||
* The GSP sequencer is a list of I/O commands that the GSP can send to
|
||||
* the driver to perform for various purposes. The most common usage is to
|
||||
@ -1783,6 +1787,7 @@ static void create_pte_array(u64 *ptes, dma_addr_t addr, size_t size)
|
||||
|
||||
/**
|
||||
* r535_gsp_libos_init() -- create the libos arguments structure
|
||||
* @gsp: gsp pointer
|
||||
*
|
||||
* The logging buffers are byte queues that contain encoded printf-like
|
||||
* messages from GSP-RM. They need to be decoded by a special application
|
||||
@ -1922,6 +1927,10 @@ nvkm_gsp_radix3_dtor(struct nvkm_gsp *gsp, struct nvkm_gsp_radix3 *rx3)
|
||||
|
||||
/**
|
||||
* nvkm_gsp_radix3_sg - build a radix3 table from a S/G list
|
||||
* @gsp: gsp pointer
|
||||
* @sgt: S/G list to traverse
|
||||
* @size: size of the image, in bytes
|
||||
* @rx3: radix3 array to update
|
||||
*
|
||||
* The GSP uses a three-level page table, called radix3, to map the firmware.
|
||||
* Each 64-bit "pointer" in the table is either the bus address of an entry in
|
||||
|
@ -509,7 +509,7 @@ static int vc4_hdmi_connector_get_modes(struct drm_connector *connector)
|
||||
edid = drm_get_edid(connector, vc4_hdmi->ddc);
|
||||
cec_s_phys_addr_from_edid(vc4_hdmi->cec_adap, edid);
|
||||
if (!edid)
|
||||
return -ENODEV;
|
||||
return 0;
|
||||
|
||||
drm_connector_update_edid_property(connector, edid);
|
||||
ret = drm_add_edid_modes(connector, edid);
|
||||
|
@ -898,7 +898,8 @@ struct drm_connector_helper_funcs {
|
||||
*
|
||||
* RETURNS:
|
||||
*
|
||||
* The number of modes added by calling drm_mode_probed_add().
|
||||
* The number of modes added by calling drm_mode_probed_add(). Return 0
|
||||
* on failures (no modes) instead of negative error codes.
|
||||
*/
|
||||
int (*get_modes)(struct drm_connector *connector);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user