| From b64083661b598e4165df9615069198b9d5e9d75c Mon Sep 17 00:00:00 2001 |
| From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> |
| Date: Thu, 13 Sep 2018 16:48:08 +0100 |
| Subject: ARM: 8799/1: mm: fix pci_ioremap_io() offset check |
| |
| [ Upstream commit 3a58ac65e2d7969bcdf1b6acb70fa4d12a88e53e ] |
| |
| IO_SPACE_LIMIT is the ending address of the PCI IO space, i.e |
| something like 0xfffff (and not 0x100000). |
| |
| Therefore, when offset = 0xf0000 is passed as argument, this function |
| fails even though the offset + SZ_64K fits below the |
| IO_SPACE_LIMIT. This makes the last chunk of 64 KB of the I/O space |
| not usable as it cannot be mapped. |
| |
| This patch fixes that by substracing 1 to offset + SZ_64K, so that we |
| compare the addrss of the last byte of the I/O space against |
| IO_SPACE_LIMIT instead of the address of the first byte of what is |
| after the I/O space. |
| |
| Fixes: c2794437091a4 ("ARM: Add fixed PCI i/o mapping") |
| Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> |
| Acked-by: Nicolas Pitre <nico@linaro.org> |
| Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/arm/mm/ioremap.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c |
| index ff0eed23ddf1..66e5d8765601 100644 |
| --- a/arch/arm/mm/ioremap.c |
| +++ b/arch/arm/mm/ioremap.c |
| @@ -473,7 +473,7 @@ void pci_ioremap_set_mem_type(int mem_type) |
| |
| int pci_ioremap_io(unsigned int offset, phys_addr_t phys_addr) |
| { |
| - BUG_ON(offset + SZ_64K > IO_SPACE_LIMIT); |
| + BUG_ON(offset + SZ_64K - 1 > IO_SPACE_LIMIT); |
| |
| return ioremap_page_range(PCI_IO_VIRT_BASE + offset, |
| PCI_IO_VIRT_BASE + offset + SZ_64K, |
| -- |
| 2.17.1 |
| |