118 lines
4.9 KiB
ReStructuredText
118 lines
4.9 KiB
ReStructuredText
|
.. SPDX-License-Identifier: GPL-2.0-only
|
||
|
|
||
|
Kernel driver bt1-pvt
|
||
|
=====================
|
||
|
|
||
|
Supported chips:
|
||
|
|
||
|
* Baikal-T1 PVT sensor (in SoC)
|
||
|
|
||
|
Prefix: 'bt1-pvt'
|
||
|
|
||
|
Addresses scanned: -
|
||
|
|
||
|
Datasheet: Provided by BAIKAL ELECTRONICS upon request and under NDA
|
||
|
|
||
|
Authors:
|
||
|
Maxim Kaurkin <maxim.kaurkin@baikalelectronics.ru>
|
||
|
Serge Semin <Sergey.Semin@baikalelectronics.ru>
|
||
|
|
||
|
Description
|
||
|
-----------
|
||
|
|
||
|
This driver implements support for the hardware monitoring capabilities of the
|
||
|
embedded into Baikal-T1 process, voltage and temperature sensors. PVT IP-core
|
||
|
consists of one temperature and four voltage sensors, which can be used to
|
||
|
monitor the chip internal environment like heating, supply voltage and
|
||
|
transistors performance. The driver can optionally provide the hwmon alarms
|
||
|
for each sensor the PVT controller supports. The alarms functionality is made
|
||
|
compile-time configurable due to the hardware interface implementation
|
||
|
peculiarity, which is connected with an ability to convert data from only one
|
||
|
sensor at a time. Additional limitation is that the controller performs the
|
||
|
thresholds checking synchronously with the data conversion procedure. Due to
|
||
|
these in order to have the hwmon alarms automatically detected the driver code
|
||
|
must switch from one sensor to another, read converted data and manually check
|
||
|
the threshold status bits. Depending on the measurements timeout settings
|
||
|
(update_interval sysfs node value) this design may cause additional burden on
|
||
|
the system performance. So in case if alarms are unnecessary in your system
|
||
|
design it's recommended to have them disabled to prevent the PVT IRQs being
|
||
|
periodically raised to get the data cache/alarms status up to date. By default
|
||
|
in alarm-less configuration the data conversion is performed by the driver
|
||
|
on demand when read operation is requested via corresponding _input-file.
|
||
|
|
||
|
Temperature Monitoring
|
||
|
----------------------
|
||
|
|
||
|
Temperature is measured with 10-bit resolution and reported in millidegree
|
||
|
Celsius. The driver performs all the scaling by itself therefore reports true
|
||
|
temperatures that don't need any user-space adjustments. While the data
|
||
|
translation formulae isn't linear, which gives us non-linear discreteness,
|
||
|
it's close to one, but giving a bit better accuracy for higher temperatures.
|
||
|
The temperature input is mapped as follows (the last column indicates the input
|
||
|
ranges)::
|
||
|
|
||
|
temp1: CPU embedded diode -48.38C - +147.438C
|
||
|
|
||
|
In case if the alarms kernel config is enabled in the driver the temperature input
|
||
|
has associated min and max limits which trigger an alarm when crossed.
|
||
|
|
||
|
Voltage Monitoring
|
||
|
------------------
|
||
|
|
||
|
The voltage inputs are also sampled with 10-bit resolution and reported in
|
||
|
millivolts. But in this case the data translation formulae is linear, which
|
||
|
provides a constant measurements discreteness. The data scaling is also
|
||
|
performed by the driver, so returning true millivolts. The voltage inputs are
|
||
|
mapped as follows (the last column indicates the input ranges)::
|
||
|
|
||
|
in0: VDD (processor core) 0.62V - 1.168V
|
||
|
in1: Low-Vt (low voltage threshold) 0.62V - 1.168V
|
||
|
in2: High-Vt (high voltage threshold) 0.62V - 1.168V
|
||
|
in3: Standard-Vt (standard voltage threshold) 0.62V - 1.168V
|
||
|
|
||
|
In case if the alarms config is enabled in the driver the voltage inputs
|
||
|
have associated min and max limits which trigger an alarm when crossed.
|
||
|
|
||
|
Sysfs Attributes
|
||
|
----------------
|
||
|
|
||
|
Following is a list of all sysfs attributes that the driver provides, their
|
||
|
permissions and a short description:
|
||
|
|
||
|
=============================== ======= =======================================
|
||
|
Name Perm Description
|
||
|
=============================== ======= =======================================
|
||
|
update_interval RW Measurements update interval per
|
||
|
sensor.
|
||
|
temp1_type RO Sensor type (always 1 as CPU embedded
|
||
|
diode).
|
||
|
temp1_label RO CPU Core Temperature sensor.
|
||
|
temp1_input RO Measured temperature in millidegree
|
||
|
Celsius.
|
||
|
temp1_min RW Low limit for temp input.
|
||
|
temp1_max RW High limit for temp input.
|
||
|
temp1_min_alarm RO Temperature input alarm. Returns 1 if
|
||
|
temperature input went below min limit,
|
||
|
0 otherwise.
|
||
|
temp1_max_alarm RO Temperature input alarm. Returns 1 if
|
||
|
temperature input went above max limit,
|
||
|
0 otherwise.
|
||
|
temp1_offset RW Temperature offset in millidegree
|
||
|
Celsius which is added to the
|
||
|
temperature reading by the chip. It can
|
||
|
be used to manually adjust the
|
||
|
temperature measurements within 7.130
|
||
|
degrees Celsius.
|
||
|
in[0-3]_label RO CPU Voltage sensor (either core or
|
||
|
low/high/standard thresholds).
|
||
|
in[0-3]_input RO Measured voltage in millivolts.
|
||
|
in[0-3]_min RW Low limit for voltage input.
|
||
|
in[0-3]_max RW High limit for voltage input.
|
||
|
in[0-3]_min_alarm RO Voltage input alarm. Returns 1 if
|
||
|
voltage input went below min limit,
|
||
|
0 otherwise.
|
||
|
in[0-3]_max_alarm RO Voltage input alarm. Returns 1 if
|
||
|
voltage input went above max limit,
|
||
|
0 otherwise.
|
||
|
=============================== ======= =======================================
|