From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 42245EB64DA for ; Wed, 28 Jun 2023 06:53:39 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8A69910E360; Wed, 28 Jun 2023 06:53:37 +0000 (UTC) Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by gabe.freedesktop.org (Postfix) with ESMTP id 186BB10E081 for ; Wed, 28 Jun 2023 01:20:42 +0000 (UTC) Received: from loongson.cn (unknown [10.20.42.43]) by gateway (Coremail) with SMTP id _____8Dxvsfmiptk1UwDAA--.5206S3; Wed, 28 Jun 2023 09:20:38 +0800 (CST) Received: from [10.20.42.43] (unknown [10.20.42.43]) by localhost.localdomain (Coremail) with SMTP id AQAAf8BxxsziiptkaEoNAA--.29910S3; Wed, 28 Jun 2023 09:20:35 +0800 (CST) Message-ID: <36a4de86-9ce2-385f-188b-71e76b3cb9e8@loongson.cn> Date: Wed, 28 Jun 2023 09:20:34 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Subject: Re: [PATCH v15 1/2] drm: Add kms driver for loongson display controller To: liyi , Sui Jingfeng <15330273260@189.cn>, Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter , Sumit Semwal , Christian Koenig References: <20230615143613.1236245-1-15330273260@189.cn> <20230615143613.1236245-2-15330273260@189.cn> <876700a9-a9e5-4f85-477a-88b8c85947c8@loongson.cn> Content-Language: en-US From: Sui Jingfeng Organization: Loongson In-Reply-To: <876700a9-a9e5-4f85-477a-88b8c85947c8@loongson.cn> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-CM-TRANSID: AQAAf8BxxsziiptkaEoNAA--.29910S3 X-CM-SenderInfo: xvxlyxpqjiv03j6o00pqjv00gofq/ X-Coremail-Antispam: 1Uk129KBj9DXoWktw4xZw1DtrW8Gr15Gr48uFX_yoW5XryfJw c_Aw4Uur1UWr1UJ3yUJr1UJr1jvF9rJr1jyw1DJr45Ar1UG3ZrJrs5Ar15Jwn5Jr1UWr4U JF17Jr15Ja43JF1UXosvyTuYvTs0mTUanT9S1TB71UUUUjJqnTZGkaVYY2UrUUUUj1kv1T uYvTs0mT0YCTnIWjqI5I8CrVACY4xI64kE6c02F40Ex7xfYxn0WfASr-VFAUDa7-sFnT9f nUUIcSsGvfJTRUUUbDkYFVCjjxCrM7AC8VAFwI0_Jr0_Gr1l1xkIjI8I6I8E6xAIw20EY4 v20xvaj40_Wr0E3s1l1IIY67AEw4v_Jrv_JF1l8cAvFVAK0II2c7xJM28CjxkF64kEwVA0 rcxSw2x7M28EF7xvwVC0I7IYx2IY67AKxVW8JVW5JwA2z4x0Y4vE2Ix0cI8IcVCY1x0267 AKxVW8JVWxJwA2z4x0Y4vEx4A2jsIE14v26r4j6F4UM28EF7xvwVC2z280aVCY1x0267AK xVW8JVW8Jr1ln4kS14v26r126r1DM2AIxVAIcxkEcVAq07x20xvEncxIr21l57IF6xkI12 xvs2x26I8E6xACxx1l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r12 6r1DMcIj6I8E87Iv67AKxVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IY64vIr4 1lc7I2V7IY0VAS07AlzVAYIcxG8wCY1x0262kKe7AKxVWUAVWUtwCF04k20xvY0x0EwIxG rwCFx2IqxVCFs4IE7xkEbVWUJVW8JwCFI7km07C267AKxVWUAVWUtwC20s026c02F40E14 v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_GFv_WrylIxkG c2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUCVW8JwCI42IY6xIIjxv20xvEc7CjxVAFwI 0_Jr0_Gr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r4U MIIF0xvEx4A2jsIEc7CjxVAFwI0_Jr0_GrUvcSsGvfC2KfnxnUUI43ZEXa7IU8Dl1DUUUU U== X-Mailman-Approved-At: Wed, 28 Jun 2023 06:53:36 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Nathan Chancellor , inux-kernel@vger.kernel.org, Geert Uytterhoeven , Emil Velikov , dri-devel@lists.freedesktop.org, loongson-kernel@lists.loongnix.cn, Liu Peibao , linux-media@vger.kernel.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Hi On 2023/6/25 15:56, liyi wrote: > The patch is tested  on  3A5000 + 7A2000 board ,  it looks  works good. > > Tested-by: Li Yi  > Thanks a lot. >> From: Sui Jingfeng >> >> Loongson display controller IP has been integrated in both Loongson >> north >> bridge chipset (ls7a1000/ls7a2000) and Loongson SoCs >> (ls2k1000/ls2k2000). >> It has even been included in Loongson's BMC products. It has two display >> pipes, and each display pipe supports a primary plane and a cursor >> plane. >> >> For the DC in the LS7a1000, each display pipe has a DVO output >> interface, >> which is able to support 1920x1080@60Hz. For the DC in the LS7A2000, >> each >> display pipe is equipped with a built-in HDMI encoder, which is >> compliant >> with the HDMI 1.4 specification. The first display pipe is also equipped >> with a transparent VGA encoder, which is parallel with the HDMI encoder. >> To get a decent performance for writing framebuffer data to the VRAM, >> the >> write combine support should be enabled. >> >> v1 -> v2: >>   1) Use hpd status reg when polling for ls7a2000. >>   2) Fix all warnings that emerged when compiling with W=1. >> >> v2 -> v3: >>   1) Add COMPILE_TEST to Kconfig and make the driver off by default >>   2) Alphabetical sorting headers (Thomas) >>   3) Untangle register access functions as much as possible (Thomas) >>   4) Switch to TTM-based memory manager (Thomas) >>   5) Add the chip ID detection function which can be used to distinguish >>      chip models >>   6) Revise the built-in HDMI phy driver, nearly all main stream mode >> below >>      4K@30Hz is tested, and this driver supports clone(mirror) >> display mode >>      and extend(joint) display mode. >> >> v3 -> v4: >>   1) Quickly fix a small mistake. >> >> v4 -> v5: >>   1) Add per display pipe debugfs support to the builtin HDMI encoder. >> >> v5 -> v6: >>   1) Remove stray code which didn't get used, say >> lsdc_of_get_reserved_ram >>   2) Fix all typos I could found, make sentences and code more readable >>   3) Untangle lsdc_hdmi*_connector_detect() function according to the >> pipe >>   4) Rename this driver as loongson. >> >> v6 -> v7: >> 1) Add prime support for buffer self-sharing, sharing buffer with >>     drm/etnaviv is also tested and it works with limitations. >> 2) Implement buffer object tracking with list_head. >> 3) Add S3(sleep to RAM) support >> 4) Rewrite lsdc_bo_move since TTM core stop allocating resources >>      during BO creation. Patch V1 ~ V6 of this series no longer work. >>      Thus, we send V7. >> >> v7 -> v8: >>   1) Zero a compile warning on a 32-bit platform, compile with W=1 >>   2) Revise lsdc_bo_gpu_offset() and make minor cleanups. >>   3) Pageflip tested on the virtual terminal with the following >> commands: >> >>      modetest -M loongson -s 32:1920x1080 -v >>      modetest -M loongson -s 34:1920x1080 -v -F tiles >> >>     It works like a charm, when running the pageflip test with dual >> screens >>     configuration, another two additional BOs were created by the >> modetest, >>     VRAM usage up to 40+ MB, well we have at least 64MB, still enough. >> >>     # cat bos >> >>         bo[0000]: size:     8112kB VRAM >>         bo[0001]: size:       16kB VRAM >>         bo[0002]: size:       16kB VRAM >>         bo[0003]: size:    16208kB VRAM >>         bo[0004]: size:     8112kB VRAM >>         bo[0005]: size:     8112kB VRAM >> >> v8 -> v9: >>   1) Select I2C and I2C_ALGOBIT in Kconfig, should depend on MMU. >>   2) Using pci_get_domain_bus_and_slot to get the GPU device. >> >> v9 -> v10: >>   1) Revise lsdc_drm_freeze() to implement S3 correctly. We realized >> that >>      the pinned BO could not be moved, the VRAM lost power when sleeping >>      to RAM. Thus, the data in the buffer who is pinned in VRAM will get >>      lost when resumed. Yet it's not a big problem because this driver >>      relies on the CPU to update the front framebuffer. We can see the >>      garbage data when resume from S3, but the screen will show the >> right >>      image as I move the cursor. This is due to the CPU repaint. v10 of >>      this patch makes S3 perfect by unpin all of the BOs in VRAM, evict >>      them all to system RAM in lsdc_drm_freeze(). >> >> v10 -> v11: >>   1) On a double-screen case, The buffer object backing the single giant >>      framebuffer is referenced by two GEM objects; hence, it will be >>      pinned at least twice by prepare_fb() function. This causes its pin >>      count > 1. V10 of this patch only unpins VRAM BOs once when >> suspend, >>      which is not correct on double-screen case. V11 of this patch unpin >>      the BOs until its pin count reaches zero when suspend. Then, we >> make >>      the S3 support complete finally. With v11, I can't see any garbage >>      data when resume. >> >>   2) Fix vblank wait timeout when disable CRTC. >>   3) Test against IGT, at least fbdev test and kms_flip test passed. >>   4) Rewrite pixel PLL update function, magic numbers eliminated (Emil) >>   5) Drop a few common hardware features description in lsdc_desc (Emil) >>   6) Drop lsdc_mode_config_mode_valid(), instead add restrictions in >> dumb >>      create function. (Emil) >>   7) Untangle the ls7a1000 case and ls7a2000 case completely (Thomas) >> >> v11 -> v12: >>   none >> >> v12 -> v13: >>   1) Add benchmarks to figure out the bandwidth of the hardware >> platform. >>      Usage: >>      # cd /sys/kernel/debug/dri/0/ >>      # cat benchmark >> >>   2) VRAM is filled with garbage data if uninitialized, add a buffer >>      clearing procedure (lsdc_bo_clear), clear the BO on creation time. >>   3) Update copyrights and adjust coding style (Huacai) >> >> v13 -> v14: >>   1) Trying to add async update support for cursor plane. >> >> v14 -> v15: >>   1) Add lsdc_vga_set_decode() funciton, which allow us remove >> multi-video >>      cards workaround, now it allow drm/loongson, drm/amdgpu, >> drm/etnaviv >>      co-exist in the system, more is also possible (Emil and Xuerui) >>   2) Fix typos and grammar mistakes as much as possible (Xuerui) >>   3) Unify copyrights as GPL-2.0+ (Xuerui) >>   4) Fix a bug introduce since V13, TTM may import BO from other >> drivers, >>      we shouldn't clear it on such a case. >> >> Cc: Maarten Lankhorst >> Cc: Maxime Ripard >> Cc: Thomas Zimmermann >> Cc: David Airlie >> Cc: Daniel Vetter >> Cc: Sumit Semwal >> Cc: "Christian König" >> Cc: Nathan Chancellor >> Cc: Emil Velikov >> Cc: Geert Uytterhoeven >> Cc: loongson-kernel@lists.loongnix.cn >> Tested-by: Liu Peibao >> Signed-off-by: Sui Jingfeng >> --- >>   drivers/gpu/drm/Kconfig                       |    2 + >>   drivers/gpu/drm/Makefile                      |    1 + >>   drivers/gpu/drm/loongson/Kconfig              |   17 + >>   drivers/gpu/drm/loongson/Makefile             |   22 + >>   drivers/gpu/drm/loongson/loongson_device.c    |  102 ++ >>   drivers/gpu/drm/loongson/loongson_module.c    |   33 + >>   drivers/gpu/drm/loongson/loongson_module.h    |   12 + >>   drivers/gpu/drm/loongson/lsdc_benchmark.c     |  133 +++ >>   drivers/gpu/drm/loongson/lsdc_benchmark.h     |   13 + >>   drivers/gpu/drm/loongson/lsdc_crtc.c          | 1024 +++++++++++++++++ >>   drivers/gpu/drm/loongson/lsdc_debugfs.c       |  110 ++ >>   drivers/gpu/drm/loongson/lsdc_drv.c           |  458 ++++++++ >>   drivers/gpu/drm/loongson/lsdc_drv.h           |  388 +++++++ >>   drivers/gpu/drm/loongson/lsdc_gem.c           |  311 +++++ >>   drivers/gpu/drm/loongson/lsdc_gem.h           |   37 + >>   drivers/gpu/drm/loongson/lsdc_gfxpll.c        |  199 ++++ >>   drivers/gpu/drm/loongson/lsdc_gfxpll.h        |   52 + >>   drivers/gpu/drm/loongson/lsdc_i2c.c           |  179 +++ >>   drivers/gpu/drm/loongson/lsdc_i2c.h           |   29 + >>   drivers/gpu/drm/loongson/lsdc_irq.c           |   74 ++ >>   drivers/gpu/drm/loongson/lsdc_irq.h           |   16 + >>   drivers/gpu/drm/loongson/lsdc_output.h        |   21 + >>   drivers/gpu/drm/loongson/lsdc_output_7a1000.c |  178 +++ >>   drivers/gpu/drm/loongson/lsdc_output_7a2000.c |  552 +++++++++ >>   drivers/gpu/drm/loongson/lsdc_pixpll.c        |  481 ++++++++ >>   drivers/gpu/drm/loongson/lsdc_pixpll.h        |   86 ++ >>   drivers/gpu/drm/loongson/lsdc_plane.c         |  799 +++++++++++++ >>   drivers/gpu/drm/loongson/lsdc_probe.c         |   56 + >>   drivers/gpu/drm/loongson/lsdc_probe.h         |   12 + >>   drivers/gpu/drm/loongson/lsdc_regs.h          |  406 +++++++ >>   drivers/gpu/drm/loongson/lsdc_ttm.c           |  591 ++++++++++ >>   drivers/gpu/drm/loongson/lsdc_ttm.h           |   99 ++ >>   32 files changed, 6493 insertions(+) >>   create mode 100644 drivers/gpu/drm/loongson/Kconfig >>   create mode 100644 drivers/gpu/drm/loongson/Makefile >>   create mode 100644 drivers/gpu/drm/loongson/loongson_device.c >>   create mode 100644 drivers/gpu/drm/loongson/loongson_module.c >>   create mode 100644 drivers/gpu/drm/loongson/loongson_module.h >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_benchmark.c >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_benchmark.h >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_crtc.c >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_debugfs.c >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_drv.c >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_drv.h >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_gem.c >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_gem.h >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_gfxpll.c >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_gfxpll.h >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_i2c.c >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_i2c.h >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_irq.c >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_irq.h >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_output.h >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_output_7a1000.c >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_output_7a2000.c >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_pixpll.c >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_pixpll.h >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_plane.c >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_probe.c >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_probe.h >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_regs.h >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_ttm.c >>   create mode 100644 drivers/gpu/drm/loongson/lsdc_ttm.h >> >> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig >> index afb3b2f5f425..cc9c9947fdef 100644 >> --- a/drivers/gpu/drm/Kconfig >> +++ b/drivers/gpu/drm/Kconfig >> @@ -323,6 +323,8 @@ source "drivers/gpu/drm/v3d/Kconfig" >>     source "drivers/gpu/drm/vc4/Kconfig" >>   +source "drivers/gpu/drm/loongson/Kconfig" >> + >>   source "drivers/gpu/drm/etnaviv/Kconfig" >>     source "drivers/gpu/drm/hisilicon/Kconfig" >> diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile >> index 7a09a89b493b..1c0f5204e47b 100644 >> --- a/drivers/gpu/drm/Makefile >> +++ b/drivers/gpu/drm/Makefile >> @@ -194,3 +194,4 @@ obj-y            += gud/ >>   obj-$(CONFIG_DRM_HYPERV) += hyperv/ >>   obj-y            += solomon/ >>   obj-$(CONFIG_DRM_SPRD) += sprd/ >> +obj-$(CONFIG_DRM_LOONGSON) += loongson/ >> diff --git a/drivers/gpu/drm/loongson/Kconfig >> b/drivers/gpu/drm/loongson/Kconfig >> new file mode 100644 >> index 000000000000..df6946d505fa >> --- /dev/null >> +++ b/drivers/gpu/drm/loongson/Kconfig >> @@ -0,0 +1,17 @@ >> +# SPDX-License-Identifier: GPL-2.0 >> + >> +config DRM_LOONGSON >> +    tristate "DRM support for Loongson Graphics" >> +    depends on DRM && PCI && MMU >> +    select DRM_KMS_HELPER >> +    select DRM_TTM >> +    select I2C >> +    select I2C_ALGOBIT >> +    help >> +      This is a DRM driver for Loongson Graphics, it may including >> +      LS7A2000, LS7A1000, LS2K2000 and LS2K1000 etc. Loongson LS7A >> +      series are bridge chipset, while Loongson LS2K series are SoC. >> + >> +      If "M" is selected, the module will be called loongson. >> + >> +      If in doubt, say "N". >> diff --git a/drivers/gpu/drm/loongson/Makefile >> b/drivers/gpu/drm/loongson/Makefile >> new file mode 100644 >> index 000000000000..91e72bd900c1 >> --- /dev/null >> +++ b/drivers/gpu/drm/loongson/Makefile >> @@ -0,0 +1,22 @@ >> +# SPDX-License-Identifier: GPL-2.0 >> + >> +loongson-y := \ >> +    lsdc_benchmark.o \ >> +    lsdc_crtc.o \ >> +    lsdc_debugfs.o \ >> +    lsdc_drv.o \ >> +    lsdc_gem.o \ >> +    lsdc_gfxpll.o \ >> +    lsdc_i2c.o \ >> +    lsdc_irq.o \ >> +    lsdc_output_7a1000.o \ >> +    lsdc_output_7a2000.o \ >> +    lsdc_plane.o \ >> +    lsdc_pixpll.o \ >> +    lsdc_probe.o \ >> +    lsdc_ttm.o >> + >> +loongson-y += loongson_device.o \ >> +          loongson_module.o >> + >> +obj-$(CONFIG_DRM_LOONGSON) += loongson.o >> diff --git a/drivers/gpu/drm/loongson/loongson_device.c >> b/drivers/gpu/drm/loongson/loongson_device.c >> new file mode 100644 >> index 000000000000..9986c8a2a255 >> --- /dev/null >> +++ b/drivers/gpu/drm/loongson/loongson_device.c >> @@ -0,0 +1,102 @@ >> +// SPDX-License-Identifier: GPL-2.0+ >> +/* >> + * Copyright (C) 2023 Loongson Technology Corporation Limited >> + */ >> + >> +#include >> + >> +#include "lsdc_drv.h" >> + >> +static const struct lsdc_kms_funcs ls7a1000_kms_funcs = { >> +    .create_i2c = lsdc_create_i2c_chan, >> +    .irq_handler = ls7a1000_dc_irq_handler, >> +    .output_init = ls7a1000_output_init, >> +    .cursor_plane_init = ls7a1000_cursor_plane_init, >> +    .primary_plane_init = lsdc_primary_plane_init, >> +    .crtc_init = ls7a1000_crtc_init, >> +}; >> + >> +static const struct lsdc_kms_funcs ls7a2000_kms_funcs = { >> +    .create_i2c = lsdc_create_i2c_chan, >> +    .irq_handler = ls7a2000_dc_irq_handler, >> +    .output_init = ls7a2000_output_init, >> +    .cursor_plane_init = ls7a2000_cursor_plane_init, >> +    .primary_plane_init = lsdc_primary_plane_init, >> +    .crtc_init = ls7a2000_crtc_init, >> +}; >> + >> +static const struct loongson_gfx_desc ls7a1000_gfx = { >> +    .dc = { >> +        .num_of_crtc = 2, >> +        .max_pixel_clk = 200000, >> +        .max_width = 2048, >> +        .max_height = 2048, >> +        .num_of_hw_cursor = 1, >> +        .hw_cursor_w = 32, >> +        .hw_cursor_h = 32, >> +        .pitch_align = 256, >> +        .has_vblank_counter = false, >> +        .funcs = &ls7a1000_kms_funcs, >> +    }, >> +    .conf_reg_base = LS7A1000_CONF_REG_BASE, >> +    .gfxpll = { >> +        .reg_offset = LS7A1000_PLL_GFX_REG, >> +        .reg_size = 8, >> +    }, >> +    .pixpll = { >> +        [0] = { >> +            .reg_offset = LS7A1000_PIXPLL0_REG, >> +            .reg_size = 8, >> +        }, >> +        [1] = { >> +            .reg_offset = LS7A1000_PIXPLL1_REG, >> +            .reg_size = 8, >> +        }, >> +    }, >> +    .chip_id = CHIP_LS7A1000, >> +    .model = "LS7A1000 bridge chipset", >> +}; >> + >> +static const struct loongson_gfx_desc ls7a2000_gfx = { >> +    .dc = { >> +        .num_of_crtc = 2, >> +        .max_pixel_clk = 350000, >> +        .max_width = 4096, >> +        .max_height = 4096, >> +        .num_of_hw_cursor = 2, >> +        .hw_cursor_w = 64, >> +        .hw_cursor_h = 64, >> +        .pitch_align = 64, >> +        .has_vblank_counter = true, >> +        .funcs = &ls7a2000_kms_funcs, >> +    }, >> +    .conf_reg_base = LS7A2000_CONF_REG_BASE, >> +    .gfxpll = { >> +        .reg_offset = LS7A2000_PLL_GFX_REG, >> +        .reg_size = 8, >> +    }, >> +    .pixpll = { >> +        [0] = { >> +            .reg_offset = LS7A2000_PIXPLL0_REG, >> +            .reg_size = 8, >> +        }, >> +        [1] = { >> +            .reg_offset = LS7A2000_PIXPLL1_REG, >> +            .reg_size = 8, >> +        }, >> +    }, >> +    .chip_id = CHIP_LS7A2000, >> +    .model = "LS7A2000 bridge chipset", >> +}; >> + >> +static const struct lsdc_desc *__chip_id_desc_table[] = { >> +    [CHIP_LS7A1000] = &ls7a1000_gfx.dc, >> +    [CHIP_LS7A2000] = &ls7a2000_gfx.dc, >> +    [CHIP_LS_LAST] = NULL, >> +}; >> + >> +const struct lsdc_desc * >> +lsdc_device_probe(struct pci_dev *pdev, enum loongson_chip_id chip_id) >> +{ >> +    return __chip_id_desc_table[chip_id]; >> +} >> diff --git a/drivers/gpu/drm/loongson/loongson_module.c >> b/drivers/gpu/drm/loongson/loongson_module.c >> new file mode 100644 >> index 000000000000..d2a51bd395f6 >> --- /dev/null >> +++ b/drivers/gpu/drm/loongson/loongson_module.c >> @@ -0,0 +1,33 @@ >> +// SPDX-License-Identifier: GPL-2.0+ >> +/* >> + * Copyright (C) 2023 Loongson Technology Corporation Limited >> + */ >> + >> +#include >> + >> +#include