Hi Andre, On 30/01/17 18:31, Andre Przywara wrote:
+static int its_send_cmd_mapd(struct host_its *its, uint32_t deviceid, + int size, uint64_t itt_addr, bool valid) +{ + uint64_t cmd[4]; + + cmd[0] = GITS_CMD_MAPD | ((uint64_t)deviceid << 32); + cmd[1] = size & GENMASK(4, 0); + cmd[2] = itt_addr & GENMASK(51, 8); + if ( valid ) + cmd[2] |= GITS_VALID_BIT; + cmd[3] = 0x00; + + return its_send_command(its, cmd); +} + /* Set up the (1:1) collection mapping for the given host CPU. */ int gicv3_its_setup_collection(int cpu) { @@ -293,6 +310,7 @@ int gicv3_its_init(struct host_its *hw_its) reg = readq_relaxed(hw_its->its_base + GITS_TYPER); if ( reg & GITS_TYPER_PTA ) hw_its->flags |= HOST_ITS_USES_PTA; + hw_its->itte_size = GITS_TYPER_ITT_SIZE(reg);
The GITS_TYPER.ITT_entry_size indicates the number of bytes minus one. So you would have to add a + 1.
I would add it in the GITS_TYPER_ITT_SIZE macro to simplify it. Cheers, -- Julien Grall _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org https://lists.xen.org/xen-devel