blob: b39e14e2376e3e5728cd564a667350b32f4e2f02 [file] [log] [blame]
Lei YU3dd1eea2016-12-27 14:43:14 +08001#!/bin/bash
2# #########################################################
Lei YU2caa74e2017-01-05 11:15:47 +08003# Script to run on Romulus BMC to read/set vrm voltages
Lei YU3dd1eea2016-12-27 14:43:14 +08004
5
6# #########################################################
Patrick Williams9e1e3a72023-06-02 19:31:04 -05007function d2v() {
8 # usage: d2v <decimal volts>
Lei YU3dd1eea2016-12-27 14:43:14 +08009
Patrick Williams9e1e3a72023-06-02 19:31:04 -050010 echo "$1" | awk '{print $1 * 256 + .5}' | cut -d '.' -f 1
Lei YU3dd1eea2016-12-27 14:43:14 +080011}
12
13
14# #########################################################
Patrick Williams9e1e3a72023-06-02 19:31:04 -050015function v2d() {
16 # usage: v2d <hex val>
Lei YU3dd1eea2016-12-27 14:43:14 +080017
Patrick Williams9e1e3a72023-06-02 19:31:04 -050018 printf " %0.3fV" "$(echo "$1" | awk '{print $1 / 256}')"
Lei YU3dd1eea2016-12-27 14:43:14 +080019}
20
21
22# #########################################################
Patrick Williams9e1e3a72023-06-02 19:31:04 -050023function i2d() {
24 # usage: i2d <hex val> <current divisor>
Lei YU3dd1eea2016-12-27 14:43:14 +080025
Patrick Williams9e1e3a72023-06-02 19:31:04 -050026 # parse current mantisa and exponent
27 # format: SEEE ESMM MMMM MMMM
28 e=$(( $1/0x800 ))
29 esign=$(( e/0x10 ))
30 m=$(( $1 & 0x07FF ))
31 msign=$(( m/0x0400 ))
Lei YU3dd1eea2016-12-27 14:43:14 +080032
Patrick Williams9e1e3a72023-06-02 19:31:04 -050033 if [ $msign -eq 1 ]
34 then
35 # calc ones compliment
36 m=$(( (m^0x07FF)+1 ))
37 m=$(( -m ))
38 fi
39 if [ $esign -eq 1 ]
40 then
41 # calc ones compliment
42 e=$(( (e^0x1F)+1 ))
43 e=$(( -e ))
44 fi
45 printf " %0.3fA\n" "$(echo $m $e "$2" | awk '{print ($1 * 2^$2) / $3}')"
Lei YU3dd1eea2016-12-27 14:43:14 +080046}
47
48
49# #########################################################
Patrick Williams9e1e3a72023-06-02 19:31:04 -050050function rw_vc() {
51 # usage: rw_vc <bus> <addr> <current divisor> <channel> <value>
Lei YU3dd1eea2016-12-27 14:43:14 +080052
Patrick Williams9e1e3a72023-06-02 19:31:04 -050053 # select channel
54 if [ "$4" != "x" ]
55 then
56 i2cset -y "$1" "$2" 0 "$4" b
57 fi
Lei YU3dd1eea2016-12-27 14:43:14 +080058
Patrick Williams9e1e3a72023-06-02 19:31:04 -050059 # write new voltage set point
60 if [ ! -e "$5" ]
61 then
62 i2cset -y "$1" "$2" 0x21 "$(d2v "$5")" w
63 fi
Lei YU3dd1eea2016-12-27 14:43:14 +080064
Patrick Williams9e1e3a72023-06-02 19:31:04 -050065 # print voltage set point
66 v2d "$(i2cget -y "$1" "$2" 0x21 w)"
Lei YU3dd1eea2016-12-27 14:43:14 +080067
Patrick Williams9e1e3a72023-06-02 19:31:04 -050068 # print voltage
69 v2d "$(i2cget -y "$1" "$2" 0x8B w)"
Lei YU3dd1eea2016-12-27 14:43:14 +080070
Patrick Williams9e1e3a72023-06-02 19:31:04 -050071 # print current
72 i2d "$(i2cget -y "$1" "$2" 0x8C w)" "$3"
Lei YU3dd1eea2016-12-27 14:43:14 +080073
Patrick Williams9e1e3a72023-06-02 19:31:04 -050074 # default back to channel 0
75 if [ "$4" != "x" ]
76 then
77 i2cset -y "$1" "$2" 0 0 b
78 fi
Lei YU3dd1eea2016-12-27 14:43:14 +080079}
80
81
82# #########################################################
83# Main
84
Patrick Williams9e1e3a72023-06-02 19:31:04 -050085if [ -e "$1" ]
Lei YU3dd1eea2016-12-27 14:43:14 +080086then
Patrick Williams9e1e3a72023-06-02 19:31:04 -050087 $0 vdda vcsa vdna vioa vddb vcsb vdnb viob
88 exit
Lei YU3dd1eea2016-12-27 14:43:14 +080089fi
90
Patrick Williams9e1e3a72023-06-02 19:31:04 -050091if [ "$1" == "-h" ]
Lei YU3dd1eea2016-12-27 14:43:14 +080092then
Patrick Williams9e1e3a72023-06-02 19:31:04 -050093 echo " Usage: vrm [<rail>=[value] [<rail>=[value]] ...]"
94 echo " rail: vdda vcsa vdna vioa vddb vcsb vdnb viob"
95 echo " value: volts"
96 echo
97 echo " e.g., vrm vioa=1.0 viob=1.0"
98 echo
99 exit
Lei YU3dd1eea2016-12-27 14:43:14 +0800100fi
101
102echo "rail set read current"
103echo "------- ------- ------- -------"
Patrick Williams9e1e3a72023-06-02 19:31:04 -0500104for param in "${@:1}"
Lei YU3dd1eea2016-12-27 14:43:14 +0800105do
Patrick Williams9e1e3a72023-06-02 19:31:04 -0500106 rail=$(echo "$param" | cut -d'=' -f 1)
107 val=$(echo "${param}=" | cut -d'=' -f 2)
108 echo -n "$rail"
109 case "$rail" in
110 vdda)
111 rw_vc 4 0x70 2 0 "$val"
112 ;;
113 vddb)
114 rw_vc 5 0x70 2 0 "$val"
115 ;;
116 vcsa)
117 rw_vc 4 0x70 4 1 "$val"
118 ;;
119 vcsb)
120 rw_vc 5 0x70 4 1 "$val"
121 ;;
122 vdna)
123 rw_vc 4 0x73 2 0 "$val"
124 ;;
125 vdnb)
126 rw_vc 5 0x73 2 0 "$val"
127 ;;
128 vioa)
129 rw_vc 4 0x73 2 1 "$val"
130 ;;
131 viob)
132 rw_vc 5 0x73 2 1 "$val"
133 ;;
134 *)
135 echo " non-existant"
136 esac
Lei YU3dd1eea2016-12-27 14:43:14 +0800137done