drm/amd/amdgpu: add sw_fini interface for df_funcs

Submitted by Kim, Jonathan on Sept. 3, 2019, 2:31 p.m.

Details

Message ID CH2PR12MB3831BE0A7E1335D273B1FD4585B90@CH2PR12MB3831.namprd12.prod.outlook.com
State New
Headers show
Series "drm/amd/amdgpu: add sw_fini interface for df_funcs" ( rev: 2 ) in AMD X.Org drivers

Not browsing as part of any series.

Commit Message

Kim, Jonathan Sept. 3, 2019, 2:31 p.m.
Reviewed-by: Jonathan Kim <Jonathan.Kim@amd.com>


-----Original Message-----
From: amd-gfx <amd-gfx-bounces@lists.freedesktop.org> On Behalf Of Jack Zhang

Sent: Tuesday, September 3, 2019 5:54 AM
To: amd-gfx@lists.freedesktop.org
Cc: Zhang, Jack (Jian) <Jack.Zhang1@amd.com>
Subject: [PATCH] drm/amd/amdgpu: add sw_fini interface for df_funcs

[CAUTION: External Email]

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>

---
 drivers/gpu/drm/amd/amdgpu/amdgpu.h  | 1 +  drivers/gpu/drm/amd/amdgpu/df_v1_7.c | 5 +++++  drivers/gpu/drm/amd/amdgpu/df_v3_6.c | 8 ++++++++
 drivers/gpu/drm/amd/amdgpu/soc15.c   | 3 +++
 4 files changed, 17 insertions(+)


_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Patch hide | download patch | download mbox

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index a236213..f26226d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -655,6 +655,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); diff --git a/drivers/gpu/drm/amd/amdgpu/df_v1_7.c b/drivers/gpu/drm/amd/amdgpu/df_v1_7.c
index 844c038..d622129 100644
--- a/drivers/gpu/drm/amd/amdgpu/df_v1_7.c
+++ b/drivers/gpu/drm/amd/amdgpu/df_v1_7.c
@@ -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, diff --git a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c
index deee4f4..16fbd2bc8 100644
--- a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c
+++ b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c
@@ -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, diff --git a/drivers/gpu/drm/amd/amdgpu/soc15.c b/drivers/gpu/drm/amd/amdgpu/soc15.c
index d407e29..cb22970 100644
--- a/drivers/gpu/drm/amd/amdgpu/soc15.c
+++ b/drivers/gpu/drm/amd/amdgpu/soc15.c
@@ -1239,6 +1239,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;
 }

--
2.7.4