Introduction

A Zynq® UltraScale+™ MPSoC has one system monitoring (SYSMON) block in both the PS and the PL. The SYSMON block has a register interface that can be used to configure the
block and provide the capability to monitor on and off-chip voltages as well as junction temperature. The SYSMON block also has built-in alarm generation logic that is used to
interrupt the processor based on certain alarm conditions. For example, it can shut down the system based on an over-temperature (OT) alarm generated from the SYSMON block.
The PL-SYSMON block has DRP, JTAG, and I2C interfaces to enable monitoring from the external master and the capability to interface with an external power management bus
(PMBus) device. The PS-SYSMON block is memory mapped to the PS. In comparison to JTAG and I2C transfers, this interface is more efficient at transferring data from software. The
PS-SYSMON block has an internal reference option.

HW/IP features

PL block

  • 10-bit resolution
  • 0.2 MSPS sample rate
  • Support external analog input
  • External mux supports
  • 16 auxiliary channels
  • 16 alarm output
  • Interface supported JTAG, DRP or dedicated PS DRP, I2C and PMBus
  • 2 temperature sensors
  • VCCINT, VCCAUX, VCCBRAM, VCC_PSINTLP, VCC_PSINTFP, VCC_PSAUX system supply sensors
  • 4 USER supply channels

PS block

  • 10-bit resolution
  • 1.0 MSPS sample rate
  • 16 alarm output
  • Interface supported JTAG or APB
  • 1 temperature sensors
  • VCCINT, VCCAUX, VCCBRAM, VCC_PSINTLP, VCC_PSINTFP, VCC_PSAUX system supply sensors

Missing features, known Issues, limitations

  • Single pass sequence mode
  • Bipolar channel modes
  • External mux mode

Kernel configurations

To compile a kernel with a driver for the AMS enable the following kernel config option:
CONFIG_XILINX_AMS

Device Tree Settings

xilinx_ams: ams@ffa50000 {
            compatible = "xlnx,zynqmp-ams";
            interrupt-parent = <&gic>;
            interrupts = <0 56 4>;
            interrupt-names = "ams-irq";
            reg = <0x0 0xffa50000 0x0 0x800>;
            reg-names = "ams-base";
            #address-cells = <2>;
            #size-cells = <2>;
            ranges;
 
            ams_ps: ams_ps@ffa50800 {
                compatible = "xlnx,zynqmp-ams-ps";
                reg = <0x0 0xffa50800 0x0 0x400>;
            };
 
            ams_pl: ams_pl@ffa50c00 {
                compatible = "xlnx,zynqmp-ams-pl";
                reg = <0x0 0xffa50c00 0x0 0x400>;
            };
        };

Test Procedure



Test Case 1: Read channel value via sysfs

test1.png

Test Case 2: Get rising event for channel using sample application

test2.png

Test Case 3: Rising event – negative test using sample application

test3.png

Test Case 4: Get falling event for voltage channel using sample application


test4.png
Test Case 5: Falling event for voltage channel – negative test using sample application
test5.png

Change Log

2017.1

  • Add Xilinx AMS driver
Commit Id: d6b16bbd7699f21ed583df8eaa9fb30f3ce1f0e8
  • Enable the clock through CCF
Commit Id: 05a452247ec248a0a6bd1679edd2fab7999adb11
  • fix temperature offset
Commit Id: c871c0555231c3478b161f299c6a18631ed893b7
  • fix false alarm event
Commit Id: 55157c770a0f6805f6e90e0b8e09f82d11c4abb9
  • Fix error handling
Commit Id: acdbfc2832f380d42b80f78ff7e45645cc23ccd8
  • Disable interrupts at boot up
Commit Id: c472eeb29c1a36c72f32d706ef6a342f6e20b2bd
  • fix module unload crash
Commit Id: 07149fcb0c986172d7f4267bdf5365d035ca1e3d
  • enable clock before device initialization
Commit Id: f840025e3b6b72166e79306081041c83ecb45e87

2017.2

  • None

2017.3

  • add missing break in AMS_SUPPLY[78] cases.
  • Add suspend resume support.
  • reset [ps|pl]-sysmon before channel config

2017.4

  • None

2018.1

  • Add support to read voltages from AMS control block
  • Modify driver to match AMS standard sequence

2018.2

  • None

Mainline status

Driver is not in mainline kernel.

Related Links

https://github.com/Xilinx/linux-xlnx/blob/master/drivers/iio/adc/xilinx-ams.c
https://github.com/Xilinx/linux-xlnx/blob/master/drivers/iio/adc/xilinx-ams.h