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

Commit e89fe98b authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge branch 'etnaviv/fixes' of https://git.pengutronix.de/git/lst/linux into drm-fixes



one fix to get a proper DMA configuration in place for the etnaviv
virtual device. I'm sending this as a fix, as a dma-mapping change at
the ARC architecture side during the 4.19 cycle broke etnaviv on this
platform, which gets remedied with this patch, but it also enables
ARM64.

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
From: Lucas Stach <l.stach@pengutronix.de>
Link: https://patchwork.freedesktop.org/patch/msgid/ea1f712bf09bf9439c6b092bf2c2bde7bb01cf5e.camel@pengutronix.de
parents 6bf4ca7f 1a866306
Loading
Loading
Loading
Loading
+21 −6
Original line number Diff line number Diff line
@@ -592,8 +592,6 @@ static int etnaviv_pdev_probe(struct platform_device *pdev)
	struct device *dev = &pdev->dev;
	struct component_match *match = NULL;

	dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));

	if (!dev->platform_data) {
		struct device_node *core_node;

@@ -655,13 +653,30 @@ static int __init etnaviv_init(void)
	for_each_compatible_node(np, NULL, "vivante,gc") {
		if (!of_device_is_available(np))
			continue;
		pdev = platform_device_register_simple("etnaviv", -1,
						       NULL, 0);
		if (IS_ERR(pdev)) {
			ret = PTR_ERR(pdev);

		pdev = platform_device_alloc("etnaviv", -1);
		if (!pdev) {
			ret = -ENOMEM;
			of_node_put(np);
			goto unregister_platform_driver;
		}
		pdev->dev.coherent_dma_mask = DMA_BIT_MASK(40);
		pdev->dev.dma_mask = &pdev->dev.coherent_dma_mask;

		/*
		 * Apply the same DMA configuration to the virtual etnaviv
		 * device as the GPU we found. This assumes that all Vivante
		 * GPUs in the system share the same DMA constraints.
		 */
		of_dma_configure(&pdev->dev, np, true);

		ret = platform_device_add(pdev);
		if (ret) {
			platform_device_put(pdev);
			of_node_put(np);
			goto unregister_platform_driver;
		}

		etnaviv_drm = pdev;
		of_node_put(np);
		break;