Lines Matching refs:ctx

56 	struct atom_context *ctx;  member
66 static int amdgpu_atom_execute_table_locked(struct atom_context *ctx, int index, uint32_t * params);
67 int amdgpu_atom_execute_table(struct atom_context *ctx, int index, uint32_t * params);
102 static uint32_t atom_iio_execute(struct atom_context *ctx, int base, in atom_iio_execute() argument
113 temp = ctx->card->ioreg_read(ctx->card, CU16(base + 1)); in atom_iio_execute()
117 ctx->card->ioreg_write(ctx->card, CU16(base + 1), temp); in atom_iio_execute()
157 ((ctx-> in atom_iio_execute()
174 static uint32_t atom_get_src_int(atom_exec_context *ctx, uint8_t attr, in atom_get_src_int() argument
178 struct atom_context *gctx = ctx->ctx; in atom_get_src_int()
222 val = get_unaligned_le32((u32 *)&ctx->ps[idx]); in atom_get_src_int()
260 val = ctx->ws[idx]; in atom_get_src_int()
362 static void atom_skip_src_int(atom_exec_context *ctx, uint8_t attr, int *ptr) in atom_skip_src_int() argument
398 static uint32_t atom_get_src(atom_exec_context *ctx, uint8_t attr, int *ptr) in atom_get_src() argument
400 return atom_get_src_int(ctx, attr, ptr, NULL, 1); in atom_get_src()
403 static uint32_t atom_get_src_direct(atom_exec_context *ctx, uint8_t align, int *ptr) in atom_get_src_direct() argument
429 static uint32_t atom_get_dst(atom_exec_context *ctx, int arg, uint8_t attr, in atom_get_dst() argument
432 return atom_get_src_int(ctx, in atom_get_dst()
438 static void atom_skip_dst(atom_exec_context *ctx, int arg, uint8_t attr, int *ptr) in atom_skip_dst() argument
440 atom_skip_src_int(ctx, in atom_skip_dst()
445 static void atom_put_dst(atom_exec_context *ctx, int arg, uint8_t attr, in atom_put_dst() argument
451 struct atom_context *gctx = ctx->ctx; in atom_put_dst()
498 ctx->ps[idx] = cpu_to_le32(val); in atom_put_dst()
530 ctx->ws[idx] = val; in atom_put_dst()
584 static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg) in atom_op_add() argument
590 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); in atom_op_add()
592 src = atom_get_src(ctx, attr, ptr); in atom_op_add()
595 atom_put_dst(ctx, arg, attr, &dptr, dst, saved); in atom_op_add()
598 static void atom_op_and(atom_exec_context *ctx, int *ptr, int arg) in atom_op_and() argument
604 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); in atom_op_and()
606 src = atom_get_src(ctx, attr, ptr); in atom_op_and()
609 atom_put_dst(ctx, arg, attr, &dptr, dst, saved); in atom_op_and()
612 static void atom_op_beep(atom_exec_context *ctx, int *ptr, int arg) in atom_op_beep() argument
617 static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg) in atom_op_calltable() argument
626 if (U16(ctx->ctx->cmd_table + 4 + 2 * idx)) in atom_op_calltable()
627 r = amdgpu_atom_execute_table_locked(ctx->ctx, idx, ctx->ps + ctx->ps_shift); in atom_op_calltable()
629 ctx->abort = true; in atom_op_calltable()
633 static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg) in atom_op_clear() argument
640 atom_get_dst(ctx, arg, attr, ptr, &saved, 0); in atom_op_clear()
642 atom_put_dst(ctx, arg, attr, &dptr, 0, saved); in atom_op_clear()
645 static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg) in atom_op_compare() argument
650 dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1); in atom_op_compare()
652 src = atom_get_src(ctx, attr, ptr); in atom_op_compare()
653 ctx->ctx->cs_equal = (dst == src); in atom_op_compare()
654 ctx->ctx->cs_above = (dst > src); in atom_op_compare()
655 SDEBUG(" result: %s %s\n", ctx->ctx->cs_equal ? "EQ" : "NE", in atom_op_compare()
656 ctx->ctx->cs_above ? "GT" : "LE"); in atom_op_compare()
659 static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg) in atom_op_delay() argument
671 static void atom_op_div(atom_exec_context *ctx, int *ptr, int arg) in atom_op_div() argument
676 dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1); in atom_op_div()
678 src = atom_get_src(ctx, attr, ptr); in atom_op_div()
680 ctx->ctx->divmul[0] = dst / src; in atom_op_div()
681 ctx->ctx->divmul[1] = dst % src; in atom_op_div()
683 ctx->ctx->divmul[0] = 0; in atom_op_div()
684 ctx->ctx->divmul[1] = 0; in atom_op_div()
688 static void atom_op_div32(atom_exec_context *ctx, int *ptr, int arg) in atom_op_div32() argument
694 dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1); in atom_op_div32()
696 src = atom_get_src(ctx, attr, ptr); in atom_op_div32()
699 val64 |= ((uint64_t)ctx->ctx->divmul[1]) << 32; in atom_op_div32()
701 ctx->ctx->divmul[0] = lower_32_bits(val64); in atom_op_div32()
702 ctx->ctx->divmul[1] = upper_32_bits(val64); in atom_op_div32()
704 ctx->ctx->divmul[0] = 0; in atom_op_div32()
705 ctx->ctx->divmul[1] = 0; in atom_op_div32()
709 static void atom_op_eot(atom_exec_context *ctx, int *ptr, int arg) in atom_op_eot() argument
714 static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg) in atom_op_jump() argument
722 execute = ctx->ctx->cs_above; in atom_op_jump()
725 execute = ctx->ctx->cs_above || ctx->ctx->cs_equal; in atom_op_jump()
731 execute = !(ctx->ctx->cs_above || ctx->ctx->cs_equal); in atom_op_jump()
734 execute = !ctx->ctx->cs_above; in atom_op_jump()
737 execute = ctx->ctx->cs_equal; in atom_op_jump()
740 execute = !ctx->ctx->cs_equal; in atom_op_jump()
747 if (ctx->last_jump == (ctx->start + target)) { in atom_op_jump()
749 if (time_after(cjiffies, ctx->last_jump_jiffies)) { in atom_op_jump()
750 cjiffies -= ctx->last_jump_jiffies; in atom_op_jump()
753 ctx->abort = true; in atom_op_jump()
757 ctx->last_jump_jiffies = jiffies; in atom_op_jump()
760 ctx->last_jump = ctx->start + target; in atom_op_jump()
761 ctx->last_jump_jiffies = jiffies; in atom_op_jump()
763 *ptr = ctx->start + target; in atom_op_jump()
767 static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg) in atom_op_mask() argument
773 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); in atom_op_mask()
774 mask = atom_get_src_direct(ctx, ((attr >> 3) & 7), ptr); in atom_op_mask()
777 src = atom_get_src(ctx, attr, ptr); in atom_op_mask()
781 atom_put_dst(ctx, arg, attr, &dptr, dst, saved); in atom_op_mask()
784 static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg) in atom_op_move() argument
790 atom_get_dst(ctx, arg, attr, ptr, &saved, 0); in atom_op_move()
792 atom_skip_dst(ctx, arg, attr, ptr); in atom_op_move()
796 src = atom_get_src(ctx, attr, ptr); in atom_op_move()
798 atom_put_dst(ctx, arg, attr, &dptr, src, saved); in atom_op_move()
801 static void atom_op_mul(atom_exec_context *ctx, int *ptr, int arg) in atom_op_mul() argument
806 dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1); in atom_op_mul()
808 src = atom_get_src(ctx, attr, ptr); in atom_op_mul()
809 ctx->ctx->divmul[0] = dst * src; in atom_op_mul()
812 static void atom_op_mul32(atom_exec_context *ctx, int *ptr, int arg) in atom_op_mul32() argument
818 dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1); in atom_op_mul32()
820 src = atom_get_src(ctx, attr, ptr); in atom_op_mul32()
822 ctx->ctx->divmul[0] = lower_32_bits(val64); in atom_op_mul32()
823 ctx->ctx->divmul[1] = upper_32_bits(val64); in atom_op_mul32()
826 static void atom_op_nop(atom_exec_context *ctx, int *ptr, int arg) in atom_op_nop() argument
831 static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg) in atom_op_or() argument
837 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); in atom_op_or()
839 src = atom_get_src(ctx, attr, ptr); in atom_op_or()
842 atom_put_dst(ctx, arg, attr, &dptr, dst, saved); in atom_op_or()
845 static void atom_op_postcard(atom_exec_context *ctx, int *ptr, int arg) in atom_op_postcard() argument
851 static void atom_op_repeat(atom_exec_context *ctx, int *ptr, int arg) in atom_op_repeat() argument
856 static void atom_op_restorereg(atom_exec_context *ctx, int *ptr, int arg) in atom_op_restorereg() argument
861 static void atom_op_savereg(atom_exec_context *ctx, int *ptr, int arg) in atom_op_savereg() argument
866 static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg) in atom_op_setdatablock() argument
872 ctx->ctx->data_block = 0; in atom_op_setdatablock()
874 ctx->ctx->data_block = ctx->start; in atom_op_setdatablock()
876 ctx->ctx->data_block = U16(ctx->ctx->data_table + 4 + 2 * idx); in atom_op_setdatablock()
877 SDEBUG(" base: 0x%04X\n", ctx->ctx->data_block); in atom_op_setdatablock()
880 static void atom_op_setfbbase(atom_exec_context *ctx, int *ptr, int arg) in atom_op_setfbbase() argument
884 ctx->ctx->fb_base = atom_get_src(ctx, attr, ptr); in atom_op_setfbbase()
887 static void atom_op_setport(atom_exec_context *ctx, int *ptr, int arg) in atom_op_setport() argument
898 ctx->ctx->io_mode = ATOM_IO_MM; in atom_op_setport()
900 ctx->ctx->io_mode = ATOM_IO_IIO | port; in atom_op_setport()
904 ctx->ctx->io_mode = ATOM_IO_PCI; in atom_op_setport()
908 ctx->ctx->io_mode = ATOM_IO_SYSIO; in atom_op_setport()
914 static void atom_op_setregblock(atom_exec_context *ctx, int *ptr, int arg) in atom_op_setregblock() argument
916 ctx->ctx->reg_block = U16(*ptr); in atom_op_setregblock()
918 SDEBUG(" base: 0x%04X\n", ctx->ctx->reg_block); in atom_op_setregblock()
921 static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg) in atom_op_shift_left() argument
929 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); in atom_op_shift_left()
930 shift = atom_get_src_direct(ctx, ATOM_SRC_BYTE0, ptr); in atom_op_shift_left()
934 atom_put_dst(ctx, arg, attr, &dptr, dst, saved); in atom_op_shift_left()
937 static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg) in atom_op_shift_right() argument
945 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); in atom_op_shift_right()
946 shift = atom_get_src_direct(ctx, ATOM_SRC_BYTE0, ptr); in atom_op_shift_right()
950 atom_put_dst(ctx, arg, attr, &dptr, dst, saved); in atom_op_shift_right()
953 static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg) in atom_op_shl() argument
960 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); in atom_op_shl()
963 shift = atom_get_src(ctx, attr, ptr); in atom_op_shl()
969 atom_put_dst(ctx, arg, attr, &dptr, dst, saved); in atom_op_shl()
972 static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg) in atom_op_shr() argument
979 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); in atom_op_shr()
982 shift = atom_get_src(ctx, attr, ptr); in atom_op_shr()
988 atom_put_dst(ctx, arg, attr, &dptr, dst, saved); in atom_op_shr()
991 static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg) in atom_op_sub() argument
997 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); in atom_op_sub()
999 src = atom_get_src(ctx, attr, ptr); in atom_op_sub()
1002 atom_put_dst(ctx, arg, attr, &dptr, dst, saved); in atom_op_sub()
1005 static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg) in atom_op_switch() argument
1010 src = atom_get_src(ctx, attr, ptr); in atom_op_switch()
1016 atom_get_src(ctx, (attr & 0x38) | ATOM_ARG_IMM, in atom_op_switch()
1021 *ptr = ctx->start + target; in atom_op_switch()
1032 static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg) in atom_op_test() argument
1037 dst = atom_get_dst(ctx, arg, attr, ptr, NULL, 1); in atom_op_test()
1039 src = atom_get_src(ctx, attr, ptr); in atom_op_test()
1040 ctx->ctx->cs_equal = ((dst & src) == 0); in atom_op_test()
1041 SDEBUG(" result: %s\n", ctx->ctx->cs_equal ? "EQ" : "NE"); in atom_op_test()
1044 static void atom_op_xor(atom_exec_context *ctx, int *ptr, int arg) in atom_op_xor() argument
1050 dst = atom_get_dst(ctx, arg, attr, ptr, &saved, 1); in atom_op_xor()
1052 src = atom_get_src(ctx, attr, ptr); in atom_op_xor()
1055 atom_put_dst(ctx, arg, attr, &dptr, dst, saved); in atom_op_xor()
1058 static void atom_op_debug(atom_exec_context *ctx, int *ptr, int arg) in atom_op_debug() argument
1064 static void atom_op_processds(atom_exec_context *ctx, int *ptr, int arg) in atom_op_processds() argument
1205 static int amdgpu_atom_execute_table_locked(struct atom_context *ctx, int index, uint32_t * params) in amdgpu_atom_execute_table_locked() argument
1207 int base = CU16(ctx->cmd_table + 4 + 2 * index); in amdgpu_atom_execute_table_locked()
1223 ectx.ctx = ctx; in amdgpu_atom_execute_table_locked()
1266 int amdgpu_atom_execute_table(struct atom_context *ctx, int index, uint32_t * params) in amdgpu_atom_execute_table() argument
1270 mutex_lock(&ctx->mutex); in amdgpu_atom_execute_table()
1272 ctx->data_block = 0; in amdgpu_atom_execute_table()
1274 ctx->reg_block = 0; in amdgpu_atom_execute_table()
1276 ctx->fb_base = 0; in amdgpu_atom_execute_table()
1278 ctx->io_mode = ATOM_IO_MM; in amdgpu_atom_execute_table()
1280 ctx->divmul[0] = 0; in amdgpu_atom_execute_table()
1281 ctx->divmul[1] = 0; in amdgpu_atom_execute_table()
1282 r = amdgpu_atom_execute_table_locked(ctx, index, params); in amdgpu_atom_execute_table()
1283 mutex_unlock(&ctx->mutex); in amdgpu_atom_execute_table()
1289 static void atom_index_iio(struct atom_context *ctx, int base) in atom_index_iio() argument
1291 ctx->iio = kzalloc(2 * 256, GFP_KERNEL); in atom_index_iio()
1292 if (!ctx->iio) in atom_index_iio()
1295 ctx->iio[CU8(base + 1)] = base + 2; in atom_index_iio()
1306 struct atom_context *ctx = in amdgpu_atom_parse() local
1312 if (!ctx) in amdgpu_atom_parse()
1315 ctx->card = card; in amdgpu_atom_parse()
1316 ctx->bios = bios; in amdgpu_atom_parse()
1320 kfree(ctx); in amdgpu_atom_parse()
1327 kfree(ctx); in amdgpu_atom_parse()
1336 kfree(ctx); in amdgpu_atom_parse()
1340 ctx->cmd_table = CU16(base + ATOM_ROM_CMD_PTR); in amdgpu_atom_parse()
1341 ctx->data_table = CU16(base + ATOM_ROM_DATA_PTR); in amdgpu_atom_parse()
1342 atom_index_iio(ctx, CU16(ctx->data_table + ATOM_DATA_IIO_PTR) + 4); in amdgpu_atom_parse()
1343 if (!ctx->iio) { in amdgpu_atom_parse()
1344 amdgpu_atom_destroy(ctx); in amdgpu_atom_parse()
1361 return ctx; in amdgpu_atom_parse()
1364 int amdgpu_atom_asic_init(struct atom_context *ctx) in amdgpu_atom_asic_init() argument
1366 int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR); in amdgpu_atom_asic_init()
1377 if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT)) in amdgpu_atom_asic_init()
1379 ret = amdgpu_atom_execute_table(ctx, ATOM_CMD_INIT, ps); in amdgpu_atom_asic_init()
1388 void amdgpu_atom_destroy(struct atom_context *ctx) in amdgpu_atom_destroy() argument
1390 kfree(ctx->iio); in amdgpu_atom_destroy()
1391 kfree(ctx); in amdgpu_atom_destroy()
1394 bool amdgpu_atom_parse_data_header(struct atom_context *ctx, int index, in amdgpu_atom_parse_data_header() argument
1399 int idx = CU16(ctx->data_table + offset); in amdgpu_atom_parse_data_header()
1400 u16 *mdt = (u16 *)(ctx->bios + ctx->data_table + 4); in amdgpu_atom_parse_data_header()
1415 bool amdgpu_atom_parse_cmd_header(struct atom_context *ctx, int index, uint8_t * frev, in amdgpu_atom_parse_cmd_header() argument
1419 int idx = CU16(ctx->cmd_table + offset); in amdgpu_atom_parse_cmd_header()
1420 u16 *mct = (u16 *)(ctx->bios + ctx->cmd_table + 4); in amdgpu_atom_parse_cmd_header()
1432 int amdgpu_atom_allocate_fb_scratch(struct atom_context *ctx) in amdgpu_atom_allocate_fb_scratch() argument
1439 if (amdgpu_atom_parse_data_header(ctx, index, NULL, NULL, NULL, &data_offset)) { in amdgpu_atom_allocate_fb_scratch()
1440 firmware_usage = (struct _ATOM_VRAM_USAGE_BY_FIRMWARE *)(ctx->bios + data_offset); in amdgpu_atom_allocate_fb_scratch()
1448 ctx->scratch_size_bytes = 0; in amdgpu_atom_allocate_fb_scratch()
1452 ctx->scratch = kzalloc(usage_bytes, GFP_KERNEL); in amdgpu_atom_allocate_fb_scratch()
1453 if (!ctx->scratch) in amdgpu_atom_allocate_fb_scratch()
1455 ctx->scratch_size_bytes = usage_bytes; in amdgpu_atom_allocate_fb_scratch()