Compare commits

...

17 Commits

Author SHA1 Message Date
Anthony Wang c176fdb0d5
Add Lucienne support
Thanks Lukas Stockner!
2022-11-03 21:24:08 -04:00
Anthony Wang c36a86c64b
Use -Wno-implicit-fallthrough instead of -Wimplicit-fallthrough=3 to support clang 2022-04-13 08:27:39 -05:00
Anthony Wang ccc7d9e2d1
Merge pull request #9 from axelgenus/master
Fixed fall-through warning/error.
2022-03-10 07:30:47 -06:00
Alessandro Calori 184c4c7797 Fixed fall-through warning/error. 2022-03-10 09:25:34 +01:00
Anthony Wang 27eb87fb05
Merge pull request #7 from h3o66/fedora-copr
Add Fedora copr package repo to README
2022-02-26 17:01:23 -06:00
Christian d2582d9194 Add Fedora copr package repo to README 2022-02-26 23:30:59 +01:00
Anthony Wang 2ab1693f4b
Bump version to 0.2.0 2021-12-19 09:56:44 -06:00
Anthony Wang 318d591b12
Update README to point to zenmonitor3 2021-12-16 11:40:25 -06:00
Anthony Wang 3773f2a7b2
Create debugging script
https://gist.github.com/ocerman/6566b00072c8af96a109f65075f2d8b7
2021-12-16 11:24:40 -06:00
Anthony Wang 16e81693e5
Add alternate register base for Zen 2 and 3 APUs
https://github.com/ocerman/zenpower/issues/31
2021-12-16 11:22:55 -06:00
Anthony Wang a0cdb44fc5
Expose amps and ad SVI_TEL_PLANE defines for Zen3 2021-12-16 08:20:44 -06:00
Anthony Wang 90637b5561
Add correct Cezanne PCI IDs
The IDs can be found here: ac08b1c68d/include/linux/pci_ids.h
2021-12-15 09:14:28 -06:00
Anthony Wang aba5677583
Fix #4: Fix PCI Device ID typo 2021-11-13 15:51:07 -06:00
Anthony Wang 5ed3765eff
WIP #2: Add Zen 3 APU PCI IDs 2021-11-12 19:55:24 -06:00
Anthony Wang 625e56d034
Remove *.mod files from git 2021-09-25 20:12:01 -05:00
Anthony Wang 938c36c3dc
WIP: #2 add Cezanne support 2021-09-25 20:06:18 -05:00
Anthony Wang 7cc5f1fefb
Update README.md 2021-06-20 00:06:45 +00:00
5 changed files with 74 additions and 10 deletions

1
.gitignore vendored
View File

@ -1,5 +1,6 @@
*.ko
*.o
*.mod
*.mod.c
.tmp_versions/
*.order

View File

@ -1,7 +1,9 @@
VERSION := 0.1.12
VERSION := 0.2.0
TARGET := $(shell uname -r)
DKMS_ROOT_PATH := /usr/src/zenpower-$(VERSION)
KBUILD_CFLAGS += -Wno-implicit-fallthrough
KERNEL_MODULES := /lib/modules/$(TARGET)
ifneq ("","$(wildcard /usr/src/linux-headers-$(TARGET)/*)")

View File

@ -5,10 +5,10 @@ Make sure that your Linux kernel have support for your CPUs as Zenpower is using
For AMD family 17h Model 70h (Ryzen 3000) CPUs you need kernel version 5.3.4 or newer or kernel with this patch: https://patchwork.kernel.org/patch/11043277/
## Installation
You can install this module via dkms.
You can install this module via DKMS.
### Installation commands for Ubuntu
```
### Installation for Ubuntu
```sh
sudo apt install dkms git build-essential linux-headers-$(uname -r)
cd ~
git clone https://github.com/Ta180m/zenpower3.git
@ -16,8 +16,14 @@ cd zenpower3
sudo make dkms-install
```
### Installation for Arch
You can install the [AUR package](https://aur.archlinux.org/packages/zenpower3-dkms/).
### Installation for Fedora 35+
You can install it from the [copr package repo](https://copr.fedorainfracloud.org/coprs/birkch/zenpower3/)
## Module activation
Because zenpower is using same PCI device as k10temp, you have to disable k10temp first.
Because zenpower is using same PCI device as k10temp, you have to disable k10temp first. This is automatically done by the AUR package.
1. Check if k10temp is active. `lsmod | grep k10temp`
2. Unload k10temp `sudo modprobe -r k10temp`
@ -27,7 +33,7 @@ Because zenpower is using same PCI device as k10temp, you have to disable k10tem
*If k10temp is not blacklisted, you may have to manually unload k10temp after each restart.
## Sensors monitoring
You can use this app: [zenmonitor](https://github.com/ocerman/zenmonitor), or your favourie sensors monitoring software
You can use the `sensors` command, [zenmonitor3](https://github.com/Ta180m/zenmonitor3), or your favorite sensors monitoring software.
## Update instructions
1. Unload zenpower `sudo modprobe -r zenpower`

View File

@ -1,7 +1,7 @@
/*
* Zenpower - Driver for reading temperature, voltage, current and power for AMD 17h CPUs
*
* Copyright (c) 2018-2020 Ondrej Čerman
* Copyright (c) 2018-2021 Anthony Wang
*
* This driver is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License; either
@ -18,6 +18,8 @@
*/
/*
* forked from the original zenpower by Ondrej Čerman
*
* based on k10temp by Clemens Ladisch
*
* Docs:
@ -36,9 +38,9 @@
#include <asm/amd_nb.h>
MODULE_DESCRIPTION("AMD ZEN family CPU Sensors Driver");
MODULE_AUTHOR("Ondrej Čerman");
MODULE_AUTHOR("Anthony Wang");
MODULE_LICENSE("GPL");
MODULE_VERSION("0.1.12-ZEN3-test4");
MODULE_VERSION("0.2.0");
static bool zen1_calc;
module_param(zen1_calc, bool, 0);
@ -70,14 +72,25 @@ MODULE_PARM_DESC(zen1_calc, "Set to 1 to use ZEN1 calculation");
#define PCI_DEVICE_ID_AMD_19H_DF_F3 0x1653
#endif
#ifndef PCI_DEVICE_ID_AMD_19H_M40H_DF_F3
#define PCI_DEVICE_ID_AMD_19H_M40H_DF_F3 0x167c
#endif
#ifndef PCI_DEVICE_ID_AMD_19H_M50H_DF_F3
#define PCI_DEVICE_ID_AMD_19H_M50H_DF_F3 0x166d
#endif
/* F17H_M01H_SVI, should be renamed to something generic I think... */
#define F17H_M01H_REPORTED_TEMP_CTRL 0x00059800
#define F17H_M01H_SVI 0x0005A000
#define F17H_M02H_SVI 0x0006F000
#define F17H_M01H_SVI_TEL_PLANE0 (F17H_M01H_SVI + 0xC)
#define F17H_M01H_SVI_TEL_PLANE1 (F17H_M01H_SVI + 0x10)
#define F17H_M30H_SVI_TEL_PLANE0 (F17H_M01H_SVI + 0x14)
#define F17H_M30H_SVI_TEL_PLANE1 (F17H_M01H_SVI + 0x10)
#define F17H_M60H_SVI_TEL_PLANE0 (F17H_M02H_SVI + 0x38)
#define F17H_M60H_SVI_TEL_PLANE1 (F17H_M02H_SVI + 0x3C)
#define F17H_M70H_SVI_TEL_PLANE0 (F17H_M01H_SVI + 0x10)
#define F17H_M70H_SVI_TEL_PLANE1 (F17H_M01H_SVI + 0xC)
/* ZEN3 SP3/TR */
@ -86,6 +99,9 @@ MODULE_PARM_DESC(zen1_calc, "Set to 1 to use ZEN1 calculation");
/* ZEN3 Ryzen desktop */
#define F19H_M21H_SVI_TEL_PLANE0 (F17H_M01H_SVI + 0x10)
#define F19H_M21H_SVI_TEL_PLANE1 (F17H_M01H_SVI + 0xC)
/* ZEN3 APU */
#define F19H_M50H_SVI_TEL_PLANE0 (F17H_M02H_SVI + 0x38)
#define F19H_M50H_SVI_TEL_PLANE1 (F17H_M02H_SVI + 0x3C)
#define F17H_M70H_CCD_TEMP(x) (0x00059954 + ((x) * 4))
@ -231,7 +247,7 @@ int static debug_addrs_arr[] = {
F17H_M01H_SVI + 0x14, 0x000598BC, 0x0005994C, F17H_M70H_CCD_TEMP(0),
F17H_M70H_CCD_TEMP(1), F17H_M70H_CCD_TEMP(2), F17H_M70H_CCD_TEMP(3),
F17H_M70H_CCD_TEMP(4), F17H_M70H_CCD_TEMP(5), F17H_M70H_CCD_TEMP(6),
F17H_M70H_CCD_TEMP(7)
F17H_M70H_CCD_TEMP(7), F17H_M02H_SVI + 0x38, F17H_M02H_SVI + 0x3C
};
static ssize_t debug_data_show(struct device *dev,
@ -627,12 +643,17 @@ static int zenpower_probe(struct pci_dev *pdev, const struct pci_device_id *id)
break;
case 0x60: // Zen2 APU
case 0x68: // Zen2 Lucienne
if (!zen1_calc) {
data->zen2 = true;
dev_info(dev, "Using ZEN2 calculation formula.\n");
} else {
dev_info(dev, "Using ZEN1 calculation formula.\n");
}
data->amps_visible = true;
data->svi_core_addr = F17H_M60H_SVI_TEL_PLANE0;
data->svi_soc_addr = F17H_M60H_SVI_TEL_PLANE1;
ccd_check = 8;
break;
case 0x71: // Zen2 Ryzen
@ -677,6 +698,18 @@ static int zenpower_probe(struct pci_dev *pdev, const struct pci_device_id *id)
data->svi_soc_addr = F19H_M21H_SVI_TEL_PLANE1;
ccd_check = 2; /* max 16C, 8C per CCD = max 2 CCD's */
break;
case 0x50: /* Zen3 APU */
if (!zen1_calc) {
data->zen2 = true;
dev_info(dev, "using ZEN2 calculation formula.\n");
} else {
dev_info(dev, "using ZEN1 calculation formula.\n");
}
data->amps_visible = true;
data->svi_core_addr = F19H_M50H_SVI_TEL_PLANE0;
data->svi_soc_addr = F19H_M50H_SVI_TEL_PLANE1;
ccd_check = 2;
break;
}
} else {
data->svi_core_addr = F17H_M01H_SVI_TEL_PLANE0;
@ -715,6 +748,8 @@ static const struct pci_device_id zenpower_id_table[] = {
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_17H_M60H_DF_F3) },
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_17H_M70H_DF_F3) },
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_19H_DF_F3) },
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_19H_M40H_DF_F3) },
{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_19H_M50H_DF_F3) },
{}
};
MODULE_DEVICE_TABLE(pci, zenpower_id_table);

20
zp_read_debug.sh Executable file
View File

@ -0,0 +1,20 @@
#!/bin/bash
hwmon="/sys/class/hwmon"
mdevs=`ls $hwmon`
zenmon=""
ok=0
for dev in $mdevs; do
path="$hwmon/$dev"
devname=`cat $path/name`
if [ "$devname" == "zenpower" ]; then
cat $path/debug_data
ok=1
fi
done
if [ $ok -ne 1 ]; then
echo "Zenpower not found"
exit
fi