blob: a1b15c85f6155abeedf7009f6e4faed93d27f37a [file] [log] [blame]
#!/bin/sh
# Utility to print all SST data present on D-Bus.
# Simply searches for all objects implementing known interfaces and prints out
# the property values on those interfaces.
set -e
BUSCTL='busctl'
XYZ='xyz.openbmc_project'
OBJECT_MAPPER="$XYZ.ObjectMapper /xyz/openbmc_project/object_mapper $XYZ.ObjectMapper"
CPU_INTF="$XYZ.Control.Processor.CurrentOperatingConfig"
CONFIG_INTF="$XYZ.Inventory.Item.Cpu.OperatingConfig"
trim_quotes() {
trim_obj=${1%\"}
trim_obj=${trim_obj#\"}
echo $trim_obj
}
get_sub_tree_paths() {
resp=$($BUSCTL call $OBJECT_MAPPER GetSubTreePaths sias "$1" 0 "$2" "$3" \
| cut -d' ' -f3-)
for obj in $resp
do
trim_quotes $obj
done
}
get_service_from_object() {
trim_quotes $($BUSCTL call $OBJECT_MAPPER GetObject sas "$1" "$2" "$3" \
| cut -d' ' -f3)
}
get_property_names() {
service=$1
object=$2
intf=$3
$BUSCTL introspect $service $object $intf \
| awk '/property/ {print substr($1, 2)}'
}
get_property() {
service=$1
object=$2
intf=$3
prop=$4
$BUSCTL get-property $service $object $intf $prop
}
set_property() {
service=$1
object=$2
intf=$3
prop=$4
signature=$5
value=$6
$BUSCTL set-property $service $object $intf $prop $signature $value
}
show() {
cpu_paths=$(get_sub_tree_paths "/" 1 "$CPU_INTF")
for cpu_path in $cpu_paths
do
service=$(get_service_from_object $cpu_path 1 $CPU_INTF)
echo "Found SST on $cpu_path on $service"
for prop in $(get_property_names $service $cpu_path $CPU_INTF)
do
echo " $prop: $(get_property $service $cpu_path $CPU_INTF $prop)"
done
profiles=$(get_sub_tree_paths "$cpu_path" 1 "$CONFIG_INTF")
for profile in $profiles
do
echo
echo " Found Profile $profile"
for prop in $(get_property_names $service $profile $CONFIG_INTF)
do
echo " $prop: $(get_property $service $profile $CONFIG_INTF $prop)"
done
done
done
}
set_cpu_prop() {
cpu_basename=$1
prop=$2
signature=$3
value=$4
cpu_paths=$(get_sub_tree_paths "/" 1 "$CPU_INTF")
for cpu_path in $cpu_paths
do
if [[ $cpu_path != *$cpu_basename ]]
then
continue
fi
if [[ "$prop" == "AppliedConfig" ]]
then
value=$cpu_path/$value
fi
service=$(get_service_from_object $cpu_path 1 $CPU_INTF)
set_property $service $cpu_path $CPU_INTF $prop $signature $value
return 0
done
echo "$cpu_basename not found"
return 1
}
if [[ ${DEBUG:=0} -eq 1 ]]
then
set -x
fi
action=${1:-show}
case "$action" in
show) show ;;
set-config) set_cpu_prop $2 AppliedConfig o $3 ;;
set-bf) set_cpu_prop $2 BaseSpeedPriorityEnabled b $3 ;;
*)
echo "Usage:"
echo "$0 (show|set-config|set-bf) [ARGS...]"
echo ""
echo "show (Default action) - show info"
echo "set-config cpuN configM - Set applied operating config for cpuN to configM"
echo "set-bf cpuN val - Set SST-BF enablement for cpuN to val (boolean)"
;;
esac