Lines Matching defs:baser
2275 static u64 its_read_baser(struct its_node *its, struct its_baser *baser)
2277 u32 idx = baser - its->tables;
2282 static void its_write_baser(struct its_node *its, struct its_baser *baser, u64 val)
2284 u32 idx = baser - its->tables;
2287 baser->val = its_read_baser(its, baser);
2290 static int its_setup_baser(struct its_node *its, struct its_baser *baser, u64 cache, u64 shr, u32 order, bool indirect)
2292 u64 val = its_read_baser(its, baser);
2301 psz = baser->psz;
2350 its_write_baser(its, baser, val);
2351 tmp = baser->val;
2385 baser->order = order;
2386 baser->base = base;
2387 baser->psz = psz;
2397 static bool its_parse_indirect_baser(struct its_node *its, struct its_baser *baser, u32 *order, u32 ids)
2399 u64 tmp = its_read_baser(its, baser);
2404 u32 psz = baser->psz;
2413 its_write_baser(its, baser, val | GITS_BASER_INDIRECT);
2414 indirect = !!(baser->val & GITS_BASER_INDIRECT);
2488 u64 baser;
2503 baser = its->tables[2].val;
2504 if (!(baser & GITS_BASER_VALID)) {
2526 static int its_probe_baser_psz(struct its_node *its, struct its_baser *baser)
2533 val = its_read_baser(its, baser);
2552 its_write_baser(its, baser, val);
2554 if (FIELD_GET(GITS_BASER_PAGE_SIZE_MASK, baser->val) == gpsz) {
2571 baser->psz = psz;
2587 struct its_baser *baser = its->tables + i;
2588 u64 val = its_read_baser(its, baser);
2597 if (its_probe_baser_psz(its, baser)) {
2602 order = get_order(baser->psz);
2606 indirect = its_parse_indirect_baser(its, baser, &order, device_ids(its));
2615 *baser = sibling->tables[0x2];
2616 its_write_baser(its, baser, baser->val);
2621 indirect = its_parse_indirect_baser(its, baser, &order, ITS_MAX_VPEID_BITS);
2625 err = its_setup_baser(its, baser, cache, shr, order, indirect);
2632 cache = baser->val & GITS_BASER_CACHEABILITY_MASK;
2633 shr = baser->val & GITS_BASER_SHAREABILITY_MASK;
2650 u64 baser, addr;
2665 baser = its->tables[2].val;
2666 if (!(baser & GITS_BASER_VALID)) {
2674 if (baser & GITS_BASER_INDIRECT) {
2677 val |= FIELD_PREP(GICR_VPROPBASER_4_1_PAGE_SIZE, FIELD_GET(GITS_BASER_PAGE_SIZE_MASK, baser));
2678 switch (FIELD_GET(GITS_BASER_PAGE_SIZE_MASK, baser)) {
2680 addr = GITS_BASER_ADDR_48_to_52(baser);
2683 addr = baser & GENMASK_ULL(0x2f, 0xc);
2687 val |= FIELD_PREP(GICR_VPROPBASER_SHAREABILITY_MASK, FIELD_GET(GITS_BASER_SHAREABILITY_MASK, baser));
2689 FIELD_PREP(GICR_VPROPBASER_INNER_CACHEABILITY_MASK, FIELD_GET(GITS_BASER_INNER_CACHEABILITY_MASK, baser));
2690 val |= FIELD_PREP(GICR_VPROPBASER_4_1_SIZE, GITS_BASER_NR_PAGES(baser) - 1);
3276 static bool its_alloc_table_entry(struct its_node *its, struct its_baser *baser, u32 id)
3283 esz = GITS_BASER_ENTRY_SIZE(baser->val);
3284 if (!(baser->val & GITS_BASER_INDIRECT)) {
3285 return (id < (PAGE_ORDER_TO_SIZE(baser->order) / esz));
3289 idx = id >> ilog2(baser->psz / esz);
3290 if (idx >= (PAGE_ORDER_TO_SIZE(baser->order) / GITS_LVL1_ENTRY_SIZE)) {
3294 table = baser->base;
3303 page = alloc_pages_node(its->numa_node, gfp_flags, get_order(baser->psz));
3309 if (!(baser->val & GITS_BASER_SHAREABILITY_MASK)) {
3310 gic_flush_dcache_to_poc(page_address(page), baser->psz);
3316 if (!(baser->val & GITS_BASER_SHAREABILITY_MASK)) {
3329 struct its_baser *baser;
3330 baser = its_get_baser(its, GITS_BASER_TYPE_DEVICE);
3332 if (!baser) {
3335 return its_alloc_table_entry(its, baser, dev_id);
3352 struct its_baser *baser;
3358 baser = its_get_baser(its, GITS_BASER_TYPE_VCPU);
3359 if (!baser) {
3363 if (!its_alloc_table_entry(its, baser, vpe_id)) {
4847 struct its_baser *baser = &its->tables[i];
4849 if (!(baser->val & GITS_BASER_VALID)) {
4853 its_write_baser(its, baser, baser->val);
4979 u64 baser, tmp, typer;
5077 baser = (virt_to_phys(its->cmd_base) | GITS_CBASER_RaWaWb | GITS_CBASER_InnerShareable |
5080 gits_write_cbaser(baser, its->base + GITS_CBASER);
5087 if ((tmp ^ baser) & GITS_CBASER_SHAREABILITY_MASK) {
5094 baser &= ~(GITS_CBASER_SHAREABILITY_MASK | GITS_CBASER_CACHEABILITY_MASK);
5095 baser |= GITS_CBASER_nC;
5096 gits_write_cbaser(baser, its->base + GITS_CBASER);