blob: 675e5cb76f41f9165243e935eec4beaf8937db7d [file] [log] [blame]
Patrick Williams3e6be2e2022-12-04 15:46:55 -06001#!/bin/bash
Jonathan Doman94c94bf2020-10-05 23:25:45 -07002
3# Utility to print all SST data present on D-Bus.
4# Simply searches for all objects implementing known interfaces and prints out
5# the property values on those interfaces.
6
Jonathan Doman703a1852020-11-11 13:04:02 -08007set -e
8
Jonathan Doman94c94bf2020-10-05 23:25:45 -07009BUSCTL='busctl'
10XYZ='xyz.openbmc_project'
11OBJECT_MAPPER="$XYZ.ObjectMapper /xyz/openbmc_project/object_mapper $XYZ.ObjectMapper"
12CPU_INTF="$XYZ.Control.Processor.CurrentOperatingConfig"
13CONFIG_INTF="$XYZ.Inventory.Item.Cpu.OperatingConfig"
14
Patrick Williams3e6be2e2022-12-04 15:46:55 -060015function trim_quotes() {
Jonathan Doman94c94bf2020-10-05 23:25:45 -070016 trim_obj=${1%\"}
17 trim_obj=${trim_obj#\"}
Patrick Williams3e6be2e2022-12-04 15:46:55 -060018 echo "$trim_obj"
Jonathan Doman94c94bf2020-10-05 23:25:45 -070019}
20
Patrick Williams3e6be2e2022-12-04 15:46:55 -060021function get_sub_tree_paths() {
22 resp=$($BUSCTL call "$OBJECT_MAPPER" GetSubTreePaths sias "$1" 0 "$2" "$3" \
Patrick Williams306df482022-12-08 06:26:05 -060023 | cut -d' ' -f3-)
Jonathan Doman94c94bf2020-10-05 23:25:45 -070024 for obj in $resp
25 do
Patrick Williams3e6be2e2022-12-04 15:46:55 -060026 trim_quotes "$obj"
Jonathan Doman94c94bf2020-10-05 23:25:45 -070027 done
28}
29
Patrick Williams3e6be2e2022-12-04 15:46:55 -060030function get_service_from_object() {
31 trim_quotes "$($BUSCTL call "$OBJECT_MAPPER" GetObject sas "$1" "$2" "$3" \
32 | cut -d' ' -f3)"
Jonathan Doman94c94bf2020-10-05 23:25:45 -070033}
34
Patrick Williams3e6be2e2022-12-04 15:46:55 -060035function get_property_names() {
Jonathan Doman94c94bf2020-10-05 23:25:45 -070036 service=$1
37 object=$2
38 intf=$3
Patrick Williams3e6be2e2022-12-04 15:46:55 -060039 $BUSCTL introspect "$service" "$object" "$intf" \
Jonathan Doman94c94bf2020-10-05 23:25:45 -070040 | awk '/property/ {print substr($1, 2)}'
41}
42
Patrick Williams3e6be2e2022-12-04 15:46:55 -060043function get_property() {
Jonathan Doman94c94bf2020-10-05 23:25:45 -070044 service=$1
45 object=$2
46 intf=$3
47 prop=$4
Patrick Williams3e6be2e2022-12-04 15:46:55 -060048 $BUSCTL get-property "$service" "$object" "$intf" "$prop"
Jonathan Doman94c94bf2020-10-05 23:25:45 -070049}
50
Patrick Williams3e6be2e2022-12-04 15:46:55 -060051function set_property() {
Jonathan Doman703a1852020-11-11 13:04:02 -080052 service=$1
53 object=$2
54 intf=$3
55 prop=$4
56 signature=$5
57 value=$6
Patrick Williams3e6be2e2022-12-04 15:46:55 -060058 $BUSCTL set-property "$service" "$object" "$intf" "$prop" \
59 "$signature" "$value"
Jonathan Doman703a1852020-11-11 13:04:02 -080060}
Jonathan Doman94c94bf2020-10-05 23:25:45 -070061
Patrick Williams3e6be2e2022-12-04 15:46:55 -060062function show() {
Jonathan Doman703a1852020-11-11 13:04:02 -080063 cpu_paths=$(get_sub_tree_paths "/" 1 "$CPU_INTF")
64 for cpu_path in $cpu_paths
Jonathan Doman94c94bf2020-10-05 23:25:45 -070065 do
Patrick Williams3e6be2e2022-12-04 15:46:55 -060066 service=$(get_service_from_object "$cpu_path" 1 "$CPU_INTF")
Jonathan Doman703a1852020-11-11 13:04:02 -080067 echo "Found SST on $cpu_path on $service"
Patrick Williams3e6be2e2022-12-04 15:46:55 -060068 for prop in $(get_property_names "$service" "$cpu_path" "$CPU_INTF")
Jonathan Doman94c94bf2020-10-05 23:25:45 -070069 do
Patrick Williams3e6be2e2022-12-04 15:46:55 -060070 echo " $prop: $(get_property "$service" "$cpu_path" "$CPU_INTF" "$prop")"
Jonathan Doman703a1852020-11-11 13:04:02 -080071 done
72
73
74 profiles=$(get_sub_tree_paths "$cpu_path" 1 "$CONFIG_INTF")
75 for profile in $profiles
76 do
77 echo
78 echo " Found Profile $profile"
Patrick Williams3e6be2e2022-12-04 15:46:55 -060079 for prop in $(get_property_names "$service" "$profile" "$CONFIG_INTF")
Jonathan Doman703a1852020-11-11 13:04:02 -080080 do
Patrick Williams3e6be2e2022-12-04 15:46:55 -060081 echo " $prop: $(get_property "$service" "$profile" "$CONFIG_INTF" "$prop")"
Jonathan Doman703a1852020-11-11 13:04:02 -080082 done
Jonathan Doman94c94bf2020-10-05 23:25:45 -070083 done
84 done
Jonathan Doman703a1852020-11-11 13:04:02 -080085}
86
Patrick Williams3e6be2e2022-12-04 15:46:55 -060087function set_cpu_prop() {
Jonathan Doman703a1852020-11-11 13:04:02 -080088 cpu_basename=$1
89 prop=$2
90 signature=$3
91 value=$4
92
93
94 cpu_paths=$(get_sub_tree_paths "/" 1 "$CPU_INTF")
95 for cpu_path in $cpu_paths
96 do
97 if [[ $cpu_path != *$cpu_basename ]]
98 then
99 continue
100 fi
101
102 if [[ "$prop" == "AppliedConfig" ]]
103 then
104 value=$cpu_path/$value
105 fi
106
Patrick Williams3e6be2e2022-12-04 15:46:55 -0600107 service=$(get_service_from_object "$cpu_path" 1 "$CPU_INTF")
108 set_property "$service" "$cpu_path" "$CPU_INTF" "$prop" "$signature" "$value"
Jonathan Doman703a1852020-11-11 13:04:02 -0800109 return 0
110 done
111
112 echo "$cpu_basename not found"
113 return 1
114}
115
116if [[ ${DEBUG:=0} -eq 1 ]]
117then
118 set -x
119fi
120
121action=${1:-show}
122
123case "$action" in
124 show) show ;;
Patrick Williams3e6be2e2022-12-04 15:46:55 -0600125 set-config) set_cpu_prop "$2" AppliedConfig o "$3" ;;
126 set-bf) set_cpu_prop "$2" BaseSpeedPriorityEnabled b "$3" ;;
Jonathan Doman703a1852020-11-11 13:04:02 -0800127 *)
128 echo "Usage:"
129 echo "$0 (show|set-config|set-bf) [ARGS...]"
130 echo ""
131 echo "show (Default action) - show info"
132 echo "set-config cpuN configM - Set applied operating config for cpuN to configM"
133 echo "set-bf cpuN val - Set SST-BF enablement for cpuN to val (boolean)"
134 ;;
135esac