Re: [PATCH v3 2/2] drivers/perf: hisi: Add driver for HiSilicon PCIe PMU

2021-04-20 Thread John Garry

On 15/04/2021 13:48, Qi Liu wrote:

PCIe PMU Root Complex Integrated End Point(RCiEP) device is supported
to sample bandwidth, latency, buffer occupation etc.

Each PMU RCiEP device monitors multiple Root Ports, and each RCiEP is
registered as a PMU in /sys/bus/event_source/devices, so users can
select target PMU, and use filter to do further sets.

Filtering options contains:
event- select the event.
subevent - select the subevent.
port - select target Root Ports. Information of Root Ports
are shown under sysfs.
bdf  - select requester_id of target EP device.
trig_len - set trigger condition for starting event statistics.
trigger_mode - set trigger mode. 0 means starting to statistic when
bigger than trigger condition, and 1 means smaller.
thr_len  - set threshold for statistics.
thr_mode - set threshold mode. 0 means count when bigger than
threshold, and 1 means smaller.

Signed-off-by: Qi Liu 


Some minor items and nits with coding style below, but generally looks ok:

Reviewed-by: John Garry 


---
  MAINTAINERS|6 +
  drivers/perf/Kconfig   |2 +
  drivers/perf/Makefile  |1 +
  drivers/perf/pci/Kconfig   |   16 +
  drivers/perf/pci/Makefile  |2 +
  drivers/perf/pci/hisilicon/Makefile|3 +
  drivers/perf/pci/hisilicon/hisi_pcie_pmu.c | 1014 
  include/linux/cpuhotplug.h |1 +
  8 files changed, 1045 insertions(+)
  create mode 100644 drivers/perf/pci/Kconfig
  create mode 100644 drivers/perf/pci/Makefile
  create mode 100644 drivers/perf/pci/hisilicon/Makefile
  create mode 100644 drivers/perf/pci/hisilicon/hisi_pcie_pmu.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 7fdc513..efe06cd 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -8084,6 +8084,12 @@ W:   http://www.hisilicon.com
  F:Documentation/admin-guide/perf/hisi-pmu.rst
  F:drivers/perf/hisilicon
  
+HISILICON PCIE PMU DRIVER

+M: Qi Liu 
+S: Maintained
+F: Documentation/admin-guide/perf/hisi-pcie-pmu.rst
+F: drivers/perf/pci/hisilicon/hisi_pcie_pmu.c
+
  HISILICON QM AND ZIP Controller DRIVER
  M:Zhou Wang 
  L:linux-cry...@vger.kernel.org
diff --git a/drivers/perf/Kconfig b/drivers/perf/Kconfig
index 77522e5..ddd82fa 100644
--- a/drivers/perf/Kconfig
+++ b/drivers/perf/Kconfig
@@ -139,4 +139,6 @@ config ARM_DMC620_PMU
  
  source "drivers/perf/hisilicon/Kconfig"
  
+source "drivers/perf/pci/Kconfig"

+
  endmenu
diff --git a/drivers/perf/Makefile b/drivers/perf/Makefile
index 5260b11..1208c08 100644
--- a/drivers/perf/Makefile
+++ b/drivers/perf/Makefile
@@ -14,3 +14,4 @@ obj-$(CONFIG_THUNDERX2_PMU) += thunderx2_pmu.o
  obj-$(CONFIG_XGENE_PMU) += xgene_pmu.o
  obj-$(CONFIG_ARM_SPE_PMU) += arm_spe_pmu.o
  obj-$(CONFIG_ARM_DMC620_PMU) += arm_dmc620_pmu.o
+obj-y += pci/
diff --git a/drivers/perf/pci/Kconfig b/drivers/perf/pci/Kconfig
new file mode 100644
index 000..9f30291
--- /dev/null
+++ b/drivers/perf/pci/Kconfig
@@ -0,0 +1,16 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# PCIe Performance Monitor Drivers
+#
+menu "PCIe Performance Monitor"
+
+config HISI_PCIE_PMU
+   tristate "HiSilicon PCIE PERF PMU"
+   depends on (ARM64 && PCI) || COMPILE_TEST
+   help
+ Provide support for HiSilicon PCIe performance monitoring unit (PMU)
+ RCiEP devices.
+ Adds the PCIe PMU into perf events system for monitoring latency,
+ bandwidth etc.
+
+endmenu
diff --git a/drivers/perf/pci/Makefile b/drivers/perf/pci/Makefile
new file mode 100644
index 000..a56b1a9
--- /dev/null
+++ b/drivers/perf/pci/Makefile
@@ -0,0 +1,2 @@
+# SPDX-License-Identifier: GPL-2.0-only
+obj-y += hisilicon/
diff --git a/drivers/perf/pci/hisilicon/Makefile 
b/drivers/perf/pci/hisilicon/Makefile
new file mode 100644
index 000..65b0bd7
--- /dev/null
+++ b/drivers/perf/pci/hisilicon/Makefile
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+obj-$(CONFIG_HISI_PCIE_PMU) += hisi_pcie_pmu.o
diff --git a/drivers/perf/pci/hisilicon/hisi_pcie_pmu.c 
b/drivers/perf/pci/hisilicon/hisi_pcie_pmu.c
new file mode 100644
index 000..415bf39
--- /dev/null
+++ b/drivers/perf/pci/hisilicon/hisi_pcie_pmu.c
@@ -0,0 +1,1014 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * This driver adds support for PCIe PMU RCiEP device. Related
+ * perf events are bandwidth, bandwidth utilization, latency
+ * etc.
+ *
+ * Copyright (C) 2021 HiSilicon Limited
+ * Author: Qi Liu
+ */
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+/* Define registers */
+#define HISI_PCIE_GLOBAL_CTRL  0x00
+#define HISI_PCIE_EVENT_CTRL   0x010
+#define HISI_PCIE_CNT  0x090
+#define HISI_PCIE_EXT_CNT  0x110
+#define 

Re: [PATCH v3 2/2] drivers/perf: hisi: Add driver for HiSilicon PCIe PMU

2021-04-15 Thread kernel test robot
Hi Qi,

I love your patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v5.12-rc7]
[cannot apply to next-20210415]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:
https://github.com/0day-ci/linux/commits/Qi-Liu/drivers-perf-hisi-Add-support-for-PCIe-PMU/20210415-204823
base:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
7f75285ca572eaabc028cf78c6ab5473d0d160be
config: sh-allmodconfig (attached as .config)
compiler: sh4-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
chmod +x ~/bin/make.cross
# 
https://github.com/0day-ci/linux/commit/94ad51ddfebbb5df3aa85fdb8a3781737accb159
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review 
Qi-Liu/drivers-perf-hisi-Add-support-for-PCIe-PMU/20210415-204823
git checkout 94ad51ddfebbb5df3aa85fdb8a3781737accb159
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 
ARCH=sh 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot 

All errors (new ones prefixed by >>):

   In file included from include/linux/bits.h:6,
from include/linux/bitops.h:6,
from include/linux/bitmap.h:8,
from drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:11:
   drivers/perf/pci/hisilicon/hisi_pcie_pmu.c: In function 
'hisi_pcie_pmu_config_filter':
   include/vdso/bits.h:7:26: warning: left shift count >= width of type 
[-Wshift-count-overflow]
   7 | #define BIT(nr)   (UL(1) << (nr))
 |  ^~
   drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:42:32: note: in expansion of 
macro 'BIT'
  42 | #define HISI_PCIE_DEFAULT_SET  BIT(34)
 |^~~
   drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:225:12: note: in expansion of 
macro 'HISI_PCIE_DEFAULT_SET'
 225 |  u64 reg = HISI_PCIE_DEFAULT_SET;
 |^
   include/vdso/bits.h:7:26: warning: left shift count >= width of type 
[-Wshift-count-overflow]
   7 | #define BIT(nr)   (UL(1) << (nr))
 |  ^~
   drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:44:30: note: in expansion of 
macro 'BIT'
  44 | #define HISI_PCIE_TARGET_EN  BIT(32)
 |  ^~~
   drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:238:10: note: in expansion of 
macro 'HISI_PCIE_TARGET_EN'
 238 |   reg |= HISI_PCIE_TARGET_EN |
 |  ^~~
   include/vdso/bits.h:7:26: warning: left shift count >= width of type 
[-Wshift-count-overflow]
   7 | #define BIT(nr)   (UL(1) << (nr))
 |  ^~
   drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:45:28: note: in expansion of 
macro 'BIT'
  45 | #define HISI_PCIE_TRIG_EN  BIT(52)
 |^~~
   drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:246:44: note: in expansion of 
macro 'HISI_PCIE_TRIG_EN'
 246 |  hisi_pcie_get_trig_mode(event)) | HISI_PCIE_TRIG_EN;
 |^
   drivers/perf/pci/hisilicon/hisi_pcie_pmu.c: In function 
'hisi_pcie_pmu_clear_filter':
   include/vdso/bits.h:7:26: warning: left shift count >= width of type 
[-Wshift-count-overflow]
   7 | #define BIT(nr)   (UL(1) << (nr))
 |  ^~
   drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:42:32: note: in expansion of 
macro 'BIT'
  42 | #define HISI_PCIE_DEFAULT_SET  BIT(34)
 |^~~
   drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:264:9: note: in expansion of 
macro 'HISI_PCIE_DEFAULT_SET'
 264 | HISI_PCIE_DEFAULT_SET);
 | ^
   drivers/perf/pci/hisilicon/hisi_pcie_pmu.c: In function 
'hisi_pcie_pmu_reset_counter':
   include/vdso/bits.h:7:26: warning: left shift count >= width of type 
[-Wshift-count-overflow]
   7 | #define BIT(nr)   (UL(1) << (nr))
 |  ^~
   drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:42:32: note: in expansion of 
macro 'BIT'
  42 | #define HISI_PCIE_DEFAULT_SET  BIT(34)
 |^~~
   drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:526:9: note: in expansion of 
macro 'HISI_PCIE_DEFAULT_SET'
 526 | HISI_PCIE_DEFAULT_SET);
 | ^
   drivers/perf/pci/hisilicon/hisi_pcie_pmu.c: In function 
'hisi_pcie_pmu_irq_register':
>> drivers/perf/pci/hisilicon/hisi_pcie_pmu.c:676:3: error: implicit 
>> declaration of function 'pci_free_irq_vectors'; did you mean 
>> 

[PATCH v3 2/2] drivers/perf: hisi: Add driver for HiSilicon PCIe PMU

2021-04-15 Thread Qi Liu
PCIe PMU Root Complex Integrated End Point(RCiEP) device is supported
to sample bandwidth, latency, buffer occupation etc.

Each PMU RCiEP device monitors multiple Root Ports, and each RCiEP is
registered as a PMU in /sys/bus/event_source/devices, so users can
select target PMU, and use filter to do further sets.

Filtering options contains:
event- select the event.
subevent - select the subevent.
port - select target Root Ports. Information of Root Ports
   are shown under sysfs.
bdf  - select requester_id of target EP device.
trig_len - set trigger condition for starting event statistics.
trigger_mode - set trigger mode. 0 means starting to statistic when
   bigger than trigger condition, and 1 means smaller.
thr_len  - set threshold for statistics.
thr_mode - set threshold mode. 0 means count when bigger than
   threshold, and 1 means smaller.

Signed-off-by: Qi Liu 
---
 MAINTAINERS|6 +
 drivers/perf/Kconfig   |2 +
 drivers/perf/Makefile  |1 +
 drivers/perf/pci/Kconfig   |   16 +
 drivers/perf/pci/Makefile  |2 +
 drivers/perf/pci/hisilicon/Makefile|3 +
 drivers/perf/pci/hisilicon/hisi_pcie_pmu.c | 1014 
 include/linux/cpuhotplug.h |1 +
 8 files changed, 1045 insertions(+)
 create mode 100644 drivers/perf/pci/Kconfig
 create mode 100644 drivers/perf/pci/Makefile
 create mode 100644 drivers/perf/pci/hisilicon/Makefile
 create mode 100644 drivers/perf/pci/hisilicon/hisi_pcie_pmu.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 7fdc513..efe06cd 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -8084,6 +8084,12 @@ W:   http://www.hisilicon.com
 F: Documentation/admin-guide/perf/hisi-pmu.rst
 F: drivers/perf/hisilicon
 
+HISILICON PCIE PMU DRIVER
+M: Qi Liu 
+S: Maintained
+F: Documentation/admin-guide/perf/hisi-pcie-pmu.rst
+F: drivers/perf/pci/hisilicon/hisi_pcie_pmu.c
+
 HISILICON QM AND ZIP Controller DRIVER
 M: Zhou Wang 
 L: linux-cry...@vger.kernel.org
diff --git a/drivers/perf/Kconfig b/drivers/perf/Kconfig
index 77522e5..ddd82fa 100644
--- a/drivers/perf/Kconfig
+++ b/drivers/perf/Kconfig
@@ -139,4 +139,6 @@ config ARM_DMC620_PMU
 
 source "drivers/perf/hisilicon/Kconfig"
 
+source "drivers/perf/pci/Kconfig"
+
 endmenu
diff --git a/drivers/perf/Makefile b/drivers/perf/Makefile
index 5260b11..1208c08 100644
--- a/drivers/perf/Makefile
+++ b/drivers/perf/Makefile
@@ -14,3 +14,4 @@ obj-$(CONFIG_THUNDERX2_PMU) += thunderx2_pmu.o
 obj-$(CONFIG_XGENE_PMU) += xgene_pmu.o
 obj-$(CONFIG_ARM_SPE_PMU) += arm_spe_pmu.o
 obj-$(CONFIG_ARM_DMC620_PMU) += arm_dmc620_pmu.o
+obj-y += pci/
diff --git a/drivers/perf/pci/Kconfig b/drivers/perf/pci/Kconfig
new file mode 100644
index 000..9f30291
--- /dev/null
+++ b/drivers/perf/pci/Kconfig
@@ -0,0 +1,16 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# PCIe Performance Monitor Drivers
+#
+menu "PCIe Performance Monitor"
+
+config HISI_PCIE_PMU
+   tristate "HiSilicon PCIE PERF PMU"
+   depends on (ARM64 && PCI) || COMPILE_TEST
+   help
+ Provide support for HiSilicon PCIe performance monitoring unit (PMU)
+ RCiEP devices.
+ Adds the PCIe PMU into perf events system for monitoring latency,
+ bandwidth etc.
+
+endmenu
diff --git a/drivers/perf/pci/Makefile b/drivers/perf/pci/Makefile
new file mode 100644
index 000..a56b1a9
--- /dev/null
+++ b/drivers/perf/pci/Makefile
@@ -0,0 +1,2 @@
+# SPDX-License-Identifier: GPL-2.0-only
+obj-y += hisilicon/
diff --git a/drivers/perf/pci/hisilicon/Makefile 
b/drivers/perf/pci/hisilicon/Makefile
new file mode 100644
index 000..65b0bd7
--- /dev/null
+++ b/drivers/perf/pci/hisilicon/Makefile
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+obj-$(CONFIG_HISI_PCIE_PMU) += hisi_pcie_pmu.o
diff --git a/drivers/perf/pci/hisilicon/hisi_pcie_pmu.c 
b/drivers/perf/pci/hisilicon/hisi_pcie_pmu.c
new file mode 100644
index 000..415bf39
--- /dev/null
+++ b/drivers/perf/pci/hisilicon/hisi_pcie_pmu.c
@@ -0,0 +1,1014 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * This driver adds support for PCIe PMU RCiEP device. Related
+ * perf events are bandwidth, bandwidth utilization, latency
+ * etc.
+ *
+ * Copyright (C) 2021 HiSilicon Limited
+ * Author: Qi Liu
+ */
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+/* Define registers */
+#define HISI_PCIE_GLOBAL_CTRL  0x00
+#define HISI_PCIE_EVENT_CTRL   0x010
+#define HISI_PCIE_CNT  0x090
+#define HISI_PCIE_EXT_CNT  0x110
+#define HISI_PCIE_INT_STAT 0x150
+#define HISI_PCIE_INT_MASK 0x154
+#define HISI_PCIE_REG_BDF  0xfe0
+#define HISI_PCIE_REG_VERSION  0xfe4