mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	hwmon: (k10temp) Add support for F15h M60h
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: Borislav Petkov <bp@suse.de>
Acked-by: Clemens Ladisch <clemens@ladisch.de>
[Guenter Roeck: Declare new mutex and function static]
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
			
			
This commit is contained in:
		
							parent
							
								
									4222eb5f2b
								
							
						
					
					
						commit
						f89ce2706d
					
				
					 3 changed files with 34 additions and 5 deletions
				
			
		|  | @ -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' | ||||
|  |  | |||
|  | @ -280,8 +280,8 @@ config SENSORS_K10TEMP | |||
| 	  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. | ||||
|  |  | |||
|  | @ -33,6 +33,9 @@ static bool force; | |||
| module_param(force, bool, 0444); | ||||
| MODULE_PARM_DESC(force, "force loading on processors with erratum 319"); | ||||
| 
 | ||||
| /* Provide lock for writing to NB_SMU_IND_ADDR */ | ||||
| static DEFINE_MUTEX(nb_smu_ind_mutex); | ||||
| 
 | ||||
| /* CPUID function 0x80000001, ebx */ | ||||
| #define CPUID_PKGTYPE_MASK	0xf0000000 | ||||
| #define CPUID_PKGTYPE_F		0x00000000 | ||||
|  | @ -51,13 +54,38 @@ 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 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); | ||||
| } | ||||
| 
 | ||||
| static ssize_t show_temp(struct device *dev, | ||||
| 			 struct device_attribute *attr, char *buf) | ||||
| { | ||||
| 	u32 regval; | ||||
| 	struct pci_dev *pdev = to_pci_dev(dev); | ||||
| 
 | ||||
| 	pci_read_config_dword(to_pci_dev(dev), | ||||
| 			      REG_REPORTED_TEMPERATURE, ®val); | ||||
| 	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, | ||||
| 				      ®val); | ||||
| 	} else { | ||||
| 		pci_read_config_dword(pdev, REG_REPORTED_TEMPERATURE, ®val); | ||||
| 	} | ||||
| 	return sprintf(buf, "%u\n", (regval >> 21) * 125); | ||||
| } | ||||
| 
 | ||||
|  | @ -211,6 +239,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) }, | ||||
| 	{} | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Aravind Gopalakrishnan
						Aravind Gopalakrishnan