Merge tag 'drm-misc-next-fixes-2021-04-22' of git://anongit.freedesktop.org/drm/drm-misc into drm-next

A few fixes for the next merge window, with some build fixes for anx7625
and lt8912b bridges, incorrect error handling for lt8912b and TTM, and
one fix for TTM page limit accounting.

Signed-off-by: Dave Airlie <airlied@redhat.com>

From: Maxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20210422163329.dvbuwre3akwdmzjt@gilmour

+40 -25
+3
drivers/gpu/drm/bridge/Kconfig
··· 66 66 depends on OF 67 67 select DRM_PANEL_BRIDGE 68 68 select DRM_KMS_HELPER 69 + select DRM_MIPI_DSI 69 70 select REGMAP_I2C 70 71 help 71 72 Driver for Lontium LT8912B DSI to HDMI bridge ··· 82 81 depends on OF 83 82 select DRM_PANEL_BRIDGE 84 83 select DRM_KMS_HELPER 84 + select DRM_MIPI_DSI 85 85 select REGMAP_I2C 86 86 help 87 87 Driver for Lontium LT9611 DSI to HDMI bridge ··· 96 94 depends on OF 97 95 select DRM_PANEL_BRIDGE 98 96 select DRM_KMS_HELPER 97 + select DRM_MIPI_DSI 99 98 select REGMAP_I2C 100 99 help 101 100 Driver for Lontium LT9611UXC DSI to HDMI bridge
+1
drivers/gpu/drm/bridge/analogix/Kconfig
··· 30 30 tristate "Analogix Anx7625 MIPI to DP interface support" 31 31 depends on DRM 32 32 depends on OF 33 + select DRM_MIPI_DSI 33 34 help 34 35 ANX7625 is an ultra-low power 4K mobile HD transmitter 35 36 designed for portable devices. It converts MIPI/DPI to
+17 -15
drivers/gpu/drm/bridge/lontium-lt8912b.c
··· 622 622 { 623 623 struct gpio_desc *gp_reset; 624 624 struct device *dev = lt->dev; 625 - int ret = 0; 625 + int ret; 626 + int data_lanes; 626 627 struct device_node *port_node; 627 628 struct device_node *endpoint; 628 629 ··· 637 636 lt->gp_reset = gp_reset; 638 637 639 638 endpoint = of_graph_get_endpoint_by_regs(dev->of_node, 0, -1); 640 - if (IS_ERR(endpoint)) { 641 - ret = PTR_ERR(endpoint); 642 - goto end; 643 - } 639 + if (!endpoint) 640 + return -ENODEV; 644 641 645 - lt->data_lanes = of_property_count_u32_elems(endpoint, "data-lanes"); 642 + data_lanes = of_property_count_u32_elems(endpoint, "data-lanes"); 646 643 of_node_put(endpoint); 644 + if (data_lanes < 0) { 645 + dev_err(lt->dev, "%s: Bad data-lanes property\n", __func__); 646 + return data_lanes; 647 + } 648 + lt->data_lanes = data_lanes; 647 649 648 650 lt->host_node = of_graph_get_remote_node(dev->of_node, 0, -1); 649 651 if (!lt->host_node) { 650 652 dev_err(lt->dev, "%s: Failed to get remote port\n", __func__); 651 - ret = -ENODEV; 652 - goto end; 653 + return -ENODEV; 653 654 } 654 655 655 656 port_node = of_graph_get_remote_node(dev->of_node, 1, -1); ··· 662 659 } 663 660 664 661 lt->hdmi_port = of_drm_find_bridge(port_node); 665 - if (IS_ERR(lt->hdmi_port)) { 662 + if (!lt->hdmi_port) { 666 663 dev_err(lt->dev, "%s: Failed to get hdmi port\n", __func__); 667 - ret = PTR_ERR(lt->hdmi_port); 668 - of_node_put(lt->host_node); 669 - goto end; 664 + ret = -ENODEV; 665 + goto err_free_host_node; 670 666 } 671 667 672 668 if (!of_device_is_compatible(port_node, "hdmi-connector")) { 673 669 dev_err(lt->dev, "%s: Failed to get hdmi port\n", __func__); 674 670 ret = -EINVAL; 671 + goto err_free_host_node; 675 672 } 676 673 677 674 of_node_put(port_node); 678 - 679 - end: 680 - return ret; 675 + return 0; 681 676 682 677 err_free_host_node: 678 + of_node_put(port_node); 683 679 of_node_put(lt->host_node); 684 680 return ret; 685 681 }
+19 -10
drivers/gpu/drm/ttm/ttm_tt.c
··· 317 317 if (ttm_tt_is_populated(ttm)) 318 318 return 0; 319 319 320 - atomic_long_add(ttm->num_pages, &ttm_pages_allocated); 321 - if (bdev->pool.use_dma32) 322 - atomic_long_add(ttm->num_pages, &ttm_dma32_pages_allocated); 320 + if (!(ttm->page_flags & TTM_PAGE_FLAG_SG)) { 321 + atomic_long_add(ttm->num_pages, &ttm_pages_allocated); 322 + if (bdev->pool.use_dma32) 323 + atomic_long_add(ttm->num_pages, 324 + &ttm_dma32_pages_allocated); 325 + } 323 326 324 327 while (atomic_long_read(&ttm_pages_allocated) > ttm_pages_limit || 325 328 atomic_long_read(&ttm_dma32_pages_allocated) > 326 329 ttm_dma32_pages_limit) { 327 330 328 331 ret = ttm_global_swapout(ctx, GFP_KERNEL); 329 - if (ret) 332 + if (ret < 0) 330 333 goto error; 331 334 } 332 335 ··· 353 350 return 0; 354 351 355 352 error: 356 - atomic_long_sub(ttm->num_pages, &ttm_pages_allocated); 357 - if (bdev->pool.use_dma32) 358 - atomic_long_sub(ttm->num_pages, &ttm_dma32_pages_allocated); 353 + if (!(ttm->page_flags & TTM_PAGE_FLAG_SG)) { 354 + atomic_long_sub(ttm->num_pages, &ttm_pages_allocated); 355 + if (bdev->pool.use_dma32) 356 + atomic_long_sub(ttm->num_pages, 357 + &ttm_dma32_pages_allocated); 358 + } 359 359 return ret; 360 360 } 361 361 EXPORT_SYMBOL(ttm_tt_populate); ··· 388 382 else 389 383 ttm_pool_free(&bdev->pool, ttm); 390 384 391 - atomic_long_sub(ttm->num_pages, &ttm_pages_allocated); 392 - if (bdev->pool.use_dma32) 393 - atomic_long_sub(ttm->num_pages, &ttm_dma32_pages_allocated); 385 + if (!(ttm->page_flags & TTM_PAGE_FLAG_SG)) { 386 + atomic_long_sub(ttm->num_pages, &ttm_pages_allocated); 387 + if (bdev->pool.use_dma32) 388 + atomic_long_sub(ttm->num_pages, 389 + &ttm_dma32_pages_allocated); 390 + } 394 391 395 392 ttm->page_flags &= ~TTM_PAGE_FLAG_PRIV_POPULATED; 396 393 }