Hi Shanker, On 16/03/17 15:05, Shanker Donthineni wrote: > Hi Andre, > > > On 03/16/2017 06:20 AM, Andre Przywara wrote: >> To be able to easily send commands to the ITS, create the respective >> wrapper functions, which take care of the ring buffer. >> The first two commands we implement provide methods to map a collection >> to a redistributor (aka host core) and to flush the command queue (SYNC). >> Start using these commands for mapping one collection to each host CPU. >> >> Signed-off-by: Andre Przywara <andre.przyw...@arm.com> >> ---
... >> @@ -184,22 +326,59 @@ retry: >> return -EINVAL; >> } >> >> +/* >> + * Before an ITS gets initialized, it should be in a quiescent state, where >> + * all outstanding commands and transactions have finished. >> + * So if the ITS is already enabled, turn it off and wait for all >> outstanding >> + * operations to get processed by polling the QUIESCENT bit. >> + */ >> +static int gicv3_disable_its(struct host_its *hw_its) >> +{ >> + uint32_t reg; >> + s_time_t deadline = NOW() + MILLISECS(100); >> + >> + reg = readl_relaxed(hw_its->its_base + GITS_CTLR); >> + if ( (reg & GITS_CTLR_QUIESCENT) && !(reg & GITS_CTLR_ENABLE) ) > > nit: I prefer changing to 'if ( !(reg & GITS_CTLR_ENABLE) && (reg & > GITS_CTLR_QUIESCENT) ) ' because bit GITS_CTLR_QUIESCENT is not valid if ITS > hardware is in enabled state. Sure, makes sense. I will change this. Thanks for having a look! Cheers, Andre. _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org https://lists.xen.org/xen-devel