Lines Matching refs:ast

18 	struct ast_device *ast = data;  in ast_release_firmware()  local
20 release_firmware(ast->dp501_fw); in ast_release_firmware()
21 ast->dp501_fw = NULL; in ast_release_firmware()
24 static int ast_load_dp501_microcode(struct ast_device *ast) in ast_load_dp501_microcode() argument
26 struct drm_device *dev = &ast->base; in ast_load_dp501_microcode()
29 ret = request_firmware(&ast->dp501_fw, "ast_dp501_fw.bin", dev->dev); in ast_load_dp501_microcode()
33 return devm_add_action_or_reset(dev->dev, ast_release_firmware, ast); in ast_load_dp501_microcode()
36 static void send_ack(struct ast_device *ast) in send_ack() argument
39 sendack = ast_get_index_reg_mask(ast, AST_IO_VGACRI, 0x9b, 0xff); in send_ack()
41 ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0x9b, 0x00, sendack); in send_ack()
44 static void send_nack(struct ast_device *ast) in send_nack() argument
47 sendack = ast_get_index_reg_mask(ast, AST_IO_VGACRI, 0x9b, 0xff); in send_nack()
49 ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0x9b, 0x00, sendack); in send_nack()
52 static bool wait_ack(struct ast_device *ast) in wait_ack() argument
57 waitack = ast_get_index_reg_mask(ast, AST_IO_VGACRI, 0xd2, 0xff); in wait_ack()
68 static bool wait_nack(struct ast_device *ast) in wait_nack() argument
73 waitack = ast_get_index_reg_mask(ast, AST_IO_VGACRI, 0xd2, 0xff); in wait_nack()
84 static void set_cmd_trigger(struct ast_device *ast) in set_cmd_trigger() argument
86 ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0x9b, ~0x40, 0x40); in set_cmd_trigger()
89 static void clear_cmd_trigger(struct ast_device *ast) in clear_cmd_trigger() argument
91 ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0x9b, ~0x40, 0x00); in clear_cmd_trigger()
95 static bool wait_fw_ready(struct ast_device *ast)
100 waitready = ast_get_index_reg_mask(ast, AST_IO_VGACRI, 0xd2, 0xff);
112 static bool ast_write_cmd(struct ast_device *ast, u8 data) in ast_write_cmd() argument
116 if (wait_nack(ast)) { in ast_write_cmd()
117 send_nack(ast); in ast_write_cmd()
118 ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0x9a, 0x00, data); in ast_write_cmd()
119 send_ack(ast); in ast_write_cmd()
120 set_cmd_trigger(ast); in ast_write_cmd()
122 if (wait_ack(ast)) { in ast_write_cmd()
123 clear_cmd_trigger(ast); in ast_write_cmd()
124 send_nack(ast); in ast_write_cmd()
129 clear_cmd_trigger(ast); in ast_write_cmd()
130 send_nack(ast); in ast_write_cmd()
134 static bool ast_write_data(struct ast_device *ast, u8 data) in ast_write_data() argument
136 if (wait_nack(ast)) { in ast_write_data()
137 send_nack(ast); in ast_write_data()
138 ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0x9a, 0x00, data); in ast_write_data()
139 send_ack(ast); in ast_write_data()
140 if (wait_ack(ast)) { in ast_write_data()
141 send_nack(ast); in ast_write_data()
145 send_nack(ast); in ast_write_data()
152 struct ast_device *ast = to_ast_device(dev);
157 if (wait_ack(ast) == false)
159 tmp = ast_get_index_reg_mask(ast, AST_IO_VGACRI, 0xd3, 0xff);
161 if (wait_nack(ast) == false) {
162 send_nack(ast);
165 send_nack(ast);
169 static void clear_cmd(struct ast_device *ast)
171 send_nack(ast);
172 ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0x9a, 0x00, 0x00);
176 static void ast_set_dp501_video_output(struct ast_device *ast, u8 mode) in ast_set_dp501_video_output() argument
178 ast_write_cmd(ast, 0x40); in ast_set_dp501_video_output()
179 ast_write_data(ast, mode); in ast_set_dp501_video_output()
184 static u32 get_fw_base(struct ast_device *ast) in get_fw_base() argument
186 return ast_mindwm(ast, 0x1e6e2104) & 0x7fffffff; in get_fw_base()
189 bool ast_backup_fw(struct ast_device *ast, u8 *addr, u32 size) in ast_backup_fw() argument
194 if (ast->config_mode != ast_use_p2a) in ast_backup_fw()
197 data = ast_mindwm(ast, 0x1e6e2100) & 0x01; in ast_backup_fw()
199 boot_address = get_fw_base(ast); in ast_backup_fw()
201 *(u32 *)(addr + i) = ast_mindwm(ast, boot_address + i); in ast_backup_fw()
207 static bool ast_launch_m68k(struct ast_device *ast) in ast_launch_m68k() argument
214 if (ast->config_mode != ast_use_p2a) in ast_launch_m68k()
217 data = ast_mindwm(ast, 0x1e6e2100) & 0x01; in ast_launch_m68k()
220 if (ast->dp501_fw_addr) { in ast_launch_m68k()
221 fw_addr = ast->dp501_fw_addr; in ast_launch_m68k()
224 if (!ast->dp501_fw && in ast_launch_m68k()
225 ast_load_dp501_microcode(ast) < 0) in ast_launch_m68k()
228 fw_addr = (u8 *)ast->dp501_fw->data; in ast_launch_m68k()
229 len = ast->dp501_fw->size; in ast_launch_m68k()
232 ast_moutdwm(ast, 0x1e6e2000, 0x1688a8a8); in ast_launch_m68k()
233 data = ast_mindwm(ast, 0x1e6e0004); in ast_launch_m68k()
254 ast_moutdwm(ast, boot_address + i, data); in ast_launch_m68k()
258 ast_moutdwm(ast, 0x1e6e2000, 0x1688a8a8); in ast_launch_m68k()
261 ast_moutdwm(ast, 0x1e6e2104, 0x80000000 + boot_address); in ast_launch_m68k()
262 ast_moutdwm(ast, 0x1e6e2100, 1); in ast_launch_m68k()
265 data = ast_mindwm(ast, 0x1e6e2040) & 0xfffff1ff; /* D[11:9] = 100b: UEFI handling */ in ast_launch_m68k()
267 ast_moutdwm(ast, 0x1e6e2040, data); in ast_launch_m68k()
269 jreg = ast_get_index_reg_mask(ast, AST_IO_VGACRI, 0x99, 0xfc); /* D[1:0]: Reserved Video Buffer */ in ast_launch_m68k()
271 ast_set_index_reg(ast, AST_IO_VGACRI, 0x99, jreg); in ast_launch_m68k()
276 static bool ast_dp501_is_connected(struct ast_device *ast) in ast_dp501_is_connected() argument
280 if (ast->config_mode == ast_use_p2a) { in ast_dp501_is_connected()
281 boot_address = get_fw_base(ast); in ast_dp501_is_connected()
285 data = ast_mindwm(ast, boot_address + offset); in ast_dp501_is_connected()
291 data = ast_mindwm(ast, boot_address + offset); in ast_dp501_is_connected()
295 if (!ast->dp501_fw_buf) in ast_dp501_is_connected()
300 data = readl(ast->dp501_fw_buf + offset); in ast_dp501_is_connected()
304 data = readl(ast->dp501_fw_buf + offset); in ast_dp501_is_connected()
310 data = readl(ast->dp501_fw_buf + offset); in ast_dp501_is_connected()
319 struct ast_device *ast = data; in ast_dp512_read_edid_block() local
328 if (ast->config_mode == ast_use_p2a) { in ast_dp512_read_edid_block()
329 boot_address = get_fw_base(ast); in ast_dp512_read_edid_block()
332 ediddata = ast_mindwm(ast, boot_address + offset + i); in ast_dp512_read_edid_block()
338 ediddata = readl(ast->dp501_fw_buf + offset + i); in ast_dp512_read_edid_block()
347 static bool ast_init_dvo(struct ast_device *ast) in ast_init_dvo() argument
351 ast_write32(ast, 0xf004, 0x1e6e0000); in ast_init_dvo()
352 ast_write32(ast, 0xf000, 0x1); in ast_init_dvo()
353 ast_write32(ast, 0x12000, 0x1688a8a8); in ast_init_dvo()
355 jreg = ast_get_index_reg_mask(ast, AST_IO_VGACRI, 0xd0, 0xff); in ast_init_dvo()
358 data = ast_read32(ast, 0x12008); in ast_init_dvo()
362 ast_write32(ast, 0x12008, data); in ast_init_dvo()
364 if (IS_AST_GEN4(ast)) { in ast_init_dvo()
365 data = ast_read32(ast, 0x12084); in ast_init_dvo()
368 ast_write32(ast, 0x12084, data); in ast_init_dvo()
370 data = ast_read32(ast, 0x12088); in ast_init_dvo()
373 ast_write32(ast, 0x12088, data); in ast_init_dvo()
375 data = ast_read32(ast, 0x12090); in ast_init_dvo()
379 ast_write32(ast, 0x12090, data); in ast_init_dvo()
381 data = ast_read32(ast, 0x12088); in ast_init_dvo()
384 ast_write32(ast, 0x12088, data); in ast_init_dvo()
386 data = ast_read32(ast, 0x1208c); in ast_init_dvo()
389 ast_write32(ast, 0x1208c, data); in ast_init_dvo()
391 data = ast_read32(ast, 0x120a4); in ast_init_dvo()
394 ast_write32(ast, 0x120a4, data); in ast_init_dvo()
396 data = ast_read32(ast, 0x120a8); in ast_init_dvo()
399 ast_write32(ast, 0x120a8, data); in ast_init_dvo()
401 data = ast_read32(ast, 0x12094); in ast_init_dvo()
404 ast_write32(ast, 0x12094, data); in ast_init_dvo()
409 data = ast_read32(ast, 0x1202c); in ast_init_dvo()
411 ast_write32(ast, 0x1202c, data); in ast_init_dvo()
414 ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0xa3, 0xcf, 0x80); in ast_init_dvo()
419 static void ast_init_analog(struct ast_device *ast) in ast_init_analog() argument
428 ast_write32(ast, 0xf004, 0x1e6e0000); in ast_init_analog()
429 ast_write32(ast, 0xf000, 0x1); in ast_init_analog()
432 ast_write32(ast, 0x12000, 0x1688a8a8); in ast_init_analog()
433 ast_write32(ast, 0x12000, 0x1688a8a8); in ast_init_analog()
434 ast_write32(ast, 0x12000, 0x1688a8a8); in ast_init_analog()
437 data = ast_read32(ast, 0x1202c); in ast_init_analog()
439 ast_write32(ast, 0, data); in ast_init_analog()
442 ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0xa3, 0xcf, 0x00); in ast_init_analog()
445 void ast_init_3rdtx(struct ast_device *ast) in ast_init_3rdtx() argument
449 if (IS_AST_GEN4(ast) || IS_AST_GEN5(ast)) { in ast_init_3rdtx()
450 vgacrd1 = ast_get_index_reg_mask(ast, AST_IO_VGACRI, 0xd1, in ast_init_3rdtx()
454 ast_init_dvo(ast); in ast_init_3rdtx()
457 ast_launch_m68k(ast); in ast_init_3rdtx()
460 ast_init_dvo(ast); in ast_init_3rdtx()
463 if (ast->tx_chip == AST_TX_SIL164) in ast_init_3rdtx()
464 ast_init_dvo(ast); in ast_init_3rdtx()
466 ast_init_analog(ast); in ast_init_3rdtx()
482 struct ast_device *ast = to_ast_device(encoder->dev); in ast_dp501_encoder_helper_atomic_enable() local
484 ast_set_dp501_video_output(ast, 1); in ast_dp501_encoder_helper_atomic_enable()
490 struct ast_device *ast = to_ast_device(encoder->dev); in ast_dp501_encoder_helper_atomic_disable() local
492 ast_set_dp501_video_output(ast, 0); in ast_dp501_encoder_helper_atomic_disable()
510 struct ast_device *ast = to_ast_device(connector->dev); in ast_dp501_connector_helper_get_modes() local
513 drm_edid = drm_edid_read_custom(connector, ast_dp512_read_edid_block, ast); in ast_dp501_connector_helper_get_modes()
538 struct ast_device *ast = to_ast_device(connector->dev); in ast_dp501_connector_helper_detect_ctx() local
541 if (ast_dp501_is_connected(ast)) in ast_dp501_connector_helper_detect_ctx()
568 int ast_dp501_output_init(struct ast_device *ast) in ast_dp501_output_init() argument
570 struct drm_device *dev = &ast->base; in ast_dp501_output_init()
571 struct drm_crtc *crtc = &ast->crtc; in ast_dp501_output_init()
579 encoder = &ast->output.dp501.encoder; in ast_dp501_output_init()
590 ast_connector = &ast->output.dp501.connector; in ast_dp501_output_init()