From patchwork Mon May 6 08:26:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Zimmermann X-Patchwork-Id: 10930691 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C9813924 for ; Mon, 6 May 2019 08:27:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BA3A92849B for ; Mon, 6 May 2019 08:27:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id ACC11285D9; Mon, 6 May 2019 08:27:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id A80232849B for ; Mon, 6 May 2019 08:27:03 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5C927895E2; Mon, 6 May 2019 08:26:57 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0BB5E892D4 for ; Mon, 6 May 2019 08:26:56 +0000 (UTC) X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 6B429ACBC; Mon, 6 May 2019 08:26:54 +0000 (UTC) From: Thomas Zimmermann To: daniel@ffwll.ch, airlied@linux.ie, kraxel@redhat.com, christian.koenig@amd.com, ray.huang@amd.com, hdegoede@redhat.com, noralf@tronnes.org, sam@ravnborg.org, z.liuxinliang@hisilicon.com, zourongrong@gmail.com, kong.kongxinwei@hisilicon.com, puck.chen@hisilicon.com Subject: [PATCH v4 00/19] Share TTM code among DRM framebuffer drivers Date: Mon, 6 May 2019 10:26:30 +0200 Message-Id: <20190506082649.942-1-tzimmermann@suse.de> X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Zimmermann , dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP Several simple framebuffer drivers copy most of the TTM code from each other. The implementation is always the same; except for the name of some data structures. As recently discussed, this patch set provides generic memory-management code for simple framebuffers with dedicated video memory. It further converts the respective drivers to the generic code. The shared code is basically the same implementation as the one copied among individual drivers. The patch set contains two major changes: first, it introduces |struct drm_gem_vram_object| and helpers (GEM VRAM). It's a GEM object that is backed by VRAM. The type's purpose is somewhat similar to |struct drm_gem_{cma, shmem}_object|: it provides an commom implementation that handles all the basic cases. Second, the patch set introduces |struct drm_vram_mm| and helpers (VRAM MM). It's an implementation of a basic memory manager for VRAM. Both, GEM VRAM and VRAM MM, support buffer placement in VRAM and system memory. Both can be used independedly from each other if desired by the DRM driver. Currently ast, bochs, mgag200, vboxvideo and hisilicon/hibmc can use these helpers. Future directions: with these changes, the respective drivers can also share some of their mode-setting or fbdev code. GEM VRAM could implement PRIME helpers, which would allow for using the generic fbcon. The patch set is against a recent drm-tip. v4: * cleanups from checkpatch.pl * add more documentation for VRAM helpers * remove several fixed-size types from interfaces * don't make drivers depend on DRM_TTM; auto-selected if necessary * use single config optiom DRM_VRAM_HELPER v3: * share VRAM MM callback structure among drivers * move VRAM MM instances to drm_device and share rsp. code v2: * rename |struct drm_gem_ttm_object| to |struct drm_gem_vram_object| * rename |struct drm_simple_ttm| to |struct drm_vram_mm| * make drm_is_gem_ttm() an internal helper * add drm_gem_vram_kmap_at() * return is_iomem from kmap functions * redefine TTM placement flags for public interface * add drm_vram_mm_mmap() helper * replace almost all of driver's TTM code with these helpers * documentation fixes Thomas Zimmermann (19): drm: Add |struct drm_gem_vram_object| and helpers drm: Add |struct drm_gem_vram_object| callbacks for |struct ttm_bo_driver| drm: Add |struct drm_gem_vram_object| callbacks for |struct drm_driver| drm: Add drm_gem_vram_fill_create_dumb() to create dumb buffers drm: Add VRAM MM, a simple memory manager for dedicated VRAM drm: Add default instance for VRAM MM callback functions drm: Integrate VRAM MM into struct drm_device drm/ast: Convert AST driver to |struct drm_gem_vram_object| drm/ast: Convert AST driver to VRAM MM drm/ast: Replace mapping code with drm_gem_vram_{kmap/kunmap}() drm/bochs: Convert bochs driver to |struct drm_gem_vram_object| drm/bochs: Convert bochs driver to VRAM MM drm/mgag200: Convert mgag200 driver to |struct drm_gem_vram_object| drm/mgag200: Convert mgag200 driver to VRAM MM drm/mgag200: Replace mapping code with drm_gem_vram_{kmap/kunmap}() drm/vboxvideo: Convert vboxvideo driver to |struct drm_gem_vram_object| drm/vboxvideo: Convert vboxvideo driver to VRAM MM drm/hisilicon: Convert hibmc-drm driver to |struct drm_gem_vram_object| drm/hisilicon: Convert hibmc-drm driver to VRAM MM Documentation/gpu/drm-mm.rst | 34 +- drivers/gpu/drm/Kconfig | 7 + drivers/gpu/drm/Makefile | 5 + drivers/gpu/drm/ast/Kconfig | 3 +- drivers/gpu/drm/ast/ast_drv.c | 13 +- drivers/gpu/drm/ast/ast_drv.h | 71 +- drivers/gpu/drm/ast/ast_fb.c | 34 +- drivers/gpu/drm/ast/ast_main.c | 77 +-- drivers/gpu/drm/ast/ast_mode.c | 124 ++-- drivers/gpu/drm/ast/ast_ttm.c | 302 +-------- drivers/gpu/drm/bochs/Kconfig | 2 +- drivers/gpu/drm/bochs/bochs.h | 47 +- drivers/gpu/drm/bochs/bochs_drv.c | 13 +- drivers/gpu/drm/bochs/bochs_kms.c | 18 +- drivers/gpu/drm/bochs/bochs_mm.c | 408 +----------- drivers/gpu/drm/drm_gem_vram_helper.c | 615 ++++++++++++++++++ drivers/gpu/drm/drm_vram_helper_common.c | 98 +++ drivers/gpu/drm/drm_vram_mm_helper.c | 295 +++++++++ drivers/gpu/drm/hisilicon/hibmc/Kconfig | 2 +- .../gpu/drm/hisilicon/hibmc/hibmc_drm_de.c | 21 +- .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 13 +- .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h | 33 +- .../gpu/drm/hisilicon/hibmc/hibmc_drm_fbdev.c | 30 +- drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c | 341 +--------- drivers/gpu/drm/mgag200/Kconfig | 2 +- drivers/gpu/drm/mgag200/mgag200_cursor.c | 88 +-- drivers/gpu/drm/mgag200/mgag200_drv.c | 13 +- drivers/gpu/drm/mgag200/mgag200_drv.h | 74 +-- drivers/gpu/drm/mgag200/mgag200_fb.c | 34 +- drivers/gpu/drm/mgag200/mgag200_main.c | 87 +-- drivers/gpu/drm/mgag200/mgag200_mode.c | 53 +- drivers/gpu/drm/mgag200/mgag200_ttm.c | 301 +-------- drivers/gpu/drm/vboxvideo/Kconfig | 2 +- drivers/gpu/drm/vboxvideo/vbox_drv.c | 12 +- drivers/gpu/drm/vboxvideo/vbox_drv.h | 75 +-- drivers/gpu/drm/vboxvideo/vbox_fb.c | 22 +- drivers/gpu/drm/vboxvideo/vbox_main.c | 75 +-- drivers/gpu/drm/vboxvideo/vbox_mode.c | 36 +- drivers/gpu/drm/vboxvideo/vbox_ttm.c | 355 +--------- include/drm/drm_device.h | 4 + include/drm/drm_gem_vram_helper.h | 139 ++++ include/drm/drm_vram_mm_helper.h | 101 +++ 42 files changed, 1693 insertions(+), 2386 deletions(-) create mode 100644 drivers/gpu/drm/drm_gem_vram_helper.c create mode 100644 drivers/gpu/drm/drm_vram_helper_common.c create mode 100644 drivers/gpu/drm/drm_vram_mm_helper.c create mode 100644 include/drm/drm_gem_vram_helper.h create mode 100644 include/drm/drm_vram_mm_helper.h --- 2.21.0