powerpc/powernv: Add IMC OPAL APIs
In-Memory Collection (IMC) counters are performance monitoring infrastructure. These counters need special sequence of SCOMs to init/start/stop which is handled by OPAL. And OPAL provides three APIs to init and control these IMC engines. OPAL API documentation: https://github.com/open-power/skiboot/blob/master/doc/opal-api/opal-imc-counters.rst Patch updates the kernel side powernv platform code to support the new OPAL APIs Signed-off-by: Hemant Kumar <hemant@linux.vnet.ibm.com> Signed-off-by: Anju T Sudhakar <anju@linux.vnet.ibm.com> Signed-off-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
7e7dc66adc
commit
28a5db0061
@ -190,7 +190,10 @@
|
|||||||
#define OPAL_NPU_INIT_CONTEXT 146
|
#define OPAL_NPU_INIT_CONTEXT 146
|
||||||
#define OPAL_NPU_DESTROY_CONTEXT 147
|
#define OPAL_NPU_DESTROY_CONTEXT 147
|
||||||
#define OPAL_NPU_MAP_LPAR 148
|
#define OPAL_NPU_MAP_LPAR 148
|
||||||
#define OPAL_LAST 148
|
#define OPAL_IMC_COUNTERS_INIT 149
|
||||||
|
#define OPAL_IMC_COUNTERS_START 150
|
||||||
|
#define OPAL_IMC_COUNTERS_STOP 151
|
||||||
|
#define OPAL_LAST 151
|
||||||
|
|
||||||
/* Device tree flags */
|
/* Device tree flags */
|
||||||
|
|
||||||
@ -1084,6 +1087,13 @@ enum {
|
|||||||
XIVE_DUMP_EMU_STATE = 5,
|
XIVE_DUMP_EMU_STATE = 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* "type" argument options for OPAL_IMC_COUNTERS_* calls */
|
||||||
|
enum {
|
||||||
|
OPAL_IMC_COUNTERS_NEST = 1,
|
||||||
|
OPAL_IMC_COUNTERS_CORE = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|
||||||
#endif /* __OPAL_API_H */
|
#endif /* __OPAL_API_H */
|
||||||
|
@ -268,6 +268,11 @@ int64_t opal_xive_free_irq(uint32_t girq);
|
|||||||
int64_t opal_xive_sync(uint32_t type, uint32_t id);
|
int64_t opal_xive_sync(uint32_t type, uint32_t id);
|
||||||
int64_t opal_xive_dump(uint32_t type, uint32_t id);
|
int64_t opal_xive_dump(uint32_t type, uint32_t id);
|
||||||
|
|
||||||
|
int64_t opal_imc_counters_init(uint32_t type, uint64_t address,
|
||||||
|
uint64_t cpu_pir);
|
||||||
|
int64_t opal_imc_counters_start(uint32_t type, uint64_t cpu_pir);
|
||||||
|
int64_t opal_imc_counters_stop(uint32_t type, uint64_t cpu_pir);
|
||||||
|
|
||||||
/* Internal functions */
|
/* Internal functions */
|
||||||
extern int early_init_dt_scan_opal(unsigned long node, const char *uname,
|
extern int early_init_dt_scan_opal(unsigned long node, const char *uname,
|
||||||
int depth, void *data);
|
int depth, void *data);
|
||||||
|
@ -310,3 +310,6 @@ OPAL_CALL(opal_xive_dump, OPAL_XIVE_DUMP);
|
|||||||
OPAL_CALL(opal_npu_init_context, OPAL_NPU_INIT_CONTEXT);
|
OPAL_CALL(opal_npu_init_context, OPAL_NPU_INIT_CONTEXT);
|
||||||
OPAL_CALL(opal_npu_destroy_context, OPAL_NPU_DESTROY_CONTEXT);
|
OPAL_CALL(opal_npu_destroy_context, OPAL_NPU_DESTROY_CONTEXT);
|
||||||
OPAL_CALL(opal_npu_map_lpar, OPAL_NPU_MAP_LPAR);
|
OPAL_CALL(opal_npu_map_lpar, OPAL_NPU_MAP_LPAR);
|
||||||
|
OPAL_CALL(opal_imc_counters_init, OPAL_IMC_COUNTERS_INIT);
|
||||||
|
OPAL_CALL(opal_imc_counters_start, OPAL_IMC_COUNTERS_START);
|
||||||
|
OPAL_CALL(opal_imc_counters_stop, OPAL_IMC_COUNTERS_STOP);
|
||||||
|
Loading…
Reference in New Issue
Block a user