Lines Matching refs:ris
406 INIT_LIST_HEAD_RCU(&vmsc->ris); in mpam_vmsc_alloc()
508 struct mpam_msc_ris *ris; in mpam_ris_create_locked() local
521 ris = devm_kzalloc(&msc->pdev->dev, sizeof(*ris), GFP_KERNEL); in mpam_ris_create_locked()
522 if (!ris) in mpam_ris_create_locked()
524 init_garbage(&ris->garbage); in mpam_ris_create_locked()
525 ris->garbage.pdev = pdev; in mpam_ris_create_locked()
545 err = mpam_ris_get_affinity(msc, &ris->affinity, type, class, comp); in mpam_ris_create_locked()
547 if (list_empty(&vmsc->ris)) in mpam_ris_create_locked()
552 ris->ris_idx = ris_idx; in mpam_ris_create_locked()
553 INIT_LIST_HEAD_RCU(&ris->msc_list); in mpam_ris_create_locked()
554 INIT_LIST_HEAD_RCU(&ris->vmsc_list); in mpam_ris_create_locked()
555 ris->vmsc = vmsc; in mpam_ris_create_locked()
557 cpumask_or(&comp->affinity, &comp->affinity, &ris->affinity); in mpam_ris_create_locked()
558 cpumask_or(&class->affinity, &class->affinity, &ris->affinity); in mpam_ris_create_locked()
559 list_add_rcu(&ris->vmsc_list, &vmsc->ris); in mpam_ris_create_locked()
560 list_add_rcu(&ris->msc_list, &msc->ris); in mpam_ris_create_locked()
565 static void mpam_ris_destroy(struct mpam_msc_ris *ris) in mpam_ris_destroy() argument
567 struct mpam_vmsc *vmsc = ris->vmsc; in mpam_ris_destroy()
578 cpumask_andnot(&class->affinity, &class->affinity, &ris->affinity); in mpam_ris_destroy()
579 cpumask_andnot(&comp->affinity, &comp->affinity, &ris->affinity); in mpam_ris_destroy()
580 clear_bit(ris->ris_idx, &msc->ris_idxs); in mpam_ris_destroy()
581 list_del_rcu(&ris->msc_list); in mpam_ris_destroy()
582 list_del_rcu(&ris->vmsc_list); in mpam_ris_destroy()
583 add_to_garbage(ris); in mpam_ris_destroy()
585 if (list_empty(&vmsc->ris)) in mpam_ris_destroy()
608 struct mpam_msc_ris *ris; in mpam_get_or_create_ris() local
619 list_for_each_entry(ris, &msc->ris, msc_list) { in mpam_get_or_create_ris()
620 if (ris->ris_idx == ris_idx) in mpam_get_or_create_ris()
621 return ris; in mpam_get_or_create_ris()
635 static bool _mpam_ris_hw_probe_hw_nrdy(struct mpam_msc_ris *ris, u32 mon_reg) in _mpam_ris_hw_probe_hw_nrdy() argument
640 struct mpam_msc *msc = ris->vmsc->msc; in _mpam_ris_hw_probe_hw_nrdy()
646 FIELD_PREP(MSMON_CFG_MON_SEL_RIS, ris->ris_idx); in _mpam_ris_hw_probe_hw_nrdy()
664 static void mpam_ris_hw_probe(struct mpam_msc_ris *ris) in mpam_ris_hw_probe() argument
667 struct mpam_msc *msc = ris->vmsc->msc; in mpam_ris_hw_probe()
669 struct mpam_props *props = &ris->props; in mpam_ris_hw_probe()
670 struct mpam_class *class = ris->vmsc->comp->class; in mpam_ris_hw_probe()
676 if (FIELD_GET(MPAMF_IDR_HAS_CCAP_PART, ris->idr)) { in mpam_ris_hw_probe()
699 if (FIELD_GET(MPAMF_IDR_HAS_CPOR_PART, ris->idr)) { in mpam_ris_hw_probe()
708 if (FIELD_GET(MPAMF_IDR_HAS_MBW_PART, ris->idr)) { in mpam_ris_hw_probe()
729 if (FIELD_GET(MPAMF_IDR_HAS_PRI_PART, ris->idr)) { in mpam_ris_hw_probe()
748 if (FIELD_GET(MPAMF_IDR_HAS_MSMON, ris->idr)) { in mpam_ris_hw_probe()
773 hw_managed = mpam_ris_hw_probe_hw_nrdy(ris, CSU); in mpam_ris_hw_probe()
807 hw_managed = mpam_ris_hw_probe_hw_nrdy(ris, MBWU); in mpam_ris_hw_probe()
825 if (FIELD_GET(MPAMF_IDR_HAS_PARTID_NRW, ris->idr) && in mpam_ris_hw_probe()
840 struct mpam_msc_ris *ris; in mpam_msc_hw_probe() local
875 ris = mpam_get_or_create_ris(msc, ris_idx); in mpam_msc_hw_probe()
877 if (IS_ERR(ris)) in mpam_msc_hw_probe()
878 return PTR_ERR(ris); in mpam_msc_hw_probe()
879 ris->idr = idr; in mpam_msc_hw_probe()
883 mpam_ris_hw_probe(ris); in mpam_msc_hw_probe()
901 struct mpam_msc_ris *ris; member
908 static bool mpam_ris_has_mbwu_long_counter(struct mpam_msc_ris *ris) in mpam_ris_has_mbwu_long_counter() argument
910 return (mpam_has_feature(mpam_feat_msmon_mbwu_63counter, &ris->props) || in mpam_ris_has_mbwu_long_counter()
911 mpam_has_feature(mpam_feat_msmon_mbwu_44counter, &ris->props)); in mpam_ris_has_mbwu_long_counter()
974 if (mpam_has_feature(mpam_feat_msmon_csu_xcl, &m->ris->props)) in gen_msmon_ctl_flt_vals()
983 if (mpam_has_feature(mpam_feat_msmon_mbwu_rwbw, &m->ris->props)) in gen_msmon_ctl_flt_vals()
995 struct mpam_msc *msc = m->ris->vmsc->msc; in read_msmon_ctl_flt_vals()
1025 struct mpam_msc *msc = m->ris->vmsc->msc; in write_msmon_ctl_flt_vals()
1048 mpam_msc_zero_mbwu_l(m->ris->vmsc->msc); in write_msmon_ctl_flt_vals()
1079 struct mpam_msc_ris *ris = m->ris; in __ris_msmon_read() local
1081 struct mpam_props *rprops = &ris->props; in __ris_msmon_read()
1082 struct mpam_msc *msc = m->ris->vmsc->msc; in __ris_msmon_read()
1090 FIELD_PREP(MSMON_CFG_MON_SEL_RIS, ris->ris_idx); in __ris_msmon_read()
1097 mbwu_state = &ris->mbwu_state[ctx->mon]; in __ris_msmon_read()
1163 mbwu_state = &ris->mbwu_state[ctx->mon]; in __ris_msmon_read()
1197 struct mpam_msc_ris *ris; in _msmon_read() local
1199 list_for_each_entry_srcu(ris, &vmsc->ris, vmsc_list, in _msmon_read()
1201 arg->ris = ris; in _msmon_read()
1286 struct mpam_msc_ris *ris; in mpam_msmon_reset_mbwu() local
1298 list_for_each_entry_srcu(ris, &vmsc->ris, vmsc_list, in mpam_msmon_reset_mbwu()
1300 if (!mpam_has_feature(mpam_feat_msmon_mbwu, &ris->props)) in mpam_msmon_reset_mbwu()
1306 ris->mbwu_state[ctx->mon].correction = 0; in mpam_msmon_reset_mbwu()
1307 ris->mbwu_state[ctx->mon].reset_on_next_read = true; in mpam_msmon_reset_mbwu()
1342 static void mpam_reprogram_ris_partid(struct mpam_msc_ris *ris, u16 partid, in mpam_reprogram_ris_partid() argument
1347 struct mpam_msc *msc = ris->vmsc->msc; in mpam_reprogram_ris_partid()
1348 struct mpam_props *rprops = &ris->props; in mpam_reprogram_ris_partid()
1353 __mpam_part_sel(ris->ris_idx, partid, msc); in mpam_reprogram_ris_partid()
1364 __mpam_intpart_sel(ris->ris_idx, partid, msc); in mpam_reprogram_ris_partid()
1432 struct mpam_msc_ris *ris = _ris; in mpam_restore_mbwu_state() local
1433 struct mpam_class *class = ris->vmsc->comp->class; in mpam_restore_mbwu_state()
1435 for (i = 0; i < ris->props.num_mbwu_mon; i++) { in mpam_restore_mbwu_state()
1436 if (ris->mbwu_state[i].enabled) { in mpam_restore_mbwu_state()
1437 mwbu_arg.ris = ris; in mpam_restore_mbwu_state()
1438 mwbu_arg.ctx = &ris->mbwu_state[i].cfg; in mpam_restore_mbwu_state()
1455 struct mpam_msc_ris *ris = arg; in mpam_save_mbwu_state() local
1457 struct mpam_msc *msc = ris->vmsc->msc; in mpam_save_mbwu_state()
1459 for (i = 0; i < ris->props.num_mbwu_mon; i++) { in mpam_save_mbwu_state()
1460 mbwu_state = &ris->mbwu_state[i]; in mpam_save_mbwu_state()
1467 FIELD_PREP(MSMON_CFG_MON_SEL_RIS, ris->ris_idx); in mpam_save_mbwu_state()
1474 if (mpam_ris_has_mbwu_long_counter(ris)) { in mpam_save_mbwu_state()
1512 struct mpam_msc_ris *ris = arg; in mpam_reset_ris() local
1514 if (ris->in_reset_state) in mpam_reset_ris()
1523 mpam_reprogram_ris_partid(ris, partid, &reset_cfg); in mpam_reset_ris()
1553 struct mpam_msc_ris *ris; member
1562 mpam_reprogram_ris_partid(c->ris, c->partid, &c->comp->cfg[c->partid]); in __write_config()
1572 struct mpam_msc_ris *ris; in mpam_reprogram_msc() local
1582 list_for_each_entry_srcu(ris, &msc->ris, msc_list, in mpam_reprogram_msc()
1584 if (!mpam_is_enabled() && !ris->in_reset_state) { in mpam_reprogram_msc()
1585 mpam_touch_msc(msc, &mpam_reset_ris, ris); in mpam_reprogram_msc()
1586 ris->in_reset_state = true; in mpam_reprogram_msc()
1590 arg.comp = ris->vmsc->comp; in mpam_reprogram_msc()
1591 arg.ris = ris; in mpam_reprogram_msc()
1594 cfg = &ris->vmsc->comp->cfg[partid]; in mpam_reprogram_msc()
1601 ris->in_reset_state = reset; in mpam_reprogram_msc()
1603 if (mpam_has_feature(mpam_feat_msmon_mbwu, &ris->props)) in mpam_reprogram_msc()
1604 mpam_touch_msc(msc, &mpam_restore_mbwu_state, ris); in mpam_reprogram_msc()
1686 struct mpam_msc_ris *ris; in mpam_cpu_offline() local
1689 list_for_each_entry_srcu(ris, &msc->ris, msc_list, in mpam_cpu_offline()
1691 mpam_touch_msc(msc, &mpam_reset_ris, ris); in mpam_cpu_offline()
1697 ris->in_reset_state = false; in mpam_cpu_offline()
1700 mpam_touch_msc(msc, &mpam_save_mbwu_state, ris); in mpam_cpu_offline()
1792 struct mpam_msc_ris *ris, *tmp; in mpam_msc_destroy() local
1796 list_for_each_entry_safe(ris, tmp, &msc->ris, msc_list) in mpam_msc_destroy()
1797 mpam_ris_destroy(ris); in mpam_msc_destroy()
1852 INIT_LIST_HEAD_RCU(&msc->ris); in do_mpam_msc_drv_probe()
2109 __vmsc_props_mismatch(struct mpam_vmsc *vmsc, struct mpam_msc_ris *ris) in __vmsc_props_mismatch() argument
2111 struct mpam_props *rprops = &ris->props; in __vmsc_props_mismatch()
2149 struct mpam_msc_ris *ris; in mpam_enable_merge_vmsc_features() local
2153 list_for_each_entry(ris, &vmsc->ris, vmsc_list) { in mpam_enable_merge_vmsc_features()
2154 __vmsc_props_mismatch(vmsc, ris); in mpam_enable_merge_vmsc_features()
2240 u8 errcode, pmg, ris; in __mpam_irq_handler() local
2258 ris = FIELD_GET(MPAMF_ESR_RIS, reg); in __mpam_irq_handler()
2262 ris); in __mpam_irq_handler()
2376 struct mpam_msc_ris *ris; in __destroy_component_cfg() local
2385 list_for_each_entry(ris, &vmsc->ris, vmsc_list) in __destroy_component_cfg()
2386 add_to_garbage(ris->mbwu_state); in __destroy_component_cfg()
2436 struct mpam_msc_ris *ris; in __allocate_component_cfg() local
2443 list_for_each_entry(ris, &vmsc->ris, vmsc_list) { in __allocate_component_cfg()
2444 if (!ris->props.num_mbwu_mon) in __allocate_component_cfg()
2447 mbwu_state = kzalloc_objs(*ris->mbwu_state, in __allocate_component_cfg()
2448 ris->props.num_mbwu_mon); in __allocate_component_cfg()
2457 ris->mbwu_state = mbwu_state; in __allocate_component_cfg()
2549 struct mpam_msc_ris *ris; in mpam_reset_component_locked() local
2551 list_for_each_entry_srcu(ris, &vmsc->ris, vmsc_list, in mpam_reset_component_locked()
2553 if (!ris->in_reset_state) in mpam_reset_component_locked()
2554 mpam_touch_msc(msc, mpam_reset_ris, ris); in mpam_reset_component_locked()
2555 ris->in_reset_state = true; in mpam_reset_component_locked()
2670 struct mpam_msc_ris *ris; in mpam_apply_config() local
2691 list_for_each_entry_srcu(ris, &vmsc->ris, vmsc_list, in mpam_apply_config()
2693 arg.ris = ris; in mpam_apply_config()