All of lore.kernel.org
 help / color / mirror / Atom feed
From: Clemens Ladisch <clemens@ladisch.de>
To: Aravind Gopalakrishnan <aravind.gopalakrishnan@amd.com>,
	linux@roeck-us.net, jdelvare@suse.de, rdunlap@infradead.org,
	tglx@linutronix.de, mingo@redhat.com, hpa@zytor.com, bp@suse.de
Cc: dan.carpenter@oracle.com, lm-sensors@lm-sensors.org,
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [lm-sensors] [PATCH V2] hwmon, k10temp: Add support for F15h M60h
Date: Thu, 14 Aug 2014 17:32:31 +0000	[thread overview]
Message-ID: <53ECF2AF.6020306@ladisch.de> (raw)
In-Reply-To: <1408035262-18026-1-git-send-email-aravind.gopalakrishnan@amd.com>

Aravind Gopalakrishnan wrote:
> This patch adds temperature monitoring support for F15h M60h processor.
>  - Add new pci device id for the relevant processor
>  - The functionality of REG_REPORTED_TEMPERATURE is moved to
>    D0F0xBC_xD820_0CA4 [Reported Temperature Control]
>    - So, use this to get CUR_TEMP value
>    - Since we need an indirect register access, protect this with
>      a mutex lock
>  - Add Kconfig, Doc entries to indicate support for this processor.
>
> Signed-off-by: Aravind Gopalakrishnan <aravind.gopalakrishnan@amd.com>

Acked-by: Clemens Ladisch <clemens@ladisch.de>

> ---
> Changes in V2:
>  - Prevent race with other code that may require indirect NB_SMU_REG access
>  - Fix some minor style issues
>
>  Documentation/hwmon/k10temp   |  2 +-
>  arch/x86/include/asm/amd_nb.h |  2 ++
>  arch/x86/kernel/amd_nb.c      | 15 +++++++++++++++
>  drivers/hwmon/Kconfig         |  6 +++---
>  drivers/hwmon/k10temp.c       | 22 +++++++++++++++++++---
>  5 files changed, 40 insertions(+), 7 deletions(-)
>
> diff --git a/Documentation/hwmon/k10temp b/Documentation/hwmon/k10temp
> index ee6d30e..254d2f5 100644
> --- a/Documentation/hwmon/k10temp
> +++ b/Documentation/hwmon/k10temp
> @@ -11,7 +11,7 @@ Supported chips:
>    Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra)
>  * AMD Family 12h processors: "Llano" (E2/A4/A6/A8-Series)
>  * AMD Family 14h processors: "Brazos" (C/E/G/Z-Series)
> -* AMD Family 15h processors: "Bulldozer" (FX-Series), "Trinity", "Kaveri"
> +* AMD Family 15h processors: "Bulldozer" (FX-Series), "Trinity", "Kaveri", "Carrizo"
>  * AMD Family 16h processors: "Kabini", "Mullins"
>
>    Prefix: 'k10temp'
> diff --git a/arch/x86/include/asm/amd_nb.h b/arch/x86/include/asm/amd_nb.h
> index aaac3b2..e2bf43d 100644
> --- a/arch/x86/include/asm/amd_nb.h
> +++ b/arch/x86/include/asm/amd_nb.h
> @@ -20,6 +20,8 @@ extern void amd_flush_garts(void);
>  extern int amd_numa_init(void);
>  extern int amd_get_subcaches(int);
>  extern int amd_set_subcaches(int, unsigned long);
> +/* helper function for reading from NB_SMU_IND_DATA */
> +extern void amd_nb_smu_index_read(struct pci_dev *, unsigned int, int, u32 *);
>
>  struct amd_l3_cache {
>  	unsigned indices;
> diff --git a/arch/x86/kernel/amd_nb.c b/arch/x86/kernel/amd_nb.c
> index f04dbb3..6008e1d 100644
> --- a/arch/x86/kernel/amd_nb.c
> +++ b/arch/x86/kernel/amd_nb.c
> @@ -13,6 +13,9 @@
>  #include <linux/spinlock.h>
>  #include <asm/amd_nb.h>
>
> +/* Provide lock for writing to NB_SMU_IND_ADDR */
> +DEFINE_MUTEX(nb_smu_ind_mutex);
> +
>  static u32 *flush_words;
>
>  const struct pci_device_id amd_nb_misc_ids[] = {
> @@ -221,6 +224,18 @@ int amd_set_subcaches(int cpu, unsigned long mask)
>  	return 0;
>  }
>
> +void amd_nb_smu_index_read(struct pci_dev *pdev, unsigned int devfn,
> +			   int offset, u32 *val)
> +{
> +	mutex_lock(&nb_smu_ind_mutex);
> +	pci_bus_write_config_dword(pdev->bus, devfn,
> +				   0xb8, offset);
> +	pci_bus_read_config_dword(pdev->bus, devfn,
> +				  0xbc, val);
> +	mutex_unlock(&nb_smu_ind_mutex);
> +}
> +EXPORT_SYMBOL_GPL(amd_nb_smu_index_read);
> +
>  static int amd_cache_gart(void)
>  {
>  	u16 i;
> diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
> index 02d3d85..0234a08 100644
> --- a/drivers/hwmon/Kconfig
> +++ b/drivers/hwmon/Kconfig
> @@ -275,13 +275,13 @@ config SENSORS_K8TEMP
>
>  config SENSORS_K10TEMP
>  	tristate "AMD Family 10h+ temperature sensor"
> -	depends on X86 && PCI
> +	depends on X86 && PCI && AMD_NB
>  	help
>  	  If you say yes here you get support for the temperature
>  	  sensor(s) inside your CPU. Supported are later revisions of
>  	  the AMD Family 10h and all revisions of the AMD Family 11h,
> -	  12h (Llano), 14h (Brazos), 15h (Bulldozer/Trinity/Kaveri) and
> -	  16h (Kabini/Mullins) microarchitectures.
> +	  12h (Llano), 14h (Brazos), 15h (Bulldozer/Trinity/Kaveri/Carrizo)
> +	  and 16h (Kabini/Mullins) microarchitectures.
>
>  	  This driver can also be built as a module.  If so, the module
>  	  will be called k10temp.
> diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c
> index f7b46f6..c7422c5 100644
> --- a/drivers/hwmon/k10temp.c
> +++ b/drivers/hwmon/k10temp.c
> @@ -24,6 +24,7 @@
>  #include <linux/module.h>
>  #include <linux/pci.h>
>  #include <asm/processor.h>
> +#include <asm/amd_nb.h>
>
>  MODULE_DESCRIPTION("AMD Family 10h+ CPU core temperature monitor");
>  MODULE_AUTHOR("Clemens Ladisch <clemens@ladisch.de>");
> @@ -51,13 +52,27 @@ MODULE_PARM_DESC(force, "force loading on processors with erratum 319");
>  #define REG_NORTHBRIDGE_CAPABILITIES	0xe8
>  #define  NB_CAP_HTC			0x00000400
>
> +/*
> + * For F15h M60h, functionality of REG_REPORTED_TEMPERATURE
> + * has been moved to D0F0xBC_xD820_0CA4 [Reported Temperature
> + * Control]
> + */
> +#define F15H_M60H_REPORTED_TEMP_CTRL_OFFSET	0xd8200ca4
> +#define PCI_DEVICE_ID_AMD_15H_M60H_NB_F3	0x1573
> +
>  static ssize_t show_temp(struct device *dev,
>  			 struct device_attribute *attr, char *buf)
>  {
>  	u32 regval;
> -
> -	pci_read_config_dword(to_pci_dev(dev),
> -			      REG_REPORTED_TEMPERATURE, &regval);
> +	struct pci_dev *pdev = to_pci_dev(dev);
> +
> +	if (boot_cpu_data.x86 = 0x15 && boot_cpu_data.x86_model = 0x60) {
> +		amd_nb_smu_index_read(pdev, PCI_DEVFN(0, 0),
> +				      F15H_M60H_REPORTED_TEMP_CTRL_OFFSET,
> +				      &regval);
> +	} else {
> +		pci_read_config_dword(pdev, REG_REPORTED_TEMPERATURE, &regval);
> +	}
>  	return sprintf(buf, "%u\n", (regval >> 21) * 125);
>  }
>
> @@ -211,6 +226,7 @@ static const struct pci_device_id k10temp_id_table[] = {
>  	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_NB_F3) },
>  	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M10H_F3) },
>  	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M30H_NB_F3) },
> +	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M60H_NB_F3) },
>  	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_NB_F3) },
>  	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F3) },
>  	{}
>



_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors

WARNING: multiple messages have this Message-ID (diff)
From: Clemens Ladisch <clemens@ladisch.de>
To: Aravind Gopalakrishnan <aravind.gopalakrishnan@amd.com>,
	linux@roeck-us.net, jdelvare@suse.de, rdunlap@infradead.org,
	tglx@linutronix.de, mingo@redhat.com, hpa@zytor.com, bp@suse.de
Cc: dan.carpenter@oracle.com, lm-sensors@lm-sensors.org,
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH V2] hwmon, k10temp: Add support for F15h M60h
Date: Thu, 14 Aug 2014 19:32:31 +0200	[thread overview]
Message-ID: <53ECF2AF.6020306@ladisch.de> (raw)
In-Reply-To: <1408035262-18026-1-git-send-email-aravind.gopalakrishnan@amd.com>

Aravind Gopalakrishnan wrote:
> This patch adds temperature monitoring support for F15h M60h processor.
>  - Add new pci device id for the relevant processor
>  - The functionality of REG_REPORTED_TEMPERATURE is moved to
>    D0F0xBC_xD820_0CA4 [Reported Temperature Control]
>    - So, use this to get CUR_TEMP value
>    - Since we need an indirect register access, protect this with
>      a mutex lock
>  - Add Kconfig, Doc entries to indicate support for this processor.
>
> Signed-off-by: Aravind Gopalakrishnan <aravind.gopalakrishnan@amd.com>

Acked-by: Clemens Ladisch <clemens@ladisch.de>

> ---
> Changes in V2:
>  - Prevent race with other code that may require indirect NB_SMU_REG access
>  - Fix some minor style issues
>
>  Documentation/hwmon/k10temp   |  2 +-
>  arch/x86/include/asm/amd_nb.h |  2 ++
>  arch/x86/kernel/amd_nb.c      | 15 +++++++++++++++
>  drivers/hwmon/Kconfig         |  6 +++---
>  drivers/hwmon/k10temp.c       | 22 +++++++++++++++++++---
>  5 files changed, 40 insertions(+), 7 deletions(-)
>
> diff --git a/Documentation/hwmon/k10temp b/Documentation/hwmon/k10temp
> index ee6d30e..254d2f5 100644
> --- a/Documentation/hwmon/k10temp
> +++ b/Documentation/hwmon/k10temp
> @@ -11,7 +11,7 @@ Supported chips:
>    Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra)
>  * AMD Family 12h processors: "Llano" (E2/A4/A6/A8-Series)
>  * AMD Family 14h processors: "Brazos" (C/E/G/Z-Series)
> -* AMD Family 15h processors: "Bulldozer" (FX-Series), "Trinity", "Kaveri"
> +* AMD Family 15h processors: "Bulldozer" (FX-Series), "Trinity", "Kaveri", "Carrizo"
>  * AMD Family 16h processors: "Kabini", "Mullins"
>
>    Prefix: 'k10temp'
> diff --git a/arch/x86/include/asm/amd_nb.h b/arch/x86/include/asm/amd_nb.h
> index aaac3b2..e2bf43d 100644
> --- a/arch/x86/include/asm/amd_nb.h
> +++ b/arch/x86/include/asm/amd_nb.h
> @@ -20,6 +20,8 @@ extern void amd_flush_garts(void);
>  extern int amd_numa_init(void);
>  extern int amd_get_subcaches(int);
>  extern int amd_set_subcaches(int, unsigned long);
> +/* helper function for reading from NB_SMU_IND_DATA */
> +extern void amd_nb_smu_index_read(struct pci_dev *, unsigned int, int, u32 *);
>
>  struct amd_l3_cache {
>  	unsigned indices;
> diff --git a/arch/x86/kernel/amd_nb.c b/arch/x86/kernel/amd_nb.c
> index f04dbb3..6008e1d 100644
> --- a/arch/x86/kernel/amd_nb.c
> +++ b/arch/x86/kernel/amd_nb.c
> @@ -13,6 +13,9 @@
>  #include <linux/spinlock.h>
>  #include <asm/amd_nb.h>
>
> +/* Provide lock for writing to NB_SMU_IND_ADDR */
> +DEFINE_MUTEX(nb_smu_ind_mutex);
> +
>  static u32 *flush_words;
>
>  const struct pci_device_id amd_nb_misc_ids[] = {
> @@ -221,6 +224,18 @@ int amd_set_subcaches(int cpu, unsigned long mask)
>  	return 0;
>  }
>
> +void amd_nb_smu_index_read(struct pci_dev *pdev, unsigned int devfn,
> +			   int offset, u32 *val)
> +{
> +	mutex_lock(&nb_smu_ind_mutex);
> +	pci_bus_write_config_dword(pdev->bus, devfn,
> +				   0xb8, offset);
> +	pci_bus_read_config_dword(pdev->bus, devfn,
> +				  0xbc, val);
> +	mutex_unlock(&nb_smu_ind_mutex);
> +}
> +EXPORT_SYMBOL_GPL(amd_nb_smu_index_read);
> +
>  static int amd_cache_gart(void)
>  {
>  	u16 i;
> diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
> index 02d3d85..0234a08 100644
> --- a/drivers/hwmon/Kconfig
> +++ b/drivers/hwmon/Kconfig
> @@ -275,13 +275,13 @@ config SENSORS_K8TEMP
>
>  config SENSORS_K10TEMP
>  	tristate "AMD Family 10h+ temperature sensor"
> -	depends on X86 && PCI
> +	depends on X86 && PCI && AMD_NB
>  	help
>  	  If you say yes here you get support for the temperature
>  	  sensor(s) inside your CPU. Supported are later revisions of
>  	  the AMD Family 10h and all revisions of the AMD Family 11h,
> -	  12h (Llano), 14h (Brazos), 15h (Bulldozer/Trinity/Kaveri) and
> -	  16h (Kabini/Mullins) microarchitectures.
> +	  12h (Llano), 14h (Brazos), 15h (Bulldozer/Trinity/Kaveri/Carrizo)
> +	  and 16h (Kabini/Mullins) microarchitectures.
>
>  	  This driver can also be built as a module.  If so, the module
>  	  will be called k10temp.
> diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c
> index f7b46f6..c7422c5 100644
> --- a/drivers/hwmon/k10temp.c
> +++ b/drivers/hwmon/k10temp.c
> @@ -24,6 +24,7 @@
>  #include <linux/module.h>
>  #include <linux/pci.h>
>  #include <asm/processor.h>
> +#include <asm/amd_nb.h>
>
>  MODULE_DESCRIPTION("AMD Family 10h+ CPU core temperature monitor");
>  MODULE_AUTHOR("Clemens Ladisch <clemens@ladisch.de>");
> @@ -51,13 +52,27 @@ MODULE_PARM_DESC(force, "force loading on processors with erratum 319");
>  #define REG_NORTHBRIDGE_CAPABILITIES	0xe8
>  #define  NB_CAP_HTC			0x00000400
>
> +/*
> + * For F15h M60h, functionality of REG_REPORTED_TEMPERATURE
> + * has been moved to D0F0xBC_xD820_0CA4 [Reported Temperature
> + * Control]
> + */
> +#define F15H_M60H_REPORTED_TEMP_CTRL_OFFSET	0xd8200ca4
> +#define PCI_DEVICE_ID_AMD_15H_M60H_NB_F3	0x1573
> +
>  static ssize_t show_temp(struct device *dev,
>  			 struct device_attribute *attr, char *buf)
>  {
>  	u32 regval;
> -
> -	pci_read_config_dword(to_pci_dev(dev),
> -			      REG_REPORTED_TEMPERATURE, &regval);
> +	struct pci_dev *pdev = to_pci_dev(dev);
> +
> +	if (boot_cpu_data.x86 == 0x15 && boot_cpu_data.x86_model == 0x60) {
> +		amd_nb_smu_index_read(pdev, PCI_DEVFN(0, 0),
> +				      F15H_M60H_REPORTED_TEMP_CTRL_OFFSET,
> +				      &regval);
> +	} else {
> +		pci_read_config_dword(pdev, REG_REPORTED_TEMPERATURE, &regval);
> +	}
>  	return sprintf(buf, "%u\n", (regval >> 21) * 125);
>  }
>
> @@ -211,6 +226,7 @@ static const struct pci_device_id k10temp_id_table[] = {
>  	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_NB_F3) },
>  	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M10H_F3) },
>  	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M30H_NB_F3) },
> +	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_15H_M60H_NB_F3) },
>  	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_NB_F3) },
>  	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F3) },
>  	{}
>



  reply	other threads:[~2014-08-14 17:32 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-14 16:54 [lm-sensors] [PATCH V2] hwmon, k10temp: Add support for F15h M60h Aravind Gopalakrishnan
2014-08-14 16:54 ` Aravind Gopalakrishnan
2014-08-14 17:32 ` Clemens Ladisch [this message]
2014-08-14 17:32   ` Clemens Ladisch
2014-08-14 20:17 ` [lm-sensors] " Guenter Roeck
2014-08-14 20:17   ` Guenter Roeck
2014-08-14 20:22   ` [lm-sensors] " Clemens Ladisch
2014-08-14 20:22     ` Clemens Ladisch
2014-08-14 21:08     ` [lm-sensors] " Borislav Petkov
2014-08-14 21:08       ` Borislav Petkov
2014-08-14 21:57       ` [lm-sensors] " Aravind Gopalakrishnan
2014-08-14 21:57         ` Aravind Gopalakrishnan
2014-08-14 22:05         ` [lm-sensors] " Borislav Petkov
2014-08-14 22:05           ` Borislav Petkov
2014-08-14 22:20           ` [lm-sensors] " Aravind Gopalakrishnan
2014-08-14 22:20             ` Aravind Gopalakrishnan

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=53ECF2AF.6020306@ladisch.de \
    --to=clemens@ladisch.de \
    --cc=aravind.gopalakrishnan@amd.com \
    --cc=bp@suse.de \
    --cc=dan.carpenter@oracle.com \
    --cc=hpa@zytor.com \
    --cc=jdelvare@suse.de \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=lm-sensors@lm-sensors.org \
    --cc=mingo@redhat.com \
    --cc=rdunlap@infradead.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.