Hello,
This change makes the PHY interrupt actually work as intended on the
SWARM board, where the CFE firmware leaves the GPIO line at the power-on
polarity, which is suitable for active-high interrupts, but not quite so
for this one (the "interrupt force" bit in the PHY works much better for
stress-testing interrupt handling; use that one instead if needed).
Please consider.
Maciej
Signed-off-by: Maciej W. Rozycki <[EMAIL PROTECTED]>
patch-mips-2.6.18-20060920-swarm-setup-15
diff -up --recursive --new-file
linux-mips-2.6.18-20060920.macro/arch/mips/sibyte/swarm/setup.c
linux-mips-2.6.18-20060920/arch/mips/sibyte/swarm/setup.c
--- linux-mips-2.6.18-20060920.macro/arch/mips/sibyte/swarm/setup.c
2006-07-12 04:59:56.000000000 +0000
+++ linux-mips-2.6.18-20060920/arch/mips/sibyte/swarm/setup.c 2006-09-28
02:37:31.000000000 +0000
@@ -1,6 +1,7 @@
/*
* Copyright (C) 2000, 2001, 2002, 2003, 2004 Broadcom Corporation
* Copyright (C) 2004 by Ralf Baechle ([EMAIL PROTECTED])
+ * Copyright (c) 2006 Maciej W. Rozycki
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@@ -106,6 +107,8 @@ int swarm_be_handler(struct pt_regs *reg
void __init plat_mem_setup(void)
{
+ u64 invert;
+
#if defined(CONFIG_SIBYTE_BCM1x55) || defined(CONFIG_SIBYTE_BCM1x80)
bcm1480_setup();
#elif defined(CONFIG_SIBYTE_SB1250) || defined(CONFIG_SIBYTE_BCM112X)
@@ -114,6 +117,16 @@ void __init plat_mem_setup(void)
#error invalid SiByte board configuation
#endif
+ /*
+ * The PHY interrupt on the SWARM is active low,
+ * but CFE gets it wrong (or not at all, probably).
+ */
+#ifdef K_GPIO_PHY
+ invert = __raw_readq(IOADDR(A_GPIO_INPUT_INVERT));
+ invert |= 1 << K_GPIO_PHY;
+ __raw_writeq(invert, IOADDR(A_GPIO_INPUT_INVERT));
+#endif
+
panic_timeout = 5; /* For debug. */
board_time_init = swarm_time_init;
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html