tp: Integrate out-of-tree Wattson SoC models into stdlib Route dynamically imported Wattson SoC models from storage tables into Wattson SQL stdlib pipeline. Assigns highest priority to custom device models in _wattson_device_map, and merges custom topology and empirical power curves with in-tree tables using UNION ALL. All downstream power estimations and UI continuous tracks function seamlessly for both in-tree and out-of-tree devices.
diff --git a/src/trace_processor/perfetto_sql/stdlib/wattson/curves/cpu_1d.sql b/src/trace_processor/perfetto_sql/stdlib/wattson/curves/cpu_1d.sql index c60556f..9813b87 100644 --- a/src/trace_processor/perfetto_sql/stdlib/wattson/curves/cpu_1d.sql +++ b/src/trace_processor/perfetto_sql/stdlib/wattson/curves/cpu_1d.sql
@@ -18,4 +18,14 @@ -- rows come from the wattson plugin (see -- src/trace_processor/plugins/wattson/). CREATE PERFETTO TABLE _device_curves_1d AS +SELECT + (SELECT device_name FROM __intrinsic_wattson_custom_device_info LIMIT 1) AS device, + policy, + freq_khz, + static_mw AS static, + active_mw AS active, + idle0_mw AS idle0, + idle1_mw AS idle1 +FROM __intrinsic_wattson_custom_curves_cpu_1d +UNION ALL SELECT * FROM __intrinsic_wattson_curves_cpu_1d();
diff --git a/src/trace_processor/perfetto_sql/stdlib/wattson/curves/cpu_2d.sql b/src/trace_processor/perfetto_sql/stdlib/wattson/curves/cpu_2d.sql index 1295ac8..c91fb96 100644 --- a/src/trace_processor/perfetto_sql/stdlib/wattson/curves/cpu_2d.sql +++ b/src/trace_processor/perfetto_sql/stdlib/wattson/curves/cpu_2d.sql
@@ -18,4 +18,17 @@ -- come from the wattson plugin (see -- src/trace_processor/plugins/wattson/). CREATE PERFETTO TABLE _device_curves_2d AS +SELECT + (SELECT device_name FROM __intrinsic_wattson_custom_device_info LIMIT 1) AS device, + policy, + freq_khz, + dep_policy, + dep_freq, + static_mw AS static, + active_mw AS active, + idle0_mw AS idle0, + idle1_mw AS idle1, + interconnect_mw AS interconnect +FROM __intrinsic_wattson_custom_curves_cpu_2d +UNION ALL SELECT * FROM __intrinsic_wattson_curves_cpu_2d();
diff --git a/src/trace_processor/perfetto_sql/stdlib/wattson/curves/gpu.sql b/src/trace_processor/perfetto_sql/stdlib/wattson/curves/gpu.sql index 1bd28f3..0e3bef3 100644 --- a/src/trace_processor/perfetto_sql/stdlib/wattson/curves/gpu.sql +++ b/src/trace_processor/perfetto_sql/stdlib/wattson/curves/gpu.sql
@@ -16,4 +16,12 @@ -- Device specific GPU curves. The rows come from the wattson plugin -- (see src/trace_processor/plugins/wattson/). CREATE PERFETTO TABLE _gpu_device_curves AS +SELECT + (SELECT device_name FROM __intrinsic_wattson_custom_device_info LIMIT 1) AS device, + freq_khz, + active_mw AS active, + idle1_mw AS idle1, + idle2_mw AS idle2 +FROM __intrinsic_wattson_custom_curves_gpu +UNION ALL SELECT * FROM __intrinsic_wattson_curves_gpu();
diff --git a/src/trace_processor/perfetto_sql/stdlib/wattson/curves/l3.sql b/src/trace_processor/perfetto_sql/stdlib/wattson/curves/l3.sql index e518c02..a870bbf 100644 --- a/src/trace_processor/perfetto_sql/stdlib/wattson/curves/l3.sql +++ b/src/trace_processor/perfetto_sql/stdlib/wattson/curves/l3.sql
@@ -16,4 +16,13 @@ -- Device specific L3 curves. The rows come from the wattson plugin -- (see src/trace_processor/plugins/wattson/). CREATE PERFETTO TABLE _device_curves_l3 AS +SELECT + (SELECT device_name FROM __intrinsic_wattson_custom_device_info LIMIT 1) AS device, + freq_khz, + dep_policy, + dep_freq, + l3_hit_mw AS l3_hit, + l3_miss_mw AS l3_miss +FROM __intrinsic_wattson_custom_curves_l3 +UNION ALL SELECT * FROM __intrinsic_wattson_curves_l3();
diff --git a/src/trace_processor/perfetto_sql/stdlib/wattson/curves/tpu.sql b/src/trace_processor/perfetto_sql/stdlib/wattson/curves/tpu.sql index a279b8a..2517fe7 100644 --- a/src/trace_processor/perfetto_sql/stdlib/wattson/curves/tpu.sql +++ b/src/trace_processor/perfetto_sql/stdlib/wattson/curves/tpu.sql
@@ -16,4 +16,12 @@ -- Device specific TPU curves. The rows come from the wattson plugin -- (see src/trace_processor/plugins/wattson/). CREATE PERFETTO TABLE _tpu_device_curves AS +SELECT + (SELECT device_name FROM __intrinsic_wattson_custom_device_info LIMIT 1) AS device, + cluster, + requests, + freq, + active_mw AS active +FROM __intrinsic_wattson_custom_curves_tpu +UNION ALL SELECT * FROM __intrinsic_wattson_curves_tpu();
diff --git a/src/trace_processor/perfetto_sql/stdlib/wattson/device_infos.sql b/src/trace_processor/perfetto_sql/stdlib/wattson/device_infos.sql index b1af6ab..a8e16f4 100644 --- a/src/trace_processor/perfetto_sql/stdlib/wattson/device_infos.sql +++ b/src/trace_processor/perfetto_sql/stdlib/wattson/device_infos.sql
@@ -20,6 +20,13 @@ -- Device specific info for deep idle time offsets CREATE PERFETTO TABLE _device_cpu_deep_idle_offsets AS WITH + custom_data AS ( + SELECT + (SELECT device_name FROM __intrinsic_wattson_custom_device_info LIMIT 1) AS device, + cpu, + offset_ns + FROM __intrinsic_wattson_custom_deep_idle_offset + ), data(device, cpu, offset_ns) AS ( SELECT * FROM ( @@ -112,6 +119,8 @@ ), ("SM8750", 7, 0) ) AS _values ) +SELECT * FROM custom_data +UNION ALL SELECT * FROM data; CREATE PERFETTO TABLE _linux_soc_compatible_map AS @@ -196,6 +205,8 @@ soc_model AS ( SELECT coalesce( + -- Get custom dynamic model if present + (SELECT device_name FROM __intrinsic_wattson_custom_device_info LIMIT 1), -- Get guest model from metadata, which takes precedence if set ( SELECT coalesce(map.wattson_device, m.str_value) @@ -255,6 +266,13 @@ -- Device specific mapping from CPU to policy CREATE PERFETTO TABLE _cpu_to_policy_map AS WITH + custom_data AS ( + SELECT + (SELECT device_name FROM __intrinsic_wattson_custom_device_info LIMIT 1) AS device, + cpu, + policy + FROM __intrinsic_wattson_custom_cpu_policy + ), data(device, cpu, policy) AS ( SELECT * FROM ( @@ -342,6 +360,8 @@ ), ("SM8750", 5, 0), ("SM8750", 6, 6), ("SM8750", 7, 6) ) AS _values ) +SELECT * FROM custom_data +UNION ALL SELECT * FROM data; -- Prefilter table based on device @@ -388,10 +408,19 @@ -- Devices that require using devfreq CREATE PERFETTO TABLE _use_devfreq AS WITH + custom_data AS ( + SELECT + (SELECT device_name FROM __intrinsic_wattson_custom_device_info LIMIT 1) AS device + FROM __intrinsic_wattson_custom_device_info + WHERE + use_devfreq = 1 + ), data(device) AS ( SELECT * FROM (VALUES ("Tensor G4"), ("Tensor G5"), ("Tensor G6")) AS _values ) +SELECT * FROM custom_data +UNION ALL SELECT * FROM data; -- Creates non-empty table if device needs devfreq @@ -410,6 +439,13 @@ -- Devices that require idle state mapping CREATE PERFETTO TABLE _idle_state_map AS WITH + custom_data AS ( + SELECT + (SELECT device_name FROM __intrinsic_wattson_custom_device_info LIMIT 1) AS device, + nominal_idle, + override_idle + FROM __intrinsic_wattson_custom_idle_state_map + ), data(device, nominal_idle, override_idle) AS ( SELECT * FROM ( @@ -447,6 +483,8 @@ ), ("SXR2230P", 2, 1) ) AS _values ) +SELECT * FROM custom_data +UNION ALL SELECT * FROM data; -- idle_mapping override filtered for device @@ -466,6 +504,12 @@ -- frequency (as opposed to the default, vote by power) CREATE PERFETTO TABLE _vote_by_freq AS WITH + custom_data AS ( + SELECT + (SELECT device_name FROM __intrinsic_wattson_custom_device_info LIMIT 1) AS device, + cpu + FROM __intrinsic_wattson_custom_vote_by_freq + ), data(device, cpu) AS ( SELECT * FROM ( @@ -477,6 +521,8 @@ ), ("Tensor G6", 4), ("Tensor G6", 5), ("Tensor G6", 6) ) AS _values ) +SELECT * FROM custom_data +UNION ALL SELECT * FROM data; -- Gets all CPUs on device and whether the CPU vote is be freq or power @@ -497,8 +543,18 @@ -- Device specific mapping to GPU ID CREATE PERFETTO TABLE _gpuid_map AS WITH + custom_data AS ( + SELECT + (SELECT device_name FROM __intrinsic_wattson_custom_device_info LIMIT 1) AS device, + gpu_id + FROM __intrinsic_wattson_custom_device_info + WHERE + gpu_id IS NOT NULL + ), data(device, gpu_id) AS ( SELECT * FROM (VALUES ("Tensor G5", 0), ("Tensor G6", 0), ("Tensor", 1)) AS _values ) +SELECT * FROM custom_data +UNION ALL SELECT * FROM data;