Tegra186: mce: Uncore Perfmon ARI Programming
authorVarun Wadekar <vwadekar@nvidia.com>
Fri, 29 Apr 2016 17:40:02 +0000 (10:40 -0700)
committerVarun Wadekar <vwadekar@nvidia.com>
Thu, 30 Mar 2017 23:49:05 +0000 (16:49 -0700)
commitc11e0ddfbff1475c581cfb2babc27d3e48984c74
tree6738791169bc00aaa1b31b04e31476a5f96dc26d
parentf3a20c32242f0369e4538622c0d2205c739d7059
Tegra186: mce: Uncore Perfmon ARI Programming

Uncore perfmon appears to the CPU as a set of uncore perfmon registers
which can be read and written using the ARI interface. The MCE code
sequence handles reads and writes to these registers by manipulating
the underlying T186 uncore hardware.

To access an uncore perfmon register, CPU software writes the ARI
request registers to specify

* whether the operation is a read or a write,
* which uncore perfmon register to access,
* the uncore perfmon unit, group, and counter number (if necessary),
* the data to write (if the operation is a write).

It then initiates an ARI request to run the uncore perfmon sequence in
the MCE and reads the resulting value of the uncore perfmon register
and any status information from the ARI response registers.

The NS world's MCE driver issues MCE_CMD_UNCORE_PERFMON_REQ command
for the EL3 layer to start the entire sequence. Once the request
completes, the NS world would receive the command status in the X0
register and the command data in the X1 register.

Change-Id: I20bf2eca2385f7c8baa81e9445617ae711ecceea
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
plat/nvidia/tegra/soc/t186/drivers/include/mce.h
plat/nvidia/tegra/soc/t186/drivers/mce/ari.c
plat/nvidia/tegra/soc/t186/drivers/mce/mce.c
plat/nvidia/tegra/soc/t186/plat_sip_calls.c