Lines Matching refs:cmd
440 static void its_encode_cmd(struct its_cmd_block *cmd, u8 cmd_nr)
442 its_mask_encode(&cmd->raw_cmd[0], cmd_nr, 0x7, 0);
445 static void its_encode_devid(struct its_cmd_block *cmd, u32 devid)
447 its_mask_encode(&cmd->raw_cmd[0], devid, 0x3f, 0x20);
450 static void its_encode_event_id(struct its_cmd_block *cmd, u32 id)
452 its_mask_encode(&cmd->raw_cmd[1], id, 0x1f, 0);
455 static void its_encode_phys_id(struct its_cmd_block *cmd, u32 phys_id)
457 its_mask_encode(&cmd->raw_cmd[1], phys_id, 0x3f, 0x20);
460 static void its_encode_size(struct its_cmd_block *cmd, u8 size)
462 its_mask_encode(&cmd->raw_cmd[1], size, 0x4, 0x0);
465 static void its_encode_itt(struct its_cmd_block *cmd, u64 itt_addr)
467 its_mask_encode(&cmd->raw_cmd[0x2], itt_addr >> 0x8, 0x33, 0x8);
470 static void its_encode_valid(struct its_cmd_block *cmd, int valid)
472 its_mask_encode(&cmd->raw_cmd[0x2], !!valid, 0x3f, 0x3f);
475 static void its_encode_target(struct its_cmd_block *cmd, u64 target_addr)
477 its_mask_encode(&cmd->raw_cmd[0x2], target_addr >> 0x10, 0x33, 0x10);
480 static void its_encode_collection(struct its_cmd_block *cmd, u16 col)
482 its_mask_encode(&cmd->raw_cmd[0x2], col, 0xf, 0);
485 static void its_encode_vpeid(struct its_cmd_block *cmd, u16 vpeid)
487 its_mask_encode(&cmd->raw_cmd[1], vpeid, 0x2f, 0x20);
490 static void its_encode_virt_id(struct its_cmd_block *cmd, u32 virt_id)
492 its_mask_encode(&cmd->raw_cmd[0x2], virt_id, 0x1f, 0x0);
495 static void its_encode_db_phys_id(struct its_cmd_block *cmd, u32 db_phys_id)
497 its_mask_encode(&cmd->raw_cmd[0x2], db_phys_id, 0x3f, 0x20);
500 static void its_encode_db_valid(struct its_cmd_block *cmd, bool db_valid)
502 its_mask_encode(&cmd->raw_cmd[0x2], db_valid, 0, 0);
505 static void its_encode_seq_num(struct its_cmd_block *cmd, u16 seq_num)
507 its_mask_encode(&cmd->raw_cmd[0], seq_num, 0x2f, 0x20);
510 static void its_encode_its_list(struct its_cmd_block *cmd, u16 its_list)
512 its_mask_encode(&cmd->raw_cmd[1], its_list, 0xf, 0);
515 static void its_encode_vpt_addr(struct its_cmd_block *cmd, u64 vpt_pa)
517 its_mask_encode(&cmd->raw_cmd[0x3], vpt_pa >> 0x10, 0x33, 0x10);
520 static void its_encode_vpt_size(struct its_cmd_block *cmd, u8 vpt_size)
522 its_mask_encode(&cmd->raw_cmd[0x3], vpt_size, 0x4, 0);
525 static void its_encode_vconf_addr(struct its_cmd_block *cmd, u64 vconf_pa)
527 its_mask_encode(&cmd->raw_cmd[0], vconf_pa >> 0x10, 0x33, 0x10);
530 static void its_encode_alloc(struct its_cmd_block *cmd, bool alloc)
532 its_mask_encode(&cmd->raw_cmd[0], alloc, 0x8, 0x8);
535 static void its_encode_ptz(struct its_cmd_block *cmd, bool ptz)
537 its_mask_encode(&cmd->raw_cmd[0], ptz, 0x9, 0x9);
540 static void its_encode_vmapp_default_db(struct its_cmd_block *cmd, u32 vpe_db_lpi)
542 its_mask_encode(&cmd->raw_cmd[1], vpe_db_lpi, 0x1f, 0);
545 static void its_encode_vmovp_default_db(struct its_cmd_block *cmd, u32 vpe_db_lpi)
547 its_mask_encode(&cmd->raw_cmd[0x3], vpe_db_lpi, 0x1f, 0);
550 static void its_encode_db(struct its_cmd_block *cmd, bool db)
552 its_mask_encode(&cmd->raw_cmd[0x2], db, 0x3f, 0x3f);
555 static void its_encode_sgi_intid(struct its_cmd_block *cmd, u8 sgi)
557 its_mask_encode(&cmd->raw_cmd[0], sgi, 0x23, 0x20);
560 static void its_encode_sgi_priority(struct its_cmd_block *cmd, u8 prio)
562 its_mask_encode(&cmd->raw_cmd[0], prio >> 0x4, 0x17, 0x14);
565 static void its_encode_sgi_group(struct its_cmd_block *cmd, bool grp)
567 its_mask_encode(&cmd->raw_cmd[0], grp, 0xa, 0xa);
570 static void its_encode_sgi_clear(struct its_cmd_block *cmd, bool clr)
572 its_mask_encode(&cmd->raw_cmd[0], clr, 0x9, 0x9);
575 static void its_encode_sgi_enable(struct its_cmd_block *cmd, bool en)
577 its_mask_encode(&cmd->raw_cmd[0], en, 0x8, 0x8);
580 static inline void its_fixup_cmd(struct its_cmd_block *cmd)
583 cmd->raw_cmd_le[0x0] = cpu_to_le64(cmd->raw_cmd[0x0]);
584 cmd->raw_cmd_le[0x1] = cpu_to_le64(cmd->raw_cmd[0x1]);
585 cmd->raw_cmd_le[0x2] = cpu_to_le64(cmd->raw_cmd[0x2]);
586 cmd->raw_cmd_le[0x3] = cpu_to_le64(cmd->raw_cmd[0x3]);
589 static struct its_collection *its_build_mapd_cmd(struct its_node *its, struct its_cmd_block *cmd,
598 its_encode_cmd(cmd, GITS_CMD_MAPD);
599 its_encode_devid(cmd, desc->its_mapd_cmd.dev->device_id);
600 its_encode_size(cmd, size - 1);
601 its_encode_itt(cmd, itt_addr);
602 its_encode_valid(cmd, desc->its_mapd_cmd.valid);
604 its_fixup_cmd(cmd);
609 static struct its_collection *its_build_mapc_cmd(struct its_node *its, struct its_cmd_block *cmd,
612 its_encode_cmd(cmd, GITS_CMD_MAPC);
613 its_encode_collection(cmd, desc->its_mapc_cmd.col->col_id);
614 its_encode_target(cmd, desc->its_mapc_cmd.col->target_address);
615 its_encode_valid(cmd, desc->its_mapc_cmd.valid);
617 its_fixup_cmd(cmd);
622 static struct its_collection *its_build_mapti_cmd(struct its_node *its, struct its_cmd_block *cmd,
629 its_encode_cmd(cmd, GITS_CMD_MAPTI);
630 its_encode_devid(cmd, desc->its_mapti_cmd.dev->device_id);
631 its_encode_event_id(cmd, desc->its_mapti_cmd.event_id);
632 its_encode_phys_id(cmd, desc->its_mapti_cmd.phys_id);
633 its_encode_collection(cmd, col->col_id);
635 its_fixup_cmd(cmd);
640 static struct its_collection *its_build_movi_cmd(struct its_node *its, struct its_cmd_block *cmd,
647 its_encode_cmd(cmd, GITS_CMD_MOVI);
648 its_encode_devid(cmd, desc->its_movi_cmd.dev->device_id);
649 its_encode_event_id(cmd, desc->its_movi_cmd.event_id);
650 its_encode_collection(cmd, desc->its_movi_cmd.col->col_id);
652 its_fixup_cmd(cmd);
657 static struct its_collection *its_build_discard_cmd(struct its_node *its, struct its_cmd_block *cmd,
664 its_encode_cmd(cmd, GITS_CMD_DISCARD);
665 its_encode_devid(cmd, desc->its_discard_cmd.dev->device_id);
666 its_encode_event_id(cmd, desc->its_discard_cmd.event_id);
668 its_fixup_cmd(cmd);
673 static struct its_collection *its_build_inv_cmd(struct its_node *its, struct its_cmd_block *cmd,
680 its_encode_cmd(cmd, GITS_CMD_INV);
681 its_encode_devid(cmd, desc->its_inv_cmd.dev->device_id);
682 its_encode_event_id(cmd, desc->its_inv_cmd.event_id);
684 its_fixup_cmd(cmd);
689 static struct its_collection *its_build_int_cmd(struct its_node *its, struct its_cmd_block *cmd,
696 its_encode_cmd(cmd, GITS_CMD_INT);
697 its_encode_devid(cmd, desc->its_int_cmd.dev->device_id);
698 its_encode_event_id(cmd, desc->its_int_cmd.event_id);
700 its_fixup_cmd(cmd);
705 static struct its_collection *its_build_clear_cmd(struct its_node *its, struct its_cmd_block *cmd,
712 its_encode_cmd(cmd, GITS_CMD_CLEAR);
713 its_encode_devid(cmd, desc->its_clear_cmd.dev->device_id);
714 its_encode_event_id(cmd, desc->its_clear_cmd.event_id);
716 its_fixup_cmd(cmd);
721 static struct its_collection *its_build_invall_cmd(struct its_node *its, struct its_cmd_block *cmd,
724 its_encode_cmd(cmd, GITS_CMD_INVALL);
725 its_encode_collection(cmd, desc->its_invall_cmd.col->col_id);
727 its_fixup_cmd(cmd);
732 static struct its_vpe *its_build_vinvall_cmd(struct its_node *its, struct its_cmd_block *cmd, struct its_cmd_desc *desc)
734 its_encode_cmd(cmd, GITS_CMD_VINVALL);
735 its_encode_vpeid(cmd, desc->its_vinvall_cmd.vpe->vpe_id);
737 its_fixup_cmd(cmd);
742 static struct its_vpe *its_build_vmapp_cmd(struct its_node *its, struct its_cmd_block *cmd, struct its_cmd_desc *desc)
748 its_encode_cmd(cmd, GITS_CMD_VMAPP);
749 its_encode_vpeid(cmd, desc->its_vmapp_cmd.vpe->vpe_id);
750 its_encode_valid(cmd, desc->its_vmapp_cmd.valid);
755 its_encode_alloc(cmd, alloc);
764 its_encode_target(cmd, target);
765 its_encode_vpt_addr(cmd, vpt_addr);
766 its_encode_vpt_size(cmd, LPI_NRBITS - 1);
776 its_encode_alloc(cmd, alloc);
779 its_encode_ptz(cmd, alloc);
780 its_encode_vconf_addr(cmd, vconf_addr);
781 its_encode_vmapp_default_db(cmd, desc->its_vmapp_cmd.vpe->vpe_db_lpi);
784 its_fixup_cmd(cmd);
789 static struct its_vpe *its_build_vmapti_cmd(struct its_node *its, struct its_cmd_block *cmd, struct its_cmd_desc *desc)
799 its_encode_cmd(cmd, GITS_CMD_VMAPTI);
800 its_encode_devid(cmd, desc->its_vmapti_cmd.dev->device_id);
801 its_encode_vpeid(cmd, desc->its_vmapti_cmd.vpe->vpe_id);
802 its_encode_event_id(cmd, desc->its_vmapti_cmd.event_id);
803 its_encode_db_phys_id(cmd, db);
804 its_encode_virt_id(cmd, desc->its_vmapti_cmd.virt_id);
806 its_fixup_cmd(cmd);
811 static struct its_vpe *its_build_vmovi_cmd(struct its_node *its, struct its_cmd_block *cmd, struct its_cmd_desc *desc)
821 its_encode_cmd(cmd, GITS_CMD_VMOVI);
822 its_encode_devid(cmd, desc->its_vmovi_cmd.dev->device_id);
823 its_encode_vpeid(cmd, desc->its_vmovi_cmd.vpe->vpe_id);
824 its_encode_event_id(cmd, desc->its_vmovi_cmd.event_id);
825 its_encode_db_phys_id(cmd, db);
826 its_encode_db_valid(cmd, true);
828 its_fixup_cmd(cmd);
833 static struct its_vpe *its_build_vmovp_cmd(struct its_node *its, struct its_cmd_block *cmd, struct its_cmd_desc *desc)
838 its_encode_cmd(cmd, GITS_CMD_VMOVP);
839 its_encode_seq_num(cmd, desc->its_vmovp_cmd.seq_num);
840 its_encode_its_list(cmd, desc->its_vmovp_cmd.its_list);
841 its_encode_vpeid(cmd, desc->its_vmovp_cmd.vpe->vpe_id);
842 its_encode_target(cmd, target);
845 its_encode_db(cmd, true);
846 its_encode_vmovp_default_db(cmd, desc->its_vmovp_cmd.vpe->vpe_db_lpi);
849 its_fixup_cmd(cmd);
854 static struct its_vpe *its_build_vinv_cmd(struct its_node *its, struct its_cmd_block *cmd, struct its_cmd_desc *desc)
860 its_encode_cmd(cmd, GITS_CMD_INV);
861 its_encode_devid(cmd, desc->its_inv_cmd.dev->device_id);
862 its_encode_event_id(cmd, desc->its_inv_cmd.event_id);
864 its_fixup_cmd(cmd);
869 static struct its_vpe *its_build_vint_cmd(struct its_node *its, struct its_cmd_block *cmd, struct its_cmd_desc *desc)
875 its_encode_cmd(cmd, GITS_CMD_INT);
876 its_encode_devid(cmd, desc->its_int_cmd.dev->device_id);
877 its_encode_event_id(cmd, desc->its_int_cmd.event_id);
879 its_fixup_cmd(cmd);
884 static struct its_vpe *its_build_vclear_cmd(struct its_node *its, struct its_cmd_block *cmd, struct its_cmd_desc *desc)
890 its_encode_cmd(cmd, GITS_CMD_CLEAR);
891 its_encode_devid(cmd, desc->its_clear_cmd.dev->device_id);
892 its_encode_event_id(cmd, desc->its_clear_cmd.event_id);
894 its_fixup_cmd(cmd);
899 static struct its_vpe *its_build_invdb_cmd(struct its_node *its, struct its_cmd_block *cmd, struct its_cmd_desc *desc)
905 its_encode_cmd(cmd, GITS_CMD_INVDB);
906 its_encode_vpeid(cmd, desc->its_invdb_cmd.vpe->vpe_id);
908 its_fixup_cmd(cmd);
913 static struct its_vpe *its_build_vsgi_cmd(struct its_node *its, struct its_cmd_block *cmd, struct its_cmd_desc *desc)
919 its_encode_cmd(cmd, GITS_CMD_VSGI);
920 its_encode_vpeid(cmd, desc->its_vsgi_cmd.vpe->vpe_id);
921 its_encode_sgi_intid(cmd, desc->its_vsgi_cmd.sgi);
922 its_encode_sgi_priority(cmd, desc->its_vsgi_cmd.priority);
923 its_encode_sgi_group(cmd, desc->its_vsgi_cmd.group);
924 its_encode_sgi_clear(cmd, desc->its_vsgi_cmd.clear);
925 its_encode_sgi_enable(cmd, desc->its_vsgi_cmd.enable);
927 its_fixup_cmd(cmd);
954 struct its_cmd_block *cmd;
967 cmd = its->cmd_write++;
975 cmd->raw_cmd[0x0] = 0;
976 cmd->raw_cmd[0x1] = 0;
977 cmd->raw_cmd[0x2] = 0;
978 cmd->raw_cmd[0x3] = 0;
980 return cmd;
992 static void its_flush_cmd(struct its_node *its, struct its_cmd_block *cmd)
999 gic_flush_dcache_to_poc(cmd, sizeof(*cmd));
1060 struct its_cmd_block *cmd, *sync_cmd, *next_cmd;
1067 cmd = its_allocate_entry(its);
1068 if (!cmd) { /* We're soooooo screewed... */
1072 sync_obj = builder(its, cmd, desc);
1073 its_flush_cmd(its, cmd);
1091 pr_err_ratelimited("ITS cmd %ps failed\n", builder);
1104 struct its_cmd_block *cmd, *sync_cmd, *next_cmd;
1111 cmd = its_allocate_entry(its);
1112 if (!cmd) { /* We're soooooo screewed... */
1116 sync_obj = builder(its, cmd, desc);
1117 its_flush_cmd(its, cmd);
1135 pr_err_ratelimited("ITS cmd %ps failed\n", builder);
3945 static void its_vpe_send_cmd(struct its_vpe *vpe, void (*cmd)(struct its_device *, u32))
3952 cmd(vpe_proxy.dev, vpe->vpe_proxy_event);
5098 pr_info("ITS: using cache flushing for cmd queue\n");