diff --git a/src/ipa/ipa_vimc.cpp b/src/ipa/ipa_vimc.cpp
index abc06e7f5fd5..5fb62129fef9 100644
--- a/src/ipa/ipa_vimc.cpp
+++ b/src/ipa/ipa_vimc.cpp
@@ -5,22 +5,88 @@
  * ipa_vimc.cpp - Vimc Image Processing Algorithm module
  */
 
+#include "ipa_vimc.h"
+
 #include <iostream>
 
+#include <fcntl.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
 #include <ipa/ipa_interface.h>
 #include <ipa/ipa_module_info.h>
 
+#include "log.h"
+
 namespace libcamera {
 
+LOG_DEFINE_CATEGORY(IPAVimc)
+
 class IPAVimc : public IPAInterface
 {
 public:
+	IPAVimc();
+	~IPAVimc();
+
 	int init();
+
+private:
+	void initTrace();
+	int trace(enum IPAOperationCodes operation);
+
+	int fd_;
 };
 
+IPAVimc::IPAVimc()
+	: fd_(-1)
+{
+	initTrace();
+}
+
+IPAVimc::~IPAVimc()
+{
+	if (fd_)
+		::close(fd_);
+}
+
 int IPAVimc::init()
 {
 	std::cout << "initializing vimc IPA!" << std::endl;
+
+	return trace(IPAOperationInit);
+}
+
+void IPAVimc::initTrace()
+{
+	struct stat fifoStat;
+	int ret = stat(vimcFifoPath, &fifoStat);
+	if (ret)
+		return;
+
+	ret = ::open(vimcFifoPath, O_WRONLY);
+	if (ret < 0) {
+		LOG(IPAVimc, Debug) << "Failed to open vimc IPA test FIFO: "
+				    << strerror(errno) << std::endl;
+		return;
+	}
+
+	fd_ = ret;
+}
+
+int IPAVimc::trace(enum IPAOperationCodes operation)
+{
+	if (fd_ < 0)
+		return 0;
+
+	int ret = ::write(fd_, &operation, sizeof(operation));
+	if (ret < 0) {
+		ret = -errno;
+		LOG(IPAVimc, Debug) << "Failed to write to vimc IPA test FIFO: "
+				    << strerror(-ret) << std::endl;
+		return ret;
+	}
+
 	return 0;
 }
 
diff --git a/src/ipa/ipa_vimc.h b/src/ipa/ipa_vimc.h
new file mode 100644
index 000000000000..62e40c5a6714
--- /dev/null
+++ b/src/ipa/ipa_vimc.h
@@ -0,0 +1,21 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * ipa_vimc.h - Vimc Image Processing Algorithm module
+ */
+
+#ifndef __LIBCAMERA_IPA_VIMC_H__
+#define __LIBCAMERA_IPA_VIMC_H__
+
+namespace libcamera {
+
+static const char *vimcFifoPath = "/tmp/vimc_ipa_fifo";
+enum IPAOperationCodes {
+	IPAOperationNone,
+	IPAOperationInit,
+};
+
+}; /* namespace libcamera */
+
+#endif /* __LIBCAMERA_IPA_VIMC_H__ */
