[PATCH v2 1/4] dt-binding: pinctrl: spacemit: add documents for K1 SoC
Inochi Amaoto
inochiama at outlook.com
Sun Aug 25 21:19:12 PDT 2024
On Mon, Aug 26, 2024 at 01:36:35AM GMT, Yixun Lan wrote:
> Hi Krzysztof:
>
> On 15:48 Sun 25 Aug , Krzysztof Kozlowski wrote:
> > On 25/08/2024 15:10, Yixun Lan wrote:
> > > Add dt-binding for the pinctrl driver of SpacemiT's K1 SoC.
> >
> >
> > Please use subject prefixes matching the subsystem. You can get them for
> > example with `git log --oneline -- DIRECTORY_OR_FILE` on the directory
> > your patch is touching. For bindings, the preferred subjects are
> > explained here:
> > https://www.kernel.org/doc/html/latest/devicetree/bindings/submitting-patches.html#i-for-patch-submitters
> >
> > It's "dt-bindings:"
> Ok, will fix in next version
>
> >
> > >
> > > Two vendor specific properties are introduced here, As the pinctrl
> > > has dedicated slew rate enable control - bit[7], so we have
> > > spacemit,slew-rate-{enable,disable} for this. For the same reason,
> > > creating spacemit,strong-pull-up for the strong pull up control.
> >
> > Huh, no, use generic properties. More on that below
> >
> see my reply below
>
> >
> >
> > >
> > > Signed-off-by: Yixun Lan <dlan at gentoo.org>
> > > ---
> > > .../bindings/pinctrl/spacemit,k1-pinctrl.yaml | 134 +++++++++++++++++
> > > include/dt-bindings/pinctrl/spacemit,k1-pinctrl.h | 161 +++++++++++++++++++++
> > > 2 files changed, 295 insertions(+)
> > >
> > > diff --git a/Documentation/devicetree/bindings/pinctrl/spacemit,k1-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/spacemit,k1-pinctrl.yaml
> > > new file mode 100644
> > > index 0000000000000..8adfc5ebbce37
> > > --- /dev/null
> > > +++ b/Documentation/devicetree/bindings/pinctrl/spacemit,k1-pinctrl.yaml
> > > @@ -0,0 +1,134 @@
> > > +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
> > > +%YAML 1.2
> > > +---
> > > +$id: http://devicetree.org/schemas/pinctrl/spacemit,k1-pinctrl.yaml#
> > > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > > +
> > > +title: SpacemiT K1 SoC Pin Controller
> > > +
> > > +maintainers:
> > > + - Yixun Lan <dlan at gentoo.org>
> > > +
> > > +properties:
> > > + compatible:
> > > + const: spacemit,k1-pinctrl
> > > +
> > > + reg:
> > > + items:
> > > + - description: pinctrl io memory base
> > > +
> > > +patternProperties:
> > > + '-cfg$':
> > > + type: object
> > > + description: |
> >
> > Do not need '|' unless you need to preserve formatting.
> >
> Ok
> > > + A pinctrl node should contain at least one subnode representing the
> > > + pinctrl groups available on the machine.
> > > +
> > > + additionalProperties: false
> >
> > Keep it before description.
> Ok
> >
> > > +
> > > + patternProperties:
> > > + '-pins$':
> > > + type: object
> > > + description: |
> > > + Each subnode will list the pins it needs, and how they should
> > > + be configured, with regard to muxer configuration, bias, input
> > > + enable/disable, input schmitt trigger, slew-rate enable/disable,
> > > + slew-rate, drive strength, power source.
> > > + $ref: /schemas/pinctrl/pincfg-node.yaml
> > > +
> > > + allOf:
> > > + - $ref: pincfg-node.yaml#
> > > + - $ref: pinmux-node.yaml#
> >
> > You are duplicating refs.
> ok, will fix it
> >
> > > +
> > > + properties:
> > > + pinmux:
> > > + description: |
> > > + The list of GPIOs and their mux settings that properties in the
> > > + node apply to. This should be set using the K1_PADCONF macro to
> > > + construct the value.
> > > + $ref: /schemas/pinctrl/pinmux-node.yaml#/properties/pinmux
> >
> > Hm why you need the ref?
> >
> will drop it
> > > +
> > > + bias-disable: true
> > > +
> > > + bias-pull-up: true
> > > +
> > > + bias-pull-down: true
> > > +
> > > + drive-strength-microamp:
> > > + description: |
> > > + typical current when output high level, but in mA.
> > > + 1.8V output: 11, 21, 32, 42 (mA)
> > > + 3.3V output: 7, 10, 13, 16, 19, 23, 26, 29 (mA)
> > > + $ref: /schemas/types.yaml#/definitions/uint32
> > > +
> > > + input-schmitt:
> > > + description: |
> > > + typical threshold for schmitt trigger.
> > > + 0: buffer mode
> > > + 1: trigger mode
> > > + 2, 3: trigger mode
> > > + $ref: /schemas/types.yaml#/definitions/uint32
> > > + enum: [0, 1, 2, 3]
> > > +
> > > + power-source:
> > > + description: external power supplies at 1.8v or 3.3v.
> > > + enum: [ 1800, 3300 ]
> > > +
> > > + slew-rate:
> > > + description: |
> > > + slew rate for output buffer
> > > + 0, 1: Slow speed
> >
> > Hm? Surprising, 0 is slow speed?
> >
> from docs, section 3.3.2.2 MFPR Register Description
> 0, 1 are same, both for slow speed
> https://developer.spacemit.com/documentation?token=An1vwTwKaigaXRkYfwmcznTXned
>
I suspect this should not be set separately, but with the
drive-strength. The document shows that the DS field sets
both drive strength and slew rate. This at least tell the
value 0 and 1 may be different.
> > > + 2: Medium speed
> > > + 3: Fast speed
> > > + $ref: /schemas/types.yaml#/definitions/uint32
> > > + enum: [0, 1, 2, 3]
> > > +
> > > + spacemit,slew-rate-enable:
> > > + description: enable slew rate.
> >
> > The presence of slew-rate enables it, doesn't it?
> >
> yes, this should work, I will take this approach, thanks
>
> > > + type: boolean
> > > +
> > > + spacemit,slew-rate-disable:
> > > + description: disable slew rate.
> > > + type: boolean
> >
> > Just use slew-rate, 0 disable, some value to match real slew-rate.
> >
> sounds good to me, since 0, 1 indicate same meaning, can re-use 0 for
> disabling slew rate.
>
> > > +
> > > + spacemit,strong-pull-up:
> > > + description: enable strong pull up.
> >
> > Do not duplicate the property name in description. You did not say
> > anything useful here. What is "strong"? bias-pull-up takes also an argument.
> >
> there is a dedicated strong pull bit[3] for I2C, SD card kinds of pad
> I don't know how 'strong' it is if in ohms, will see if can get
> more info on this (may expand the description)
>
> I think using 'bias-pull-up' property with argument should also work,
> but it occur to me it's more intuitive to introduce a property here, which
> reflect the underlying hardware functionality. this is similar to starfive's jh7100
> bindings/pinctrl/starfive,jh7100-pinctrl.yaml:154
> (refer to exist code doesn't mean always correct, so I need advice here)
>
> I will keep this property unless there is objection, please let me know
>
> > > + type: boolean
> > > +
> > > + required:
> > > + - pinmux
> > > +
> > > + additionalProperties: false
> >
> > This goes up, before description.
> >
> Ok
> > > +
> > > +required:
> > > + - compatible
> > > + - reg
> > > +
> > > +additionalProperties: false
> > > +
> > > +examples:
> > > + - |
> > > + #include <dt-bindings/pinctrl/spacemit,k1-pinctrl.h>
> > > +
> > > + soc {
> > > + #address-cells = <2>;
> > > + #size-cells = <2>;
> > > +
> > > + pinctrl at d401e000 {
> > > + compatible = "spacemit,k1-pinctrl";
> > > + reg = <0x0 0xd401e000 0x0 0x400>;
> > > + #pinctrl-cells = <2>;
> > > + #gpio-range-cells = <3>;
> >
> > This wasn't ever tested... :(
> > ...
> will drop it
> >
> > > diff --git a/include/dt-bindings/pinctrl/spacemit,k1-pinctrl.h b/include/dt-bindings/pinctrl/spacemit,k1-pinctrl.h
> > > new file mode 100644
> > > index 0000000000000..13ef4aa6c53a3
> > > --- /dev/null
> > > +++ b/include/dt-bindings/pinctrl/spacemit,k1-pinctrl.h
> > > @@ -0,0 +1,161 @@
> > > +/* SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause */
> > > +/*
> > > + * Copyright (c) 2022-2024 SpacemiT (Hangzhou) Technology Co. Ltd
> > > + * Copyright (c) 2024 Yixun Lan <dlan at gentoo.org>
> > > + *
> > > + */
> > > +
> > > +#ifndef _DT_BINDINGS_PINCTRL_K1_H
> > > +#define _DT_BINDINGS_PINCTRL_K1_H
> > > +
> > > +#define PINMUX(pin, mux) \
> > > + (((pin) & 0xffff) | (((mux) & 0xff) << 16))
> > > +
> > > +/* pin offset */
> > > +#define PINID(x) ((x) + 1)
> > > +
> > > +#define GPIO_INVAL 0
> > > +#define GPIO_00 PINID(0)
> >
> > Not really, pin numbers are not bindings. Drop entire header.
> >
> Ok, I will move them to dts folder, which should be file
> arch/riscv/boot/dts/spacemit/k1-pinctrl.h
>
> > ...
> >
> > > +
> > > +#define SLEW_RATE_SLOW0 0
> > > +#define SLEW_RATE_SLOW1 1
> > > +#define SLEW_RATE_MEDIUM 2
> > > +#define SLEW_RATE_FAST 3
> >
> > Not a binding, either. No usage in the driver.
> Ok, will drop it
>
> >
> > > +
> > > +#define K1_PADCONF(pin, func) (((pin) << 16) | (func))
> >
> > Not a binding.
> >
> same, move to dts
>
> >
> >
> > Best regards,
> > Krzysztof
>
> --
> Yixun Lan (dlan)
> Gentoo Linux Developer
> GPG Key ID AABEFD55
More information about the linux-riscv
mailing list