pcie-c2000: print a message when fixing up a PCIe external abort.

Older versions of the mindspeed SDK would insta-crash when there was an
external abort.  The new SDK tries to silently fix things up, which sort of
works, but only barely and only sometimes.  To make it easier to tell when
this is (trying to) happen, print a message.  But let's rate limit it,
because when it goes out of control, it goes badly out of control.

Easy repro steps:
  echo 1 >/sys/devices/platform/pcie.[01]/device_reset
  echo 0 >/sys/devices/platform/pcie.[01]/device_reset
  lspci

Change-Id: Ic460a84935568527d911fd43706128ea2618ee59
diff --git a/arch/arm/mach-comcerto/pcie-c2000.c b/arch/arm/mach-comcerto/pcie-c2000.c
index e31d010..2e2bc04 100644
--- a/arch/arm/mach-comcerto/pcie-c2000.c
+++ b/arch/arm/mach-comcerto/pcie-c2000.c
@@ -20,6 +20,7 @@
 
 #include <linux/kernel.h>
 #include <linux/version.h>
+#include <linux/ratelimit.h>
 #include <linux/init.h>
 #include <linux/pci.h>
 #include <linux/spinlock.h>
@@ -1882,6 +1883,16 @@
 static int comcerto_pcie_abort_handler(unsigned long addr, unsigned int fsr,
                                       struct pt_regs *regs)
 {
+	static DEFINE_RATELIMIT_STATE(rs, 5 * HZ, 5);
+	if (__ratelimit(&rs)) {
+		pr_err("PCIe external abort detected at 0x%08lx\n", addr);
+	} else {
+		/*
+		 * Things are getting out of control.  Give up before we
+		 * just freeze the CPU and can't report about it.
+		 */
+		panic("PCIe: too many external aborts in a short time");
+	}
         if (fsr & (1 << 10))
                 regs->ARM_pc += 4;
         return 0;