x86/amd_nb: Add support for Raven Ridge CPUs
Subsystems (3)
Guenter Roeck
maintainerPATCH v2 1/2 x86/amd_nb: Add support for Raven Ridge CPUs
Add Raven Ridge root bridge and data fabric PCI IDs. This is required for amd_pci_dev_to_node_id() and amd_smn_read().
---
v2: Use naming scheme suggested by Borislav Petkov.
arch/x86/kernel/amd_nb.c | 6 ++++++ 1 file changed, 6 insertions(+)
arch/x86/kernel/amd_nb.c +6 -0
@@ -14,8 +14,11 @@#include <asm/amd_nb.h> #define PCI_DEVICE_ID_AMD_17H_ROOT 0x1450 +#define PCI_DEVICE_ID_AMD_17H_M10H_ROOT 0x15d0#define PCI_DEVICE_ID_AMD_17H_DF_F3 0x1463#define PCI_DEVICE_ID_AMD_17H_DF_F4 0x1464 +#define PCI_DEVICE_ID_AMD_17H_M10H_DF_F3 0x15eb +#define PCI_DEVICE_ID_AMD_17H_M10H_DF_F4 0x15ec/* Protect the PCI config register pairs used for SMN and DF indirect access. */ static DEFINE_MUTEX (smn_mutex);
@@ -24,6 +27,7 @@ static u32 *flush_words;static const struct pci_device_id amd_root_ids[] = { {PCI_DEVICE (PCI_VENDOR_ID_AMD ,PCI_DEVICE_ID_AMD_17H_ROOT ) }, + {PCI_DEVICE (PCI_VENDOR_ID_AMD ,PCI_DEVICE_ID_AMD_17H_M10H_ROOT ) }, {} };
@@ -39,6 +43,7 @@ const struct pci_device_id amd_nb_misc_ids[] = { { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_16H_NB_F3) }, { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F3) }, { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_DF_F3) }, + { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_M10H_DF_F3) }, { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CNB17H_F3) }, {} };
@@ -51,6 +56,7 @@ static const struct pci_device_id amd_nb_link_ids[] = { { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_16H_NB_F4) }, { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F4) }, { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_DF_F4) }, + { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_17H_M10H_DF_F4) }, { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CNB17H_F4) }, {} };
Signature · 1 line
2.7.4
Guenter Roeck
maintainerPATCH v2 2/2 hwmon: (k10temp) Use API function to access System Management Network
The SMN (System Management Network) on Family 17h AMD CPUs is also accessed from other drivers, specifically EDAC. Accessing it directly is racy. On top of that, accessing the SMN through root bridge 00:00 is wrong on multi-die CPUs and may result in reading the temperature from the wrong die. Use available API functions to fix the problem.
For this to work, also change the Raven Ridge PCI device ID to point to Data Fabric Function 3, since this ID is used by the API functions to find the CPU node.
---
v2: Fix Raven Ridge device ID and use naming scheme suggested by
Borislav Petkov.
drivers/hwmon/k10temp.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-)
drivers/hwmon/k10temp.c +6 -5
@@ -23,6 +23,7 @@#include <linux/init.h> #include <linux/module.h> #include <linux/pci.h> +#include <asm/amd_nb.h> #include <asm/processor.h> MODULE_DESCRIPTION ("AMD Family 10h+ CPU core temperature monitor" );
@@ -44,8 +45,8 @@ static DEFINE_MUTEX(nb_smu_ind_mutex);#define PCI_DEVICE_ID_AMD_17H_DF_F3 0x1463#endif -#ifndef PCI_DEVICE_ID_AMD_17H_RR_NB -#define PCI_DEVICE_ID_AMD_17H_RR_NB 0x15d0 +#ifndef PCI_DEVICE_ID_AMD_17H_M10H_DF_F3 +#define PCI_DEVICE_ID_AMD_17H_M10H_DF_F3 0x15eb#endif /* CPUID function 0x80000001, ebx */
@@ -140,8 +141,8 @@ static void read_tempreg_nb_f15(struct pci_dev *pdev, u32 *regval)static void read_tempreg_nb_f17 (struct pci_dev *pdev,u32 *regval) { -amd_nb_index_read (pdev,PCI_DEVFN (0 ,0 ),0x60 , -F17H_M01H_REPORTED_TEMP_CTRL_OFFSET , regval); +amd_smn_read (amd_pci_dev_to_node_id (pdev), +F17H_M01H_REPORTED_TEMP_CTRL_OFFSET , regval); } static ssize_t temp1_input_show(struct device *dev,
@@ -327,7 +328,7 @@ static const struct pci_device_id k10temp_id_table[] = { { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_NB_F3) }, { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F3) }, { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_17H_DF_F3) }, - { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_17H_RR_NB) }, + { PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_17H_M10H_DF_F3) }, {} };MODULE_DEVICE_TABLE (pci, k10temp_id_table);
Signature · 1 line
2.7.4
kbuild test robot
build botRe: [PATCH v2 2/2] hwmon: (k10temp) Use API function to access System Management Network
I love your patch! Yet something to improve:
Hi Guenter,
I love your patch! Yet something to improve:
[auto build test ERROR on tip/auto-latest]
[also build test ERROR on v4.17-rc3 next-20180501]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Guenter-Roeck/x86-amd_nb-Add-support-for-Raven-Ridge-CPUs/20180502-024535
config: i386-randconfig-x016-201817 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0 reproduce:
# save the attached .config to linux build tree
make ARCH=i386 All errors (new ones prefixed by >>):
drivers/hwmon/k10temp.c: In function 'read_tempreg_nb_f17':
>> drivers/hwmon/k10temp.c:126:15: error: implicit declaration of function 'amd_pci_dev_to_node_id'; did you mean 'pci_set_of_node'? [-Werror=implicit-function-declaration]
amd_smn_read(amd_pci_dev_to_node_id(pdev),
^~~~~~~~~~~~~~~~~~~~~~
pci_set_of_nodecc1: some warnings being treated as errors
vim +126 drivers/hwmon/k10temp.c
123
124 static void read_tempreg_nb_f17(struct pci_dev *pdev, u32 *regval)
125 {
> 126 amd_smn_read(amd_pci_dev_to_node_id(pdev),
127 F17H_M01H_REPORTED_TEMP_CTRL_OFFSET, regval);
128 }
129
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
Guenter Roeck
maintainerRe: [PATCH v2 2/2] hwmon: (k10temp) Use API function to access System Management Network
Quoted 15 lines · kbuild test robot
Hi Guenter,
I love your patch! Yet something to improve:
[auto build test ERROR on tip/auto-latest]
[also build test ERROR on v4.17-rc3 next-20180501]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]url: https://github.com/0day-ci/linux/commits/Guenter-Roeck/x86-amd_nb-Add-support-for-Raven-Ridge-CPUs/20180502-024535
config: i386-randconfig-x016-201817 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0 reproduce:# save the attached .config to linux build tree make ARCH=i386
Quoted 9 lines
All errors (new ones prefixed by >>):
drivers/hwmon/k10temp.c: In function 'read_tempreg_nb_f17':Quoted 1 line
Quoted 1 line
drivers/hwmon/k10temp.c:126:15: error: implicit declaration of function 'amd_pci_dev_to_node_id'; did you mean 'pci_set_of_node'? [-Werror=implicit-function-declaration]amd_smn_read(amd_pci_dev_to_node_id(pdev), ^~~~~~~~~~~~~~~~~~~~~~ pci_set_of_nodecc1: some warnings being treated as errors
What would we do without 0day. The driver needs to depend on CONFIG_AMD_NB, which makes sense anyway. I'll add that dependency in v3.
Guenter
Quoted 13 lines
vim +126
drivers/hwmon/k10temp.c123 124 static void read_tempreg_nb_f17(struct pci_dev *pdev, u32 *regval) 125 {Quoted 1 line
126 amd_smn_read(amd_pci_dev_to_node_id(pdev),
127 F17H_M01H_REPORTED_TEMP_CTRL_OFFSET, regval); 128 } 129---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
kbuild test robot
build botRe: [PATCH v2 2/2] hwmon: (k10temp) Use API function to access System Management Network
In reply to Guenter RoeckI love your patch! Yet something to improve:
Hi Guenter,
I love your patch! Yet something to improve:
[auto build test ERROR on tip/auto-latest]
[also build test ERROR on v4.17-rc3 next-20180501]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Guenter-Roeck/x86-amd_nb-Add-support-for-Raven-Ridge-CPUs/20180502-024535
config: x86_64-randconfig-ne0-05020110 (attached as .config)
compiler: gcc-6 (Debian 6.4.0-9) 6.4.0 20171026 reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64 All errors (new ones prefixed by >>):
drivers//hwmon/k10temp.c: In function 'read_tempreg_nb_f17':
>> drivers//hwmon/k10temp.c:126:15: error: implicit declaration of function 'amd_pci_dev_to_node_id' [-Werror=implicit-function-declaration]
amd_smn_read(amd_pci_dev_to_node_id(pdev),
^~~~~~~~~~~~~~~~~~~~~~cc1: some warnings being treated as errors
vim +/amd_pci_dev_to_node_id +126 drivers//hwmon/k10temp.c
123
124 static void read_tempreg_nb_f17(struct pci_dev *pdev, u32 *regval)
125 {
> 126 amd_smn_read(amd_pci_dev_to_node_id(pdev),
127 F17H_M01H_REPORTED_TEMP_CTRL_OFFSET, regval);
128 }
129
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation