答复: 答复: [tip:x86/cpu] x86/cpu: Create Zhaoxin processors architecture support file

2019-06-25 Thread Tony W Wang-oc
On Tue, 25 Jun 2019, Thomas Gleixner wrote:
> Tony,
> 
> On Tue, 25 Jun 2019, Tony W Wang-oc wrote:
> > On Sun, Jun 23, 2019, Joe Perches wrote:
> > > > x86/cpu: Create Zhaoxin processors architecture support file
> > > >
> > > []
> > > > diff --git a/arch/x86/kernel/cpu/zhaoxin.c
> b/arch/x86/kernel/cpu/zhaoxin.c
> > > []
> > > > +static void init_zhaoxin_cap(struct cpuinfo_x86 *c)
> > > > +{
> > > > +   u32  lo, hi;
> > > > +
> > > > +   /* Test for Extended Feature Flags presence */
> > > > +   if (cpuid_eax(0xC000) >= 0xC001) {
> > > > +   u32 tmp = cpuid_edx(0xC001);
> > > > +
> > > > +   /* Enable ACE unit, if present and disabled */
> > > > +   if ((tmp & (ACE_PRESENT | ACE_ENABLED)) == ACE_PRESENT) 
> > > > {
> > >
> > > trivia:
> > >
> > > Perhaps this is more intelligible for humans to read
> > > and it deduplicates the comment as:
> > >
> > >   if ((tmp & ACE_PRESENT) && !(tmp & ACE_ENABLED))
> > >
> > > The compiler produces the same object code.
> > >
> >
> > Thanks for the trivia, I will change this in the next version patch set.
> 
> as you might have noticed from the tip bot commit notification mail, your
> patch set has been merged into the tip tree and is queued for the 5.3 merge
> window. So a new patch set is pointless. If at all then you can send a
> delta patch.
> 
> Though I have to say, that I prefer the existing check:
> 
> > > > +   if ((tmp & (ACE_PRESENT | ACE_ENABLED)) == ACE_PRESENT) 
> > > > {
> 
> It's pretty clear, but that's really a matter of personal preference. So
> from my side there is nothing to do at all.

Got it, I will not change this code.

Thanks
TonyWWang-oc



Re: 答复: [tip:x86/cpu] x86/cpu: Create Zhaoxin processors architecture support file

2019-06-25 Thread Thomas Gleixner
Tony,

On Tue, 25 Jun 2019, Tony W Wang-oc wrote:
> On Sun, Jun 23, 2019, Joe Perches wrote:
> > > x86/cpu: Create Zhaoxin processors architecture support file
> > >
> > []
> > > diff --git a/arch/x86/kernel/cpu/zhaoxin.c b/arch/x86/kernel/cpu/zhaoxin.c
> > []
> > > +static void init_zhaoxin_cap(struct cpuinfo_x86 *c)
> > > +{
> > > + u32  lo, hi;
> > > +
> > > + /* Test for Extended Feature Flags presence */
> > > + if (cpuid_eax(0xC000) >= 0xC001) {
> > > + u32 tmp = cpuid_edx(0xC001);
> > > +
> > > + /* Enable ACE unit, if present and disabled */
> > > + if ((tmp & (ACE_PRESENT | ACE_ENABLED)) == ACE_PRESENT) {
> > 
> > trivia:
> > 
> > Perhaps this is more intelligible for humans to read
> > and it deduplicates the comment as:
> > 
> > if ((tmp & ACE_PRESENT) && !(tmp & ACE_ENABLED))
> > 
> > The compiler produces the same object code.
> > 
> 
> Thanks for the trivia, I will change this in the next version patch set.

as you might have noticed from the tip bot commit notification mail, your
patch set has been merged into the tip tree and is queued for the 5.3 merge
window. So a new patch set is pointless. If at all then you can send a
delta patch.

Though I have to say, that I prefer the existing check:

> > > + if ((tmp & (ACE_PRESENT | ACE_ENABLED)) == ACE_PRESENT) {

It's pretty clear, but that's really a matter of personal preference. So
from my side there is nothing to do at all.

Thanks,

tglx



答复: [tip:x86/cpu] x86/cpu: Create Zhaoxin processors architecture support file

2019-06-25 Thread Tony W Wang-oc
On Sun, Jun 23, 2019, Joe Perches wrote:
> > x86/cpu: Create Zhaoxin processors architecture support file
> >
> []
> > diff --git a/arch/x86/kernel/cpu/zhaoxin.c b/arch/x86/kernel/cpu/zhaoxin.c
> []
> > +static void init_zhaoxin_cap(struct cpuinfo_x86 *c)
> > +{
> > +   u32  lo, hi;
> > +
> > +   /* Test for Extended Feature Flags presence */
> > +   if (cpuid_eax(0xC000) >= 0xC001) {
> > +   u32 tmp = cpuid_edx(0xC001);
> > +
> > +   /* Enable ACE unit, if present and disabled */
> > +   if ((tmp & (ACE_PRESENT | ACE_ENABLED)) == ACE_PRESENT) {
> 
> trivia:
> 
> Perhaps this is more intelligible for humans to read
> and it deduplicates the comment as:
> 
>   if ((tmp & ACE_PRESENT) && !(tmp & ACE_ENABLED))
> 
> The compiler produces the same object code.
> 

Thanks for the trivia, I will change this in the next version patch set.

Thanks
TonyWWang-oc


Re: [tip:x86/cpu] x86/cpu: Create Zhaoxin processors architecture support file

2019-06-22 Thread Joe Perches
On Sat, 2019-06-22 at 03:16 -0700, tip-bot for Tony W Wang-oc wrote:
> Commit-ID:  761fdd5e3327db6c646a09bab5ad48cd42680cd2
> Gitweb: 
> https://git.kernel.org/tip/761fdd5e3327db6c646a09bab5ad48cd42680cd2
> Author: Tony W Wang-oc 
> AuthorDate: Tue, 18 Jun 2019 08:37:05 +
> Committer:  Thomas Gleixner 
> CommitDate: Sat, 22 Jun 2019 11:45:57 +0200
> 
> x86/cpu: Create Zhaoxin processors architecture support file
> 
[]
> diff --git a/arch/x86/kernel/cpu/zhaoxin.c b/arch/x86/kernel/cpu/zhaoxin.c
[]
> +static void init_zhaoxin_cap(struct cpuinfo_x86 *c)
> +{
> + u32  lo, hi;
> +
> + /* Test for Extended Feature Flags presence */
> + if (cpuid_eax(0xC000) >= 0xC001) {
> + u32 tmp = cpuid_edx(0xC001);
> +
> + /* Enable ACE unit, if present and disabled */
> + if ((tmp & (ACE_PRESENT | ACE_ENABLED)) == ACE_PRESENT) {

trivia:

Perhaps this is more intelligible for humans to read
and it deduplicates the comment as:

if ((tmp & ACE_PRESENT) && !(tmp & ACE_ENABLED))

The compiler produces the same object code.




[tip:x86/cpu] x86/cpu: Create Zhaoxin processors architecture support file

2019-06-22 Thread tip-bot for Tony W Wang-oc
Commit-ID:  761fdd5e3327db6c646a09bab5ad48cd42680cd2
Gitweb: https://git.kernel.org/tip/761fdd5e3327db6c646a09bab5ad48cd42680cd2
Author: Tony W Wang-oc 
AuthorDate: Tue, 18 Jun 2019 08:37:05 +
Committer:  Thomas Gleixner 
CommitDate: Sat, 22 Jun 2019 11:45:57 +0200

x86/cpu: Create Zhaoxin processors architecture support file

Add x86 architecture support for new Zhaoxin processors.
Carve out initialization code needed by Zhaoxin processors into
a separate compilation unit.

To identify Zhaoxin CPU, add a new vendor type X86_VENDOR_ZHAOXIN
for system recognition.

Signed-off-by: Tony W Wang-oc 
Signed-off-by: Thomas Gleixner 
Cc: "h...@zytor.com" 
Cc: "gre...@linuxfoundation.org" 
Cc: "r...@rjwysocki.net" 
Cc: "l...@kernel.org" 
Cc: David Wang 
Cc: "Cooper Yan(BJ-RD)" 
Cc: "Qiyuan Wang(BJ-RD)" 
Cc: "Herry Yang(BJ-RD)" 
Link: https://lkml.kernel.org/r/01042674b2f741b2aed1f797359bd...@zhaoxin.com

---
 MAINTAINERS  |   6 ++
 arch/x86/Kconfig.cpu |  13 +++
 arch/x86/include/asm/processor.h |   3 +-
 arch/x86/kernel/cpu/Makefile |   1 +
 arch/x86/kernel/cpu/zhaoxin.c| 167 +++
 5 files changed, 189 insertions(+), 1 deletion(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index 57f496cff999..dfdefc6cb3a2 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -17477,6 +17477,12 @@ Q: 
https://patchwork.linuxtv.org/project/linux-media/list/
 S: Maintained
 F: drivers/media/dvb-frontends/zd1301_demod*
 
+ZHAOXIN PROCESSOR SUPPORT
+M: Tony W Wang-oc 
+L: linux-kernel@vger.kernel.org
+S: Maintained
+F: arch/x86/kernel/cpu/zhaoxin.c
+
 ZPOOL COMPRESSED PAGE STORAGE API
 M: Dan Streetman 
 L: linux...@kvack.org
diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu
index 6adce15268bd..8e29c991ba3e 100644
--- a/arch/x86/Kconfig.cpu
+++ b/arch/x86/Kconfig.cpu
@@ -480,3 +480,16 @@ config CPU_SUP_UMC_32
  CPU might render the kernel unbootable.
 
  If unsure, say N.
+
+config CPU_SUP_ZHAOXIN
+   default y
+   bool "Support Zhaoxin processors" if PROCESSOR_SELECT
+   help
+ This enables detection, tunings and quirks for Zhaoxin processors
+
+ You need this enabled if you want your kernel to run on a
+ Zhaoxin CPU. Disabling this option on other types of CPUs
+ makes the kernel a tiny bit smaller. Disabling it on a Zhaoxin
+ CPU might render the kernel unbootable.
+
+ If unsure, say N.
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index c34a35c78618..e57d2ca2ed87 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -144,7 +144,8 @@ enum cpuid_regs_idx {
 #define X86_VENDOR_TRANSMETA   7
 #define X86_VENDOR_NSC 8
 #define X86_VENDOR_HYGON   9
-#define X86_VENDOR_NUM 10
+#define X86_VENDOR_ZHAOXIN 10
+#define X86_VENDOR_NUM 11
 
 #define X86_VENDOR_UNKNOWN 0xff
 
diff --git a/arch/x86/kernel/cpu/Makefile b/arch/x86/kernel/cpu/Makefile
index 5102bf7c8192..a7d9a4cb3ab6 100644
--- a/arch/x86/kernel/cpu/Makefile
+++ b/arch/x86/kernel/cpu/Makefile
@@ -38,6 +38,7 @@ obj-$(CONFIG_CPU_SUP_CYRIX_32)+= cyrix.o
 obj-$(CONFIG_CPU_SUP_CENTAUR)  += centaur.o
 obj-$(CONFIG_CPU_SUP_TRANSMETA_32) += transmeta.o
 obj-$(CONFIG_CPU_SUP_UMC_32)   += umc.o
+obj-$(CONFIG_CPU_SUP_ZHAOXIN)  += zhaoxin.o
 
 obj-$(CONFIG_X86_MCE)  += mce/
 obj-$(CONFIG_MTRR) += mtrr/
diff --git a/arch/x86/kernel/cpu/zhaoxin.c b/arch/x86/kernel/cpu/zhaoxin.c
new file mode 100644
index ..8e6f2f4b4afe
--- /dev/null
+++ b/arch/x86/kernel/cpu/zhaoxin.c
@@ -0,0 +1,167 @@
+// SPDX-License-Identifier: GPL-2.0
+#include 
+#include 
+
+#include 
+
+#include "cpu.h"
+
+#define MSR_ZHAOXIN_FCR57 0x1257
+
+#define ACE_PRESENT(1 << 6)
+#define ACE_ENABLED(1 << 7)
+#define ACE_FCR(1 << 7)/* MSR_ZHAOXIN_FCR */
+
+#define RNG_PRESENT(1 << 2)
+#define RNG_ENABLED(1 << 3)
+#define RNG_ENABLE (1 << 8)/* MSR_ZHAOXIN_RNG */
+
+#define X86_VMX_FEATURE_PROC_CTLS_TPR_SHADOW   0x0020
+#define X86_VMX_FEATURE_PROC_CTLS_VNMI 0x0040
+#define X86_VMX_FEATURE_PROC_CTLS_2ND_CTLS 0x8000
+#define X86_VMX_FEATURE_PROC_CTLS2_VIRT_APIC   0x0001
+#define X86_VMX_FEATURE_PROC_CTLS2_EPT 0x0002
+#define X86_VMX_FEATURE_PROC_CTLS2_VPID0x0020
+
+static void init_zhaoxin_cap(struct cpuinfo_x86 *c)
+{
+   u32  lo, hi;
+
+   /* Test for Extended Feature Flags presence */
+   if (cpuid_eax(0xC000) >= 0xC001) {
+   u32 tmp = cpuid_edx(0xC001);
+
+   /* Enable ACE unit, if present and disabled */
+   if ((tmp & (ACE_PRESENT | ACE_ENABLED)) == ACE_PRESENT) {
+   rdmsr(MSR_ZHAOXIN_FCR57, lo, hi);
+   /* Enable ACE unit */
+