Skip to content

Commit 9f02122

Browse files
jannaumarcan
authored andcommitted
WIP: drm/apple: Port to incompatible V13.3 firmware interface
Signed-off-by: Janne Grunau <[email protected]>
1 parent 9a925bc commit 9f02122

10 files changed

Lines changed: 76 additions & 49 deletions

File tree

drivers/gpu/drm/apple/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ appledrm-y := apple_drv.o
66

77
apple_dcp-y := dcp.o dcp_backlight.o iomfb.o parser.o
88
apple_dcp-y += iomfb_v12_3.o
9-
apple_dcp-y += iomfb_v13_2.o
9+
apple_dcp-y += iomfb_v13_3.o
1010
apple_dcp-$(CONFIG_TRACING) += trace.o
1111

1212
apple_piodma-y := dummy-piodma.o

drivers/gpu/drm/apple/dcp-internal.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
#include "iomfb.h"
1414
#include "iomfb_v12_3.h"
15-
#include "iomfb_v13_2.h"
15+
#include "iomfb_v13_3.h"
1616

1717
#define DCP_MAX_PLANES 2
1818

@@ -21,7 +21,7 @@ struct apple_dcp;
2121
enum dcp_firmware_version {
2222
DCP_FIRMWARE_UNKNOWN,
2323
DCP_FIRMWARE_V_12_3,
24-
DCP_FIRMWARE_V_13_2,
24+
DCP_FIRMWARE_V_13_3,
2525
};
2626

2727
enum {
@@ -146,7 +146,7 @@ struct apple_dcp {
146146
/* Queued swap. Owned by the DCP to avoid per-swap memory allocation */
147147
union {
148148
struct dcp_swap_submit_req_v12_3 v12_3;
149-
struct dcp_swap_submit_req_v13_2 v13_2;
149+
struct dcp_swap_submit_req_v13_3 v13_3;
150150
} swap;
151151

152152
/* Current display mode */

drivers/gpu/drm/apple/dcp.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -404,8 +404,8 @@ static enum dcp_firmware_version dcp_check_firmware_version(struct device *dev)
404404

405405
if (strncmp(compat_str, "12.3.0", sizeof(compat_str)) == 0)
406406
return DCP_FIRMWARE_V_12_3;
407-
if (strncmp(compat_str, "13.2.0", sizeof(compat_str)) == 0)
408-
return DCP_FIRMWARE_V_13_2;
407+
if (strncmp(compat_str, "13.3.0", sizeof(compat_str)) == 0)
408+
return DCP_FIRMWARE_V_13_3;
409409

410410
dev_err(dev, "DCP firmware-compat %s (FW: %s) is not supported\n",
411411
compat_str, fw_str);

drivers/gpu/drm/apple/iomfb.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -223,8 +223,8 @@ void dcp_sleep(struct apple_dcp *dcp)
223223
case DCP_FIRMWARE_V_12_3:
224224
iomfb_sleep_v12_3(dcp);
225225
break;
226-
case DCP_FIRMWARE_V_13_2:
227-
iomfb_sleep_v13_2(dcp);
226+
case DCP_FIRMWARE_V_13_3:
227+
iomfb_sleep_v13_3(dcp);
228228
break;
229229
default:
230230
WARN_ONCE(true, "Unexpected firmware version: %u\n", dcp->fw_compat);
@@ -240,8 +240,8 @@ void dcp_poweron(struct platform_device *pdev)
240240
case DCP_FIRMWARE_V_12_3:
241241
iomfb_poweron_v12_3(dcp);
242242
break;
243-
case DCP_FIRMWARE_V_13_2:
244-
iomfb_poweron_v13_2(dcp);
243+
case DCP_FIRMWARE_V_13_3:
244+
iomfb_poweron_v13_3(dcp);
245245
break;
246246
default:
247247
WARN_ONCE(true, "Unexpected firmware version: %u\n", dcp->fw_compat);
@@ -258,8 +258,8 @@ void dcp_poweroff(struct platform_device *pdev)
258258
case DCP_FIRMWARE_V_12_3:
259259
iomfb_poweroff_v12_3(dcp);
260260
break;
261-
case DCP_FIRMWARE_V_13_2:
262-
iomfb_poweroff_v13_2(dcp);
261+
case DCP_FIRMWARE_V_13_3:
262+
iomfb_poweroff_v13_3(dcp);
263263
break;
264264
default:
265265
WARN_ONCE(true, "Unexpected firmware version: %u\n", dcp->fw_compat);
@@ -503,8 +503,8 @@ void dcp_flush(struct drm_crtc *crtc, struct drm_atomic_state *state)
503503
case DCP_FIRMWARE_V_12_3:
504504
iomfb_flush_v12_3(dcp, crtc, state);
505505
break;
506-
case DCP_FIRMWARE_V_13_2:
507-
iomfb_flush_v13_2(dcp, crtc, state);
506+
case DCP_FIRMWARE_V_13_3:
507+
iomfb_flush_v13_3(dcp, crtc, state);
508508
break;
509509
default:
510510
WARN_ONCE(true, "Unexpected firmware version: %u\n", dcp->fw_compat);
@@ -519,8 +519,8 @@ void iomfb_start(struct apple_dcp *dcp)
519519
case DCP_FIRMWARE_V_12_3:
520520
iomfb_start_v12_3(dcp);
521521
break;
522-
case DCP_FIRMWARE_V_13_2:
523-
iomfb_start_v13_2(dcp);
522+
case DCP_FIRMWARE_V_13_3:
523+
iomfb_start_v13_3(dcp);
524524
break;
525525
default:
526526
WARN_ONCE(true, "Unexpected firmware version: %u\n", dcp->fw_compat);
@@ -572,8 +572,8 @@ void iomfb_shutdown(struct apple_dcp *dcp)
572572
case DCP_FIRMWARE_V_12_3:
573573
iomfb_shutdown_v12_3(dcp);
574574
break;
575-
case DCP_FIRMWARE_V_13_2:
576-
iomfb_shutdown_v13_2(dcp);
575+
case DCP_FIRMWARE_V_13_3:
576+
iomfb_shutdown_v13_3(dcp);
577577
break;
578578
default:
579579
WARN_ONCE(true, "Unexpected firmware version: %u\n", dcp->fw_compat);

drivers/gpu/drm/apple/iomfb.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,20 @@ struct dcp_rt_bandwidth {
136136
u32 padding[7];
137137
} __packed;
138138

139+
struct frame_sync_props {
140+
u8 unk[28];
141+
};
142+
143+
struct dcp_set_frame_sync_props_req {
144+
struct frame_sync_props props;
145+
u8 frame_sync_props_null;
146+
u8 padding[3];
147+
} __packed;
148+
149+
struct dcp_set_frame_sync_props_resp {
150+
struct frame_sync_props props;
151+
} __packed;
152+
139153
/* Method calls */
140154

141155
enum dcpep_method {

drivers/gpu/drm/apple/iomfb_template.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -670,6 +670,13 @@ static struct dcp_rt_bandwidth dcpep_cb_rt_bandwidth(struct apple_dcp *dcp)
670670
}
671671
}
672672

673+
static struct dcp_set_frame_sync_props_resp
674+
dcpep_cb_set_frame_sync_props(struct apple_dcp *dcp,
675+
struct dcp_set_frame_sync_props_req *req)
676+
{
677+
return (struct dcp_set_frame_sync_props_resp){};
678+
}
679+
673680
/* Callback to get the current time as milliseconds since the UNIX epoch */
674681
static u64 dcpep_cb_get_time(struct apple_dcp *dcp)
675682
{
@@ -1031,6 +1038,9 @@ TRAMPOLINE_INOUT(trampoline_prop_end, dcpep_cb_prop_end,
10311038
struct dcp_set_dcpav_prop_end_req, u8);
10321039
TRAMPOLINE_OUT(trampoline_rt_bandwidth, dcpep_cb_rt_bandwidth,
10331040
struct dcp_rt_bandwidth);
1041+
TRAMPOLINE_INOUT(trampoline_set_frame_sync_props, dcpep_cb_set_frame_sync_props,
1042+
struct dcp_set_frame_sync_props_req,
1043+
struct dcp_set_frame_sync_props_resp);
10341044
TRAMPOLINE_OUT(trampoline_get_frequency, dcpep_cb_get_frequency, u64);
10351045
TRAMPOLINE_OUT(trampoline_get_time, dcpep_cb_get_time, u64);
10361046
TRAMPOLINE_IN(trampoline_hotplug, dcpep_cb_hotplug, u64);

drivers/gpu/drm/apple/iomfb_template.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ struct DCP_FW_NAME(dcp_swap) {
4848
u8 unk_2f3[0x2d];
4949
#if DCP_FW_VER >= DCP_FW_VERSION(13, 2, 0)
5050
u8 unk_320[0x13f];
51+
u64 unk_1;
5152
#endif
5253
} __packed;
5354

drivers/gpu/drm/apple/iomfb_v12_3.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
/* Copyright The Asahi Linux Contributors */
33

44
#include "iomfb_v12_3.h"
5-
#include "iomfb_v13_2.h"
5+
#include "iomfb_v13_3.h"
66
#include "version_utils.h"
77

88
static const struct dcp_method_entry dcp_methods[dcpep_num_methods] = {
Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
/* Copyright The Asahi Linux Contributors */
33

44
#include "iomfb_v12_3.h"
5-
#include "iomfb_v13_2.h"
5+
#include "iomfb_v13_3.h"
66
#include "version_utils.h"
77

88
static const struct dcp_method_entry dcp_methods[dcpep_num_methods] = {
@@ -25,13 +25,13 @@ static const struct dcp_method_entry dcp_methods[dcpep_num_methods] = {
2525
IOMFB_METHOD("A449", dcpep_enable_disable_video_power_savings),
2626
IOMFB_METHOD("A456", dcpep_first_client_open),
2727
IOMFB_METHOD("A457", iomfbep_last_client_close),
28-
IOMFB_METHOD("A462", dcpep_set_display_refresh_properties),
29-
IOMFB_METHOD("A465", dcpep_flush_supports_power),
30-
IOMFB_METHOD("A471", dcpep_set_power_state),
28+
IOMFB_METHOD("A463", dcpep_set_display_refresh_properties),
29+
IOMFB_METHOD("A466", dcpep_flush_supports_power),
30+
IOMFB_METHOD("A472", dcpep_set_power_state),
3131
};
3232

33-
#define DCP_FW v13_2
34-
#define DCP_FW_VER DCP_FW_VERSION(13, 2, 0)
33+
#define DCP_FW v13_3
34+
#define DCP_FW_VER DCP_FW_VERSION(13, 3, 0)
3535

3636
#include "iomfb_template.c"
3737

@@ -40,32 +40,34 @@ static const iomfb_cb_handler cb_handlers[IOMFB_MAX_CB] = {
4040
[1] = trampoline_true, /* did_power_on_signal */
4141
[2] = trampoline_nop, /* will_power_off_signal */
4242
[3] = trampoline_rt_bandwidth,
43+
[6] = trampoline_set_frame_sync_props,
4344
[100] = iomfbep_cb_match_pmu_service,
4445
[101] = trampoline_zero, /* get_display_default_stride */
4546
[102] = trampoline_nop, /* set_number_property */
46-
[103] = trampoline_nop, /* set_boolean_property */
47-
[106] = trampoline_nop, /* remove_property */
48-
[107] = trampoline_true, /* create_provider_service */
49-
[108] = trampoline_true, /* create_product_service */
50-
[109] = trampoline_true, /* create_pmu_service */
51-
[110] = trampoline_true, /* create_iomfb_service */
52-
[111] = trampoline_true, /* create_backlight_service */
53-
[112] = trampoline_true, /* create_nvram_servce? */
54-
[113] = trampoline_get_tiling_state,
55-
[114] = trampoline_false, /* set_tiling_state */
56-
[119] = dcpep_cb_boot_1,
57-
[120] = trampoline_false, /* is_dark_boot */
58-
[121] = trampoline_false, /* is_dark_boot / is_waking_from_hibernate*/
59-
[123] = trampoline_read_edt_data,
60-
[125] = trampoline_prop_start,
61-
[126] = trampoline_prop_chunk,
62-
[127] = trampoline_prop_end,
47+
[103] = trampoline_nop, /* trigger_user_cal_loader */
48+
[104] = trampoline_nop, /* set_boolean_property */
49+
[107] = trampoline_nop, /* remove_property */
50+
[108] = trampoline_true, /* create_provider_service */
51+
[109] = trampoline_true, /* create_product_service */
52+
[110] = trampoline_true, /* create_pmu_service */
53+
[111] = trampoline_true, /* create_iomfb_service */
54+
[112] = trampoline_true, /* create_backlight_service */
55+
[113] = trampoline_true, /* create_nvram_servce? */
56+
[114] = trampoline_get_tiling_state,
57+
[115] = trampoline_false, /* set_tiling_state */
58+
[120] = dcpep_cb_boot_1,
59+
[121] = trampoline_false, /* is_dark_boot */
60+
[122] = trampoline_false, /* is_dark_boot / is_waking_from_hibernate*/
61+
[124] = trampoline_read_edt_data,
62+
[126] = trampoline_prop_start,
63+
[127] = trampoline_prop_chunk,
64+
[128] = trampoline_prop_end,
6365
[201] = trampoline_map_piodma,
6466
[202] = trampoline_unmap_piodma,
6567
[206] = iomfbep_cb_match_pmu_service_2,
6668
[207] = iomfbep_cb_match_backlight_service,
67-
[208] = trampoline_get_time,
68-
[211] = trampoline_nop, /* update_backlight_factor_prop */
69+
[208] = trampoline_nop, /* update_backlight_factor_prop */
70+
[209] = trampoline_get_time,
6971
[300] = trampoline_pr_publish,
7072
[401] = trampoline_get_uint_prop,
7173
[404] = trampoline_nop, /* sr_set_uint_prop */
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
// SPDX-License-Identifier: GPL-2.0-only OR MIT
22
/* Copyright The Asahi Linux Contributors */
33

4-
#ifndef __APPLE_IOMFB_V13_2_H__
5-
#define __APPLE_IOMFB_V13_2_H__
4+
#ifndef __APPLE_IOMFB_V13_3_H__
5+
#define __APPLE_IOMFB_V13_3_H__
66

77
#include "version_utils.h"
88

9-
#define DCP_FW v13_2
10-
#define DCP_FW_VER DCP_FW_VERSION(13, 2, 0)
9+
#define DCP_FW v13_3
10+
#define DCP_FW_VER DCP_FW_VERSION(13, 3, 0)
1111

1212
#include "iomfb_template.h"
1313

1414
#undef DCP_FW_VER
1515
#undef DCP_FW
1616

17-
#endif /* __APPLE_IOMFB_V13_2_H__ */
17+
#endif /* __APPLE_IOMFB_V13_3_H__ */

0 commit comments

Comments
 (0)