Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
Anthony Wang | c176fdb0d5 | ||
Anthony Wang | c36a86c64b | ||
Anthony Wang | ccc7d9e2d1 | ||
Alessandro Calori | 184c4c7797 | ||
Anthony Wang | 27eb87fb05 | ||
Christian | d2582d9194 | ||
Anthony Wang | 2ab1693f4b | ||
Anthony Wang | 318d591b12 | ||
Anthony Wang | 3773f2a7b2 | ||
Anthony Wang | 16e81693e5 | ||
Anthony Wang | a0cdb44fc5 | ||
Anthony Wang | 90637b5561 | ||
Anthony Wang | aba5677583 | ||
Anthony Wang | 5ed3765eff | ||
Anthony Wang | 625e56d034 | ||
Anthony Wang | 938c36c3dc | ||
Anthony Wang | 7cc5f1fefb |
|
@ -1,5 +1,6 @@
|
|||
*.ko
|
||||
*.o
|
||||
*.mod
|
||||
*.mod.c
|
||||
.tmp_versions/
|
||||
*.order
|
||||
|
|
4
Makefile
4
Makefile
|
@ -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)/*)")
|
||||
|
|
16
README.md
16
README.md
|
@ -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`
|
||||
|
|
43
zenpower.c
43
zenpower.c
|
@ -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);
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue