gr3d.c (caccddcfc4b4de75930df2e8f7fd0c66556b13ff) | gr3d.c (aacdf19849734d1be5e407932228ae101ba5b92f) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (C) 2013 Avionic Design GmbH 4 * Copyright (C) 2013 NVIDIA Corporation 5 */ 6 7#include <linux/clk.h> 8#include <linux/host1x.h> --- 9 unchanged lines hidden (view full) --- 18#include "gem.h" 19#include "gr3d.h" 20 21struct gr3d_soc { 22 unsigned int version; 23}; 24 25struct gr3d { | 1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (C) 2013 Avionic Design GmbH 4 * Copyright (C) 2013 NVIDIA Corporation 5 */ 6 7#include <linux/clk.h> 8#include <linux/host1x.h> --- 9 unchanged lines hidden (view full) --- 18#include "gem.h" 19#include "gr3d.h" 20 21struct gr3d_soc { 22 unsigned int version; 23}; 24 25struct gr3d { |
26 struct iommu_group *group; | |
27 struct tegra_drm_client client; 28 struct host1x_channel *channel; 29 struct clk *clk_secondary; 30 struct clk *clk; 31 struct reset_control *rst_secondary; 32 struct reset_control *rst; 33 34 const struct gr3d_soc *soc; --- 20 unchanged lines hidden (view full) --- 55 56 client->syncpts[0] = host1x_syncpt_request(client, flags); 57 if (!client->syncpts[0]) { 58 err = -ENOMEM; 59 dev_err(client->dev, "failed to request syncpoint: %d\n", err); 60 goto put; 61 } 62 | 26 struct tegra_drm_client client; 27 struct host1x_channel *channel; 28 struct clk *clk_secondary; 29 struct clk *clk; 30 struct reset_control *rst_secondary; 31 struct reset_control *rst; 32 33 const struct gr3d_soc *soc; --- 20 unchanged lines hidden (view full) --- 54 55 client->syncpts[0] = host1x_syncpt_request(client, flags); 56 if (!client->syncpts[0]) { 57 err = -ENOMEM; 58 dev_err(client->dev, "failed to request syncpoint: %d\n", err); 59 goto put; 60 } 61 |
63 gr3d->group = host1x_client_iommu_attach(client, false); 64 if (IS_ERR(gr3d->group)) { 65 err = PTR_ERR(gr3d->group); | 62 err = host1x_client_iommu_attach(client, false); 63 if (err < 0) { |
66 dev_err(client->dev, "failed to attach to domain: %d\n", err); 67 goto free; 68 } 69 70 err = tegra_drm_register_client(dev->dev_private, drm); 71 if (err < 0) { 72 dev_err(client->dev, "failed to register client: %d\n", err); 73 goto detach; 74 } 75 76 return 0; 77 78detach: | 64 dev_err(client->dev, "failed to attach to domain: %d\n", err); 65 goto free; 66 } 67 68 err = tegra_drm_register_client(dev->dev_private, drm); 69 if (err < 0) { 70 dev_err(client->dev, "failed to register client: %d\n", err); 71 goto detach; 72 } 73 74 return 0; 75 76detach: |
79 host1x_client_iommu_detach(client, gr3d->group); | 77 host1x_client_iommu_detach(client); |
80free: 81 host1x_syncpt_free(client->syncpts[0]); 82put: 83 host1x_channel_put(gr3d->channel); 84 return err; 85} 86 87static int gr3d_exit(struct host1x_client *client) 88{ 89 struct tegra_drm_client *drm = host1x_to_drm_client(client); 90 struct drm_device *dev = dev_get_drvdata(client->parent); 91 struct gr3d *gr3d = to_gr3d(drm); 92 int err; 93 94 err = tegra_drm_unregister_client(dev->dev_private, drm); 95 if (err < 0) 96 return err; 97 | 78free: 79 host1x_syncpt_free(client->syncpts[0]); 80put: 81 host1x_channel_put(gr3d->channel); 82 return err; 83} 84 85static int gr3d_exit(struct host1x_client *client) 86{ 87 struct tegra_drm_client *drm = host1x_to_drm_client(client); 88 struct drm_device *dev = dev_get_drvdata(client->parent); 89 struct gr3d *gr3d = to_gr3d(drm); 90 int err; 91 92 err = tegra_drm_unregister_client(dev->dev_private, drm); 93 if (err < 0) 94 return err; 95 |
98 host1x_client_iommu_detach(client, gr3d->group); | 96 host1x_client_iommu_detach(client); |
99 host1x_syncpt_free(client->syncpts[0]); 100 host1x_channel_put(gr3d->channel); 101 102 return 0; 103} 104 105static const struct host1x_client_ops gr3d_client_ops = { 106 .init = gr3d_init, --- 297 unchanged lines hidden --- | 97 host1x_syncpt_free(client->syncpts[0]); 98 host1x_channel_put(gr3d->channel); 99 100 return 0; 101} 102 103static const struct host1x_client_ops gr3d_client_ops = { 104 .init = gr3d_init, --- 297 unchanged lines hidden --- |