2020-06-01 16:21:06

by Dorian Stoll

[permalink] [raw]
Subject: [PATCH] mei: me: Add itouch device IDs for SPT / ICP

These device IDs can be found on Microsoft Surface devices.

Signed-off-by: Dorian Stoll <[email protected]>
---
drivers/misc/mei/hw-me-regs.h | 2 ++
drivers/misc/mei/pci-me.c | 2 ++
2 files changed, 4 insertions(+)

diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-regs.h
index 9392934e3a06..90e7d3020fa5 100644
--- a/drivers/misc/mei/hw-me-regs.h
+++ b/drivers/misc/mei/hw-me-regs.h
@@ -59,6 +59,7 @@

#define MEI_DEV_ID_SPT 0x9D3A /* Sunrise Point */
#define MEI_DEV_ID_SPT_2 0x9D3B /* Sunrise Point 2 */
+#define MEI_DEV_ID_SPT_4 0x9D3E /* Sunrise Point 4 (iTouch) */
#define MEI_DEV_ID_SPT_H 0xA13A /* Sunrise Point H */
#define MEI_DEV_ID_SPT_H_2 0xA13B /* Sunrise Point H 2 */

@@ -90,6 +91,7 @@
#define MEI_DEV_ID_CDF 0x18D3 /* Cedar Fork */

#define MEI_DEV_ID_ICP_LP 0x34E0 /* Ice Lake Point LP */
+#define MEI_DEV_ID_ICP_LP_4 0x34E4 /* Ice Lake Point LP 4 (iTouch) */

#define MEI_DEV_ID_JSP_N 0x4DE0 /* Jasper Lake Point N */

diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c
index a1ed375fed37..5e621e90d8d4 100644
--- a/drivers/misc/mei/pci-me.c
+++ b/drivers/misc/mei/pci-me.c
@@ -68,6 +68,7 @@ static const struct pci_device_id mei_me_pci_tbl[] = {

{MEI_PCI_DEVICE(MEI_DEV_ID_SPT, MEI_ME_PCH8_CFG)},
{MEI_PCI_DEVICE(MEI_DEV_ID_SPT_2, MEI_ME_PCH8_CFG)},
+ {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_4, MEI_ME_PCH8_CFG)},
{MEI_PCI_DEVICE(MEI_DEV_ID_SPT_H, MEI_ME_PCH8_SPS_CFG)},
{MEI_PCI_DEVICE(MEI_DEV_ID_SPT_H_2, MEI_ME_PCH8_SPS_CFG)},
{MEI_PCI_DEVICE(MEI_DEV_ID_LBG, MEI_ME_PCH12_SPS_CFG)},
@@ -94,6 +95,7 @@ static const struct pci_device_id mei_me_pci_tbl[] = {
{MEI_PCI_DEVICE(MEI_DEV_ID_CMP_H_3, MEI_ME_PCH8_CFG)},

{MEI_PCI_DEVICE(MEI_DEV_ID_ICP_LP, MEI_ME_PCH12_CFG)},
+ {MEI_PCI_DEVICE(MEI_DEV_ID_ICP_LP_4, MEI_ME_PCH12_CFG)},

{MEI_PCI_DEVICE(MEI_DEV_ID_TGP_LP, MEI_ME_PCH15_CFG)},

--
2.26.2



2020-06-01 16:38:23

by Tomas Winkler

[permalink] [raw]
Subject: RE: [PATCH] mei: me: Add itouch device IDs for SPT / ICP



> These device IDs can be found on Microsoft Surface devices.
>
> Signed-off-by: Dorian Stoll <[email protected]>

This need to be done differently because of the server platforms conflict.
I have patches for that I will post short, though we are not officially supporting those devices under Linux,
It will be hard to maintain, as currently on the MS surface enables it as far as I know.

> ---
> drivers/misc/mei/hw-me-regs.h | 2 ++
> drivers/misc/mei/pci-me.c | 2 ++
> 2 files changed, 4 insertions(+)
>
> diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-
> regs.h index 9392934e3a06..90e7d3020fa5 100644
> --- a/drivers/misc/mei/hw-me-regs.h
> +++ b/drivers/misc/mei/hw-me-regs.h
> @@ -59,6 +59,7 @@
>
> #define MEI_DEV_ID_SPT 0x9D3A /* Sunrise Point */
> #define MEI_DEV_ID_SPT_2 0x9D3B /* Sunrise Point 2 */
> +#define MEI_DEV_ID_SPT_4 0x9D3E /* Sunrise Point 4 (iTouch) */
> #define MEI_DEV_ID_SPT_H 0xA13A /* Sunrise Point H */
> #define MEI_DEV_ID_SPT_H_2 0xA13B /* Sunrise Point H 2 */
>
> @@ -90,6 +91,7 @@
> #define MEI_DEV_ID_CDF 0x18D3 /* Cedar Fork */
>
> #define MEI_DEV_ID_ICP_LP 0x34E0 /* Ice Lake Point LP */
> +#define MEI_DEV_ID_ICP_LP_4 0x34E4 /* Ice Lake Point LP 4 (iTouch) */
>
> #define MEI_DEV_ID_JSP_N 0x4DE0 /* Jasper Lake Point N */
>
> diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c index
> a1ed375fed37..5e621e90d8d4 100644
> --- a/drivers/misc/mei/pci-me.c
> +++ b/drivers/misc/mei/pci-me.c
> @@ -68,6 +68,7 @@ static const struct pci_device_id mei_me_pci_tbl[] = {
>
> {MEI_PCI_DEVICE(MEI_DEV_ID_SPT, MEI_ME_PCH8_CFG)},
> {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_2, MEI_ME_PCH8_CFG)},
> + {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_4, MEI_ME_PCH8_CFG)},
> {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_H, MEI_ME_PCH8_SPS_CFG)},
> {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_H_2, MEI_ME_PCH8_SPS_CFG)},
> {MEI_PCI_DEVICE(MEI_DEV_ID_LBG, MEI_ME_PCH12_SPS_CFG)},
> @@ -94,6 +95,7 @@ static const struct pci_device_id mei_me_pci_tbl[] = {
> {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_H_3, MEI_ME_PCH8_CFG)},
>
> {MEI_PCI_DEVICE(MEI_DEV_ID_ICP_LP, MEI_ME_PCH12_CFG)},
> + {MEI_PCI_DEVICE(MEI_DEV_ID_ICP_LP_4, MEI_ME_PCH12_CFG)},
>
> {MEI_PCI_DEVICE(MEI_DEV_ID_TGP_LP, MEI_ME_PCH15_CFG)},
>
> --
> 2.26.2
>

2020-06-01 17:28:24

by Dorian Stoll

[permalink] [raw]
Subject: Re: [PATCH] mei: me: Add itouch device IDs for SPT / ICP

>
> > These device IDs can be found on Microsoft Surface devices.
> >
> > Signed-off-by: Dorian Stoll <[email protected]>
>
> This need to be done differently because of the server platforms conflict.
> I have patches for that I will post short, though we are not officially supporting those devices under Linux,
> It will be hard to maintain, as currently on the MS surface enables it as far as I know.
>

Thank you for your response!

If you don't mind, could you elaborate on these devices not being supported
under Linux? Is it just that the functionality they provide
(Intel Precise Touch & Stylus / iTouch / IPTS) won't be supported? Because
that I already know, and it is not the intent of this patch. Or do you mean
that the entire MEI interface won't be supported for these devices?

Some context on this patch: I am part of a small team of volunteers who try
to make the MS Surface devices usable under linux, including the touchscreen
(which uses IPTS as of the Surface Pro 4).

The IPTS driver connects to the device over the MEI bus, but the MEI device
is provided by the iTouch devices. Currently we build our own kernels with
this patch applied to allow the driver to work. All of this is loosely based
on a driver that Intel published a few years ago.

Since the driver is otherwise pretty much standalone, my hope was that adding
these IDs would make it easier to develop / install our driver without having
to recompile the entire kernel (i.e. using DKMS). At least until the driver
has matured enough and is ready for upstream submission itself. Especially
since other iTouch devices have their device IDs added already.

That this would cause conflicts is unfortunate. Judging purely by your words
- without having any deeper knowledge about the MEI bus - it seems that it
might be possible to fix these conflicts? If thats true, I hope it would also
be possible to add these IDs, so that just the MEI interface to IPTS becomes
supported - I don't expect you to support the entire IPTS technology.

> > ---
> > drivers/misc/mei/hw-me-regs.h | 2 ++
> > drivers/misc/mei/pci-me.c | 2 ++
> > 2 files changed, 4 insertions(+)
> >
> > diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-
> > regs.h index 9392934e3a06..90e7d3020fa5 100644
> > --- a/drivers/misc/mei/hw-me-regs.h
> > +++ b/drivers/misc/mei/hw-me-regs.h
> > @@ -59,6 +59,7 @@
> >
> > #define MEI_DEV_ID_SPT 0x9D3A /* Sunrise Point */
> > #define MEI_DEV_ID_SPT_2 0x9D3B /* Sunrise Point 2 */
> > +#define MEI_DEV_ID_SPT_4 0x9D3E /* Sunrise Point 4 (iTouch) */
> > #define MEI_DEV_ID_SPT_H 0xA13A /* Sunrise Point H */
> > #define MEI_DEV_ID_SPT_H_2 0xA13B /* Sunrise Point H 2 */
> >
> > @@ -90,6 +91,7 @@
> > #define MEI_DEV_ID_CDF 0x18D3 /* Cedar Fork */
> >
> > #define MEI_DEV_ID_ICP_LP 0x34E0 /* Ice Lake Point LP */
> > +#define MEI_DEV_ID_ICP_LP_4 0x34E4 /* Ice Lake Point LP 4 (iTouch) */
> >
> > #define MEI_DEV_ID_JSP_N 0x4DE0 /* Jasper Lake Point N */
> >
> > diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c index
> > a1ed375fed37..5e621e90d8d4 100644
> > --- a/drivers/misc/mei/pci-me.c
> > +++ b/drivers/misc/mei/pci-me.c
> > @@ -68,6 +68,7 @@ static const struct pci_device_id mei_me_pci_tbl[] = {
> >
> > {MEI_PCI_DEVICE(MEI_DEV_ID_SPT, MEI_ME_PCH8_CFG)},
> > {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_2, MEI_ME_PCH8_CFG)},
> > + {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_4, MEI_ME_PCH8_CFG)},
> > {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_H, MEI_ME_PCH8_SPS_CFG)},
> > {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_H_2, MEI_ME_PCH8_SPS_CFG)},
> > {MEI_PCI_DEVICE(MEI_DEV_ID_LBG, MEI_ME_PCH12_SPS_CFG)},
> > @@ -94,6 +95,7 @@ static const struct pci_device_id mei_me_pci_tbl[] = {
> > {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_H_3, MEI_ME_PCH8_CFG)},
> >
> > {MEI_PCI_DEVICE(MEI_DEV_ID_ICP_LP, MEI_ME_PCH12_CFG)},
> > + {MEI_PCI_DEVICE(MEI_DEV_ID_ICP_LP_4, MEI_ME_PCH12_CFG)},
> >
> > {MEI_PCI_DEVICE(MEI_DEV_ID_TGP_LP, MEI_ME_PCH15_CFG)},
> >
> > --
> > 2.26.2
> >
>
>


Attachments:
signature.asc (849.00 B)
This is a digitally signed message part.

2020-06-01 21:27:52

by Tomas Winkler

[permalink] [raw]
Subject: RE: [PATCH] mei: me: Add itouch device IDs for SPT / ICP

>
> >
> > > These device IDs can be found on Microsoft Surface devices.
> > >
> > > Signed-off-by: Dorian Stoll <[email protected]>
> >
> > This need to be done differently because of the server platforms conflict.
> > I have patches for that I will post short, though we are not
> > officially supporting those devices under Linux, It will be hard to maintain,
> as currently on the MS surface enables it as far as I know.
> >
>
> Thank you for your response!
>
> If you don't mind, could you elaborate on these devices not being supported
> under Linux? Is it just that the functionality they provide (Intel Precise Touch
> & Stylus / iTouch / IPTS) won't be supported? Because that I already know,
> and it is not the intent of this patch. Or do you mean that the entire MEI
> interface won't be supported for these devices?

Just the iTouch.

>
> Some context on this patch: I am part of a small team of volunteers who try
> to make the MS Surface devices usable under linux, including the
> touchscreen (which uses IPTS as of the Surface Pro 4).

Nice work.

> The IPTS driver connects to the device over the MEI bus, but the MEI device is
> provided by the iTouch devices. Currently we build our own kernels with this
> patch applied to allow the driver to work. All of this is loosely based on a
> driver that Intel published a few years ago.

Yes, I'm fully aware of that code base.

> Since the driver is otherwise pretty much standalone,
You do depend on i915, that's the hard part.
> my hope was that
> adding these IDs would make it easier to develop / install our driver without
> having to recompile the entire kernel (i.e. using DKMS). At least until the
> driver has matured enough and is ready for upstream submission itself.
> Especially since other iTouch devices have their device IDs added already.

Agree.

> That this would cause conflicts is unfortunate. Judging purely by your words
> - without having any deeper knowledge about the MEI bus - it seems that it
> might be possible to fix these conflicts? If thats true, I hope it would also be
> possible to add these IDs, so that just the MEI interface to IPTS becomes
> supported -

Yes, I'm working on that just now.

> I don't expect you to support the entire IPTS technology.

Yep, unfortunately it's not going to be funded by my wife.

> > > ---
> > > drivers/misc/mei/hw-me-regs.h | 2 ++
> > > drivers/misc/mei/pci-me.c | 2 ++
> > > 2 files changed, 4 insertions(+)
> > >
> > > diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-
> > > regs.h index 9392934e3a06..90e7d3020fa5 100644
> > > --- a/drivers/misc/mei/hw-me-regs.h
> > > +++ b/drivers/misc/mei/hw-me-regs.h
> > > @@ -59,6 +59,7 @@
> > >
> > > #define MEI_DEV_ID_SPT 0x9D3A /* Sunrise Point */
> > > #define MEI_DEV_ID_SPT_2 0x9D3B /* Sunrise Point 2 */
> > > +#define MEI_DEV_ID_SPT_4 0x9D3E /* Sunrise Point 4 (iTouch) */
> > > #define MEI_DEV_ID_SPT_H 0xA13A /* Sunrise Point H */
> > > #define MEI_DEV_ID_SPT_H_2 0xA13B /* Sunrise Point H 2 */
> > >
> > > @@ -90,6 +91,7 @@
> > > #define MEI_DEV_ID_CDF 0x18D3 /* Cedar Fork */
> > >
> > > #define MEI_DEV_ID_ICP_LP 0x34E0 /* Ice Lake Point LP */
> > > +#define MEI_DEV_ID_ICP_LP_4 0x34E4 /* Ice Lake Point LP 4 (iTouch)
> */
> > >
> > > #define MEI_DEV_ID_JSP_N 0x4DE0 /* Jasper Lake Point N */
> > >
> > > diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c
> > > index
> > > a1ed375fed37..5e621e90d8d4 100644
> > > --- a/drivers/misc/mei/pci-me.c
> > > +++ b/drivers/misc/mei/pci-me.c
> > > @@ -68,6 +68,7 @@ static const struct pci_device_id mei_me_pci_tbl[]
> > > = {
> > >
> > > {MEI_PCI_DEVICE(MEI_DEV_ID_SPT, MEI_ME_PCH8_CFG)},
> > > {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_2, MEI_ME_PCH8_CFG)},
> > > + {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_4, MEI_ME_PCH8_CFG)},
> > > {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_H, MEI_ME_PCH8_SPS_CFG)},
> > > {MEI_PCI_DEVICE(MEI_DEV_ID_SPT_H_2, MEI_ME_PCH8_SPS_CFG)},
> > > {MEI_PCI_DEVICE(MEI_DEV_ID_LBG, MEI_ME_PCH12_SPS_CFG)},
> @@ -94,6
> > > +95,7 @@ static const struct pci_device_id mei_me_pci_tbl[] = {
> > > {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_H_3, MEI_ME_PCH8_CFG)},
> > >
> > > {MEI_PCI_DEVICE(MEI_DEV_ID_ICP_LP, MEI_ME_PCH12_CFG)},
> > > + {MEI_PCI_DEVICE(MEI_DEV_ID_ICP_LP_4, MEI_ME_PCH12_CFG)},
> > >
> > > {MEI_PCI_DEVICE(MEI_DEV_ID_TGP_LP, MEI_ME_PCH15_CFG)},
> > >
> > > --
> > > 2.26.2
> > >
> >
> >