xref: /openbsd-src/sys/dev/pci/drm/apple/iomfb_v13_3.c (revision 172aa44c98d4cafbce3c7058b568c5253ae12634)
1 // SPDX-License-Identifier: GPL-2.0-only OR MIT
2 /* Copyright The Asahi Linux Contributors */
3 
4 #include "iomfb_v12_3.h"
5 #include "iomfb_v13_3.h"
6 #include "version_utils.h"
7 
8 static const struct dcp_method_entry dcp_methods[dcpep_num_methods] = {
9 	IOMFB_METHOD("A000", dcpep_late_init_signal),
10 	IOMFB_METHOD("A029", dcpep_setup_video_limits),
11 	IOMFB_METHOD("A131", iomfbep_a131_pmu_service_matched),
12 	IOMFB_METHOD("A132", iomfbep_a132_backlight_service_matched),
13 	IOMFB_METHOD("A373", dcpep_set_create_dfb),
14 	IOMFB_METHOD("A374", iomfbep_a358_vi_set_temperature_hint),
15 	IOMFB_METHOD("A401", dcpep_start_signal),
16 	IOMFB_METHOD("A407", dcpep_swap_start),
17 	IOMFB_METHOD("A408", dcpep_swap_submit),
18 	IOMFB_METHOD("A410", dcpep_set_display_device),
19 	IOMFB_METHOD("A411", dcpep_is_main_display),
20 	IOMFB_METHOD("A412", dcpep_set_digital_out_mode),
21 	IOMFB_METHOD("A422", iomfbep_set_matrix),
22 	IOMFB_METHOD("A426", iomfbep_get_color_remap_mode),
23 	IOMFB_METHOD("A441", dcpep_set_parameter_dcp),
24 	IOMFB_METHOD("A445", dcpep_create_default_fb),
25 	IOMFB_METHOD("A449", dcpep_enable_disable_video_power_savings),
26 	IOMFB_METHOD("A456", dcpep_first_client_open),
27 	IOMFB_METHOD("A457", iomfbep_last_client_close),
28 	IOMFB_METHOD("A463", dcpep_set_display_refresh_properties),
29 	IOMFB_METHOD("A466", dcpep_flush_supports_power),
30 	IOMFB_METHOD("A467", iomfbep_abort_swaps_dcp),
31 	IOMFB_METHOD("A472", dcpep_set_power_state),
32 };
33 
34 #define DCP_FW v13_3
35 #define DCP_FW_VER DCP_FW_VERSION(13, 3, 0)
36 
37 #include "iomfb_template.c"
38 
39 static const iomfb_cb_handler cb_handlers[IOMFB_MAX_CB] = {
40 	[0] = trampoline_true, /* did_boot_signal */
41 	[1] = trampoline_true, /* did_power_on_signal */
42 	[2] = trampoline_nop, /* will_power_off_signal */
43 	[3] = trampoline_rt_bandwidth,
44 	[6] = trampoline_set_frame_sync_props,
45 	[100] = iomfbep_cb_match_pmu_service,
46 	[101] = trampoline_zero, /* get_display_default_stride */
47 	[102] = trampoline_nop, /* set_number_property */
48 	[103] = trampoline_nop, /* trigger_user_cal_loader */
49 	[104] = trampoline_nop, /* set_boolean_property */
50 	[107] = trampoline_nop, /* remove_property */
51 	[108] = trampoline_true, /* create_provider_service */
52 	[109] = trampoline_true, /* create_product_service */
53 	[110] = trampoline_true, /* create_pmu_service */
54 	[111] = trampoline_true, /* create_iomfb_service */
55 	[112] = trampoline_create_backlight_service,
56 	[113] = trampoline_true, /* create_nvram_service? */
57 	[114] = trampoline_get_tiling_state,
58 	[115] = trampoline_false, /* set_tiling_state */
59 	[120] = dcpep_cb_boot_1,
60 	[121] = trampoline_false, /* is_dark_boot */
61 	[122] = trampoline_false, /* is_dark_boot / is_waking_from_hibernate*/
62 	[124] = trampoline_read_edt_data,
63 	[126] = trampoline_prop_start,
64 	[127] = trampoline_prop_chunk,
65 	[128] = trampoline_prop_end,
66 	[129] = trampoline_allocate_bandwidth,
67 	[201] = trampoline_map_piodma,
68 	[202] = trampoline_unmap_piodma,
69 	[206] = iomfbep_cb_match_pmu_service_2,
70 	[207] = iomfbep_cb_match_backlight_service,
71 	[208] = trampoline_nop, /* update_backlight_factor_prop */
72 	[209] = trampoline_get_time,
73 	[300] = trampoline_pr_publish,
74 	[401] = trampoline_get_uint_prop,
75 	[404] = trampoline_nop, /* sr_set_uint_prop */
76 	[406] = trampoline_set_fx_prop,
77 	[408] = trampoline_get_frequency,
78 	[411] = trampoline_map_reg,
79 	[413] = trampoline_true, /* sr_set_property_dict */
80 	[414] = trampoline_sr_set_property_int,
81 	[415] = trampoline_true, /* sr_set_property_bool */
82 	[451] = trampoline_allocate_buffer,
83 	[452] = trampoline_map_physical,
84 	[456] = trampoline_release_mem_desc,
85 	[552] = trampoline_true, /* set_property_dict_0 */
86 	[561] = trampoline_true, /* set_property_dict */
87 	[563] = trampoline_true, /* set_property_int */
88 	[565] = trampoline_true, /* set_property_bool */
89 	[567] = trampoline_true, /* set_property_str */
90 	[574] = trampoline_zero, /* power_up_dart */
91 	[576] = trampoline_hotplug,
92 	[577] = trampoline_nop, /* powerstate_notify */
93 	[582] = trampoline_true, /* create_default_fb_surface */
94 	[584] = trampoline_nop, /* IOMobileFramebufferAP::clear_default_surface */
95 	[588] = trampoline_nop, /* resize_default_fb_surface_gated */
96 	[589] = trampoline_swap_complete,
97 	[591] = trampoline_swap_complete_intent_gated,
98 	[592] = trampoline_abort_swap_ap_gated,
99 	[593] = trampoline_enable_backlight_message_ap_gated,
100 	[594] = trampoline_nop, /* IOMobileFramebufferAP::setSystemConsoleMode */
101 	[596] = trampoline_false, /* IOMobileFramebufferAP::isDFBAllocated */
102 	[597] = trampoline_false, /* IOMobileFramebufferAP::preserveContents */
103 	[598] = trampoline_nop, /* find_swap_function_gated */
104 };
DCP_FW_NAME(iomfb_start)105 void DCP_FW_NAME(iomfb_start)(struct apple_dcp *dcp)
106 {
107 	dcp->cb_handlers = cb_handlers;
108 
109 	dcp_start_signal(dcp, false, dcp_started, NULL);
110 }
111 
112 #undef DCP_FW_VER
113 #undef DCP_FW
114