Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1375433 > unrolled thread
| Started by | Tan Jui Nee <jui.nee.tan@intel.com> |
|---|---|
| First post | 2016-04-11 05:00 +0200 |
| Last post | 2016-04-12 13:20 +0200 |
| Articles | 4 — 4 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH 3/3] mfd: lpc_ich: Add support for Intel Apollo Lake GPIO pinctrl in non-ACPI system Tan Jui Nee <jui.nee.tan@intel.com> - 2016-04-11 05:00 +0200
Re: [PATCH 3/3] mfd: lpc_ich: Add support for Intel Apollo Lake GPIO pinctrl in non-ACPI system kbuild test robot <lkp@intel.com> - 2016-04-11 05:20 +0200
RE: [PATCH 3/3] mfd: lpc_ich: Add support for Intel Apollo Lake GPIO pinctrl in non-ACPI system "Tan, Jui Nee" <jui.nee.tan@intel.com> - 2016-04-12 10:40 +0200
Re: [PATCH 3/3] mfd: lpc_ich: Add support for Intel Apollo Lake GPIO pinctrl in non-ACPI system Andy Shevchenko <andriy.shevchenko@linux.intel.com> - 2016-04-12 13:20 +0200
| From | Tan Jui Nee <jui.nee.tan@intel.com> |
|---|---|
| Date | 2016-04-11 05:00 +0200 |
| Subject | [PATCH 3/3] mfd: lpc_ich: Add support for Intel Apollo Lake GPIO pinctrl in non-ACPI system |
| Message-ID | <rmAeZ-75P-3@gated-at.bofh.it> |
This driver uses the P2SB hide/unhide mechanism cooperatively
to pass the PCI BAR address to the gpio platform driver.
Signed-off-by: Tan Jui Nee <jui.nee.tan@intel.com>
---
drivers/mfd/Kconfig | 3 +-
drivers/mfd/lpc_ich.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 121 insertions(+), 1 deletion(-)
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index eea61e3..54fed50 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -359,8 +359,9 @@ config MFD_INTEL_QUARK_I2C_GPIO
config LPC_ICH
tristate "Intel ICH LPC"
- depends on PCI
+ depends on X86 && PCI
select MFD_CORE
+ select P2SB
help
The LPC bridge function of the Intel ICH provides support for
many functional units. This driver provides needed support for
diff --git a/drivers/mfd/lpc_ich.c b/drivers/mfd/lpc_ich.c
index bd3aa45..c28ca26 100644
--- a/drivers/mfd/lpc_ich.c
+++ b/drivers/mfd/lpc_ich.c
@@ -68,6 +68,10 @@
#include <linux/mfd/core.h>
#include <linux/mfd/lpc_ich.h>
#include <linux/platform_data/itco_wdt.h>
+#include <linux/pinctrl/pinctrl.h>
+#include <linux/types.h>
+
+#include <asm/p2sb.h>
#define ACPIBASE 0x40
#define ACPIBASE_GPE_OFF 0x28
@@ -94,6 +98,19 @@
#define wdt_mem_res(i) wdt_res(ICH_RES_MEM_OFF, i)
#define wdt_res(b, i) (&wdt_ich_res[(b) + (i)])
+/* Offset data for Apollo Lake GPIO communities */
+#define APL_GPIO_SOUTHWEST_OFFSET 0xc0
+#define APL_GPIO_NORTHWEST_OFFSET 0xc4
+#define APL_GPIO_NORTH_OFFSET 0xc5
+#define APL_GPIO_WEST_OFFSET 0xc7
+
+#define APL_GPIO_SOUTHWEST_END (43 * 0x8)
+#define APL_GPIO_NORTHWEST_END (77 * 0x8)
+#define APL_GPIO_NORTH_END (90 * 0x8)
+#define APL_GPIO_WEST_END (47 * 0x8)
+
+#define APL_GPIO_IRQ 14
+
struct lpc_ich_priv {
int chipset;
@@ -133,6 +150,39 @@ static struct resource gpio_ich_res[] = {
},
};
+static struct resource apl_gpio_io_res[][2] = {
+ {
+ {
+ .start = APL_GPIO_NORTH_OFFSET << 16,
+ .end = (APL_GPIO_NORTH_OFFSET << 16)
+ + APL_GPIO_NORTH_END,
+ },
+ },
+ {
+ {
+ .start = APL_GPIO_NORTHWEST_OFFSET << 16,
+ .end = (APL_GPIO_NORTHWEST_OFFSET << 16)
+ + APL_GPIO_NORTHWEST_END,
+ },
+ },
+ {
+ {
+ .start = APL_GPIO_WEST_OFFSET << 16,
+ .end = (APL_GPIO_WEST_OFFSET << 16)
+ + APL_GPIO_WEST_END,
+ },
+ },
+ {
+ {
+ .start = APL_GPIO_SOUTHWEST_OFFSET << 16,
+ .end = (APL_GPIO_SOUTHWEST_OFFSET << 16)
+ + APL_GPIO_SOUTHWEST_END,
+ },
+ },
+};
+
+static struct pinctrl_pin_desc apl_pinctrl_pdata;
+
static struct mfd_cell lpc_ich_wdt_cell = {
.name = "iTCO_wdt",
.num_resources = ARRAY_SIZE(wdt_ich_res),
@@ -147,6 +197,15 @@ static struct mfd_cell lpc_ich_gpio_cell = {
.ignore_resource_conflicts = true,
};
+static struct mfd_cell apl_gpio_devices = {
+ .name = "apl-pinctrl",
+ .num_resources = ARRAY_SIZE(apl_gpio_io_res),
+ .resources = apl_gpio_io_res[1],
+ .pdata_size = sizeof(apl_pinctrl_pdata),
+ .platform_data = &apl_pinctrl_pdata,
+ .ignore_resource_conflicts = true,
+};
+
/* chipset related info */
enum lpc_chipsets {
LPC_ICH = 0, /* ICH */
@@ -216,6 +275,7 @@ enum lpc_chipsets {
LPC_BRASWELL, /* Braswell SoC */
LPC_LEWISBURG, /* Lewisburg */
LPC_9S, /* 9 Series */
+ LPC_APL, /* Apollo Lake SoC */
};
static struct lpc_ich_info lpc_chipset_info[] = {
@@ -531,6 +591,10 @@ static struct lpc_ich_info lpc_chipset_info[] = {
.name = "9 Series",
.iTCO_version = 2,
},
+ [LPC_APL] = {
+ .name = "Apollo Lake SoC",
+ .iTCO_version = 5,
+ },
};
/*
@@ -679,6 +743,7 @@ static const struct pci_device_id lpc_ich_ids[] = {
{ PCI_VDEVICE(INTEL, 0x3b14), LPC_3420},
{ PCI_VDEVICE(INTEL, 0x3b16), LPC_3450},
{ PCI_VDEVICE(INTEL, 0x5031), LPC_EP80579},
+ { PCI_VDEVICE(INTEL, 0x5ae8), LPC_APL},
{ PCI_VDEVICE(INTEL, 0x8c40), LPC_LPT},
{ PCI_VDEVICE(INTEL, 0x8c41), LPC_LPT},
{ PCI_VDEVICE(INTEL, 0x8c42), LPC_LPT},
@@ -1050,6 +1115,57 @@ wdt_done:
return ret;
}
+static int lpc_ich_misc(struct pci_dev *dev, enum lpc_chipsets chipset)
+{
+ unsigned int apl_p2sb = PCI_DEVFN(0x0d, 0);
+ unsigned int i;
+ int ret;
+
+ switch (chipset) {
+ case LPC_APL:
+ /*
+ * Apollo lake, has not 1, but 4 gpio controllers,
+ * handle it a bit differently.
+ */
+
+ for (i = 0; i < ARRAY_SIZE(apl_gpio_io_res); i++) {
+ struct resource *res = apl_gpio_io_res[i];
+
+ apl_gpio_devices.resources = res;
+
+ /* Fill MEM resource */
+ ret = p2sb_bar(dev, apl_p2sb, res++);
+ if (ret)
+ goto warn_continue;
+
+ /* Fill IRQ resource */
+ res->start = APL_GPIO_IRQ;
+ res->end = res->start;
+ res->flags = IORESOURCE_IRQ;
+
+ apl_pinctrl_pdata.name = kasprintf(GFP_KERNEL, "%u",
+ i + 1);
+ if (apl_pinctrl_pdata.name)
+ ret = mfd_add_devices(&dev->dev, i,
+ &apl_gpio_devices, 1, NULL, 0, NULL);
+ else
+ ret = -ENOMEM;
+
+warn_continue:
+ if (ret)
+ dev_warn(&dev->dev,
+ "Failed to add Apollo Lake GPIO %s: %d\n",
+ apl_pinctrl_pdata.name, ret);
+
+ kfree(apl_pinctrl_pdata.name);
+ }
+ break;
+ default:
+ return -ENODEV;
+ }
+ return 0;
+}
+
static int lpc_ich_probe(struct pci_dev *dev,
const struct pci_device_id *id)
{
@@ -1093,6 +1209,9 @@ static int lpc_ich_probe(struct pci_dev *dev,
cell_added = true;
}
+ if (!lpc_ich_misc(dev, priv->chipset))
+ cell_added = true;
+
/*
* We only care if at least one or none of the cells registered
* successfully.
--
1.9.1
[toc] | [next] | [standalone]
| From | kbuild test robot <lkp@intel.com> |
|---|---|
| Date | 2016-04-11 05:20 +0200 |
| Subject | Re: [PATCH 3/3] mfd: lpc_ich: Add support for Intel Apollo Lake GPIO pinctrl in non-ACPI system |
| Message-ID | <rmAym-7ws-5@gated-at.bofh.it> |
| In reply to | #1375433 |
[Multipart message — attachments visible in raw view] — view raw
Hi Tan,
[auto build test ERROR on tip/x86/core]
[also build test ERROR on v4.6-rc3 next-20160408]
[if your patch is applied to the wrong git tree, please drop us a note to help improving the system]
url: https://github.com/0day-ci/linux/commits/Tan-Jui-Nee/pinctrl-broxton-enable-platform-device-in-the-absent-of-ACPI-enumeration/20160411-105542
config: x86_64-randconfig-x019-201615 (attached as .config)
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
All errors (new ones prefixed by >>):
>> drivers/mfd/lpc_ich.c:204:22: error: invalid application of 'sizeof' to incomplete type 'struct pinctrl_pin_desc'
.pdata_size = sizeof(apl_pinctrl_pdata),
^
drivers/mfd/lpc_ich.c: In function 'lpc_ich_misc':
>> drivers/mfd/lpc_ich.c:1146:4: error: invalid use of undefined type 'struct pinctrl_pin_desc'
apl_pinctrl_pdata.name = kasprintf(GFP_KERNEL, "%u",
^
drivers/mfd/lpc_ich.c:1148:4: error: invalid use of undefined type 'struct pinctrl_pin_desc'
if (apl_pinctrl_pdata.name)
^
drivers/mfd/lpc_ich.c:1158:7: error: invalid use of undefined type 'struct pinctrl_pin_desc'
apl_pinctrl_pdata.name, ret);
^
drivers/mfd/lpc_ich.c:1160:4: error: invalid use of undefined type 'struct pinctrl_pin_desc'
kfree(apl_pinctrl_pdata.name);
^
vim +204 drivers/mfd/lpc_ich.c
198 };
199
200 static struct mfd_cell apl_gpio_devices = {
201 .name = "apl-pinctrl",
202 .num_resources = ARRAY_SIZE(apl_gpio_io_res),
203 .resources = apl_gpio_io_res[1],
> 204 .pdata_size = sizeof(apl_pinctrl_pdata),
205 .platform_data = &apl_pinctrl_pdata,
206 .ignore_resource_conflicts = true,
207 };
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[toc] | [prev] | [next] | [standalone]
| From | "Tan, Jui Nee" <jui.nee.tan@intel.com> |
|---|---|
| Date | 2016-04-12 10:40 +0200 |
| Subject | RE: [PATCH 3/3] mfd: lpc_ich: Add support for Intel Apollo Lake GPIO pinctrl in non-ACPI system |
| Message-ID | <rn21A-45R-9@gated-at.bofh.it> |
| In reply to | #1375433 |
> -----Original Message-----
> From: lkp
> Sent: Monday, April 11, 2016 12:35 PM
> To: Tan, Jui Nee <jui.nee.tan@intel.com>
> Cc: kbuild-all@01.org; mika.westerberg@linux.intel.com;
> heikki.krogerus@linux.intel.com; andriy.shevchenko@linux.intel.com;
> tglx@linutronix.de; mingo@redhat.com; hpa@zytor.com; x86@kernel.org;
> ptyser@xes-inc.com; lee.jones@linaro.org; linux-gpio@vger.kernel.org;
> linux-kernel@vger.kernel.org; Tan, Jui Nee <jui.nee.tan@intel.com>; Yong,
> Jonathan <jonathan.yong@intel.com>; Yu, Ong Hock
> <ong.hock.yu@intel.com>; Voon, Weifeng <weifeng.voon@intel.com>; Wan
> Mohamad, Wan Ahmad Zainie
> <wan.ahmad.zainie.wan.mohamad@intel.com>
> Subject: Re: [PATCH 3/3] mfd: lpc_ich: Add support for Intel Apollo Lake GPIO
> pinctrl in non-ACPI system
>
> Hi Tan,
>
> [auto build test ERROR on tip/x86/core]
> [also build test ERROR on v4.6-rc3 next-20160408] [if your patch is applied to
> the wrong git tree, please drop us a note to help improving the system]
>
> url: https://github.com/0day-ci/linux/commits/Tan-Jui-Nee/pinctrl-
> broxton-enable-platform-device-in-the-absent-of-ACPI-
> enumeration/20160411-105542
> config: x86_64-randconfig-n0-04111131 (attached as .config)
> reproduce:
> # save the attached .config to linux build tree
> make ARCH=x86_64
>
> All error/warnings (new ones prefixed by >>):
>
> drivers/mfd/lpc_ich.c:204:22: error: invalid application of 'sizeof' to
> incomplete type 'struct pinctrl_pin_desc'
> .pdata_size = sizeof(apl_pinctrl_pdata),
> ^
> drivers/mfd/lpc_ich.c: In function 'lpc_ich_misc':
> drivers/mfd/lpc_ich.c:1146:4: error: invalid use of undefined type 'struct
> pinctrl_pin_desc'
> apl_pinctrl_pdata.name = kasprintf(GFP_KERNEL, "%u",
> ^
> drivers/mfd/lpc_ich.c:1148:4: error: invalid use of undefined type 'struct
> pinctrl_pin_desc'
> if (apl_pinctrl_pdata.name)
> ^
> drivers/mfd/lpc_ich.c:1148:4: error: invalid use of undefined type 'struct
> pinctrl_pin_desc'
> In file included from include/linux/linkage.h:4:0,
> from include/linux/kernel.h:6,
> from drivers/mfd/lpc_ich.c:63:
> >> include/linux/compiler.h:150:17: error: invalid use of undefined type
> 'struct pinctrl_pin_desc'
> static struct ftrace_branch_data \
> ^
> include/linux/compiler.h:145:23: note: in expansion of macro '__trace_if'
> #define if(cond, ...) __trace_if( (cond , ## __VA_ARGS__) )
> ^
> >> drivers/mfd/lpc_ich.c:1148:4: note: in expansion of macro 'if'
> if (apl_pinctrl_pdata.name)
> ^
> drivers/mfd/lpc_ich.c:1158:7: error: invalid use of undefined type 'struct
> pinctrl_pin_desc'
> apl_pinctrl_pdata.name, ret);
> ^
> drivers/mfd/lpc_ich.c:1160:4: error: invalid use of undefined type 'struct
> pinctrl_pin_desc'
> kfree(apl_pinctrl_pdata.name);
> ^
>
> vim +150 include/linux/compiler.h
>
> 2bcd521a Steven Rostedt 2008-11-21 144 */
> ab3c9c68 Linus Torvalds 2009-04-07 145 #define if(cond, ...) __trace_if(
> (cond , ## __VA_ARGS__) )
> ab3c9c68 Linus Torvalds 2009-04-07 146 #define __trace_if(cond) \
> ab3c9c68 Linus Torvalds 2009-04-07 147 if
> (__builtin_constant_p((cond)) ? !!(cond) : \
> 2bcd521a Steven Rostedt 2008-11-21 148 ({
> \
> 2bcd521a Steven Rostedt 2008-11-21 149 int ______r;
> \
> 2bcd521a Steven Rostedt 2008-11-21 @150 static struct
> ftrace_branch_data \
> 2bcd521a Steven Rostedt 2008-11-21 151
> __attribute__((__aligned__(4))) \
> 2bcd521a Steven Rostedt 2008-11-21 152
> __attribute__((section("_ftrace_branch"))) \
> 2bcd521a Steven Rostedt 2008-11-21 153 ______f = {
> \
>
> :::::: The code at line 150 was first introduced by commit
> :::::: 2bcd521a684cc94befbe2ce7d5b613c841b0d304 trace: profile all if
> conditionals
>
> :::::: TO: Steven Rostedt <srostedt@redhat.com>
> :::::: CC: Ingo Molnar <mingo@elte.hu>
>
> ---
> 0-DAY kernel test infrastructure Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all Intel Corporation
Hi Andy, I will send patch v2 that looks like:
+static int lpc_ich_misc(struct pci_dev *dev, enum lpc_chipsets chipset)
+{
...
+ const char *name;
...
+ /* Fill IRQ resource */
+ res->start = APL_GPIO_IRQ;
+ res->end = res->start;
+ res->flags = IORESOURCE_IRQ;
+
+ name = kasprintf(GFP_KERNEL, "%u", i + 1);
+ if (name)
+ ret = mfd_add_devices(&dev->dev, i,
+ &apl_gpio_devices, 1, NULL, 0, NULL);
+ else
+ ret = -ENOMEM;
+
+warn_continue:
+ if (ret)
+ dev_warn(&dev->dev,
+ "Failed to add Apollo Lake GPIO %s: %d\n",
+ name, ret);
+
+ kfree(name);
...
Please let me know if that isn't the right thing. Thanks.
[toc] | [prev] | [next] | [standalone]
| From | Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
|---|---|
| Date | 2016-04-12 13:20 +0200 |
| Subject | Re: [PATCH 3/3] mfd: lpc_ich: Add support for Intel Apollo Lake GPIO pinctrl in non-ACPI system |
| Message-ID | <rn4wp-6yV-7@gated-at.bofh.it> |
| In reply to | #1376561 |
On Tue, 2016-04-12 at 08:34 +0000, Tan, Jui Nee wrote:
> -----Original Message-----
> > From: lkp
> > Sent: Monday, April 11, 2016 12:35 PM
> > To: Tan, Jui Nee <jui.nee.tan@intel.com>
> > Cc: kbuild-all@01.org; mika.westerberg@linux.intel.com;
> > heikki.krogerus@linux.intel.com; andriy.shevchenko@linux.intel.com;
> > tglx@linutronix.de; mingo@redhat.com; hpa@zytor.com; x86@kernel.org;
> > ptyser@xes-inc.com; lee.jones@linaro.org; linux-gpio@vger.kernel.org
> > ;
> > linux-kernel@vger.kernel.org; Tan, Jui Nee <jui.nee.tan@intel.com>;
> > Yong,
> > Jonathan <jonathan.yong@intel.com>; Yu, Ong Hock
> > <ong.hock.yu@intel.com>; Voon, Weifeng <weifeng.voon@intel.com>; Wan
> > Mohamad, Wan Ahmad Zainie
> > <wan.ahmad.zainie.wan.mohamad@intel.com>
> > Subject: Re: [PATCH 3/3] mfd: lpc_ich: Add support for Intel Apollo
> > Lake GPIO
> > pinctrl in non-ACPI system
> >
> > Hi Tan,
> >
> > [auto build test ERROR on tip/x86/core]
> > [also build test ERROR on v4.6-rc3 next-20160408] [if your patch is
> > applied to
> > the wrong git tree, please drop us a note to help improving the
> > system]
> >
> > url: https://github.com/0day-ci/linux/commits/Tan-Jui-Nee/pinctrl
> > -
> > broxton-enable-platform-device-in-the-absent-of-ACPI-
> > enumeration/20160411-105542
> > config: x86_64-randconfig-n0-04111131 (attached as .config)
> > reproduce:
> > # save the attached .config to linux build tree
> > make ARCH=x86_64
> >
> > All error/warnings (new ones prefixed by >>):
> >
> > drivers/mfd/lpc_ich.c:204:22: error: invalid application of
> > 'sizeof' to
> > incomplete type 'struct pinctrl_pin_desc'
> > .pdata_size = sizeof(apl_pinctrl_pdata),
> > ^
> > drivers/mfd/lpc_ich.c: In function 'lpc_ich_misc':
> > drivers/mfd/lpc_ich.c:1146:4: error: invalid use of undefined
> > type 'struct
> > pinctrl_pin_desc'
> >
> Hi Andy, I will send patch v2 that looks like:
>
> +static int lpc_ich_misc(struct pci_dev *dev, enum lpc_chipsets
> chipset)
> +{
> ...
> + const char *name;
This will make things worse.
> Please let me know if that isn't the right thing. Thanks.
Nope. The complain by kbuidbot apparently about specific kernel
configuration. I'm pretty sure it's about CONFIG_PINCTRL=n.
I don't know the best solution here (only add select PINCTRL that sounds
a bit overhead to me), perhaps Lee can advise something.
Perhaps new config option is required for APL like you have
arch/x86:
config X86_INTEL_NON_ACPI
bool "enable support non-ACPI Intel platforms"
help
…
mfd:
config LPC_ICH
tristate "Intel ICH LPC"
- depends on PCI
+ depends on X86 && PCI
select MFD_CORE
+ select P2SB if X86_INTEL_NON_ACPI
+ select PINCTRL if X86_INTEL_NON_ACPI
In the code
#ifdef X86_INTEL_NON_ACPI
#else
#endif
P.S. I don't like this either.
--
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web