From: Orlando Chamberlain <orlandoch.dev@gmail.com>
To: Hans de Goede <hdegoede@redhat.com>
Cc: Mark Gross <markgross@kernel.org>,
platform-driver-x86@vger.kernel.org,
linux-kernel@vger.kernel.org, Lukas Wunner <lukas@wunner.de>,
Seth Forshee <sforshee@kernel.org>,
Aditya Garg <gargaditya08@live.com>,
Aun-Ali Zaidi <admin@kodeit.net>,
Kerem Karabay <kekrby@gmail.com>
Subject: Re: [PATCH v2 3/5] apple-gmux: Use GMSP acpi method for interrupt clear
Date: Fri, 17 Feb 2023 11:47:18 +1100 [thread overview]
Message-ID: <20230217114718.7ff65c2f@redecorated-mbp> (raw)
In-Reply-To: <87d2068b-2644-0307-d722-5539b1f9fb36@redhat.com>
On Thu, 16 Feb 2023 14:07:53 +0100
Hans de Goede <hdegoede@redhat.com> wrote:
> Hi Orlando,
>
> Thank you for the new version patches 1 + 2 look good,
> one small remark on this one.
>
> On 2/16/23 13:23, Orlando Chamberlain wrote:
> > This is needed for interrupts to be cleared correctly on MMIO based
> > gmux's. It is untested if this helps/hinders other gmux types, so
> > currently this is only enabled for the MMIO gmux's.
> >
> > There is also a "GMLV" acpi method, and the "GMSP" method can be
> > called with 1 as its argument, but the purposes of these aren't
> > known and they don't seem to be needed.
> >
> > Signed-off-by: Orlando Chamberlain <orlandoch.dev@gmail.com>
> > ---
> > v1->v2: Only enable this on MMIO gmux's
> > drivers/platform/x86/apple-gmux.c | 30
> > +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1
> > deletion(-)
> >
> > diff --git a/drivers/platform/x86/apple-gmux.c
> > b/drivers/platform/x86/apple-gmux.c index
> > 36208e93d745..12a93fc49c36 100644 ---
> > a/drivers/platform/x86/apple-gmux.c +++
> > b/drivers/platform/x86/apple-gmux.c @@ -76,6 +76,7 @@ struct
> > apple_gmux_config { enum vga_switcheroo_handler_flags_t
> > handler_flags; unsigned long resource_type;
> > bool read_version_as_u32;
> > + bool use_acpi_gmsp;
> > char *name;
> > };
> >
> > @@ -488,6 +489,7 @@ static const struct apple_gmux_config
> > apple_gmux_pio = { .handler_flags = VGA_SWITCHEROO_CAN_SWITCH_DDC,
> > .resource_type = IORESOURCE_IO,
> > .read_version_as_u32 = false,
> > + .use_acpi_gmsp = false,
> > .name = "classic"
> > };
> >
> > @@ -500,6 +502,7 @@ static const struct apple_gmux_config
> > apple_gmux_index = { .handler_flags =
> > VGA_SWITCHEROO_NEEDS_EDP_CONFIG, .resource_type = IORESOURCE_IO,
> > .read_version_as_u32 = true,
> > + .use_acpi_gmsp = false,
> > .name = "indexed"
> > };
> >
> > @@ -511,8 +514,29 @@ static const struct apple_gmux_config
> > apple_gmux_index = {
> > * MCP79, on all following generations it's GPIO pin 6 of the
> > Intel PCH.
> > * The GPE merely signals that an interrupt occurred, the actual
> > type of event
> > * is identified by reading a gmux register.
> > + *
> > + * On MMIO gmux's, we also need to call the acpi method GMSP to
> > properly clear
> > + * interrupts.
> > */
> >
> > +static int gmux_call_acpi_gmsp(struct apple_gmux_data *gmux_data,
> > int arg) +{
> > + acpi_status status = AE_OK;
> > + union acpi_object arg0 = { ACPI_TYPE_INTEGER };
> > + struct acpi_object_list arg_list = { 1, &arg0 };
> > +
> > + arg0.integer.value = arg;
> > +
> > + status = acpi_evaluate_object(gmux_data->dhandle, "GMSP",
> > &arg_list, NULL);
> > + if (ACPI_FAILURE(status)) {
> > + pr_err("GMSP call failed: %s\n",
> > + acpi_format_exception(status));
> > + return -ENODEV;
> > + }
> > +
> > + return 0;
> > +}
> > +
> > static inline void gmux_disable_interrupts(struct apple_gmux_data
> > *gmux_data) {
> > gmux_write8(gmux_data, GMUX_PORT_INTERRUPT_ENABLE,
> > @@ -536,7 +560,11 @@ static void gmux_clear_interrupts(struct
> > apple_gmux_data *gmux_data)
> > /* to clear interrupts write back current status */
> > status = gmux_interrupt_get_status(gmux_data);
> > - gmux_write8(gmux_data, GMUX_PORT_INTERRUPT_STATUS, status);
> > + if (status) {
> > + gmux_write8(gmux_data, GMUX_PORT_INTERRUPT_STATUS,
> > status);
> > + if (gmux_data->config->use_acpi_gmsp)
> > + gmux_call_acpi_gmsp(gmux_data, 0);
> > + }
>
> This changes the behavior on the existing supported models to
> only write back status when it is non 0. This is likely fine
> but given that we seem to lack testers for the old models
> I would prefer to not change the behavior there.
Oops I didn't realise I had changed that.
>
> So how about:
>
> gmux_write8(gmux_data, GMUX_PORT_INTERRUPT_STATUS, status);
> if (status && gmux_data->config->use_acpi_gmsp)
> gmux_call_acpi_gmsp(gmux_data, 0);
>
> ?
>
> The 0 write to what presumably is a register with
> write 1 to clear bits should be harmless.
>
> You can test that it is harmless on the new MMIO models
> and this way we don't change the behavior on the older models.
Your suggested code works fine for me.
I've realised the check for status != 0 probably isn't needed so I'll
take that out too, as using GMSP means we don't get spam of interrupts
with status = 0 on MMIO gmux's.
>
> Regards,
>
> Hans
>
next prev parent reply other threads:[~2023-02-17 0:47 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-16 12:23 [PATCH v2 0/5] apple-gmux: support MMIO gmux type on T2 Macs Orlando Chamberlain
2023-02-16 12:23 ` [PATCH v2 1/5] apple-gmux: use first bit to check switch state Orlando Chamberlain
2023-02-16 12:23 ` [PATCH v2 2/5] apple-gmux: refactor gmux types Orlando Chamberlain
2023-02-16 13:13 ` Hans de Goede
2023-02-16 23:24 ` Orlando Chamberlain
2023-02-16 12:23 ` [PATCH v2 3/5] apple-gmux: Use GMSP acpi method for interrupt clear Orlando Chamberlain
2023-02-16 13:07 ` Hans de Goede
2023-02-17 0:47 ` Orlando Chamberlain [this message]
2023-02-16 12:23 ` [PATCH v2 4/5] apple-gmux: support MMIO gmux on T2 Macs Orlando Chamberlain
2023-02-16 13:15 ` Hans de Goede
2023-02-16 23:25 ` Orlando Chamberlain
2023-02-16 13:27 ` Hans de Goede
2023-02-17 0:05 ` Orlando Chamberlain
2023-02-17 12:02 ` Orlando Chamberlain
2023-02-18 10:49 ` Hans de Goede
2023-02-18 12:52 ` Orlando Chamberlain
2023-02-19 13:21 ` Hans de Goede
2023-02-19 13:39 ` Lukas Wunner
2023-02-20 8:44 ` Hans de Goede
2023-02-20 9:24 ` Lukas Wunner
2023-02-16 12:23 ` [PATCH v2 5/5] apple-gmux: add debugfs interface Orlando Chamberlain
2023-02-16 13:20 ` Hans de Goede
2023-02-16 23:28 ` Orlando Chamberlain
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230217114718.7ff65c2f@redecorated-mbp \
--to=orlandoch.dev@gmail.com \
--cc=admin@kodeit.net \
--cc=gargaditya08@live.com \
--cc=hdegoede@redhat.com \
--cc=kekrby@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lukas@wunner.de \
--cc=markgross@kernel.org \
--cc=platform-driver-x86@vger.kernel.org \
--cc=sforshee@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox