gr2d.c (caccddcfc4b4de75930df2e8f7fd0c66556b13ff) | gr2d.c (aacdf19849734d1be5e407932228ae101ba5b92f) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (c) 2012-2013, NVIDIA Corporation. 4 */ 5 6#include <linux/clk.h> 7#include <linux/iommu.h> 8#include <linux/module.h> 9#include <linux/of_device.h> 10 11#include "drm.h" 12#include "gem.h" 13#include "gr2d.h" 14 15struct gr2d_soc { 16 unsigned int version; 17}; 18 19struct gr2d { | 1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (c) 2012-2013, NVIDIA Corporation. 4 */ 5 6#include <linux/clk.h> 7#include <linux/iommu.h> 8#include <linux/module.h> 9#include <linux/of_device.h> 10 11#include "drm.h" 12#include "gem.h" 13#include "gr2d.h" 14 15struct gr2d_soc { 16 unsigned int version; 17}; 18 19struct gr2d { |
20 struct iommu_group *group; | |
21 struct tegra_drm_client client; 22 struct host1x_channel *channel; 23 struct clk *clk; 24 25 const struct gr2d_soc *soc; 26 27 DECLARE_BITMAP(addr_regs, GR2D_NUM_REGS); 28}; --- 17 unchanged lines hidden (view full) --- 46 47 client->syncpts[0] = host1x_syncpt_request(client, flags); 48 if (!client->syncpts[0]) { 49 err = -ENOMEM; 50 dev_err(client->dev, "failed to request syncpoint: %d\n", err); 51 goto put; 52 } 53 | 20 struct tegra_drm_client client; 21 struct host1x_channel *channel; 22 struct clk *clk; 23 24 const struct gr2d_soc *soc; 25 26 DECLARE_BITMAP(addr_regs, GR2D_NUM_REGS); 27}; --- 17 unchanged lines hidden (view full) --- 45 46 client->syncpts[0] = host1x_syncpt_request(client, flags); 47 if (!client->syncpts[0]) { 48 err = -ENOMEM; 49 dev_err(client->dev, "failed to request syncpoint: %d\n", err); 50 goto put; 51 } 52 |
54 gr2d->group = host1x_client_iommu_attach(client, false); 55 if (IS_ERR(gr2d->group)) { 56 err = PTR_ERR(gr2d->group); | 53 err = host1x_client_iommu_attach(client, false); 54 if (err < 0) { |
57 dev_err(client->dev, "failed to attach to domain: %d\n", err); 58 goto free; 59 } 60 61 err = tegra_drm_register_client(dev->dev_private, drm); 62 if (err < 0) { 63 dev_err(client->dev, "failed to register client: %d\n", err); 64 goto detach; 65 } 66 67 return 0; 68 69detach: | 55 dev_err(client->dev, "failed to attach to domain: %d\n", err); 56 goto free; 57 } 58 59 err = tegra_drm_register_client(dev->dev_private, drm); 60 if (err < 0) { 61 dev_err(client->dev, "failed to register client: %d\n", err); 62 goto detach; 63 } 64 65 return 0; 66 67detach: |
70 host1x_client_iommu_detach(client, gr2d->group); | 68 host1x_client_iommu_detach(client); |
71free: 72 host1x_syncpt_free(client->syncpts[0]); 73put: 74 host1x_channel_put(gr2d->channel); 75 return err; 76} 77 78static int gr2d_exit(struct host1x_client *client) 79{ 80 struct tegra_drm_client *drm = host1x_to_drm_client(client); 81 struct drm_device *dev = dev_get_drvdata(client->parent); 82 struct tegra_drm *tegra = dev->dev_private; 83 struct gr2d *gr2d = to_gr2d(drm); 84 int err; 85 86 err = tegra_drm_unregister_client(tegra, drm); 87 if (err < 0) 88 return err; 89 | 69free: 70 host1x_syncpt_free(client->syncpts[0]); 71put: 72 host1x_channel_put(gr2d->channel); 73 return err; 74} 75 76static int gr2d_exit(struct host1x_client *client) 77{ 78 struct tegra_drm_client *drm = host1x_to_drm_client(client); 79 struct drm_device *dev = dev_get_drvdata(client->parent); 80 struct tegra_drm *tegra = dev->dev_private; 81 struct gr2d *gr2d = to_gr2d(drm); 82 int err; 83 84 err = tegra_drm_unregister_client(tegra, drm); 85 if (err < 0) 86 return err; 87 |
90 host1x_client_iommu_detach(client, gr2d->group); | 88 host1x_client_iommu_detach(client); |
91 host1x_syncpt_free(client->syncpts[0]); 92 host1x_channel_put(gr2d->channel); 93 94 return 0; 95} 96 97static const struct host1x_client_ops gr2d_client_ops = { 98 .init = gr2d_init, --- 172 unchanged lines hidden --- | 89 host1x_syncpt_free(client->syncpts[0]); 90 host1x_channel_put(gr2d->channel); 91 92 return 0; 93} 94 95static const struct host1x_client_ops gr2d_client_ops = { 96 .init = gr2d_init, --- 172 unchanged lines hidden --- |