The read buffers represent resources within the DSA
                implementation, and these resources are allocated by engines to
                support operations. See DSA spec v1.2 9.2.4 Total Read Buffers.
+               It's not visible when the device does not support Read Buffer
+               allocation control.
 
 What:           /sys/bus/dsa/devices/dsa<m>/max_transfer_size
 Date:           Oct 25, 2019
 Description:    The maximum number of read buffers that may be in use at
                one time by operations that access low bandwidth memory in the
                device. See DSA spec v1.2 9.2.8 GENCFG on Global Read Buffer Limit.
+               It's not visible when the device does not support Read Buffer
+               allocation control.
 
 What:          /sys/bus/dsa/devices/dsa<m>/cmd_status
 Date:          Aug 28, 2020
 Contact:       dmaengine@vger.kernel.org
 Description:   Enable the use of global read buffer limit for the group. See DSA
                spec v1.2 9.2.18 GRPCFG Use Global Read Buffer Limit.
+               It's not visible when the device does not support Read Buffer
+               allocation control.
 
 What:          /sys/bus/dsa/devices/group<m>.<n>/read_buffers_allowed
 Date:          Dec 10, 2021
 Description:   Indicates max number of read buffers that may be in use at one time
                by all engines in the group. See DSA spec v1.2 9.2.18 GRPCFG Read
                Buffers Allowed.
+               It's not visible when the device does not support Read Buffer
+               allocation control.
 
 What:          /sys/bus/dsa/devices/group<m>.<n>/read_buffers_reserved
 Date:          Dec 10, 2021
 Description:   Indicates the number of Read Buffers reserved for the use of
                engines in the group. See DSA spec v1.2 9.2.18 GRPCFG Read Buffers
                Reserved.
+               It's not visible when the device does not support Read Buffer
+               allocation control.
 
 What:          /sys/bus/dsa/devices/group<m>.<n>/desc_progress_limit
 Date:          Sept 14, 2022
 
                !idxd->hw.group_cap.progress_limit;
 }
 
+static bool idxd_group_attr_read_buffers_invisible(struct attribute *attr,
+                                                  struct idxd_device *idxd)
+{
+       /*
+        * Intel IAA does not support Read Buffer allocation control,
+        * make these attributes invisible.
+        */
+       return (attr == &dev_attr_group_use_token_limit.attr ||
+               attr == &dev_attr_group_use_read_buffer_limit.attr ||
+               attr == &dev_attr_group_tokens_allowed.attr ||
+               attr == &dev_attr_group_read_buffers_allowed.attr ||
+               attr == &dev_attr_group_tokens_reserved.attr ||
+               attr == &dev_attr_group_read_buffers_reserved.attr) &&
+               idxd->data->type == IDXD_TYPE_IAX;
+}
+
 static umode_t idxd_group_attr_visible(struct kobject *kobj,
                                       struct attribute *attr, int n)
 {
        if (idxd_group_attr_progress_limit_invisible(attr, idxd))
                return 0;
 
+       if (idxd_group_attr_read_buffers_invisible(attr, idxd))
+               return 0;
+
        return attr->mode;
 }
 
               idxd->data->type == IDXD_TYPE_IAX;
 }
 
+static bool idxd_device_attr_read_buffers_invisible(struct attribute *attr,
+                                                   struct idxd_device *idxd)
+{
+       /*
+        * Intel IAA does not support Read Buffer allocation control,
+        * make these attributes invisible.
+        */
+       return (attr == &dev_attr_max_tokens.attr ||
+               attr == &dev_attr_max_read_buffers.attr ||
+               attr == &dev_attr_token_limit.attr ||
+               attr == &dev_attr_read_buffer_limit.attr) &&
+               idxd->data->type == IDXD_TYPE_IAX;
+}
+
 static umode_t idxd_device_attr_visible(struct kobject *kobj,
                                        struct attribute *attr, int n)
 {
        if (idxd_device_attr_max_batch_size_invisible(attr, idxd))
                return 0;
 
+       if (idxd_device_attr_read_buffers_invisible(attr, idxd))
+               return 0;
+
        return attr->mode;
 }