Re: [PATCH 1/3] dt-bindings: gpio: loongson: Document GPIO controller of 2K0300 SoC

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]




On Sun, Aug 17, 2025 at 12:08 AM Yao Zi <ziyao@xxxxxxxxxxx> wrote:
>
> On Sat, Aug 16, 2025 at 10:18:57PM +0800, Huacai Chen wrote:
> > On Sat, Aug 16, 2025 at 11:51 AM Yao Zi <ziyao@xxxxxxxxxxx> wrote:
> > >
> > > Loongson 2K0300 ships a GPIO controller whose input/output control logic
> > > is similar to previous generation of SoCs. Additionally, it acts as an
> > > interrupt-controller supporting both level and edge interrupts and has a
> > > distinct reset signal.
> > >
> > > Describe its compatible in devicetree. We enlarge the maximum value of
> > > ngpios to 128, since the controller technically supports at most 128
> > > pins, although only 106 are routed out of the package. Properties for
> > > interrupt-controllers and resets are introduced and limited as 2K0300
> > > only.
> > >
> > > Signed-off-by: Yao Zi <ziyao@xxxxxxxxxxx>
> > > ---
> > > .../bindings/gpio/loongson,ls-gpio.yaml | 28 ++++++++++++++++++-
> > > 1 file changed, 27 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/Documentation/devicetree/bindings/gpio/loongson,ls-gpio.yaml b/Documentation/devicetree/bindings/gpio/loongson,ls-gpio.yaml
> > > index b68159600e2b..69852444df23 100644
> > > --- a/Documentation/devicetree/bindings/gpio/loongson,ls-gpio.yaml
> > > +++ b/Documentation/devicetree/bindings/gpio/loongson,ls-gpio.yaml
> > > @@ -14,6 +14,7 @@ properties:
> > > oneOf:
> > > - enum:
> > > - loongson,ls2k-gpio
> > > + - loongson,ls2k0300-gpio
> > > - loongson,ls2k0500-gpio0
> > > - loongson,ls2k0500-gpio1
> > > - loongson,ls2k2000-gpio0
> > > @@ -36,7 +37,7 @@ properties:
> > >
> > > ngpios:
> > > minimum: 1
> > > - maximum: 64
> > > + maximum: 128
> > >
> > > "#gpio-cells":
> > > const: 2
> > > @@ -49,6 +50,14 @@ properties:
> > > minItems: 1
> > > maxItems: 64
> > >
> > > + "#interrupt-cells":
> > > + const: 2
> > > +
> > > + interrupt-controller: true
> > ls2k300 supports interrupt-controller while others don't?
>
> For these SoCs' GPIO controllers (I didn't carefully check 3A{5,6}00 and
> 7A{1,2}00), there're three different cases,
>
> 1. Controller of 2K0500, 2K1000:
>
> These controllers have only interrupt enable bits for each GPIO.
> Interrupts are routed directly to the parent interrupt controller and
> there're multiple pins share the same interrupt in the parent, e.g.,
> GPIO 0-31 share interrupt 26 of the second liointc on 2K0500.
>
> Since we have neither an interrupt status register nor interrupt ack
> bits, it's hard to tell which GPIO line is triggering the interrupt.
> And we even cannot configure the polarity/edge for triggering
> interrupts, thus I don't think these GPIO controller should be
> described as interrupt controllers.
>
> For these controllers, gpio-loongson-64bit.c implements GPIO
> controller's .to_irq() method which translates GPIO descriptor to
> corresponding IRQ number. This should work as long as there's at most
> one interrupt consumer for each group of GPIOs that share the same
> parent interrupt line.
>
> 2. Node controller of 2K1500 and 2K2000:
>
> These SoCs have GPIO controllers directly attached to the "node" (I
> think it means the CPU core, but am not sure). These controllers are
> similar to the first class, but they have an additional feature that
> the polarity for triggering interrupts could be configured.
>
> Still we couldn't precisely tell which GPIO line is triggering the
> interrupt, thus it's hard to implement it as a fully-functional
> irqchip, either. But if we don't do so, I cannot come up with a way
> to describe the polarity settings. I'm unsure whether these
> controllers should be implemented as interrupt controllers.
>
> 3. South-bridge controller of 2K1500 and 2K2000, and 2K0300's
> controller:
>
> Reading through the public TRM, I'm sure these're all fully
> functional interrupt controllers, and should be implemented as
> interrupt controllers.
>
> However, this also means the current binding for 2K1500/2K2000's
> south-bridge controller is WRONG, and a fix it seems to bring in ABI
> breakages (interrupt-controller/interrupt-cells are a must). But
> since I don't have these devices on hand, and they are at least not
> related to the situation of 2K0300, I decided to keep them as-is.
>
> So the answer to the original question is, no, at least 2K1500/2K2000's
> south-bridge GPIO controllers are also interrupt controllers according
> to their public documentation. But I cannot test my GPIO changes against
> them since I don't have such boards, and fixing the binding up may break
> the ABI, thus I leave them as-is in this "support for 2K0300" series.
Then I think more SOCs rather than LS2K0300 support
interrupt-controller. Though the driver is not support yet, they can
be improved later (of course unnecessary in this series), so in my
opinion just keep the dt-binding in the same file is reasonable.
Huacai
>
> > Huacai
>
> Best regards,
> Yao Zi
>
> > > +
> > > + resets:
> > > + maxItems: 1
> > > +
> > > required:
> > > - compatible
> > > - reg
> > > @@ -58,6 +67,23 @@ required:
> > > - gpio-ranges
> > > - interrupts
> > >
> > > +allOf:
> > > + - if:
> > > + properties:
> > > + compatible:
> > > + contains:
> > > + const: loongson,ls2k0300-gpio
> > > + then:
> > > + required:
> > > + - "#interrupt-cells"
> > > + - interrupt-controller
> > > + - resets
> > > + else:
> > > + properties:
> > > + "#interrupts-cells": false
> > > + interrupt-controller: false
> > > + resets: false
> > > +
> > > additionalProperties: false
> > >
> > > examples:
> > > --
> > > 2.50.1
> > >

[Index of Archives] [Linux SPI] [Linux Kernel] [Linux ARM (vger)] [Linux ARM MSM] [Linux Omap] [Linux Arm] [Linux Tegra] [Fedora ARM] [Linux for Samsung SOC] [eCos] [Linux Fastboot] [Gcc Help] [Git] [DCCP] [IETF Announce] [Security] [Linux MIPS] [Yosemite Campsites]

(追記) (追記ここまで)
Powered by Linux

AltStyle によって変換されたページ (->オリジナル) /