Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d033f48f authored by Varun Sethi's avatar Varun Sethi Committed by Joerg Roedel
Browse files

iommu/fsl: Fix PAMU window size check.



is_power_of_2 requires an unsigned long parameter which would
lead to truncation of 64 bit values on 32 bit architectures.

__ffs also expects an unsigned long parameter thus won't work
for 64 bit values on 32 bit architectures.

Signed-off-by: default avatarVarun Sethi <Varun.Sethi@freescale.com>
Tested-by: default avatarEmil Medve <Emilian.Medve@Freescale.com>
Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent cd3de83f
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -170,10 +170,10 @@ int pamu_disable_liodn(int liodn)
static unsigned int map_addrspace_size_to_wse(phys_addr_t addrspace_size)
{
	/* Bug if not a power of 2 */
	BUG_ON(!is_power_of_2(addrspace_size));
	BUG_ON((addrspace_size & (addrspace_size - 1)));

	/* window size is 2^(WSE+1) bytes */
	return __ffs(addrspace_size) - 1;
	return fls64(addrspace_size) - 2;
}

/* Derive the PAACE window count encoding for the subwindow count */
@@ -351,7 +351,7 @@ int pamu_config_ppaace(int liodn, phys_addr_t win_addr, phys_addr_t win_size,
	struct paace *ppaace;
	unsigned long fspi;

	if (!is_power_of_2(win_size) || win_size < PAMU_PAGE_SIZE) {
	if ((win_size & (win_size - 1)) || win_size < PAMU_PAGE_SIZE) {
		pr_debug("window size too small or not a power of two %llx\n", win_size);
		return -EINVAL;
	}
@@ -464,7 +464,7 @@ int pamu_config_spaace(int liodn, u32 subwin_cnt, u32 subwin,
		return -ENOENT;
	}

	if (!is_power_of_2(subwin_size) || subwin_size < PAMU_PAGE_SIZE) {
	if ((subwin_size & (subwin_size - 1)) || subwin_size < PAMU_PAGE_SIZE) {
		pr_debug("subwindow size out of range, or not a power of 2\n");
		return -EINVAL;
	}
+1 −1
Original line number Diff line number Diff line
@@ -301,7 +301,7 @@ static int check_size(u64 size, dma_addr_t iova)
	 * Size must be a power of two and at least be equal
	 * to PAMU page size.
	 */
	if (!is_power_of_2(size) || size < PAMU_PAGE_SIZE) {
	if ((size & (size - 1)) || size < PAMU_PAGE_SIZE) {
		pr_debug("%s: size too small or not a power of two\n", __func__);
		return -EINVAL;
	}