Linux-Hwmon Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH v2 0/3] i2c: i801: Fix iTCO_wdt resource creation if PMC is not present
@ 2020-02-26 13:21 Mika Westerberg
  2020-02-26 13:21 ` [PATCH v2 1/3] watchdog: iTCO_wdt: Export vendorsupport Mika Westerberg
                   ` (3 more replies)
  0 siblings, 4 replies; 13+ messages in thread
From: Mika Westerberg @ 2020-02-26 13:21 UTC (permalink / raw)
  To: Guenter Roeck, Jean Delvare, Wim Van Sebroeck, Wolfram Sang
  Cc: Martin Volf, Andy Shevchenko, Jarkko Nikula, Mika Westerberg,
	linux-i2c, linux-hwmon, linux-watchdog, linux-kernel

Hi all,

This series aims to fix the issue reported by Martin Volf [1] that prevents
the nct6775 driver from loading.

I added Fixes tag to the last patch but not stable tag because the other
two patches it depends are not really stable material IMO. Please let me
know if there is a better way to organize these :)

I tested this on Intel Whiskey Lake based system (CNL derived) and on Comet
Lake-V based system (SPT derived and the iTCO_wdt still works and I can see
the expected resources in /proc/ioports and /proc/iomem.

The previous version of the patch series can be found here:

  https://lore.kernel.org/linux-hwmon/20200225123802.88984-1-mika.westerberg@linux.intel.com/

Changes from the previous version:

  * Call request_region() also for iTCO_vendorsupport
  * Drop the core populating ICH_RES_IO_SMI completely from i2c-i801.c

[1] https://lore.kernel.org/linux-hwmon/CAM1AHpQ4196tyD=HhBu-2donSsuogabkfP03v1YF26Q7_BgvgA@mail.gmail.com/

Mika Westerberg (3):
  watchdog: iTCO_wdt: Export vendorsupport
  watchdog: iTCO_wdt: Make ICH_RES_IO_SMI optional
  i2c: i801: Do not add ICH_RES_IO_SMI for the iTCO_wdt device

 drivers/i2c/busses/i2c-i801.c          | 45 +++++++-------------------
 drivers/watchdog/iTCO_vendor.h         |  2 ++
 drivers/watchdog/iTCO_vendor_support.c | 16 +++++----
 drivers/watchdog/iTCO_wdt.c            | 28 +++++++++-------
 4 files changed, 39 insertions(+), 52 deletions(-)

-- 
2.25.0


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 1/3] watchdog: iTCO_wdt: Export vendorsupport
  2020-02-26 13:21 [PATCH v2 0/3] i2c: i801: Fix iTCO_wdt resource creation if PMC is not present Mika Westerberg
@ 2020-02-26 13:21 ` Mika Westerberg
  2020-02-26 13:32   ` Guenter Roeck
  2020-03-10  9:30   ` Wolfram Sang
  2020-02-26 13:21 ` [PATCH v2 2/3] watchdog: iTCO_wdt: Make ICH_RES_IO_SMI optional Mika Westerberg
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 13+ messages in thread
From: Mika Westerberg @ 2020-02-26 13:21 UTC (permalink / raw)
  To: Guenter Roeck, Jean Delvare, Wim Van Sebroeck, Wolfram Sang
  Cc: Martin Volf, Andy Shevchenko, Jarkko Nikula, Mika Westerberg,
	linux-i2c, linux-hwmon, linux-watchdog, linux-kernel

In preparation for making ->smi_res optional the iTCO_wdt driver needs
to know whether vendorsupport is being set to non-zero. For this reason
export the variable.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
 drivers/watchdog/iTCO_vendor.h         |  2 ++
 drivers/watchdog/iTCO_vendor_support.c | 16 +++++++++-------
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/drivers/watchdog/iTCO_vendor.h b/drivers/watchdog/iTCO_vendor.h
index 0f7373ba10d5..69e92e692ae0 100644
--- a/drivers/watchdog/iTCO_vendor.h
+++ b/drivers/watchdog/iTCO_vendor.h
@@ -1,10 +1,12 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 /* iTCO Vendor Specific Support hooks */
 #ifdef CONFIG_ITCO_VENDOR_SUPPORT
+extern int iTCO_vendorsupport;
 extern void iTCO_vendor_pre_start(struct resource *, unsigned int);
 extern void iTCO_vendor_pre_stop(struct resource *);
 extern int iTCO_vendor_check_noreboot_on(void);
 #else
+#define iTCO_vendorsupport				0
 #define iTCO_vendor_pre_start(acpibase, heartbeat)	{}
 #define iTCO_vendor_pre_stop(acpibase)			{}
 #define iTCO_vendor_check_noreboot_on()			1
diff --git a/drivers/watchdog/iTCO_vendor_support.c b/drivers/watchdog/iTCO_vendor_support.c
index 4f1b96f59349..cf0eaa04b064 100644
--- a/drivers/watchdog/iTCO_vendor_support.c
+++ b/drivers/watchdog/iTCO_vendor_support.c
@@ -39,8 +39,10 @@
 /* Broken BIOS */
 #define BROKEN_BIOS		911
 
-static int vendorsupport;
-module_param(vendorsupport, int, 0);
+int iTCO_vendorsupport;
+EXPORT_SYMBOL(iTCO_vendorsupport);
+
+module_param_named(vendorsupport, iTCO_vendorsupport, int, 0);
 MODULE_PARM_DESC(vendorsupport, "iTCO vendor specific support mode, default="
 			"0 (none), 1=SuperMicro Pent3, 911=Broken SMI BIOS");
 
@@ -152,7 +154,7 @@ static void broken_bios_stop(struct resource *smires)
 void iTCO_vendor_pre_start(struct resource *smires,
 			   unsigned int heartbeat)
 {
-	switch (vendorsupport) {
+	switch (iTCO_vendorsupport) {
 	case SUPERMICRO_OLD_BOARD:
 		supermicro_old_pre_start(smires);
 		break;
@@ -165,7 +167,7 @@ EXPORT_SYMBOL(iTCO_vendor_pre_start);
 
 void iTCO_vendor_pre_stop(struct resource *smires)
 {
-	switch (vendorsupport) {
+	switch (iTCO_vendorsupport) {
 	case SUPERMICRO_OLD_BOARD:
 		supermicro_old_pre_stop(smires);
 		break;
@@ -178,7 +180,7 @@ EXPORT_SYMBOL(iTCO_vendor_pre_stop);
 
 int iTCO_vendor_check_noreboot_on(void)
 {
-	switch (vendorsupport) {
+	switch (iTCO_vendorsupport) {
 	case SUPERMICRO_OLD_BOARD:
 		return 0;
 	default:
@@ -189,13 +191,13 @@ EXPORT_SYMBOL(iTCO_vendor_check_noreboot_on);
 
 static int __init iTCO_vendor_init_module(void)
 {
-	if (vendorsupport == SUPERMICRO_NEW_BOARD) {
+	if (iTCO_vendorsupport == SUPERMICRO_NEW_BOARD) {
 		pr_warn("Option vendorsupport=%d is no longer supported, "
 			"please use the w83627hf_wdt driver instead\n",
 			SUPERMICRO_NEW_BOARD);
 		return -EINVAL;
 	}
-	pr_info("vendor-support=%d\n", vendorsupport);
+	pr_info("vendor-support=%d\n", iTCO_vendorsupport);
 	return 0;
 }
 
-- 
2.25.0


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 2/3] watchdog: iTCO_wdt: Make ICH_RES_IO_SMI optional
  2020-02-26 13:21 [PATCH v2 0/3] i2c: i801: Fix iTCO_wdt resource creation if PMC is not present Mika Westerberg
  2020-02-26 13:21 ` [PATCH v2 1/3] watchdog: iTCO_wdt: Export vendorsupport Mika Westerberg
@ 2020-02-26 13:21 ` Mika Westerberg
  2020-02-26 13:33   ` Guenter Roeck
  2020-03-10  9:30   ` Wolfram Sang
  2020-02-26 13:21 ` [PATCH v2 3/3] i2c: i801: Do not add ICH_RES_IO_SMI for the iTCO_wdt device Mika Westerberg
  2020-02-28 17:03 ` [PATCH v2 0/3] i2c: i801: Fix iTCO_wdt resource creation if PMC is not present Wolfram Sang
  3 siblings, 2 replies; 13+ messages in thread
From: Mika Westerberg @ 2020-02-26 13:21 UTC (permalink / raw)
  To: Guenter Roeck, Jean Delvare, Wim Van Sebroeck, Wolfram Sang
  Cc: Martin Volf, Andy Shevchenko, Jarkko Nikula, Mika Westerberg,
	linux-i2c, linux-hwmon, linux-watchdog, linux-kernel

The iTCO_wdt driver only needs ICH_RES_IO_SMI I/O resource when either
turn_SMI_watchdog_clear_off module parameter is set to match ->iTCO_version
(or higher), and when legacy iTCO_vendorsupport is set. Modify the driver
so that ICH_RES_IO_SMI is optional if the two conditions are not met.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
 drivers/watchdog/iTCO_wdt.c | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/drivers/watchdog/iTCO_wdt.c b/drivers/watchdog/iTCO_wdt.c
index 156360e37714..e707c4797f76 100644
--- a/drivers/watchdog/iTCO_wdt.c
+++ b/drivers/watchdog/iTCO_wdt.c
@@ -459,13 +459,25 @@ static int iTCO_wdt_probe(struct platform_device *pdev)
 	if (!p->tco_res)
 		return -ENODEV;
 
-	p->smi_res = platform_get_resource(pdev, IORESOURCE_IO, ICH_RES_IO_SMI);
-	if (!p->smi_res)
-		return -ENODEV;
-
 	p->iTCO_version = pdata->version;
 	p->pci_dev = to_pci_dev(dev->parent);
 
+	p->smi_res = platform_get_resource(pdev, IORESOURCE_IO, ICH_RES_IO_SMI);
+	if (p->smi_res) {
+		/* The TCO logic uses the TCO_EN bit in the SMI_EN register */
+		if (!devm_request_region(dev, p->smi_res->start,
+					 resource_size(p->smi_res),
+					 pdev->name)) {
+			pr_err("I/O address 0x%04llx already in use, device disabled\n",
+			       (u64)SMI_EN(p));
+			return -EBUSY;
+		}
+	} else if (iTCO_vendorsupport ||
+		   turn_SMI_watchdog_clear_off >= p->iTCO_version) {
+		pr_err("SMI I/O resource is missing\n");
+		return -ENODEV;
+	}
+
 	iTCO_wdt_no_reboot_bit_setup(p, pdata);
 
 	/*
@@ -492,14 +504,6 @@ static int iTCO_wdt_probe(struct platform_device *pdev)
 	/* Set the NO_REBOOT bit to prevent later reboots, just for sure */
 	p->update_no_reboot_bit(p->no_reboot_priv, true);
 
-	/* The TCO logic uses the TCO_EN bit in the SMI_EN register */
-	if (!devm_request_region(dev, p->smi_res->start,
-				 resource_size(p->smi_res),
-				 pdev->name)) {
-		pr_err("I/O address 0x%04llx already in use, device disabled\n",
-		       (u64)SMI_EN(p));
-		return -EBUSY;
-	}
 	if (turn_SMI_watchdog_clear_off >= p->iTCO_version) {
 		/*
 		 * Bit 13: TCO_EN -> 0
-- 
2.25.0


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2 3/3] i2c: i801: Do not add ICH_RES_IO_SMI for the iTCO_wdt device
  2020-02-26 13:21 [PATCH v2 0/3] i2c: i801: Fix iTCO_wdt resource creation if PMC is not present Mika Westerberg
  2020-02-26 13:21 ` [PATCH v2 1/3] watchdog: iTCO_wdt: Export vendorsupport Mika Westerberg
  2020-02-26 13:21 ` [PATCH v2 2/3] watchdog: iTCO_wdt: Make ICH_RES_IO_SMI optional Mika Westerberg
@ 2020-02-26 13:21 ` Mika Westerberg
  2020-02-26 13:31   ` Guenter Roeck
  2020-03-10  9:31   ` Wolfram Sang
  2020-02-28 17:03 ` [PATCH v2 0/3] i2c: i801: Fix iTCO_wdt resource creation if PMC is not present Wolfram Sang
  3 siblings, 2 replies; 13+ messages in thread
From: Mika Westerberg @ 2020-02-26 13:21 UTC (permalink / raw)
  To: Guenter Roeck, Jean Delvare, Wim Van Sebroeck, Wolfram Sang
  Cc: Martin Volf, Andy Shevchenko, Jarkko Nikula, Mika Westerberg,
	linux-i2c, linux-hwmon, linux-watchdog, linux-kernel

Martin noticed that nct6775 driver does not load properly on his system
in v5.4+ kernels. The issue was bisected to commit b84398d6d7f9 ("i2c:
i801: Use iTCO version 6 in Cannon Lake PCH and beyond") but it is
likely not the culprit because the faulty code has been in the driver
already since commit 9424693035a5 ("i2c: i801: Create iTCO device on
newer Intel PCHs"). So more likely some commit that added PCI IDs of
recent chipsets made the driver to create the iTCO_wdt device on Martins
system.

The issue was debugged to be PCI configuration access to the PMC device
that is not present. This returns all 1's when read and this caused the
iTCO_wdt driver to accidentally request resourses used by nct6775.

It turns out that the SMI resource is only required for some ancient
systems, not the ones supported by this driver. For this reason do not
populate the SMI resource at all and drop all the related code. The
driver now always populates the main I/O resource and only in case of SPT
(Intel Sunrisepoint) compatible devices it adds another resource for the
NO_REBOOT bit. These two resources are of different types so
platform_get_resource() used by the iTCO_wdt driver continues to find
the both resources at index 0.

Link: https://lore.kernel.org/linux-hwmon/CAM1AHpQ4196tyD=HhBu-2donSsuogabkfP03v1YF26Q7_BgvgA@mail.gmail.com/
Fixes: 9424693035a5 ("i2c: i801: Create iTCO device on newer Intel PCHs")
Reported-by: Martin Volf <martin.volf.42@gmail.com>
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
---
 drivers/i2c/busses/i2c-i801.c | 45 ++++++++++-------------------------
 1 file changed, 12 insertions(+), 33 deletions(-)

diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
index ca4f096fef74..a9c03f5c3482 100644
--- a/drivers/i2c/busses/i2c-i801.c
+++ b/drivers/i2c/busses/i2c-i801.c
@@ -132,11 +132,6 @@
 #define TCOBASE		0x050
 #define TCOCTL		0x054
 
-#define ACPIBASE		0x040
-#define ACPIBASE_SMI_OFF	0x030
-#define ACPICTRL		0x044
-#define ACPICTRL_EN		0x080
-
 #define SBREG_BAR		0x10
 #define SBREG_SMBCTRL		0xc6000c
 #define SBREG_SMBCTRL_DNV	0xcf000c
@@ -1553,7 +1548,7 @@ i801_add_tco_spt(struct i801_priv *priv, struct pci_dev *pci_dev,
 		pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, hidden);
 	spin_unlock(&p2sb_spinlock);
 
-	res = &tco_res[ICH_RES_MEM_OFF];
+	res = &tco_res[1];
 	if (pci_dev->device == PCI_DEVICE_ID_INTEL_DNV_SMBUS)
 		res->start = (resource_size_t)base64_addr + SBREG_SMBCTRL_DNV;
 	else
@@ -1563,7 +1558,7 @@ i801_add_tco_spt(struct i801_priv *priv, struct pci_dev *pci_dev,
 	res->flags = IORESOURCE_MEM;
 
 	return platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1,
-					tco_res, 3, &spt_tco_platform_data,
+					tco_res, 2, &spt_tco_platform_data,
 					sizeof(spt_tco_platform_data));
 }
 
@@ -1576,17 +1571,16 @@ static struct platform_device *
 i801_add_tco_cnl(struct i801_priv *priv, struct pci_dev *pci_dev,
 		 struct resource *tco_res)
 {
-	return platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1,
-					tco_res, 2, &cnl_tco_platform_data,
-					sizeof(cnl_tco_platform_data));
+	return platform_device_register_resndata(&pci_dev->dev,
+			"iTCO_wdt", -1, tco_res, 1, &cnl_tco_platform_data,
+			sizeof(cnl_tco_platform_data));
 }
 
 static void i801_add_tco(struct i801_priv *priv)
 {
-	u32 base_addr, tco_base, tco_ctl, ctrl_val;
 	struct pci_dev *pci_dev = priv->pci_dev;
-	struct resource tco_res[3], *res;
-	unsigned int devfn;
+	struct resource tco_res[2], *res;
+	u32 tco_base, tco_ctl;
 
 	/* If we have ACPI based watchdog use that instead */
 	if (acpi_has_watchdog())
@@ -1601,30 +1595,15 @@ static void i801_add_tco(struct i801_priv *priv)
 		return;
 
 	memset(tco_res, 0, sizeof(tco_res));
-
-	res = &tco_res[ICH_RES_IO_TCO];
-	res->start = tco_base & ~1;
-	res->end = res->start + 32 - 1;
-	res->flags = IORESOURCE_IO;
-
 	/*
-	 * Power Management registers.
+	 * Always populate the main iTCO IO resource here. The second entry
+	 * for NO_REBOOT MMIO is filled by the SPT specific function.
 	 */
-	devfn = PCI_DEVFN(PCI_SLOT(pci_dev->devfn), 2);
-	pci_bus_read_config_dword(pci_dev->bus, devfn, ACPIBASE, &base_addr);
-
-	res = &tco_res[ICH_RES_IO_SMI];
-	res->start = (base_addr & ~1) + ACPIBASE_SMI_OFF;
-	res->end = res->start + 3;
+	res = &tco_res[0];
+	res->start = tco_base & ~1;
+	res->end = res->start + 32 - 1;
 	res->flags = IORESOURCE_IO;
 
-	/*
-	 * Enable the ACPI I/O space.
-	 */
-	pci_bus_read_config_dword(pci_dev->bus, devfn, ACPICTRL, &ctrl_val);
-	ctrl_val |= ACPICTRL_EN;
-	pci_bus_write_config_dword(pci_dev->bus, devfn, ACPICTRL, ctrl_val);
-
 	if (priv->features & FEATURE_TCO_CNL)
 		priv->tco_pdev = i801_add_tco_cnl(priv, pci_dev, tco_res);
 	else
-- 
2.25.0


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 3/3] i2c: i801: Do not add ICH_RES_IO_SMI for the iTCO_wdt device
  2020-02-26 13:21 ` [PATCH v2 3/3] i2c: i801: Do not add ICH_RES_IO_SMI for the iTCO_wdt device Mika Westerberg
@ 2020-02-26 13:31   ` Guenter Roeck
  2020-03-10  9:31   ` Wolfram Sang
  1 sibling, 0 replies; 13+ messages in thread
From: Guenter Roeck @ 2020-02-26 13:31 UTC (permalink / raw)
  To: Mika Westerberg, Jean Delvare, Wim Van Sebroeck, Wolfram Sang
  Cc: Martin Volf, Andy Shevchenko, Jarkko Nikula, linux-i2c,
	linux-hwmon, linux-watchdog, linux-kernel

On 2/26/20 5:21 AM, Mika Westerberg wrote:
> Martin noticed that nct6775 driver does not load properly on his system
> in v5.4+ kernels. The issue was bisected to commit b84398d6d7f9 ("i2c:
> i801: Use iTCO version 6 in Cannon Lake PCH and beyond") but it is
> likely not the culprit because the faulty code has been in the driver
> already since commit 9424693035a5 ("i2c: i801: Create iTCO device on
> newer Intel PCHs"). So more likely some commit that added PCI IDs of
> recent chipsets made the driver to create the iTCO_wdt device on Martins
> system.
> 
> The issue was debugged to be PCI configuration access to the PMC device
> that is not present. This returns all 1's when read and this caused the
> iTCO_wdt driver to accidentally request resourses used by nct6775.
> 
> It turns out that the SMI resource is only required for some ancient
> systems, not the ones supported by this driver. For this reason do not
> populate the SMI resource at all and drop all the related code. The
> driver now always populates the main I/O resource and only in case of SPT
> (Intel Sunrisepoint) compatible devices it adds another resource for the
> NO_REBOOT bit. These two resources are of different types so
> platform_get_resource() used by the iTCO_wdt driver continues to find
> the both resources at index 0.
> 
> Link: https://lore.kernel.org/linux-hwmon/CAM1AHpQ4196tyD=HhBu-2donSsuogabkfP03v1YF26Q7_BgvgA@mail.gmail.com/
> Fixes: 9424693035a5 ("i2c: i801: Create iTCO device on newer Intel PCHs")
> Reported-by: Martin Volf <martin.volf.42@gmail.com>
> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>

Reviewed-by: Guenter Roeck <linux@roeck-us.net>

> ---
>  drivers/i2c/busses/i2c-i801.c | 45 ++++++++++-------------------------
>  1 file changed, 12 insertions(+), 33 deletions(-)
> 
> diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
> index ca4f096fef74..a9c03f5c3482 100644
> --- a/drivers/i2c/busses/i2c-i801.c
> +++ b/drivers/i2c/busses/i2c-i801.c
> @@ -132,11 +132,6 @@
>  #define TCOBASE		0x050
>  #define TCOCTL		0x054
>  
> -#define ACPIBASE		0x040
> -#define ACPIBASE_SMI_OFF	0x030
> -#define ACPICTRL		0x044
> -#define ACPICTRL_EN		0x080
> -
>  #define SBREG_BAR		0x10
>  #define SBREG_SMBCTRL		0xc6000c
>  #define SBREG_SMBCTRL_DNV	0xcf000c
> @@ -1553,7 +1548,7 @@ i801_add_tco_spt(struct i801_priv *priv, struct pci_dev *pci_dev,
>  		pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, hidden);
>  	spin_unlock(&p2sb_spinlock);
>  
> -	res = &tco_res[ICH_RES_MEM_OFF];
> +	res = &tco_res[1];
>  	if (pci_dev->device == PCI_DEVICE_ID_INTEL_DNV_SMBUS)
>  		res->start = (resource_size_t)base64_addr + SBREG_SMBCTRL_DNV;
>  	else
> @@ -1563,7 +1558,7 @@ i801_add_tco_spt(struct i801_priv *priv, struct pci_dev *pci_dev,
>  	res->flags = IORESOURCE_MEM;
>  
>  	return platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1,
> -					tco_res, 3, &spt_tco_platform_data,
> +					tco_res, 2, &spt_tco_platform_data,
>  					sizeof(spt_tco_platform_data));
>  }
>  
> @@ -1576,17 +1571,16 @@ static struct platform_device *
>  i801_add_tco_cnl(struct i801_priv *priv, struct pci_dev *pci_dev,
>  		 struct resource *tco_res)
>  {
> -	return platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1,
> -					tco_res, 2, &cnl_tco_platform_data,
> -					sizeof(cnl_tco_platform_data));
> +	return platform_device_register_resndata(&pci_dev->dev,
> +			"iTCO_wdt", -1, tco_res, 1, &cnl_tco_platform_data,
> +			sizeof(cnl_tco_platform_data));
>  }
>  
>  static void i801_add_tco(struct i801_priv *priv)
>  {
> -	u32 base_addr, tco_base, tco_ctl, ctrl_val;
>  	struct pci_dev *pci_dev = priv->pci_dev;
> -	struct resource tco_res[3], *res;
> -	unsigned int devfn;
> +	struct resource tco_res[2], *res;
> +	u32 tco_base, tco_ctl;
>  
>  	/* If we have ACPI based watchdog use that instead */
>  	if (acpi_has_watchdog())
> @@ -1601,30 +1595,15 @@ static void i801_add_tco(struct i801_priv *priv)
>  		return;
>  
>  	memset(tco_res, 0, sizeof(tco_res));
> -
> -	res = &tco_res[ICH_RES_IO_TCO];
> -	res->start = tco_base & ~1;
> -	res->end = res->start + 32 - 1;
> -	res->flags = IORESOURCE_IO;
> -
>  	/*
> -	 * Power Management registers.
> +	 * Always populate the main iTCO IO resource here. The second entry
> +	 * for NO_REBOOT MMIO is filled by the SPT specific function.
>  	 */
> -	devfn = PCI_DEVFN(PCI_SLOT(pci_dev->devfn), 2);
> -	pci_bus_read_config_dword(pci_dev->bus, devfn, ACPIBASE, &base_addr);
> -
> -	res = &tco_res[ICH_RES_IO_SMI];
> -	res->start = (base_addr & ~1) + ACPIBASE_SMI_OFF;
> -	res->end = res->start + 3;
> +	res = &tco_res[0];
> +	res->start = tco_base & ~1;
> +	res->end = res->start + 32 - 1;
>  	res->flags = IORESOURCE_IO;
>  
> -	/*
> -	 * Enable the ACPI I/O space.
> -	 */
> -	pci_bus_read_config_dword(pci_dev->bus, devfn, ACPICTRL, &ctrl_val);
> -	ctrl_val |= ACPICTRL_EN;
> -	pci_bus_write_config_dword(pci_dev->bus, devfn, ACPICTRL, ctrl_val);
> -
>  	if (priv->features & FEATURE_TCO_CNL)
>  		priv->tco_pdev = i801_add_tco_cnl(priv, pci_dev, tco_res);
>  	else
> 


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 1/3] watchdog: iTCO_wdt: Export vendorsupport
  2020-02-26 13:21 ` [PATCH v2 1/3] watchdog: iTCO_wdt: Export vendorsupport Mika Westerberg
@ 2020-02-26 13:32   ` Guenter Roeck
  2020-02-26 13:39     ` Mika Westerberg
  2020-03-10  9:30   ` Wolfram Sang
  1 sibling, 1 reply; 13+ messages in thread
From: Guenter Roeck @ 2020-02-26 13:32 UTC (permalink / raw)
  To: Mika Westerberg, Jean Delvare, Wim Van Sebroeck, Wolfram Sang
  Cc: Martin Volf, Andy Shevchenko, Jarkko Nikula, linux-i2c,
	linux-hwmon, linux-watchdog, linux-kernel

On 2/26/20 5:21 AM, Mika Westerberg wrote:
> In preparation for making ->smi_res optional the iTCO_wdt driver needs
> to know whether vendorsupport is being set to non-zero. For this reason
> export the variable.
> 
> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>

Reviewed-by: Guenter Roeck <linux@roeck-us.net>

I assume you'll send the series upstream in one go (through i2c ?).
If not, please let me and Wim know.

Thanks,
Guenter

> ---
>  drivers/watchdog/iTCO_vendor.h         |  2 ++
>  drivers/watchdog/iTCO_vendor_support.c | 16 +++++++++-------
>  2 files changed, 11 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/watchdog/iTCO_vendor.h b/drivers/watchdog/iTCO_vendor.h
> index 0f7373ba10d5..69e92e692ae0 100644
> --- a/drivers/watchdog/iTCO_vendor.h
> +++ b/drivers/watchdog/iTCO_vendor.h
> @@ -1,10 +1,12 @@
>  /* SPDX-License-Identifier: GPL-2.0 */
>  /* iTCO Vendor Specific Support hooks */
>  #ifdef CONFIG_ITCO_VENDOR_SUPPORT
> +extern int iTCO_vendorsupport;
>  extern void iTCO_vendor_pre_start(struct resource *, unsigned int);
>  extern void iTCO_vendor_pre_stop(struct resource *);
>  extern int iTCO_vendor_check_noreboot_on(void);
>  #else
> +#define iTCO_vendorsupport				0
>  #define iTCO_vendor_pre_start(acpibase, heartbeat)	{}
>  #define iTCO_vendor_pre_stop(acpibase)			{}
>  #define iTCO_vendor_check_noreboot_on()			1
> diff --git a/drivers/watchdog/iTCO_vendor_support.c b/drivers/watchdog/iTCO_vendor_support.c
> index 4f1b96f59349..cf0eaa04b064 100644
> --- a/drivers/watchdog/iTCO_vendor_support.c
> +++ b/drivers/watchdog/iTCO_vendor_support.c
> @@ -39,8 +39,10 @@
>  /* Broken BIOS */
>  #define BROKEN_BIOS		911
>  
> -static int vendorsupport;
> -module_param(vendorsupport, int, 0);
> +int iTCO_vendorsupport;
> +EXPORT_SYMBOL(iTCO_vendorsupport);
> +
> +module_param_named(vendorsupport, iTCO_vendorsupport, int, 0);
>  MODULE_PARM_DESC(vendorsupport, "iTCO vendor specific support mode, default="
>  			"0 (none), 1=SuperMicro Pent3, 911=Broken SMI BIOS");
>  
> @@ -152,7 +154,7 @@ static void broken_bios_stop(struct resource *smires)
>  void iTCO_vendor_pre_start(struct resource *smires,
>  			   unsigned int heartbeat)
>  {
> -	switch (vendorsupport) {
> +	switch (iTCO_vendorsupport) {
>  	case SUPERMICRO_OLD_BOARD:
>  		supermicro_old_pre_start(smires);
>  		break;
> @@ -165,7 +167,7 @@ EXPORT_SYMBOL(iTCO_vendor_pre_start);
>  
>  void iTCO_vendor_pre_stop(struct resource *smires)
>  {
> -	switch (vendorsupport) {
> +	switch (iTCO_vendorsupport) {
>  	case SUPERMICRO_OLD_BOARD:
>  		supermicro_old_pre_stop(smires);
>  		break;
> @@ -178,7 +180,7 @@ EXPORT_SYMBOL(iTCO_vendor_pre_stop);
>  
>  int iTCO_vendor_check_noreboot_on(void)
>  {
> -	switch (vendorsupport) {
> +	switch (iTCO_vendorsupport) {
>  	case SUPERMICRO_OLD_BOARD:
>  		return 0;
>  	default:
> @@ -189,13 +191,13 @@ EXPORT_SYMBOL(iTCO_vendor_check_noreboot_on);
>  
>  static int __init iTCO_vendor_init_module(void)
>  {
> -	if (vendorsupport == SUPERMICRO_NEW_BOARD) {
> +	if (iTCO_vendorsupport == SUPERMICRO_NEW_BOARD) {
>  		pr_warn("Option vendorsupport=%d is no longer supported, "
>  			"please use the w83627hf_wdt driver instead\n",
>  			SUPERMICRO_NEW_BOARD);
>  		return -EINVAL;
>  	}
> -	pr_info("vendor-support=%d\n", vendorsupport);
> +	pr_info("vendor-support=%d\n", iTCO_vendorsupport);
>  	return 0;
>  }
>  
> 


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 2/3] watchdog: iTCO_wdt: Make ICH_RES_IO_SMI optional
  2020-02-26 13:21 ` [PATCH v2 2/3] watchdog: iTCO_wdt: Make ICH_RES_IO_SMI optional Mika Westerberg
@ 2020-02-26 13:33   ` Guenter Roeck
  2020-03-10  9:30   ` Wolfram Sang
  1 sibling, 0 replies; 13+ messages in thread
From: Guenter Roeck @ 2020-02-26 13:33 UTC (permalink / raw)
  To: Mika Westerberg, Jean Delvare, Wim Van Sebroeck, Wolfram Sang
  Cc: Martin Volf, Andy Shevchenko, Jarkko Nikula, linux-i2c,
	linux-hwmon, linux-watchdog, linux-kernel

On 2/26/20 5:21 AM, Mika Westerberg wrote:
> The iTCO_wdt driver only needs ICH_RES_IO_SMI I/O resource when either
> turn_SMI_watchdog_clear_off module parameter is set to match ->iTCO_version
> (or higher), and when legacy iTCO_vendorsupport is set. Modify the driver
> so that ICH_RES_IO_SMI is optional if the two conditions are not met.
> 
> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>

Reviewed-by: Guenter Roeck <linux@roeck-us.net>

> ---
>  drivers/watchdog/iTCO_wdt.c | 28 ++++++++++++++++------------
>  1 file changed, 16 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/watchdog/iTCO_wdt.c b/drivers/watchdog/iTCO_wdt.c
> index 156360e37714..e707c4797f76 100644
> --- a/drivers/watchdog/iTCO_wdt.c
> +++ b/drivers/watchdog/iTCO_wdt.c
> @@ -459,13 +459,25 @@ static int iTCO_wdt_probe(struct platform_device *pdev)
>  	if (!p->tco_res)
>  		return -ENODEV;
>  
> -	p->smi_res = platform_get_resource(pdev, IORESOURCE_IO, ICH_RES_IO_SMI);
> -	if (!p->smi_res)
> -		return -ENODEV;
> -
>  	p->iTCO_version = pdata->version;
>  	p->pci_dev = to_pci_dev(dev->parent);
>  
> +	p->smi_res = platform_get_resource(pdev, IORESOURCE_IO, ICH_RES_IO_SMI);
> +	if (p->smi_res) {
> +		/* The TCO logic uses the TCO_EN bit in the SMI_EN register */
> +		if (!devm_request_region(dev, p->smi_res->start,
> +					 resource_size(p->smi_res),
> +					 pdev->name)) {
> +			pr_err("I/O address 0x%04llx already in use, device disabled\n",
> +			       (u64)SMI_EN(p));
> +			return -EBUSY;
> +		}
> +	} else if (iTCO_vendorsupport ||
> +		   turn_SMI_watchdog_clear_off >= p->iTCO_version) {
> +		pr_err("SMI I/O resource is missing\n");
> +		return -ENODEV;
> +	}
> +
>  	iTCO_wdt_no_reboot_bit_setup(p, pdata);
>  
>  	/*
> @@ -492,14 +504,6 @@ static int iTCO_wdt_probe(struct platform_device *pdev)
>  	/* Set the NO_REBOOT bit to prevent later reboots, just for sure */
>  	p->update_no_reboot_bit(p->no_reboot_priv, true);
>  
> -	/* The TCO logic uses the TCO_EN bit in the SMI_EN register */
> -	if (!devm_request_region(dev, p->smi_res->start,
> -				 resource_size(p->smi_res),
> -				 pdev->name)) {
> -		pr_err("I/O address 0x%04llx already in use, device disabled\n",
> -		       (u64)SMI_EN(p));
> -		return -EBUSY;
> -	}
>  	if (turn_SMI_watchdog_clear_off >= p->iTCO_version) {
>  		/*
>  		 * Bit 13: TCO_EN -> 0
> 


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 1/3] watchdog: iTCO_wdt: Export vendorsupport
  2020-02-26 13:32   ` Guenter Roeck
@ 2020-02-26 13:39     ` Mika Westerberg
  0 siblings, 0 replies; 13+ messages in thread
From: Mika Westerberg @ 2020-02-26 13:39 UTC (permalink / raw)
  To: Guenter Roeck
  Cc: Jean Delvare, Wim Van Sebroeck, Wolfram Sang, Martin Volf,
	Andy Shevchenko, Jarkko Nikula, linux-i2c, linux-hwmon,
	linux-watchdog, linux-kernel

On Wed, Feb 26, 2020 at 05:32:40AM -0800, Guenter Roeck wrote:
> On 2/26/20 5:21 AM, Mika Westerberg wrote:
> > In preparation for making ->smi_res optional the iTCO_wdt driver needs
> > to know whether vendorsupport is being set to non-zero. For this reason
> > export the variable.
> > 
> > Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
> 
> Reviewed-by: Guenter Roeck <linux@roeck-us.net>

Thanks!

> I assume you'll send the series upstream in one go (through i2c ?).
> If not, please let me and Wim know.

Yes, I was hoping that Wolfram could take these through his I2C tree.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 0/3] i2c: i801: Fix iTCO_wdt resource creation if PMC is not present
  2020-02-26 13:21 [PATCH v2 0/3] i2c: i801: Fix iTCO_wdt resource creation if PMC is not present Mika Westerberg
                   ` (2 preceding siblings ...)
  2020-02-26 13:21 ` [PATCH v2 3/3] i2c: i801: Do not add ICH_RES_IO_SMI for the iTCO_wdt device Mika Westerberg
@ 2020-02-28 17:03 ` Wolfram Sang
  2020-03-02 10:12   ` Mika Westerberg
  3 siblings, 1 reply; 13+ messages in thread
From: Wolfram Sang @ 2020-02-28 17:03 UTC (permalink / raw)
  To: Mika Westerberg
  Cc: Guenter Roeck, Jean Delvare, Wim Van Sebroeck, Martin Volf,
	Andy Shevchenko, Jarkko Nikula, linux-i2c, linux-hwmon,
	linux-watchdog, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 1400 bytes --]

On Wed, Feb 26, 2020 at 04:21:19PM +0300, Mika Westerberg wrote:
> Hi all,
> 
> This series aims to fix the issue reported by Martin Volf [1] that prevents
> the nct6775 driver from loading.
> 
> I added Fixes tag to the last patch but not stable tag because the other
> two patches it depends are not really stable material IMO. Please let me
> know if there is a better way to organize these :)
> 
> I tested this on Intel Whiskey Lake based system (CNL derived) and on Comet
> Lake-V based system (SPT derived and the iTCO_wdt still works and I can see
> the expected resources in /proc/ioports and /proc/iomem.
> 
> The previous version of the patch series can be found here:
> 
>   https://lore.kernel.org/linux-hwmon/20200225123802.88984-1-mika.westerberg@linux.intel.com/
> 
> Changes from the previous version:
> 
>   * Call request_region() also for iTCO_vendorsupport
>   * Drop the core populating ICH_RES_IO_SMI completely from i2c-i801.c
> 
> [1] https://lore.kernel.org/linux-hwmon/CAM1AHpQ4196tyD=HhBu-2donSsuogabkfP03v1YF26Q7_BgvgA@mail.gmail.com/

I can take this series via I2C. Just wanted to let you know that I am
aiming for rc5, because I'd like to have this in linux-next for a week
to make sure we don't regress again (despite all precautions) somewhere
else.

Thanks to everyone to get this regression handled in such a concentrated
manner!


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 0/3] i2c: i801: Fix iTCO_wdt resource creation if PMC is not present
  2020-02-28 17:03 ` [PATCH v2 0/3] i2c: i801: Fix iTCO_wdt resource creation if PMC is not present Wolfram Sang
@ 2020-03-02 10:12   ` Mika Westerberg
  0 siblings, 0 replies; 13+ messages in thread
From: Mika Westerberg @ 2020-03-02 10:12 UTC (permalink / raw)
  To: Wolfram Sang
  Cc: Guenter Roeck, Jean Delvare, Wim Van Sebroeck, Martin Volf,
	Andy Shevchenko, Jarkko Nikula, linux-i2c, linux-hwmon,
	linux-watchdog, linux-kernel

On Fri, Feb 28, 2020 at 06:03:42PM +0100, Wolfram Sang wrote:
> On Wed, Feb 26, 2020 at 04:21:19PM +0300, Mika Westerberg wrote:
> > Hi all,
> > 
> > This series aims to fix the issue reported by Martin Volf [1] that prevents
> > the nct6775 driver from loading.
> > 
> > I added Fixes tag to the last patch but not stable tag because the other
> > two patches it depends are not really stable material IMO. Please let me
> > know if there is a better way to organize these :)
> > 
> > I tested this on Intel Whiskey Lake based system (CNL derived) and on Comet
> > Lake-V based system (SPT derived and the iTCO_wdt still works and I can see
> > the expected resources in /proc/ioports and /proc/iomem.
> > 
> > The previous version of the patch series can be found here:
> > 
> >   https://lore.kernel.org/linux-hwmon/20200225123802.88984-1-mika.westerberg@linux.intel.com/
> > 
> > Changes from the previous version:
> > 
> >   * Call request_region() also for iTCO_vendorsupport
> >   * Drop the core populating ICH_RES_IO_SMI completely from i2c-i801.c
> > 
> > [1] https://lore.kernel.org/linux-hwmon/CAM1AHpQ4196tyD=HhBu-2donSsuogabkfP03v1YF26Q7_BgvgA@mail.gmail.com/
> 
> I can take this series via I2C. Just wanted to let you know that I am
> aiming for rc5, because I'd like to have this in linux-next for a week
> to make sure we don't regress again (despite all precautions) somewhere
> else.

Makes sense, thanks!

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 1/3] watchdog: iTCO_wdt: Export vendorsupport
  2020-02-26 13:21 ` [PATCH v2 1/3] watchdog: iTCO_wdt: Export vendorsupport Mika Westerberg
  2020-02-26 13:32   ` Guenter Roeck
@ 2020-03-10  9:30   ` Wolfram Sang
  1 sibling, 0 replies; 13+ messages in thread
From: Wolfram Sang @ 2020-03-10  9:30 UTC (permalink / raw)
  To: Mika Westerberg
  Cc: Guenter Roeck, Jean Delvare, Wim Van Sebroeck, Martin Volf,
	Andy Shevchenko, Jarkko Nikula, linux-i2c, linux-hwmon,
	linux-watchdog, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 394 bytes --]

On Wed, Feb 26, 2020 at 04:21:20PM +0300, Mika Westerberg wrote:
> In preparation for making ->smi_res optional the iTCO_wdt driver needs
> to know whether vendorsupport is being set to non-zero. For this reason
> export the variable.
> 
> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>

Sorry, I missed rc5 but it will be in rc6.

Applied to for-current, thanks!


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 2/3] watchdog: iTCO_wdt: Make ICH_RES_IO_SMI optional
  2020-02-26 13:21 ` [PATCH v2 2/3] watchdog: iTCO_wdt: Make ICH_RES_IO_SMI optional Mika Westerberg
  2020-02-26 13:33   ` Guenter Roeck
@ 2020-03-10  9:30   ` Wolfram Sang
  1 sibling, 0 replies; 13+ messages in thread
From: Wolfram Sang @ 2020-03-10  9:30 UTC (permalink / raw)
  To: Mika Westerberg
  Cc: Guenter Roeck, Jean Delvare, Wim Van Sebroeck, Martin Volf,
	Andy Shevchenko, Jarkko Nikula, linux-i2c, linux-hwmon,
	linux-watchdog, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 478 bytes --]

On Wed, Feb 26, 2020 at 04:21:21PM +0300, Mika Westerberg wrote:
> The iTCO_wdt driver only needs ICH_RES_IO_SMI I/O resource when either
> turn_SMI_watchdog_clear_off module parameter is set to match ->iTCO_version
> (or higher), and when legacy iTCO_vendorsupport is set. Modify the driver
> so that ICH_RES_IO_SMI is optional if the two conditions are not met.
> 
> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>

Applied to for-current, thanks!


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2 3/3] i2c: i801: Do not add ICH_RES_IO_SMI for the iTCO_wdt device
  2020-02-26 13:21 ` [PATCH v2 3/3] i2c: i801: Do not add ICH_RES_IO_SMI for the iTCO_wdt device Mika Westerberg
  2020-02-26 13:31   ` Guenter Roeck
@ 2020-03-10  9:31   ` Wolfram Sang
  1 sibling, 0 replies; 13+ messages in thread
From: Wolfram Sang @ 2020-03-10  9:31 UTC (permalink / raw)
  To: Mika Westerberg
  Cc: Guenter Roeck, Jean Delvare, Wim Van Sebroeck, Martin Volf,
	Andy Shevchenko, Jarkko Nikula, linux-i2c, linux-hwmon,
	linux-watchdog, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 1866 bytes --]

On Wed, Feb 26, 2020 at 04:21:22PM +0300, Mika Westerberg wrote:
> Martin noticed that nct6775 driver does not load properly on his system
> in v5.4+ kernels. The issue was bisected to commit b84398d6d7f9 ("i2c:
> i801: Use iTCO version 6 in Cannon Lake PCH and beyond") but it is
> likely not the culprit because the faulty code has been in the driver
> already since commit 9424693035a5 ("i2c: i801: Create iTCO device on
> newer Intel PCHs"). So more likely some commit that added PCI IDs of
> recent chipsets made the driver to create the iTCO_wdt device on Martins
> system.
> 
> The issue was debugged to be PCI configuration access to the PMC device
> that is not present. This returns all 1's when read and this caused the
> iTCO_wdt driver to accidentally request resourses used by nct6775.
> 
> It turns out that the SMI resource is only required for some ancient
> systems, not the ones supported by this driver. For this reason do not
> populate the SMI resource at all and drop all the related code. The
> driver now always populates the main I/O resource and only in case of SPT
> (Intel Sunrisepoint) compatible devices it adds another resource for the
> NO_REBOOT bit. These two resources are of different types so
> platform_get_resource() used by the iTCO_wdt driver continues to find
> the both resources at index 0.
> 
> Link: https://lore.kernel.org/linux-hwmon/CAM1AHpQ4196tyD=HhBu-2donSsuogabkfP03v1YF26Q7_BgvgA@mail.gmail.com/
> Fixes: 9424693035a5 ("i2c: i801: Create iTCO device on newer Intel PCHs")
> Reported-by: Martin Volf <martin.volf.42@gmail.com>
> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>

I added a comment saying that the whole series is needed for a complete
fix. Dunno if there is a better way to express such dependencies for
stable.

Applied to for-current, thanks!


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, back to index

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-26 13:21 [PATCH v2 0/3] i2c: i801: Fix iTCO_wdt resource creation if PMC is not present Mika Westerberg
2020-02-26 13:21 ` [PATCH v2 1/3] watchdog: iTCO_wdt: Export vendorsupport Mika Westerberg
2020-02-26 13:32   ` Guenter Roeck
2020-02-26 13:39     ` Mika Westerberg
2020-03-10  9:30   ` Wolfram Sang
2020-02-26 13:21 ` [PATCH v2 2/3] watchdog: iTCO_wdt: Make ICH_RES_IO_SMI optional Mika Westerberg
2020-02-26 13:33   ` Guenter Roeck
2020-03-10  9:30   ` Wolfram Sang
2020-02-26 13:21 ` [PATCH v2 3/3] i2c: i801: Do not add ICH_RES_IO_SMI for the iTCO_wdt device Mika Westerberg
2020-02-26 13:31   ` Guenter Roeck
2020-03-10  9:31   ` Wolfram Sang
2020-02-28 17:03 ` [PATCH v2 0/3] i2c: i801: Fix iTCO_wdt resource creation if PMC is not present Wolfram Sang
2020-03-02 10:12   ` Mika Westerberg

Linux-Hwmon Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-hwmon/0 linux-hwmon/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-hwmon linux-hwmon/ https://lore.kernel.org/linux-hwmon \
		linux-hwmon@vger.kernel.org
	public-inbox-index linux-hwmon

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-hwmon


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git