.. _device-tree/imc: =========================== IMC Device Tree Bindings =========================== See :ref:`imc` for general In-Memory Collection (IMC) counter information. imc-counters top-level node ---------------------------- .. code-block:: dts imc-counters { compatible = "ibm,opal-in-memory-counters"; #address-cells = <0x1>; #size-cells = <0x1>; phandle = <0x1000023a>; version-id = <0xd>; /* Denote IMC Events Catalog version used to build this DTS file. */ }; IMC device/units bindings ------------------------- .. code-block:: dts mcs3 { compatible = "ibm,imc-counters"; events-prefix = "PM_MCS3_"; /* denotes event name to be prefixed to get complete event name supported by this device */ phandle = <0x10000241>; events = <0x10000242>; /* phandle of the events node supported by this device */ unit = "MiB"; scale = "4"; /* unit and scale for all the events for this device */ reg = <0x118 0x8>; /* denotes base address for device event updates */ type = <0x10>; size = 0x40000; offset = 0x180000; base_addr = /* This is per-chip memory field and OPAL files it based on the no of chip in the system */ /* base_addr property also indicates (or hints) kernel whether to memory */ /* should be mmapped or allocated at system start for the counters */ chipids = }; trace@0 { compatible = "ibm,imc-counters"; events-prefix = "trace_"; reg = <0x0 0x8>; events = < &TRACE_IMC >; type = <0x2>; size = <0x40000>; }; IMC device event bindings ------------------------- .. code-block:: dts nest-mcs-events { #address-cells = <0x1>; #size-cells = <0x1>; phandle = <0x10000242>; event@98 { desc = "Total Write Bandwidth seen on both MCS"; /* event description */ phandle = <0x1000023d>; reg = <0x98 0x8>; /* event offset,when added with (nest-offset-address + device reg) will point to actual counter memory */ event-name = "DOWN_128B_DATA_XFER"; /* denotes the actual event name */ }; /* List of events supported */ }; TRACE_IMC: trace-events { #address-cells = <0x1>; #size-cells = <0x1>; event@10200000 { event-name = "cycles" ; /* For trace node, we only have cycles event now */ reg = <0x10200000 0x8>; desc = "Reference cycles" ; }; }; Trace-mode SCOM ---------------- Trace scom is a 64 bit value which contains the event information for IMC-trace mode. Following is the trace-scom layout. **TRACE_IMC_SCOM bit representation** :0-1: SAMPSEL :2-33: CPMC_LOAD :34-40: CPMC1SEL :41-47: CPMC2SEL :48-50: BUFFERSIZE :51-63: RESERVED *CPMC_LOAD* contains the sampling duration. *SAMPSEL* and *CPMC*SEL* determines the event to count. *BUFFRSIZE* indicates the memory range. *BUFFERSIZE* can be .. code-block:: text b’000’ - 4K entries * 64 per entry = 256K b’001’ - 8K entries * 64 per entry = 512K b’010’ - 16K entries * 64 per entry = 1M b’011’ - 32K entries * 64 per entry = 2M b’100’ - 64K entries * 64 per entry = 4M