linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] x86/CPU: Use correct Cyrix-specific macros
@ 2019-03-14 20:45 Matthew Whitehead
  2019-03-14 20:46 ` [PATCH 1/2] x86/CPU: Use correct macros for Cyrix calls on Geode processors Matthew Whitehead
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Matthew Whitehead @ 2019-03-14 20:45 UTC (permalink / raw)
  To: linux-kernel, tglx, mingo, luto; +Cc: Matthew Whitehead

Replace the incorrect Cyrix-specific macro calls with the correct
setCx86() and getCx86() calls. Also remove the unused setCx86_old(),
getCx86_old() and their related comments in the code.

Matthew Whitehead (2):
  x86/CPU: Use correct macros for Cyrix calls on Geode processors
  x86/CPU: Remove {get,set}Cx86_old macros used for Cyrix processors

 arch/x86/include/asm/processor-cyrix.h | 21 ---------------------
 arch/x86/kernel/cpu/cyrix.c            | 14 +++++++-------
 2 files changed, 7 insertions(+), 28 deletions(-)

-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/2] x86/CPU: Use correct macros for Cyrix calls on Geode processors
  2019-03-14 20:45 [PATCH 0/2] x86/CPU: Use correct Cyrix-specific macros Matthew Whitehead
@ 2019-03-14 20:46 ` Matthew Whitehead
  2019-03-21 11:40   ` [tip:x86/urgent] x86/cpu/cyrix: " tip-bot for Matthew Whitehead
  2019-03-14 20:46 ` [PATCH 2/2] x86/CPU: Remove {get,set}Cx86_old macros used for Cyrix processors Matthew Whitehead
  2019-03-16 19:00 ` [PATCH 0/2] x86/CPU: Use correct Cyrix-specific macros Andy Lutomirski
  2 siblings, 1 reply; 7+ messages in thread
From: Matthew Whitehead @ 2019-03-14 20:46 UTC (permalink / raw)
  To: linux-kernel, tglx, mingo, luto; +Cc: Matthew Whitehead

There are comments in processor-cyrix.h advising you to _not_ make calls
using the deprecated macros in this style:

  setCx86_old(CX86_CCR4, getCx86_old(CX86_CCR4) | 0x80);

This is because it expands the macro into a non-functioning calling
sequence. The calling order must be:

  outb(CX86_CCR2, 0x22);
  inb(0x23);

From the comments:

 * When using the old macros a line like
 *   setCx86(CX86_CCR2, getCx86(CX86_CCR2) | 0x88);
 * gets expanded to:
 *  do {
 *    outb((CX86_CCR2), 0x22);
 *    outb((({
 *        outb((CX86_CCR2), 0x22);
 *        inb(0x23);
 *    }) | 0x88), 0x23);
 *  } while (0);

The new macros fix this problem, so use them instead. Tested on an
actual Geode processor.

Signed-off-by: Matthew Whitehead <tedheadster@gmail.com>
---
 arch/x86/kernel/cpu/cyrix.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kernel/cpu/cyrix.c b/arch/x86/kernel/cpu/cyrix.c
index d12226f..1d9b8aa 100644
--- a/arch/x86/kernel/cpu/cyrix.c
+++ b/arch/x86/kernel/cpu/cyrix.c
@@ -124,7 +124,7 @@ static void set_cx86_reorder(void)
 	setCx86(CX86_CCR3, (ccr3 & 0x0f) | 0x10); /* enable MAPEN */
 
 	/* Load/Store Serialize to mem access disable (=reorder it) */
-	setCx86_old(CX86_PCR0, getCx86_old(CX86_PCR0) & ~0x80);
+	setCx86(CX86_PCR0, getCx86(CX86_PCR0) & ~0x80);
 	/* set load/store serialize from 1GB to 4GB */
 	ccr3 |= 0xe0;
 	setCx86(CX86_CCR3, ccr3);
@@ -135,11 +135,11 @@ static void set_cx86_memwb(void)
 	pr_info("Enable Memory-Write-back mode on Cyrix/NSC processor.\n");
 
 	/* CCR2 bit 2: unlock NW bit */
-	setCx86_old(CX86_CCR2, getCx86_old(CX86_CCR2) & ~0x04);
+	setCx86(CX86_CCR2, getCx86(CX86_CCR2) & ~0x04);
 	/* set 'Not Write-through' */
 	write_cr0(read_cr0() | X86_CR0_NW);
 	/* CCR2 bit 2: lock NW bit and set WT1 */
-	setCx86_old(CX86_CCR2, getCx86_old(CX86_CCR2) | 0x14);
+	setCx86(CX86_CCR2, getCx86(CX86_CCR2) | 0x14);
 }
 
 /*
@@ -153,14 +153,14 @@ static void geode_configure(void)
 	local_irq_save(flags);
 
 	/* Suspend on halt power saving and enable #SUSP pin */
-	setCx86_old(CX86_CCR2, getCx86_old(CX86_CCR2) | 0x88);
+	setCx86(CX86_CCR2, getCx86(CX86_CCR2) | 0x88);
 
 	ccr3 = getCx86(CX86_CCR3);
 	setCx86(CX86_CCR3, (ccr3 & 0x0f) | 0x10);	/* enable MAPEN */
 
 
 	/* FPU fast, DTE cache, Mem bypass */
-	setCx86_old(CX86_CCR4, getCx86_old(CX86_CCR4) | 0x38);
+	setCx86(CX86_CCR4, getCx86(CX86_CCR4) | 0x38);
 	setCx86(CX86_CCR3, ccr3);			/* disable MAPEN */
 
 	set_cx86_memwb();
@@ -296,7 +296,7 @@ static void init_cyrix(struct cpuinfo_x86 *c)
 		/* GXm supports extended cpuid levels 'ala' AMD */
 		if (c->cpuid_level == 2) {
 			/* Enable cxMMX extensions (GX1 Datasheet 54) */
-			setCx86_old(CX86_CCR7, getCx86_old(CX86_CCR7) | 1);
+			setCx86(CX86_CCR7, getCx86(CX86_CCR7) | 1);
 
 			/*
 			 * GXm : 0x30 ... 0x5f GXm  datasheet 51
@@ -319,7 +319,7 @@ static void init_cyrix(struct cpuinfo_x86 *c)
 		if (dir1 > 7) {
 			dir0_msn++;  /* M II */
 			/* Enable MMX extensions (App note 108) */
-			setCx86_old(CX86_CCR7, getCx86_old(CX86_CCR7)|1);
+			setCx86(CX86_CCR7, getCx86(CX86_CCR7)|1);
 		} else {
 			/* A 6x86MX - it has the bug. */
 			set_cpu_bug(c, X86_BUG_COMA);
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] x86/CPU: Remove {get,set}Cx86_old macros used for Cyrix processors
  2019-03-14 20:45 [PATCH 0/2] x86/CPU: Use correct Cyrix-specific macros Matthew Whitehead
  2019-03-14 20:46 ` [PATCH 1/2] x86/CPU: Use correct macros for Cyrix calls on Geode processors Matthew Whitehead
@ 2019-03-14 20:46 ` Matthew Whitehead
  2019-03-21 11:40   ` [tip:x86/urgent] x86/cpu/cyrix: " tip-bot for Matthew Whitehead
  2019-03-16 19:00 ` [PATCH 0/2] x86/CPU: Use correct Cyrix-specific macros Andy Lutomirski
  2 siblings, 1 reply; 7+ messages in thread
From: Matthew Whitehead @ 2019-03-14 20:46 UTC (permalink / raw)
  To: linux-kernel, tglx, mingo, luto; +Cc: Matthew Whitehead

The getCx86_old() and setCx86_old() macros have been replaced with
correctly working getCx86() and setCx86(), so remove these unused macros.

Signed-off-by: Matthew Whitehead <tedheadster@gmail.com>
---
 arch/x86/include/asm/processor-cyrix.h | 21 ---------------------
 1 file changed, 21 deletions(-)

diff --git a/arch/x86/include/asm/processor-cyrix.h b/arch/x86/include/asm/processor-cyrix.h
index aaedd73..df700a6 100644
--- a/arch/x86/include/asm/processor-cyrix.h
+++ b/arch/x86/include/asm/processor-cyrix.h
@@ -3,19 +3,6 @@
  * NSC/Cyrix CPU indexed register access. Must be inlined instead of
  * macros to ensure correct access ordering
  * Access order is always 0x22 (=offset), 0x23 (=value)
- *
- * When using the old macros a line like
- *   setCx86(CX86_CCR2, getCx86(CX86_CCR2) | 0x88);
- * gets expanded to:
- *  do {
- *    outb((CX86_CCR2), 0x22);
- *    outb((({
- *        outb((CX86_CCR2), 0x22);
- *        inb(0x23);
- *    }) | 0x88), 0x23);
- *  } while (0);
- *
- * which in fact violates the access order (= 0x22, 0x22, 0x23, 0x23).
  */
 
 static inline u8 getCx86(u8 reg)
@@ -29,11 +16,3 @@ static inline void setCx86(u8 reg, u8 data)
 	outb(reg, 0x22);
 	outb(data, 0x23);
 }
-
-#define getCx86_old(reg) ({ outb((reg), 0x22); inb(0x23); })
-
-#define setCx86_old(reg, data) do { \
-	outb((reg), 0x22); \
-	outb((data), 0x23); \
-} while (0)
-
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/2] x86/CPU: Use correct Cyrix-specific macros
  2019-03-14 20:45 [PATCH 0/2] x86/CPU: Use correct Cyrix-specific macros Matthew Whitehead
  2019-03-14 20:46 ` [PATCH 1/2] x86/CPU: Use correct macros for Cyrix calls on Geode processors Matthew Whitehead
  2019-03-14 20:46 ` [PATCH 2/2] x86/CPU: Remove {get,set}Cx86_old macros used for Cyrix processors Matthew Whitehead
@ 2019-03-16 19:00 ` Andy Lutomirski
  2 siblings, 0 replies; 7+ messages in thread
From: Andy Lutomirski @ 2019-03-16 19:00 UTC (permalink / raw)
  To: Matthew Whitehead; +Cc: LKML, Thomas Gleixner, Ingo Molnar, Andrew Lutomirski

On Thu, Mar 14, 2019 at 1:46 PM Matthew Whitehead <tedheadster@gmail.com> wrote:
>
> Replace the incorrect Cyrix-specific macro calls with the correct
> setCx86() and getCx86() calls. Also remove the unused setCx86_old(),
> getCx86_old() and their related comments in the code.
>
> Matthew Whitehead (2):
>   x86/CPU: Use correct macros for Cyrix calls on Geode processors
>   x86/CPU: Remove {get,set}Cx86_old macros used for Cyrix processors

This series looks reasonable to me.  Also, Matthew seems to be the
best tester around for this old hardware, so, if he says it works, I
believe him :)  I certainly can't test this stuff.

--Andy

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [tip:x86/urgent] x86/cpu/cyrix: Use correct macros for Cyrix calls on Geode processors
  2019-03-14 20:46 ` [PATCH 1/2] x86/CPU: Use correct macros for Cyrix calls on Geode processors Matthew Whitehead
@ 2019-03-21 11:40   ` tip-bot for Matthew Whitehead
  0 siblings, 0 replies; 7+ messages in thread
From: tip-bot for Matthew Whitehead @ 2019-03-21 11:40 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: mingo, tglx, tedheadster, linux-kernel, hpa

Commit-ID:  18fb053f9b827bd98cfc64f2a35df8ab19745a1d
Gitweb:     https://git.kernel.org/tip/18fb053f9b827bd98cfc64f2a35df8ab19745a1d
Author:     Matthew Whitehead <tedheadster@gmail.com>
AuthorDate: Thu, 14 Mar 2019 16:46:00 -0400
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Thu, 21 Mar 2019 12:28:50 +0100

x86/cpu/cyrix: Use correct macros for Cyrix calls on Geode processors

There are comments in processor-cyrix.h advising you to _not_ make calls
using the deprecated macros in this style:

  setCx86_old(CX86_CCR4, getCx86_old(CX86_CCR4) | 0x80);

This is because it expands the macro into a non-functioning calling
sequence. The calling order must be:

  outb(CX86_CCR2, 0x22);
  inb(0x23);

From the comments:

 * When using the old macros a line like
 *   setCx86(CX86_CCR2, getCx86(CX86_CCR2) | 0x88);
 * gets expanded to:
 *  do {
 *    outb((CX86_CCR2), 0x22);
 *    outb((({
 *        outb((CX86_CCR2), 0x22);
 *        inb(0x23);
 *    }) | 0x88), 0x23);
 *  } while (0);

The new macros fix this problem, so use them instead. Tested on an
actual Geode processor.

Signed-off-by: Matthew Whitehead <tedheadster@gmail.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: luto@kernel.org
Link: https://lkml.kernel.org/r/1552596361-8967-2-git-send-email-tedheadster@gmail.com

---
 arch/x86/kernel/cpu/cyrix.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kernel/cpu/cyrix.c b/arch/x86/kernel/cpu/cyrix.c
index d12226f60168..1d9b8aaea06c 100644
--- a/arch/x86/kernel/cpu/cyrix.c
+++ b/arch/x86/kernel/cpu/cyrix.c
@@ -124,7 +124,7 @@ static void set_cx86_reorder(void)
 	setCx86(CX86_CCR3, (ccr3 & 0x0f) | 0x10); /* enable MAPEN */
 
 	/* Load/Store Serialize to mem access disable (=reorder it) */
-	setCx86_old(CX86_PCR0, getCx86_old(CX86_PCR0) & ~0x80);
+	setCx86(CX86_PCR0, getCx86(CX86_PCR0) & ~0x80);
 	/* set load/store serialize from 1GB to 4GB */
 	ccr3 |= 0xe0;
 	setCx86(CX86_CCR3, ccr3);
@@ -135,11 +135,11 @@ static void set_cx86_memwb(void)
 	pr_info("Enable Memory-Write-back mode on Cyrix/NSC processor.\n");
 
 	/* CCR2 bit 2: unlock NW bit */
-	setCx86_old(CX86_CCR2, getCx86_old(CX86_CCR2) & ~0x04);
+	setCx86(CX86_CCR2, getCx86(CX86_CCR2) & ~0x04);
 	/* set 'Not Write-through' */
 	write_cr0(read_cr0() | X86_CR0_NW);
 	/* CCR2 bit 2: lock NW bit and set WT1 */
-	setCx86_old(CX86_CCR2, getCx86_old(CX86_CCR2) | 0x14);
+	setCx86(CX86_CCR2, getCx86(CX86_CCR2) | 0x14);
 }
 
 /*
@@ -153,14 +153,14 @@ static void geode_configure(void)
 	local_irq_save(flags);
 
 	/* Suspend on halt power saving and enable #SUSP pin */
-	setCx86_old(CX86_CCR2, getCx86_old(CX86_CCR2) | 0x88);
+	setCx86(CX86_CCR2, getCx86(CX86_CCR2) | 0x88);
 
 	ccr3 = getCx86(CX86_CCR3);
 	setCx86(CX86_CCR3, (ccr3 & 0x0f) | 0x10);	/* enable MAPEN */
 
 
 	/* FPU fast, DTE cache, Mem bypass */
-	setCx86_old(CX86_CCR4, getCx86_old(CX86_CCR4) | 0x38);
+	setCx86(CX86_CCR4, getCx86(CX86_CCR4) | 0x38);
 	setCx86(CX86_CCR3, ccr3);			/* disable MAPEN */
 
 	set_cx86_memwb();
@@ -296,7 +296,7 @@ static void init_cyrix(struct cpuinfo_x86 *c)
 		/* GXm supports extended cpuid levels 'ala' AMD */
 		if (c->cpuid_level == 2) {
 			/* Enable cxMMX extensions (GX1 Datasheet 54) */
-			setCx86_old(CX86_CCR7, getCx86_old(CX86_CCR7) | 1);
+			setCx86(CX86_CCR7, getCx86(CX86_CCR7) | 1);
 
 			/*
 			 * GXm : 0x30 ... 0x5f GXm  datasheet 51
@@ -319,7 +319,7 @@ static void init_cyrix(struct cpuinfo_x86 *c)
 		if (dir1 > 7) {
 			dir0_msn++;  /* M II */
 			/* Enable MMX extensions (App note 108) */
-			setCx86_old(CX86_CCR7, getCx86_old(CX86_CCR7)|1);
+			setCx86(CX86_CCR7, getCx86(CX86_CCR7)|1);
 		} else {
 			/* A 6x86MX - it has the bug. */
 			set_cpu_bug(c, X86_BUG_COMA);

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [tip:x86/urgent] x86/cpu/cyrix: Remove {get,set}Cx86_old macros used for Cyrix processors
  2019-03-14 20:46 ` [PATCH 2/2] x86/CPU: Remove {get,set}Cx86_old macros used for Cyrix processors Matthew Whitehead
@ 2019-03-21 11:40   ` tip-bot for Matthew Whitehead
  0 siblings, 0 replies; 7+ messages in thread
From: tip-bot for Matthew Whitehead @ 2019-03-21 11:40 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: tglx, tedheadster, linux-kernel, hpa, mingo

Commit-ID:  0f4d3aa761b71cd6984330baca1e18bf0590e441
Gitweb:     https://git.kernel.org/tip/0f4d3aa761b71cd6984330baca1e18bf0590e441
Author:     Matthew Whitehead <tedheadster@gmail.com>
AuthorDate: Thu, 14 Mar 2019 16:46:01 -0400
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Thu, 21 Mar 2019 12:28:50 +0100

x86/cpu/cyrix: Remove {get,set}Cx86_old macros used for Cyrix processors

The getCx86_old() and setCx86_old() macros have been replaced with
correctly working getCx86() and setCx86(), so remove these unused macros.

Signed-off-by: Matthew Whitehead <tedheadster@gmail.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: luto@kernel.org
Link: https://lkml.kernel.org/r/1552596361-8967-3-git-send-email-tedheadster@gmail.com

---
 arch/x86/include/asm/processor-cyrix.h | 21 ---------------------
 1 file changed, 21 deletions(-)

diff --git a/arch/x86/include/asm/processor-cyrix.h b/arch/x86/include/asm/processor-cyrix.h
index aaedd73ea2c6..df700a6cc869 100644
--- a/arch/x86/include/asm/processor-cyrix.h
+++ b/arch/x86/include/asm/processor-cyrix.h
@@ -3,19 +3,6 @@
  * NSC/Cyrix CPU indexed register access. Must be inlined instead of
  * macros to ensure correct access ordering
  * Access order is always 0x22 (=offset), 0x23 (=value)
- *
- * When using the old macros a line like
- *   setCx86(CX86_CCR2, getCx86(CX86_CCR2) | 0x88);
- * gets expanded to:
- *  do {
- *    outb((CX86_CCR2), 0x22);
- *    outb((({
- *        outb((CX86_CCR2), 0x22);
- *        inb(0x23);
- *    }) | 0x88), 0x23);
- *  } while (0);
- *
- * which in fact violates the access order (= 0x22, 0x22, 0x23, 0x23).
  */
 
 static inline u8 getCx86(u8 reg)
@@ -29,11 +16,3 @@ static inline void setCx86(u8 reg, u8 data)
 	outb(reg, 0x22);
 	outb(data, 0x23);
 }
-
-#define getCx86_old(reg) ({ outb((reg), 0x22); inb(0x23); })
-
-#define setCx86_old(reg, data) do { \
-	outb((reg), 0x22); \
-	outb((data), 0x23); \
-} while (0)
-

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 0/2] x86/CPU: Use correct Cyrix-specific macros
@ 2019-03-06 20:49 Matthew Whitehead
  0 siblings, 0 replies; 7+ messages in thread
From: Matthew Whitehead @ 2019-03-06 20:49 UTC (permalink / raw)
  To: linux-kernel, tglx, mingo, luto; +Cc: Matthew Whitehead

Replace the incorrect Cyrix-specific macro calls with the correct
setCx86() and getCx86() calls. Also remove the unused setCx86_old(),
getCx86_old() and their related comments in the code.

Matthew Whitehead (2):
  x86/CPU: Use correct macros for Cyrix calls on Geode processors
  x86/CPU: Remove {get,set}Cx86_old macros used for Cyrix processors

 arch/x86/include/asm/processor-cyrix.h | 21 ---------------------
 arch/x86/kernel/cpu/cyrix.c            | 14 +++++++-------
 2 files changed, 7 insertions(+), 28 deletions(-)

-- 
1.8.3.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2019-03-21 11:40 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-14 20:45 [PATCH 0/2] x86/CPU: Use correct Cyrix-specific macros Matthew Whitehead
2019-03-14 20:46 ` [PATCH 1/2] x86/CPU: Use correct macros for Cyrix calls on Geode processors Matthew Whitehead
2019-03-21 11:40   ` [tip:x86/urgent] x86/cpu/cyrix: " tip-bot for Matthew Whitehead
2019-03-14 20:46 ` [PATCH 2/2] x86/CPU: Remove {get,set}Cx86_old macros used for Cyrix processors Matthew Whitehead
2019-03-21 11:40   ` [tip:x86/urgent] x86/cpu/cyrix: " tip-bot for Matthew Whitehead
2019-03-16 19:00 ` [PATCH 0/2] x86/CPU: Use correct Cyrix-specific macros Andy Lutomirski
  -- strict thread matches above, loose matches on Subject: below --
2019-03-06 20:49 Matthew Whitehead

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).