[PATCH v2 00/10] drm/ast: Detect device type before init

Sui Jingfeng sui.jingfeng at linux.dev
Sat Nov 18 15:06:07 UTC 2023


Hi,


On 2023/11/16 17:59, Thomas Zimmermann wrote:
> Detecting the ast device's chipset type and configuration mode
> involves several registers, DT properties and possibly POSTing
> parts of the chip. It is preferable to do this before initializing
> the DRM driver, so that that each chip type can have an individual
> setup code.
>
> The patchset addresses the problem by moving all early detection
> code before the allocation of the ast device.
>
> Patch one gets a lock out of the way. The lock is only relevant
> for mode setting. Move it there.
>
> Patches 2 and 3 rework the detection of the correct I/O memory
> ranges. It is now self-contained, more readable and works without
> an instance of struct ast_device.
>
> Patches 4 to 7 rework the setup of various registers that are
> required for detection. Access helpers for I/O can now operate
> without an instance of struct ast_device. The setup functions
> operate on the I/O ranges that have been made available with
> patch 3, but again without struct ast_device.
>
> With the detection's internals done, patches 8 and 9 rework the
> chip's and config-mode's detection code to operate without struct
> ast_device as well.
>
> Finally, patch 10 moves the detection code into the PCI probe
> function. it runs before any of the DRM device code. The function
> for creating an ast device, ast_device_create(), receives the
> detected I/O memory ranges, chip type and configuration mode.
>
> This cleans up the detection code. There is more chip-specific
> code in other parts of the driver. In a later patch, the ast device
> setup can be split up so that each chip type gets its own code
> path that does not interfere with other chips.
>
> Tested on AST1100 and AST2100.


Tested-by: Sui Jingfeng <suijingfeng at loongson.cn>


Still works, The whole series is tested with AST2400 hardware on X86-64.


$ sudo dmesg | grep "03:00.0"

ast 0000:03:00.0: Using P2A bridge for configuration
ast 0000:03:00.0: AST 2400 detected
ast 0000:03:00.0: [drm] Using analog VGA
ast 0000:03:00.0: [drm] dram MCLK=396 Mhz type=6 bus_width=16
[drm] Initialized ast 0.1.0 20120228 for 0000:03:00.0 on minor 0
ast 0000:03:00.0: [drm] fb0: astdrmfb frame buffer device


> v2:
> 	* add missing break statements (Jocelyn)
> 	* fix length test for I/O range
>
> Thomas Zimmermann (10):
>    drm/ast: Turn ioregs_lock to modeset_lock
>    drm/ast: Rework I/O register setup
>    drm/ast: Retrieve I/O-memory ranges without ast device
>    drm/ast: Add I/O helpers without ast device
>    drm/ast: Enable VGA without ast device instance
>    drm/ast: Enable MMIO without ast device instance
>    drm/ast: Partially implement POST without ast device instance
>    drm/ast: Add enum ast_config_mode
>    drm/ast: Detect ast device type and config mode without ast device
>    drm/ast: Move detection code into PCI probe helper
>
>   drivers/gpu/drm/ast/ast_drv.c  | 263 ++++++++++++++++++++++++++++++++-
>   drivers/gpu/drm/ast/ast_drv.h  | 101 +++++++++----
>   drivers/gpu/drm/ast/ast_main.c | 244 ++----------------------------
>   drivers/gpu/drm/ast/ast_mode.c |  26 ++--
>   drivers/gpu/drm/ast/ast_post.c |  73 +++++----
>   drivers/gpu/drm/ast/ast_reg.h  |  12 +-
>   6 files changed, 413 insertions(+), 306 deletions(-)
>
>
> base-commit: b7816c393496dc4497c1327310821407f7171d8b
> prerequisite-patch-id: 0aa359f6144c4015c140c8a6750be19099c676fb
> prerequisite-patch-id: c67e5d886a47b7d0266d81100837557fda34cb24
> prerequisite-patch-id: cbc453ee02fae02af22fbfdce56ab732c7a88c36


More information about the dri-devel mailing list