diff --git a/src/estoraged.cpp b/src/estoraged.cpp
index d2ff1ef..88529b7 100644
--- a/src/estoraged.cpp
+++ b/src/estoraged.cpp
@@ -39,6 +39,7 @@
                      const std::string& serialNumber,
                      const std::string& locationCode, uint64_t eraseMaxGeometry,
                      uint64_t eraseMinGeometry, const std::string& driveType,
+                     const std::string& driveProtocol,
                      std::unique_ptr<CryptsetupInterface> cryptInterface,
                      std::unique_ptr<FilesystemInterface> fsInterface) :
     devPath(devPath),
@@ -90,6 +91,9 @@
     driveInterface->register_property(
         "Type",
         "xyz.openbmc_project.Inventory.Item.Drive.DriveType." + driveType);
+    driveInterface->register_property(
+        "Protocol", "xyz.openbmc_project.Inventory.Item.Drive.DriveProtocol." +
+                        driveProtocol);
     /* This registers the Locked property for the Drives interface.
      * Now it is the same as the volume Locked property */
     driveInterface->register_property_r(
diff --git a/src/main.cpp b/src/main.cpp
index cb37791..6d92ecf 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -99,12 +99,13 @@
             std::string partNumber = estoraged::util::getPartNumber(sysfsDir);
             std::string serialNumber =
                 estoraged::util::getSerialNumber(sysfsDir);
-            std::string driveType = deviceInfo->driveType;
+            const std::string& driveType = deviceInfo->driveType;
+            const std::string& driveProtocol = deviceInfo->driveProtocol;
             /* Create the storage object. */
             storageObjects[path] = std::make_unique<estoraged::EStoraged>(
                 objectServer, path, deviceFile, luksName, size, lifeleft,
                 partNumber, serialNumber, locationCode, eraseMaxGeometry,
-                eraseMinGeometry, driveType);
+                eraseMinGeometry, driveType, driveProtocol);
             lg2::info("Created eStoraged object for path {PATH}", "PATH", path,
                       "REDFISH_MESSAGE_ID",
                       std::string("OpenBMC.0.1.CreateStorageObjects"));
diff --git a/src/test/estoraged_test.cpp b/src/test/estoraged_test.cpp
index 3d31112..5ad8f00 100644
--- a/src/test/estoraged_test.cpp
+++ b/src/test/estoraged_test.cpp
@@ -47,6 +47,7 @@
     const std::string testSerialNumber = "ABCDEF1234";
     const std::string testLocationCode = "U102020";
     const std::string testDriveType = "SSD";
+    const std::string testDriveProtocol = "eMMC";
     std::ofstream testFile;
     std::string passwordString;
     std::vector<uint8_t> password;
@@ -92,7 +93,8 @@
             *objectServer, testConfigPath, testFileName, testLuksDevName,
             testSize, testLifeTime, testPartNumber, testSerialNumber,
             testLocationCode, ERASE_MAX_GEOMETRY, ERASE_MIN_GEOMETRY,
-            testDriveType, std::move(cryptIface), std::move(fsIface));
+            testDriveType, testDriveProtocol, std::move(cryptIface),
+            std::move(fsIface));
     }
 
     void TearDown() override
diff --git a/src/test/util_test.cpp b/src/test/util_test.cpp
index 86e86e9..e2fdcc3 100644
--- a/src/test/util_test.cpp
+++ b/src/test/util_test.cpp
@@ -144,6 +144,7 @@
     EXPECT_EQ(ERASE_MAX_GEOMETRY, result->eraseMaxGeometry);
     EXPECT_EQ(ERASE_MIN_GEOMETRY, result->eraseMinGeometry);
     EXPECT_EQ("SSD", result->driveType);
+    EXPECT_EQ("eMMC", result->driveProtocol);
 
     /* Delete the dummy files. */
     EXPECT_EQ(3U, std::filesystem::remove_all("mmcblk0"));
@@ -201,6 +202,7 @@
     EXPECT_EQ(5566, result->eraseMaxGeometry);
     EXPECT_EQ(1234, result->eraseMinGeometry);
     EXPECT_EQ("SSD", result->driveType);
+    EXPECT_EQ("eMMC", result->driveProtocol);
 
     /* Delete the dummy files. */
     EXPECT_EQ(3U, std::filesystem::remove_all("mmcblk0"));
diff --git a/src/util.cpp b/src/util.cpp
index 7bccdb1..fc32f0e 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -203,15 +203,18 @@
     }
 
     /*
-     * Determine the drive type to report for this device. Note that we only
-     * support eMMC currently, so report an error for any other device types.
+     * Determine the drive type and protocol to report for this device. Note
+     * that we only support eMMC currently, so report an error for any other
+     * device types.
      */
     std::string deviceType = std::get<std::string>(typeVariant);
-    /* drive type to report in the Item.Drive dbus interface */
+    /* drive type and protocol to report in the Item.Drive dbus interface */
     std::string driveType;
+    std::string driveProtocol;
     if (deviceType.compare("EmmcDevice") == 0)
     {
         driveType = "SSD";
+        driveProtocol = "eMMC";
     }
     else
     {
@@ -253,9 +256,10 @@
                 deviceFile /= deviceName;
 
                 std::string luksName = "luks-" + deviceName.string();
-                return DeviceInfo{
-                    deviceFile,       sysfsDir,         luksName, locationCode,
-                    eraseMaxGeometry, eraseMinGeometry, driveType};
+                return DeviceInfo{deviceFile,       sysfsDir,
+                                  luksName,         locationCode,
+                                  eraseMaxGeometry, eraseMinGeometry,
+                                  driveType,        driveProtocol};
             }
         }
         catch (...)
