diff --git a/Documentation/btrfs-man5.rst b/Documentation/btrfs-man5.rst
index b50064fe9931..c625a9585457 100644
--- a/Documentation/btrfs-man5.rst
+++ b/Documentation/btrfs-man5.rst
@@ -66,6 +66,12 @@ big_metadata
         the filesystem uses *nodesize* for metadata blocks, this can be bigger than the
         page size
 
+block_group_tree
+        (since: 6.1)
+
+        block group item representation using a dedicated b-tree, this can greatly
+        reduce mount time for large filesystems.
+
 compress_lzo
         (since: 2.6.38)
 
diff --git a/Documentation/btrfstune.rst b/Documentation/btrfstune.rst
index f4400f1f527a..c84c1e7e7092 100644
--- a/Documentation/btrfstune.rst
+++ b/Documentation/btrfstune.rst
@@ -24,8 +24,8 @@ means.  Please refer to the *FILESYSTEM FEATURES* in :doc:`btrfs(5)<btrfs-man5>`
 OPTIONS
 -------
 
--b
-        (since kernel 6.1, needs experimental build of btrfs-progs)
+--enable-block-group-tree
+        (since kernel 6.1)
         Enable block group tree feature (greatly reduce mount time),
         enabled by mkfs feature *block-group-tree*.
 
diff --git a/Documentation/mkfs.btrfs.rst b/Documentation/mkfs.btrfs.rst
index e80f4c5c83ee..fe52f4406bf2 100644
--- a/Documentation/mkfs.btrfs.rst
+++ b/Documentation/mkfs.btrfs.rst
@@ -283,6 +283,11 @@ free-space-tree
         Enable the free space tree (mount option *space_cache=v2*) for persisting the
         free space cache.
 
+block-group-tree
+        (kernel support since 6.1)
+
+        Enable the block group tree to greatly reduce mount time for large filesystems.
+
 BLOCK GROUPS, CHUNKS, RAID
 --------------------------
 
diff --git a/common/fsfeatures.c b/common/fsfeatures.c
index 4aca96f6e4fe..50500c652265 100644
--- a/common/fsfeatures.c
+++ b/common/fsfeatures.c
@@ -171,7 +171,6 @@ static const struct btrfs_feature mkfs_features[] = {
 		.desc		= "support zoned devices"
 	},
 #endif
-#if EXPERIMENTAL
 	{
 		.name		= "block-group-tree",
 		.compat_ro_flag	= BTRFS_FEATURE_COMPAT_RO_BLOCK_GROUP_TREE,
@@ -181,6 +180,7 @@ static const struct btrfs_feature mkfs_features[] = {
 		VERSION_NULL(default),
 		.desc		= "block group tree to reduce mount time"
 	},
+#if EXPERIMENTAL
 	{
 		.name		= "extent-tree-v2",
 		.incompat_flag	= BTRFS_FEATURE_INCOMPAT_EXTENT_TREE_V2,
@@ -222,7 +222,6 @@ static const struct btrfs_feature runtime_features[] = {
 		VERSION_TO_STRING2(default, 5,15),
 		.desc		= "free space tree (space_cache=v2)"
 	},
-#if EXPERIMENTAL
 	{
 		.name		= "block-group-tree",
 		.compat_ro_flag	= BTRFS_FEATURE_COMPAT_RO_BLOCK_GROUP_TREE,
@@ -232,7 +231,6 @@ static const struct btrfs_feature runtime_features[] = {
 		VERSION_NULL(default),
 		.desc		= "block group tree to reduce mount time"
 	},
-#endif
 	/* Keep this one last */
 	{
 		.name		= "list-all",
diff --git a/tune/main.c b/tune/main.c
index c5d2e37aef3d..f5a94cdbdb5f 100644
--- a/tune/main.c
+++ b/tune/main.c
@@ -70,6 +70,7 @@ static const char * const tune_usage[] = {
 	OPTLINE("-x", "enable skinny metadata extent refs (mkfs: skinny-metadata)"),
 	OPTLINE("-n", "enable no-holes feature (mkfs: no-holes, more efficient sparse file representation)"),
 	OPTLINE("-S <0|1>", "set/unset seeding status of a device"),
+	OPTLINE("--enable-block-group-tree", "enable block group tree (mkfs: block-group-tree, for less mount time)"),
 	"",
 	"UUID changes:",
 	OPTLINE("-u", "rewrite fsid, use a random one"),
@@ -84,7 +85,6 @@ static const char * const tune_usage[] = {
 	"",
 	"EXPERIMENTAL FEATURES:",
 	OPTLINE("--csum CSUM", "switch checksum for data and metadata to CSUM"),
-	OPTLINE("-b", "enable block group tree (mkfs: block-group-tree, for less mount time)"),
 #endif
 	NULL
 };
@@ -113,27 +113,22 @@ int BOX_MAIN(btrfstune)(int argc, char *argv[])
 	btrfs_config_init();
 
 	while(1) {
-		enum { GETOPT_VAL_CSUM = GETOPT_VAL_FIRST };
+		enum { GETOPT_VAL_CSUM = GETOPT_VAL_FIRST,
+		       GETOPT_VAL_ENABLE_BLOCK_GROUP_TREE };
 		static const struct option long_options[] = {
 			{ "help", no_argument, NULL, GETOPT_VAL_HELP},
+			{ "enable-block-group-tree", no_argument, NULL,
+				GETOPT_VAL_ENABLE_BLOCK_GROUP_TREE},
 #if EXPERIMENTAL
 			{ "csum", required_argument, NULL, GETOPT_VAL_CSUM },
 #endif
 			{ NULL, 0, NULL, 0 }
 		};
-#if EXPERIMENTAL
-		int c = getopt_long(argc, argv, "S:rxfuU:nmM:b", long_options, NULL);
-#else
 		int c = getopt_long(argc, argv, "S:rxfuU:nmM:", long_options, NULL);
-#endif
 
 		if (c < 0)
 			break;
 		switch(c) {
-		case 'b':
-			btrfs_warn_experimental("Feature: conversion to block-group-tree");
-			to_bg_tree = true;
-			break;
 		case 'S':
 			seeding_flag = 1;
 			seeding_value = arg_strtou64(optarg);
@@ -167,6 +162,9 @@ int BOX_MAIN(btrfstune)(int argc, char *argv[])
 			ctree_flags |= OPEN_CTREE_IGNORE_FSID_MISMATCH;
 			change_metadata_uuid = 1;
 			break;
+		case GETOPT_VAL_ENABLE_BLOCK_GROUP_TREE:
+			to_bg_tree = true;
+			break;
 #if EXPERIMENTAL
 		case GETOPT_VAL_CSUM:
 			btrfs_warn_experimental(
