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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxx>


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



[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux