RE: [PATCH 3/3] drm/amdgpu: add xgmi perfmons for arcturus
[AMD Official Use Only - Internal Distribution Only] This patch series Reviewed-By: Harish Kasiviswanathan -Original Message- From: Kim, Jonathan Sent: Friday, October 2, 2020 4:19 PM To: amd-gfx@lists.freedesktop.org Cc: Kasiviswanathan, Harish ; Kim, Jonathan Subject: [PATCH 3/3] drm/amdgpu: add xgmi perfmons for arcturus Add xgmi perfmons for Arcturus. Signed-off-by: Jonathan Kim v4: Align with patch 2 with struct improvements v3: Align with patch 2 streamlining perf types versus event config types. v2: Resend for re-review with alignment for v3 in patch 2. --- drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c | 49 + drivers/gpu/drm/amd/amdgpu/df_v3_6.c| 3 ++ 2 files changed, 52 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c index 20c500f61b40..d29226f7b6ea 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c @@ -35,6 +35,9 @@ #define NUM_EVENT_TYPES_VEGA20 1 #define NUM_EVENTS_VEGA20_XGMI 2 #define NUM_EVENTS_VEGA20_MAX NUM_EVENTS_VEGA20_XGMI +#define NUM_EVENT_TYPES_ARCTURUS 1 +#define NUM_EVENTS_ARCTURUS_XGMI 6 +#define NUM_EVENTS_ARCTURUS_MAXNUM_EVENTS_ARCTURUS_XGMI struct amdgpu_pmu_event_attribute { struct device_attribute attr; @@ -174,6 +177,36 @@ static struct amdgpu_pmu_config df_vega20_config = { .num_types = 0 }; +/* Arcturus events */ +static struct amdgpu_pmu_attr arcturus_events[NUM_EVENTS_ARCTURUS_MAX] = { + { .name = "xgmi_link0_data_outbound", + .config = "event=0x7,instance=0x4b,umask=0x2" }, + { .name = "xgmi_link1_data_outbound", + .config = "event=0x7,instance=0x4c,umask=0x2" }, + { .name = "xgmi_link2_data_outbound", + .config = "event=0x7,instance=0x4d,umask=0x2" }, + { .name = "xgmi_link3_data_outbound", + .config = "event=0x7,instance=0x4e,umask=0x2" }, + { .name = "xgmi_link4_data_outbound", + .config = "event=0x7,instance=0x4f,umask=0x2" }, + { .name = "xgmi_link5_data_outbound", + .config = "event=0x7,instance=0x50,umask=0x2" } }; + +static struct amdgpu_pmu_type arcturus_types[NUM_EVENT_TYPES_ARCTURUS] = { + { .type = AMDGPU_PMU_EVENT_CONFIG_TYPE_XGMI, + .num_of_type = NUM_EVENTS_ARCTURUS_XGMI } }; + +static struct amdgpu_pmu_config arcturus_config = { + .formats = amdgpu_pmu_formats, + .num_formats = ARRAY_SIZE(amdgpu_pmu_formats), + .events = arcturus_events, + .num_events = ARRAY_SIZE(arcturus_events), + .types = arcturus_types, + .num_types = ARRAY_SIZE(arcturus_types) }; + /* initialize perf counter */ static int amdgpu_perf_event_init(struct perf_event *event) { @@ -605,6 +638,22 @@ int amdgpu_pmu_init(struct amdgpu_device *adev) } break; + case CHIP_ARCTURUS: + pmu_entry = create_pmu_entry(adev, AMDGPU_PMU_PERF_TYPE_ALL, + "", "amdgpu"); + if (!pmu_entry) + return -ENOMEM; + + ret = init_pmu_entry_by_type_and_add(pmu_entry, + _config); + + if (ret) { + kfree(pmu_entry); + return -ENOMEM; + } + + break; + default: return 0; }; diff --git a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c index 6e57ae95f997..6b4b30a8dce5 100644 --- a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c +++ b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c @@ -513,6 +513,7 @@ static int df_v3_6_pmc_start(struct amdgpu_device *adev, uint64_t config, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: if (is_add) return df_v3_6_pmc_add_cntr(adev, config); @@ -554,6 +555,7 @@ static int df_v3_6_pmc_stop(struct amdgpu_device *adev, uint64_t config, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: ret = df_v3_6_pmc_get_ctrl_settings(adev, config, counter_idx, @@ -590,6 +592,7 @@ static void df_v3_6_pmc_get_count(struct amdgpu_device *adev, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: df_v3_6_pmc_get_read_settings(adev, config, counter_idx, _base_addr, _base_addr); -- 2.17.1 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
RE: [PATCH 3/3] drm/amdgpu: add xgmi perfmons for arcturus
[AMD Official Use Only - Internal Distribution Only] This series Acked-by: Harish Kasiviswanathan -Original Message- From: Kim, Jonathan Sent: Friday, October 2, 2020 4:19 PM To: amd-gfx@lists.freedesktop.org Cc: Kasiviswanathan, Harish ; Kim, Jonathan Subject: [PATCH 3/3] drm/amdgpu: add xgmi perfmons for arcturus Add xgmi perfmons for Arcturus. Signed-off-by: Jonathan Kim v4: Align with patch 2 with struct improvements v3: Align with patch 2 streamlining perf types versus event config types. v2: Resend for re-review with alignment for v3 in patch 2. --- drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c | 49 + drivers/gpu/drm/amd/amdgpu/df_v3_6.c| 3 ++ 2 files changed, 52 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c index 20c500f61b40..d29226f7b6ea 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c @@ -35,6 +35,9 @@ #define NUM_EVENT_TYPES_VEGA20 1 #define NUM_EVENTS_VEGA20_XGMI 2 #define NUM_EVENTS_VEGA20_MAX NUM_EVENTS_VEGA20_XGMI +#define NUM_EVENT_TYPES_ARCTURUS 1 +#define NUM_EVENTS_ARCTURUS_XGMI 6 +#define NUM_EVENTS_ARCTURUS_MAXNUM_EVENTS_ARCTURUS_XGMI struct amdgpu_pmu_event_attribute { struct device_attribute attr; @@ -174,6 +177,36 @@ static struct amdgpu_pmu_config df_vega20_config = { .num_types = 0 }; +/* Arcturus events */ +static struct amdgpu_pmu_attr arcturus_events[NUM_EVENTS_ARCTURUS_MAX] = { + { .name = "xgmi_link0_data_outbound", + .config = "event=0x7,instance=0x4b,umask=0x2" }, + { .name = "xgmi_link1_data_outbound", + .config = "event=0x7,instance=0x4c,umask=0x2" }, + { .name = "xgmi_link2_data_outbound", + .config = "event=0x7,instance=0x4d,umask=0x2" }, + { .name = "xgmi_link3_data_outbound", + .config = "event=0x7,instance=0x4e,umask=0x2" }, + { .name = "xgmi_link4_data_outbound", + .config = "event=0x7,instance=0x4f,umask=0x2" }, + { .name = "xgmi_link5_data_outbound", + .config = "event=0x7,instance=0x50,umask=0x2" } }; + +static struct amdgpu_pmu_type arcturus_types[NUM_EVENT_TYPES_ARCTURUS] = { + { .type = AMDGPU_PMU_EVENT_CONFIG_TYPE_XGMI, + .num_of_type = NUM_EVENTS_ARCTURUS_XGMI } }; + +static struct amdgpu_pmu_config arcturus_config = { + .formats = amdgpu_pmu_formats, + .num_formats = ARRAY_SIZE(amdgpu_pmu_formats), + .events = arcturus_events, + .num_events = ARRAY_SIZE(arcturus_events), + .types = arcturus_types, + .num_types = ARRAY_SIZE(arcturus_types) }; + /* initialize perf counter */ static int amdgpu_perf_event_init(struct perf_event *event) { @@ -605,6 +638,22 @@ int amdgpu_pmu_init(struct amdgpu_device *adev) } break; + case CHIP_ARCTURUS: + pmu_entry = create_pmu_entry(adev, AMDGPU_PMU_PERF_TYPE_ALL, + "", "amdgpu"); + if (!pmu_entry) + return -ENOMEM; + + ret = init_pmu_entry_by_type_and_add(pmu_entry, + _config); + + if (ret) { + kfree(pmu_entry); + return -ENOMEM; + } + + break; + default: return 0; }; diff --git a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c index 6e57ae95f997..6b4b30a8dce5 100644 --- a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c +++ b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c @@ -513,6 +513,7 @@ static int df_v3_6_pmc_start(struct amdgpu_device *adev, uint64_t config, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: if (is_add) return df_v3_6_pmc_add_cntr(adev, config); @@ -554,6 +555,7 @@ static int df_v3_6_pmc_stop(struct amdgpu_device *adev, uint64_t config, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: ret = df_v3_6_pmc_get_ctrl_settings(adev, config, counter_idx, @@ -590,6 +592,7 @@ static void df_v3_6_pmc_get_count(struct amdgpu_device *adev, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: df_v3_6_pmc_get_read_settings(adev, config, counter_idx, _base_addr, _base_addr); -- 2.17.1 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH 3/3] drm/amdgpu: add xgmi perfmons for arcturus
Add xgmi perfmons for Arcturus. Signed-off-by: Jonathan Kim v4: Align with patch 2 with struct improvements v3: Align with patch 2 streamlining perf types versus event config types. v2: Resend for re-review with alignment for v3 in patch 2. --- drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c | 49 + drivers/gpu/drm/amd/amdgpu/df_v3_6.c| 3 ++ 2 files changed, 52 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c index 20c500f61b40..d29226f7b6ea 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c @@ -35,6 +35,9 @@ #define NUM_EVENT_TYPES_VEGA20 1 #define NUM_EVENTS_VEGA20_XGMI 2 #define NUM_EVENTS_VEGA20_MAX NUM_EVENTS_VEGA20_XGMI +#define NUM_EVENT_TYPES_ARCTURUS 1 +#define NUM_EVENTS_ARCTURUS_XGMI 6 +#define NUM_EVENTS_ARCTURUS_MAXNUM_EVENTS_ARCTURUS_XGMI struct amdgpu_pmu_event_attribute { struct device_attribute attr; @@ -174,6 +177,36 @@ static struct amdgpu_pmu_config df_vega20_config = { .num_types = 0 }; +/* Arcturus events */ +static struct amdgpu_pmu_attr arcturus_events[NUM_EVENTS_ARCTURUS_MAX] = { + { .name = "xgmi_link0_data_outbound", + .config = "event=0x7,instance=0x4b,umask=0x2" }, + { .name = "xgmi_link1_data_outbound", + .config = "event=0x7,instance=0x4c,umask=0x2" }, + { .name = "xgmi_link2_data_outbound", + .config = "event=0x7,instance=0x4d,umask=0x2" }, + { .name = "xgmi_link3_data_outbound", + .config = "event=0x7,instance=0x4e,umask=0x2" }, + { .name = "xgmi_link4_data_outbound", + .config = "event=0x7,instance=0x4f,umask=0x2" }, + { .name = "xgmi_link5_data_outbound", + .config = "event=0x7,instance=0x50,umask=0x2" } +}; + +static struct amdgpu_pmu_type arcturus_types[NUM_EVENT_TYPES_ARCTURUS] = { + { .type = AMDGPU_PMU_EVENT_CONFIG_TYPE_XGMI, + .num_of_type = NUM_EVENTS_ARCTURUS_XGMI } +}; + +static struct amdgpu_pmu_config arcturus_config = { + .formats = amdgpu_pmu_formats, + .num_formats = ARRAY_SIZE(amdgpu_pmu_formats), + .events = arcturus_events, + .num_events = ARRAY_SIZE(arcturus_events), + .types = arcturus_types, + .num_types = ARRAY_SIZE(arcturus_types) +}; + /* initialize perf counter */ static int amdgpu_perf_event_init(struct perf_event *event) { @@ -605,6 +638,22 @@ int amdgpu_pmu_init(struct amdgpu_device *adev) } break; + case CHIP_ARCTURUS: + pmu_entry = create_pmu_entry(adev, AMDGPU_PMU_PERF_TYPE_ALL, + "", "amdgpu"); + if (!pmu_entry) + return -ENOMEM; + + ret = init_pmu_entry_by_type_and_add(pmu_entry, + _config); + + if (ret) { + kfree(pmu_entry); + return -ENOMEM; + } + + break; + default: return 0; }; diff --git a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c index 6e57ae95f997..6b4b30a8dce5 100644 --- a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c +++ b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c @@ -513,6 +513,7 @@ static int df_v3_6_pmc_start(struct amdgpu_device *adev, uint64_t config, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: if (is_add) return df_v3_6_pmc_add_cntr(adev, config); @@ -554,6 +555,7 @@ static int df_v3_6_pmc_stop(struct amdgpu_device *adev, uint64_t config, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: ret = df_v3_6_pmc_get_ctrl_settings(adev, config, counter_idx, @@ -590,6 +592,7 @@ static void df_v3_6_pmc_get_count(struct amdgpu_device *adev, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: df_v3_6_pmc_get_read_settings(adev, config, counter_idx, _base_addr, _base_addr); -- 2.17.1 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH 3/3] drm/amdgpu: add xgmi perfmons for arcturus
Add xgmi perfmons for Arcturus. Signed-off-by: Jonathan Kim v3: Align with patch 2 streamlining perf types versus event config types. v2: Resend for re-review with alignment for v3 in patch 2. --- drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c | 43 + drivers/gpu/drm/amd/amdgpu/df_v3_6.c| 3 ++ 2 files changed, 46 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c index 610f96bb0239..5f6de18cfee2 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c @@ -35,6 +35,9 @@ #define NUM_EVENT_TYPES_VEGA20 1 #define NUM_EVENTS_VEGA20_XGMI 2 #define NUM_EVENTS_VEGA20_MAX NUM_EVENTS_VEGA20_XGMI +#define NUM_EVENT_TYPES_ARCTURUS 1 +#define NUM_EVENTS_ARCTURUS_XGMI 6 +#define NUM_EVENTS_ARCTURUS_MAXNUM_EVENTS_ARCTURUS_XGMI struct amdgpu_pmu_event_attribute { struct device_attribute attr; @@ -122,6 +125,21 @@ static const char *df_vega20_events[NUM_EVENTS_DF_VEGA20][2] = { { "cake1_ftiinstat_rspalloc", "event=0xb,instance=0x47,umask=0x8" }, }; +/* Arcturus events */ +static const char *arcturus_events[NUM_EVENTS_ARCTURUS_MAX][2] = { + { "xgmi_link0_data_outbound", "event=0x7,instance=0x4b,umask=0x2" }, + { "xgmi_link1_data_outbound", "event=0x7,instance=0x4c,umask=0x2" }, + { "xgmi_link2_data_outbound", "event=0x7,instance=0x4d,umask=0x2" }, + { "xgmi_link3_data_outbound", "event=0x7,instance=0x4e,umask=0x2" }, + { "xgmi_link4_data_outbound", "event=0x7,instance=0x4f,umask=0x2" }, + { "xgmi_link5_data_outbound", "event=0x7,instance=0x50,umask=0x2" } +}; + +static const int arcturus_event_config_types[NUM_EVENT_TYPES_ARCTURUS][2] = { + { AMDGPU_PMU_EVENT_CONFIG_TYPE_XGMI, NUM_EVENTS_ARCTURUS_XGMI } +}; + + /* initialize perf counter */ static int amdgpu_perf_event_init(struct perf_event *event) { @@ -553,6 +571,31 @@ int amdgpu_pmu_init(struct amdgpu_device *adev) } break; + case CHIP_ARCTURUS: + pmu_entry = kzalloc(sizeof(struct amdgpu_pmu_entry), + GFP_KERNEL); + + if (!pmu_entry) + return -ENOMEM; + + pmu_entry->adev = adev; + pmu_entry->fmt_attr_group.name = "format"; + pmu_entry->fmt_attr_group.attrs = NULL; + pmu_entry->evt_attr_group.name = "events"; + pmu_entry->evt_attr_group.attrs = NULL; + ret = init_pmu_by_type(pmu_entry, "", "amdgpu", + AMDGPU_PMU_PERF_TYPE_ALL, + amdgpu_pmu_formats, + NUM_FORMATS_AMDGPU_PMU, + arcturus_events, + NUM_EVENTS_ARCTURUS_MAX, + arcturus_event_config_types, + NUM_EVENT_TYPES_ARCTURUS); + + if (ret) + kfree(pmu_entry); + break; + default: return 0; }; diff --git a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c index 6e57ae95f997..6b4b30a8dce5 100644 --- a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c +++ b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c @@ -513,6 +513,7 @@ static int df_v3_6_pmc_start(struct amdgpu_device *adev, uint64_t config, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: if (is_add) return df_v3_6_pmc_add_cntr(adev, config); @@ -554,6 +555,7 @@ static int df_v3_6_pmc_stop(struct amdgpu_device *adev, uint64_t config, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: ret = df_v3_6_pmc_get_ctrl_settings(adev, config, counter_idx, @@ -590,6 +592,7 @@ static void df_v3_6_pmc_get_count(struct amdgpu_device *adev, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: df_v3_6_pmc_get_read_settings(adev, config, counter_idx, _base_addr, _base_addr); -- 2.17.1 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
[PATCH 3/3] drm/amdgpu: add xgmi perfmons for arcturus
Add xgmi perfmons for Arcturus. Signed-off-by: Jonathan Kim v2: Resend for re-review with alignment for v3 in patch 2. --- drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c | 41 - drivers/gpu/drm/amd/amdgpu/df_v3_6.c| 3 ++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c index 74fe8fbdc0d1..c58af4495c5a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c @@ -34,6 +34,8 @@ #define NUM_EVENTS_DF_LEGACY 8 #define NUM_EVENTS_VEGA20_XGMI 2 #define NUM_EVENTS_VEGA20_MAX NUM_EVENTS_VEGA20_XGMI +#define NUM_EVENTS_ARCTURUS_XGMI 6 +#define NUM_EVENTS_ARCTURUS_MAXNUM_EVENTS_ARCTURUS_XGMI struct amdgpu_pmu_event_attribute { struct device_attribute attr; @@ -98,6 +100,16 @@ static const char *vega20_events[NUM_EVENTS_VEGA20_MAX][2] = { { "xgmi_link1_data_outbound", "event=0x7,instance=0x47,umask=0x2" } }; +/* Arcturus events */ +static const char *arcturus_events[NUM_EVENTS_ARCTURUS_MAX][2] = { + { "xgmi_link0_data_outbound", "event=0x7,instance=0x4b,umask=0x2" }, + { "xgmi_link1_data_outbound", "event=0x7,instance=0x4c,umask=0x2" }, + { "xgmi_link2_data_outbound", "event=0x7,instance=0x4d,umask=0x2" }, + { "xgmi_link3_data_outbound", "event=0x7,instance=0x4e,umask=0x2" }, + { "xgmi_link4_data_outbound", "event=0x7,instance=0x4f,umask=0x2" }, + { "xgmi_link5_data_outbound", "event=0x7,instance=0x50,umask=0x2" } +}; + /* All df_vega20_* items are DEPRECATED. Use vega20_ items above instead. */ static const char *df_vega20_formats[NUM_FORMATS_DF_LEGACY][2] = { { "event", "config:0-7" }, @@ -413,6 +425,32 @@ static int init_pmu_by_type(struct amdgpu_pmu_entry *pmu_entry, /* other events can be added here */ + break; + case CHIP_ARCTURUS: + ret = amdgpu_pmu_alloc_pmu_attrs(_entry->fmt_attr_group, + _entry->fmt_attr, + NUM_FORMATS_AMDGPU_PMU, + _entry->evt_attr_group, + _entry->evt_attr, + NUM_EVENTS_ARCTURUS_MAX); + + if (ret) + goto err_out; + + amdgpu_pmu_create_attributes(_entry->fmt_attr_group, + pmu_entry->fmt_attr, + amdgpu_pmu_formats, + 0, NUM_FORMATS_AMDGPU_PMU, 0); + + amdgpu_pmu_create_attributes(_entry->evt_attr_group, + pmu_entry->evt_attr, + arcturus_events, + 0, NUM_EVENTS_ARCTURUS_XGMI, + PERF_TYPE_AMDGPU_XGMI); + num_events += NUM_EVENTS_ARCTURUS_XGMI; + + /* other events can be added here */ + break; default: ret = -ENODEV; @@ -473,7 +511,8 @@ void amdgpu_pmu_fini(struct amdgpu_device *adev) static bool amdgpu_pmu_is_supported(struct amdgpu_device *adev) { - return adev->asic_type == CHIP_VEGA20; + return adev->asic_type == CHIP_VEGA20 || + adev->asic_type == CHIP_ARCTURUS; } /* init amdgpu_pmu */ diff --git a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c index 6e57ae95f997..6b4b30a8dce5 100644 --- a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c +++ b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c @@ -513,6 +513,7 @@ static int df_v3_6_pmc_start(struct amdgpu_device *adev, uint64_t config, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: if (is_add) return df_v3_6_pmc_add_cntr(adev, config); @@ -554,6 +555,7 @@ static int df_v3_6_pmc_stop(struct amdgpu_device *adev, uint64_t config, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: ret = df_v3_6_pmc_get_ctrl_settings(adev, config, counter_idx, @@ -590,6 +592,7 @@ static void df_v3_6_pmc_get_count(struct amdgpu_device *adev, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: df_v3_6_pmc_get_read_settings(adev, config, counter_idx, _base_addr, _base_addr); -- 2.17.1 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
RE: [PATCH 3/3] drm/amdgpu: add xgmi perfmons for arcturus
Hi Harish. Thanks for the review. As discussed offline, patch 2 has a problem where attr groups array is global but allocation is done per-device causing problems with mem free and pmu unregister. I'm sending out a second series that should fix this and simplify the solution as well as hopefully address your concerns. Sorry again for the churn. Jon > -Original Message- > From: Kasiviswanathan, Harish > Sent: Tuesday, September 15, 2020 10:10 PM > To: Kim, Jonathan ; amd- > g...@lists.freedesktop.org > Subject: RE: [PATCH 3/3] drm/amdgpu: add xgmi perfmons for arcturus > > [AMD Official Use Only - Internal Distribution Only] > > Reviewed-by: Harish Kasiviswanathan > > -Original Message- > From: Kim, Jonathan > Sent: Tuesday, September 15, 2020 6:00 PM > To: amd-gfx@lists.freedesktop.org > Cc: Kasiviswanathan, Harish ; Kim, > Jonathan ; Kim, Jonathan > > Subject: [PATCH 3/3] drm/amdgpu: add xgmi perfmons for arcturus > > Add xgmi perfmons for Arcturus. > > Signed-off-by: Jonathan Kim > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c | 55 > + > drivers/gpu/drm/amd/amdgpu/df_v3_6.c| 3 ++ > 2 files changed, 58 insertions(+) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c > index f3d2ac0e88a7..ec521c72e631 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c > @@ -34,6 +34,8 @@ > #define NUM_EVENTS_DF_LEGACY 8 > #define NUM_EVENTS_VEGA20_XGMI 2 > #define NUM_EVENTS_VEGA20_MAX2 > +#define NUM_EVENTS_ARCTURUS_XGMI 6 > +#define NUM_EVENTS_ARCTURUS_MAX 6 > > /* record to keep track of pmu entry per pmu type per device */ struct > amdgpu_pmu_entry { @@ -110,6 +112,27 @@ const struct attribute_group > *vega20_attr_groups[] = { > NULL > }; > > +/* Arcturus events */ > +static const char *arcturus_events[NUM_EVENTS_ARCTURUS_MAX][2] = { > + { "xgmi_link0_data_outbound", > "event=0x7,instance=0x4b,umask=0x2" }, > + { "xgmi_link1_data_outbound", > "event=0x7,instance=0x4c,umask=0x2" }, > + { "xgmi_link2_data_outbound", > "event=0x7,instance=0x4d,umask=0x2" }, > + { "xgmi_link3_data_outbound", > "event=0x7,instance=0x4e,umask=0x2" }, > + { "xgmi_link4_data_outbound", > "event=0x7,instance=0x4f,umask=0x2" }, > + { "xgmi_link5_data_outbound", > "event=0x7,instance=0x50,umask=0x2" } }; > + > +static struct attribute_group arcturus_event_attr_group = { > + .name = "events", > + .attrs = NULL > +}; > + > +const struct attribute_group *arcturus_attr_groups[] = { > + _pmu_format_attr_group, > + _event_attr_group, > + NULL > +}; > + > /* All df_vega20_* items are DEPRECATED. Use vega20_ items above > instead. */ static const char > *df_vega20_formats[NUM_FORMATS_DF_LEGACY][2] = { > { "event", "config:0-7" }, > @@ -400,6 +423,16 @@ static int init_pmu_by_type(struct amdgpu_device > *adev, > > pmu_entry->pmu.attr_groups = vega20_attr_groups; > break; > + case CHIP_ARCTURUS: > + amdgpu_pmu_create_attributes(evt_attr_group, evt_attr, > + arcturus_events, 0, > NUM_EVENTS_ARCTURUS_XGMI, > + PERF_TYPE_AMDGPU_XGMI); > + num_events += NUM_EVENTS_ARCTURUS_XGMI; > + > + /* other events can be added here */ > + > + pmu_entry->pmu.attr_groups = arcturus_attr_groups; > + break; > default: > return -ENODEV; > }; > @@ -530,6 +563,28 @@ int amdgpu_pmu_init(struct amdgpu_device *adev) > goto err_pmu; > } > > + break; > + case CHIP_ARCTURUS: > + ret = > amdgpu_pmu_alloc_pmu_attrs(_pmu_format_attr_group, > + _attr, > + > NUM_FORMATS_AMDGPU_PMU, > + _event_attr_group, > + _attr, > + > NUM_EVENTS_ARCTURUS_MAX); > + > + if (ret) > + goto err_alloc; > + > + ret = init_pmu_by_type(adev, > + _pmu_format_attr_group, > fmt_attr, > + _event_attr_group, evt_attr, > + "Event", "amdgpu", > PERF_TYPE_AMDGPU_MAX); > + > + if
RE: [PATCH 3/3] drm/amdgpu: add xgmi perfmons for arcturus
[AMD Official Use Only - Internal Distribution Only] Reviewed-by: Harish Kasiviswanathan -Original Message- From: Kim, Jonathan Sent: Tuesday, September 15, 2020 6:00 PM To: amd-gfx@lists.freedesktop.org Cc: Kasiviswanathan, Harish ; Kim, Jonathan ; Kim, Jonathan Subject: [PATCH 3/3] drm/amdgpu: add xgmi perfmons for arcturus Add xgmi perfmons for Arcturus. Signed-off-by: Jonathan Kim --- drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c | 55 + drivers/gpu/drm/amd/amdgpu/df_v3_6.c| 3 ++ 2 files changed, 58 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c index f3d2ac0e88a7..ec521c72e631 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c @@ -34,6 +34,8 @@ #define NUM_EVENTS_DF_LEGACY 8 #define NUM_EVENTS_VEGA20_XGMI 2 #define NUM_EVENTS_VEGA20_MAX 2 +#define NUM_EVENTS_ARCTURUS_XGMI 6 +#define NUM_EVENTS_ARCTURUS_MAX6 /* record to keep track of pmu entry per pmu type per device */ struct amdgpu_pmu_entry { @@ -110,6 +112,27 @@ const struct attribute_group *vega20_attr_groups[] = { NULL }; +/* Arcturus events */ +static const char *arcturus_events[NUM_EVENTS_ARCTURUS_MAX][2] = { + { "xgmi_link0_data_outbound", "event=0x7,instance=0x4b,umask=0x2" }, + { "xgmi_link1_data_outbound", "event=0x7,instance=0x4c,umask=0x2" }, + { "xgmi_link2_data_outbound", "event=0x7,instance=0x4d,umask=0x2" }, + { "xgmi_link3_data_outbound", "event=0x7,instance=0x4e,umask=0x2" }, + { "xgmi_link4_data_outbound", "event=0x7,instance=0x4f,umask=0x2" }, + { "xgmi_link5_data_outbound", "event=0x7,instance=0x50,umask=0x2" } }; + +static struct attribute_group arcturus_event_attr_group = { + .name = "events", + .attrs = NULL +}; + +const struct attribute_group *arcturus_attr_groups[] = { + _pmu_format_attr_group, + _event_attr_group, + NULL +}; + /* All df_vega20_* items are DEPRECATED. Use vega20_ items above instead. */ static const char *df_vega20_formats[NUM_FORMATS_DF_LEGACY][2] = { { "event", "config:0-7" }, @@ -400,6 +423,16 @@ static int init_pmu_by_type(struct amdgpu_device *adev, pmu_entry->pmu.attr_groups = vega20_attr_groups; break; + case CHIP_ARCTURUS: + amdgpu_pmu_create_attributes(evt_attr_group, evt_attr, + arcturus_events, 0, NUM_EVENTS_ARCTURUS_XGMI, + PERF_TYPE_AMDGPU_XGMI); + num_events += NUM_EVENTS_ARCTURUS_XGMI; + + /* other events can be added here */ + + pmu_entry->pmu.attr_groups = arcturus_attr_groups; + break; default: return -ENODEV; }; @@ -530,6 +563,28 @@ int amdgpu_pmu_init(struct amdgpu_device *adev) goto err_pmu; } + break; + case CHIP_ARCTURUS: + ret = amdgpu_pmu_alloc_pmu_attrs(_pmu_format_attr_group, + _attr, + NUM_FORMATS_AMDGPU_PMU, + _event_attr_group, + _attr, + NUM_EVENTS_ARCTURUS_MAX); + + if (ret) + goto err_alloc; + + ret = init_pmu_by_type(adev, + _pmu_format_attr_group, fmt_attr, + _event_attr_group, evt_attr, + "Event", "amdgpu", PERF_TYPE_AMDGPU_MAX); + + if (ret) { + kfree(arcturus_event_attr_group.attrs); + goto err_pmu; + } + break; default: return 0; diff --git a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c index 6e57ae95f997..6b4b30a8dce5 100644 --- a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c +++ b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c @@ -513,6 +513,7 @@ static int df_v3_6_pmc_start(struct amdgpu_device *adev, uint64_t config, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: if (is_add) return df_v3_6_pmc_add_cntr(adev, config); @@ -554,6 +555,7 @@ static int df_v3_6_pmc_stop(struct amdgpu_device *adev, uint64_t config, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: ret = df_v3_6_pmc_get_ctrl_settings(adev, config, cou
[PATCH 3/3] drm/amdgpu: add xgmi perfmons for arcturus
Add xgmi perfmons for Arcturus. Signed-off-by: Jonathan Kim --- drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c | 55 + drivers/gpu/drm/amd/amdgpu/df_v3_6.c| 3 ++ 2 files changed, 58 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c index f3d2ac0e88a7..ec521c72e631 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.c @@ -34,6 +34,8 @@ #define NUM_EVENTS_DF_LEGACY 8 #define NUM_EVENTS_VEGA20_XGMI 2 #define NUM_EVENTS_VEGA20_MAX 2 +#define NUM_EVENTS_ARCTURUS_XGMI 6 +#define NUM_EVENTS_ARCTURUS_MAX6 /* record to keep track of pmu entry per pmu type per device */ struct amdgpu_pmu_entry { @@ -110,6 +112,27 @@ const struct attribute_group *vega20_attr_groups[] = { NULL }; +/* Arcturus events */ +static const char *arcturus_events[NUM_EVENTS_ARCTURUS_MAX][2] = { + { "xgmi_link0_data_outbound", "event=0x7,instance=0x4b,umask=0x2" }, + { "xgmi_link1_data_outbound", "event=0x7,instance=0x4c,umask=0x2" }, + { "xgmi_link2_data_outbound", "event=0x7,instance=0x4d,umask=0x2" }, + { "xgmi_link3_data_outbound", "event=0x7,instance=0x4e,umask=0x2" }, + { "xgmi_link4_data_outbound", "event=0x7,instance=0x4f,umask=0x2" }, + { "xgmi_link5_data_outbound", "event=0x7,instance=0x50,umask=0x2" } +}; + +static struct attribute_group arcturus_event_attr_group = { + .name = "events", + .attrs = NULL +}; + +const struct attribute_group *arcturus_attr_groups[] = { + _pmu_format_attr_group, + _event_attr_group, + NULL +}; + /* All df_vega20_* items are DEPRECATED. Use vega20_ items above instead. */ static const char *df_vega20_formats[NUM_FORMATS_DF_LEGACY][2] = { { "event", "config:0-7" }, @@ -400,6 +423,16 @@ static int init_pmu_by_type(struct amdgpu_device *adev, pmu_entry->pmu.attr_groups = vega20_attr_groups; break; + case CHIP_ARCTURUS: + amdgpu_pmu_create_attributes(evt_attr_group, evt_attr, + arcturus_events, 0, NUM_EVENTS_ARCTURUS_XGMI, + PERF_TYPE_AMDGPU_XGMI); + num_events += NUM_EVENTS_ARCTURUS_XGMI; + + /* other events can be added here */ + + pmu_entry->pmu.attr_groups = arcturus_attr_groups; + break; default: return -ENODEV; }; @@ -530,6 +563,28 @@ int amdgpu_pmu_init(struct amdgpu_device *adev) goto err_pmu; } + break; + case CHIP_ARCTURUS: + ret = amdgpu_pmu_alloc_pmu_attrs(_pmu_format_attr_group, + _attr, + NUM_FORMATS_AMDGPU_PMU, + _event_attr_group, + _attr, + NUM_EVENTS_ARCTURUS_MAX); + + if (ret) + goto err_alloc; + + ret = init_pmu_by_type(adev, + _pmu_format_attr_group, fmt_attr, + _event_attr_group, evt_attr, + "Event", "amdgpu", PERF_TYPE_AMDGPU_MAX); + + if (ret) { + kfree(arcturus_event_attr_group.attrs); + goto err_pmu; + } + break; default: return 0; diff --git a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c index 6e57ae95f997..6b4b30a8dce5 100644 --- a/drivers/gpu/drm/amd/amdgpu/df_v3_6.c +++ b/drivers/gpu/drm/amd/amdgpu/df_v3_6.c @@ -513,6 +513,7 @@ static int df_v3_6_pmc_start(struct amdgpu_device *adev, uint64_t config, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: if (is_add) return df_v3_6_pmc_add_cntr(adev, config); @@ -554,6 +555,7 @@ static int df_v3_6_pmc_stop(struct amdgpu_device *adev, uint64_t config, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: ret = df_v3_6_pmc_get_ctrl_settings(adev, config, counter_idx, @@ -590,6 +592,7 @@ static void df_v3_6_pmc_get_count(struct amdgpu_device *adev, switch (adev->asic_type) { case CHIP_VEGA20: + case CHIP_ARCTURUS: df_v3_6_pmc_get_read_settings(adev, config, counter_idx, _base_addr, _base_addr); -- 2.17.1 ___ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx