create device frequency dump

Bug: 240530709
Test: adb bugreport
Change-Id: I8db76f46e9e304b1d861c1d6b8ab031611c25e7e
diff --git a/soc/Android.bp b/soc/Android.bp
index 57b8577..e913154 100644
--- a/soc/Android.bp
+++ b/soc/Android.bp
@@ -10,6 +10,21 @@
 }
 
 cc_binary {
+    name: "dump_devfreq",
+    srcs: ["dump_devfreq.cpp"],
+    cflags: [
+        "-Wall",
+        "-Wextra",
+        "-Werror",
+    ],
+    shared_libs: [
+	"libdump",
+    ],
+    vendor: true,
+    relative_install_path: "dump",
+}
+
+cc_binary {
     name: "dump_soc",
     srcs: ["dump_soc.cpp"],
     cflags: [
diff --git a/soc/dump_devfreq.cpp b/soc/dump_devfreq.cpp
new file mode 100644
index 0000000..5cbbb94
--- /dev/null
+++ b/soc/dump_devfreq.cpp
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <dump/pixel_dump.h>
+
+int main() {
+    dumpFileContent("MIF DVFS", "/sys/devices/platform/17000010.devfreq_mif/devfreq/17000010.devfreq_mif/time_in_state");
+    dumpFileContent("INT DVFS", "/sys/devices/platform/17000020.devfreq_int/devfreq/17000020.devfreq_int/time_in_state");
+    dumpFileContent("INTCAM DVFS", "/sys/devices/platform/17000030.devfreq_intcam/devfreq/17000030.devfreq_intcam/time_in_state");
+    dumpFileContent("DISP DVFS", "/sys/devices/platform/17000040.devfreq_disp/devfreq/17000040.devfreq_disp/time_in_state");
+    dumpFileContent("CAM DVFS", "/sys/devices/platform/17000050.devfreq_cam/devfreq/17000050.devfreq_cam/time_in_state");
+    dumpFileContent("TNR DVFS", "/sys/devices/platform/17000060.devfreq_tnr/devfreq/17000060.devfreq_tnr/time_in_state");
+    dumpFileContent("MFC DVFS", "/sys/devices/platform/17000070.devfreq_mfc/devfreq/17000070.devfreq_mfc/time_in_state");
+    dumpFileContent("BO DVFS", "/sys/devices/platform/17000080.devfreq_bo/devfreq/17000080.devfreq_bo/time_in_state");
+    dumpFileContent("BTS stats", "/sys/devices/platform/exynos-bts/bts_stats");
+    return 0;
+}
diff --git a/soc/freq.mk b/soc/freq.mk
new file mode 100644
index 0000000..bd79977
--- /dev/null
+++ b/soc/freq.mk
@@ -0,0 +1,4 @@
+BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/soc/sepolicy/freq
+
+PRODUCT_PACKAGES += dump_devfreq
+
diff --git a/soc/sepolicy/freq/dump_devfreq.te b/soc/sepolicy/freq/dump_devfreq.te
new file mode 100644
index 0000000..75aa325
--- /dev/null
+++ b/soc/sepolicy/freq/dump_devfreq.te
@@ -0,0 +1,5 @@
+pixel_bugreport(dump_devfreq)
+allow dump_devfreq sysfs_cpu:file r_file_perms;
+allow dump_devfreq sysfs_exynos_bts:dir r_dir_perms;
+allow dump_devfreq sysfs_exynos_bts_stats:file r_file_perms;
+
diff --git a/soc/sepolicy/freq/file.te b/soc/sepolicy/freq/file.te
new file mode 100644
index 0000000..1201d5a
--- /dev/null
+++ b/soc/sepolicy/freq/file.te
@@ -0,0 +1,4 @@
+type sysfs_cpu, sysfs_type, fs_type;
+type sysfs_exynos_bts, sysfs_type, fs_type;
+type sysfs_exynos_bts_stats, sysfs_type, fs_type;
+
diff --git a/soc/sepolicy/freq/file_contexts b/soc/sepolicy/freq/file_contexts
new file mode 100644
index 0000000..b1f5b4f
--- /dev/null
+++ b/soc/sepolicy/freq/file_contexts
@@ -0,0 +1,2 @@
+/vendor/bin/dump/dump_devfreq           u:object_r:dump_devfreq_exec:s0
+
diff --git a/soc/sepolicy/freq/genfs_contexts b/soc/sepolicy/freq/genfs_contexts
new file mode 100644
index 0000000..b747c1c
--- /dev/null
+++ b/soc/sepolicy/freq/genfs_contexts
@@ -0,0 +1,19 @@
+# CPU
+genfscon sysfs /devices/platform/17000010.devfreq_mif/devfreq/17000010.devfreq_mif/time_in_state       u:object_r:sysfs_cpu:s0
+genfscon sysfs /devices/platform/17000020.devfreq_int/devfreq/17000020.devfreq_int/time_in_state       u:object_r:sysfs_cpu:s0
+genfscon sysfs /devices/platform/17000030.devfreq_intcam/devfreq/17000030.devfreq_intcam/time_in_state u:object_r:sysfs_cpu:s0
+genfscon sysfs /devices/platform/17000040.devfreq_disp/devfreq/17000040.devfreq_disp/time_in_state     u:object_r:sysfs_cpu:s0
+genfscon sysfs /devices/platform/17000050.devfreq_cam/devfreq/17000050.devfreq_cam/time_in_state       u:object_r:sysfs_cpu:s0
+genfscon sysfs /devices/platform/17000060.devfreq_tnr/devfreq/17000060.devfreq_tnr/time_in_state       u:object_r:sysfs_cpu:s0
+genfscon sysfs /devices/platform/17000070.devfreq_mfc/devfreq/17000070.devfreq_mfc/time_in_state       u:object_r:sysfs_cpu:s0
+genfscon sysfs /devices/platform/17000080.devfreq_bw/devfreq/17000080.devfreq_bw/time_in_state         u:object_r:sysfs_cpu:s0
+genfscon sysfs /devices/platform/17000090.devfreq_dsu/devfreq/17000090.devfreq_dsu/time_in_state       u:object_r:sysfs_cpu:s0
+genfscon sysfs /devices/platform/170000a0.devfreq_bci/devfreq/170000a0.devfreq_bci/time_in_state       u:object_r:sysfs_cpu:s0
+genfscon sysfs /devices/platform/1f000000.mali/time_in_state                                           u:object_r:sysfs_cpu:s0
+genfscon sysfs /devices/platform/1f000000.mali/uid_time_in_state                                       u:object_r:sysfs_cpu:s0
+genfscon sysfs /devices/platform/cpupm/cpupm/time_in_state                                             u:object_r:sysfs_cpu:s0
+
+# Exynos
+genfscon sysfs /devices/platform/exynos-bts                                                            u:object_r:sysfs_exynos_bts:s0
+genfscon sysfs /devices/platform/exynos-bts/bts_stats                                                  u:object_r:sysfs_exynos_bts_stats:s0
+
diff --git a/soc/sepolicy/dump_memory.te b/soc/sepolicy/soc/dump_memory.te
similarity index 100%
rename from soc/sepolicy/dump_memory.te
rename to soc/sepolicy/soc/dump_memory.te
diff --git a/soc/sepolicy/dump_soc.te b/soc/sepolicy/soc/dump_soc.te
similarity index 100%
rename from soc/sepolicy/dump_soc.te
rename to soc/sepolicy/soc/dump_soc.te
diff --git a/soc/sepolicy/dumpstate.te b/soc/sepolicy/soc/dumpstate.te
similarity index 100%
rename from soc/sepolicy/dumpstate.te
rename to soc/sepolicy/soc/dumpstate.te
diff --git a/soc/sepolicy/file.te b/soc/sepolicy/soc/file.te
similarity index 100%
rename from soc/sepolicy/file.te
rename to soc/sepolicy/soc/file.te
diff --git a/soc/sepolicy/file_contexts b/soc/sepolicy/soc/file_contexts
similarity index 100%
rename from soc/sepolicy/file_contexts
rename to soc/sepolicy/soc/file_contexts
diff --git a/soc/sepolicy/genfs_contexts b/soc/sepolicy/soc/genfs_contexts
similarity index 100%
rename from soc/sepolicy/genfs_contexts
rename to soc/sepolicy/soc/genfs_contexts
diff --git a/soc/soc.mk b/soc/soc.mk
index b9b6208..d08d99d 100644
--- a/soc/soc.mk
+++ b/soc/soc.mk
@@ -1,4 +1,4 @@
-BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/soc/sepolicy
+BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/soc/sepolicy/soc
 
 PRODUCT_PACKAGES += dump_soc
 PRODUCT_PACKAGES_DEBUG += dump_memory.sh