On Wed, Dec 18, 2024 at 09:14:21PM -0800, Nicolin Chen wrote: > The hardware limitation "max=19" actually comes from SMMU Command Queue. > So, it'd be more natural for tegra241-cmdqv driver to read it out rather > than hardcoding it itself. > > This is not an issue yet for a kernel on a baremetal system, but a guest > kernel setting the queue base/size in form of IPA/gPA might result in a > noncontiguous queue in the physical address space, if underlying physical > pages backing up the guest RAM aren't contiguous entirely: e.g. 2MB-page > backed guest RAM cannot guarantee a contiguous queue if it is 8MB (capped > to VCMDQ_LOG2SIZE_MAX=19). This might lead to command errors when HW does > linear-read from a noncontiguous queue memory. > > Adding this extra IDR1.CMDQS cap (in the guest kernel) allows VMM to set > SMMU's IDR1.CMDQS=17 for the case mentioned above, so a guest-level queue > will be capped to maximum 2MB, ensuring a contiguous queue memory. > > Fixes: a3799717b881 ("iommu/tegra241-cmdqv: Fix alignment failure at max_n_shift") > Reported-by: Ian Kalinowski <ikalinowski@xxxxxxxxxx> > Cc: <stable@xxxxxxxxxxxxxxx> > Signed-off-by: Nicolin Chen <nicolinc@xxxxxxxxxx> > --- > drivers/iommu/arm/arm-smmu-v3/tegra241-cmdqv.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) Reviewed-by: Jason Gunthorpe <jgg@xxxxxxxxxx> Jason