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

drm/radeon: add get_allowed_info_register for EG/BTC

Registers that can be fetched from the info ioctl.

Tested-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

+34
+28
drivers/gpu/drm/radeon/evergreen.c
··· 1006 1006 } 1007 1007 } 1008 1008 1009 + /** 1010 + * evergreen_get_allowed_info_register - fetch the register for the info ioctl 1011 + * 1012 + * @rdev: radeon_device pointer 1013 + * @reg: register offset in bytes 1014 + * @val: register value 1015 + * 1016 + * Returns 0 for success or -EINVAL for an invalid register 1017 + * 1018 + */ 1019 + int evergreen_get_allowed_info_register(struct radeon_device *rdev, 1020 + u32 reg, u32 *val) 1021 + { 1022 + switch (reg) { 1023 + case GRBM_STATUS: 1024 + case GRBM_STATUS_SE0: 1025 + case GRBM_STATUS_SE1: 1026 + case SRBM_STATUS: 1027 + case SRBM_STATUS2: 1028 + case DMA_STATUS_REG: 1029 + case UVD_STATUS: 1030 + *val = RREG32(reg); 1031 + return 0; 1032 + default: 1033 + return -EINVAL; 1034 + } 1035 + } 1036 + 1009 1037 void evergreen_tiling_fields(unsigned tiling_flags, unsigned *bankw, 1010 1038 unsigned *bankh, unsigned *mtaspect, 1011 1039 unsigned *tile_split)
+1
drivers/gpu/drm/radeon/evergreend.h
··· 1520 1520 #define UVD_UDEC_DBW_ADDR_CONFIG 0xef54 1521 1521 #define UVD_RBC_RB_RPTR 0xf690 1522 1522 #define UVD_RBC_RB_WPTR 0xf694 1523 + #define UVD_STATUS 0xf6bc 1523 1524 1524 1525 /* 1525 1526 * PM4
+3
drivers/gpu/drm/radeon/radeon_asic.c
··· 1344 1344 .mc_wait_for_idle = &evergreen_mc_wait_for_idle, 1345 1345 .get_xclk = &rv770_get_xclk, 1346 1346 .get_gpu_clock_counter = &r600_get_gpu_clock_counter, 1347 + .get_allowed_info_register = evergreen_get_allowed_info_register, 1347 1348 .gart = { 1348 1349 .tlb_flush = &evergreen_pcie_gart_tlb_flush, 1349 1350 .get_page_entry = &rs600_gart_get_page_entry, ··· 1438 1437 .mc_wait_for_idle = &evergreen_mc_wait_for_idle, 1439 1438 .get_xclk = &r600_get_xclk, 1440 1439 .get_gpu_clock_counter = &r600_get_gpu_clock_counter, 1440 + .get_allowed_info_register = evergreen_get_allowed_info_register, 1441 1441 .gart = { 1442 1442 .tlb_flush = &evergreen_pcie_gart_tlb_flush, 1443 1443 .get_page_entry = &rs600_gart_get_page_entry, ··· 1531 1529 .mc_wait_for_idle = &evergreen_mc_wait_for_idle, 1532 1530 .get_xclk = &rv770_get_xclk, 1533 1531 .get_gpu_clock_counter = &r600_get_gpu_clock_counter, 1532 + .get_allowed_info_register = evergreen_get_allowed_info_register, 1534 1533 .gart = { 1535 1534 .tlb_flush = &evergreen_pcie_gart_tlb_flush, 1536 1535 .get_page_entry = &rs600_gart_get_page_entry,
+2
drivers/gpu/drm/radeon/radeon_asic.h
··· 548 548 unsigned num_gpu_pages, 549 549 struct reservation_object *resv); 550 550 int evergreen_get_temp(struct radeon_device *rdev); 551 + int evergreen_get_allowed_info_register(struct radeon_device *rdev, 552 + u32 reg, u32 *val); 551 553 int sumo_get_temp(struct radeon_device *rdev); 552 554 int tn_get_temp(struct radeon_device *rdev); 553 555 int cypress_dpm_init(struct radeon_device *rdev);