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