Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 692e6d7b authored by Terje Bergstrom's avatar Terje Bergstrom Committed by Thierry Reding
Browse files

gpu: host1x: Remove second host1x driver



Remove second host1x driver, and bind tegra-drm to the new host1x
driver. The logic to parse device tree and track clients is moved
to drm.c.

Signed-off-by: default avatarArto Merilainen <amerilainen@nvidia.com>
Signed-off-by: default avatarTerje Bergstrom <tbergstrom@nvidia.com>
Reviewed-by: default avatarThierry Reding <thierry.reding@avionic-design.de>
Tested-by: default avatarThierry Reding <thierry.reding@avionic-design.de>
Tested-by: default avatarErik Faye-Lund <kusmabite@gmail.com>
Signed-off-by: default avatarThierry Reding <thierry.reding@avionic-design.de>
parent c89c0ea6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -13,6 +13,6 @@ host1x-y = \
ccflags-y += -Iinclude/drm
ccflags-$(CONFIG_DRM_TEGRA_DEBUG) += -DDEBUG

host1x-$(CONFIG_DRM_TEGRA) += drm/drm.o drm/fb.o drm/dc.o drm/host1x.o
host1x-$(CONFIG_DRM_TEGRA) += drm/drm.o drm/fb.o drm/dc.o
host1x-$(CONFIG_DRM_TEGRA) += drm/output.o drm/rgb.o drm/hdmi.o
obj-$(CONFIG_TEGRA_HOST1X) += host1x.o
+56 −2
Original line number Diff line number Diff line
@@ -32,6 +32,19 @@
#include "channel.h"
#include "debug.h"
#include "hw/host1x01.h"
#include "host1x_client.h"

void host1x_set_drm_data(struct device *dev, void *data)
{
	struct host1x *host1x = dev_get_drvdata(dev);
	host1x->drm_data = data;
}

void *host1x_get_drm_data(struct device *dev)
{
	struct host1x *host1x = dev_get_drvdata(dev);
	return host1x->drm_data;
}

void host1x_sync_writel(struct host1x *host1x, u32 v, u32 r)
{
@@ -150,6 +163,8 @@ static int host1x_probe(struct platform_device *pdev)

	host1x_debug_init(host);

	host1x_drm_alloc(pdev);

	return 0;

fail_deinit_syncpt:
@@ -168,7 +183,7 @@ static int __exit host1x_remove(struct platform_device *pdev)
	return 0;
}

static struct platform_driver platform_driver = {
static struct platform_driver tegra_host1x_driver = {
	.probe = host1x_probe,
	.remove = __exit_p(host1x_remove),
	.driver = {
@@ -178,8 +193,47 @@ static struct platform_driver platform_driver = {
	},
};

module_platform_driver(platform_driver);
static int __init tegra_host1x_init(void)
{
	int err;

	err = platform_driver_register(&tegra_host1x_driver);
	if (err < 0)
		return err;

#ifdef CONFIG_DRM_TEGRA
	err = platform_driver_register(&tegra_dc_driver);
	if (err < 0)
		goto unregister_host1x;

	err = platform_driver_register(&tegra_hdmi_driver);
	if (err < 0)
		goto unregister_dc;
#endif

	return 0;

#ifdef CONFIG_DRM_TEGRA
unregister_dc:
	platform_driver_unregister(&tegra_dc_driver);
unregister_host1x:
	platform_driver_unregister(&tegra_host1x_driver);
	return err;
#endif
}
module_init(tegra_host1x_init);

static void __exit tegra_host1x_exit(void)
{
#ifdef CONFIG_DRM_TEGRA
	platform_driver_unregister(&tegra_hdmi_driver);
	platform_driver_unregister(&tegra_dc_driver);
#endif
	platform_driver_unregister(&tegra_host1x_driver);
}
module_exit(tegra_host1x_exit);

MODULE_AUTHOR("Thierry Reding <thierry.reding@avionic-design.de>");
MODULE_AUTHOR("Terje Bergstrom <tbergstrom@nvidia.com>");
MODULE_DESCRIPTION("Host1x driver for Tegra products");
MODULE_LICENSE("GPL");
+6 −0
Original line number Diff line number Diff line
@@ -124,6 +124,8 @@ struct host1x {
	unsigned int num_allocated_channels;

	struct dentry *debugfs;

	void *drm_data;
};

void host1x_sync_writel(struct host1x *host1x, u32 r, u32 v);
@@ -299,4 +301,8 @@ static inline void host1x_hw_show_mlocks(struct host1x *host, struct output *o)
	host->debug_op->show_mlocks(host, o);
}

extern struct platform_driver tegra_hdmi_driver;
extern struct platform_driver tegra_dc_driver;
extern struct platform_driver tegra_gr2d_driver;

#endif
+1 −1
Original line number Diff line number Diff line
config DRM_TEGRA
	tristate "NVIDIA Tegra DRM"
	bool "NVIDIA Tegra DRM"
	depends on DRM && OF
	select DRM_KMS_HELPER
	select DRM_GEM_CMA_HELPER
+3 −2
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

#include "drm.h"
#include "dc.h"
#include "host1x_client.h"

struct tegra_plane {
	struct drm_plane base;
@@ -1097,7 +1098,7 @@ static const struct host1x_client_ops dc_client_ops = {

static int tegra_dc_probe(struct platform_device *pdev)
{
	struct host1x_drm *host1x = dev_get_drvdata(pdev->dev.parent);
	struct host1x_drm *host1x = host1x_get_drm_data(pdev->dev.parent);
	struct resource *regs;
	struct tegra_dc *dc;
	int err;
@@ -1160,7 +1161,7 @@ static int tegra_dc_probe(struct platform_device *pdev)

static int tegra_dc_remove(struct platform_device *pdev)
{
	struct host1x_drm *host1x = dev_get_drvdata(pdev->dev.parent);
	struct host1x_drm *host1x = host1x_get_drm_data(pdev->dev.parent);
	struct tegra_dc *dc = platform_get_drvdata(pdev);
	int err;

Loading