|
@@ -1696,6 +1696,7 @@ static int tegra_dc_debugfs_exit(struct tegra_dc *dc)
|
|
|
static int tegra_dc_init(struct host1x_client *client)
|
|
|
{
|
|
|
struct drm_device *drm = dev_get_drvdata(client->parent);
|
|
|
+ unsigned long flags = HOST1X_SYNCPT_CLIENT_MANAGED;
|
|
|
struct tegra_dc *dc = host1x_client_to_dc(client);
|
|
|
struct tegra_drm *tegra = drm->dev_private;
|
|
|
struct drm_plane *primary = NULL;
|
|
@@ -1703,6 +1704,10 @@ static int tegra_dc_init(struct host1x_client *client)
|
|
|
u32 value;
|
|
|
int err;
|
|
|
|
|
|
+ dc->syncpt = host1x_syncpt_request(dc->dev, flags);
|
|
|
+ if (!dc->syncpt)
|
|
|
+ dev_warn(dc->dev, "failed to allocate syncpoint\n");
|
|
|
+
|
|
|
if (tegra->domain) {
|
|
|
err = iommu_attach_device(tegra->domain, dc->dev);
|
|
|
if (err < 0) {
|
|
@@ -1849,6 +1854,8 @@ static int tegra_dc_exit(struct host1x_client *client)
|
|
|
dc->domain = NULL;
|
|
|
}
|
|
|
|
|
|
+ host1x_syncpt_free(dc->syncpt);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -1961,7 +1968,6 @@ static int tegra_dc_parse_dt(struct tegra_dc *dc)
|
|
|
|
|
|
static int tegra_dc_probe(struct platform_device *pdev)
|
|
|
{
|
|
|
- unsigned long flags = HOST1X_SYNCPT_CLIENT_MANAGED;
|
|
|
const struct of_device_id *id;
|
|
|
struct resource *regs;
|
|
|
struct tegra_dc *dc;
|
|
@@ -2036,10 +2042,6 @@ static int tegra_dc_probe(struct platform_device *pdev)
|
|
|
return -ENXIO;
|
|
|
}
|
|
|
|
|
|
- dc->syncpt = host1x_syncpt_request(&pdev->dev, flags);
|
|
|
- if (!dc->syncpt)
|
|
|
- dev_warn(&pdev->dev, "failed to allocate syncpoint\n");
|
|
|
-
|
|
|
INIT_LIST_HEAD(&dc->client.list);
|
|
|
dc->client.ops = &dc_client_ops;
|
|
|
dc->client.dev = &pdev->dev;
|
|
@@ -2067,8 +2069,6 @@ static int tegra_dc_remove(struct platform_device *pdev)
|
|
|
struct tegra_dc *dc = platform_get_drvdata(pdev);
|
|
|
int err;
|
|
|
|
|
|
- host1x_syncpt_free(dc->syncpt);
|
|
|
-
|
|
|
err = host1x_client_unregister(&dc->client);
|
|
|
if (err < 0) {
|
|
|
dev_err(&pdev->dev, "failed to unregister host1x client: %d\n",
|