diff --git a/private/perfprofd.te b/private/perfprofd.te
index 2b4d537829f2df1545d163b5b5f0ec557471091a..25f97111f9e9c810a06c2761045a9abc68004c0a 100644
--- a/private/perfprofd.te
+++ b/private/perfprofd.te
@@ -3,6 +3,6 @@ userdebug_or_eng(`
   init_daemon_domain(perfprofd)
 ')
 
-# Only servicemanager, statsd, su and systemserver can communicate.
-neverallow { domain userdebug_or_eng(`-statsd -system_server') } perfprofd:binder call;
-neverallow perfprofd { domain userdebug_or_eng(`-servicemanager -statsd -su -system_server') }:binder call;
+# Only servicemanager, statsd, su, systemserver, hwservicemanager, health HAL can communicate.
+neverallow { domain userdebug_or_eng(`-statsd -system_server -hal_health_server -hwservicemanager') } perfprofd:binder call;
+neverallow perfprofd { domain userdebug_or_eng(`-servicemanager -statsd -su -system_server -hal_health_server -hwservicemanager') }:binder call;
diff --git a/public/domain.te b/public/domain.te
index c6fc9f831682c656d51b2fdc0c5c259e804bcbdf..fbc9a7fbf714931eb4ca4eb44c00d51fcc99ea0b 100644
--- a/public/domain.te
+++ b/public/domain.te
@@ -1421,7 +1421,5 @@ full_treble_only(`
     -charger
     # TODO(b/110891300): remove this exception
     -incidentd
-    # TODO(b/110890430): remove this exception
-    -perfprofd
   } sysfs_batteryinfo:file { open read };
 ')
diff --git a/public/perfprofd.te b/public/perfprofd.te
index f067af5d4a9b5da0c847ef04eadb4324f9b477e8..c041ec2a88a9cb8efc72891dbf257330481e9f8c 100644
--- a/public/perfprofd.te
+++ b/public/perfprofd.te
@@ -39,8 +39,8 @@ userdebug_or_eng(`
   # perfprofd looks at thermals.
   allow perfprofd sysfs_thermal:dir r_dir_perms;
 
-  # perfprofd checks power_supply.
-  r_dir_file(perfprofd, sysfs_batteryinfo)
+  # perfprofd gets charging status.
+  hal_client_domain(perfprofd, hal_health)
 
   # simpleperf reads kernel notes.
   allow perfprofd sysfs_kernel_notes:file r_file_perms;