diff --git a/device.mk b/device.mk
index a551ceb3..324fa7db 100644
--- a/device.mk
+++ b/device.mk
@@ -234,6 +234,12 @@ PRODUCT_PACKAGES += \
PRODUCT_PACKAGES += \
android.hardware.keymaster@3.0-impl
+# Memtrack HAL
+PRODUCT_PACKAGES += \
+ memtrack.msm8998 \
+ android.hardware.memtrack@1.0-impl \
+ android.hardware.memtrack@1.0-service
+
# Bluetooth HAL
PRODUCT_PACKAGES += \
android.hardware.bluetooth@1.0-impl \
diff --git a/manifest.xml b/manifest.xml
index 5ef3d3a8..2212b5a8 100644
--- a/manifest.xml
+++ b/manifest.xml
@@ -49,4 +49,10 @@
1.0
+
+ android.hardware.memtrack
+ hwbinder
+
+ 1.0
+
diff --git a/sepolicy/domain.te b/sepolicy/domain.te
index 07223d16..4485dbfd 100644
--- a/sepolicy/domain.te
+++ b/sepolicy/domain.te
@@ -1,3 +1,9 @@
userdebug_or_eng(`
allow domain diag_device:chr_file rw_file_perms;
')
+
+# In order for /sys/kernel/debug/kgsl/proc//mem
+# to be created for memory tracking, the domain of
+# the tracked process must have permission to search
+# in /sys/kernel/debug/kgsl
+allow domain debugfs_kgsl:dir search;
diff --git a/sepolicy/file.te b/sepolicy/file.te
index 3d321e09..3e04200d 100644
--- a/sepolicy/file.te
+++ b/sepolicy/file.te
@@ -8,6 +8,7 @@ type sysfs_net, sysfs_type, fs_type;
type sysfs_rmtfs, sysfs_type, fs_type;
type sysfs_soc, sysfs_type, fs_type;
type debugfs_rmt_storage, debugfs_type, fs_type;
+type debugfs_kgsl, debugfs_type, fs_type;
# /proc
type proc_wifi_dbg, fs_type;
diff --git a/sepolicy/genfs_contexts b/sepolicy/genfs_contexts
index d578ece2..424e1b4a 100644
--- a/sepolicy/genfs_contexts
+++ b/sepolicy/genfs_contexts
@@ -1,2 +1,4 @@
genfscon proc /debug/fwdump u:object_r:proc_wifi_dbg:s0
genfscon proc /debugdriver/driverdump u:object_r:proc_wifi_dbg:s0
+
+genfscon debugfs /kgsl/proc u:object_r:debugfs_kgsl:s0
diff --git a/sepolicy/hal_memtrack.te b/sepolicy/hal_memtrack.te
new file mode 100644
index 00000000..be35873e
--- /dev/null
+++ b/sepolicy/hal_memtrack.te
@@ -0,0 +1 @@
+allow hal_memtrack debugfs_kgsl:file { open read getattr };