]> rtime.felk.cvut.cz Git - lisovros/linux_canprio.git/commitdiff
Blackfin: portmux: fix peripheral map overflow when requesting pins
authorMichael Hennerich <michael.hennerich@analog.com>
Tue, 13 Jul 2010 08:26:10 +0000 (08:26 +0000)
committerMike Frysinger <vapier@gentoo.org>
Fri, 6 Aug 2010 16:55:53 +0000 (12:55 -0400)
Some processors have groups of pins that aren't an even number of 16.
This causes the array size calculation to under count the number of
needed entries due to integer truncation.  So on the BF51x, while we
should have 3 bitmaps (41 / 16), we end up with 2 and pin requests for
the 3rd bank end up scribbling over the top of the GPIO IRQ array.

Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
arch/blackfin/kernel/bfin_gpio.c

index c5650559a4e18b987a0fac325128ee6d6faf7ff8..dc07ed08b37f858403f716093d211d0793576b00 100644 (file)
@@ -157,7 +157,7 @@ static int cmp_label(unsigned short ident, const char *label)
 #define DECLARE_RESERVED_MAP(m, c) static unsigned short reserved_##m##_map[c]
 
 DECLARE_RESERVED_MAP(gpio, GPIO_BANK_NUM);
-DECLARE_RESERVED_MAP(peri, gpio_bank(MAX_RESOURCES));
+DECLARE_RESERVED_MAP(peri, DIV_ROUND_UP(MAX_RESOURCES, GPIO_BANKSIZE));
 DECLARE_RESERVED_MAP(gpio_irq, GPIO_BANK_NUM);
 
 inline int check_gpio(unsigned gpio)