Lines Matching +full:3 +full:base +full:- +full:x
38 #include "atom-names.h"
39 #include "atom-bits.h"
45 #define ATOM_COND_BELOW 3
58 #define PLL_DATA 3
85 {1, 2, 3, 0},
86 {1, 2, 3, 0},
87 {1, 2, 3, 0},
93 static int atom_def_dst[8] = { 0, 0, 1, 2, 0, 1, 2, 3 };
99 while (n--) in debug_print_spaces()
110 static uint32_t atom_iio_execute(struct atom_context *ctx, int base, in atom_iio_execute() argument
116 switch (CU8(base)) { in atom_iio_execute()
118 base++; in atom_iio_execute()
121 temp = ctx->card->reg_read(ctx->card, CU16(base + 1)); in atom_iio_execute()
122 base += 3; in atom_iio_execute()
125 ctx->card->reg_write(ctx->card, CU16(base + 1), temp); in atom_iio_execute()
126 base += 3; in atom_iio_execute()
130 ~((0xFFFFFFFF >> (32 - CU8(base + 1))) << in atom_iio_execute()
131 CU8(base + 2)); in atom_iio_execute()
132 base += 3; in atom_iio_execute()
136 (0xFFFFFFFF >> (32 - CU8(base + 1))) << CU8(base + in atom_iio_execute()
138 base += 3; in atom_iio_execute()
142 ~((0xFFFFFFFF >> (32 - CU8(base + 1))) << in atom_iio_execute()
143 CU8(base + 3)); in atom_iio_execute()
145 ((index >> CU8(base + 2)) & in atom_iio_execute()
146 (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base + in atom_iio_execute()
147 3); in atom_iio_execute()
148 base += 4; in atom_iio_execute()
152 ~((0xFFFFFFFF >> (32 - CU8(base + 1))) << in atom_iio_execute()
153 CU8(base + 3)); in atom_iio_execute()
155 ((data >> CU8(base + 2)) & in atom_iio_execute()
156 (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base + in atom_iio_execute()
157 3); in atom_iio_execute()
158 base += 4; in atom_iio_execute()
162 ~((0xFFFFFFFF >> (32 - CU8(base + 1))) << in atom_iio_execute()
163 CU8(base + 3)); in atom_iio_execute()
165 ((ctx-> in atom_iio_execute()
166 io_attr >> CU8(base + 2)) & (0xFFFFFFFF >> (32 - in atom_iio_execute()
168 (base in atom_iio_execute()
171 << CU8(base + 3); in atom_iio_execute()
172 base += 4; in atom_iio_execute()
186 struct atom_context *gctx = ctx->ctx; in atom_get_src_int()
188 align = (attr >> 3) & 7; in atom_get_src_int()
194 DEBUG("REG[0x%04X]", idx); in atom_get_src_int()
195 idx += gctx->reg_block; in atom_get_src_int()
196 switch (gctx->io_mode) { in atom_get_src_int()
198 val = gctx->card->reg_read(gctx->card, idx); in atom_get_src_int()
207 if (!(gctx->io_mode & 0x80)) { in atom_get_src_int()
211 if (!gctx->iio[gctx->io_mode & 0x7F]) { in atom_get_src_int()
213 gctx->io_mode & 0x7F); in atom_get_src_int()
218 gctx->iio[gctx->io_mode & 0x7F], in atom_get_src_int()
227 if (idx < ctx->ps_size) in atom_get_src_int()
228 val = get_unaligned_le32((u32 *)&ctx->ps[idx]); in atom_get_src_int()
230 pr_info("PS index out of range: %i > %i\n", idx, ctx->ps_size); in atom_get_src_int()
232 DEBUG("PS[0x%02X,0x%04X]", idx, val); in atom_get_src_int()
238 DEBUG("WS[0x%02X]", idx); in atom_get_src_int()
241 val = gctx->divmul[0]; in atom_get_src_int()
244 val = gctx->divmul[1]; in atom_get_src_int()
247 val = gctx->data_block; in atom_get_src_int()
250 val = gctx->shift; in atom_get_src_int()
253 val = 1 << gctx->shift; in atom_get_src_int()
256 val = ~(1 << gctx->shift); in atom_get_src_int()
259 val = gctx->fb_base; in atom_get_src_int()
262 val = gctx->io_attr; in atom_get_src_int()
265 val = gctx->reg_block; in atom_get_src_int()
268 if (idx < ctx->ws_size) in atom_get_src_int()
269 val = ctx->ws[idx]; in atom_get_src_int()
271 pr_info("WS index out of range: %i > %i\n", idx, ctx->ws_size); in atom_get_src_int()
278 if (gctx->data_block) in atom_get_src_int()
279 DEBUG("ID[0x%04X+%04X]", idx, gctx->data_block); in atom_get_src_int()
281 DEBUG("ID[0x%04X]", idx); in atom_get_src_int()
283 val = U32(idx + gctx->data_block); in atom_get_src_int()
288 if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) { in atom_get_src_int()
290 gctx->fb_base + (idx * 4), gctx->scratch_size_bytes); in atom_get_src_int()
293 val = gctx->scratch[(gctx->fb_base / 4) + idx]; in atom_get_src_int()
295 DEBUG("FB[0x%02X]", idx); in atom_get_src_int()
303 DEBUG("IMM 0x%08X\n", val); in atom_get_src_int()
311 DEBUG("IMM 0x%04X\n", val); in atom_get_src_int()
320 DEBUG("IMM 0x%02X\n", val); in atom_get_src_int()
328 DEBUG("PLL[0x%02X]", idx); in atom_get_src_int()
329 val = gctx->card->pll_read(gctx->card, idx); in atom_get_src_int()
335 DEBUG("MC[0x%02X]", idx); in atom_get_src_int()
336 val = gctx->card->mc_read(gctx->card, idx); in atom_get_src_int()
346 DEBUG(".[31:0] -> 0x%08X\n", val); in atom_get_src_int()
349 DEBUG(".[15:0] -> 0x%04X\n", val); in atom_get_src_int()
352 DEBUG(".[23:8] -> 0x%04X\n", val); in atom_get_src_int()
355 DEBUG(".[31:16] -> 0x%04X\n", val); in atom_get_src_int()
358 DEBUG(".[7:0] -> 0x%02X\n", val); in atom_get_src_int()
361 DEBUG(".[15:8] -> 0x%02X\n", val); in atom_get_src_int()
364 DEBUG(".[23:16] -> 0x%02X\n", val); in atom_get_src_int()
367 DEBUG(".[31:24] -> 0x%02X\n", val); in atom_get_src_int()
375 uint32_t align = (attr >> 3) & 7, arg = attr & 7; in atom_skip_src_int()
443 arg | atom_dst_to_src[(attr >> 3) & in atom_get_dst()
444 7][(attr >> 6) & 3] << 3, in atom_get_dst()
451 arg | atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & in atom_skip_dst()
452 3] << 3, ptr); in atom_skip_dst()
459 atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3], old_val = in atom_put_dst()
461 struct atom_context *gctx = ctx->ctx; in atom_put_dst()
471 DEBUG("REG[0x%04X]", idx); in atom_put_dst()
472 idx += gctx->reg_block; in atom_put_dst()
473 switch (gctx->io_mode) { in atom_put_dst()
476 gctx->card->reg_write(gctx->card, idx, in atom_put_dst()
479 gctx->card->reg_write(gctx->card, idx, val); in atom_put_dst()
488 if (!(gctx->io_mode & 0x80)) { in atom_put_dst()
492 if (!gctx->iio[gctx->io_mode & 0xFF]) { in atom_put_dst()
494 gctx->io_mode & 0x7F); in atom_put_dst()
497 atom_iio_execute(gctx, gctx->iio[gctx->io_mode & 0xFF], in atom_put_dst()
504 DEBUG("PS[0x%02X]", idx); in atom_put_dst()
505 if (idx >= ctx->ps_size) { in atom_put_dst()
506 pr_info("PS index out of range: %i > %i\n", idx, ctx->ps_size); in atom_put_dst()
509 ctx->ps[idx] = cpu_to_le32(val); in atom_put_dst()
514 DEBUG("WS[0x%02X]", idx); in atom_put_dst()
517 gctx->divmul[0] = val; in atom_put_dst()
520 gctx->divmul[1] = val; in atom_put_dst()
523 gctx->data_block = val; in atom_put_dst()
526 gctx->shift = val; in atom_put_dst()
532 gctx->fb_base = val; in atom_put_dst()
535 gctx->io_attr = val; in atom_put_dst()
538 gctx->reg_block = val; in atom_put_dst()
541 if (idx >= ctx->ws_size) { in atom_put_dst()
542 pr_info("WS index out of range: %i > %i\n", idx, ctx->ws_size); in atom_put_dst()
545 ctx->ws[idx] = val; in atom_put_dst()
551 if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) { in atom_put_dst()
553 gctx->fb_base + (idx * 4), gctx->scratch_size_bytes); in atom_put_dst()
555 gctx->scratch[(gctx->fb_base / 4) + idx] = val; in atom_put_dst()
556 DEBUG("FB[0x%02X]", idx); in atom_put_dst()
561 DEBUG("PLL[0x%02X]", idx); in atom_put_dst()
562 gctx->card->pll_write(gctx->card, idx, val); in atom_put_dst()
567 DEBUG("MC[0x%02X]", idx); in atom_put_dst()
568 gctx->card->mc_write(gctx->card, idx, val); in atom_put_dst()
573 DEBUG(".[31:0] <- 0x%08X\n", old_val); in atom_put_dst()
576 DEBUG(".[15:0] <- 0x%04X\n", old_val); in atom_put_dst()
579 DEBUG(".[23:8] <- 0x%04X\n", old_val); in atom_put_dst()
582 DEBUG(".[31:16] <- 0x%04X\n", old_val); in atom_put_dst()
585 DEBUG(".[7:0] <- 0x%02X\n", old_val); in atom_put_dst()
588 DEBUG(".[15:8] <- 0x%02X\n", old_val); in atom_put_dst()
591 DEBUG(".[23:16] <- 0x%02X\n", old_val); in atom_put_dst()
594 DEBUG(".[31:24] <- 0x%02X\n", old_val); in atom_put_dst()
641 if (U16(ctx->ctx->cmd_table + 4 + 2 * idx)) in atom_op_calltable()
642 …r = amdgpu_atom_execute_table_locked(ctx->ctx, idx, ctx->ps + ctx->ps_shift, ctx->ps_size - ctx->p… in atom_op_calltable()
644 ctx->abort = true; in atom_op_calltable()
654 attr |= atom_def_dst[attr >> 3] << 6; in atom_op_clear()
668 ctx->ctx->cs_equal = (dst == src); in atom_op_compare()
669 ctx->ctx->cs_above = (dst > src); in atom_op_compare()
670 SDEBUG(" result: %s %s\n", ctx->ctx->cs_equal ? "EQ" : "NE", in atom_op_compare()
671 ctx->ctx->cs_above ? "GT" : "LE"); in atom_op_compare()
695 ctx->ctx->divmul[0] = dst / src; in atom_op_div()
696 ctx->ctx->divmul[1] = dst % src; in atom_op_div()
698 ctx->ctx->divmul[0] = 0; in atom_op_div()
699 ctx->ctx->divmul[1] = 0; in atom_op_div()
714 val64 |= ((uint64_t)ctx->ctx->divmul[1]) << 32; in atom_op_div32()
716 ctx->ctx->divmul[0] = lower_32_bits(val64); in atom_op_div32()
717 ctx->ctx->divmul[1] = upper_32_bits(val64); in atom_op_div32()
719 ctx->ctx->divmul[0] = 0; in atom_op_div32()
720 ctx->ctx->divmul[1] = 0; in atom_op_div32()
737 execute = ctx->ctx->cs_above; in atom_op_jump()
740 execute = ctx->ctx->cs_above || ctx->ctx->cs_equal; in atom_op_jump()
746 execute = !(ctx->ctx->cs_above || ctx->ctx->cs_equal); in atom_op_jump()
749 execute = !ctx->ctx->cs_above; in atom_op_jump()
752 execute = ctx->ctx->cs_equal; in atom_op_jump()
755 execute = !ctx->ctx->cs_equal; in atom_op_jump()
760 SDEBUG(" target: 0x%04X\n", target); in atom_op_jump()
762 if (ctx->last_jump == (ctx->start + target)) { in atom_op_jump()
764 if (time_after(cjiffies, ctx->last_jump_jiffies)) { in atom_op_jump()
765 cjiffies -= ctx->last_jump_jiffies; in atom_op_jump()
769 ctx->abort = true; in atom_op_jump()
773 ctx->last_jump_jiffies = jiffies; in atom_op_jump()
776 ctx->last_jump = ctx->start + target; in atom_op_jump()
777 ctx->last_jump_jiffies = jiffies; in atom_op_jump()
779 *ptr = ctx->start + target; in atom_op_jump()
790 mask = atom_get_src_direct(ctx, ((attr >> 3) & 7), ptr); in atom_op_mask()
791 SDEBUG(" mask: 0x%08x", mask); in atom_op_mask()
805 if (((attr >> 3) & 7) != ATOM_SRC_DWORD) in atom_op_move()
825 ctx->ctx->divmul[0] = dst * src; in atom_op_mul()
838 ctx->ctx->divmul[0] = lower_32_bits(val64); in atom_op_mul32()
839 ctx->ctx->divmul[1] = upper_32_bits(val64); in atom_op_mul32()
864 SDEBUG("POST card output: 0x%02X\n", val); in atom_op_postcard()
888 ctx->ctx->data_block = 0; in atom_op_setdatablock()
890 ctx->ctx->data_block = ctx->start; in atom_op_setdatablock()
892 ctx->ctx->data_block = U16(ctx->ctx->data_table + 4 + 2 * idx); in atom_op_setdatablock()
893 SDEBUG(" base: 0x%04X\n", ctx->ctx->data_block); in atom_op_setdatablock()
900 ctx->ctx->fb_base = atom_get_src(ctx, attr, ptr); in atom_op_setfbbase()
914 ctx->ctx->io_mode = ATOM_IO_MM; in atom_op_setport()
916 ctx->ctx->io_mode = ATOM_IO_IIO | port; in atom_op_setport()
920 ctx->ctx->io_mode = ATOM_IO_PCI; in atom_op_setport()
924 ctx->ctx->io_mode = ATOM_IO_SYSIO; in atom_op_setport()
932 ctx->ctx->reg_block = U16(*ptr); in atom_op_setregblock()
934 SDEBUG(" base: 0x%04X\n", ctx->ctx->reg_block); in atom_op_setregblock()
943 attr |= atom_def_dst[attr >> 3] << 6; in atom_op_shift_left()
959 attr |= atom_def_dst[attr >> 3] << 6; in atom_op_shift_right()
974 uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3]; in atom_op_shl()
993 uint32_t dst_align = atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3]; in atom_op_shr()
1016 dst -= src; in atom_op_sub()
1036 SDEBUG(" target: %04X\n", target); in atom_op_switch()
1037 *ptr = ctx->start + target; in atom_op_switch()
1056 ctx->ctx->cs_equal = ((dst & src) == 0); in atom_op_test()
1057 SDEBUG(" result: %s\n", ctx->ctx->cs_equal ? "EQ" : "NE"); in atom_op_test()
1077 SDEBUG("DEBUG output: 0x%02X\n", val); in atom_op_debug()
1084 SDEBUG("PROCESSDS output: 0x%02X\n", val); in atom_op_processds()
1223 int base = CU16(ctx->cmd_table + 4 + 2 * index); in amdgpu_atom_execute_table_locked() local
1229 if (!base) in amdgpu_atom_execute_table_locked()
1230 return -EINVAL; in amdgpu_atom_execute_table_locked()
1232 len = CU16(base + ATOM_CT_SIZE_PTR); in amdgpu_atom_execute_table_locked()
1233 ws = CU8(base + ATOM_CT_WS_PTR); in amdgpu_atom_execute_table_locked()
1234 ps = CU8(base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK; in amdgpu_atom_execute_table_locked()
1235 ptr = base + ATOM_CT_CODE_PTR; in amdgpu_atom_execute_table_locked()
1237 SDEBUG(">> execute %04X (len %d, WS %d, PS %d)\n", base, len, ws, ps); in amdgpu_atom_execute_table_locked()
1241 ectx.start = base; in amdgpu_atom_execute_table_locked()
1259 SDEBUG("%s @ 0x%04X\n", atom_op_names[op], ptr - 1); in amdgpu_atom_execute_table_locked()
1261 SDEBUG("[%d] @ 0x%04X\n", op, ptr - 1); in amdgpu_atom_execute_table_locked()
1263 DRM_ERROR("atombios stuck executing %04X (len %d, WS %d, PS %d) @ 0x%04X\n", in amdgpu_atom_execute_table_locked()
1264 base, len, ws, ps, ptr - 1); in amdgpu_atom_execute_table_locked()
1265 ret = -EINVAL; in amdgpu_atom_execute_table_locked()
1278 debug_depth--; in amdgpu_atom_execute_table_locked()
1291 mutex_lock(&ctx->mutex); in amdgpu_atom_execute_table()
1293 ctx->data_block = 0; in amdgpu_atom_execute_table()
1295 ctx->reg_block = 0; in amdgpu_atom_execute_table()
1297 ctx->fb_base = 0; in amdgpu_atom_execute_table()
1299 ctx->io_mode = ATOM_IO_MM; in amdgpu_atom_execute_table()
1301 ctx->divmul[0] = 0; in amdgpu_atom_execute_table()
1302 ctx->divmul[1] = 0; in amdgpu_atom_execute_table()
1304 mutex_unlock(&ctx->mutex); in amdgpu_atom_execute_table()
1308 static int atom_iio_len[] = { 1, 2, 3, 3, 3, 3, 4, 4, 4, 3 };
1310 static void atom_index_iio(struct atom_context *ctx, int base) in atom_index_iio() argument
1312 ctx->iio = kzalloc(2 * 256, GFP_KERNEL); in atom_index_iio()
1313 if (!ctx->iio) in atom_index_iio()
1315 while (CU8(base) == ATOM_IIO_START) { in atom_index_iio()
1316 ctx->iio[CU8(base + 1)] = base + 2; in atom_index_iio()
1317 base += 2; in atom_index_iio()
1318 while (CU8(base) != ATOM_IIO_END) in atom_index_iio()
1319 base += atom_iio_len[CU8(base)]; in atom_index_iio()
1320 base += 3; in atom_index_iio()
1333 const char *na = "--N/A--"; in atom_get_vbios_name()
1336 p_rom = ctx->bios; in atom_get_vbios_name()
1346 memcpy(ctx->name, na, 7); in atom_get_vbios_name()
1347 ctx->name[7] = 0; in atom_get_vbios_name()
1353 * 1st is P/N, 2nd is ASIC, 3rd is PCI type, 4th is Memory type in atom_get_vbios_name()
1364 name_size = strnlen(c_ptr, STRLEN_LONG - 1); in atom_get_vbios_name()
1365 memcpy(ctx->name, c_ptr, name_size); in atom_get_vbios_name()
1366 back = ctx->name + name_size; in atom_get_vbios_name()
1367 while ((*--back) == ' ') in atom_get_vbios_name()
1377 p_rom = ctx->bios; in atom_get_vbios_date()
1381 ctx->date[0] = '2'; in atom_get_vbios_date()
1382 ctx->date[1] = '0'; in atom_get_vbios_date()
1383 ctx->date[2] = date_in_rom[6]; in atom_get_vbios_date()
1384 ctx->date[3] = date_in_rom[7]; in atom_get_vbios_date()
1385 ctx->date[4] = '/'; in atom_get_vbios_date()
1386 ctx->date[5] = date_in_rom[0]; in atom_get_vbios_date()
1387 ctx->date[6] = date_in_rom[1]; in atom_get_vbios_date()
1388 ctx->date[7] = '/'; in atom_get_vbios_date()
1389 ctx->date[8] = date_in_rom[3]; in atom_get_vbios_date()
1390 ctx->date[9] = date_in_rom[4]; in atom_get_vbios_date()
1391 ctx->date[10] = ' '; in atom_get_vbios_date()
1392 ctx->date[11] = date_in_rom[9]; in atom_get_vbios_date()
1393 ctx->date[12] = date_in_rom[10]; in atom_get_vbios_date()
1394 ctx->date[13] = date_in_rom[11]; in atom_get_vbios_date()
1395 ctx->date[14] = date_in_rom[12]; in atom_get_vbios_date()
1396 ctx->date[15] = date_in_rom[13]; in atom_get_vbios_date()
1397 ctx->date[16] = '\0'; in atom_get_vbios_date()
1409 p_rom = ctx->bios; in atom_find_str_in_rom()
1431 p_rom = ctx->bios; in atom_get_vbios_pn()
1443 vbios_str = atom_find_str_in_rom(ctx, BIOS_ATOM_PREFIX, 3, 1024, 64); in atom_get_vbios_pn()
1445 vbios_str += sizeof(BIOS_ATOM_PREFIX) - 1; in atom_get_vbios_pn()
1454 ctx->vbios_pn[count] = vbios_str[count]; in atom_get_vbios_pn()
1458 ctx->vbios_pn[count] = 0; in atom_get_vbios_pn()
1461 pr_info("ATOM BIOS: %s\n", ctx->vbios_pn); in atom_get_vbios_pn()
1466 unsigned short start = 3, end; in atom_get_vbios_version()
1470 p_rom = ctx->bios; in atom_get_vbios_version()
1480 start = 3; in atom_get_vbios_version()
1484 /* find anchor ATOMBIOSBK-AMD */ in atom_get_vbios_version()
1488 /* skip ATOMBIOSBK-AMD VER */ in atom_get_vbios_version()
1490 memcpy(ctx->vbios_ver_str, vbios_ver, STRLEN_NORMAL); in atom_get_vbios_version()
1492 ctx->vbios_ver_str[0] = '\0'; in atom_get_vbios_version()
1498 int base; in amdgpu_atom_parse() local
1508 ctx->card = card; in amdgpu_atom_parse()
1509 ctx->bios = bios; in amdgpu_atom_parse()
1524 base = CU16(ATOM_ROM_TABLE_PTR); in amdgpu_atom_parse()
1526 (CSTR(base + ATOM_ROM_MAGIC_PTR), ATOM_ROM_MAGIC, in amdgpu_atom_parse()
1533 ctx->cmd_table = CU16(base + ATOM_ROM_CMD_PTR); in amdgpu_atom_parse()
1534 ctx->data_table = CU16(base + ATOM_ROM_DATA_PTR); in amdgpu_atom_parse()
1535 atom_index_iio(ctx, CU16(ctx->data_table + ATOM_DATA_IIO_PTR) + 4); in amdgpu_atom_parse()
1536 if (!ctx->iio) { in amdgpu_atom_parse()
1541 atom_rom_header = (struct _ATOM_ROM_HEADER *)CSTR(base); in amdgpu_atom_parse()
1542 if (atom_rom_header->usMasterDataTableOffset != 0) { in amdgpu_atom_parse()
1544 CSTR(atom_rom_header->usMasterDataTableOffset); in amdgpu_atom_parse()
1545 if (master_table->ListOfDataTables.FirmwareInfo != 0) { in amdgpu_atom_parse()
1547 CSTR(master_table->ListOfDataTables.FirmwareInfo); in amdgpu_atom_parse()
1548 ctx->version = atom_fw_info->ulFirmwareRevision; in amdgpu_atom_parse()
1562 int hwi = CU16(ctx->data_table + ATOM_DATA_FWI_PTR); in amdgpu_atom_asic_init()
1573 if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT)) in amdgpu_atom_asic_init()
1586 kfree(ctx->iio); in amdgpu_atom_destroy()
1595 int idx = CU16(ctx->data_table + offset); in amdgpu_atom_parse_data_header()
1596 u16 *mdt = (u16 *)(ctx->bios + ctx->data_table + 4); in amdgpu_atom_parse_data_header()
1606 *crev = CU8(idx + 3); in amdgpu_atom_parse_data_header()
1615 int idx = CU16(ctx->cmd_table + offset); in amdgpu_atom_parse_cmd_header()
1616 u16 *mct = (u16 *)(ctx->bios + ctx->cmd_table + 4); in amdgpu_atom_parse_cmd_header()
1624 *crev = CU8(idx + 3); in amdgpu_atom_parse_cmd_header()