habanalabs: expose only valid debugfs nodes
authorOfir Bitton <obitton@habana.ai>
Thu, 30 Jun 2022 06:54:59 +0000 (09:54 +0300)
committerOded Gabbay <ogabbay@kernel.org>
Tue, 12 Jul 2022 06:09:31 +0000 (09:09 +0300)
In case security is enabled on the device, some debugfs nodes will
fail. Hence, we do not expose them.

Signed-off-by: Ofir Bitton <obitton@habana.ai>
Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
Documentation/ABI/testing/debugfs-driver-habanalabs
drivers/misc/habanalabs/common/debugfs.c

index d9580f5..c915bf1 100644 (file)
@@ -130,14 +130,16 @@ Date:           Jan 2019
 KernelVersion:  5.1
 Contact:        ogabbay@kernel.org
 Description:    Sets I2C device address for I2C transaction that is generated
-                by the device's CPU
+                by the device's CPU, Not available when device is loaded with secured
+                firmware
 
 What:           /sys/kernel/debug/habanalabs/hl<n>/i2c_bus
 Date:           Jan 2019
 KernelVersion:  5.1
 Contact:        ogabbay@kernel.org
 Description:    Sets I2C bus address for I2C transaction that is generated by
-                the device's CPU
+                the device's CPU, Not available when device is loaded with secured
+                firmware
 
 What:           /sys/kernel/debug/habanalabs/hl<n>/i2c_data
 Date:           Jan 2019
@@ -145,39 +147,45 @@ KernelVersion:  5.1
 Contact:        ogabbay@kernel.org
 Description:    Triggers an I2C transaction that is generated by the device's
                 CPU. Writing to this file generates a write transaction while
-                reading from the file generates a read transaction
+                reading from the file generates a read transaction, Not available
+                when device is loaded with secured firmware
 
 What:           /sys/kernel/debug/habanalabs/hl<n>/i2c_len
 Date:           Dec 2021
 KernelVersion:  5.17
 Contact:        obitton@habana.ai
 Description:    Sets I2C length in bytes for I2C transaction that is generated by
-                the device's CPU
+                the device's CPU, Not available when device is loaded with secured
+                firmware
 
 What:           /sys/kernel/debug/habanalabs/hl<n>/i2c_reg
 Date:           Jan 2019
 KernelVersion:  5.1
 Contact:        ogabbay@kernel.org
 Description:    Sets I2C register id for I2C transaction that is generated by
-                the device's CPU
+                the device's CPU, Not available when device is loaded with secured
+                firmware
 
 What:           /sys/kernel/debug/habanalabs/hl<n>/led0
 Date:           Jan 2019
 KernelVersion:  5.1
 Contact:        ogabbay@kernel.org
-Description:    Sets the state of the first S/W led on the device
+Description:    Sets the state of the first S/W led on the device, Not available
+                when device is loaded with secured firmware
 
 What:           /sys/kernel/debug/habanalabs/hl<n>/led1
 Date:           Jan 2019
 KernelVersion:  5.1
 Contact:        ogabbay@kernel.org
-Description:    Sets the state of the second S/W led on the device
+Description:    Sets the state of the second S/W led on the device, Not available
+                when device is loaded with secured firmware
 
 What:           /sys/kernel/debug/habanalabs/hl<n>/led2
 Date:           Jan 2019
 KernelVersion:  5.1
 Contact:        ogabbay@kernel.org
-Description:    Sets the state of the third S/W led on the device
+Description:    Sets the state of the third S/W led on the device, Not available
+                when device is loaded with secured firmware
 
 What:           /sys/kernel/debug/habanalabs/hl<n>/memory_scrub
 Date:           May 2022
index 3da3966..64439f3 100644 (file)
@@ -1562,6 +1562,53 @@ static const struct file_operations hl_debugfs_fops = {
        .release = single_release,
 };
 
+static void add_secured_nodes(struct hl_dbg_device_entry *dev_entry)
+{
+       debugfs_create_u8("i2c_bus",
+                               0644,
+                               dev_entry->root,
+                               &dev_entry->i2c_bus);
+
+       debugfs_create_u8("i2c_addr",
+                               0644,
+                               dev_entry->root,
+                               &dev_entry->i2c_addr);
+
+       debugfs_create_u8("i2c_reg",
+                               0644,
+                               dev_entry->root,
+                               &dev_entry->i2c_reg);
+
+       debugfs_create_u8("i2c_len",
+                               0644,
+                               dev_entry->root,
+                               &dev_entry->i2c_len);
+
+       debugfs_create_file("i2c_data",
+                               0644,
+                               dev_entry->root,
+                               dev_entry,
+                               &hl_i2c_data_fops);
+
+       debugfs_create_file("led0",
+                               0200,
+                               dev_entry->root,
+                               dev_entry,
+                               &hl_led0_fops);
+
+       debugfs_create_file("led1",
+                               0200,
+                               dev_entry->root,
+                               dev_entry,
+                               &hl_led1_fops);
+
+       debugfs_create_file("led2",
+                               0200,
+                               dev_entry->root,
+                               dev_entry,
+                               &hl_led2_fops);
+}
+
 void hl_debugfs_add_device(struct hl_device *hdev)
 {
        struct hl_dbg_device_entry *dev_entry = &hdev->hl_debugfs;
@@ -1632,50 +1679,6 @@ void hl_debugfs_add_device(struct hl_device *hdev)
                                dev_entry,
                                &hl_power_fops);
 
-       debugfs_create_u8("i2c_bus",
-                               0644,
-                               dev_entry->root,
-                               &dev_entry->i2c_bus);
-
-       debugfs_create_u8("i2c_addr",
-                               0644,
-                               dev_entry->root,
-                               &dev_entry->i2c_addr);
-
-       debugfs_create_u8("i2c_reg",
-                               0644,
-                               dev_entry->root,
-                               &dev_entry->i2c_reg);
-
-       debugfs_create_u8("i2c_len",
-                               0644,
-                               dev_entry->root,
-                               &dev_entry->i2c_len);
-
-       debugfs_create_file("i2c_data",
-                               0644,
-                               dev_entry->root,
-                               dev_entry,
-                               &hl_i2c_data_fops);
-
-       debugfs_create_file("led0",
-                               0200,
-                               dev_entry->root,
-                               dev_entry,
-                               &hl_led0_fops);
-
-       debugfs_create_file("led1",
-                               0200,
-                               dev_entry->root,
-                               dev_entry,
-                               &hl_led1_fops);
-
-       debugfs_create_file("led2",
-                               0200,
-                               dev_entry->root,
-                               dev_entry,
-                               &hl_led2_fops);
-
        debugfs_create_file("device",
                                0200,
                                dev_entry->root,
@@ -1754,6 +1757,9 @@ void hl_debugfs_add_device(struct hl_device *hdev)
                entry->info_ent = &hl_debugfs_list[i];
                entry->dev_entry = dev_entry;
        }
+
+       if (!hdev->asic_prop.fw_security_enabled)
+               add_secured_nodes(dev_entry);
 }
 
 void hl_debugfs_remove_device(struct hl_device *hdev)