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

Configure Feed

Select the types of activity you want to include in your feed.

powerpc/pseries: Macros and wrapper functions for H_HTM call

Define macros and wrapper functions to handle
H_HTM (Hardware Trace Macro) hypervisor call.
H_HTM is new HCALL added to export data from
Hardware Trace Macro (HTM) function.

Signed-off-by: Abhishek Dubey <adubey@linux.ibm.com>
Co-developed-by: Madhavan Srinivasan <maddy@linux.ibm.com>
Reviewed-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
Link: https://patch.msgid.link/20250113164039.302017-1-adubey@linux.ibm.com

authored by

Abhishek Dubey and committed by
Madhavan Srinivasan
708220ae c96b1402

+55
+34
arch/powerpc/include/asm/hvcall.h
··· 348 348 #define H_SCM_FLUSH 0x44C 349 349 #define H_GET_ENERGY_SCALE_INFO 0x450 350 350 #define H_PKS_SIGNED_UPDATE 0x454 351 + #define H_HTM 0x458 351 352 #define H_WATCHDOG 0x45C 352 353 #define H_GUEST_GET_CAPABILITIES 0x460 353 354 #define H_GUEST_SET_CAPABILITIES 0x464 ··· 498 497 #define H_GUEST_CAP_POWER10 (1UL<<(63-2)) 499 498 #define H_GUEST_CAP_POWER11 (1UL<<(63-3)) 500 499 #define H_GUEST_CAP_BITMAP2 (1UL<<(63-63)) 500 + 501 + /* 502 + * Defines for H_HTM - Macros for hardware trace macro (HTM) function. 503 + */ 504 + #define H_HTM_FLAGS_HARDWARE_TARGET (1ul << 63) 505 + #define H_HTM_FLAGS_LOGICAL_TARGET (1ul << 62) 506 + #define H_HTM_FLAGS_PROCID_TARGET (1ul << 61) 507 + #define H_HTM_FLAGS_NOWRAP (1ul << 60) 508 + 509 + #define H_HTM_OP_SHIFT (63-15) 510 + #define H_HTM_OP(x) ((unsigned long)(x)<<H_HTM_OP_SHIFT) 511 + #define H_HTM_OP_CAPABILITIES 0x01 512 + #define H_HTM_OP_STATUS 0x02 513 + #define H_HTM_OP_SETUP 0x03 514 + #define H_HTM_OP_CONFIGURE 0x04 515 + #define H_HTM_OP_START 0x05 516 + #define H_HTM_OP_STOP 0x06 517 + #define H_HTM_OP_DECONFIGURE 0x07 518 + #define H_HTM_OP_DUMP_DETAILS 0x08 519 + #define H_HTM_OP_DUMP_DATA 0x09 520 + #define H_HTM_OP_DUMP_SYSMEM_CONF 0x0a 521 + #define H_HTM_OP_DUMP_SYSPROC_CONF 0x0b 522 + 523 + #define H_HTM_TYPE_SHIFT (63-31) 524 + #define H_HTM_TYPE(x) ((unsigned long)(x)<<H_HTM_TYPE_SHIFT) 525 + #define H_HTM_TYPE_NEST 0x01 526 + #define H_HTM_TYPE_CORE 0x02 527 + #define H_HTM_TYPE_LLAT 0x03 528 + #define H_HTM_TYPE_GLOBAL 0xff 529 + 530 + #define H_HTM_TARGET_NODE_INDEX(x) ((unsigned long)(x)<<(63-15)) 531 + #define H_HTM_TARGET_NODAL_CHIP_INDEX(x) ((unsigned long)(x)<<(63-31)) 532 + #define H_HTM_TARGET_CORE_INDEX_ON_CHIP(x) ((unsigned long)(x)<<(63-47)) 501 533 502 534 #ifndef __ASSEMBLY__ 503 535 #include <linux/types.h>
+21
arch/powerpc/include/asm/plpar_wrappers.h
··· 65 65 return vpa_call(H_VPA_REG_DTL, cpu, vpa); 66 66 } 67 67 68 + static inline long htm_call(unsigned long flags, unsigned long target, 69 + unsigned long operation, unsigned long param1, 70 + unsigned long param2, unsigned long param3) 71 + { 72 + return plpar_hcall_norets(H_HTM, flags, target, operation, 73 + param1, param2, param3); 74 + } 75 + 76 + static inline long htm_get_dump_hardware(unsigned long nodeindex, 77 + unsigned long nodalchipindex, unsigned long coreindexonchip, 78 + unsigned long type, unsigned long addr, unsigned long size, 79 + unsigned long offset) 80 + { 81 + return htm_call(H_HTM_FLAGS_HARDWARE_TARGET, 82 + H_HTM_TARGET_NODE_INDEX(nodeindex) | 83 + H_HTM_TARGET_NODAL_CHIP_INDEX(nodalchipindex) | 84 + H_HTM_TARGET_CORE_INDEX_ON_CHIP(coreindexonchip), 85 + H_HTM_OP(H_HTM_OP_DUMP_DATA) | H_HTM_TYPE(type), 86 + addr, size, offset); 87 + } 88 + 68 89 extern void vpa_init(int cpu); 69 90 70 91 static inline long plpar_pte_enter(unsigned long flags,