Commit a1cd3486 authored by Dave Airlie's avatar Dave Airlie

Merge tag 'drm/tegra/for-5.8-rc3' of git://anongit.freedesktop.org/tegra/linux into drm-fixes

drm/tegra: Fixes for v5.8-rc3

This contains a fairly random assortment of fixes for various minor
issues.
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Thierry Reding <thierry.reding@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200624165254.2763104-1-thierry.reding@gmail.com
parents 5107683f fce3a51d
...@@ -957,6 +957,7 @@ static struct drm_plane *tegra_dc_cursor_plane_create(struct drm_device *drm, ...@@ -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_helper_add(&plane->base, &tegra_cursor_plane_helper_funcs);
drm_plane_create_zpos_immutable_property(&plane->base, 255);
return &plane->base; return &plane->base;
} }
......
...@@ -149,7 +149,9 @@ int tegra_display_hub_prepare(struct tegra_display_hub *hub) ...@@ -149,7 +149,9 @@ int tegra_display_hub_prepare(struct tegra_display_hub *hub)
for (i = 0; i < hub->soc->num_wgrps; i++) { for (i = 0; i < hub->soc->num_wgrps; i++) {
struct tegra_windowgroup *wgrp = &hub->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; return 0;
...@@ -166,7 +168,9 @@ void tegra_display_hub_cleanup(struct tegra_display_hub *hub) ...@@ -166,7 +168,9 @@ void tegra_display_hub_cleanup(struct tegra_display_hub *hub)
for (i = 0; i < hub->soc->num_wgrps; i++) { for (i = 0; i < hub->soc->num_wgrps; i++) {
struct tegra_windowgroup *wgrp = &hub->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) ...@@ -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", dev_err(&pdev->dev, "failed to register host1x client: %d\n",
err); 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; return err;
} }
......
...@@ -686,8 +686,17 @@ EXPORT_SYMBOL(host1x_driver_register_full); ...@@ -686,8 +686,17 @@ EXPORT_SYMBOL(host1x_driver_register_full);
*/ */
void host1x_driver_unregister(struct host1x_driver *driver) void host1x_driver_unregister(struct host1x_driver *driver)
{ {
struct host1x *host1x;
driver_unregister(&driver->driver); 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); mutex_lock(&drivers_lock);
list_del_init(&driver->list); list_del_init(&driver->list);
mutex_unlock(&drivers_lock); mutex_unlock(&drivers_lock);
......
...@@ -468,11 +468,18 @@ static int host1x_probe(struct platform_device *pdev) ...@@ -468,11 +468,18 @@ static int host1x_probe(struct platform_device *pdev)
err = host1x_register(host); err = host1x_register(host);
if (err < 0) if (err < 0)
goto deinit_intr; goto deinit_debugfs;
err = devm_of_platform_populate(&pdev->dev);
if (err < 0)
goto unregister;
return 0; return 0;
deinit_intr: unregister:
host1x_unregister(host);
deinit_debugfs:
host1x_debug_deinit(host);
host1x_intr_deinit(host); host1x_intr_deinit(host);
deinit_syncpt: deinit_syncpt:
host1x_syncpt_deinit(host); host1x_syncpt_deinit(host);
......
...@@ -48,6 +48,9 @@ struct host1x_client_ops { ...@@ -48,6 +48,9 @@ struct host1x_client_ops {
* @channel: host1x channel associated with this client * @channel: host1x channel associated with this client
* @syncpts: array of syncpoints requested for this client * @syncpts: array of syncpoints requested for this client
* @num_syncpts: number 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 host1x_client {
struct list_head list; struct list_head list;
......
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