public inbox for linuxppc-dev@ozlabs.org 
 help / color / mirror / Atom feed
From: Olof Johansson <olof@lixom•net>
To: linuxppc-dev@ozlabs•org
Subject: [patch 22/35] Work around errata 4111
Date: Thu, 05 Jul 2007 12:02:55 -0500	[thread overview]
Message-ID: <20070705170239.438013000@lixom.net> (raw)
In-Reply-To: 20070705170233.258351000@lixom.net

Workaround for errata 4111: IPI registers of the OpenPIC don't read back
right.

Also, reading back regular irq setup registers is broken, so keep a
software copy.


Index: mainline/arch/powerpc/sysdev/mpic.c
===================================================================
--- mainline.orig/arch/powerpc/sysdev/mpic.c
+++ mainline/arch/powerpc/sysdev/mpic.c
@@ -187,6 +187,9 @@ static inline void _mpic_write(enum mpic
 
 static inline u32 _mpic_ipi_read(struct mpic *mpic, unsigned int ipi)
 {
+#ifdef CONFIG_MPIC_BROKEN_REGREAD
+	return mpic->ipi_reg_shadow[ipi];
+#else
 	enum mpic_reg_type type = mpic->reg_type;
 	unsigned int offset = MPIC_INFO(GREG_IPI_VECTOR_PRI_0) +
 			      (ipi * MPIC_INFO(GREG_IPI_STRIDE));
@@ -194,6 +197,7 @@ static inline u32 _mpic_ipi_read(struct 
 	if ((mpic->flags & MPIC_BROKEN_IPI) && type == mpic_access_mmio_le)
 		type = mpic_access_mmio_be;
 	return _mpic_read(type, &mpic->gregs, offset);
+#endif
 }
 
 static inline void _mpic_ipi_write(struct mpic *mpic, unsigned int ipi, u32 value)
@@ -202,6 +206,9 @@ static inline void _mpic_ipi_write(struc
 			      (ipi * MPIC_INFO(GREG_IPI_STRIDE));
 
 	_mpic_write(mpic->reg_type, &mpic->gregs, offset, value);
+#ifdef CONFIG_MPIC_BROKEN_REGREAD
+	mpic->ipi_reg_shadow[ipi] = value;
+#endif
 }
 
 static inline u32 _mpic_cpu_read(struct mpic *mpic, unsigned int reg)
@@ -213,6 +220,13 @@ static inline u32 _mpic_cpu_read(struct 
 	return _mpic_read(mpic->reg_type, &mpic->cpuregs[cpu], reg);
 }
 
+static inline void _mpic_cpu0_write(struct mpic *mpic, unsigned int reg, u32 value)
+{
+	unsigned int cpu = 0;
+
+	_mpic_write(mpic->reg_type, &mpic->cpuregs[cpu], reg, value);
+}
+
 static inline void _mpic_cpu_write(struct mpic *mpic, unsigned int reg, u32 value)
 {
 	unsigned int cpu = 0;
@@ -228,8 +242,13 @@ static inline u32 _mpic_irq_read(struct 
 	unsigned int	isu = src_no >> mpic->isu_shift;
 	unsigned int	idx = src_no & mpic->isu_mask;
 
-	return _mpic_read(mpic->reg_type, &mpic->isus[isu],
-			  reg + (idx * MPIC_INFO(IRQ_STRIDE)));
+#ifdef CONFIG_MPIC_BROKEN_REGREAD
+	if (reg == 0)
+		return mpic->isu_reg0_shadow[idx];
+	else
+#endif
+		return _mpic_read(mpic->reg_type, &mpic->isus[isu],
+				  reg + (idx * MPIC_INFO(IRQ_STRIDE)));
 }
 
 static inline void _mpic_irq_write(struct mpic *mpic, unsigned int src_no,
@@ -240,6 +259,11 @@ static inline void _mpic_irq_write(struc
 
 	_mpic_write(mpic->reg_type, &mpic->isus[isu],
 		    reg + (idx * MPIC_INFO(IRQ_STRIDE)), value);
+
+#ifdef CONFIG_MPIC_BROKEN_REGREAD
+	if (reg == 0)
+		mpic->isu_reg0_shadow[idx] = value;
+#endif
 }
 
 #define mpic_read(b,r)		_mpic_read(mpic->reg_type,&(b),(r))
@@ -1157,6 +1181,8 @@ void __init mpic_assign_isu(struct mpic 
 		 MPIC_INFO(IRQ_STRIDE) * mpic->isu_size);
 	if ((isu_first + mpic->isu_size) > mpic->num_sources)
 		mpic->num_sources = isu_first + mpic->isu_size;
+
+	printk("num_sources %d\n", mpic->num_sources);
 }
 
 void __init mpic_set_default_senses(struct mpic *mpic, u8 *senses, int count)
@@ -1394,7 +1420,7 @@ void mpic_send_ipi(unsigned int ipi_no, 
 	DBG("%s: send_ipi(ipi_no: %d)\n", mpic->name, ipi_no);
 #endif
 
-	mpic_cpu_write(MPIC_INFO(CPU_IPI_DISPATCH_0) +
+	_mpic_cpu0_write(mpic, MPIC_INFO(CPU_IPI_DISPATCH_0) +
 		       ipi_no * MPIC_INFO(CPU_IPI_DISPATCH_STRIDE),
 		       mpic_physmask(cpu_mask & cpus_addr(cpu_online_map)[0]));
 }
Index: mainline/include/asm-powerpc/mpic.h
===================================================================
--- mainline.orig/include/asm-powerpc/mpic.h
+++ mainline/include/asm-powerpc/mpic.h
@@ -306,6 +306,11 @@ struct mpic
 	unsigned long		*hwirq_bitmap;
 #endif
 
+#ifdef CONFIG_MPIC_BROKEN_REGREAD
+	u32			ipi_reg_shadow[4];
+	u32			isu_reg0_shadow[MPIC_MAX_IRQ_SOURCES];
+#endif
+
 	/* link */
 	struct mpic		*next;
 
Index: mainline/arch/powerpc/platforms/Kconfig
===================================================================
--- mainline.orig/arch/powerpc/platforms/Kconfig
+++ mainline/arch/powerpc/platforms/Kconfig
@@ -121,6 +121,11 @@ config MPIC_U3_HT_IRQS
 	depends on PPC_MAPLE
 	default y
 
+config MPIC_BROKEN_REGREAD
+	bool
+	depends on PPC_PASEMI
+	default y
+
 config IBMVIO
 	depends on PPC_PSERIES || PPC_ISERIES
 	bool
Index: mainline/arch/powerpc/platforms/pasemi/Kconfig
===================================================================
--- mainline.orig/arch/powerpc/platforms/pasemi/Kconfig
+++ mainline/arch/powerpc/platforms/pasemi/Kconfig
@@ -6,6 +6,7 @@ config PPC_PASEMI
 	select PPC_UDBG_16550
 	select PPC_NATIVE
 	select EMBEDDED
+	select MPIC_BROKEN_REGREAD
 	help
 	  This option enables support for PA Semi's PWRficient line
 	  of SoC processors, including PA6T-1682M

--

  parent reply	other threads:[~2007-07-05 17:03 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-05 17:02 [patch 00/35] PA Semi patch set Olof Johansson
2007-07-05 17:02 ` [patch 01/35] pasemi: rename platform Olof Johansson
2007-07-08 23:52   ` Stephen Rothwell
2007-07-09  0:18     ` Olof Johansson
2007-07-09  7:23       ` Stephen Rothwell
2007-07-09 17:19         ` Olof Johansson
2007-07-09 17:21           ` Olof Johansson
2007-07-05 17:02 ` [patch 02/35] PA Semi EDAC driver Olof Johansson
2007-07-05 17:02 ` [patch 03/35] Change powerpc64 ioaddr_t to u_int Olof Johansson
2007-07-05 17:02 ` [patch 04/35] pasemi_mac: Fix TX interrupt threshold Olof Johansson
2007-07-05 17:02 ` [patch 05/35] pasemi_mac: Clean TX ring in poll Olof Johansson
2007-07-05 17:02 ` [patch 06/35] pasemi_mac: Abstract out register access Olof Johansson
2007-07-05 17:02 ` [patch 07/35] pasemi_mac: stop using the pci config space accessors for register read/writes Olof Johansson
2007-07-26 21:25   ` Marian Balakowicz
2007-07-28  8:35     ` Olof Johansson
2007-08-01  9:27       ` Marian Balakowicz
2007-07-05 17:02 ` [patch 08/35] pasemi_mac: Enable L2 caching of packet headers Olof Johansson
2007-07-05 17:02 ` [patch 09/35] pasemi_mac: Simplify memcpy for short receives Olof Johansson
2007-07-05 17:02 ` [patch 10/35] pasemi_mac: Minor performance tweaks Olof Johansson
2007-07-05 17:02 ` [patch 11/35] pasemi_mac: Reduce locking when cleaning TX ring Olof Johansson
2007-07-05 17:02 ` [patch 12/35] pasemi_mac: Enable LLTX Olof Johansson
2007-07-05 17:02 ` [patch 13/35] Cleanup marvell phy driver init Olof Johansson
2007-07-05 17:02 ` [patch 14/35] Add 88E1112 PHY ID to the marvell driver Olof Johansson
2007-07-05 17:02 ` [patch 15/35] Export HID registers via sysfs Olof Johansson
2007-07-05 17:02 ` [patch 16/35] Electra ide platform glue Olof Johansson
2007-07-05 17:02 ` [patch 17/35] CF driver for PA Semi Electra Olof Johansson
2007-07-05 17:02 ` [patch 18/35] Spread IRQs among cpus by default Olof Johansson
2007-07-05 17:02 ` [patch 19/35] Improve machine check output Olof Johansson
2007-07-05 17:02 ` [patch 20/35] Remove idle_spin function pointer Olof Johansson
2007-07-05 17:02 ` [patch 21/35] Use MSR_PMM to disable profiling of the idle loop Olof Johansson
2007-07-05 17:02 ` Olof Johansson [this message]
2007-07-05 17:02 ` [patch 23/35] Work around UART erratas Olof Johansson
2007-07-05 17:02 ` [patch 24/35] Work around errata 4628 Olof Johansson
2007-07-05 17:02 ` [patch 25/35] Work around errata 4025 Olof Johansson
2007-07-05 17:02 ` [patch 26/35] Work around errata 4713 Olof Johansson
2007-07-05 17:03 ` [patch 27/35] Work around errata 4290 Olof Johansson
2007-07-05 18:50   ` Gabriel Paubert
2007-07-05 19:26     ` Olof Johansson
2007-07-05 17:03 ` [patch 28/35] Work around errata 4712 Olof Johansson
2007-07-05 17:03 ` [patch 29/35] Work around errata 4910 Olof Johansson
2007-07-05 17:03 ` [patch 30/35] Disable PURR on pa6t Olof Johansson
2007-07-05 17:03 ` [patch 31/35] Work around errata 4161 Olof Johansson
2007-07-05 17:03 ` [patch 32/35] Dont reset openpic on init Olof Johansson
2007-07-05 17:03 ` [patch 33/35] Work around errata 5667 Olof Johansson
2007-07-05 17:03 ` [patch 34/35] Work around errata 4505 Olof Johansson
2007-07-05 17:03 ` [patch 35/35] Work around errata 5652 Olof Johansson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070705170239.438013000@lixom.net \
    --to=olof@lixom$(echo .)net \
    --cc=linuxppc-dev@ozlabs$(echo .)org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox