drm/amd/amdgpu: add sw_fini interface for df_funcs
authorJack Zhang <Jack.Zhang1@amd.com>
Tue, 3 Sep 2019 02:15:23 +0000 (10:15 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 13 Sep 2019 22:42:15 +0000 (17:42 -0500)
add sw_fini interface of df_funcs.
This interface will remove sysfs file of df_cntr_avail
function.

The old behavior only create sysfs of df_cntr_avail
in sw_init, but never remove it for lack of sw_fini
interface. With this,driver will report create
sysfs fail when it's loaded for the second time.

Signed-off-by: Jack Zhang <Jack.Zhang1@amd.com>
Reviewed-by: Jonathan Kim <Jonathan.Kim@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu.h
drivers/gpu/drm/amd/amdgpu/df_v1_7.c
drivers/gpu/drm/amd/amdgpu/df_v3_6.c
drivers/gpu/drm/amd/amdgpu/soc15.c

index a69e781b2c7658dbabb7de5dfb5b09034d8e04a8..dd9e18f155f035aaf4030227f8fab55cbcee3f30 100644 (file)
@@ -651,6 +651,7 @@ struct amdgpu_mmio_remap {
 
 struct amdgpu_df_funcs {
        void (*sw_init)(struct amdgpu_device *adev);
+       void (*sw_fini)(struct amdgpu_device *adev);
        void (*enable_broadcast_mode)(struct amdgpu_device *adev,
                                      bool enable);
        u32 (*get_fb_channel_number)(struct amdgpu_device *adev);
index 844c038682485bbb629e7ba152b14611f3455f01..d6221298b477fef6340c9086ca97da78ae5720eb 100644 (file)
@@ -33,6 +33,10 @@ static void df_v1_7_sw_init(struct amdgpu_device *adev)
 {
 }
 
+static void df_v1_7_sw_fini(struct amdgpu_device *adev)
+{
+}
+
 static void df_v1_7_enable_broadcast_mode(struct amdgpu_device *adev,
                                           bool enable)
 {
@@ -111,6 +115,7 @@ static void df_v1_7_enable_ecc_force_par_wr_rmw(struct amdgpu_device *adev,
 
 const struct amdgpu_df_funcs df_v1_7_funcs = {
        .sw_init = df_v1_7_sw_init,
+       .sw_fini = df_v1_7_sw_fini,
        .enable_broadcast_mode = df_v1_7_enable_broadcast_mode,
        .get_fb_channel_number = df_v1_7_get_fb_channel_number,
        .get_hbm_channel_number = df_v1_7_get_hbm_channel_number,
index deee4f40423d74b5476b987dfab2023b86673f0a..16fbd2bc8ad1ea00d3f1c7a6c9e8df996970571e 100644 (file)
@@ -220,6 +220,13 @@ static void df_v3_6_sw_init(struct amdgpu_device *adev)
                adev->df_perfmon_config_assign_mask[i] = 0;
 }
 
+static void df_v3_6_sw_fini(struct amdgpu_device *adev)
+{
+
+       device_remove_file(adev->dev, &dev_attr_df_cntr_avail);
+
+}
+
 static void df_v3_6_enable_broadcast_mode(struct amdgpu_device *adev,
                                          bool enable)
 {
@@ -537,6 +544,7 @@ static void df_v3_6_pmc_get_count(struct amdgpu_device *adev,
 
 const struct amdgpu_df_funcs df_v3_6_funcs = {
        .sw_init = df_v3_6_sw_init,
+       .sw_fini = df_v3_6_sw_fini,
        .enable_broadcast_mode = df_v3_6_enable_broadcast_mode,
        .get_fb_channel_number = df_v3_6_get_fb_channel_number,
        .get_hbm_channel_number = df_v3_6_get_hbm_channel_number,
index 6588909de60bc598347c2bc6f46e5f7ccfee4ac9..fb9c3407ca35ae653688595bfc677dc318eae28e 100644 (file)
@@ -1240,6 +1240,9 @@ static int soc15_common_sw_init(void *handle)
 
 static int soc15_common_sw_fini(void *handle)
 {
+       struct amdgpu_device *adev = (struct amdgpu_device *)handle;
+
+       adev->df_funcs->sw_fini(adev);
        return 0;
 }