xref: /openbmc/smbios-mdr/tools/sst-info.sh (revision 1cf66fee9aaa6e5021dc4199893fad1e65625443)
1*1cf66feeSJonathan Doman#!/bin/sh
294c94bfbSJonathan Doman
394c94bfbSJonathan Doman# Utility to print all SST data present on D-Bus.
494c94bfbSJonathan Doman# Simply searches for all objects implementing known interfaces and prints out
594c94bfbSJonathan Doman# the property values on those interfaces.
694c94bfbSJonathan Doman
7703a1856SJonathan Domanset -e
8703a1856SJonathan Doman
994c94bfbSJonathan DomanBUSCTL='busctl'
1094c94bfbSJonathan DomanXYZ='xyz.openbmc_project'
1194c94bfbSJonathan DomanCPU_INTF="$XYZ.Control.Processor.CurrentOperatingConfig"
1294c94bfbSJonathan DomanCONFIG_INTF="$XYZ.Inventory.Item.Cpu.OperatingConfig"
1394c94bfbSJonathan Doman
14*1cf66feeSJonathan Domantrim_quotes() {
1594c94bfbSJonathan Doman    trim_obj=${1%\"}
1694c94bfbSJonathan Doman    trim_obj=${trim_obj#\"}
173e6be2eeSPatrick Williams    echo "$trim_obj"
1894c94bfbSJonathan Doman}
1994c94bfbSJonathan Doman
20*1cf66feeSJonathan Domanobject_mapper_call() {
21*1cf66feeSJonathan Doman    $BUSCTL call $XYZ.ObjectMapper /xyz/openbmc_project/object_mapper \
22*1cf66feeSJonathan Doman        $XYZ.ObjectMapper "$@"
23*1cf66feeSJonathan Doman}
24*1cf66feeSJonathan Doman
25*1cf66feeSJonathan Domanget_sub_tree_paths() {
26*1cf66feeSJonathan Doman    resp=$(object_mapper_call GetSubTreePaths sias "$1" 0 "$2" "$3" \
2794c94bfbSJonathan Doman        | cut -d' ' -f3-)
2894c94bfbSJonathan Doman    for obj in $resp
2994c94bfbSJonathan Doman    do
303e6be2eeSPatrick Williams        trim_quotes "$obj"
3194c94bfbSJonathan Doman    done
3294c94bfbSJonathan Doman}
3394c94bfbSJonathan Doman
34*1cf66feeSJonathan Domanget_service_from_object() {
35*1cf66feeSJonathan Doman    trim_quotes "$(object_mapper_call GetObject sas "$1" "$2" "$3" \
363e6be2eeSPatrick Williams        | cut -d' ' -f3)"
3794c94bfbSJonathan Doman}
3894c94bfbSJonathan Doman
39*1cf66feeSJonathan Domanget_property_names() {
4094c94bfbSJonathan Doman    service=$1
4194c94bfbSJonathan Doman    object=$2
4294c94bfbSJonathan Doman    intf=$3
433e6be2eeSPatrick Williams    $BUSCTL introspect "$service" "$object" "$intf" \
4494c94bfbSJonathan Doman        | awk '/property/ {print substr($1, 2)}'
4594c94bfbSJonathan Doman}
4694c94bfbSJonathan Doman
47*1cf66feeSJonathan Domanget_property() {
4894c94bfbSJonathan Doman    service=$1
4994c94bfbSJonathan Doman    object=$2
5094c94bfbSJonathan Doman    intf=$3
5194c94bfbSJonathan Doman    prop=$4
523e6be2eeSPatrick Williams    $BUSCTL get-property "$service" "$object" "$intf" "$prop"
5394c94bfbSJonathan Doman}
5494c94bfbSJonathan Doman
55*1cf66feeSJonathan Domanset_property() {
56703a1856SJonathan Doman    service=$1
57703a1856SJonathan Doman    object=$2
58703a1856SJonathan Doman    intf=$3
59703a1856SJonathan Doman    prop=$4
60703a1856SJonathan Doman    signature=$5
61703a1856SJonathan Doman    value=$6
623e6be2eeSPatrick Williams    $BUSCTL set-property "$service" "$object" "$intf" "$prop" \
633e6be2eeSPatrick Williams        "$signature" "$value"
64703a1856SJonathan Doman}
6594c94bfbSJonathan Doman
66*1cf66feeSJonathan Domanshow() {
6794c94bfbSJonathan Doman    cpu_paths=$(get_sub_tree_paths "/" 1 "$CPU_INTF")
6894c94bfbSJonathan Doman    for cpu_path in $cpu_paths
6994c94bfbSJonathan Doman    do
703e6be2eeSPatrick Williams        service=$(get_service_from_object "$cpu_path" 1 "$CPU_INTF")
7194c94bfbSJonathan Doman        echo "Found SST on $cpu_path on $service"
723e6be2eeSPatrick Williams        for prop in $(get_property_names "$service" "$cpu_path" "$CPU_INTF")
7394c94bfbSJonathan Doman        do
743e6be2eeSPatrick Williams            echo "  $prop: $(get_property "$service" "$cpu_path" "$CPU_INTF" "$prop")"
7594c94bfbSJonathan Doman        done
7694c94bfbSJonathan Doman
7794c94bfbSJonathan Doman        profiles=$(get_sub_tree_paths "$cpu_path" 1 "$CONFIG_INTF")
7894c94bfbSJonathan Doman        for profile in $profiles
7994c94bfbSJonathan Doman        do
8094c94bfbSJonathan Doman            echo
8194c94bfbSJonathan Doman            echo "  Found Profile $profile"
823e6be2eeSPatrick Williams            for prop in $(get_property_names "$service" "$profile" "$CONFIG_INTF")
8394c94bfbSJonathan Doman            do
843e6be2eeSPatrick Williams                echo "    $prop: $(get_property "$service" "$profile" "$CONFIG_INTF" "$prop")"
8594c94bfbSJonathan Doman            done
8694c94bfbSJonathan Doman        done
8794c94bfbSJonathan Doman    done
88703a1856SJonathan Doman}
89703a1856SJonathan Doman
90*1cf66feeSJonathan Domanset_cpu_prop() {
91703a1856SJonathan Doman    cpu_basename=$1
92703a1856SJonathan Doman    prop=$2
93703a1856SJonathan Doman    signature=$3
94703a1856SJonathan Doman    value=$4
95703a1856SJonathan Doman
96703a1856SJonathan Doman    cpu_paths=$(get_sub_tree_paths "/" 1 "$CPU_INTF")
97703a1856SJonathan Doman    for cpu_path in $cpu_paths
98703a1856SJonathan Doman    do
99*1cf66feeSJonathan Doman        case $cpu_path in
100*1cf66feeSJonathan Doman            */$cpu_basename) ;;
101*1cf66feeSJonathan Doman            *) continue ;;
102*1cf66feeSJonathan Doman        esac
103703a1856SJonathan Doman
104*1cf66feeSJonathan Doman        if [ "$prop" = "AppliedConfig" ]
105703a1856SJonathan Doman        then
106703a1856SJonathan Doman            value=$cpu_path/$value
107703a1856SJonathan Doman        fi
108703a1856SJonathan Doman
1093e6be2eeSPatrick Williams        service=$(get_service_from_object "$cpu_path" 1 "$CPU_INTF")
1103e6be2eeSPatrick Williams        set_property "$service" "$cpu_path" "$CPU_INTF" "$prop" "$signature" "$value"
111703a1856SJonathan Doman        return 0
112703a1856SJonathan Doman    done
113703a1856SJonathan Doman
114703a1856SJonathan Doman    echo "$cpu_basename not found"
115703a1856SJonathan Doman    return 1
116703a1856SJonathan Doman}
117703a1856SJonathan Doman
118*1cf66feeSJonathan Domanif [ "${DEBUG:=0}" -eq 1 ]
119703a1856SJonathan Domanthen
120703a1856SJonathan Doman    set -x
121703a1856SJonathan Domanfi
122703a1856SJonathan Doman
123703a1856SJonathan Domanaction=${1:-show}
124703a1856SJonathan Doman
125703a1856SJonathan Domancase "$action" in
126703a1856SJonathan Doman    show) show ;;
1273e6be2eeSPatrick Williams    set-config) set_cpu_prop "$2" AppliedConfig o "$3" ;;
1283e6be2eeSPatrick Williams    set-bf) set_cpu_prop "$2" BaseSpeedPriorityEnabled b "$3" ;;
129703a1856SJonathan Doman    *)
130703a1856SJonathan Doman        echo "Usage:"
131703a1856SJonathan Doman        echo "$0 (show|set-config|set-bf) [ARGS...]"
132703a1856SJonathan Doman        echo ""
133703a1856SJonathan Doman        echo "show (Default action) - show info"
134703a1856SJonathan Doman        echo "set-config cpuN configM - Set applied operating config for cpuN to configM"
135703a1856SJonathan Doman        echo "set-bf cpuN val - Set SST-BF enablement for cpuN to val (boolean)"
136703a1856SJonathan Doman        ;;
137703a1856SJonathan Domanesac
138