Module Name: src Committed By: riastradh Date: Sun Dec 19 11:00:47 UTC 2021
Modified Files: src/sys/arch/arm/rockchip: rk_anxdp.c rk_drm.c rk_dwhdmi.c rk_fb.c rk_vop.c src/sys/arch/arm/sunxi: sunxi_drm.c sunxi_dwhdmi.c sunxi_fb.c sunxi_hdmiphy.h sunxi_lcdc.c sunxi_mixer.c src/sys/dev/fdt: fdt_panel.c hdmi_connector.c src/sys/dev/i2c: anxedp.c src/sys/dev/ic: anx_dp.c anx_dp.h dw_hdmi.c dw_hdmi.h dw_hdmi_phy.c src/sys/external/bsd/dwc2: dwc2.h Log Message: Get drm to build on arm64 again. Author: Jared McNeill <jmcne...@netbsd.org> Committer: Taylor R Campbell <riastr...@netbsd.org> To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/rockchip/rk_anxdp.c cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/rockchip/rk_drm.c cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/rockchip/rk_dwhdmi.c cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/rockchip/rk_fb.c cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/rockchip/rk_vop.c cvs rdiff -u -r1.15 -r1.16 src/sys/arch/arm/sunxi/sunxi_drm.c cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/sunxi/sunxi_dwhdmi.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/sunxi/sunxi_fb.c cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/sunxi/sunxi_hdmiphy.h cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/sunxi/sunxi_lcdc.c cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arm/sunxi/sunxi_mixer.c cvs rdiff -u -r1.4 -r1.5 src/sys/dev/fdt/fdt_panel.c cvs rdiff -u -r1.2 -r1.3 src/sys/dev/fdt/hdmi_connector.c cvs rdiff -u -r1.6 -r1.7 src/sys/dev/i2c/anxedp.c cvs rdiff -u -r1.2 -r1.3 src/sys/dev/ic/anx_dp.c src/sys/dev/ic/anx_dp.h \ src/sys/dev/ic/dw_hdmi_phy.c cvs rdiff -u -r1.7 -r1.8 src/sys/dev/ic/dw_hdmi.c cvs rdiff -u -r1.6 -r1.7 src/sys/dev/ic/dw_hdmi.h cvs rdiff -u -r1.10 -r1.11 src/sys/external/bsd/dwc2/dwc2.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/rockchip/rk_anxdp.c diff -u src/sys/arch/arm/rockchip/rk_anxdp.c:1.4 src/sys/arch/arm/rockchip/rk_anxdp.c:1.5 --- src/sys/arch/arm/rockchip/rk_anxdp.c:1.4 Sun Jul 25 11:14:15 2021 +++ src/sys/arch/arm/rockchip/rk_anxdp.c Sun Dec 19 11:00:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: rk_anxdp.c,v 1.4 2021/07/25 11:14:15 jmcneill Exp $ */ +/* $NetBSD: rk_anxdp.c,v 1.5 2021/12/19 11:00:46 riastradh Exp $ */ /*- * Copyright (c) 2019 Jonathan A. Kollasch <jakll...@kollasch.net> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rk_anxdp.c,v 1.4 2021/07/25 11:14:15 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rk_anxdp.c,v 1.5 2021/12/19 11:00:46 riastradh Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -37,7 +37,7 @@ __KERNEL_RCSID(0, "$NetBSD: rk_anxdp.c,v #include <sys/kernel.h> #include <sys/conf.h> -#include <drm/drmP.h> +#include <drm/drm_drv.h> #include <drm/drm_crtc_helper.h> #include <dev/fdt/fdtvar.h> @@ -174,7 +174,7 @@ rk_anxdp_ep_activate(device_t dev, struc sc->sc_encoder.possible_crtcs = 0x2; /* VOPB only */ drm_encoder_init(crtc->dev, &sc->sc_encoder, &rk_anxdp_encoder_funcs, - DRM_MODE_ENCODER_TMDS); + DRM_MODE_ENCODER_TMDS, NULL); drm_encoder_helper_add(&sc->sc_encoder, &rk_anxdp_encoder_helper_funcs); out_ep = fdt_endpoint_get_from_index(&sc->sc_ports, ANXDP_PORT_OUTPUT, 0); Index: src/sys/arch/arm/rockchip/rk_drm.c diff -u src/sys/arch/arm/rockchip/rk_drm.c:1.7 src/sys/arch/arm/rockchip/rk_drm.c:1.8 --- src/sys/arch/arm/rockchip/rk_drm.c:1.7 Sat Aug 7 16:18:45 2021 +++ src/sys/arch/arm/rockchip/rk_drm.c Sun Dec 19 11:00:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: rk_drm.c,v 1.7 2021/08/07 16:18:45 thorpej Exp $ */ +/* $NetBSD: rk_drm.c,v 1.8 2021/12/19 11:00:46 riastradh Exp $ */ /*- * Copyright (c) 2019 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.7 2021/08/07 16:18:45 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1.8 2021/12/19 11:00:46 riastradh Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -41,9 +41,12 @@ __KERNEL_RCSID(0, "$NetBSD: rk_drm.c,v 1 #include <uvm/uvm_object.h> #include <uvm/uvm_device.h> -#include <drm/drmP.h> +#include <drm/drm_auth.h> +#include <drm/drm_drv.h> #include <drm/drm_crtc_helper.h> #include <drm/drm_fb_helper.h> +#include <drm/drm_fourcc.h> +#include <drm/drm_vblank.h> #include <dev/fdt/fdtvar.h> #include <dev/fdt/fdt_port.h> @@ -79,10 +82,10 @@ static int rk_drm_enable_vblank(struct d static void rk_drm_disable_vblank(struct drm_device *, unsigned int); static int rk_drm_load(struct drm_device *, unsigned long); -static int rk_drm_unload(struct drm_device *); +static void rk_drm_unload(struct drm_device *); static struct drm_driver rk_drm_driver = { - .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME, + .driver_features = DRIVER_MODESET | DRIVER_GEM, .dev_priv_size = 0, .load = rk_drm_load, .unload = rk_drm_unload, @@ -92,7 +95,6 @@ static struct drm_driver rk_drm_driver = .gem_uvm_ops = &drm_gem_cma_uvm_ops, .dumb_create = drm_gem_cma_dumb_create, - .dumb_map_offset = drm_gem_cma_dumb_map_offset, .dumb_destroy = drm_gem_dumb_destroy, .get_vblank_counter = rk_drm_get_vblank_counter, @@ -168,7 +170,6 @@ rk_drm_init(device_t dev) error = -drm_dev_register(sc->sc_ddev, 0); if (error) { - drm_dev_unref(sc->sc_ddev); aprint_error_dev(dev, "couldn't register DRM device: %d\n", error); return; @@ -230,7 +231,7 @@ rk_drm_fb_destroy(struct drm_framebuffer struct rk_drm_framebuffer *sfb = to_rk_drm_framebuffer(fb); drm_framebuffer_cleanup(fb); - drm_gem_object_unreference_unlocked(&sfb->obj->base); + drm_gem_object_put_unlocked(&sfb->obj->base); kmem_free(sfb, sizeof(*sfb)); } @@ -241,7 +242,7 @@ static const struct drm_framebuffer_func static struct drm_framebuffer * rk_drm_fb_create(struct drm_device *ddev, struct drm_file *file, - struct drm_mode_fb_cmd2 *cmd) + const struct drm_mode_fb_cmd2 *cmd) { struct rk_drm_framebuffer *fb; struct drm_gem_object *gem_obj; @@ -250,7 +251,7 @@ rk_drm_fb_create(struct drm_device *ddev if (cmd->flags) return NULL; - gem_obj = drm_gem_object_lookup(ddev, file, cmd->handles[0]); + gem_obj = drm_gem_object_lookup(file, cmd->handles[0]); if (gem_obj == NULL) return NULL; @@ -264,17 +265,7 @@ rk_drm_fb_create(struct drm_device *ddev fb->base.offsets[2] = cmd->offsets[1]; fb->base.width = cmd->width; fb->base.height = cmd->height; - fb->base.pixel_format = cmd->pixel_format; - fb->base.bits_per_pixel = drm_format_plane_cpp(fb->base.pixel_format, 0) * 8; - - switch (fb->base.pixel_format) { - case DRM_FORMAT_XRGB8888: - case DRM_FORMAT_ARGB8888: - fb->base.depth = 32; - break; - default: - break; - } + fb->base.format = drm_format_info(cmd->pixel_format); error = drm_framebuffer_init(ddev, &fb->base, &rk_drm_framebuffer_funcs); if (error != 0) @@ -285,7 +276,7 @@ rk_drm_fb_create(struct drm_device *ddev dealloc: drm_framebuffer_cleanup(&fb->base); kmem_free(fb, sizeof(*fb)); - drm_gem_object_unreference_unlocked(gem_obj); + drm_gem_object_put_unlocked(gem_obj); return NULL; } @@ -331,11 +322,10 @@ rk_drm_fb_probe(struct drm_fb_helper *he fb->width = width; fb->height = height; #ifdef __ARM_BIG_ENDIAN - fb->pixel_format = DRM_FORMAT_BGRX8888; + fb->format = drm_format_info(DRM_FORMAT_BGRX8888); #else - fb->pixel_format = DRM_FORMAT_XRGB8888; + fb->format = drm_format_info(DRM_FORMAT_XRGB8888); #endif - drm_fb_get_bpp_depth(fb->pixel_format, &fb->depth, &fb->bits_per_pixel); error = drm_framebuffer_init(ddev, fb, &rk_drm_framebuffer_funcs); if (error != 0) { @@ -414,7 +404,7 @@ rk_drm_load(struct drm_device *ddev, uns drm_fb_helper_prepare(ddev, &fbdev->helper, &rk_drm_fb_helper_funcs); - error = drm_fb_helper_init(ddev, &fbdev->helper, num_crtc, num_crtc); + error = drm_fb_helper_init(ddev, &fbdev->helper, num_crtc); if (error) goto allocerr; @@ -484,12 +474,10 @@ rk_drm_disable_vblank(struct drm_device sc->sc_vbl[crtc].disable_vblank(sc->sc_vbl[crtc].priv); } -static int +static void rk_drm_unload(struct drm_device *ddev) { drm_mode_config_cleanup(ddev); - - return 0; } int Index: src/sys/arch/arm/rockchip/rk_dwhdmi.c diff -u src/sys/arch/arm/rockchip/rk_dwhdmi.c:1.5 src/sys/arch/arm/rockchip/rk_dwhdmi.c:1.6 --- src/sys/arch/arm/rockchip/rk_dwhdmi.c:1.5 Wed Jan 27 03:10:19 2021 +++ src/sys/arch/arm/rockchip/rk_dwhdmi.c Sun Dec 19 11:00:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: rk_dwhdmi.c,v 1.5 2021/01/27 03:10:19 thorpej Exp $ */ +/* $NetBSD: rk_dwhdmi.c,v 1.6 2021/12/19 11:00:46 riastradh Exp $ */ /*- * Copyright (c) 2019 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rk_dwhdmi.c,v 1.5 2021/01/27 03:10:19 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rk_dwhdmi.c,v 1.6 2021/12/19 11:00:46 riastradh Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -37,7 +37,7 @@ __KERNEL_RCSID(0, "$NetBSD: rk_dwhdmi.c, #include <sys/kernel.h> #include <sys/conf.h> -#include <drm/drmP.h> +#include <drm/drm_drv.h> #include <drm/drm_crtc_helper.h> #include <dev/fdt/fdtvar.h> @@ -189,7 +189,7 @@ rk_dwhdmi_ep_activate(device_t dev, stru sc->sc_encoder.possible_crtcs = 3; // 1U << drm_crtc_index(crtc); /* XXX */ drm_encoder_init(crtc->dev, &sc->sc_encoder, &rk_dwhdmi_encoder_funcs, - DRM_MODE_ENCODER_TMDS); + DRM_MODE_ENCODER_TMDS, NULL); drm_encoder_helper_add(&sc->sc_encoder, &rk_dwhdmi_encoder_helper_funcs); sc->sc_base.sc_connector.base.connector_type = DRM_MODE_CONNECTOR_HDMIA; @@ -230,7 +230,7 @@ rk_dwhdmi_enable(struct dwhdmi_softc *ds static void rk_dwhdmi_mode_set(struct dwhdmi_softc *dsc, - struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode) + const struct drm_display_mode *mode, const struct drm_display_mode *adjusted_mode) { struct rk_dwhdmi_softc * const sc = to_rk_dwhdmi_softc(dsc); int error; Index: src/sys/arch/arm/rockchip/rk_fb.c diff -u src/sys/arch/arm/rockchip/rk_fb.c:1.2 src/sys/arch/arm/rockchip/rk_fb.c:1.3 --- src/sys/arch/arm/rockchip/rk_fb.c:1.2 Fri May 21 09:33:27 2021 +++ src/sys/arch/arm/rockchip/rk_fb.c Sun Dec 19 11:00:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: rk_fb.c,v 1.2 2021/05/21 09:33:27 jmcneill Exp $ */ +/* $NetBSD: rk_fb.c,v 1.3 2021/12/19 11:00:46 riastradh Exp $ */ /*- * Copyright (c) 2015-2019 Jared McNeill <jmcne...@invisible.ca> @@ -29,7 +29,7 @@ #include "opt_wsdisplay_compat.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rk_fb.c,v 1.2 2021/05/21 09:33:27 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rk_fb.c,v 1.3 2021/12/19 11:00:46 riastradh Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -37,7 +37,7 @@ __KERNEL_RCSID(0, "$NetBSD: rk_fb.c,v 1. #include <dev/fdt/fdtvar.h> -#include <drm/drmP.h> +#include <drm/drm_drv.h> #include <drm/drmfb.h> #include <arm/rockchip/rk_drm.h> Index: src/sys/arch/arm/rockchip/rk_vop.c diff -u src/sys/arch/arm/rockchip/rk_vop.c:1.10 src/sys/arch/arm/rockchip/rk_vop.c:1.11 --- src/sys/arch/arm/rockchip/rk_vop.c:1.10 Wed Jan 27 03:10:19 2021 +++ src/sys/arch/arm/rockchip/rk_vop.c Sun Dec 19 11:00:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: rk_vop.c,v 1.10 2021/01/27 03:10:19 thorpej Exp $ */ +/* $NetBSD: rk_vop.c,v 1.11 2021/12/19 11:00:46 riastradh Exp $ */ /*- * Copyright (c) 2019 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rk_vop.c,v 1.10 2021/01/27 03:10:19 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rk_vop.c,v 1.11 2021/12/19 11:00:46 riastradh Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -38,9 +38,10 @@ __KERNEL_RCSID(0, "$NetBSD: rk_vop.c,v 1 #include <sys/conf.h> #include <sys/sysctl.h> -#include <drm/drmP.h> +#include <drm/drm_drv.h> #include <drm/drm_crtc.h> #include <drm/drm_crtc_helper.h> +#include <drm/drm_fourcc.h> #include <drm/drm_plane_helper.h> #include <dev/fdt/fdtvar.h> @@ -241,7 +242,7 @@ rk_vop_mode_do_set_base(struct drm_crtc paddr += y * sfb->base.pitches[0]; - paddr += x * drm_format_plane_cpp(sfb->base.pixel_format, 0); + paddr += x * sfb->base.format->cpp[0]; KASSERT((paddr & ~0xffffffff) == 0); @@ -311,7 +312,8 @@ rk_vop_mode_set(struct drm_crtc *crtc, s int error; u_int pol; int connector_type = 0; - struct drm_connector * connector; + struct drm_connector *connector; + struct drm_connector_list_iter conn_iter; const u_int hactive = adjusted_mode->hdisplay; const u_int hsync_len = adjusted_mode->hsync_end - adjusted_mode->hsync_start; @@ -363,14 +365,16 @@ rk_vop_mode_set(struct drm_crtc *crtc, s if ((adjusted_mode->flags & DRM_MODE_FLAG_PVSYNC) != 0) pol |= DSP_VSYNC_POL; - drm_for_each_connector(connector, crtc->dev) { - if ((connector->encoder) == NULL) + drm_connector_list_iter_begin(crtc->dev, &conn_iter); + drm_for_each_connector_iter(connector, &conn_iter) { + if (connector->encoder == NULL) continue; if (connector->encoder->crtc == crtc) { connector_type = connector->connector_type; break; } } + drm_connector_list_iter_end(&conn_iter); switch (connector_type) { case DRM_MODE_CONNECTOR_HDMIA: Index: src/sys/arch/arm/sunxi/sunxi_drm.c diff -u src/sys/arch/arm/sunxi/sunxi_drm.c:1.15 src/sys/arch/arm/sunxi/sunxi_drm.c:1.16 --- src/sys/arch/arm/sunxi/sunxi_drm.c:1.15 Sat Aug 7 16:18:45 2021 +++ src/sys/arch/arm/sunxi/sunxi_drm.c Sun Dec 19 11:00:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: sunxi_drm.c,v 1.15 2021/08/07 16:18:45 thorpej Exp $ */ +/* $NetBSD: sunxi_drm.c,v 1.16 2021/12/19 11:00:46 riastradh Exp $ */ /*- * Copyright (c) 2019 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sunxi_drm.c,v 1.15 2021/08/07 16:18:45 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sunxi_drm.c,v 1.16 2021/12/19 11:00:46 riastradh Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -41,9 +41,12 @@ __KERNEL_RCSID(0, "$NetBSD: sunxi_drm.c, #include <uvm/uvm_object.h> #include <uvm/uvm_device.h> -#include <drm/drmP.h> +#include <drm/drm_auth.h> #include <drm/drm_crtc_helper.h> +#include <drm/drm_drv.h> #include <drm/drm_fb_helper.h> +#include <drm/drm_fourcc.h> +#include <drm/drm_vblank.h> #include <dev/fdt/fdtvar.h> #include <dev/fdt/fdt_port.h> @@ -88,10 +91,10 @@ static int sunxi_drm_enable_vblank(struc static void sunxi_drm_disable_vblank(struct drm_device *, unsigned int); static int sunxi_drm_load(struct drm_device *, unsigned long); -static int sunxi_drm_unload(struct drm_device *); +static void sunxi_drm_unload(struct drm_device *); static struct drm_driver sunxi_drm_driver = { - .driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_PRIME, + .driver_features = DRIVER_MODESET | DRIVER_GEM, .dev_priv_size = 0, .load = sunxi_drm_load, .unload = sunxi_drm_unload, @@ -101,7 +104,6 @@ static struct drm_driver sunxi_drm_drive .gem_uvm_ops = &drm_gem_cma_uvm_ops, .dumb_create = drm_gem_cma_dumb_create, - .dumb_map_offset = drm_gem_cma_dumb_map_offset, .dumb_destroy = drm_gem_dumb_destroy, .get_vblank_counter = sunxi_drm_get_vblank_counter, @@ -177,7 +179,6 @@ sunxi_drm_init(device_t dev) error = -drm_dev_register(sc->sc_ddev, 0); if (error) { - drm_dev_unref(sc->sc_ddev); aprint_error_dev(dev, "couldn't register DRM device: %d\n", error); return; @@ -239,7 +240,7 @@ sunxi_drm_fb_destroy(struct drm_framebuf struct sunxi_drm_framebuffer *sfb = to_sunxi_drm_framebuffer(fb); drm_framebuffer_cleanup(fb); - drm_gem_object_unreference_unlocked(&sfb->obj->base); + drm_gem_object_put_unlocked(&sfb->obj->base); kmem_free(sfb, sizeof(*sfb)); } @@ -250,7 +251,7 @@ static const struct drm_framebuffer_func static struct drm_framebuffer * sunxi_drm_fb_create(struct drm_device *ddev, struct drm_file *file, - struct drm_mode_fb_cmd2 *cmd) + const struct drm_mode_fb_cmd2 *cmd) { struct sunxi_drm_framebuffer *fb; struct drm_gem_object *gem_obj; @@ -259,7 +260,7 @@ sunxi_drm_fb_create(struct drm_device *d if (cmd->flags) return NULL; - gem_obj = drm_gem_object_lookup(ddev, file, cmd->handles[0]); + gem_obj = drm_gem_object_lookup(file, cmd->handles[0]); if (gem_obj == NULL) return NULL; @@ -273,17 +274,7 @@ sunxi_drm_fb_create(struct drm_device *d fb->base.offsets[2] = cmd->offsets[1]; fb->base.width = cmd->width; fb->base.height = cmd->height; - fb->base.pixel_format = cmd->pixel_format; - fb->base.bits_per_pixel = drm_format_plane_cpp(fb->base.pixel_format, 0) * 8; - - switch (fb->base.pixel_format) { - case DRM_FORMAT_XRGB8888: - case DRM_FORMAT_ARGB8888: - fb->base.depth = 32; - break; - default: - break; - } + fb->base.format = drm_format_info(cmd->pixel_format); error = drm_framebuffer_init(ddev, &fb->base, &sunxi_drm_framebuffer_funcs); if (error != 0) @@ -294,7 +285,7 @@ sunxi_drm_fb_create(struct drm_device *d dealloc: drm_framebuffer_cleanup(&fb->base); kmem_free(fb, sizeof(*fb)); - drm_gem_object_unreference_unlocked(gem_obj); + drm_gem_object_put_unlocked(gem_obj); return NULL; } @@ -391,8 +382,7 @@ sunxi_drm_fb_probe(struct drm_fb_helper fb->offsets[0] = 0; fb->width = width; fb->height = height; - fb->pixel_format = DRM_FORMAT_XRGB8888; - drm_fb_get_bpp_depth(fb->pixel_format, &fb->depth, &fb->bits_per_pixel); + fb->format = drm_format_info(DRM_FORMAT_XRGB8888); error = drm_framebuffer_init(ddev, fb, &sunxi_drm_framebuffer_funcs); if (error != 0) { @@ -469,7 +459,7 @@ sunxi_drm_load(struct drm_device *ddev, drm_fb_helper_prepare(ddev, &fbdev->helper, &sunxi_drm_fb_helper_funcs); - error = drm_fb_helper_init(ddev, &fbdev->helper, num_crtc, num_crtc); + error = drm_fb_helper_init(ddev, &fbdev->helper, num_crtc); if (error) goto allocerr; @@ -539,12 +529,10 @@ sunxi_drm_disable_vblank(struct drm_devi sc->sc_vbl[crtc].disable_vblank(sc->sc_vbl[crtc].priv); } -static int +static void sunxi_drm_unload(struct drm_device *ddev) { drm_mode_config_cleanup(ddev); - - return 0; } int Index: src/sys/arch/arm/sunxi/sunxi_dwhdmi.c diff -u src/sys/arch/arm/sunxi/sunxi_dwhdmi.c:1.9 src/sys/arch/arm/sunxi/sunxi_dwhdmi.c:1.10 --- src/sys/arch/arm/sunxi/sunxi_dwhdmi.c:1.9 Wed Jan 27 03:10:20 2021 +++ src/sys/arch/arm/sunxi/sunxi_dwhdmi.c Sun Dec 19 11:00:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: sunxi_dwhdmi.c,v 1.9 2021/01/27 03:10:20 thorpej Exp $ */ +/* $NetBSD: sunxi_dwhdmi.c,v 1.10 2021/12/19 11:00:46 riastradh Exp $ */ /*- * Copyright (c) 2019 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sunxi_dwhdmi.c,v 1.9 2021/01/27 03:10:20 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sunxi_dwhdmi.c,v 1.10 2021/12/19 11:00:46 riastradh Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -37,7 +37,7 @@ __KERNEL_RCSID(0, "$NetBSD: sunxi_dwhdmi #include <sys/kernel.h> #include <sys/conf.h> -#include <drm/drmP.h> +#include <drm/drm_drv.h> #include <dev/fdt/fdtvar.h> #include <dev/fdt/fdt_port.h> @@ -183,8 +183,9 @@ sunxi_dwhdmi_disable(struct dwhdmi_softc } static void -sunxi_dwhdmi_mode_set(struct dwhdmi_softc *dsc, struct drm_display_mode *mode, - struct drm_display_mode *adjusted_mode) +sunxi_dwhdmi_mode_set(struct dwhdmi_softc *dsc, + const struct drm_display_mode *mode, + const struct drm_display_mode *adjusted_mode) { struct sunxi_dwhdmi_softc * const sc = to_sunxi_dwhdmi_softc(dsc); int error; Index: src/sys/arch/arm/sunxi/sunxi_fb.c diff -u src/sys/arch/arm/sunxi/sunxi_fb.c:1.3 src/sys/arch/arm/sunxi/sunxi_fb.c:1.4 --- src/sys/arch/arm/sunxi/sunxi_fb.c:1.3 Wed Jan 30 10:55:44 2019 +++ src/sys/arch/arm/sunxi/sunxi_fb.c Sun Dec 19 11:00:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: sunxi_fb.c,v 1.3 2019/01/30 10:55:44 jmcneill Exp $ */ +/* $NetBSD: sunxi_fb.c,v 1.4 2021/12/19 11:00:46 riastradh Exp $ */ /*- * Copyright (c) 2015-2019 Jared McNeill <jmcne...@invisible.ca> @@ -29,7 +29,7 @@ #include "opt_wsdisplay_compat.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sunxi_fb.c,v 1.3 2019/01/30 10:55:44 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sunxi_fb.c,v 1.4 2021/12/19 11:00:46 riastradh Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -37,7 +37,7 @@ __KERNEL_RCSID(0, "$NetBSD: sunxi_fb.c,v #include <dev/fdt/fdtvar.h> -#include <drm/drmP.h> +#include <drm/drm_drv.h> #include <drm/drmfb.h> #include <arm/sunxi/sunxi_drm.h> Index: src/sys/arch/arm/sunxi/sunxi_hdmiphy.h diff -u src/sys/arch/arm/sunxi/sunxi_hdmiphy.h:1.2 src/sys/arch/arm/sunxi/sunxi_hdmiphy.h:1.3 --- src/sys/arch/arm/sunxi/sunxi_hdmiphy.h:1.2 Sat Nov 23 12:30:45 2019 +++ src/sys/arch/arm/sunxi/sunxi_hdmiphy.h Sun Dec 19 11:00:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: sunxi_hdmiphy.h,v 1.2 2019/11/23 12:30:45 jmcneill Exp $ */ +/* $NetBSD: sunxi_hdmiphy.h,v 1.3 2021/12/19 11:00:46 riastradh Exp $ */ /*- * Copyright (c) 2019 Jared McNeill <jmcne...@invisible.ca> @@ -29,7 +29,7 @@ #ifndef _ARM_SUNXI_HDMIPHY_H #define _ARM_SUNXI_HDMIPHY_H -#include <drm/drmP.h> +#include <drm/drm_drv.h> #include <drm/drm_modes.h> void sunxi_hdmiphy_init(struct fdtbus_phy *); Index: src/sys/arch/arm/sunxi/sunxi_lcdc.c diff -u src/sys/arch/arm/sunxi/sunxi_lcdc.c:1.12 src/sys/arch/arm/sunxi/sunxi_lcdc.c:1.13 --- src/sys/arch/arm/sunxi/sunxi_lcdc.c:1.12 Wed Jan 27 03:10:20 2021 +++ src/sys/arch/arm/sunxi/sunxi_lcdc.c Sun Dec 19 11:00:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: sunxi_lcdc.c,v 1.12 2021/01/27 03:10:20 thorpej Exp $ */ +/* $NetBSD: sunxi_lcdc.c,v 1.13 2021/12/19 11:00:46 riastradh Exp $ */ /*- * Copyright (c) 2019 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sunxi_lcdc.c,v 1.12 2021/01/27 03:10:20 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sunxi_lcdc.c,v 1.13 2021/12/19 11:00:46 riastradh Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -37,8 +37,9 @@ __KERNEL_RCSID(0, "$NetBSD: sunxi_lcdc.c #include <sys/kernel.h> #include <sys/conf.h> -#include <drm/drmP.h> +#include <drm/drm_drv.h> #include <drm/drm_crtc_helper.h> +#include <drm/drm_vblank.h> #include <dev/fdt/fdtvar.h> #include <dev/fdt/fdt_port.h> @@ -410,7 +411,7 @@ sunxi_lcdc_ep_activate(device_t dev, str out_ep = fdt_endpoint_get_from_index(&sc->sc_ports, TCON_PORT_OUTPUT, 0); if (out_ep != NULL) { drm_encoder_init(crtc->dev, &sc->sc_encoder.base, &sunxi_lcdc_funcs, - sunxi_lcdc_encoder_mode(out_ep)); + sunxi_lcdc_encoder_mode(out_ep), NULL); drm_encoder_helper_add(&sc->sc_encoder.base, &sunxi_lcdc_tcon0_helper_funcs); sunxi_lcdc_setup_vblank(sc); @@ -421,7 +422,7 @@ sunxi_lcdc_ep_activate(device_t dev, str out_ep = fdt_endpoint_get_from_index(&sc->sc_ports, TCON_PORT_OUTPUT, 1); if (out_ep != NULL) { drm_encoder_init(crtc->dev, &sc->sc_encoder.base, &sunxi_lcdc_funcs, - sunxi_lcdc_encoder_mode(out_ep)); + sunxi_lcdc_encoder_mode(out_ep), NULL); drm_encoder_helper_add(&sc->sc_encoder.base, &sunxi_lcdc_tcon1_helper_funcs); sunxi_lcdc_setup_vblank(sc); Index: src/sys/arch/arm/sunxi/sunxi_mixer.c diff -u src/sys/arch/arm/sunxi/sunxi_mixer.c:1.16 src/sys/arch/arm/sunxi/sunxi_mixer.c:1.17 --- src/sys/arch/arm/sunxi/sunxi_mixer.c:1.16 Wed Jan 27 03:10:20 2021 +++ src/sys/arch/arm/sunxi/sunxi_mixer.c Sun Dec 19 11:00:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: sunxi_mixer.c,v 1.16 2021/01/27 03:10:20 thorpej Exp $ */ +/* $NetBSD: sunxi_mixer.c,v 1.17 2021/12/19 11:00:46 riastradh Exp $ */ /*- * Copyright (c) 2019 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sunxi_mixer.c,v 1.16 2021/01/27 03:10:20 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sunxi_mixer.c,v 1.17 2021/12/19 11:00:46 riastradh Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -38,10 +38,12 @@ __KERNEL_RCSID(0, "$NetBSD: sunxi_mixer. #include <sys/conf.h> #include <sys/sysctl.h> -#include <drm/drmP.h> +#include <drm/drm_drv.h> #include <drm/drm_crtc.h> #include <drm/drm_crtc_helper.h> +#include <drm/drm_fourcc.h> #include <drm/drm_plane_helper.h> +#include <drm/drm_vblank.h> #include <dev/fdt/fdtvar.h> #include <dev/fdt/fdt_port.h> @@ -282,7 +284,7 @@ sunxi_mixer_mode_do_set_base(struct drm_ uint64_t paddr = (uint64_t)sfb->obj->dmamap->dm_segs[0].ds_addr; paddr += y * sfb->base.pitches[0]; - paddr += x * drm_format_plane_cpp(sfb->base.pixel_format, 0); + paddr += x * sfb->base.format->cpp[0]; uint32_t haddr = (paddr >> 32) & OVL_UI_TOP_HADD_LAYER0; uint32_t laddr = paddr & 0xffffffff; @@ -308,7 +310,8 @@ sunxi_mixer_destroy(struct drm_crtc *crt static int sunxi_mixer_page_flip(struct drm_crtc *crtc, struct drm_framebuffer *fb, - struct drm_pending_vblank_event *event, uint32_t flags) + struct drm_pending_vblank_event *event, uint32_t flags, + struct drm_modeset_acquire_ctx *ctx) { struct sunxi_mixer_crtc *mixer_crtc = to_sunxi_mixer_crtc(crtc); struct sunxi_mixer_softc * const sc = mixer_crtc->sc; @@ -323,7 +326,7 @@ sunxi_mixer_page_flip(struct drm_crtc *c if (event) { spin_lock_irqsave(&crtc->dev->event_lock, irqflags); - drm_send_vblank_event(crtc->dev, drm_crtc_index(crtc), event); + drm_crtc_send_vblank_event(crtc, event); spin_unlock_irqrestore(&crtc->dev->event_lock, irqflags); } @@ -362,7 +365,7 @@ sunxi_mixer_cursor_set(struct drm_crtc * goto done; } - gem_obj = drm_gem_object_lookup(crtc->dev, file_priv, handle); + gem_obj = drm_gem_object_lookup(file_priv, handle); if (gem_obj == NULL) { DRM_ERROR("Cannot find cursor object %#x for crtc %d\n", handle, drm_crtc_index(crtc)); @@ -431,7 +434,7 @@ done: } if (gem_obj != NULL) - drm_gem_object_unreference_unlocked(gem_obj); + drm_gem_object_put_unlocked(gem_obj); return error; } @@ -515,7 +518,7 @@ sunxi_mixer_mode_set(struct drm_crtc *cr BLD_WRITE(sc, BLD_SIZE, size); /* Enable UI overlay */ - if (crtc->primary->fb->pixel_format == DRM_FORMAT_XRGB8888) + if (crtc->primary->fb->format->format == DRM_FORMAT_XRGB8888) fbfmt = OVL_UI_ATTR_CTL_LAY_FBFMT_XRGB_8888; else fbfmt = OVL_UI_ATTR_CTL_LAY_FBFMT_ARGB_8888; @@ -1009,13 +1012,13 @@ static const uint32_t lan2coefftab32[512 static void sunxi_mixer_vsu_init(struct sunxi_mixer_softc *sc, u_int src_w, u_int src_h, - u_int crtc_w, u_int crtc_h, uint32_t pixel_format) + u_int crtc_w, u_int crtc_h, const struct drm_format_info *format) { const u_int hstep = (src_w << 16) / crtc_w; const u_int vstep = (src_h << 16) / crtc_h; - const int hsub = drm_format_horz_chroma_subsampling(pixel_format); - const int vsub = drm_format_vert_chroma_subsampling(pixel_format); + const int hsub = format->hsub; + const int vsub = format->vsub; const u_int src_cw = src_w / hsub; const u_int src_ch = src_h / vsub; @@ -1078,14 +1081,15 @@ sunxi_mixer_csc_disable(struct sunxi_mix static int sunxi_mixer_overlay_update_plane(struct drm_plane *plane, struct drm_crtc *crtc, struct drm_framebuffer *fb, int crtc_x, int crtc_y, u_int crtc_w, u_int crtc_h, - uint32_t src_x, uint32_t src_y, uint32_t src_w, uint32_t src_h) + uint32_t src_x, uint32_t src_y, uint32_t src_w, uint32_t src_h, + struct drm_modeset_acquire_ctx *ctx) { struct sunxi_mixer_plane *overlay = to_sunxi_mixer_plane(plane); struct sunxi_mixer_softc * const sc = overlay->sc; struct sunxi_drm_framebuffer *sfb = to_sunxi_drm_framebuffer(fb); uint32_t val; - const u_int fbfmt = sunxi_mixer_overlay_format(fb->pixel_format); + const u_int fbfmt = sunxi_mixer_overlay_format(fb->format->format); const uint64_t paddr = (uint64_t)sfb->obj->dmamap->dm_segs[0].ds_addr; const uint32_t input_size = (((src_h >> 16) - 1) << 16) | ((src_w >> 16) - 1); @@ -1101,13 +1105,13 @@ sunxi_mixer_overlay_update_plane(struct OVL_V_WRITE(sc, OVL_V_PITCH2(0), fb->pitches[1]); const uint64_t paddr0 = paddr + fb->offsets[0] + - (src_x >> 16) * drm_format_plane_cpp(fb->pixel_format, 0) + + (src_x >> 16) * fb->format->cpp[0] + (src_y >> 16) * fb->pitches[0]; const uint64_t paddr1 = paddr + fb->offsets[2] + - (src_x >> 16) * drm_format_plane_cpp(fb->pixel_format, 2) + + (src_x >> 16) * fb->format->cpp[2] + (src_y >> 16) * fb->pitches[2]; const uint64_t paddr2 = paddr + fb->offsets[1] + - (src_x >> 16) * drm_format_plane_cpp(fb->pixel_format, 1) + + (src_x >> 16) * fb->format->cpp[1] + (src_y >> 16) * fb->pitches[1]; OVL_V_WRITE(sc, OVL_V_TOP_HADD0, (paddr0 >> 32) & OVL_V_TOP_HADD_LAYER0); @@ -1122,16 +1126,16 @@ sunxi_mixer_overlay_update_plane(struct val = OVL_V_ATTCTL_LAY0_EN; val |= __SHIFTIN(fbfmt, OVL_V_ATTCTL_LAY_FBFMT); - if (sunxi_mixer_overlay_rgb(fb->pixel_format) == true) + if (sunxi_mixer_overlay_rgb(fb->format->format) == true) val |= OVL_V_ATTCTL_VIDEO_UI_SEL; OVL_V_WRITE(sc, OVL_V_ATTCTL(0), val); /* Enable video scaler */ - sunxi_mixer_vsu_init(sc, src_w >> 16, src_h >> 16, crtc_w, crtc_h, fb->pixel_format); + sunxi_mixer_vsu_init(sc, src_w >> 16, src_h >> 16, crtc_w, crtc_h, fb->format); /* Enable colour space conversion for non-RGB formats */ - if (sunxi_mixer_overlay_rgb(fb->pixel_format) == false) - sunxi_mixer_csc_init(sc, fb->pixel_format); + if (sunxi_mixer_overlay_rgb(fb->format->format) == false) + sunxi_mixer_csc_init(sc, fb->format->format); else sunxi_mixer_csc_disable(sc); @@ -1157,7 +1161,8 @@ sunxi_mixer_overlay_update_plane(struct } static int -sunxi_mixer_overlay_disable_plane(struct drm_plane *plane) +sunxi_mixer_overlay_disable_plane(struct drm_plane *plane, + struct drm_modeset_acquire_ctx *ctx) { struct sunxi_mixer_plane *overlay = to_sunxi_mixer_plane(plane); struct sunxi_mixer_softc * const sc = overlay->sc; @@ -1231,7 +1236,7 @@ sunxi_mixer_ep_activate(device_t dev, st drm_universal_plane_init(ddev, &sc->sc_overlay.base, 1 << drm_crtc_index(&sc->sc_crtc.base), &sunxi_mixer_overlay_funcs, sunxi_mixer_overlay_formats, __arraycount(sunxi_mixer_overlay_formats), - DRM_PLANE_TYPE_OVERLAY); + NULL, DRM_PLANE_TYPE_OVERLAY, NULL); return fdt_endpoint_activate(ep, activate); } Index: src/sys/dev/fdt/fdt_panel.c diff -u src/sys/dev/fdt/fdt_panel.c:1.4 src/sys/dev/fdt/fdt_panel.c:1.5 --- src/sys/dev/fdt/fdt_panel.c:1.4 Sun Nov 7 17:11:58 2021 +++ src/sys/dev/fdt/fdt_panel.c Sun Dec 19 11:00:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: fdt_panel.c,v 1.4 2021/11/07 17:11:58 jmcneill Exp $ */ +/* $NetBSD: fdt_panel.c,v 1.5 2021/12/19 11:00:46 riastradh Exp $ */ /*- * Copyright (c) 2019 Jonathan A. Kollasch <jakll...@kollasch.net> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fdt_panel.c,v 1.4 2021/11/07 17:11:58 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fdt_panel.c,v 1.5 2021/12/19 11:00:46 riastradh Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -40,7 +40,7 @@ __KERNEL_RCSID(0, "$NetBSD: fdt_panel.c, #include <dev/i2c/ddcvar.h> -#include <drm/drmP.h> +#include <drm/drm_drv.h> #include <drm/drm_panel.h> #include <drm/drm_edid.h> @@ -158,7 +158,7 @@ panel_fdt_attach(device_t parent, device sc->sc_ports.dp_ep_get_data = panel_fdt_ep_get_data; fdt_ports_register(&sc->sc_ports, self, phandle, EP_DRM_PANEL); - drm_panel_init(&sc->sc_panel); + drm_panel_init(&sc->sc_panel, self, &panel_fdt_funcs, DRM_MODE_CONNECTOR_DPI); sc->sc_panel.funcs = &panel_fdt_funcs; drm_panel_add(&sc->sc_panel); Index: src/sys/dev/fdt/hdmi_connector.c diff -u src/sys/dev/fdt/hdmi_connector.c:1.2 src/sys/dev/fdt/hdmi_connector.c:1.3 --- src/sys/dev/fdt/hdmi_connector.c:1.2 Wed Jan 27 03:10:21 2021 +++ src/sys/dev/fdt/hdmi_connector.c Sun Dec 19 11:00:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: hdmi_connector.c,v 1.2 2021/01/27 03:10:21 thorpej Exp $ */ +/* $NetBSD: hdmi_connector.c,v 1.3 2021/12/19 11:00:46 riastradh Exp $ */ /*- * Copyright (c) 2019 Jared McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: hdmi_connector.c,v 1.2 2021/01/27 03:10:21 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: hdmi_connector.c,v 1.3 2021/12/19 11:00:46 riastradh Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -40,10 +40,11 @@ __KERNEL_RCSID(0, "$NetBSD: hdmi_connect #include <dev/i2c/ddcvar.h> -#include <drm/drmP.h> +#include <drm/drm_drv.h> #include <drm/drm_crtc.h> #include <drm/drm_crtc_helper.h> #include <drm/drm_edid.h> +#include <drm/drm_probe_helper.h> static const struct device_compatible_entry compat_data[] = { { .compat = "hdmi-connector" }, @@ -132,38 +133,16 @@ dispcon_hdmi_connector_get_modes(struct } } - drm_mode_connector_update_edid_property(connector, pedid); + drm_connector_update_edid_property(connector, pedid); if (pedid == NULL) return 0; - error = drm_add_edid_modes(connector, pedid); - drm_edid_to_eld(connector, pedid); - - return error; -} - -static struct drm_encoder * -dispcon_hdmi_connector_best_encoder(struct drm_connector *connector) -{ - int enc_id = connector->encoder_ids[0]; - struct drm_mode_object *obj; - struct drm_encoder *encoder = NULL; - - if (enc_id) { - obj = drm_mode_object_find(connector->dev, enc_id, - DRM_MODE_OBJECT_ENCODER); - if (obj == NULL) - return NULL; - encoder = obj_to_encoder(obj); - } - - return encoder; + return drm_add_edid_modes(connector, pedid); } static const struct drm_connector_helper_funcs dispcon_hdmi_connector_helper_funcs = { .mode_valid = dispcon_hdmi_connector_mode_valid, .get_modes = dispcon_hdmi_connector_get_modes, - .best_encoder = dispcon_hdmi_connector_best_encoder, }; static int @@ -191,7 +170,7 @@ dispcon_hdmi_ep_activate(device_t dev, s hdmi_connector->type); drm_connector_helper_add(connector, &dispcon_hdmi_connector_helper_funcs); drm_connector_register(connector); - drm_mode_connector_attach_encoder(connector, encoder); + drm_connector_attach_encoder(connector, encoder); } return 0; Index: src/sys/dev/i2c/anxedp.c diff -u src/sys/dev/i2c/anxedp.c:1.6 src/sys/dev/i2c/anxedp.c:1.7 --- src/sys/dev/i2c/anxedp.c:1.6 Wed Jan 27 02:29:48 2021 +++ src/sys/dev/i2c/anxedp.c Sun Dec 19 11:00:47 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: anxedp.c,v 1.6 2021/01/27 02:29:48 thorpej Exp $ */ +/* $NetBSD: anxedp.c,v 1.7 2021/12/19 11:00:47 riastradh Exp $ */ /*- * Copyright (c) 2019 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: anxedp.c,v 1.6 2021/01/27 02:29:48 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: anxedp.c,v 1.7 2021/12/19 11:00:47 riastradh Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -48,10 +48,12 @@ __KERNEL_RCSID(0, "$NetBSD: anxedp.c,v 1 #include <dev/fdt/fdtvar.h> #include <dev/fdt/fdt_port.h> -#include <drm/drmP.h> +#include <drm/drm_drv.h> +#include <drm/drm_connector.h> #include <drm/drm_crtc.h> #include <drm/drm_crtc_helper.h> #include <drm/drm_edid.h> +#include <drm/drm_probe_helper.h> #define ANX_DP_AUX_CH_CTL_1 0xe5 #define ANX_AUX_LENGTH __BITS(7,4) @@ -253,37 +255,15 @@ anxedp_connector_get_modes(struct drm_co if (error == 0) pedid = (struct edid *)edid; - drm_mode_connector_update_edid_property(connector, pedid); + drm_connector_update_edid_property(connector, pedid); if (pedid == NULL) return 0; - error = drm_add_edid_modes(connector, pedid); - drm_edid_to_eld(connector, pedid); - - return error; -} - -static struct drm_encoder * -anxedp_connector_best_encoder(struct drm_connector *connector) -{ - int enc_id = connector->encoder_ids[0]; - struct drm_mode_object *obj; - struct drm_encoder *encoder = NULL; - - if (enc_id) { - obj = drm_mode_object_find(connector->dev, enc_id, - DRM_MODE_OBJECT_ENCODER); - if (obj == NULL) - return NULL; - encoder = obj_to_encoder(obj); - } - - return encoder; + return drm_add_edid_modes(connector, pedid); } static const struct drm_connector_helper_funcs anxedp_connector_helper_funcs = { .get_modes = anxedp_connector_get_modes, - .best_encoder = anxedp_connector_best_encoder, }; static int @@ -304,7 +284,7 @@ anxedp_bridge_attach(struct drm_bridge * connector->connector_type); drm_connector_helper_add(connector, &anxedp_connector_helper_funcs); - error = drm_mode_connector_attach_encoder(connector, bridge->encoder); + error = drm_connector_attach_encoder(connector, bridge->encoder); if (error != 0) return error; @@ -333,7 +313,8 @@ anxedp_bridge_post_disable(struct drm_br static void anxedp_bridge_mode_set(struct drm_bridge *bridge, - struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode) + const struct drm_display_mode *mode, + const struct drm_display_mode *adjusted_mode) { struct anxedp_softc * const sc = bridge->driver_private; @@ -394,12 +375,10 @@ anxedp_ep_activate(device_t dev, struct sc->sc_bridge.funcs = &anxedp_bridge_funcs; sc->sc_bridge.encoder = encoder; - error = drm_bridge_attach(encoder->dev, &sc->sc_bridge); + error = drm_bridge_attach(encoder, &sc->sc_bridge, NULL); if (error != 0) return EIO; - encoder->bridge = &sc->sc_bridge; - return 0; } Index: src/sys/dev/ic/anx_dp.c diff -u src/sys/dev/ic/anx_dp.c:1.2 src/sys/dev/ic/anx_dp.c:1.3 --- src/sys/dev/ic/anx_dp.c:1.2 Sat Jan 4 12:08:32 2020 +++ src/sys/dev/ic/anx_dp.c Sun Dec 19 11:00:47 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: anx_dp.c,v 1.2 2020/01/04 12:08:32 jmcneill Exp $ */ +/* $NetBSD: anx_dp.c,v 1.3 2021/12/19 11:00:47 riastradh Exp $ */ /*- * Copyright (c) 2019 Jonathan A. Kollasch <jakll...@kollasch.net> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: anx_dp.c,v 1.2 2020/01/04 12:08:32 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: anx_dp.c,v 1.3 2021/12/19 11:00:47 riastradh Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -43,7 +43,7 @@ __KERNEL_RCSID(0, "$NetBSD: anx_dp.c,v 1 #include <dev/audio/audio_dai.h> #endif -#include <drm/drmP.h> +#include <drm/drm_drv.h> #include <drm/drm_crtc.h> #include <drm/drm_crtc_helper.h> #include <drm/drm_dp_helper.h> @@ -198,6 +198,13 @@ __KERNEL_RCSID(0, "$NetBSD: anx_dp.c,v 1 #define ANXDP_PLL_REG_4 0x9ec #define ANXDP_PLL_REG_5 0xa00 +struct anxdp_link { + uint8_t revision; + u_int rate; + u_int num_lanes; + bool enhanced_framing; +}; + #if ANXDP_AUDIO enum anxdp_dai_mixer_ctrl { ANXDP_DAI_OUTPUT_CLASS, @@ -348,12 +355,11 @@ anxdp_connector_get_modes(struct drm_con } #endif - drm_mode_connector_update_edid_property(connector, pedid); + drm_connector_update_edid_property(connector, pedid); if (pedid == NULL) return 0; error = drm_add_edid_modes(connector, pedid); - drm_edid_to_eld(connector, pedid); if (pedid != NULL) kfree(pedid); @@ -361,27 +367,8 @@ anxdp_connector_get_modes(struct drm_con return error; } -static struct drm_encoder * -anxdp_connector_best_encoder(struct drm_connector *connector) -{ - int enc_id = connector->encoder_ids[0]; - struct drm_mode_object *obj; - struct drm_encoder *encoder = NULL; - - if (enc_id) { - obj = drm_mode_object_find(connector->dev, enc_id, - DRM_MODE_OBJECT_ENCODER); - if (obj == NULL) - return NULL; - encoder = obj_to_encoder(obj); - } - - return encoder; -} - static const struct drm_connector_helper_funcs anxdp_connector_helper_funcs = { .get_modes = anxdp_connector_get_modes, - .best_encoder = anxdp_connector_best_encoder, }; static int @@ -403,7 +390,7 @@ anxdp_bridge_attach(struct drm_bridge *b connector->connector_type); drm_connector_helper_add(connector, &anxdp_connector_helper_funcs); - error = drm_mode_connector_attach_encoder(connector, bridge->encoder); + error = drm_connector_attach_encoder(connector, bridge->encoder); if (error != 0) return error; @@ -424,16 +411,22 @@ anxdp_macro_reset(struct anxdp_softc * c } static void -anxdp_link_start(struct anxdp_softc * const sc, struct drm_dp_link * const link) +anxdp_link_start(struct anxdp_softc * const sc, struct anxdp_link * const link) { uint8_t training[4]; + uint8_t bw[2]; uint32_t val; bus_space_write_4(sc->sc_bst, sc->sc_bsh, ANXDP_LINK_BW_SET, drm_dp_link_rate_to_bw_code(link->rate)); bus_space_write_4(sc->sc_bst, sc->sc_bsh, ANXDP_LANE_COUNT_SET, link->num_lanes); - if (0 != drm_dp_link_configure(&sc->sc_dpaux, link)) - return; + bw[0] = drm_dp_link_rate_to_bw_code(link->rate); + bw[1] = link->num_lanes; + if (link->enhanced_framing) + bw[1] |= DP_LANE_COUNT_ENHANCED_FRAME_EN; + if (drm_dp_dpcd_write(&sc->sc_dpaux, DP_LINK_BW_SET, bw, sizeof(bw)) < 0) + return; + for (u_int i = 0; i < link->num_lanes; i++) { val = bus_space_read_4(sc->sc_bst, sc->sc_bsh, ANXDP_LNx_LINK_TRAINING_CTL(i)); @@ -458,7 +451,7 @@ anxdp_link_start(struct anxdp_softc * co static void anxdp_process_clock_recovery(struct anxdp_softc * const sc, - struct drm_dp_link * const link) + struct anxdp_link * const link) { u_int i, tries; uint8_t link_status[DP_LINK_STATUS_SIZE]; @@ -503,7 +496,7 @@ cr_fail: } static void -anxdp_process_eq(struct anxdp_softc * const sc, struct drm_dp_link * const link) +anxdp_process_eq(struct anxdp_softc * const sc, struct anxdp_link * const link) { u_int i, tries; uint8_t link_status[DP_LINK_STATUS_SIZE]; @@ -550,16 +543,32 @@ eq_fail: static void anxdp_train_link(struct anxdp_softc * const sc) { - struct drm_dp_link link; + struct anxdp_link link; + uint8_t values[3], power; anxdp_macro_reset(sc); - if (0 != drm_dp_link_probe(&sc->sc_dpaux, &link)) { + if (drm_dp_dpcd_read(&sc->sc_dpaux, DP_DPCD_REV, values, sizeof(values)) < 0) { device_printf(sc->sc_dev, "link probe failed\n"); return; } - if (0 != drm_dp_link_power_up(&sc->sc_dpaux, &link)) - return; + memset(&link, 0, sizeof(link)); + link.revision = values[0]; + link.rate = drm_dp_bw_code_to_link_rate(values[1]); + link.num_lanes = values[2] & DP_MAX_LANE_COUNT_MASK; + if (values[2] & DP_ENHANCED_FRAME_CAP) + link.enhanced_framing = true; + + if (link.revision >= 0x11) { + if (drm_dp_dpcd_readb(&sc->sc_dpaux, DP_SET_POWER, &power) < 0) + return; + power &= ~DP_SET_POWER_MASK; + power |= DP_SET_POWER_D0; + if (drm_dp_dpcd_writeb(&sc->sc_dpaux, DP_SET_POWER, power) < 0) + return; + delay(2000); + } + if (DP_RECEIVER_CAP_SIZE != drm_dp_dpcd_read(&sc->sc_dpaux, DP_DPCD_REV, sc->sc_dpcd, DP_RECEIVER_CAP_SIZE)) return; @@ -718,7 +727,7 @@ anxdp_bridge_post_disable(struct drm_bri static void anxdp_bridge_mode_set(struct drm_bridge *bridge, - struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode) + const struct drm_display_mode *mode, const struct drm_display_mode *adjusted_mode) { struct anxdp_softc * const sc = bridge->driver_private; @@ -1043,12 +1052,10 @@ anxdp_bind(struct anxdp_softc *sc, struc sc->sc_bridge.funcs = &anxdp_bridge_funcs; sc->sc_bridge.encoder = encoder; - error = drm_bridge_attach(encoder->dev, &sc->sc_bridge); + error = drm_bridge_attach(encoder, &sc->sc_bridge, NULL); if (error != 0) return EIO; - encoder->bridge = &sc->sc_bridge; - if (sc->sc_panel != NULL && sc->sc_panel->funcs != NULL && sc->sc_panel->funcs->prepare != NULL) sc->sc_panel->funcs->prepare(sc->sc_panel); Index: src/sys/dev/ic/anx_dp.h diff -u src/sys/dev/ic/anx_dp.h:1.2 src/sys/dev/ic/anx_dp.h:1.3 --- src/sys/dev/ic/anx_dp.h:1.2 Sat Jan 4 12:08:32 2020 +++ src/sys/dev/ic/anx_dp.h Sun Dec 19 11:00:47 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: anx_dp.h,v 1.2 2020/01/04 12:08:32 jmcneill Exp $ */ +/* $NetBSD: anx_dp.h,v 1.3 2021/12/19 11:00:47 riastradh Exp $ */ /*- * Copyright (c) 2019 Jonathan A. Kollasch <jakll...@kollasch.net> @@ -33,9 +33,12 @@ #include <dev/audio/audio_dai.h> #endif -#include <drm/drmP.h> +#include <drm/drm_drv.h> +#include <drm/drm_bridge.h> +#include <drm/drm_connector.h> #include <drm/drm_dp_helper.h> #include <drm/drm_panel.h> +#include <drm/drm_probe_helper.h> struct anxdp_softc; Index: src/sys/dev/ic/dw_hdmi_phy.c diff -u src/sys/dev/ic/dw_hdmi_phy.c:1.2 src/sys/dev/ic/dw_hdmi_phy.c:1.3 --- src/sys/dev/ic/dw_hdmi_phy.c:1.2 Sun Nov 10 10:36:01 2019 +++ src/sys/dev/ic/dw_hdmi_phy.c Sun Dec 19 11:00:47 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: dw_hdmi_phy.c,v 1.2 2019/11/10 10:36:01 jmcneill Exp $ */ +/* $NetBSD: dw_hdmi_phy.c,v 1.3 2021/12/19 11:00:47 riastradh Exp $ */ /*- * Copyright (c) 2015 Oleksandr Tymoshenko <go...@freebsd.org> @@ -27,11 +27,11 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: dw_hdmi_phy.c,v 1.2 2019/11/10 10:36:01 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: dw_hdmi_phy.c,v 1.3 2021/12/19 11:00:47 riastradh Exp $"); #include <sys/param.h> -#include <drm/drmP.h> +#include <drm/drm_drv.h> #include <dev/ic/dw_hdmi.h> @@ -267,7 +267,7 @@ dwhdmi_phy_test_clear(struct dwhdmi_soft } static int -dwhdmi_phy_configure(struct dwhdmi_softc *sc, struct drm_display_mode *mode) +dwhdmi_phy_configure(struct dwhdmi_softc *sc, const struct drm_display_mode *mode) { const struct dwhdmi_mpll_config *mpll_conf; const struct dwhdmi_phy_config *phy_conf; @@ -355,7 +355,7 @@ dwhdmi_phy_configure(struct dwhdmi_softc } static void -dwhdmi_phy_init(struct dwhdmi_softc *sc, struct drm_display_mode *mode) +dwhdmi_phy_init(struct dwhdmi_softc *sc, const struct drm_display_mode *mode) { int i; @@ -395,7 +395,8 @@ dwhdmi_phy_disable(struct dwhdmi_softc * void dwhdmi_phy_mode_set(struct dwhdmi_softc *sc, - struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode) + const struct drm_display_mode *mode, + const struct drm_display_mode *adjusted_mode) { dwhdmi_phy_init(sc, adjusted_mode); } Index: src/sys/dev/ic/dw_hdmi.c diff -u src/sys/dev/ic/dw_hdmi.c:1.7 src/sys/dev/ic/dw_hdmi.c:1.8 --- src/sys/dev/ic/dw_hdmi.c:1.7 Sun Dec 22 23:23:32 2019 +++ src/sys/dev/ic/dw_hdmi.c Sun Dec 19 11:00:47 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: dw_hdmi.c,v 1.7 2019/12/22 23:23:32 thorpej Exp $ */ +/* $NetBSD: dw_hdmi.c,v 1.8 2021/12/19 11:00:47 riastradh Exp $ */ /*- * Copyright (c) 2019 Jared D. McNeill <jmcne...@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: dw_hdmi.c,v 1.7 2019/12/22 23:23:32 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: dw_hdmi.c,v 1.8 2021/12/19 11:00:47 riastradh Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -47,10 +47,11 @@ __KERNEL_RCSID(0, "$NetBSD: dw_hdmi.c,v #include <dev/audio/audio_dai.h> -#include <drm/drmP.h> +#include <drm/drm_drv.h> #include <drm/drm_crtc.h> #include <drm/drm_crtc_helper.h> #include <drm/drm_edid.h> +#include <drm/drm_probe_helper.h> #define HDMI_DESIGN_ID 0x0000 #define HDMI_REVISION_ID 0x0001 @@ -601,37 +602,15 @@ dwhdmi_connector_get_modes(struct drm_co dwhdmi_connector->monitor_audio = false; } - drm_mode_connector_update_edid_property(connector, pedid); + drm_connector_update_edid_property(connector, pedid); if (pedid == NULL) return 0; - error = drm_add_edid_modes(connector, pedid); - drm_edid_to_eld(connector, pedid); - - return error; -} - -static struct drm_encoder * -dwhdmi_connector_best_encoder(struct drm_connector *connector) -{ - int enc_id = connector->encoder_ids[0]; - struct drm_mode_object *obj; - struct drm_encoder *encoder = NULL; - - if (enc_id) { - obj = drm_mode_object_find(connector->dev, enc_id, - DRM_MODE_OBJECT_ENCODER); - if (obj == NULL) - return NULL; - encoder = obj_to_encoder(obj); - } - - return encoder; + return drm_add_edid_modes(connector, pedid); } static const struct drm_connector_helper_funcs dwhdmi_connector_helper_funcs = { .get_modes = dwhdmi_connector_get_modes, - .best_encoder = dwhdmi_connector_best_encoder, }; static int @@ -652,7 +631,7 @@ dwhdmi_bridge_attach(struct drm_bridge * DRM_MODE_CONNECTOR_HDMIA); drm_connector_helper_add(connector, &dwhdmi_connector_helper_funcs); - error = drm_mode_connector_attach_encoder(connector, bridge->encoder); + error = drm_connector_attach_encoder(connector, bridge->encoder); if (error != 0) return error; @@ -700,7 +679,8 @@ dwhdmi_bridge_post_disable(struct drm_br static void dwhdmi_bridge_mode_set(struct drm_bridge *bridge, - struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode) + const struct drm_display_mode *mode, + const struct drm_display_mode *adjusted_mode) { struct dwhdmi_softc * const sc = bridge->driver_private; @@ -917,11 +897,9 @@ dwhdmi_bind(struct dwhdmi_softc *sc, str sc->sc_bridge.funcs = &dwhdmi_bridge_funcs; sc->sc_bridge.encoder = encoder; - error = drm_bridge_attach(encoder->dev, &sc->sc_bridge); + error = drm_bridge_attach(encoder, &sc->sc_bridge, NULL); if (error != 0) return EIO; - encoder->bridge = &sc->sc_bridge; - return 0; } Index: src/sys/dev/ic/dw_hdmi.h diff -u src/sys/dev/ic/dw_hdmi.h:1.6 src/sys/dev/ic/dw_hdmi.h:1.7 --- src/sys/dev/ic/dw_hdmi.h:1.6 Sun Dec 22 23:23:32 2019 +++ src/sys/dev/ic/dw_hdmi.h Sun Dec 19 11:00:47 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: dw_hdmi.h,v 1.6 2019/12/22 23:23:32 thorpej Exp $ */ +/* $NetBSD: dw_hdmi.h,v 1.7 2021/12/19 11:00:47 riastradh Exp $ */ /*- * Copyright (c) 2019 Jared D. McNeill <jmcne...@invisible.ca> @@ -34,7 +34,10 @@ #include <dev/audio/audio_dai.h> -#include <drm/drmP.h> +#include <drm/drm_drv.h> +#include <drm/drm_bridge.h> +#include <drm/drm_connector.h> +#include <drm/drm_modes.h> struct dwhdmi_softc; @@ -91,8 +94,8 @@ struct dwhdmi_softc { void (*sc_enable)(struct dwhdmi_softc *); void (*sc_disable)(struct dwhdmi_softc *); void (*sc_mode_set)(struct dwhdmi_softc *, - struct drm_display_mode *, - struct drm_display_mode *); + const struct drm_display_mode *, + const struct drm_display_mode *); }; #define to_dwhdmi_connector(x) container_of(x, struct dwhdmi_connector, base) @@ -107,7 +110,7 @@ enum drm_connector_status dwhdmi_phy_det void dwhdmi_phy_enable(struct dwhdmi_softc *); void dwhdmi_phy_disable(struct dwhdmi_softc *); void dwhdmi_phy_mode_set(struct dwhdmi_softc *, - struct drm_display_mode *, - struct drm_display_mode *); + const struct drm_display_mode *, + const struct drm_display_mode *); #endif /* !_DEV_IC_DWHDMI_H */ Index: src/sys/external/bsd/dwc2/dwc2.h diff -u src/sys/external/bsd/dwc2/dwc2.h:1.10 src/sys/external/bsd/dwc2/dwc2.h:1.11 --- src/sys/external/bsd/dwc2/dwc2.h:1.10 Mon Aug 27 17:13:07 2018 +++ src/sys/external/bsd/dwc2/dwc2.h Sun Dec 19 11:00:47 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: dwc2.h,v 1.10 2018/08/27 17:13:07 riastradh Exp $ */ +/* $NetBSD: dwc2.h,v 1.11 2021/12/19 11:00:47 riastradh Exp $ */ /*- * Copyright (c) 2013 The NetBSD Foundation, Inc. @@ -41,6 +41,7 @@ #include <linux/list.h> #include <linux/workqueue.h> +#include <linux/bug.h> #include "opt_usb.h" // #define VERBOSE_DEBUG @@ -70,7 +71,6 @@ typedef int irqreturn_t; #ifdef DWC2_DEBUG extern int dwc2debug; -#define WARN_ON(x) KASSERT(!(x)) #define dev_info(d,fmt,...) do { \ printf("%s: " fmt, device_xname(d), \ @@ -97,7 +97,6 @@ extern int dwc2debug; } \ } while (0) #else -#define WARN_ON(x) #define dev_info(...) do { } while (0) #define dev_warn(...) do { } while (0) #define dev_err(...) do { } while (0)