On 28.09.20 07:57, Jan Kiszka wrote:
>>>>
>>>> You could try to not bypass SMMU transition in smmu driver, then the
>>>> system might not work well.
>>>
>>> Where is this bypass controlled? In the SMMU settings? Or is that
>>> platform-specific?
>>
>> S2CR_TYPE_BYPASS, smmu settings currently.
>
> Just flipping the type does not seem to be enough. Could you tell me
> what is needed to switch to "block what is is not permitted"?

Looking at the kernel, these two changes are apparently needed:

diff --git a/hypervisor/arch/arm64/smmu.c b/hypervisor/arch/arm64/smmu.c
index 69374b28..ea58340d 100644
--- a/hypervisor/arch/arm64/smmu.c
+++ b/hypervisor/arch/arm64/smmu.c
@@ -534,7 +534,7 @@ static int arm_smmu_device_reset(struct arm_smmu_device 
*smmu)

        /* Enable client access, handling unmatched streams as appropriate */
        reg &= ~sCR0_CLIENTPD;
-       reg &= ~sCR0_USFCFG;
+       reg |= sCR0_USFCFG;

        /* Disable forced broadcasting */
        reg &= ~sCR0_FB;
@@ -637,9 +637,8 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device 
*smmu)

        smmu->cfgs = (struct arm_smmu_cfg *)(smmu->s2crs + size);

-       /* Configure to Bypass mode */
        for (i = 0; i < size; i++)
-               smmu->s2crs[i] = s2cr_init_val;
+               smmu->s2crs[i].type = S2CR_TYPE_FAULT;

        smmu->num_mapping_groups = size;


However, only if I remove all sids from the root cell config of the
zynqmp (num_stream_ids = 0), blocking starts to work. As soon as I have
/any/ sid listed, /all/ transfers pass. I'm using 0x3fff as sid_mask
which covers all 14 bits that are used by that SOC.

Jan

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jailhouse-dev/a6a3bf58-20dc-3704-35c7-d97f7bcf9834%40web.de.

Reply via email to