From: Lina Iyer <ilina@codeaurora.org>
To: Stephen Boyd <swboyd@chromium.org>
Cc: evgreen@chromium.org, marc.zyngier@arm.com,
linux-kernel@vger.kernel.org, rplsssn@codeaurora.org,
linux-arm-msm@vger.kernel.org, thierry.reding@gmail.com,
bjorn.andersson@linaro.org
Subject: Re: [PATCH 5/7] drivers: pinctrl: msm: setup GPIO irqchip hierarchy
Date: Mon, 7 Jan 2019 11:54:35 -0700 [thread overview]
Message-ID: <20190107185435.GJ14960@codeaurora.org> (raw)
In-Reply-To: <154533621302.79149.15228907259643696166@swboyd.mtv.corp.google.com>
On Thu, Dec 20 2018 at 13:03 -0700, Stephen Boyd wrote:
>Quoting Lina Iyer (2018-12-19 14:11:03)
>> To allow GPIOs to wakeup the system from suspend or deep idle, the
>> wakeup capable GPIOs are setup in hierarchy with interrupts from the
>> wakeup-parent irqchip.
>>
>> In older SoC's, the TLMM will handover detection to the parent irqchip
>> and in newer SoC's, the parent irqchip may also be active as well as the
>> TLMM and therefore the GPIOs need to be masked at TLMM to avoid
>> duplicate interrupts. To enable both these configurations to exist,
>> allow the parent irqchip to dictate the TLMM irqchip's behavior when
>> masking/unmasking the interrupt.
>>
>> Signed-off-by: Stephen Boyd <sboyd@kernel.org>
>
>I don't think I gave a signed-off-by, so you need to ask to forge my
>sign off here. Please change it to be:
>
> Signed-off-by: Stephen Boyd <swboyd@chromium.org>
>
>and I'm not sure how much I wrote vs. you wrote anymore so perhaps also
>add a
>
> Co-developed-by: Stephen Boyd <swboyd@chromium.org>
>
I meant to do that. I will add this tag instead. Sorry about that.
>And finally, please just email my chromium.org email for this series
>because I apparently messed up the address once and now it's all going
>to the wrong inbox. Thanks!
>
Sure.
>> Signed-off-by: Lina Iyer <ilina@codeaurora.org>
>
>Can you Cc Linus Walleij and Bjorn Andersson on the whole patch series
>next time? Would be good to have their review on major pinctrl driver
>changes.
>
Bjorn is already included. Will make sure to include Linus in the next
spin.
>> @@ -967,11 +994,86 @@ static bool msm_gpio_needs_valid_mask(struct msm_pinctrl *pctrl)
>> return device_property_read_u16_array(pctrl->dev, "gpios", NULL, 0) > 0;
>> }
>>
>> +static int msm_gpio_domain_translate(struct irq_domain *d,
>> + struct irq_fwspec *fwspec,
>> + unsigned long *hwirq, unsigned int *type)
>> +{
>> + if (is_of_node(fwspec->fwnode)) {
>> + if (fwspec->param_count < 2)
>> + return -EINVAL;
>> + *hwirq = fwspec->param[0];
>> + *type = fwspec->param[1] & IRQ_TYPE_SENSE_MASK;
>> + return 0;
>> + }
>> +
>> + return -EINVAL;
>> +}
>
>Maybe this can be a generic function in gpiolib?
>
>> +
>> +static int msm_gpio_domain_alloc(struct irq_domain *domain, unsigned int virq,
>> + unsigned int nr_irqs, void *arg)
>> +{
>> + int ret;
>> + irq_hw_number_t hwirq;
>> + struct gpio_chip *gc = domain->host_data;
>> + struct msm_pinctrl *pctrl = gpiochip_get_data(gc);
>> + struct irq_fwspec *fwspec = arg;
>> + struct qcom_irq_fwspec parent = { };
>> + unsigned int type;
>> +
>> + ret = msm_gpio_domain_translate(domain, fwspec, &hwirq, &type);
>> + if (ret)
>> + return ret;
>> +
>> + ret = irq_domain_set_hwirq_and_chip(domain, virq, hwirq,
>> + &pctrl->irq_chip, gc);
>> + if (ret < 0)
>> + return ret;
>> +
>> + if (!domain->parent)
>> + return 0;
>> +
>> + parent.fwspec.fwnode = domain->parent->fwnode;
>> + parent.fwspec.param_count = 2;
>> + parent.fwspec.param[0] = hwirq;
>> + parent.fwspec.param[1] = type;
>> +
>> + ret = irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, &parent);
>> + if (ret)
>> + return ret;
>> +
>> + if (parent.mask)
>> + set_bit(hwirq, pctrl->wakeup_masked_irqs);
>> +
>> + return 0;
>> +}
>> +
>> +/*
>> + * TODO: Get rid of this and push it into gpiochip_to_irq()
>
>Hmm.. yeah we need to do this still. I think we can have a generic two
>cell function similar to irq_domain_xlate_twocell() that does the fwspec
>creation and uses some of the things that we pass to
>gpiochip_irqchip_add(), like the default level type. This existing
>function is not good to have, so there's work to do to get rid of this.
>
>I was also thinking that maybe we can make the alloc function above take
>a struct gpio_irq_fwspec structure that tells the alloc function what
>gpiochip the irq is for. That would mean that we need to change the
>gpio_to_irq() function below to be generic and stuff the chip inside the
>fwspec wrapper structure:
>
> struct gpio_irq_fwspec {
> struct irq_fwspec fwspec;
> struct gpio_chip *chip;
> unsigned int offset;
> };
>
>but I seem to recall that was not working for some reason.
>
I didn't attemp this. I am hoping we can solve this even after this
patch set separately. That said, I will try this.
>> + */
>> +static int msm_gpio_to_irq(struct gpio_chip *chip, unsigned int offset)
>> +{
>> + struct irq_fwspec fwspec;
>> +
>> + fwspec.fwnode = of_node_to_fwnode(chip->of_node);
>> + fwspec.param[0] = offset;
>> + fwspec.param[1] = IRQ_TYPE_LEVEL_HIGH;
>> + fwspec.param_count = 2;
>> +
>> + return irq_create_fwspec_mapping(&fwspec);
>> +}
>> +
>> +static const struct irq_domain_ops msm_gpio_domain_ops = {
>> + .translate = msm_gpio_domain_translate,
>> + .alloc = msm_gpio_domain_alloc,
>> + .free = irq_domain_free_irqs_top,
>> +};
>> +
Thanks,
Lina
next prev parent reply other threads:[~2019-01-07 18:54 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-19 22:10 [PATCH 0/7] qcom: support wakeup capable GPIOs Lina Iyer
2018-12-19 22:10 ` [PATCH 1/7] gpio: Add support for hierarchical IRQ domains Lina Iyer
2019-01-18 18:12 ` Doug Anderson
2018-12-19 22:11 ` [PATCH 2/7] irqdomain: add bus token DOMAIN_BUS_WAKEUP Lina Iyer
2018-12-19 22:11 ` [PATCH 3/7] drivers: irqchip: add PDC irqdomain for wakeup capable GPIOs Lina Iyer
2018-12-20 20:19 ` Stephen Boyd
2018-12-20 20:19 ` Stephen Boyd
2019-01-07 18:48 ` Lina Iyer
2019-01-11 22:55 ` Stephen Boyd
2019-01-11 23:34 ` Lina Iyer
2018-12-19 22:11 ` [PATCH 4/7] dt-bindings: sdm845-pinctrl: add wakeup interrupt parent for GPIO Lina Iyer
2018-12-29 0:07 ` Rob Herring
2019-01-07 18:51 ` Lina Iyer
2019-01-08 14:49 ` Rob Herring
2019-01-09 17:31 ` Lina Iyer
2019-01-09 19:36 ` Rob Herring
2019-01-11 23:20 ` Stephen Boyd
2019-01-23 20:52 ` Stephen Boyd
2019-01-31 21:53 ` Stephen Boyd
2019-02-01 7:09 ` Stephen Boyd
2019-02-06 17:07 ` Lina Iyer
2019-02-06 18:47 ` Stephen Boyd
2019-02-12 16:05 ` Lina Iyer
2018-12-19 22:11 ` [PATCH 5/7] drivers: pinctrl: msm: setup GPIO irqchip hierarchy Lina Iyer
2018-12-20 20:03 ` Stephen Boyd
2018-12-20 20:03 ` Stephen Boyd
2019-01-07 18:54 ` Lina Iyer [this message]
2019-01-16 23:13 ` Lina Iyer
2019-01-23 21:00 ` Stephen Boyd
2018-12-19 22:11 ` [PATCH 6/7] arm64: dts: msm: add PDC device bindings for sdm845 Lina Iyer
2018-12-20 18:14 ` Doug Anderson
2019-01-07 18:52 ` Lina Iyer
2019-01-17 23:36 ` Doug Anderson
2018-12-19 22:11 ` [PATCH 7/7] arm64: dts: msm: setup PDC as wakeup parent for GPIOs for SDM845 Lina Iyer
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=20190107185435.GJ14960@codeaurora.org \
--to=ilina@codeaurora.org \
--cc=bjorn.andersson@linaro.org \
--cc=evgreen@chromium.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marc.zyngier@arm.com \
--cc=rplsssn@codeaurora.org \
--cc=swboyd@chromium.org \
--cc=thierry.reding@gmail.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.