arm_mpam: Probe for long/lwd mbwu counters
mpam v0.1 and versions above v1.0 support optional long counter for memory bandwidth monitoring. The MPAMF_MBWUMON_IDR register has fields indicating support for long counters. Probe these feature bits. The mpam_feat_msmon_mbwu feature is used to indicate that bandwidth monitors are supported, instead of muddling this with which size of bandwidth monitors, add an explicit 31 bit counter feature. Signed-off-by: Rohit Mathew <rohit.mathew@arm.com> [ morse: Added 31bit counter feature to simplify later logic ] Signed-off-by: James Morse <james.morse@arm.com> Reviewed-by: Ben Horgan <ben.horgan@arm.com> Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com> Reviewed-by: Gavin Shan <gshan@redhat.com> Reviewed-by: Shaopeng Tan <tan.shaopeng@jp.fujitsu.com> Reviewed-by: Fenghua Yu <fenghuay@nvidia.com> Tested-by: Fenghua Yu <fenghuay@nvidia.com> Tested-by: Shaopeng Tan <tan.shaopeng@jp.fujitsu.com> Tested-by: Peter Newman <peternewman@google.com> Tested-by: Carl Worth <carl@os.amperecomputing.com> Tested-by: Gavin Shan <gshan@redhat.com> Tested-by: Zeng Heng <zengheng4@huawei.com> Tested-by: Hanjun Guo <guohanjun@huawei.com> Signed-off-by: Ben Horgan <ben.horgan@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
parent
b353637932
commit
fdc29a141d
|
|
@ -783,25 +783,36 @@ static void mpam_ris_hw_probe(struct mpam_msc_ris *ris)
|
|||
dev_err_once(dev, "Counters are not usable because not-ready timeout was not provided by firmware.");
|
||||
}
|
||||
if (FIELD_GET(MPAMF_MSMON_IDR_MSMON_MBWU, msmon_features)) {
|
||||
bool hw_managed;
|
||||
bool has_long, hw_managed;
|
||||
u32 mbwumon_idr = mpam_read_partsel_reg(msc, MBWUMON_IDR);
|
||||
|
||||
props->num_mbwu_mon = FIELD_GET(MPAMF_MBWUMON_IDR_NUM_MON, mbwumon_idr);
|
||||
if (props->num_mbwu_mon)
|
||||
if (props->num_mbwu_mon) {
|
||||
mpam_set_feature(mpam_feat_msmon_mbwu, props);
|
||||
|
||||
if (FIELD_GET(MPAMF_MBWUMON_IDR_HAS_RWBW, mbwumon_idr))
|
||||
mpam_set_feature(mpam_feat_msmon_mbwu_rwbw, props);
|
||||
if (FIELD_GET(MPAMF_MBWUMON_IDR_HAS_RWBW, mbwumon_idr))
|
||||
mpam_set_feature(mpam_feat_msmon_mbwu_rwbw, props);
|
||||
|
||||
/* Is NRDY hardware managed? */
|
||||
hw_managed = mpam_ris_hw_probe_hw_nrdy(ris, MBWU);
|
||||
if (hw_managed)
|
||||
mpam_set_feature(mpam_feat_msmon_mbwu_hw_nrdy, props);
|
||||
has_long = FIELD_GET(MPAMF_MBWUMON_IDR_HAS_LONG, mbwumon_idr);
|
||||
if (has_long) {
|
||||
if (FIELD_GET(MPAMF_MBWUMON_IDR_LWD, mbwumon_idr))
|
||||
mpam_set_feature(mpam_feat_msmon_mbwu_63counter, props);
|
||||
else
|
||||
mpam_set_feature(mpam_feat_msmon_mbwu_44counter, props);
|
||||
} else {
|
||||
mpam_set_feature(mpam_feat_msmon_mbwu_31counter, props);
|
||||
}
|
||||
|
||||
/*
|
||||
* Don't warn about any missing firmware property for
|
||||
* MBWU NRDY - it doesn't make any sense!
|
||||
*/
|
||||
/* Is NRDY hardware managed? */
|
||||
hw_managed = mpam_ris_hw_probe_hw_nrdy(ris, MBWU);
|
||||
if (hw_managed)
|
||||
mpam_set_feature(mpam_feat_msmon_mbwu_hw_nrdy, props);
|
||||
|
||||
/*
|
||||
* Don't warn about any missing firmware property for
|
||||
* MBWU NRDY - it doesn't make any sense!
|
||||
*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -164,6 +164,9 @@ enum mpam_device_features {
|
|||
mpam_feat_msmon_csu_xcl,
|
||||
mpam_feat_msmon_csu_hw_nrdy,
|
||||
mpam_feat_msmon_mbwu,
|
||||
mpam_feat_msmon_mbwu_31counter,
|
||||
mpam_feat_msmon_mbwu_44counter,
|
||||
mpam_feat_msmon_mbwu_63counter,
|
||||
mpam_feat_msmon_mbwu_capture,
|
||||
mpam_feat_msmon_mbwu_rwbw,
|
||||
mpam_feat_msmon_mbwu_hw_nrdy,
|
||||
|
|
|
|||
Loading…
Reference in New Issue