Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amd/amdgpu: export vbios information (v2)

Allows userspace components to fetch information
from the vbios image.

v2: agd: fix warning

Reviewed-by: Edward O'Callaghan <funfunctor@folklore1984.net>
Signed-off-by: Evan Quan <evan.quan@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Christian Koenig <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Evan Quan and committed by
Alex Deucher
40ee5888 a9f5db9c

+37
+26
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
··· 544 544 return copy_to_user(out, &vce_clk_table, 545 545 min((size_t)size, sizeof(vce_clk_table))) ? -EFAULT : 0; 546 546 } 547 + case AMDGPU_INFO_VBIOS: { 548 + uint32_t bios_size = adev->bios_size; 549 + 550 + switch (info->vbios_info.type) { 551 + case AMDGPU_INFO_VBIOS_SIZE: 552 + return copy_to_user(out, &bios_size, 553 + min((size_t)size, sizeof(bios_size))) 554 + ? -EFAULT : 0; 555 + case AMDGPU_INFO_VBIOS_IMAGE: { 556 + uint8_t *bios; 557 + uint32_t bios_offset = info->vbios_info.offset; 558 + 559 + if (bios_offset >= bios_size) 560 + return -EINVAL; 561 + 562 + bios = adev->bios + bios_offset; 563 + return copy_to_user(out, bios, 564 + min((size_t)size, (size_t)(bios_size - bios_offset))) 565 + ? -EFAULT : 0; 566 + } 567 + default: 568 + DRM_DEBUG_KMS("Invalid request %d\n", 569 + info->vbios_info.type); 570 + return -EINVAL; 571 + } 572 + } 547 573 default: 548 574 DRM_DEBUG_KMS("Invalid request %d\n", info->query); 549 575 return -EINVAL;
+11
include/uapi/drm/amdgpu_drm.h
··· 522 522 #define AMDGPU_INFO_MEMORY 0x19 523 523 /* Query vce clock table */ 524 524 #define AMDGPU_INFO_VCE_CLOCK_TABLE 0x1A 525 + /* Query vbios related information */ 526 + #define AMDGPU_INFO_VBIOS 0x1B 527 + /* Subquery id: Query vbios size */ 528 + #define AMDGPU_INFO_VBIOS_SIZE 0x1 529 + /* Subquery id: Query vbios image */ 530 + #define AMDGPU_INFO_VBIOS_IMAGE 0x2 525 531 526 532 #define AMDGPU_INFO_MMR_SE_INDEX_SHIFT 0 527 533 #define AMDGPU_INFO_MMR_SE_INDEX_MASK 0xff ··· 586 580 } read_mmr_reg; 587 581 588 582 struct drm_amdgpu_query_fw query_fw; 583 + 584 + struct { 585 + __u32 type; 586 + __u32 offset; 587 + } vbios_info; 589 588 }; 590 589 }; 591 590