Skip to content

Enable T6030 external display support - #607

Open
a-ramses wants to merge 20 commits into
AsahiLinux:asahi-wip-7.2from
a-ramses:test/t6030-external-edid
Open

Enable T6030 external display support#607
a-ramses wants to merge 20 commits into
AsahiLinux:asahi-wip-7.2from
a-ramses:test/t6030-external-edid

Conversation

@a-ramses

@a-ramses a-ramses commented Sep 8, 2026

Copy link
Copy Markdown

Add T6030 DisplayPort PHY support and device-tree wiring, with DCP and RTKit fixes. USB-C display output and EDID retrieval are tested. HDMI output works with a forced mode; HDMI EDID parsing remains unresolved.

DCP firmware 14.7 returns raw EDID bytes without the eight-byte prefix used by older firmware. It also uses the generic 48-byte variable-data message header with 32-bit maximum size, return code, and used size fields.

Describe that message layout accurately, check its return code and bounds, and retain the legacy prefix for older firmware.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
Signed-off-by: a-ramses <abdicheramzi@gmail.com>
Descend into tipd when its shared core is selected, including SPMI-only
configurations.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
Initialize optional fields and discard data left in a mode slot after a
failed parse.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
Dispatch get_tiling_state and set_tiling_state at callback indices 115
and 116.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
Accept raw and eight-byte-prefixed replies without assuming framing from
the firmware version.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
A zero completion result means timeout, not success. Return -ETIMEDOUT
in that case.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
Return management-message send failures and stop AFK initialization when
starting its endpoint fails.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
Set the receive FIFO enable bit on T6030 ASC mailboxes.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
Start the debug endpoint and provide its requested shared buffers. Free
them on reset and teardown.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
Add separate AUX and HBR3 lane operations for T6030 using the existing
hardware dispatch.

Derive active lanes from mode and orientation, stopping before
orientation changes.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
Track HPD changes and notify the referenced DRM connector around Type-C
mode updates.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
Exclude T8122-compatible PHY endpoints from DCP component matching, as
already done for T8103.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
Poll between short completion waits to recover messages when interrupt
delivery stalls.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
Add an opt-in immediate acknowledgement path for syslog and IOReport
messages. Reply before dispatching later messages, skipping normal
processing of these log entries.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
Delay initialization after endpoint startup and poll for its reply.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
Return the read error instead of masking it as ENODEV.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
Describe display controllers, DARTs, mailboxes and crossbars, including
the DMA window and power settings.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
Add the panel properties, framebuffer links and display aliases.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
Enable dcpext1 and route it through ATC0 to USB-C.
Enable synchronous firmware acknowledgements and keep ATC0 powered.

Signed-off-by: a-ramses <abdicheramzi@gmail.com>
u8 _pad1[24];
__le64 used_size;
u8 _pad2[8];
struct dpavserv_copy_edid_msg {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a reason to churn the name of the struct?

u8 _pad3[12];
u8 data[];
} __packed;
static_assert(sizeof(struct dpavserv_copy_edid_msg) == 48);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is unnecessary

static_assert(sizeof(struct dpavserv_copy_edid_msg) == 48);

#define EDID_LEADING_DATA_SIZE 8
#define EDID_LEGACY_LEADING_DATA_SIZE 8

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we use the firmware versioning preprocessor helpers to make this cleaner inside the functions?

#if DCP_FW_VER >= DCP_FW_VERSION(14, 7, 0)
#define EDID_LEADING_DATA_SIZE        0
#else
#define EDID_LEADING_DATA_SIZE        8
#endif /* DCP_FW_VER */

We can then just get rid of the leading_data_size variable and runtime evaluation.

mbox-names = "mbox";
iommus = <&dcp_dart 5 0x100 0x0 0x10 0x0>;

reg-names = "coproc", "disp-0", "disp-1", "disp-2", "disp-3";

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does it work with 4? dcpep_cb_map_reg failed for me until i added a fifth

@sofus13

sofus13 commented Sep 9, 2026

Copy link
Copy Markdown

Would it make sense if i took the dcp related dt changes and added them to my pr?

@alyssarosenzweig

alyssarosenzweig commented Sep 9, 2026

Copy link
Copy Markdown
Member

Please provide sign offs under your known identity (I see a real name on your GitHub so I don't think it's meant to be anonymous?)

https://docs.kernel.org/process/submitting-patches.html#sign-your-work-the-developer-s-certificate-of-origin

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants