* [PATCH net-next v3 0/6] Brcm ASP 2.0 Ethernet Controller
@ 2023-05-19 21:19 Justin Chen
2023-05-19 21:19 ` [PATCH net-next v3 1/6] dt-bindings: net: brcm,unimac-mdio: Add asp-v2.0 Justin Chen
` (5 more replies)
0 siblings, 6 replies; 16+ messages in thread
From: Justin Chen @ 2023-05-19 21:19 UTC (permalink / raw)
To: netdev, devicetree, linux-kernel, linux-media, dri-devel,
bcm-kernel-feedback-list
Cc: justinpopo6, justin.chen, f.fainelli, davem, florian.fainelli,
edumazet, kuba, pabeni, robh+dt, krzysztof.kozlowski+dt, opendmb,
andrew, hkallweit1, linux, richardcochran, sumit.semwal,
christian.koenig
[-- Attachment #1: Type: text/plain, Size: 1993 bytes --]
Add support for the Broadcom ASP 2.0 Ethernet controller which is first
introduced with 72165.
Add support for 74165 10/100 integrated Ethernet PHY which also uses
the ASP 2.0 Ethernet controller.
Florian Fainelli (2):
dt-bindings: net: Brcm ASP 2.0 Ethernet controller
net: phy: bcm7xxx: Add EPHY entry for 74165
Justin Chen (4):
dt-bindings: net: brcm,unimac-mdio: Add asp-v2.0
net: bcmasp: Add support for ASP2.0 Ethernet controller
net: phy: mdio-bcm-unimac: Add asp v2.0 support
MAINTAINERS: ASP 2.0 Ethernet driver maintainers
.../devicetree/bindings/net/brcm,asp-v2.0.yaml | 145 ++
.../devicetree/bindings/net/brcm,unimac-mdio.yaml | 2 +
MAINTAINERS | 9 +
drivers/net/ethernet/broadcom/Kconfig | 11 +
drivers/net/ethernet/broadcom/Makefile | 1 +
drivers/net/ethernet/broadcom/asp2/Makefile | 2 +
drivers/net/ethernet/broadcom/asp2/bcmasp.c | 1460 ++++++++++++++++++++
drivers/net/ethernet/broadcom/asp2/bcmasp.h | 636 +++++++++
.../net/ethernet/broadcom/asp2/bcmasp_ethtool.c | 568 ++++++++
drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c | 1429 +++++++++++++++++++
.../net/ethernet/broadcom/asp2/bcmasp_intf_defs.h | 238 ++++
drivers/net/mdio/mdio-bcm-unimac.c | 2 +
drivers/net/phy/bcm7xxx.c | 1 +
include/linux/brcmphy.h | 1 +
14 files changed, 4505 insertions(+)
create mode 100644 Documentation/devicetree/bindings/net/brcm,asp-v2.0.yaml
create mode 100644 drivers/net/ethernet/broadcom/asp2/Makefile
create mode 100644 drivers/net/ethernet/broadcom/asp2/bcmasp.c
create mode 100644 drivers/net/ethernet/broadcom/asp2/bcmasp.h
create mode 100644 drivers/net/ethernet/broadcom/asp2/bcmasp_ethtool.c
create mode 100644 drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c
create mode 100644 drivers/net/ethernet/broadcom/asp2/bcmasp_intf_defs.h
--
2.7.4
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4206 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread* [PATCH net-next v3 1/6] dt-bindings: net: brcm,unimac-mdio: Add asp-v2.0 2023-05-19 21:19 [PATCH net-next v3 0/6] Brcm ASP 2.0 Ethernet Controller Justin Chen @ 2023-05-19 21:19 ` Justin Chen 2023-05-22 18:17 ` Conor Dooley 2023-05-19 21:19 ` [PATCH net-next v3 2/6] dt-bindings: net: Brcm ASP 2.0 Ethernet controller Justin Chen ` (4 subsequent siblings) 5 siblings, 1 reply; 16+ messages in thread From: Justin Chen @ 2023-05-19 21:19 UTC (permalink / raw) To: netdev, devicetree, linux-kernel, linux-media, dri-devel, bcm-kernel-feedback-list Cc: justinpopo6, justin.chen, f.fainelli, davem, florian.fainelli, edumazet, kuba, pabeni, robh+dt, krzysztof.kozlowski+dt, opendmb, andrew, hkallweit1, linux, richardcochran, sumit.semwal, christian.koenig [-- Attachment #1: Type: text/plain, Size: 801 bytes --] The ASP 2.0 Ethernet controller uses a brcm unimac. Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com> Signed-off-by: Justin Chen <justin.chen@broadcom.com> --- Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml b/Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml index 0be426ee1e44..6684810fcbf0 100644 --- a/Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml +++ b/Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml @@ -22,6 +22,8 @@ properties: - brcm,genet-mdio-v3 - brcm,genet-mdio-v4 - brcm,genet-mdio-v5 + - brcm,asp-v2.0-mdio + - brcm,asp-v2.1-mdio - brcm,unimac-mdio reg: -- 2.7.4 [-- Attachment #2: S/MIME Cryptographic Signature --] [-- Type: application/pkcs7-signature, Size: 4206 bytes --] ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v3 1/6] dt-bindings: net: brcm,unimac-mdio: Add asp-v2.0 2023-05-19 21:19 ` [PATCH net-next v3 1/6] dt-bindings: net: brcm,unimac-mdio: Add asp-v2.0 Justin Chen @ 2023-05-22 18:17 ` Conor Dooley 2023-05-22 18:25 ` Florian Fainelli 0 siblings, 1 reply; 16+ messages in thread From: Conor Dooley @ 2023-05-22 18:17 UTC (permalink / raw) To: Justin Chen, netdev, devicetree, linux-kernel, linux-media, dri-devel, bcm-kernel-feedback-list Cc: justinpopo6, f.fainelli, davem, florian.fainelli, edumazet, kuba, pabeni, robh+dt, krzysztof.kozlowski+dt, opendmb, andrew, hkallweit1, linux, richardcochran, sumit.semwal, christian.koenig On Fri, May 19, 2023 at 02:19:39PM -0700, Justin Chen wrote: > The ASP 2.0 Ethernet controller uses a brcm unimac. > > Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com> > Signed-off-by: Justin Chen <justin.chen@broadcom.com> > --- > Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml b/Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml > index 0be426ee1e44..6684810fcbf0 100644 > --- a/Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml > +++ b/Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml > @@ -22,6 +22,8 @@ properties: > - brcm,genet-mdio-v3 > - brcm,genet-mdio-v4 > - brcm,genet-mdio-v5 > + - brcm,asp-v2.0-mdio > + - brcm,asp-v2.1-mdio > - brcm,unimac-mdio From V(N-1), there was some discussion between Rob & Florian: > > How many SoCs does each of these correspond to? SoC specific compatibles > > are preferred to version numbers (because few vendors are disciplined > > at versioning and also not changing versions with every Soc). > > So far there is a 1:1 mapping between the number of versions and the > number of SoCs, and the older SoC uses v2.0, while the newer one uses v2.1. Rob's not around right now, but I don't really get why if there is a 1:1 mapping you don't just name these things after the SoCs? Also, my mailer **refused** to let me reply to you because of something to do with a garbage S/MIME signature? Dunno wtf is happening there. Cheers, Conor. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v3 1/6] dt-bindings: net: brcm,unimac-mdio: Add asp-v2.0 2023-05-22 18:17 ` Conor Dooley @ 2023-05-22 18:25 ` Florian Fainelli 2023-05-22 18:38 ` Conor Dooley 0 siblings, 1 reply; 16+ messages in thread From: Florian Fainelli @ 2023-05-22 18:25 UTC (permalink / raw) To: Conor Dooley, Justin Chen, netdev, devicetree, linux-kernel, linux-media, dri-devel, bcm-kernel-feedback-list Cc: justinpopo6, f.fainelli, davem, edumazet, kuba, pabeni, robh+dt, krzysztof.kozlowski+dt, opendmb, andrew, hkallweit1, linux, richardcochran, sumit.semwal, christian.koenig [-- Attachment #1: Type: text/plain, Size: 2139 bytes --] On 5/22/23 11:17, Conor Dooley wrote: > On Fri, May 19, 2023 at 02:19:39PM -0700, Justin Chen wrote: > > The ASP 2.0 Ethernet controller uses a brcm unimac. > > > > Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com> > > Signed-off-by: Justin Chen <justin.chen@broadcom.com> > > --- > > Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml | 2 ++ > > 1 file changed, 2 insertions(+) > > > > diff --git > a/Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml > b/Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml > > index 0be426ee1e44..6684810fcbf0 100644 > > --- a/Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml > > +++ b/Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml > > @@ -22,6 +22,8 @@ properties: > > - brcm,genet-mdio-v3 > > - brcm,genet-mdio-v4 > > - brcm,genet-mdio-v5 > > + - brcm,asp-v2.0-mdio > > + - brcm,asp-v2.1-mdio > > - brcm,unimac-mdio > > > From V(N-1), there was some discussion between Rob & Florian: > > > How many SoCs does each of these correspond to? SoC specific > compatibles > > > are preferred to version numbers (because few vendors are disciplined > > > at versioning and also not changing versions with every Soc). > > > > So far there is a 1:1 mapping between the number of versions and the > > number of SoCs, and the older SoC uses v2.0, while the newer one uses > v2.1. > > Rob's not around right now, but I don't really get why if there is a 1:1 > mapping you don't just name these things after the SoCs? There is a 1:1 mapping now, but in the future there may be more SoCs with a given implemented version. This is especially true for the MDIO controller which has been largely unchanged since it was introduced. > > Also, my mailer **refused** to let me reply to you because of something > to do with a garbage S/MIME signature? Dunno wtf is happening there. Our SMTP server is configured to automatically wrap the message in a S/MIME envelope, nothing invalid though AFAICT. What's your email client? -- Florian [-- Attachment #2: S/MIME Cryptographic Signature --] [-- Type: application/pkcs7-signature, Size: 4221 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v3 1/6] dt-bindings: net: brcm,unimac-mdio: Add asp-v2.0 2023-05-22 18:25 ` Florian Fainelli @ 2023-05-22 18:38 ` Conor Dooley 0 siblings, 0 replies; 16+ messages in thread From: Conor Dooley @ 2023-05-22 18:38 UTC (permalink / raw) To: Florian Fainelli Cc: Conor Dooley, Justin Chen, netdev, devicetree, linux-kernel, linux-media, dri-devel, bcm-kernel-feedback-list, justinpopo6, f.fainelli, davem, edumazet, kuba, pabeni, robh+dt, krzysztof.kozlowski+dt, opendmb, andrew, hkallweit1, linux, richardcochran, sumit.semwal, christian.koenig On Mon, May 22, 2023 at 11:25:54AM -0700, Florian Fainelli wrote: > On 5/22/23 11:17, Conor Dooley wrote: > > On Fri, May 19, 2023 at 02:19:39PM -0700, Justin Chen wrote: > > > The ASP 2.0 Ethernet controller uses a brcm unimac. > > > > > > Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com> > > > Signed-off-by: Justin Chen <justin.chen@broadcom.com> > > > --- > > > Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml | 2 ++ > > > 1 file changed, 2 insertions(+) > > > > > > diff --git > > a/Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml > > b/Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml > > > index 0be426ee1e44..6684810fcbf0 100644 > > > --- a/Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml > > > +++ b/Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml > > > @@ -22,6 +22,8 @@ properties: > > > - brcm,genet-mdio-v3 > > > - brcm,genet-mdio-v4 > > > - brcm,genet-mdio-v5 > > > + - brcm,asp-v2.0-mdio > > > + - brcm,asp-v2.1-mdio > > > - brcm,unimac-mdio > > > > > > From V(N-1), there was some discussion between Rob & Florian: > > > > How many SoCs does each of these correspond to? SoC specific > > compatibles > > > > are preferred to version numbers (because few vendors are disciplined > > > > at versioning and also not changing versions with every Soc). > > > > > > So far there is a 1:1 mapping between the number of versions and the > > > number of SoCs, and the older SoC uses v2.0, while the newer one uses > > v2.1. > > > > Rob's not around right now, but I don't really get why if there is a 1:1 > > mapping you don't just name these things after the SoCs? > > There is a 1:1 mapping now, but in the future there may be more SoCs with a > given implemented version. This is especially true for the MDIO controller > which has been largely unchanged since it was introduced. Figured that'd be it, but what was written in the previous thread made the opposite appear true! Acked-by: Conor Dooley <conor.dooley@microchip.com> > > Also, my mailer **refused** to let me reply to you because of something > > to do with a garbage S/MIME signature? Dunno wtf is happening there. > > Our SMTP server is configured to automatically wrap the message in a S/MIME > envelope, nothing invalid though AFAICT. What's your email client? Mutt - I guess it was user-error because getting S/MIME stuff auto-populated the security field on my end. Annoying but w/e... ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH net-next v3 2/6] dt-bindings: net: Brcm ASP 2.0 Ethernet controller 2023-05-19 21:19 [PATCH net-next v3 0/6] Brcm ASP 2.0 Ethernet Controller Justin Chen 2023-05-19 21:19 ` [PATCH net-next v3 1/6] dt-bindings: net: brcm,unimac-mdio: Add asp-v2.0 Justin Chen @ 2023-05-19 21:19 ` Justin Chen 2023-05-22 18:27 ` Conor Dooley 2023-05-19 21:19 ` [PATCH net-next v3 3/6] net: bcmasp: Add support for ASP2.0 " Justin Chen ` (3 subsequent siblings) 5 siblings, 1 reply; 16+ messages in thread From: Justin Chen @ 2023-05-19 21:19 UTC (permalink / raw) To: netdev, devicetree, linux-kernel, linux-media, dri-devel, bcm-kernel-feedback-list Cc: justinpopo6, justin.chen, f.fainelli, davem, florian.fainelli, edumazet, kuba, pabeni, robh+dt, krzysztof.kozlowski+dt, opendmb, andrew, hkallweit1, linux, richardcochran, sumit.semwal, christian.koenig [-- Attachment #1: Type: text/plain, Size: 4178 bytes --] From: Florian Fainelli <florian.fainelli@broadcom.com> Add a binding document for the Broadcom ASP 2.0 Ethernet controller. Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com> Signed-off-by: Justin Chen <justin.chen@broadcom.com> --- v3 - Minor formatting issues - Change channel prop to brcm,channel for vendor specific format - Removed redundant v2.0 from compat string - Fix ranges field v2 - Minor formatting issues .../devicetree/bindings/net/brcm,asp-v2.0.yaml | 145 +++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 Documentation/devicetree/bindings/net/brcm,asp-v2.0.yaml diff --git a/Documentation/devicetree/bindings/net/brcm,asp-v2.0.yaml b/Documentation/devicetree/bindings/net/brcm,asp-v2.0.yaml new file mode 100644 index 000000000000..a9fed957e1d6 --- /dev/null +++ b/Documentation/devicetree/bindings/net/brcm,asp-v2.0.yaml @@ -0,0 +1,145 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/net/brcm,asp-v2.0.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Broadcom ASP 2.0 Ethernet controller + +maintainers: + - Justin Chen <justin.chen@broadcom.com> + - Florian Fainelli <florian.fainelli@broadcom.com> + +description: Broadcom Ethernet controller first introduced with 72165 + +properties: + '#address-cells': + const: 1 + '#size-cells': + const: 1 + + compatible: + enum: + - brcm,asp-v2.0 + - brcm,bcm72165-asp + - brcm,asp-v2.1 + - brcm,bcm74165-asp + + reg: + maxItems: 1 + + ranges: true + + interrupts: + minItems: 1 + items: + - description: RX/TX interrupt + - description: Port 0 Wake-on-LAN + - description: Port 1 Wake-on-LAN + + clocks: + maxItems: 1 + + ethernet-ports: + type: object + properties: + '#address-cells': + const: 1 + '#size-cells': + const: 0 + + patternProperties: + "^port@[0-9]+$": + type: object + + $ref: ethernet-controller.yaml# + + properties: + reg: + maxItems: 1 + description: Port number + + brcm,channel: + $ref: /schemas/types.yaml#/definitions/uint32 + description: ASP channel number + + required: + - reg + - brcm,channel + + additionalProperties: false + +patternProperties: + "^mdio@[0-9a-f]+$": + type: object + $ref: brcm,unimac-mdio.yaml + + description: + ASP internal UniMAC MDIO bus + +required: + - compatible + - reg + - interrupts + - clocks + - ranges + +additionalProperties: false + +examples: + - | + #include <dt-bindings/interrupt-controller/irq.h> + #include <dt-bindings/interrupt-controller/arm-gic.h> + + ethernet@9c00000 { + compatible = "brcm,asp-v2.0"; + reg = <0x9c00000 0x1fff14>; + interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>; + ranges = <0x0 0x9c00000 0x1fff14>; + clocks = <&scmi 14>; + #address-cells = <1>; + #size-cells = <1>; + + mdio@c614 { + compatible = "brcm,asp-v2.0-mdio"; + reg = <0xc614 0x8>; + reg-names = "mdio"; + #address-cells = <1>; + #size-cells = <0>; + + phy0: ethernet-phy@1 { + reg = <1>; + }; + }; + + mdio@ce14 { + compatible = "brcm,asp-v2.0-mdio"; + reg = <0xce14 0x8>; + reg-names = "mdio"; + #address-cells = <1>; + #size-cells = <0>; + + phy1: ethernet-phy@1 { + reg = <1>; + }; + }; + + ethernet-ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + brcm,channel = <8>; + phy-mode = "rgmii"; + phy-handle = <&phy0>; + }; + + port@1 { + reg = <1>; + brcm,channel = <9>; + phy-mode = "rgmii"; + phy-handle = <&phy1>; + }; + }; + }; -- 2.7.4 [-- Attachment #2: S/MIME Cryptographic Signature --] [-- Type: application/pkcs7-signature, Size: 4206 bytes --] ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v3 2/6] dt-bindings: net: Brcm ASP 2.0 Ethernet controller 2023-05-19 21:19 ` [PATCH net-next v3 2/6] dt-bindings: net: Brcm ASP 2.0 Ethernet controller Justin Chen @ 2023-05-22 18:27 ` Conor Dooley 2023-05-22 18:48 ` Justin Chen 0 siblings, 1 reply; 16+ messages in thread From: Conor Dooley @ 2023-05-22 18:27 UTC (permalink / raw) To: Justin Chen, netdev, devicetree, linux-kernel, linux-media, dri-devel, bcm-kernel-feedback-list Cc: justinpopo6, f.fainelli, davem, florian.fainelli, edumazet, kuba, pabeni, robh+dt, krzysztof.kozlowski+dt, opendmb, andrew, hkallweit1, linux, richardcochran, sumit.semwal, christian.koenig On Fri, May 19, 2023 at 02:19:40PM -0700, Justin Chen wrote: > From: Florian Fainelli <florian.fainelli@broadcom.com> > > Add a binding document for the Broadcom ASP 2.0 Ethernet controller. > > Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com> > Signed-off-by: Justin Chen <justin.chen@broadcom.com> > --- Same deal here, usual mailer is refusing to reply cos of: Problem signature from: 1.2.840.113549.1.9.1=#6A757374696E2E6368656E4062726F6164636F6D2E636F6D,CN=Justin Chen,O=Broadcom Inc.,L=Bangalore,ST=Karnataka,C=IN aka: <justin.chen@broadcom.com> created: Fri 19 May 2023 10:19:57 PM IST expires: Wed 10 Sep 2025 01:39:50 PM IST > v3 > - Minor formatting issues > - Change channel prop to brcm,channel for vendor specific format > - Removed redundant v2.0 from compat string > - Fix ranges field > > v2 > - Minor formatting issues > > .../devicetree/bindings/net/brcm,asp-v2.0.yaml | 145 +++++++++++++++++++++ > 1 file changed, 145 insertions(+) > create mode 100644 Documentation/devicetree/bindings/net/brcm,asp-v2.0.yaml > > diff --git a/Documentation/devicetree/bindings/net/brcm,asp-v2.0.yaml b/Documentation/devicetree/bindings/net/brcm,asp-v2.0.yaml > new file mode 100644 > index 000000000000..a9fed957e1d6 > --- /dev/null > +++ b/Documentation/devicetree/bindings/net/brcm,asp-v2.0.yaml > @@ -0,0 +1,145 @@ > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/net/brcm,asp-v2.0.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Broadcom ASP 2.0 Ethernet controller > + > +maintainers: > + - Justin Chen <justin.chen@broadcom.com> > + - Florian Fainelli <florian.fainelli@broadcom.com> > + > +description: Broadcom Ethernet controller first introduced with 72165 > + > +properties: > + '#address-cells': > + const: 1 > + '#size-cells': > + const: 1 > + > + compatible: > + enum: > + - brcm,asp-v2.0 > + - brcm,bcm72165-asp > + - brcm,asp-v2.1 > + - brcm,bcm74165-asp One of Rob's questions on V(N-1) that seems to have been ignored/only partly implemented: > You have 1 SoC per version, so what's the point of versions? If you have > more coming, then fine, but I'd expect it to be something like this: > > compatible = "brcm,bcm74165-asp-v2.1", "brcm,asp-v2.1"; You did drop the -v2.1 that he requested from the SoC compatible, but I amn't sure why the above was not implemented (at least there's no explanation in the previous thread's version, nor in the changelog here...) Cheers, Conor ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v3 2/6] dt-bindings: net: Brcm ASP 2.0 Ethernet controller 2023-05-22 18:27 ` Conor Dooley @ 2023-05-22 18:48 ` Justin Chen 0 siblings, 0 replies; 16+ messages in thread From: Justin Chen @ 2023-05-22 18:48 UTC (permalink / raw) To: Conor Dooley Cc: netdev, devicetree, linux-kernel, linux-media, dri-devel, bcm-kernel-feedback-list, justinpopo6, f.fainelli, davem, florian.fainelli, edumazet, kuba, pabeni, robh+dt, krzysztof.kozlowski+dt, opendmb, andrew, hkallweit1, linux, richardcochran, sumit.semwal, christian.koenig [-- Attachment #1: Type: text/plain, Size: 3134 bytes --] On Mon, May 22, 2023 at 11:27 AM Conor Dooley <mail@conchuod.ie> wrote: > > On Fri, May 19, 2023 at 02:19:40PM -0700, Justin Chen wrote: > > From: Florian Fainelli <florian.fainelli@broadcom.com> > > > > Add a binding document for the Broadcom ASP 2.0 Ethernet controller. > > > > Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com> > > Signed-off-by: Justin Chen <justin.chen@broadcom.com> > > --- > > Same deal here, usual mailer is refusing to reply cos of: > Problem signature from: > 1.2.840.113549.1.9.1=#6A757374696E2E6368656E4062726F6164636F6D2E636F6D,CN=Justin > Chen,O=Broadcom Inc.,L=Bangalore,ST=Karnataka,C=IN > aka: <justin.chen@broadcom.com> > created: Fri 19 May 2023 10:19:57 PM IST > expires: Wed 10 Sep 2025 01:39:50 PM IST > > > v3 > > - Minor formatting issues > > - Change channel prop to brcm,channel for vendor specific format > > - Removed redundant v2.0 from compat string > > - Fix ranges field > > > > v2 > > - Minor formatting issues > > > > .../devicetree/bindings/net/brcm,asp-v2.0.yaml | 145 > +++++++++++++++++++++ > > 1 file changed, 145 insertions(+) > > create mode 100644 > Documentation/devicetree/bindings/net/brcm,asp-v2.0.yaml > > > > diff --git a/Documentation/devicetree/bindings/net/brcm,asp-v2.0.yaml > b/Documentation/devicetree/bindings/net/brcm,asp-v2.0.yaml > > new file mode 100644 > > index 000000000000..a9fed957e1d6 > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/net/brcm,asp-v2.0.yaml > > @@ -0,0 +1,145 @@ > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) > > +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/net/brcm,asp-v2.0.yaml# > > +$schema: http://devicetree.org/meta-schemas/core.yaml# > > + > > +title: Broadcom ASP 2.0 Ethernet controller > > + > > +maintainers: > > + - Justin Chen <justin.chen@broadcom.com> > > + - Florian Fainelli <florian.fainelli@broadcom.com> > > + > > +description: Broadcom Ethernet controller first introduced with 72165 > > + > > +properties: > > + '#address-cells': > > + const: 1 > > + '#size-cells': > > + const: 1 > > + > > + compatible: > > + enum: > > + - brcm,asp-v2.0 > > + - brcm,bcm72165-asp > > + - brcm,asp-v2.1 > > + - brcm,bcm74165-asp > > One of Rob's questions on V(N-1) that seems to have been ignored/only > partly implemented: > > You have 1 SoC per version, so what's the point of versions? If you have > > more coming, then fine, but I'd expect it to be something like this: > > > > compatible = "brcm,bcm74165-asp-v2.1", "brcm,asp-v2.1"; > > You did drop the -v2.1 that he requested from the SoC compatible, but I > amn't sure why the above was not implemented (at least there's no > explanation in the previous thread's version, nor in the changelog > here...) Will fix it. Didn't realize he was talking about the compat string in the example below. Thanks, Justin > > Cheers, > Conor [-- Attachment #2: S/MIME Cryptographic Signature --] [-- Type: application/pkcs7-signature, Size: 4206 bytes --] ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH net-next v3 3/6] net: bcmasp: Add support for ASP2.0 Ethernet controller 2023-05-19 21:19 [PATCH net-next v3 0/6] Brcm ASP 2.0 Ethernet Controller Justin Chen 2023-05-19 21:19 ` [PATCH net-next v3 1/6] dt-bindings: net: brcm,unimac-mdio: Add asp-v2.0 Justin Chen 2023-05-19 21:19 ` [PATCH net-next v3 2/6] dt-bindings: net: Brcm ASP 2.0 Ethernet controller Justin Chen @ 2023-05-19 21:19 ` Justin Chen 2023-05-20 4:43 ` Jakub Kicinski ` (3 more replies) 2023-05-19 21:19 ` [PATCH net-next v3 4/6] net: phy: mdio-bcm-unimac: Add asp v2.0 support Justin Chen ` (2 subsequent siblings) 5 siblings, 4 replies; 16+ messages in thread From: Justin Chen @ 2023-05-19 21:19 UTC (permalink / raw) To: netdev, devicetree, linux-kernel, linux-media, dri-devel, bcm-kernel-feedback-list Cc: justinpopo6, justin.chen, f.fainelli, davem, florian.fainelli, edumazet, kuba, pabeni, robh+dt, krzysztof.kozlowski+dt, opendmb, andrew, hkallweit1, linux, richardcochran, sumit.semwal, christian.koenig [-- Attachment #1: Type: text/plain, Size: 128708 bytes --] Add support for the Broadcom ASP 2.0 Ethernet controller which is first introduced with 72165. This controller features two distinct Ethernet ports that can be independently operated. This patch supports: - Wake-on-LAN using magic packets - basic ethtool operations (link, counters, message level) - MAC destination address filtering (promiscuous, ALL_MULTI, etc.) Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com> Signed-off-by: Justin Chen <justin.chen@broadcom.com> --- v3 - Fix logic error with net stats where some stats were missing - General clean up addressing formatting/spelling/consistency - Use dev_err_probe to save a few LoCs - Use put_unaligned when updating net stats v2 - Replace a couple functions with helper functions - Fix a few WoL issues drivers/net/ethernet/broadcom/Kconfig | 11 + drivers/net/ethernet/broadcom/Makefile | 1 + drivers/net/ethernet/broadcom/asp2/Makefile | 2 + drivers/net/ethernet/broadcom/asp2/bcmasp.c | 1460 ++++++++++++++++++++ drivers/net/ethernet/broadcom/asp2/bcmasp.h | 636 +++++++++ .../net/ethernet/broadcom/asp2/bcmasp_ethtool.c | 568 ++++++++ drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c | 1429 +++++++++++++++++++ .../net/ethernet/broadcom/asp2/bcmasp_intf_defs.h | 238 ++++ 8 files changed, 4345 insertions(+) create mode 100644 drivers/net/ethernet/broadcom/asp2/Makefile create mode 100644 drivers/net/ethernet/broadcom/asp2/bcmasp.c create mode 100644 drivers/net/ethernet/broadcom/asp2/bcmasp.h create mode 100644 drivers/net/ethernet/broadcom/asp2/bcmasp_ethtool.c create mode 100644 drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c create mode 100644 drivers/net/ethernet/broadcom/asp2/bcmasp_intf_defs.h diff --git a/drivers/net/ethernet/broadcom/Kconfig b/drivers/net/ethernet/broadcom/Kconfig index 948586bf1b5b..d4166141145d 100644 --- a/drivers/net/ethernet/broadcom/Kconfig +++ b/drivers/net/ethernet/broadcom/Kconfig @@ -255,4 +255,15 @@ config BNXT_HWMON Say Y if you want to expose the thermal sensor data on NetXtreme-C/E devices, via the hwmon sysfs interface. +config BCMASP + tristate "Broadcom ASP 2.0 Ethernet support" + default ARCH_BRCMSTB + depends on OF + select MII + select PHYLIB + select MDIO_BCM_UNIMAC + help + This configuration enables the Broadcom ASP 2.0 Ethernet controller + driver which is present in Broadcom STB SoCs such as 72165. + endif # NET_VENDOR_BROADCOM diff --git a/drivers/net/ethernet/broadcom/Makefile b/drivers/net/ethernet/broadcom/Makefile index 0ddfb5b5d53c..bac5cb6ad0cd 100644 --- a/drivers/net/ethernet/broadcom/Makefile +++ b/drivers/net/ethernet/broadcom/Makefile @@ -17,3 +17,4 @@ obj-$(CONFIG_BGMAC_BCMA) += bgmac-bcma.o bgmac-bcma-mdio.o obj-$(CONFIG_BGMAC_PLATFORM) += bgmac-platform.o obj-$(CONFIG_SYSTEMPORT) += bcmsysport.o obj-$(CONFIG_BNXT) += bnxt/ +obj-$(CONFIG_BCMASP) += asp2/ diff --git a/drivers/net/ethernet/broadcom/asp2/Makefile b/drivers/net/ethernet/broadcom/asp2/Makefile new file mode 100644 index 000000000000..e07550315f83 --- /dev/null +++ b/drivers/net/ethernet/broadcom/asp2/Makefile @@ -0,0 +1,2 @@ +obj-$(CONFIG_BCMASP) += bcm-asp.o +bcm-asp-objs := bcmasp.o bcmasp_intf.o bcmasp_ethtool.o diff --git a/drivers/net/ethernet/broadcom/asp2/bcmasp.c b/drivers/net/ethernet/broadcom/asp2/bcmasp.c new file mode 100644 index 000000000000..6e0c7df62c1e --- /dev/null +++ b/drivers/net/ethernet/broadcom/asp2/bcmasp.c @@ -0,0 +1,1460 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Broadcom STB ASP 2.0 Driver + * + * Copyright (c) 2020 Broadcom + */ +#include <linux/etherdevice.h> +#include <linux/if_vlan.h> +#include <linux/init.h> +#include <linux/interrupt.h> +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/platform_device.h> +#include <linux/of.h> +#include <linux/of_address.h> +#include <linux/of_platform.h> +#include <linux/clk.h> + +#include "bcmasp.h" +#include "bcmasp_intf_defs.h" + +static void _intr2_mask_clear(struct bcmasp_priv *priv, u32 mask) +{ + intr2_core_wl(priv, mask, ASP_INTR2_MASK_CLEAR); + priv->irq_mask &= ~mask; +} + +static void _intr2_mask_set(struct bcmasp_priv *priv, u32 mask) +{ + intr2_core_wl(priv, mask, ASP_INTR2_MASK_SET); + priv->irq_mask |= mask; +} + +void bcmasp_enable_tx_irq(struct bcmasp_intf *intf, int en) +{ + struct bcmasp_priv *priv = intf->parent; + + if (en) + _intr2_mask_clear(priv, ASP_INTR2_TX_DESC(intf->channel)); + else + _intr2_mask_set(priv, ASP_INTR2_TX_DESC(intf->channel)); +} +EXPORT_SYMBOL_GPL(bcmasp_enable_tx_irq); + +void bcmasp_enable_rx_irq(struct bcmasp_intf *intf, int en) +{ + struct bcmasp_priv *priv = intf->parent; + + if (en) + _intr2_mask_clear(priv, ASP_INTR2_RX_ECH(intf->channel)); + else + _intr2_mask_set(priv, ASP_INTR2_RX_ECH(intf->channel)); +} +EXPORT_SYMBOL_GPL(bcmasp_enable_rx_irq); + +static void bcmasp_intr2_mask_set_all(struct bcmasp_priv *priv) +{ + _intr2_mask_set(priv, 0xffffffff); + priv->irq_mask = 0xffffffff; +} + +static void bcmasp_intr2_clear_all(struct bcmasp_priv *priv) +{ + intr2_core_wl(priv, 0xffffffff, ASP_INTR2_CLEAR); +} + +static void bcmasp_intr2_handling(struct bcmasp_intf *intf, u32 status) +{ + if (status & ASP_INTR2_RX_ECH(intf->channel)) { + if (likely(napi_schedule_prep(&intf->rx_napi))) { + bcmasp_enable_rx_irq(intf, 0); + __napi_schedule_irqoff(&intf->rx_napi); + } + } + + if (status & ASP_INTR2_TX_DESC(intf->channel)) { + if (likely(napi_schedule_prep(&intf->tx_napi))) { + bcmasp_enable_tx_irq(intf, 0); + __napi_schedule_irqoff(&intf->tx_napi); + } + } +} + +static irqreturn_t bcmasp_isr(int irq, void *data) +{ + struct bcmasp_priv *priv = data; + struct bcmasp_intf *intf; + u32 status; + int i; + + status = intr2_core_rl(priv, ASP_INTR2_STATUS) & + ~intr2_core_rl(priv, ASP_INTR2_MASK_STATUS); + + intr2_core_wl(priv, status, ASP_INTR2_CLEAR); + + if (unlikely(status == 0)) { + dev_warn(&priv->pdev->dev, "l2 spurious interrupt\n"); + return IRQ_NONE; + } + + /* Handle intferfaces */ + for (i = 0; i < priv->intf_count; i++) { + intf = priv->intfs[i]; + bcmasp_intr2_handling(intf, status); + } + + return IRQ_HANDLED; +} + +void bcmasp_flush_rx_port(struct bcmasp_intf *intf) +{ + struct bcmasp_priv *priv = intf->parent; + u32 mask; + + switch (intf->port) { + case 0: + mask = ASP_CTRL_UMAC0_FLUSH_MASK; + break; + case 1: + mask = ASP_CTRL_UMAC1_FLUSH_MASK; + break; + case 2: + mask = ASP_CTRL_SPB_FLUSH_MASK; + break; + default: + /* Not valid port */ + return; + } + + rx_ctrl_core_wl(priv, mask, priv->hw_info->rx_ctrl_flush); +} + +static void bcmasp_netfilt_hw_en_wake(struct bcmasp_priv *priv, + struct bcmasp_net_filter *nfilt) +{ + rx_filter_core_wl(priv, ASP_RX_FILTER_NET_OFFSET_L3_1(64), + ASP_RX_FILTER_NET_OFFSET(nfilt->hw_index)); + + rx_filter_core_wl(priv, ASP_RX_FILTER_NET_OFFSET_L2(32) | + ASP_RX_FILTER_NET_OFFSET_L3_0(32) | + ASP_RX_FILTER_NET_OFFSET_L3_1(96) | + ASP_RX_FILTER_NET_OFFSET_L4(32), + ASP_RX_FILTER_NET_OFFSET(nfilt->hw_index + 1)); + + rx_filter_core_wl(priv, ASP_RX_FILTER_NET_CFG_CH(nfilt->port + 8) | + ASP_RX_FILTER_NET_CFG_EN | + ASP_RX_FILTER_NET_CFG_L2_EN | + ASP_RX_FILTER_NET_CFG_L3_EN | + ASP_RX_FILTER_NET_CFG_L4_EN | + ASP_RX_FILTER_NET_CFG_L3_FRM(2) | + ASP_RX_FILTER_NET_CFG_L4_FRM(2) | + ASP_RX_FILTER_NET_CFG_UMC(nfilt->port), + ASP_RX_FILTER_NET_CFG(nfilt->hw_index)); + + rx_filter_core_wl(priv, ASP_RX_FILTER_NET_CFG_CH(nfilt->port + 8) | + ASP_RX_FILTER_NET_CFG_EN | + ASP_RX_FILTER_NET_CFG_L2_EN | + ASP_RX_FILTER_NET_CFG_L3_EN | + ASP_RX_FILTER_NET_CFG_L4_EN | + ASP_RX_FILTER_NET_CFG_L3_FRM(2) | + ASP_RX_FILTER_NET_CFG_L4_FRM(2) | + ASP_RX_FILTER_NET_CFG_UMC(nfilt->port), + ASP_RX_FILTER_NET_CFG(nfilt->hw_index + 1)); +} + +#define MAX_WAKE_FILTER_SIZE 256 +enum asp_netfilt_reg_type { + ASP_NETFILT_MATCH = 0, + ASP_NETFILT_MASK, + ASP_NETFILT_MAX +}; + +static int bcmasp_netfilt_get_reg_offset(struct bcmasp_priv *priv, + struct bcmasp_net_filter *nfilt, + enum asp_netfilt_reg_type reg_type, + u32 offset) +{ + u32 block_index, filter_sel; + + if (offset < 32) { + block_index = ASP_RX_FILTER_NET_L2; + filter_sel = nfilt->hw_index; + } else if (offset < 64) { + block_index = ASP_RX_FILTER_NET_L2; + filter_sel = nfilt->hw_index + 1; + } else if (offset < 96) { + block_index = ASP_RX_FILTER_NET_L3_0; + filter_sel = nfilt->hw_index; + } else if (offset < 128) { + block_index = ASP_RX_FILTER_NET_L3_0; + filter_sel = nfilt->hw_index + 1; + } else if (offset < 160) { + block_index = ASP_RX_FILTER_NET_L3_1; + filter_sel = nfilt->hw_index; + } else if (offset < 192) { + block_index = ASP_RX_FILTER_NET_L3_1; + filter_sel = nfilt->hw_index + 1; + } else if (offset < 224) { + block_index = ASP_RX_FILTER_NET_L4; + filter_sel = nfilt->hw_index; + } else if (offset < 256) { + block_index = ASP_RX_FILTER_NET_L4; + filter_sel = nfilt->hw_index + 1; + } + + switch (reg_type) { + case ASP_NETFILT_MATCH: + return ASP_RX_FILTER_NET_PAT(filter_sel, block_index, + (offset % 32)); + case ASP_NETFILT_MASK: + return ASP_RX_FILTER_NET_MASK(filter_sel, block_index, + (offset % 32)); + default: + return -EINVAL; + } +} + +static void bcmasp_netfilt_wr(struct bcmasp_priv *priv, + struct bcmasp_net_filter *nfilt, + enum asp_netfilt_reg_type reg_type, + u32 val, u32 offset) +{ + int reg_offset; + + /* HW only accepts 4 byte aligned writes */ + if (!IS_ALIGNED(offset, 4) || offset > MAX_WAKE_FILTER_SIZE) + return; + + reg_offset = bcmasp_netfilt_get_reg_offset(priv, nfilt, reg_type, + offset); + + rx_filter_core_wl(priv, val, reg_offset); +} + +static u32 bcmasp_netfilt_rd(struct bcmasp_priv *priv, + struct bcmasp_net_filter *nfilt, + enum asp_netfilt_reg_type reg_type, + u32 offset) +{ + int reg_offset; + + /* HW only accepts 4 byte aligned writes */ + if (!IS_ALIGNED(offset, 4) || offset > MAX_WAKE_FILTER_SIZE) + return 0; + + reg_offset = bcmasp_netfilt_get_reg_offset(priv, nfilt, reg_type, + offset); + + return rx_filter_core_rl(priv, reg_offset); +} + +static int bcmasp_netfilt_wr_m_wake(struct bcmasp_priv *priv, + struct bcmasp_net_filter *nfilt, + u32 offset, void *match, void *mask, + size_t size) +{ + u32 shift, mask_val = 0, match_val = 0; + bool first_byte = true; + + if ((offset + size) > MAX_WAKE_FILTER_SIZE) + return -EINVAL; + + while (size--) { + /* The HW only accepts 4 byte aligned writes, so if we + * begin unaligned or if remaining bytes less than 4, + * we need to read then write to avoid losing current + * register state + */ + if (first_byte && (!IS_ALIGNED(offset, 4) || size < 3)) { + match_val = bcmasp_netfilt_rd(priv, nfilt, + ASP_NETFILT_MATCH, + ALIGN_DOWN(offset, 4)); + mask_val = bcmasp_netfilt_rd(priv, nfilt, + ASP_NETFILT_MASK, + ALIGN_DOWN(offset, 4)); + } + + shift = (3 - (offset % 4)) * 8; + match_val &= ~GENMASK(shift + 7, shift); + mask_val &= ~GENMASK(shift + 7, shift); + match_val |= (u32)(*((u8 *)match) << shift); + mask_val |= (u32)(*((u8 *)mask) << shift); + + /* If last byte or last byte of word, write to reg */ + if (!size || ((offset % 4) == 3)) { + bcmasp_netfilt_wr(priv, nfilt, ASP_NETFILT_MATCH, + match_val, ALIGN_DOWN(offset, 4)); + bcmasp_netfilt_wr(priv, nfilt, ASP_NETFILT_MASK, + mask_val, ALIGN_DOWN(offset, 4)); + first_byte = true; + } else { + first_byte = false; + } + + offset++; + match++; + mask++; + } + + return 0; +} + +static void bcmasp_netfilt_reset_hw(struct bcmasp_priv *priv, + struct bcmasp_net_filter *nfilt) +{ + int i; + + for (i = 0; i < MAX_WAKE_FILTER_SIZE; i += 4) { + bcmasp_netfilt_wr(priv, nfilt, ASP_NETFILT_MATCH, 0, i); + bcmasp_netfilt_wr(priv, nfilt, ASP_NETFILT_MASK, 0, i); + } +} + +static void bcmasp_netfilt_tcpip4_wr(struct bcmasp_priv *priv, + struct bcmasp_net_filter *nfilt, + struct ethtool_tcpip4_spec *match, + struct ethtool_tcpip4_spec *mask, + u32 offset) +{ + __be16 val_16, mask_16; + + val_16 = htons(ETH_P_IP); + mask_16 = htons(0xFFFF); + bcmasp_netfilt_wr_m_wake(priv, nfilt, (ETH_ALEN * 2) + offset, + &val_16, &mask_16, sizeof(val_16)); + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 1, + &match->tos, &mask->tos, + sizeof(match->tos)); + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 12, + &match->ip4src, &mask->ip4src, + sizeof(match->ip4src)); + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 16, + &match->ip4dst, &mask->ip4dst, + sizeof(match->ip4dst)); + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 20, + &match->psrc, &mask->psrc, + sizeof(match->psrc)); + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 22, + &match->pdst, &mask->pdst, + sizeof(match->pdst)); +} + +static void bcmasp_netfilt_tcpip6_wr(struct bcmasp_priv *priv, + struct bcmasp_net_filter *nfilt, + struct ethtool_tcpip6_spec *match, + struct ethtool_tcpip6_spec *mask, + u32 offset) +{ + __be16 val_16, mask_16; + + val_16 = htons(ETH_P_IPV6); + mask_16 = htons(0xFFFF); + bcmasp_netfilt_wr_m_wake(priv, nfilt, (ETH_ALEN * 2) + offset, + &val_16, &mask_16, sizeof(val_16)); + val_16 = match->tclass << 4; + mask_16 = mask->tclass << 4; + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset, + &val_16, &mask_16, sizeof(val_16)); + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 8, + &match->ip6src, &mask->ip6src, + sizeof(match->ip6src)); + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 24, + &match->ip6dst, &mask->ip6dst, + sizeof(match->ip6dst)); + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 40, + &match->psrc, &mask->psrc, + sizeof(match->psrc)); + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 42, + &match->pdst, &mask->pdst, + sizeof(match->pdst)); +} + +static int bcmasp_netfilt_wr_to_hw(struct bcmasp_priv *priv, + struct bcmasp_net_filter *nfilt) +{ + struct ethtool_rx_flow_spec *fs = &nfilt->fs; + unsigned int offset = 0; + __be16 val_16, mask_16; + u8 val_8, mask_8; + + /* Currently only supports wake filters */ + if (!nfilt->wake_filter) + return -EINVAL; + + bcmasp_netfilt_reset_hw(priv, nfilt); + + if (fs->flow_type & FLOW_MAC_EXT) { + bcmasp_netfilt_wr_m_wake(priv, nfilt, 0, &fs->h_ext.h_dest, + &fs->m_ext.h_dest, + sizeof(fs->h_ext.h_dest)); + } + + if ((fs->flow_type & FLOW_EXT) && + (fs->m_ext.vlan_etype || fs->m_ext.vlan_tci)) { + bcmasp_netfilt_wr_m_wake(priv, nfilt, (ETH_ALEN * 2), + &fs->h_ext.vlan_etype, + &fs->m_ext.vlan_etype, + sizeof(fs->h_ext.vlan_etype)); + bcmasp_netfilt_wr_m_wake(priv, nfilt, ((ETH_ALEN * 2) + 2), + &fs->h_ext.vlan_tci, + &fs->m_ext.vlan_tci, + sizeof(fs->h_ext.vlan_tci)); + offset += VLAN_HLEN; + } + + switch (fs->flow_type & ~(FLOW_EXT | FLOW_MAC_EXT)) { + case ETHER_FLOW: + bcmasp_netfilt_wr_m_wake(priv, nfilt, 0, + &fs->h_u.ether_spec.h_dest, + &fs->m_u.ether_spec.h_dest, + sizeof(fs->h_u.ether_spec.h_dest)); + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_ALEN, + &fs->h_u.ether_spec.h_source, + &fs->m_u.ether_spec.h_source, + sizeof(fs->h_u.ether_spec.h_source)); + bcmasp_netfilt_wr_m_wake(priv, nfilt, (ETH_ALEN * 2) + offset, + &fs->h_u.ether_spec.h_proto, + &fs->m_u.ether_spec.h_proto, + sizeof(fs->h_u.ether_spec.h_proto)); + + break; + case IP_USER_FLOW: + val_16 = htons(ETH_P_IP); + mask_16 = htons(0xFFFF); + bcmasp_netfilt_wr_m_wake(priv, nfilt, (ETH_ALEN * 2) + offset, + &val_16, &mask_16, sizeof(val_16)); + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 1, + &fs->h_u.usr_ip4_spec.tos, + &fs->m_u.usr_ip4_spec.tos, + sizeof(fs->h_u.usr_ip4_spec.tos)); + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 9, + &fs->h_u.usr_ip4_spec.proto, + &fs->m_u.usr_ip4_spec.proto, + sizeof(fs->h_u.usr_ip4_spec.proto)); + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 12, + &fs->h_u.usr_ip4_spec.ip4src, + &fs->m_u.usr_ip4_spec.ip4src, + sizeof(fs->h_u.usr_ip4_spec.ip4src)); + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 16, + &fs->h_u.usr_ip4_spec.ip4dst, + &fs->m_u.usr_ip4_spec.ip4dst, + sizeof(fs->h_u.usr_ip4_spec.ip4dst)); + if (!fs->m_u.usr_ip4_spec.l4_4_bytes) + break; + + /* Only supports 20 byte IPv4 header */ + val_8 = 0x45; + mask_8 = 0xFF; + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset, + &val_8, &mask_8, sizeof(val_8)); + bcmasp_netfilt_wr_m_wake(priv, nfilt, + ETH_HLEN + 20 + offset, + &fs->h_u.usr_ip4_spec.l4_4_bytes, + &fs->m_u.usr_ip4_spec.l4_4_bytes, + sizeof(fs->h_u.usr_ip4_spec.l4_4_bytes) + ); + break; + case TCP_V4_FLOW: + val_8 = IPPROTO_TCP; + mask_8 = 0xFF; + bcmasp_netfilt_tcpip4_wr(priv, nfilt, &fs->h_u.tcp_ip4_spec, + &fs->m_u.tcp_ip4_spec, offset); + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 9, + &val_8, &mask_8, sizeof(val_8)); + break; + case UDP_V4_FLOW: + val_8 = IPPROTO_UDP; + mask_8 = 0xFF; + bcmasp_netfilt_tcpip4_wr(priv, nfilt, &fs->h_u.udp_ip4_spec, + &fs->m_u.udp_ip4_spec, offset); + + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 9, + &val_8, &mask_8, sizeof(val_8)); + break; + case TCP_V6_FLOW: + val_8 = IPPROTO_TCP; + mask_8 = 0xFF; + bcmasp_netfilt_tcpip6_wr(priv, nfilt, &fs->h_u.tcp_ip6_spec, + &fs->m_u.tcp_ip6_spec, offset); + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 6, + &val_8, &mask_8, sizeof(val_8)); + break; + case UDP_V6_FLOW: + val_8 = IPPROTO_UDP; + mask_8 = 0xFF; + bcmasp_netfilt_tcpip6_wr(priv, nfilt, &fs->h_u.udp_ip6_spec, + &fs->m_u.udp_ip6_spec, offset); + bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 6, + &val_8, &mask_8, sizeof(val_8)); + break; + } + + bcmasp_netfilt_hw_en_wake(priv, nfilt); + + return 0; +} + +void bcmasp_netfilt_suspend(struct bcmasp_intf *intf) +{ + struct bcmasp_priv *priv = intf->parent; + bool write = false; + int ret, i; + + /* Write all filters to HW */ + for (i = 0; i < NUM_NET_FILTERS; i++) { + /* If the filter does not match the port, skip programming. */ + if (!priv->net_filters[i].claimed || + priv->net_filters[i].port != intf->port) + continue; + + if (i > 0 && (i % 2) && + priv->net_filters[i].wake_filter && + priv->net_filters[i - 1].wake_filter) + continue; + + ret = bcmasp_netfilt_wr_to_hw(priv, &priv->net_filters[i]); + if (!ret) + write = true; + } + + /* Successfully programmed at least one wake filter + * so enable top level wake config + */ + if (write) + rx_filter_core_wl(priv, (ASP_RX_FILTER_OPUT_EN | + ASP_RX_FILTER_LNR_MD | + ASP_RX_FILTER_GEN_WK_EN | + ASP_RX_FILTER_NT_FLT_EN), + ASP_RX_FILTER_BLK_CTRL); +} + +void bcmasp_netfilt_get_all_active(struct bcmasp_intf *intf, u32 *rule_locs, + u32 *rule_cnt) +{ + struct bcmasp_priv *priv = intf->parent; + int j = 0, i; + + for (i = 0; i < NUM_NET_FILTERS; i++) { + if (!priv->net_filters[i].claimed || + priv->net_filters[i].port != intf->port) + continue; + + if (i > 0 && (i % 2) && + priv->net_filters[i].wake_filter && + priv->net_filters[i - 1].wake_filter) + continue; + + rule_locs[j++] = priv->net_filters[i].fs.location; + } + + *rule_cnt = j; +} + +int bcmasp_netfilt_get_active(struct bcmasp_intf *intf) +{ + struct bcmasp_priv *priv = intf->parent; + int cnt = 0, i; + + for (i = 0; i < NUM_NET_FILTERS; i++) { + if (!priv->net_filters[i].claimed || + priv->net_filters[i].port != intf->port) + continue; + + /* Skip over a wake filter pair */ + if (i > 0 && (i % 2) && + priv->net_filters[i].wake_filter && + priv->net_filters[i - 1].wake_filter) + continue; + + cnt++; + } + + return cnt; +} + +int bcmasp_netfilt_check_dup(struct bcmasp_intf *intf, + struct ethtool_rx_flow_spec *fs) +{ + struct bcmasp_priv *priv = intf->parent; + struct ethtool_rx_flow_spec *cur; + size_t fs_size = 0; + int i; + + for (i = 0; i < NUM_NET_FILTERS; i++) { + if (!priv->net_filters[i].claimed || + priv->net_filters[i].port != intf->port) + continue; + + cur = &priv->net_filters[i].fs; + + if (cur->flow_type != fs->flow_type || + cur->ring_cookie != fs->ring_cookie) + continue; + + switch (fs->flow_type & ~(FLOW_EXT | FLOW_MAC_EXT)) { + case ETHER_FLOW: + fs_size = sizeof(struct ethhdr); + break; + case IP_USER_FLOW: + fs_size = sizeof(struct ethtool_usrip4_spec); + break; + case TCP_V6_FLOW: + case UDP_V6_FLOW: + fs_size = sizeof(struct ethtool_tcpip6_spec); + break; + case TCP_V4_FLOW: + case UDP_V4_FLOW: + fs_size = sizeof(struct ethtool_tcpip4_spec); + break; + default: + continue; + } + + if (memcmp(&cur->h_u, &fs->h_u, fs_size) || + memcmp(&cur->m_u, &fs->m_u, fs_size)) + continue; + + if (cur->flow_type & FLOW_EXT) { + if (cur->h_ext.vlan_etype != fs->h_ext.vlan_etype || + cur->m_ext.vlan_etype != fs->m_ext.vlan_etype || + cur->h_ext.vlan_tci != fs->h_ext.vlan_tci || + cur->m_ext.vlan_tci != fs->m_ext.vlan_tci || + cur->h_ext.data[0] != fs->h_ext.data[0]) + continue; + } + if (cur->flow_type & FLOW_MAC_EXT) { + if (memcmp(&cur->h_ext.h_dest, + &fs->h_ext.h_dest, ETH_ALEN) || + memcmp(&cur->m_ext.h_dest, + &fs->m_ext.h_dest, ETH_ALEN)) + continue; + } + + return 1; + } + + return 0; +} + +/* If no network filter found, return open filter. + * If no more open filters return NULL + */ +struct bcmasp_net_filter *bcmasp_netfilt_get_init(struct bcmasp_intf *intf, + int loc, bool wake_filter, + bool init) +{ + struct bcmasp_net_filter *nfilter = NULL; + struct bcmasp_priv *priv = intf->parent; + int i, open_index = -1; + + /* Check whether we exceed the filter table capacity */ + if (loc != RX_CLS_LOC_ANY && loc >= NUM_NET_FILTERS) + return ERR_PTR(-EINVAL); + + /* If the filter location is busy (already claimed) and we are initializing + * the filter (insertion), return a busy error code. + */ + if (loc != RX_CLS_LOC_ANY && init && priv->net_filters[loc].claimed) + return ERR_PTR(-EBUSY); + + /* We need two filters for wake-up, so we cannot use an odd filter */ + if (wake_filter && loc != RX_CLS_LOC_ANY && (loc % 2)) + return ERR_PTR(-EINVAL); + + /* Initialize the loop index based on the desired location or from 0 */ + i = loc == RX_CLS_LOC_ANY ? 0 : loc; + + for ( ; i < NUM_NET_FILTERS; i++) { + /* Found matching network filter */ + if (!init && + priv->net_filters[i].claimed && + priv->net_filters[i].hw_index == i && + priv->net_filters[i].port == intf->port) + return &priv->net_filters[i]; + + /* If we don't need a new filter or new filter already found */ + if (!init || open_index >= 0) + continue; + + /* Wake filter conslidates two filters to cover more bytes + * Wake filter is open if... + * 1. It is an even filter + * 2. The current and next filter is not claimed + */ + if (wake_filter && !(i % 2) && !priv->net_filters[i].claimed && + !priv->net_filters[i + 1].claimed) + open_index = i; + else if (!priv->net_filters[i].claimed) + open_index = i; + } + + if (open_index >= 0) { + nfilter = &priv->net_filters[open_index]; + nfilter->claimed = true; + nfilter->port = intf->port; + nfilter->hw_index = open_index; + } + + if (wake_filter && open_index >= 0) { + /* Claim next filter */ + priv->net_filters[open_index + 1].claimed = true; + priv->net_filters[open_index + 1].wake_filter = true; + nfilter->wake_filter = true; + } + + return nfilter ? nfilter : ERR_PTR(-EINVAL); +} + +void bcmasp_netfilt_release(struct bcmasp_intf *intf, + struct bcmasp_net_filter *nfilt) +{ + struct bcmasp_priv *priv = intf->parent; + + if (nfilt->wake_filter) { + memset(&priv->net_filters[nfilt->hw_index + 1], 0, + sizeof(struct bcmasp_net_filter)); + } + + memset(nfilt, 0, sizeof(struct bcmasp_net_filter)); +} + +static inline void bcmasp_addr_to_uint(unsigned char *addr, u32 *high, u32 *low) +{ + *high = (u32)(addr[0] << 8 | addr[1]); + *low = (u32)(addr[2] << 24 | addr[3] << 16 | addr[4] << 8 | + addr[5]); +} + +static void bcmasp_set_mda_filter(struct bcmasp_intf *intf, + const unsigned char *addr, + unsigned char *mask, + unsigned int i) +{ + struct bcmasp_priv *priv = intf->parent; + u32 addr_h, addr_l, mask_h, mask_l; + + /* Set local copy */ + ether_addr_copy(priv->mda_filters[i].mask, mask); + ether_addr_copy(priv->mda_filters[i].addr, addr); + + /* Write to HW */ + bcmasp_addr_to_uint(priv->mda_filters[i].mask, &mask_h, &mask_l); + bcmasp_addr_to_uint(priv->mda_filters[i].addr, &addr_h, &addr_l); + rx_filter_core_wl(priv, addr_h, ASP_RX_FILTER_MDA_PAT_H(i)); + rx_filter_core_wl(priv, addr_l, ASP_RX_FILTER_MDA_PAT_L(i)); + rx_filter_core_wl(priv, mask_h, ASP_RX_FILTER_MDA_MSK_H(i)); + rx_filter_core_wl(priv, mask_l, ASP_RX_FILTER_MDA_MSK_L(i)); +} + +static void bcmasp_en_mda_filter(struct bcmasp_intf *intf, bool en, + unsigned int i) +{ + struct bcmasp_priv *priv = intf->parent; + + if (priv->mda_filters[i].en == en) + return; + + priv->mda_filters[i].en = en; + priv->mda_filters[i].port = intf->port; + + rx_filter_core_wl(priv, ((intf->channel + 8) | + (en << ASP_RX_FILTER_MDA_CFG_EN_SHIFT) | + ASP_RX_FILTER_MDA_CFG_UMC_SEL(intf->port)), + ASP_RX_FILTER_MDA_CFG(i)); +} + +/* There are 32 MDA filters shared between all ports, we reserve 4 filters per + * port for the following. + * - Promisc: Filter to allow all packets when promisc is enabled + * - All Multicast + * - Broadcast + * - Own address + * + * The reserved filters are identified as so. + * - Promisc: (Port * 4) + 0 + * - All Multicast: (Port * 4) + 1 + * - Broadcast: (Port * 4) + 2 + * - Own address: (Port * 4) + 3 + */ +enum asp_rx_filter_id { + ASP_RX_FILTER_MDA_PROMISC = 0, + ASP_RX_FILTER_MDA_ALLMULTI, + ASP_RX_FILTER_MDA_BROADCAST, + ASP_RX_FILTER_MDA_OWN_ADDR, + ASP_RX_FILTER_MDA_RES_COUNT, +}; + +#define ASP_RX_FILT_MDA_RES_COUNT(intf) ((intf)->parent->intf_count \ + * ASP_RX_FILTER_MDA_RES_COUNT) + +#define ASP_RX_FILT_MDA(intf, name) (((intf)->port * \ + ASP_RX_FILTER_MDA_RES_COUNT) \ + + ASP_RX_FILTER_MDA_##name) + +void bcmasp_set_promisc(struct bcmasp_intf *intf, bool en) +{ + unsigned int i = ASP_RX_FILT_MDA(intf, PROMISC); + unsigned char promisc[ETH_ALEN]; + + eth_zero_addr(promisc); + /* Set mask to 00:00:00:00:00:00 to match all packets */ + bcmasp_set_mda_filter(intf, promisc, promisc, i); + bcmasp_en_mda_filter(intf, en, i); +} + +void bcmasp_set_allmulti(struct bcmasp_intf *intf, bool en) +{ + unsigned char allmulti[] = {0x01, 0x00, 0x00, 0x00, 0x00, 0x00}; + unsigned int i = ASP_RX_FILT_MDA(intf, ALLMULTI); + + /* Set mask to 01:00:00:00:00:00 to match all multicast */ + bcmasp_set_mda_filter(intf, allmulti, allmulti, i); + bcmasp_en_mda_filter(intf, en, i); +} + +void bcmasp_set_broad(struct bcmasp_intf *intf, bool en) +{ + unsigned int i = ASP_RX_FILT_MDA(intf, BROADCAST); + unsigned char addr[ETH_ALEN]; + + eth_broadcast_addr(addr); + bcmasp_set_mda_filter(intf, addr, addr, i); + bcmasp_en_mda_filter(intf, en, i); +} + +void bcmasp_set_oaddr(struct bcmasp_intf *intf, const unsigned char *addr, + bool en) +{ + unsigned char mask[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + unsigned int i = ASP_RX_FILT_MDA(intf, OWN_ADDR); + + bcmasp_set_mda_filter(intf, addr, mask, i); + bcmasp_en_mda_filter(intf, en, i); +} + +void bcmasp_disable_all_filters(struct bcmasp_intf *intf) +{ + struct bcmasp_priv *priv = intf->parent; + unsigned int i; + + /* Disable all filters held by this port */ + for (i = ASP_RX_FILT_MDA_RES_COUNT(intf); i < NUM_MDA_FILTERS; i++) { + if (priv->mda_filters[i].en && + priv->mda_filters[i].port == intf->port) + bcmasp_en_mda_filter(intf, 0, i); + } +} + +static int bcmasp_combine_set_filter(struct bcmasp_intf *intf, + unsigned char *addr, unsigned char *mask, + int i) +{ + struct bcmasp_priv *priv = intf->parent; + u64 addr1, addr2, mask1, mask2, mask3; + + /* Switch to u64 to help with the calculations */ + addr1 = ether_addr_to_u64(priv->mda_filters[i].addr); + mask1 = ether_addr_to_u64(priv->mda_filters[i].mask); + addr2 = ether_addr_to_u64(addr); + mask2 = ether_addr_to_u64(mask); + + /* Check if one filter resides within the other */ + mask3 = mask1 & mask2; + if (mask3 == mask1 && ((addr1 & mask1) == (addr2 & mask1))) { + /* Filter 2 resides within filter 1, so everything is good */ + return 0; + } else if (mask3 == mask2 && ((addr1 & mask2) == (addr2 & mask2))) { + /* Filter 1 resides within filter 2, so swap filters */ + bcmasp_set_mda_filter(intf, addr, mask, i); + return 0; + } + + /* Unable to combine */ + return -EINVAL; +} + +int bcmasp_set_en_mda_filter(struct bcmasp_intf *intf, unsigned char *addr, + unsigned char *mask) +{ + struct bcmasp_priv *priv = intf->parent; + int i, ret; + + for (i = ASP_RX_FILT_MDA_RES_COUNT(intf); i < NUM_MDA_FILTERS; i++) { + /* If filter not enabled or belongs to another port skip */ + if (!priv->mda_filters[i].en || + priv->mda_filters[i].port != intf->port) + continue; + + /* Attempt to combine filters */ + ret = bcmasp_combine_set_filter(intf, addr, mask, i); + if (!ret) { + intf->mib.filters_combine_cnt++; + return 0; + } + } + + /* Create new filter if possible */ + for (i = ASP_RX_FILT_MDA_RES_COUNT(intf); i < NUM_MDA_FILTERS; i++) { + if (priv->mda_filters[i].en) + continue; + + bcmasp_set_mda_filter(intf, addr, mask, i); + bcmasp_en_mda_filter(intf, 1, i); + return 0; + } + + /* No room for new filter */ + return -EINVAL; +} + +static inline void bcmasp_core_init_filters(struct bcmasp_priv *priv) +{ + int i; + + /* Disable all filters and reset software view since the HW + * can lose context while in deep sleep suspend states + */ + for (i = 0; i < NUM_MDA_FILTERS; i++) { + rx_filter_core_wl(priv, 0x0, ASP_RX_FILTER_MDA_CFG(i)); + priv->mda_filters[i].en = 0; + } + + for (i = 0; i < NUM_NET_FILTERS; i++) + rx_filter_core_wl(priv, 0x0, ASP_RX_FILTER_NET_CFG(i)); + + /* Top level filter enable bit should be enabled at all times, set + * GEN_WAKE_CLEAR to clear the network filter wake-up which would + * otherwise be sticky + */ + rx_filter_core_wl(priv, (ASP_RX_FILTER_OPUT_EN | + ASP_RX_FILTER_MDA_EN | + ASP_RX_FILTER_GEN_WK_CLR | + ASP_RX_FILTER_NT_FLT_EN), + ASP_RX_FILTER_BLK_CTRL); +} + +/* ASP core initialization */ +static inline void bcmasp_core_init(struct bcmasp_priv *priv) +{ + tx_analytics_core_wl(priv, 0x0, ASP_TX_ANALYTICS_CTRL); + rx_analytics_core_wl(priv, 0x4, ASP_RX_ANALYTICS_CTRL); + + rx_edpkt_core_wl(priv, (ASP_EDPKT_HDR_SZ_128 << ASP_EDPKT_HDR_SZ_SHIFT), + ASP_EDPKT_HDR_CFG); + rx_edpkt_core_wl(priv, + (ASP_EDPKT_ENDI_BT_SWP_WD << ASP_EDPKT_ENDI_DESC_SHIFT), + ASP_EDPKT_ENDI); + + rx_edpkt_core_wl(priv, 0x1b, ASP_EDPKT_BURST_BUF_PSCAL_TOUT); + rx_edpkt_core_wl(priv, 0x3e8, ASP_EDPKT_BURST_BUF_WRITE_TOUT); + rx_edpkt_core_wl(priv, 0x3e8, ASP_EDPKT_BURST_BUF_READ_TOUT); + + rx_edpkt_core_wl(priv, ASP_EDPKT_ENABLE_EN, ASP_EDPKT_ENABLE); + + /* Disable and clear both UniMAC's wake-up interrupts to avoid + * sticky interrupts. + */ + _intr2_mask_set(priv, ASP_INTR2_UMC0_WAKE | ASP_INTR2_UMC1_WAKE); + intr2_core_wl(priv, ASP_INTR2_UMC0_WAKE | ASP_INTR2_UMC1_WAKE, + ASP_INTR2_CLEAR); +} + +static void bcmasp_core_clock_select(struct bcmasp_priv *priv, bool slow) +{ + u32 reg; + + reg = ctrl_core_rl(priv, ASP_CTRL_CORE_CLOCK_SELECT); + if (slow) + reg &= ~ASP_CTRL_CORE_CLOCK_SELECT_MAIN; + else + reg |= ASP_CTRL_CORE_CLOCK_SELECT_MAIN; + ctrl_core_wl(priv, reg, ASP_CTRL_CORE_CLOCK_SELECT); +} + +static void bcmasp_core_clock_set_ll(struct bcmasp_priv *priv, u32 clr, u32 set) +{ + u32 reg; + + reg = ctrl_core_rl(priv, ASP_CTRL_CLOCK_CTRL); + reg &= ~clr; + reg |= set; + ctrl_core_wl(priv, reg, ASP_CTRL_CLOCK_CTRL); + + reg = ctrl_core_rl(priv, ASP_CTRL_SCRATCH_0); + reg &= ~clr; + reg |= set; + ctrl_core_wl(priv, reg, ASP_CTRL_SCRATCH_0); +} + +static void bcmasp_core_clock_set(struct bcmasp_priv *priv, u32 clr, u32 set) +{ + unsigned long flags; + + spin_lock_irqsave(&priv->clk_lock, flags); + bcmasp_core_clock_set_ll(priv, clr, set); + spin_unlock_irqrestore(&priv->clk_lock, flags); +} + +void bcmasp_core_clock_set_intf(struct bcmasp_intf *intf, bool en) +{ + u32 intf_mask = ASP_CTRL_CLOCK_CTRL_ASP_RGMII_DIS(intf->port); + struct bcmasp_priv *priv = intf->parent; + unsigned long flags; + u32 reg; + + /* When enabling an interface, if the RX or TX clocks were not enabled, + * enable them. Conversely, while disabling an interface, if this is + * the last one enabled, we can turn off the shared RX and TX clocks as + * well. We control enable bits which is why we test for equality on + * the RGMII clock bit mask. + */ + spin_lock_irqsave(&priv->clk_lock, flags); + if (en) { + intf_mask |= ASP_CTRL_CLOCK_CTRL_ASP_TX_DISABLE | + ASP_CTRL_CLOCK_CTRL_ASP_RX_DISABLE; + bcmasp_core_clock_set_ll(priv, intf_mask, 0); + } else { + reg = ctrl_core_rl(priv, ASP_CTRL_SCRATCH_0) | intf_mask; + if ((reg & ASP_CTRL_CLOCK_CTRL_ASP_RGMII_MASK) == + ASP_CTRL_CLOCK_CTRL_ASP_RGMII_MASK) + intf_mask |= ASP_CTRL_CLOCK_CTRL_ASP_TX_DISABLE | + ASP_CTRL_CLOCK_CTRL_ASP_RX_DISABLE; + bcmasp_core_clock_set_ll(priv, 0, intf_mask); + } + spin_unlock_irqrestore(&priv->clk_lock, flags); +} + +static inline int bcmasp_is_port_valid(struct bcmasp_priv *priv, int port) +{ + /* Quick sanity check + * Ports 0/1 reserved for unimac + * Max supported ports is 2 + */ + return (port == 0 || port == 1); +} + +static irqreturn_t bcmasp_isr_wol(int irq, void *data) +{ + struct bcmasp_priv *priv = data; + u32 status; + + /* No L3 IRQ, so we good */ + if (priv->wol_irq <= 0) + goto irq_handled; + + status = wakeup_intr2_core_rl(priv, ASP_WAKEUP_INTR2_STATUS) & + ~wakeup_intr2_core_rl(priv, ASP_WAKEUP_INTR2_MASK_STATUS); + wakeup_intr2_core_wl(priv, status, ASP_WAKEUP_INTR2_CLEAR); + +irq_handled: + pm_wakeup_event(&priv->pdev->dev, 0); + return IRQ_HANDLED; +} + +static int bcmasp_get_and_request_irq(struct bcmasp_priv *priv, int i) +{ + struct platform_device *pdev = priv->pdev; + int irq, ret; + + irq = platform_get_irq_optional(pdev, i); + if (irq < 0) + return irq; + + ret = devm_request_irq(&pdev->dev, irq, bcmasp_isr_wol, 0, + pdev->name, priv); + if (ret) + return ret; + + return irq; +} + +static void bcmasp_init_wol_shared(struct bcmasp_priv *priv) +{ + struct platform_device *pdev = priv->pdev; + struct device *dev = &pdev->dev; + int irq; + + irq = bcmasp_get_and_request_irq(priv, 1); + if (irq < 0) { + dev_warn(dev, "Failed to init WoL irq: %d\n", irq); + return; + } + + priv->wol_irq = irq; + priv->wol_irq_enabled_mask = 0; + device_set_wakeup_capable(&pdev->dev, 1); +} + +static void bcmasp_enable_wol_shared(struct bcmasp_intf *intf, bool en) +{ + struct bcmasp_priv *priv = intf->parent; + struct device *dev = &priv->pdev->dev; + + if (en) { + if (priv->wol_irq_enabled_mask) { + set_bit(intf->port, &priv->wol_irq_enabled_mask); + return; + } + + /* First enable */ + set_bit(intf->port, &priv->wol_irq_enabled_mask); + enable_irq_wake(priv->wol_irq); + device_set_wakeup_enable(dev, 1); + } else { + clear_bit(intf->port, &priv->wol_irq_enabled_mask); + if (priv->wol_irq_enabled_mask) + return; + + /* Last disable */ + disable_irq_wake(priv->wol_irq); + device_set_wakeup_enable(dev, 0); + } +} + +static void bcmasp_wol_irq_destroy_shared(struct bcmasp_priv *priv) +{ + if (priv->wol_irq > 0) + free_irq(priv->wol_irq, priv); +} + +static void bcmasp_init_wol_per_intf(struct bcmasp_priv *priv) +{ + struct platform_device *pdev = priv->pdev; + struct device *dev = &pdev->dev; + struct bcmasp_intf *intf; + int irq, i; + + for (i = 0; i < priv->intf_count; i++) { + intf = priv->intfs[i]; + irq = bcmasp_get_and_request_irq(priv, intf->port + 1); + if (irq < 0) { + dev_warn(dev, "Failed to init WoL irq(port %d): %d\n", + intf->port, irq); + continue; + } + + intf->wol_irq = irq; + intf->wol_irq_enabled = false; + device_set_wakeup_capable(&pdev->dev, 1); + } +} + +static void bcmasp_enable_wol_per_intf(struct bcmasp_intf *intf, bool en) +{ + struct device *dev = &intf->parent->pdev->dev; + + if (en ^ intf->wol_irq_enabled) + irq_set_irq_wake(intf->wol_irq, en); + + intf->wol_irq_enabled = en; + device_set_wakeup_enable(dev, en); +} + +static void bcmasp_wol_irq_destroy_per_intf(struct bcmasp_priv *priv) +{ + struct bcmasp_intf *intf; + int i; + + for (i = 0; i < priv->intf_count; i++) { + intf = priv->intfs[i]; + + if (intf->wol_irq > 0) + free_irq(intf->wol_irq, priv); + } +} + +static struct bcmasp_hw_info v20_hw_info = { + .rx_ctrl_flush = ASP_RX_CTRL_FLUSH, + .umac2fb = UMAC2FB_OFFSET, + .rx_ctrl_fb_out_frame_count = ASP_RX_CTRL_FB_OUT_FRAME_COUNT, + .rx_ctrl_fb_filt_out_frame_count = ASP_RX_CTRL_FB_FILT_OUT_FRAME_COUNT, + .rx_ctrl_fb_rx_fifo_depth = ASP_RX_CTRL_FB_RX_FIFO_DEPTH, +}; + +static const struct bcmasp_plat_data v20_plat_data = { + .init_wol = bcmasp_init_wol_per_intf, + .enable_wol = bcmasp_enable_wol_per_intf, + .destroy_wol = bcmasp_wol_irq_destroy_per_intf, + .hw_info = &v20_hw_info, +}; + +static struct bcmasp_hw_info v21_hw_info = { + .rx_ctrl_flush = ASP_RX_CTRL_FLUSH_2_1, + .umac2fb = UMAC2FB_OFFSET_2_1, + .rx_ctrl_fb_out_frame_count = ASP_RX_CTRL_FB_OUT_FRAME_COUNT_2_1, + .rx_ctrl_fb_filt_out_frame_count = + ASP_RX_CTRL_FB_FILT_OUT_FRAME_COUNT_2_1, + .rx_ctrl_fb_rx_fifo_depth = ASP_RX_CTRL_FB_RX_FIFO_DEPTH_2_1, +}; + +static const struct bcmasp_plat_data v21_plat_data = { + .init_wol = bcmasp_init_wol_shared, + .enable_wol = bcmasp_enable_wol_shared, + .destroy_wol = bcmasp_wol_irq_destroy_shared, + .hw_info = &v21_hw_info, +}; + +static const struct of_device_id bcmasp_of_match[] = { + { .compatible = "brcm,asp-v2.0", .data = &v20_plat_data }, + { .compatible = "brcm,asp-v2.1", .data = &v21_plat_data }, + { /* sentinel */ }, +}; +MODULE_DEVICE_TABLE(of, bcmasp_of_match); + +static const struct of_device_id bcmasp_mdio_of_match[] = { + { .compatible = "brcm,asp-v2.1-mdio", }, + { .compatible = "brcm,asp-v2.0-mdio", }, + { /* sentinel */ }, +}; +MODULE_DEVICE_TABLE(of, bcmasp_mdio_of_match); + +static int bcmasp_probe(struct platform_device *pdev) +{ + struct device_node *ports_node, *intf_node; + const struct bcmasp_plat_data *pdata; + struct device *dev = &pdev->dev; + int ret, i, count = 0, port; + struct bcmasp_priv *priv; + struct bcmasp_intf *intf; + + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + priv->irq = platform_get_irq(pdev, 0); + if (priv->irq <= 0) + return dev_err_probe(dev, -EINVAL, "invalid interrupt\n"); + + priv->clk = devm_clk_get_optional_enabled(dev, "sw_asp"); + if (IS_ERR(priv->clk)) + return dev_err_probe(dev, PTR_ERR(priv->clk), + "failed to request clock\n"); + + /* Base from parent node */ + priv->base = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(priv->base)) + return dev_err_probe(dev, PTR_ERR(priv->base), "failed to iomap\n"); + + ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(40)); + if (ret) + return dev_err_probe(dev, ret, "unable to set DMA mask: %d\n", ret); + + dev_set_drvdata(&pdev->dev, priv); + priv->pdev = pdev; + spin_lock_init(&priv->mda_lock); + spin_lock_init(&priv->clk_lock); + mutex_init(&priv->net_lock); + mutex_init(&priv->wol_lock); + + pdata = device_get_match_data(&pdev->dev); + if (!pdata) + return dev_err_probe(dev, -EINVAL, "unable to find platform data\n"); + + priv->init_wol = pdata->init_wol; + priv->enable_wol = pdata->enable_wol; + priv->destroy_wol = pdata->destroy_wol; + priv->hw_info = pdata->hw_info; + + /* Enable all clocks to ensure successful probing */ + bcmasp_core_clock_set(priv, ASP_CTRL_CLOCK_CTRL_ASP_ALL_DISABLE, 0); + + /* Switch to the main clock */ + bcmasp_core_clock_select(priv, false); + + bcmasp_intr2_mask_set_all(priv); + bcmasp_intr2_clear_all(priv); + + ret = devm_request_irq(&pdev->dev, priv->irq, bcmasp_isr, 0, + pdev->name, priv); + if (ret) + return dev_err_probe(dev, ret, "failed to request ASP interrupt: %d", ret); + + /* Register mdio child nodes */ + of_platform_populate(dev->of_node, bcmasp_mdio_of_match, NULL, dev); + + /* ASP specific initialization, Needs to be done regardless of + * how many interfaces come up. + */ + bcmasp_core_init(priv); + bcmasp_core_init_filters(priv); + + ports_node = of_find_node_by_name(dev->of_node, "ethernet-ports"); + if (!ports_node) { + dev_warn(dev, "No ports found\n"); + return 0; + } + + for_each_available_child_of_node(ports_node, intf_node) { + of_property_read_u32(intf_node, "reg", &port); + if (!bcmasp_is_port_valid(priv, port)) { + dev_warn(dev, "%pOF: %d is an invalid port\n", + intf_node, port); + continue; + } + + priv->intf_count++; + } + + priv->intfs = devm_kcalloc(dev, priv->intf_count, + sizeof(struct bcmasp_intf *), + GFP_KERNEL); + if (!priv->intfs) + return -ENOMEM; + + /* Probe each interface (Initialization should continue even if + * interfaces are unable to come up) + */ + i = 0; + for_each_available_child_of_node(ports_node, intf_node) + priv->intfs[i++] = bcmasp_interface_create(priv, intf_node); + + /* Check and enable WoL */ + priv->init_wol(priv); + + /* Drop the clock reference count now and let ndo_open()/ndo_close() + * manage it for us from now on. + */ + bcmasp_core_clock_set(priv, 0, ASP_CTRL_CLOCK_CTRL_ASP_ALL_DISABLE); + + clk_disable_unprepare(priv->clk); + + /* Now do the registration of the network ports which will take care + * of managing the clock properly. + */ + for (i = 0; i < priv->intf_count; i++) { + intf = priv->intfs[i]; + if (!intf) + continue; + + ret = register_netdev(intf->ndev); + if (ret) { + netdev_err(intf->ndev, + "failed to register net_device: %d\n", ret); + bcmasp_interface_destroy(intf, false); + continue; + } + count++; + } + + dev_info(dev, "Initialized %d port(s)\n", count); + + return 0; +} + +static int bcmasp_remove(struct platform_device *pdev) +{ + struct bcmasp_priv *priv = dev_get_drvdata(&pdev->dev); + struct bcmasp_intf *intf; + int i; + + priv->destroy_wol(priv); + + for (i = 0; i < priv->intf_count; i++) { + intf = priv->intfs[i]; + if (!intf) + continue; + + bcmasp_interface_destroy(intf, true); + } + + return 0; +} + +static void bcmasp_shutdown(struct platform_device *pdev) +{ + int ret; + + ret = bcmasp_remove(pdev); + if (ret) + dev_err(&pdev->dev, "failed to remove: %d\n", ret); +} + +static int __maybe_unused bcmasp_suspend(struct device *d) +{ + struct bcmasp_priv *priv = dev_get_drvdata(d); + struct bcmasp_intf *intf; + int i, ret; + + for (i = 0; i < priv->intf_count; i++) { + intf = priv->intfs[i]; + if (!intf) + continue; + + ret = bcmasp_interface_suspend(intf); + if (ret) + break; + } + + ret = clk_prepare_enable(priv->clk); + if (ret) + return ret; + + /* Whether Wake-on-LAN is enabled or not, we can always disable + * the shared TX clock + */ + bcmasp_core_clock_set(priv, 0, ASP_CTRL_CLOCK_CTRL_ASP_TX_DISABLE); + + bcmasp_core_clock_select(priv, true); + + clk_disable_unprepare(priv->clk); + + return ret; +} + +static int __maybe_unused bcmasp_resume(struct device *d) +{ + struct bcmasp_priv *priv = dev_get_drvdata(d); + struct bcmasp_intf *intf; + int i, ret; + + ret = clk_prepare_enable(priv->clk); + if (ret) + return ret; + + /* Switch to the main clock domain */ + bcmasp_core_clock_select(priv, false); + + /* Re-enable all clocks for re-initialization */ + bcmasp_core_clock_set(priv, ASP_CTRL_CLOCK_CTRL_ASP_ALL_DISABLE, 0); + + bcmasp_core_init(priv); + bcmasp_core_init_filters(priv); + + /* And disable them to let the network devices take care of them */ + bcmasp_core_clock_set(priv, 0, ASP_CTRL_CLOCK_CTRL_ASP_ALL_DISABLE); + + clk_disable_unprepare(priv->clk); + + for (i = 0; i < priv->intf_count; i++) { + intf = priv->intfs[i]; + if (!intf) + continue; + + ret = bcmasp_interface_resume(intf); + if (ret) + break; + } + + return ret; +} + +static SIMPLE_DEV_PM_OPS(bcmasp_pm_ops, + bcmasp_suspend, bcmasp_resume); + +static struct platform_driver bcmasp_driver = { + .probe = bcmasp_probe, + .remove = bcmasp_remove, + .shutdown = bcmasp_shutdown, + .driver = { + .name = "brcm,asp-v2", + .of_match_table = bcmasp_of_match, + .pm = &bcmasp_pm_ops, + }, +}; +module_platform_driver(bcmasp_driver); + +MODULE_AUTHOR("Broadcom"); +MODULE_DESCRIPTION("Broadcom ASP 2.0 Ethernet controller driver"); +MODULE_ALIAS("platform:brcm,asp-v2"); +MODULE_LICENSE("GPL"); diff --git a/drivers/net/ethernet/broadcom/asp2/bcmasp.h b/drivers/net/ethernet/broadcom/asp2/bcmasp.h new file mode 100644 index 000000000000..8a99df48cc39 --- /dev/null +++ b/drivers/net/ethernet/broadcom/asp2/bcmasp.h @@ -0,0 +1,636 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __BCMASP_H +#define __BCMASP_H + +#include <linux/netdevice.h> +#include <linux/phy.h> +#include <linux/io-64-nonatomic-hi-lo.h> +#include <uapi/linux/ethtool.h> + +#define ASP_INTR2_OFFSET 0x1000 +#define ASP_INTR2_STATUS 0x0 +#define ASP_INTR2_SET 0x4 +#define ASP_INTR2_CLEAR 0x8 +#define ASP_INTR2_MASK_STATUS 0xc +#define ASP_INTR2_MASK_SET 0x10 +#define ASP_INTR2_MASK_CLEAR 0x14 + +#define ASP_INTR2_RX_ECH(intr) BIT(intr) +#define ASP_INTR2_TX_DESC(intr) BIT((intr) + 14) +#define ASP_INTR2_UMC0_WAKE BIT(22) +#define ASP_INTR2_UMC1_WAKE BIT(28) + +#define ASP_WAKEUP_INTR2_OFFSET 0x1200 +#define ASP_WAKEUP_INTR2_STATUS 0x0 +#define ASP_WAKEUP_INTR2_SET 0x4 +#define ASP_WAKEUP_INTR2_CLEAR 0x8 +#define ASP_WAKEUP_INTR2_MASK_STATUS 0xc +#define ASP_WAKEUP_INTR2_MASK_SET 0x10 +#define ASP_WAKEUP_INTR2_MASK_CLEAR 0x14 +#define ASP_WAKEUP_INTR2_MPD_0 BIT(0) +#define ASP_WAKEUP_INTR2_MPD_1 BIT(1) +#define ASP_WAKEUP_INTR2_FILT_0 BIT(2) +#define ASP_WAKEUP_INTR2_FILT_1 BIT(3) +#define ASP_WAKEUP_INTR2_FW BIT(4) + +#define ASP_TX_ANALYTICS_OFFSET 0x4c000 +#define ASP_TX_ANALYTICS_CTRL 0x0 + +#define ASP_RX_ANALYTICS_OFFSET 0x98000 +#define ASP_RX_ANALYTICS_CTRL 0x0 + +#define ASP_RX_CTRL_OFFSET 0x9f000 +#define ASP_RX_CTRL_UMAC_0_FRAME_COUNT 0x8 +#define ASP_RX_CTRL_UMAC_1_FRAME_COUNT 0xc +#define ASP_RX_CTRL_FB_0_FRAME_COUNT 0x14 +#define ASP_RX_CTRL_FB_1_FRAME_COUNT 0x18 +#define ASP_RX_CTRL_FB_8_FRAME_COUNT 0x1c +/* asp2.1 diverges offsets here */ +/* ASP2.0 */ +#define ASP_RX_CTRL_FB_OUT_FRAME_COUNT 0x20 +#define ASP_RX_CTRL_FB_FILT_OUT_FRAME_COUNT 0x24 +#define ASP_RX_CTRL_FLUSH 0x28 +#define ASP_CTRL_UMAC0_FLUSH_MASK (BIT(0) | BIT(12)) +#define ASP_CTRL_UMAC1_FLUSH_MASK (BIT(1) | BIT(13)) +#define ASP_CTRL_SPB_FLUSH_MASK (BIT(8) | BIT(20)) +#define ASP_RX_CTRL_FB_RX_FIFO_DEPTH 0x30 +/* ASP2.1 */ +#define ASP_RX_CTRL_FB_9_FRAME_COUNT_2_1 0x20 +#define ASP_RX_CTRL_FB_10_FRAME_COUNT_2_1 0x24 +#define ASP_RX_CTRL_FB_OUT_FRAME_COUNT_2_1 0x28 +#define ASP_RX_CTRL_FB_FILT_OUT_FRAME_COUNT_2_1 0x2c +#define ASP_RX_CTRL_FLUSH_2_1 0x30 +#define ASP_RX_CTRL_FB_RX_FIFO_DEPTH_2_1 0x38 + +#define ASP_RX_FILTER_OFFSET 0x80000 +#define ASP_RX_FILTER_BLK_CTRL 0x0 +#define ASP_RX_FILTER_OPUT_EN BIT(0) +#define ASP_RX_FILTER_MDA_EN BIT(1) +#define ASP_RX_FILTER_LNR_MD BIT(2) +#define ASP_RX_FILTER_GEN_WK_EN BIT(3) +#define ASP_RX_FILTER_GEN_WK_CLR BIT(4) +#define ASP_RX_FILTER_NT_FLT_EN BIT(5) +#define ASP_RX_FILTER_MDA_CFG(sel) (((sel) * 0x14) + 0x100) +#define ASP_RX_FILTER_MDA_CFG_EN_SHIFT 8 +#define ASP_RX_FILTER_MDA_CFG_UMC_SEL(sel) ((sel) > 1 ? BIT(17) : \ + BIT((sel) + 9)) +#define ASP_RX_FILTER_MDA_PAT_H(sel) (((sel) * 0x14) + 0x104) +#define ASP_RX_FILTER_MDA_PAT_L(sel) (((sel) * 0x14) + 0x108) +#define ASP_RX_FILTER_MDA_MSK_H(sel) (((sel) * 0x14) + 0x10c) +#define ASP_RX_FILTER_MDA_MSK_L(sel) (((sel) * 0x14) + 0x110) +#define ASP_RX_FILTER_MDA_CFG(sel) (((sel) * 0x14) + 0x100) +#define ASP_RX_FILTER_MDA_PAT_H(sel) (((sel) * 0x14) + 0x104) +#define ASP_RX_FILTER_MDA_PAT_L(sel) (((sel) * 0x14) + 0x108) +#define ASP_RX_FILTER_MDA_MSK_H(sel) (((sel) * 0x14) + 0x10c) +#define ASP_RX_FILTER_MDA_MSK_L(sel) (((sel) * 0x14) + 0x110) +#define ASP_RX_FILTER_NET_CFG(sel) (((sel) * 0xa04) + 0x400) +#define ASP_RX_FILTER_NET_CFG_CH(sel) ((sel) << 0) +#define ASP_RX_FILTER_NET_CFG_EN BIT(9) +#define ASP_RX_FILTER_NET_CFG_L2_EN BIT(10) +#define ASP_RX_FILTER_NET_CFG_L3_EN BIT(11) +#define ASP_RX_FILTER_NET_CFG_L4_EN BIT(12) +#define ASP_RX_FILTER_NET_CFG_L3_FRM(sel) ((sel) << 13) +#define ASP_RX_FILTER_NET_CFG_L4_FRM(sel) ((sel) << 15) +#define ASP_RX_FILTER_NET_CFG_UMC(sel) BIT((sel) + 19) +#define ASP_RX_FILTER_NET_CFG_DMA_EN BIT(27) + +enum asp_rx_net_filter_block { + ASP_RX_FILTER_NET_L2 = 0, + ASP_RX_FILTER_NET_L3_0, + ASP_RX_FILTER_NET_L3_1, + ASP_RX_FILTER_NET_L4, + ASP_RX_FILTER_NET_BLOCK_MAX +}; + +#define ASP_RX_FILTER_NET_OFFSET_MAX 32 +#define ASP_RX_FILTER_NET_PAT(sel, block, off) \ + (((sel) * 0xa04) + ((block) * 0x200) + (off) + 0x600) +#define ASP_RX_FILTER_NET_MASK(sel, block, off) \ + (((sel) * 0xa04) + ((block) * 0x200) + (off) + 0x700) + +#define ASP_RX_FILTER_NET_OFFSET(sel) (((sel) * 0xa04) + 0xe00) +#define ASP_RX_FILTER_NET_OFFSET_L2(val) ((val) << 0) +#define ASP_RX_FILTER_NET_OFFSET_L3_0(val) ((val) << 8) +#define ASP_RX_FILTER_NET_OFFSET_L3_1(val) ((val) << 16) +#define ASP_RX_FILTER_NET_OFFSET_L4(val) ((val) << 24) + +#define ASP_EDPKT_OFFSET 0x9c000 +#define ASP_EDPKT_ENABLE 0x4 +#define ASP_EDPKT_ENABLE_EN BIT(0) +#define ASP_EDPKT_HDR_CFG 0xc +#define ASP_EDPKT_HDR_SZ_SHIFT 2 +#define ASP_EDPKT_HDR_SZ_32 0 +#define ASP_EDPKT_HDR_SZ_64 1 +#define ASP_EDPKT_HDR_SZ_96 2 +#define ASP_EDPKT_HDR_SZ_128 3 +#define ASP_EDPKT_BURST_BUF_PSCAL_TOUT 0x10 +#define ASP_EDPKT_BURST_BUF_WRITE_TOUT 0x14 +#define ASP_EDPKT_BURST_BUF_READ_TOUT 0x18 +#define ASP_EDPKT_RX_TS_COUNTER 0x38 +#define ASP_EDPKT_ENDI 0x48 +#define ASP_EDPKT_ENDI_DESC_SHIFT 8 +#define ASP_EDPKT_ENDI_NO_BT_SWP 0 +#define ASP_EDPKT_ENDI_BT_SWP_WD 1 +#define ASP_EDPKT_RX_PKT_CNT 0x138 +#define ASP_EDPKT_HDR_EXTR_CNT 0x13c +#define ASP_EDPKT_HDR_OUT_CNT 0x140 + +#define ASP_CTRL 0x101000 +#define ASP_CTRL_ASP_SW_INIT 0x04 +#define ASP_CTRL_ASP_SW_INIT_ACPUSS_CORE BIT(0) +#define ASP_CTRL_ASP_SW_INIT_ASP_TX BIT(1) +#define ASP_CTRL_ASP_SW_INIT_AS_RX BIT(2) +#define ASP_CTRL_ASP_SW_INIT_ASP_RGMII_UMAC0 BIT(3) +#define ASP_CTRL_ASP_SW_INIT_ASP_RGMII_UMAC1 BIT(4) +#define ASP_CTRL_ASP_SW_INIT_ASP_XMEMIF BIT(5) +#define ASP_CTRL_CLOCK_CTRL 0x04 +#define ASP_CTRL_CLOCK_CTRL_ASP_TX_DISABLE BIT(0) +#define ASP_CTRL_CLOCK_CTRL_ASP_RX_DISABLE BIT(1) +#define ASP_CTRL_CLOCK_CTRL_ASP_RGMII_SHIFT 2 +#define ASP_CTRL_CLOCK_CTRL_ASP_RGMII_MASK (0x7 << ASP_CTRL_CLOCK_CTRL_ASP_RGMII_SHIFT) +#define ASP_CTRL_CLOCK_CTRL_ASP_RGMII_DIS(x) BIT(ASP_CTRL_CLOCK_CTRL_ASP_RGMII_SHIFT + (x)) +#define ASP_CTRL_CLOCK_CTRL_ASP_ALL_DISABLE GENMASK(4, 0) +#define ASP_CTRL_CORE_CLOCK_SELECT 0x08 +#define ASP_CTRL_CORE_CLOCK_SELECT_MAIN BIT(0) +#define ASP_CTRL_SCRATCH_0 0x0c + +struct bcmasp_tx_cb { + struct sk_buff *skb; + unsigned int bytes_sent; + bool last; + + DEFINE_DMA_UNMAP_ADDR(dma_addr); + DEFINE_DMA_UNMAP_LEN(dma_len); +}; + +struct bcmasp_res { + /* Per interface resources */ + /* Port */ + void __iomem *umac; + void __iomem *umac2fb; + void __iomem *rgmii; + + /* TX slowpath/configuration */ + void __iomem *tx_spb_ctrl; + void __iomem *tx_spb_top; + void __iomem *tx_epkt_core; + void __iomem *tx_pause_ctrl; +}; + +#define DESC_ADDR(x) ((x) & GENMASK_ULL(39, 0)) +#define DESC_FLAGS(x) ((x) & GENMASK_ULL(63, 40)) + +struct bcmasp_desc { + u64 buf; + #define DESC_CHKSUM BIT_ULL(40) + #define DESC_CRC_ERR BIT_ULL(41) + #define DESC_RX_SYM_ERR BIT_ULL(42) + #define DESC_NO_OCT_ALN BIT_ULL(43) + #define DESC_PKT_TRUC BIT_ULL(44) + /* 39:0 (TX/RX) bits 0-39 of buf addr + * 40 (RX) checksum + * 41 (RX) crc_error + * 42 (RX) rx_symbol_error + * 43 (RX) non_octet_aligned + * 44 (RX) pkt_truncated + * 45 Reserved + * 56:46 (RX) mac_filter_id + * 60:57 (RX) rx_port_num (0-unicmac0, 1-unimac1) + * 61 Reserved + * 63:62 (TX) forward CRC, overwrite CRC + */ + u32 size; + u32 flags; + #define DESC_INT_EN BIT(0) + #define DESC_SOF BIT(1) + #define DESC_EOF BIT(2) + #define DESC_EPKT_CMD BIT(3) + #define DESC_SCRAM_ST BIT(8) + #define DESC_SCRAM_END BIT(9) + #define DESC_PCPP BIT(10) + #define DESC_PPPP BIT(11) + /* 0 (TX) tx_int_en + * 1 (TX/RX) SOF + * 2 (TX/RX) EOF + * 3 (TX) epkt_command + * 6:4 (TX) PA + * 7 (TX) pause at desc end + * 8 (TX) scram_start + * 9 (TX) scram_end + * 10 (TX) PCPP + * 11 (TX) PPPP + * 14:12 Reserved + * 15 (TX) pid ch Valid + * 19:16 (TX) data_pkt_type + * 32:20 (TX) pid_channel (RX) nw_filter_id + */ +}; + +/* Rx/Tx common counter group */ +struct bcmasp_pkt_counters { + u32 cnt_64; /* RO Received/Transmitted 64 bytes packet */ + u32 cnt_127; /* RO Rx/Tx 127 bytes packet */ + u32 cnt_255; /* RO Rx/Tx 65-255 bytes packet */ + u32 cnt_511; /* RO Rx/Tx 256-511 bytes packet */ + u32 cnt_1023; /* RO Rx/Tx 512-1023 bytes packet */ + u32 cnt_1518; /* RO Rx/Tx 1024-1518 bytes packet */ + u32 cnt_mgv; /* RO Rx/Tx 1519-1522 good VLAN packet */ + u32 cnt_2047; /* RO Rx/Tx 1522-2047 bytes packet*/ + u32 cnt_4095; /* RO Rx/Tx 2048-4095 bytes packet*/ + u32 cnt_9216; /* RO Rx/Tx 4096-9216 bytes packet*/ +}; + +/* RSV, Receive Status Vector */ +struct bcmasp_rx_counters { + struct bcmasp_pkt_counters pkt_cnt; + u32 pkt; /* RO (0x428) Received pkt count*/ + u32 bytes; /* RO Received byte count */ + u32 mca; /* RO # of Received multicast pkt */ + u32 bca; /* RO # of Receive broadcast pkt */ + u32 fcs; /* RO # of Received FCS error */ + u32 cf; /* RO # of Received control frame pkt*/ + u32 pf; /* RO # of Received pause frame pkt */ + u32 uo; /* RO # of unknown op code pkt */ + u32 aln; /* RO # of alignment error count */ + u32 flr; /* RO # of frame length out of range count */ + u32 cde; /* RO # of code error pkt */ + u32 fcr; /* RO # of carrier sense error pkt */ + u32 ovr; /* RO # of oversize pkt*/ + u32 jbr; /* RO # of jabber count */ + u32 mtue; /* RO # of MTU error pkt*/ + u32 pok; /* RO # of Received good pkt */ + u32 uc; /* RO # of unicast pkt */ + u32 ppp; /* RO # of PPP pkt */ + u32 rcrc; /* RO (0x470),# of CRC match pkt */ +}; + +/* TSV, Transmit Status Vector */ +struct bcmasp_tx_counters { + struct bcmasp_pkt_counters pkt_cnt; + u32 pkts; /* RO (0x4a8) Transmitted pkt */ + u32 mca; /* RO # of xmited multicast pkt */ + u32 bca; /* RO # of xmited broadcast pkt */ + u32 pf; /* RO # of xmited pause frame count */ + u32 cf; /* RO # of xmited control frame count */ + u32 fcs; /* RO # of xmited FCS error count */ + u32 ovr; /* RO # of xmited oversize pkt */ + u32 drf; /* RO # of xmited deferral pkt */ + u32 edf; /* RO # of xmited Excessive deferral pkt*/ + u32 scl; /* RO # of xmited single collision pkt */ + u32 mcl; /* RO # of xmited multiple collision pkt*/ + u32 lcl; /* RO # of xmited late collision pkt */ + u32 ecl; /* RO # of xmited excessive collision pkt*/ + u32 frg; /* RO # of xmited fragments pkt*/ + u32 ncl; /* RO # of xmited total collision count */ + u32 jbr; /* RO # of xmited jabber count*/ + u32 bytes; /* RO # of xmited byte count */ + u32 pok; /* RO # of xmited good pkt */ + u32 uc; /* RO (0x0x4f0)# of xmited unitcast pkt */ +}; + +struct bcmasp_mib_counters { + struct bcmasp_rx_counters rx; + struct bcmasp_tx_counters tx; + u32 rx_runt_cnt; + u32 rx_runt_fcs; + u32 rx_runt_fcs_align; + u32 rx_runt_bytes; + u32 edpkt_ts; + u32 edpkt_rx_pkt_cnt; + u32 edpkt_hdr_ext_cnt; + u32 edpkt_hdr_out_cnt; + u32 umac_frm_cnt; + u32 fb_frm_cnt; + u32 fb_out_frm_cnt; + u32 fb_filt_out_frm_cnt; + u32 fb_rx_fifo_depth; + u32 alloc_rx_buff_failed; + u32 alloc_rx_skb_failed; + u32 rx_dma_failed; + u32 tx_dma_failed; + u32 mc_filters_full_cnt; + u32 uc_filters_full_cnt; + u32 filters_combine_cnt; + u32 promisc_filters_cnt; + u32 tx_realloc_offload_failed; + u32 tx_realloc_offload; +}; + +struct bcmasp_intf; + +struct bcmasp_intf_ops { + unsigned long (*rx_desc_read)(struct bcmasp_intf *intf); + void (*rx_buffer_write)(struct bcmasp_intf *intf, dma_addr_t addr); + void (*rx_desc_write)(struct bcmasp_intf *intf, dma_addr_t addr); + unsigned long (*tx_read)(struct bcmasp_intf *intf); + void (*tx_write)(struct bcmasp_intf *intf, dma_addr_t addr); +}; + +struct bcmasp_intf { + struct net_device *ndev; + struct bcmasp_priv *parent; + + /* ASP Ch */ + int channel; + int port; + const struct bcmasp_intf_ops *ops; + + struct napi_struct tx_napi; + /* TX ring, starts on a new cacheline boundary */ + void __iomem *tx_spb_dma; + int tx_spb_index; + int tx_spb_clean_index; + struct bcmasp_desc *tx_spb_cpu; + dma_addr_t tx_spb_dma_addr; + dma_addr_t tx_spb_dma_valid; + dma_addr_t tx_spb_dma_read; + struct bcmasp_tx_cb *tx_cbs; + /* Tx ring lock */ + spinlock_t tx_lock; + + /* RX ring, starts on a new cacheline boundary */ + void __iomem *rx_edpkt_cfg; + void __iomem *rx_edpkt_dma; + int rx_edpkt_index; + int rx_buf_order; + struct bcmasp_desc *rx_edpkt_cpu; + dma_addr_t rx_edpkt_dma_addr; + dma_addr_t rx_edpkt_dma_read; + + /* RX buffer prefetcher ring*/ + void *rx_ring_cpu; + dma_addr_t rx_ring_dma; + dma_addr_t rx_ring_dma_valid; + struct napi_struct rx_napi; + + struct bcmasp_res res; + unsigned int crc_fwd; + + /* PHY device */ + struct device_node *phy_dn; + struct device_node *ndev_dn; + phy_interface_t phy_interface; + bool internal_phy; + int old_pause; + int old_link; + int old_duplex; + + u32 msg_enable; + /* MIB counters */ + struct bcmasp_mib_counters mib; + + /* Wake-on-LAN */ + u32 wolopts; + u8 sopass[SOPASS_MAX]; + int wol_irq; + unsigned int wol_irq_enabled:1; + + struct ethtool_eee eee; +}; + +#define NUM_NET_FILTERS 32 +struct bcmasp_net_filter { + struct ethtool_rx_flow_spec fs; + + bool claimed; + bool wake_filter; + + int port; + unsigned int hw_index; +}; + +#define NUM_MDA_FILTERS 32 +struct bcmasp_mda_filter { + /* Current owner of this filter */ + int port; + bool en; + u8 addr[ETH_ALEN]; + u8 mask[ETH_ALEN]; +}; + +struct bcmasp_priv; + +struct bcmasp_hw_info { + u32 rx_ctrl_flush; + u32 umac2fb; + u32 rx_ctrl_fb_out_frame_count; + u32 rx_ctrl_fb_filt_out_frame_count; + u32 rx_ctrl_fb_rx_fifo_depth; +}; + +struct bcmasp_plat_data { + void (*init_wol)(struct bcmasp_priv *priv); + void (*enable_wol)(struct bcmasp_intf *intf, bool en); + void (*destroy_wol)(struct bcmasp_priv *priv); + struct bcmasp_hw_info *hw_info; +}; + +struct bcmasp_priv { + struct platform_device *pdev; + struct clk *clk; + + int irq; + u32 irq_mask; + + int wol_irq; + unsigned long wol_irq_enabled_mask; + /* Wol lock */ + struct mutex wol_lock; + void (*init_wol)(struct bcmasp_priv *priv); + void (*enable_wol)(struct bcmasp_intf *intf, bool en); + void (*destroy_wol)(struct bcmasp_priv *priv); + + void __iomem *base; + struct bcmasp_hw_info *hw_info; + + unsigned int intf_count; + struct bcmasp_intf **intfs; + + struct bcmasp_mda_filter mda_filters[NUM_MDA_FILTERS]; + unsigned int filters_count; + /* MAC destination address filters lock */ + spinlock_t mda_lock; + + /* Protects accesses to ASP_CTRL_CLOCK_CTRL */ + spinlock_t clk_lock; + + struct bcmasp_net_filter net_filters[NUM_NET_FILTERS]; + /* Max amount of filters minus reserved filters */ + unsigned int net_filters_count_max; + /* Network filter lock */ + struct mutex net_lock; +}; + +static inline unsigned long bcmasp_intf_rx_desc_read(struct bcmasp_intf *intf) +{ + return intf->ops->rx_desc_read(intf); +} + +static inline void bcmasp_intf_rx_buffer_write(struct bcmasp_intf *intf, + dma_addr_t addr) +{ + intf->ops->rx_buffer_write(intf, addr); +} + +static inline void bcmasp_intf_rx_desc_write(struct bcmasp_intf *intf, + dma_addr_t addr) +{ + intf->ops->rx_desc_write(intf, addr); +} + +static inline unsigned long bcmasp_intf_tx_read(struct bcmasp_intf *intf) +{ + return intf->ops->tx_read(intf); +} + +static inline void bcmasp_intf_tx_write(struct bcmasp_intf *intf, dma_addr_t addr) +{ + intf->ops->tx_write(intf, addr); +} + +#define __BCMASP_IO_MACRO(name, m) \ +static inline u32 name##_rl(struct bcmasp_intf *intf, u32 off) \ +{ \ + u32 reg = readl_relaxed(intf->m + off); \ + return reg; \ +} \ +static inline void name##_wl(struct bcmasp_intf *intf, u32 val, u32 off)\ +{ \ + writel_relaxed(val, intf->m + off); \ +} + +#define BCMASP_IO_MACRO(name) __BCMASP_IO_MACRO(name, res.name) +#define BCMASP_FP_IO_MACRO(name) __BCMASP_IO_MACRO(name, name) + +BCMASP_IO_MACRO(umac); +BCMASP_IO_MACRO(umac2fb); +BCMASP_IO_MACRO(rgmii); +BCMASP_FP_IO_MACRO(tx_spb_dma); +BCMASP_IO_MACRO(tx_spb_ctrl); +BCMASP_IO_MACRO(tx_spb_top); +BCMASP_IO_MACRO(tx_epkt_core); +BCMASP_IO_MACRO(tx_pause_ctrl); +BCMASP_FP_IO_MACRO(rx_edpkt_dma); +BCMASP_FP_IO_MACRO(rx_edpkt_cfg); + +#define __BCMASP_FP_IO_MACRO_Q(name, m) \ +static inline u64 name##_rq(struct bcmasp_intf *intf, u32 off) \ +{ \ + u64 reg = readq_relaxed(intf->m + off); \ + return reg; \ +} \ +static inline void name##_wq(struct bcmasp_intf *intf, u64 val, u32 off)\ +{ \ + writeq_relaxed(val, intf->m + off); \ +} + +#define BCMASP_FP_IO_MACRO_Q(name) __BCMASP_FP_IO_MACRO_Q(name, name) + +BCMASP_FP_IO_MACRO_Q(tx_spb_dma); +BCMASP_FP_IO_MACRO_Q(rx_edpkt_dma); +BCMASP_FP_IO_MACRO_Q(rx_edpkt_cfg); + +#define PKT_OFFLOAD_NOP (0 << 28) +#define PKT_OFFLOAD_HDR_OP (1 << 28) +#define PKT_OFFLOAD_HDR_WRBACK BIT(19) +#define PKT_OFFLOAD_HDR_COUNT(x) ((x) << 16) +#define PKT_OFFLOAD_HDR_SIZE_1(x) ((x) << 4) +#define PKT_OFFLOAD_HDR_SIZE_2(x) (x) +#define PKT_OFFLOAD_HDR2_SIZE_2(x) ((x) << 24) +#define PKT_OFFLOAD_HDR2_SIZE_3(x) ((x) << 12) +#define PKT_OFFLOAD_HDR2_SIZE_4(x) (x) +#define PKT_OFFLOAD_EPKT_OP (2 << 28) +#define PKT_OFFLOAD_EPKT_WRBACK BIT(23) +#define PKT_OFFLOAD_EPKT_IP(x) ((x) << 21) +#define PKT_OFFLOAD_EPKT_TP(x) ((x) << 19) +#define PKT_OFFLOAD_EPKT_LEN(x) ((x) << 16) +#define PKT_OFFLOAD_EPKT_CSUM_L3 BIT(15) +#define PKT_OFFLOAD_EPKT_CSUM_L2 BIT(14) +#define PKT_OFFLOAD_EPKT_ID(x) ((x) << 12) +#define PKT_OFFLOAD_EPKT_SEQ(x) ((x) << 10) +#define PKT_OFFLOAD_EPKT_TS(x) ((x) << 8) +#define PKT_OFFLOAD_EPKT_BLOC(x) (x) +#define PKT_OFFLOAD_END_OP (7 << 28) + +struct bcmasp_pkt_offload { + u32 nop; + u32 header; + u32 header2; + u32 epkt; + u32 end; +}; + +#define BCMASP_CORE_IO_MACRO(name, offset) \ +static inline u32 name##_core_rl(struct bcmasp_priv *priv, \ + u32 off) \ +{ \ + u32 reg = readl_relaxed(priv->base + (offset) + off); \ + return reg; \ +} \ +static inline void name##_core_wl(struct bcmasp_priv *priv, \ + u32 val, u32 off) \ +{ \ + writel_relaxed(val, priv->base + (offset) + off); \ +} + +BCMASP_CORE_IO_MACRO(intr2, ASP_INTR2_OFFSET); +BCMASP_CORE_IO_MACRO(wakeup_intr2, ASP_WAKEUP_INTR2_OFFSET); +BCMASP_CORE_IO_MACRO(tx_analytics, ASP_TX_ANALYTICS_OFFSET); +BCMASP_CORE_IO_MACRO(rx_analytics, ASP_RX_ANALYTICS_OFFSET); +BCMASP_CORE_IO_MACRO(rx_ctrl, ASP_RX_CTRL_OFFSET); +BCMASP_CORE_IO_MACRO(rx_filter, ASP_RX_FILTER_OFFSET); +BCMASP_CORE_IO_MACRO(rx_edpkt, ASP_EDPKT_OFFSET); +BCMASP_CORE_IO_MACRO(ctrl, ASP_CTRL); + +struct bcmasp_intf *bcmasp_interface_create(struct bcmasp_priv *priv, + struct device_node *ndev_dn); + +void bcmasp_interface_destroy(struct bcmasp_intf *intf, bool unregister); + +void bcmasp_enable_tx_irq(struct bcmasp_intf *intf, int en); + +void bcmasp_enable_rx_irq(struct bcmasp_intf *intf, int en); + +void bcmasp_flush_rx_port(struct bcmasp_intf *intf); + +extern const struct ethtool_ops bcmasp_ethtool_ops; + +int bcmasp_interface_suspend(struct bcmasp_intf *intf); + +int bcmasp_interface_resume(struct bcmasp_intf *intf); + +void bcmasp_set_promisc(struct bcmasp_intf *intf, bool en); + +void bcmasp_set_allmulti(struct bcmasp_intf *intf, bool en); + +void bcmasp_set_broad(struct bcmasp_intf *intf, bool en); + +void bcmasp_set_oaddr(struct bcmasp_intf *intf, const unsigned char *addr, + bool en); + +int bcmasp_set_en_mda_filter(struct bcmasp_intf *intf, unsigned char *addr, + unsigned char *mask); + +void bcmasp_disable_all_filters(struct bcmasp_intf *intf); + +void bcmasp_core_clock_set_intf(struct bcmasp_intf *intf, bool en); + +struct bcmasp_net_filter *bcmasp_netfilt_get_init(struct bcmasp_intf *intf, + int loc, bool wake_filter, + bool init); + +int bcmasp_netfilt_check_dup(struct bcmasp_intf *intf, + struct ethtool_rx_flow_spec *fs); + +void bcmasp_netfilt_release(struct bcmasp_intf *intf, + struct bcmasp_net_filter *nfilt); + +int bcmasp_netfilt_get_active(struct bcmasp_intf *intf); + +void bcmasp_netfilt_get_all_active(struct bcmasp_intf *intf, u32 *rule_locs, + u32 *rule_cnt); + +void bcmasp_netfilt_suspend(struct bcmasp_intf *intf); + +void bcmasp_eee_enable_set(struct bcmasp_intf *intf, bool enable); +#endif diff --git a/drivers/net/ethernet/broadcom/asp2/bcmasp_ethtool.c b/drivers/net/ethernet/broadcom/asp2/bcmasp_ethtool.c new file mode 100644 index 000000000000..0af3d43ae20e --- /dev/null +++ b/drivers/net/ethernet/broadcom/asp2/bcmasp_ethtool.c @@ -0,0 +1,568 @@ +// SPDX-License-Identifier: GPL-2.0 +#define pr_fmt(fmt) "bcmasp_ethtool: " fmt + +#include <asm/unaligned.h> +#include <linux/ethtool.h> +#include <linux/netdevice.h> +#include <linux/platform_device.h> + +#include "bcmasp.h" +#include "bcmasp_intf_defs.h" + +/* standard ethtool support functions. */ +enum bcmasp_stat_type { + BCMASP_STAT_NETDEV = -1, + BCMASP_STAT_MIB_RX, + BCMASP_STAT_MIB_TX, + BCMASP_STAT_RUNT, + BCMASP_STAT_RX_EDPKT, + BCMASP_STAT_RX_CTRL, + BCMASP_STAT_SOFT, +}; + +struct bcmasp_stats { + char stat_string[ETH_GSTRING_LEN]; + int stat_sizeof; + int stat_offset; + enum bcmasp_stat_type type; + /* register offset from base for misc counters */ + u16 reg_offset; +}; + +#define STAT_NETDEV(m) { \ + .stat_string = __stringify(m), \ + .stat_sizeof = sizeof(((struct net_device_stats *)0)->m), \ + .stat_offset = offsetof(struct net_device_stats, m), \ + .type = BCMASP_STAT_NETDEV, \ +} + +#define STAT_BCMASP_MIB(str, m, _type) { \ + .stat_string = str, \ + .stat_sizeof = sizeof(((struct bcmasp_intf *)0)->m), \ + .stat_offset = offsetof(struct bcmasp_intf, m), \ + .type = _type, \ +} + +#define STAT_BCMASP_OFFSET(str, m, _type, offset) { \ + .stat_string = str, \ + .stat_sizeof = sizeof(((struct bcmasp_intf *)0)->m), \ + .stat_offset = offsetof(struct bcmasp_intf, m), \ + .type = _type, \ + .reg_offset = offset, \ +} + +#define STAT_BCMASP_MIB_RX(str, m) \ + STAT_BCMASP_MIB(str, m, BCMASP_STAT_MIB_RX) +#define STAT_BCMASP_MIB_TX(str, m) \ + STAT_BCMASP_MIB(str, m, BCMASP_STAT_MIB_TX) +#define STAT_BCMASP_RUNT(str, m) \ + STAT_BCMASP_MIB(str, m, BCMASP_STAT_RUNT) +#define STAT_BCMASP_RX_EDPKT(str, m, offset) \ + STAT_BCMASP_OFFSET(str, m, BCMASP_STAT_RX_EDPKT, offset) +#define STAT_BCMASP_RX_CTRL(str, m, offset) \ + STAT_BCMASP_OFFSET(str, m, BCMASP_STAT_RX_CTRL, offset) +#define STAT_BCMASP_SOFT_MIB(m) \ + STAT_BCMASP_MIB(__stringify(m), mib.m, BCMASP_STAT_SOFT) + +/* There is a 0x10 gap in hardware between the end of RX and beginning of TX + * stats and then between the end of TX stats and the beginning of the RX RUNT. + * The software structure already accounts for sizeof(u32) between members so + * need to add 0xc to offset correctly into the hardware register. + */ +#define BCMASP_STAT_OFFSET 0xc + +/* Hardware counters must be kept in sync because the order/offset + * is important here (order in structure declaration = order in hardware) + */ +static const struct bcmasp_stats bcmasp_gstrings_stats[] = { + /* general stats */ + STAT_NETDEV(rx_packets), + STAT_NETDEV(tx_packets), + STAT_NETDEV(rx_bytes), + STAT_NETDEV(tx_bytes), + STAT_NETDEV(rx_errors), + STAT_NETDEV(tx_errors), + STAT_NETDEV(rx_dropped), + STAT_NETDEV(tx_dropped), + STAT_NETDEV(multicast), + /* UniMAC RSV counters */ + STAT_BCMASP_MIB_RX("rx_64_octets", mib.rx.pkt_cnt.cnt_64), + STAT_BCMASP_MIB_RX("rx_65_127_oct", mib.rx.pkt_cnt.cnt_127), + STAT_BCMASP_MIB_RX("rx_128_255_oct", mib.rx.pkt_cnt.cnt_255), + STAT_BCMASP_MIB_RX("rx_256_511_oct", mib.rx.pkt_cnt.cnt_511), + STAT_BCMASP_MIB_RX("rx_512_1023_oct", mib.rx.pkt_cnt.cnt_1023), + STAT_BCMASP_MIB_RX("rx_1024_1518_oct", mib.rx.pkt_cnt.cnt_1518), + STAT_BCMASP_MIB_RX("rx_vlan_1519_1522_oct", mib.rx.pkt_cnt.cnt_mgv), + STAT_BCMASP_MIB_RX("rx_1522_2047_oct", mib.rx.pkt_cnt.cnt_2047), + STAT_BCMASP_MIB_RX("rx_2048_4095_oct", mib.rx.pkt_cnt.cnt_4095), + STAT_BCMASP_MIB_RX("rx_4096_9216_oct", mib.rx.pkt_cnt.cnt_9216), + STAT_BCMASP_MIB_RX("rx_pkts", mib.rx.pkt), + STAT_BCMASP_MIB_RX("rx_bytes", mib.rx.bytes), + STAT_BCMASP_MIB_RX("rx_multicast", mib.rx.mca), + STAT_BCMASP_MIB_RX("rx_broadcast", mib.rx.bca), + STAT_BCMASP_MIB_RX("rx_fcs", mib.rx.fcs), + STAT_BCMASP_MIB_RX("rx_control", mib.rx.cf), + STAT_BCMASP_MIB_RX("rx_pause", mib.rx.pf), + STAT_BCMASP_MIB_RX("rx_unknown", mib.rx.uo), + STAT_BCMASP_MIB_RX("rx_align", mib.rx.aln), + STAT_BCMASP_MIB_RX("rx_outrange", mib.rx.flr), + STAT_BCMASP_MIB_RX("rx_code", mib.rx.cde), + STAT_BCMASP_MIB_RX("rx_carrier", mib.rx.fcr), + STAT_BCMASP_MIB_RX("rx_oversize", mib.rx.ovr), + STAT_BCMASP_MIB_RX("rx_jabber", mib.rx.jbr), + STAT_BCMASP_MIB_RX("rx_mtu_err", mib.rx.mtue), + STAT_BCMASP_MIB_RX("rx_good_pkts", mib.rx.pok), + STAT_BCMASP_MIB_RX("rx_unicast", mib.rx.uc), + STAT_BCMASP_MIB_RX("rx_ppp", mib.rx.ppp), + STAT_BCMASP_MIB_RX("rx_crc", mib.rx.rcrc), + /* UniMAC TSV counters */ + STAT_BCMASP_MIB_TX("tx_64_octets", mib.tx.pkt_cnt.cnt_64), + STAT_BCMASP_MIB_TX("tx_65_127_oct", mib.tx.pkt_cnt.cnt_127), + STAT_BCMASP_MIB_TX("tx_128_255_oct", mib.tx.pkt_cnt.cnt_255), + STAT_BCMASP_MIB_TX("tx_256_511_oct", mib.tx.pkt_cnt.cnt_511), + STAT_BCMASP_MIB_TX("tx_512_1023_oct", mib.tx.pkt_cnt.cnt_1023), + STAT_BCMASP_MIB_TX("tx_1024_1518_oct", mib.tx.pkt_cnt.cnt_1518), + STAT_BCMASP_MIB_TX("tx_vlan_1519_1522_oct", mib.tx.pkt_cnt.cnt_mgv), + STAT_BCMASP_MIB_TX("tx_1522_2047_oct", mib.tx.pkt_cnt.cnt_2047), + STAT_BCMASP_MIB_TX("tx_2048_4095_oct", mib.tx.pkt_cnt.cnt_4095), + STAT_BCMASP_MIB_TX("tx_4096_9216_oct", mib.tx.pkt_cnt.cnt_9216), + STAT_BCMASP_MIB_TX("tx_pkts", mib.tx.pkts), + STAT_BCMASP_MIB_TX("tx_multicast", mib.tx.mca), + STAT_BCMASP_MIB_TX("tx_broadcast", mib.tx.bca), + STAT_BCMASP_MIB_TX("tx_pause", mib.tx.pf), + STAT_BCMASP_MIB_TX("tx_control", mib.tx.cf), + STAT_BCMASP_MIB_TX("tx_fcs_err", mib.tx.fcs), + STAT_BCMASP_MIB_TX("tx_oversize", mib.tx.ovr), + STAT_BCMASP_MIB_TX("tx_defer", mib.tx.drf), + STAT_BCMASP_MIB_TX("tx_excess_defer", mib.tx.edf), + STAT_BCMASP_MIB_TX("tx_single_col", mib.tx.scl), + STAT_BCMASP_MIB_TX("tx_multi_col", mib.tx.mcl), + STAT_BCMASP_MIB_TX("tx_late_col", mib.tx.lcl), + STAT_BCMASP_MIB_TX("tx_excess_col", mib.tx.ecl), + STAT_BCMASP_MIB_TX("tx_frags", mib.tx.frg), + STAT_BCMASP_MIB_TX("tx_total_col", mib.tx.ncl), + STAT_BCMASP_MIB_TX("tx_jabber", mib.tx.jbr), + STAT_BCMASP_MIB_TX("tx_bytes", mib.tx.bytes), + STAT_BCMASP_MIB_TX("tx_good_pkts", mib.tx.pok), + STAT_BCMASP_MIB_TX("tx_unicast", mib.tx.uc), + /* UniMAC RUNT counters */ + STAT_BCMASP_RUNT("rx_runt_pkts", mib.rx_runt_cnt), + STAT_BCMASP_RUNT("rx_runt_valid_fcs", mib.rx_runt_fcs), + STAT_BCMASP_RUNT("rx_runt_inval_fcs_align", mib.rx_runt_fcs_align), + STAT_BCMASP_RUNT("rx_runt_bytes", mib.rx_runt_bytes), + /* EDPKT counters */ + STAT_BCMASP_RX_EDPKT("edpkt_ts", mib.edpkt_ts, + ASP_EDPKT_RX_TS_COUNTER), + STAT_BCMASP_RX_EDPKT("edpkt_rx_pkt_cnt", mib.edpkt_rx_pkt_cnt, + ASP_EDPKT_RX_PKT_CNT), + STAT_BCMASP_RX_EDPKT("edpkt_hdr_ext_cnt", mib.edpkt_hdr_ext_cnt, + ASP_EDPKT_HDR_EXTR_CNT), + STAT_BCMASP_RX_EDPKT("edpkt_hdr_out_cnt", mib.edpkt_hdr_out_cnt, + ASP_EDPKT_HDR_OUT_CNT), + /* ASP RX control */ + STAT_BCMASP_RX_CTRL("umac_frm_cnt", mib.umac_frm_cnt, + ASP_RX_CTRL_UMAC_0_FRAME_COUNT), + STAT_BCMASP_RX_CTRL("fb_frm_cnt", mib.fb_frm_cnt, + ASP_RX_CTRL_FB_0_FRAME_COUNT), + STAT_BCMASP_RX_CTRL("fb_out_frm_cnt", mib.fb_out_frm_cnt, + ASP_RX_CTRL_FB_OUT_FRAME_COUNT), + STAT_BCMASP_RX_CTRL("fb_filt_out_frm_cnt", mib.fb_filt_out_frm_cnt, + ASP_RX_CTRL_FB_FILT_OUT_FRAME_COUNT), + STAT_BCMASP_RX_CTRL("fb_rx_fifo_depth", mib.fb_rx_fifo_depth, + ASP_RX_CTRL_FB_RX_FIFO_DEPTH), + /* Software maintained statistics */ + STAT_BCMASP_SOFT_MIB(alloc_rx_buff_failed), + STAT_BCMASP_SOFT_MIB(alloc_rx_skb_failed), + STAT_BCMASP_SOFT_MIB(rx_dma_failed), + STAT_BCMASP_SOFT_MIB(tx_dma_failed), + STAT_BCMASP_SOFT_MIB(mc_filters_full_cnt), + STAT_BCMASP_SOFT_MIB(uc_filters_full_cnt), + STAT_BCMASP_SOFT_MIB(filters_combine_cnt), + STAT_BCMASP_SOFT_MIB(promisc_filters_cnt), + STAT_BCMASP_SOFT_MIB(tx_realloc_offload_failed), + STAT_BCMASP_SOFT_MIB(tx_realloc_offload), + +}; + +#define BCMASP_STATS_LEN ARRAY_SIZE(bcmasp_gstrings_stats) + +static u16 bcmasp_stat_fixup_offset(struct bcmasp_intf *intf, + const struct bcmasp_stats *s) +{ + struct bcmasp_priv *priv = intf->parent; + + if (!strcmp("fb_out_frm_cnt", s->stat_string)) + return priv->hw_info->rx_ctrl_fb_out_frame_count; + + if (!strcmp("fb_filt_out_frm_cnt", s->stat_string)) + return priv->hw_info->rx_ctrl_fb_filt_out_frame_count; + + if (!strcmp("fb_rx_fifo_depth", s->stat_string)) + return priv->hw_info->rx_ctrl_fb_rx_fifo_depth; + + return s->reg_offset; +} + +static int bcmasp_get_sset_count(struct net_device *dev, int string_set) +{ + switch (string_set) { + case ETH_SS_STATS: + return BCMASP_STATS_LEN; + default: + return -EOPNOTSUPP; + } +} + +static void bcmasp_get_strings(struct net_device *dev, u32 stringset, + u8 *data) +{ + int i; + + switch (stringset) { + case ETH_SS_STATS: + for (i = 0; i < BCMASP_STATS_LEN; i++) { + memcpy(data + i * ETH_GSTRING_LEN, + bcmasp_gstrings_stats[i].stat_string, + ETH_GSTRING_LEN); + } + break; + default: + return; + } +} + +static void bcmasp_update_mib_counters(struct bcmasp_intf *priv) +{ + int i, j = 0; + + for (i = 0; i < BCMASP_STATS_LEN; i++) { + const struct bcmasp_stats *s; + u16 offset = 0; + u32 val = 0; + char *p; + + s = &bcmasp_gstrings_stats[i]; + switch (s->type) { + case BCMASP_STAT_NETDEV: + case BCMASP_STAT_SOFT: + continue; + case BCMASP_STAT_RUNT: + offset += BCMASP_STAT_OFFSET; + fallthrough; + case BCMASP_STAT_MIB_TX: + offset += BCMASP_STAT_OFFSET; + fallthrough; + case BCMASP_STAT_MIB_RX: + val = umac_rl(priv, UMC_MIB_START + j + offset); + offset = 0; /* Reset Offset */ + break; + case BCMASP_STAT_RX_EDPKT: + val = rx_edpkt_core_rl(priv->parent, s->reg_offset); + break; + case BCMASP_STAT_RX_CTRL: + offset = bcmasp_stat_fixup_offset(priv, s); + if (offset != ASP_RX_CTRL_FB_FILT_OUT_FRAME_COUNT) + offset += sizeof(u32) * priv->port; + val = rx_ctrl_core_rl(priv->parent, offset); + break; + } + + j += s->stat_sizeof; + p = (char *)priv + s->stat_offset; + put_unaligned(val, (u32 *)p); + } +} + +static void bcmasp_get_ethtool_stats(struct net_device *dev, + struct ethtool_stats *stats, + u64 *data) +{ + struct bcmasp_intf *priv = netdev_priv(dev); + int i; + + if (netif_running(dev)) + bcmasp_update_mib_counters(priv); + + dev->netdev_ops->ndo_get_stats(dev); + + for (i = 0; i < BCMASP_STATS_LEN; i++) { + const struct bcmasp_stats *s; + char *p; + + s = &bcmasp_gstrings_stats[i]; + if (s->type == BCMASP_STAT_NETDEV) + p = (char *)&dev->stats; + else + p = (char *)priv; + p += s->stat_offset; + if (sizeof(unsigned long) != sizeof(u32) && + s->stat_sizeof == sizeof(unsigned long)) + data[i] = *(unsigned long *)p; + else + data[i] = *(u32 *)p; + } +} + +static void bcmasp_get_drvinfo(struct net_device *dev, + struct ethtool_drvinfo *info) +{ + strscpy(info->driver, "bcmasp", sizeof(info->driver)); + strscpy(info->bus_info, dev_name(dev->dev.parent), + sizeof(info->bus_info)); +} + +static u32 bcmasp_get_msglevel(struct net_device *dev) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + + return intf->msg_enable; +} + +static void bcmasp_set_msglevel(struct net_device *dev, u32 level) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + + intf->msg_enable = level; +} + +#define BCMASP_SUPPORTED_WAKE (WAKE_MAGIC | WAKE_MAGICSECURE | WAKE_FILTER) +static void bcmasp_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + + wol->supported = BCMASP_SUPPORTED_WAKE; + wol->wolopts = intf->wolopts; + memset(wol->sopass, 0, sizeof(wol->sopass)); + + if (wol->wolopts & WAKE_MAGICSECURE) + memcpy(wol->sopass, intf->sopass, sizeof(intf->sopass)); +} + +static int bcmasp_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + struct bcmasp_priv *priv = intf->parent; + struct device *kdev = &priv->pdev->dev; + + if (!device_can_wakeup(kdev)) + return -EOPNOTSUPP; + + if (wol->wolopts & ~BCMASP_SUPPORTED_WAKE) + return -EOPNOTSUPP; + + /* Interface Specific */ + intf->wolopts = wol->wolopts; + if (intf->wolopts & WAKE_MAGICSECURE) + memcpy(intf->sopass, wol->sopass, sizeof(wol->sopass)); + + mutex_lock(&priv->wol_lock); + priv->enable_wol(intf, !!intf->wolopts); + mutex_unlock(&priv->wol_lock); + + return 0; +} + +static int bcmasp_flow_insert(struct net_device *dev, struct ethtool_rxnfc *cmd) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + struct bcmasp_net_filter *nfilter; + u32 loc = cmd->fs.location; + bool wake = false; + + if (cmd->fs.ring_cookie == RX_CLS_FLOW_WAKE) + wake = true; + + /* Currently only supports WAKE filters */ + if (!wake) + return -EOPNOTSUPP; + + switch (cmd->fs.flow_type & ~(FLOW_EXT | FLOW_MAC_EXT)) { + case ETHER_FLOW: + case IP_USER_FLOW: + case TCP_V4_FLOW: + case UDP_V4_FLOW: + case TCP_V6_FLOW: + case UDP_V6_FLOW: + break; + default: + return -EOPNOTSUPP; + } + + /* Check if filter already exists */ + if (bcmasp_netfilt_check_dup(intf, &cmd->fs)) + return -EINVAL; + + nfilter = bcmasp_netfilt_get_init(intf, loc, wake, true); + if (IS_ERR(nfilter)) + return PTR_ERR(nfilter); + + /* Return the location where we did insert the filter */ + cmd->fs.location = nfilter->hw_index; + memcpy(&nfilter->fs, &cmd->fs, sizeof(struct ethtool_rx_flow_spec)); + + /* Since we only support wake filters, defer register programming till + * suspend time. + */ + return 0; +} + +static int bcmasp_flow_delete(struct net_device *dev, struct ethtool_rxnfc *cmd) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + struct bcmasp_net_filter *nfilter; + + nfilter = bcmasp_netfilt_get_init(intf, cmd->fs.location, false, false); + if (IS_ERR(nfilter)) + return PTR_ERR(nfilter); + + bcmasp_netfilt_release(intf, nfilter); + + return 0; +} + +static int bcmasp_flow_get(struct bcmasp_intf *intf, struct ethtool_rxnfc *cmd) +{ + struct bcmasp_net_filter *nfilter; + + nfilter = bcmasp_netfilt_get_init(intf, cmd->fs.location, false, false); + if (IS_ERR(nfilter)) + return PTR_ERR(nfilter); + + memcpy(&cmd->fs, &nfilter->fs, sizeof(nfilter->fs)); + + cmd->data = NUM_NET_FILTERS; + + return 0; +} + +static int bcmasp_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + int ret = -EOPNOTSUPP; + + mutex_lock(&intf->parent->net_lock); + + switch (cmd->cmd) { + case ETHTOOL_SRXCLSRLINS: + ret = bcmasp_flow_insert(dev, cmd); + break; + case ETHTOOL_SRXCLSRLDEL: + ret = bcmasp_flow_delete(dev, cmd); + break; + default: + break; + } + + mutex_unlock(&intf->parent->net_lock); + + return ret; +} + +static int bcmasp_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd, + u32 *rule_locs) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + int err = 0; + + mutex_lock(&intf->parent->net_lock); + + switch (cmd->cmd) { + case ETHTOOL_GRXCLSRLCNT: + cmd->rule_cnt = bcmasp_netfilt_get_active(intf); + /* We support specifying rule locations */ + cmd->data |= RX_CLS_LOC_SPECIAL; + break; + case ETHTOOL_GRXCLSRULE: + err = bcmasp_flow_get(intf, cmd); + break; + case ETHTOOL_GRXCLSRLALL: + bcmasp_netfilt_get_all_active(intf, rule_locs, &cmd->rule_cnt); + cmd->data = NUM_NET_FILTERS; + break; + default: + err = -EOPNOTSUPP; + break; + } + + mutex_unlock(&intf->parent->net_lock); + + return err; +} + +void bcmasp_eee_enable_set(struct bcmasp_intf *intf, bool enable) +{ + u32 reg; + + reg = umac_rl(intf, UMC_EEE_CTRL); + if (enable) + reg |= EEE_EN; + else + reg &= ~EEE_EN; + umac_wl(intf, reg, UMC_EEE_CTRL); + + intf->eee.eee_enabled = enable; + intf->eee.eee_active = enable; +} + +static int bcmasp_get_eee(struct net_device *dev, struct ethtool_eee *e) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + struct ethtool_eee *p = &intf->eee; + + if (!dev->phydev) + return -ENODEV; + + e->eee_enabled = p->eee_enabled; + e->eee_active = p->eee_active; + e->tx_lpi_enabled = p->tx_lpi_enabled; + e->tx_lpi_timer = umac_rl(intf, UMC_EEE_LPI_TIMER); + + return phy_ethtool_get_eee(dev->phydev, e); +} + +static int bcmasp_set_eee(struct net_device *dev, struct ethtool_eee *e) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + struct ethtool_eee *p = &intf->eee; + int ret; + + if (!dev->phydev) + return -ENODEV; + + if (!p->eee_enabled) { + bcmasp_eee_enable_set(intf, false); + } else { + ret = phy_init_eee(dev->phydev, 0); + if (ret) { + netif_err(intf, hw, dev, + "EEE initialization failed: %d\n", ret); + return ret; + } + + umac_wl(intf, e->tx_lpi_timer, UMC_EEE_LPI_TIMER); + intf->eee.eee_active = ret >= 0; + intf->eee.tx_lpi_enabled = e->tx_lpi_enabled; + bcmasp_eee_enable_set(intf, true); + } + + return phy_ethtool_set_eee(dev->phydev, e); +} + +const struct ethtool_ops bcmasp_ethtool_ops = { + .get_drvinfo = bcmasp_get_drvinfo, + .get_wol = bcmasp_get_wol, + .set_wol = bcmasp_set_wol, + .get_link = ethtool_op_get_link, + .get_strings = bcmasp_get_strings, + .get_ethtool_stats = bcmasp_get_ethtool_stats, + .get_sset_count = bcmasp_get_sset_count, + .get_link_ksettings = phy_ethtool_get_link_ksettings, + .set_link_ksettings = phy_ethtool_set_link_ksettings, + .get_msglevel = bcmasp_get_msglevel, + .set_msglevel = bcmasp_set_msglevel, + .nway_reset = phy_ethtool_nway_reset, + .get_rxnfc = bcmasp_get_rxnfc, + .set_rxnfc = bcmasp_set_rxnfc, + .set_eee = bcmasp_set_eee, + .get_eee = bcmasp_get_eee, +}; diff --git a/drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c b/drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c new file mode 100644 index 000000000000..bd16378ad9e9 --- /dev/null +++ b/drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c @@ -0,0 +1,1429 @@ +// SPDX-License-Identifier: GPL-2.0 +#define pr_fmt(fmt) "bcmasp_intf: " fmt + +#include <asm/byteorder.h> +#include <linux/brcmphy.h> +#include <linux/clk.h> +#include <linux/delay.h> +#include <linux/etherdevice.h> +#include <linux/netdevice.h> +#include <linux/of_net.h> +#include <linux/of_mdio.h> +#include <linux/phy.h> +#include <linux/phy_fixed.h> +#include <linux/ptp_classify.h> +#include <linux/platform_device.h> +#include <net/ip.h> +#include <net/ipv6.h> + +#include "bcmasp.h" +#include "bcmasp_intf_defs.h" + +static inline int incr_ring(int index, int ring_count) +{ + index++; + if (index == ring_count) + return 0; + + return index; +} + +/* Points to last byte of descriptor */ +static inline dma_addr_t incr_last_byte(dma_addr_t addr, dma_addr_t beg, + int ring_count) +{ + dma_addr_t end = beg + (ring_count * DESC_SIZE); + + addr += DESC_SIZE; + if (addr > end) + return beg + DESC_SIZE - 1; + + return addr; +} + +/* Points to first byte of descriptor */ +static inline dma_addr_t incr_first_byte(dma_addr_t addr, dma_addr_t beg, + int ring_count) +{ + dma_addr_t end = beg + (ring_count * DESC_SIZE); + + addr += DESC_SIZE; + if (addr >= end) + return beg; + + return addr; +} + +static inline void bcmasp_enable_tx(struct bcmasp_intf *intf, int en) +{ + if (en) { + tx_spb_ctrl_wl(intf, TX_SPB_CTRL_ENABLE_EN, TX_SPB_CTRL_ENABLE); + tx_epkt_core_wl(intf, (TX_EPKT_C_CFG_MISC_EN | + TX_EPKT_C_CFG_MISC_PT | + (intf->port << TX_EPKT_C_CFG_MISC_PS_SHIFT)), + TX_EPKT_C_CFG_MISC); + } else { + tx_spb_ctrl_wl(intf, 0x0, TX_SPB_CTRL_ENABLE); + tx_epkt_core_wl(intf, 0x0, TX_EPKT_C_CFG_MISC); + } +} + +static inline void bcmasp_enable_rx(struct bcmasp_intf *intf, int en) +{ + if (en) + rx_edpkt_cfg_wl(intf, RX_EDPKT_CFG_ENABLE_EN, + RX_EDPKT_CFG_ENABLE); + else + rx_edpkt_cfg_wl(intf, 0x0, RX_EDPKT_CFG_ENABLE); +} + +static void bcmasp_set_rx_mode(struct net_device *dev) +{ + unsigned char mask[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + struct bcmasp_intf *intf = netdev_priv(dev); + struct netdev_hw_addr *ha; + int ret; + + spin_lock_bh(&intf->parent->mda_lock); + + bcmasp_disable_all_filters(intf); + + if (dev->flags & IFF_PROMISC) + goto set_promisc; + + bcmasp_set_promisc(intf, 0); + + bcmasp_set_broad(intf, 1); + + bcmasp_set_oaddr(intf, dev->dev_addr, 1); + + if (dev->flags & IFF_ALLMULTI) { + bcmasp_set_allmulti(intf, 1); + } else { + bcmasp_set_allmulti(intf, 0); + + netdev_for_each_mc_addr(ha, dev) { + ret = bcmasp_set_en_mda_filter(intf, ha->addr, mask); + if (ret) { + intf->mib.mc_filters_full_cnt++; + goto set_promisc; + } + } + } + + netdev_for_each_uc_addr(ha, dev) { + ret = bcmasp_set_en_mda_filter(intf, ha->addr, mask); + if (ret) { + intf->mib.uc_filters_full_cnt++; + goto set_promisc; + } + } + + spin_unlock_bh(&intf->parent->mda_lock); + return; + +set_promisc: + bcmasp_set_promisc(intf, 1); + intf->mib.promisc_filters_cnt++; + + /* disable all filters used by this port */ + bcmasp_disable_all_filters(intf); + + spin_unlock_bh(&intf->parent->mda_lock); +} + +static void bcmasp_clean_txcb(struct bcmasp_intf *intf, int index) +{ + struct bcmasp_tx_cb *txcb = &intf->tx_cbs[index]; + + txcb->skb = NULL; + dma_unmap_addr_set(txcb, dma_addr, 0); + dma_unmap_len_set(txcb, dma_len, 0); + txcb->last = false; +} + +static int tx_spb_ring_full(struct bcmasp_intf *intf, int cnt) +{ + int next_index, i; + + /* Check if we have enough room for cnt descriptors */ + for (i = 0; i < cnt; i++) { + next_index = incr_ring(intf->tx_spb_index, DESC_RING_COUNT); + if (next_index == intf->tx_spb_clean_index) + return 1; + } + + return 0; +} + +static struct sk_buff *bcmasp_csum_offload(struct net_device *dev, + struct sk_buff *skb, + bool *csum_hw) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + u32 header = 0, header2 = 0, epkt = 0; + struct bcmasp_pkt_offload *offload; + unsigned int header_cnt = 0; + struct sk_buff *new_skb; + u8 ip_proto; + u16 ip_ver; + + if (skb->ip_summed != CHECKSUM_PARTIAL) + return skb; + + if (unlikely(skb_headroom(skb) < sizeof(*offload))) { + new_skb = skb_realloc_headroom(skb, sizeof(*offload)); + if (!new_skb) { + intf->mib.tx_realloc_offload_failed++; + goto help; + } + + dev_consume_skb_any(skb); + skb = new_skb; + intf->mib.tx_realloc_offload++; + } + + ip_ver = htons(skb->protocol); + switch (ip_ver) { + case ETH_P_IP: + header |= PKT_OFFLOAD_HDR_SIZE_2((ip_hdrlen(skb) >> 8) & 0xf); + header2 |= PKT_OFFLOAD_HDR2_SIZE_2(ip_hdrlen(skb) & 0xff); + epkt |= PKT_OFFLOAD_EPKT_IP(0) | PKT_OFFLOAD_EPKT_CSUM_L2; + ip_proto = ip_hdr(skb)->protocol; + header_cnt += 2; + break; + case ETH_P_IPV6: + header |= PKT_OFFLOAD_HDR_SIZE_2((IP6_HLEN >> 8) & 0xf); + header2 |= PKT_OFFLOAD_HDR2_SIZE_2(IP6_HLEN & 0xff); + epkt |= PKT_OFFLOAD_EPKT_IP(1) | PKT_OFFLOAD_EPKT_CSUM_L2; + ip_proto = ipv6_hdr(skb)->nexthdr; + header_cnt += 2; + break; + default: + goto help; + } + + switch (ip_proto) { + case IPPROTO_TCP: + header2 |= PKT_OFFLOAD_HDR2_SIZE_3(tcp_hdrlen(skb)); + epkt |= PKT_OFFLOAD_EPKT_TP(0) | PKT_OFFLOAD_EPKT_CSUM_L3; + header_cnt++; + break; + case IPPROTO_UDP: + header2 |= PKT_OFFLOAD_HDR2_SIZE_3(UDP_HLEN); + epkt |= PKT_OFFLOAD_EPKT_TP(1) | PKT_OFFLOAD_EPKT_CSUM_L3; + header_cnt++; + break; + default: + goto help; + } + + offload = (struct bcmasp_pkt_offload *)skb_push(skb, sizeof(*offload)); + + header |= PKT_OFFLOAD_HDR_OP | PKT_OFFLOAD_HDR_COUNT(header_cnt) | + PKT_OFFLOAD_HDR_SIZE_1(ETH_HLEN); + epkt |= PKT_OFFLOAD_EPKT_OP; + + offload->nop = htonl(PKT_OFFLOAD_NOP); + offload->header = htonl(header); + offload->header2 = htonl(header2); + offload->epkt = htonl(epkt); + offload->end = htonl(PKT_OFFLOAD_END_OP); + *csum_hw = true; + + return skb; + +help: + skb_checksum_help(skb); + + return skb; +} + +static inline unsigned long bcmasp_rx_edpkt_dma_rq(struct bcmasp_intf *intf) +{ + return rx_edpkt_dma_rq(intf, RX_EDPKT_DMA_VALID); +} + +static inline void bcmasp_rx_edpkt_cfg_wq(struct bcmasp_intf *intf, + dma_addr_t addr) +{ + rx_edpkt_cfg_wq(intf, addr, RX_EDPKT_RING_BUFFER_READ); +} + +static inline void bcmasp_rx_edpkt_dma_wq(struct bcmasp_intf *intf, + dma_addr_t addr) +{ + rx_edpkt_dma_wq(intf, addr, RX_EDPKT_DMA_READ); +} + +static inline unsigned long bcmasp_tx_spb_dma_rq(struct bcmasp_intf *intf) +{ + return tx_spb_dma_rq(intf, TX_SPB_DMA_READ); +} + +static inline void bcmasp_tx_spb_dma_wq(struct bcmasp_intf *intf, + dma_addr_t addr) +{ + tx_spb_dma_wq(intf, addr, TX_SPB_DMA_VALID); +} + +static const struct bcmasp_intf_ops bcmasp_intf_ops = { + .rx_desc_read = bcmasp_rx_edpkt_dma_rq, + .rx_buffer_write = bcmasp_rx_edpkt_cfg_wq, + .rx_desc_write = bcmasp_rx_edpkt_dma_wq, + .tx_read = bcmasp_tx_spb_dma_rq, + .tx_write = bcmasp_tx_spb_dma_wq, +}; + +static netdev_tx_t bcmasp_xmit(struct sk_buff *skb, struct net_device *dev) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + struct device *kdev = &intf->parent->pdev->dev; + int spb_index, nr_frags, ret, i, j; + unsigned int total_bytes, size; + struct bcmasp_tx_cb *txcb; + dma_addr_t mapping, valid; + struct bcmasp_desc *desc; + bool csum_hw = false; + skb_frag_t *frag; + + spin_lock(&intf->tx_lock); + + nr_frags = skb_shinfo(skb)->nr_frags; + + if (tx_spb_ring_full(intf, nr_frags + 1)) { + netif_stop_queue(dev); + netdev_err(dev, "Tx Ring Full!\n"); + ret = NETDEV_TX_BUSY; + goto out; + } + + /* Save skb len before adding csum offload header */ + total_bytes = skb->len; + skb = bcmasp_csum_offload(dev, skb, &csum_hw); + if (!skb) { + ret = NETDEV_TX_OK; + goto out; + } + + spb_index = intf->tx_spb_index; + valid = intf->tx_spb_dma_valid; + for (i = 0; i <= nr_frags; i++) { + if (!i) { + size = skb_headlen(skb); + if (!nr_frags && size < (ETH_ZLEN + ETH_FCS_LEN)) { + if (skb_put_padto(skb, ETH_ZLEN + ETH_FCS_LEN)) { + ret = NETDEV_TX_OK; + goto out; + } + size = skb->len; + } + mapping = dma_map_single(kdev, skb->data, size, + DMA_TO_DEVICE); + } else { + frag = &skb_shinfo(skb)->frags[i - 1]; + size = skb_frag_size(frag); + mapping = skb_frag_dma_map(kdev, frag, 0, size, + DMA_TO_DEVICE); + } + + if (dma_mapping_error(kdev, mapping)) { + ret = NETDEV_TX_OK; + intf->mib.tx_dma_failed++; + goto out_unmap_frags; + } + + txcb = &intf->tx_cbs[spb_index]; + desc = &intf->tx_spb_cpu[spb_index]; + memset(desc, 0, sizeof(*desc)); + txcb->skb = skb; + txcb->bytes_sent = total_bytes; + dma_unmap_addr_set(txcb, dma_addr, mapping); + dma_unmap_len_set(txcb, dma_len, size); + if (!i) { + desc->flags |= DESC_SOF; + if (csum_hw) + desc->flags |= DESC_EPKT_CMD; + } + + if (i == nr_frags) { + desc->flags |= DESC_EOF; + txcb->last = true; + } + + desc->buf = mapping; + desc->size = size; + desc->flags |= DESC_INT_EN; + + netif_dbg(intf, tx_queued, dev, + "%s dma_buf=%pad dma_len=0x%x flags=0x%x index=0x%x\n", + __func__, &mapping, desc->size, desc->flags, + spb_index); + + spb_index = incr_ring(spb_index, DESC_RING_COUNT); + valid = incr_last_byte(valid, intf->tx_spb_dma_addr, + DESC_RING_COUNT); + } + + /* Ensure all descriptors have been written to DRAM for the + * hardware to see up-to-date contents. + */ + wmb(); + + intf->tx_spb_index = spb_index; + intf->tx_spb_dma_valid = valid; + bcmasp_intf_tx_write(intf, intf->tx_spb_dma_valid); + + if (tx_spb_ring_full(intf, MAX_SKB_FRAGS + 1)) + netif_stop_queue(dev); + + spin_unlock(&intf->tx_lock); + return NETDEV_TX_OK; + +out_unmap_frags: + spb_index = intf->tx_spb_index; + for (j = 0; j < i; j++) { + bcmasp_clean_txcb(intf, spb_index); + spb_index = incr_ring(spb_index, DESC_RING_COUNT); + } +out: + spin_unlock(&intf->tx_lock); + return ret; +} + +static void bcmasp_netif_start(struct net_device *dev) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + + bcmasp_set_rx_mode(dev); + napi_enable(&intf->tx_napi); + napi_enable(&intf->rx_napi); + + bcmasp_enable_rx_irq(intf, 1); + bcmasp_enable_tx_irq(intf, 1); + + phy_start(dev->phydev); +} + +static inline void umac_reset(struct bcmasp_intf *intf) +{ + umac_wl(intf, 0x0, UMC_CMD); + umac_wl(intf, UMC_CMD_SW_RESET, UMC_CMD); + usleep_range(10, 100); + umac_wl(intf, 0x0, UMC_CMD); +} + +static void umac_set_hw_addr(struct bcmasp_intf *intf, + const unsigned char *addr) +{ + u32 mac0 = (addr[0] << 24) | (addr[1] << 16) | (addr[2] << 8) | + addr[3]; + u32 mac1 = (addr[4] << 8) | addr[5]; + + umac_wl(intf, mac0, UMC_MAC0); + umac_wl(intf, mac1, UMC_MAC1); +} + +static inline void umac_enable_set(struct bcmasp_intf *intf, + u32 mask, unsigned int enable) +{ + u32 reg; + + reg = umac_rl(intf, UMC_CMD); + if (enable) + reg |= mask; + else + reg &= ~mask; + umac_wl(intf, reg, UMC_CMD); + + /* UniMAC stops on a packet boundary, wait for a full-sized packet + * to be processed (1 msec). + */ + if (enable == 0) + usleep_range(1000, 2000); +} + +static inline void umac_init(struct bcmasp_intf *intf) +{ + umac_wl(intf, 0x800, UMC_FRM_LEN); + umac_wl(intf, 0xffff, UMC_PAUSE_CNTRL); + umac_wl(intf, 0x800, UMC_RX_MAX_PKT_SZ); + umac_enable_set(intf, UMC_CMD_PROMISC, 1); +} + +static int bcmasp_tx_poll(struct napi_struct *napi, int budget) +{ + struct bcmasp_intf *intf = + container_of(napi, struct bcmasp_intf, tx_napi); + struct device *kdev = &intf->parent->pdev->dev; + unsigned long read, released = 0; + struct bcmasp_tx_cb *txcb; + struct bcmasp_desc *desc; + dma_addr_t mapping; + + read = bcmasp_intf_tx_read(intf); + while (intf->tx_spb_dma_read != read) { + txcb = &intf->tx_cbs[intf->tx_spb_clean_index]; + mapping = dma_unmap_addr(txcb, dma_addr); + + dma_unmap_single(kdev, mapping, + dma_unmap_len(txcb, dma_len), + DMA_TO_DEVICE); + + if (txcb->last) { + dev_consume_skb_any(txcb->skb); + intf->ndev->stats.tx_packets++; + intf->ndev->stats.tx_bytes += txcb->bytes_sent; + } + + desc = &intf->tx_spb_cpu[intf->tx_spb_clean_index]; + + netif_dbg(intf, tx_done, intf->ndev, + "%s dma_buf=%pad dma_len=0x%x flags=0x%x c_index=0x%x\n", + __func__, &mapping, desc->size, desc->flags, + intf->tx_spb_clean_index); + + bcmasp_clean_txcb(intf, intf->tx_spb_clean_index); + released++; + + intf->tx_spb_clean_index = incr_ring(intf->tx_spb_clean_index, + DESC_RING_COUNT); + intf->tx_spb_dma_read = incr_first_byte(intf->tx_spb_dma_read, + intf->tx_spb_dma_addr, + DESC_RING_COUNT); + } + + /* Ensure all descriptors have been written to DRAM for the hardware + * to see updated contents. + */ + wmb(); + + napi_complete(&intf->tx_napi); + + bcmasp_enable_tx_irq(intf, 1); + + if (released) + netif_wake_queue(intf->ndev); + + return 0; +} + +static int bcmasp_rx_poll(struct napi_struct *napi, int budget) +{ + struct bcmasp_intf *intf = + container_of(napi, struct bcmasp_intf, rx_napi); + struct device *kdev = &intf->parent->pdev->dev; + unsigned long processed = 0; + struct bcmasp_desc *desc; + struct sk_buff *skb; + dma_addr_t valid; + void *data; + u64 flags; + u32 len; + + valid = bcmasp_intf_rx_desc_read(intf) + 1; + if (valid == intf->rx_edpkt_dma_addr + DESC_RING_SIZE) + valid = intf->rx_edpkt_dma_addr; + + while ((processed < budget) && (valid != intf->rx_edpkt_dma_read)) { + desc = &intf->rx_edpkt_cpu[intf->rx_edpkt_index]; + + /* Ensure that descriptor has been fully written to DRAM by + * hardware before reading by the CPU + */ + rmb(); + + /* Calculate virt addr by offsetting from physical addr */ + data = intf->rx_ring_cpu + + (DESC_ADDR(desc->buf) - intf->rx_ring_dma); + + flags = DESC_FLAGS(desc->buf); + if (unlikely(flags & (DESC_CRC_ERR | DESC_RX_SYM_ERR))) { + netif_err(intf, rx_status, intf->ndev, "flags=0x%llx\n", + flags); + + intf->ndev->stats.rx_errors++; + intf->ndev->stats.rx_dropped++; + goto next; + } + + dma_sync_single_for_cpu(kdev, DESC_ADDR(desc->buf), desc->size, + DMA_FROM_DEVICE); + + len = desc->size; + + skb = __netdev_alloc_skb(intf->ndev, len, + GFP_ATOMIC | __GFP_NOWARN); + if (!skb) { + intf->ndev->stats.rx_errors++; + intf->mib.alloc_rx_skb_failed++; + netif_warn(intf, rx_err, intf->ndev, + "SKB alloc failed\n"); + goto next; + } + + skb_put(skb, len); + memcpy(skb->data, data, len); + + skb_pull(skb, 2); + len -= 2; + if (likely(intf->crc_fwd)) { + skb_trim(skb, len - ETH_FCS_LEN); + len -= ETH_FCS_LEN; + } + + if ((intf->ndev->features & NETIF_F_RXCSUM) && + (desc->buf & DESC_CHKSUM)) + skb->ip_summed = CHECKSUM_UNNECESSARY; + + skb->protocol = eth_type_trans(skb, intf->ndev); + + napi_gro_receive(napi, skb); + + intf->ndev->stats.rx_packets++; + intf->ndev->stats.rx_bytes += len; + +next: + bcmasp_intf_rx_buffer_write(intf, (DESC_ADDR(desc->buf) + + desc->size)); + + processed++; + intf->rx_edpkt_dma_read = + incr_first_byte(intf->rx_edpkt_dma_read, + intf->rx_edpkt_dma_addr, + DESC_RING_COUNT); + intf->rx_edpkt_index = incr_ring(intf->rx_edpkt_index, + DESC_RING_COUNT); + } + + bcmasp_intf_rx_desc_write(intf, intf->rx_edpkt_dma_read); + + if (processed < budget) { + napi_complete_done(&intf->rx_napi, processed); + bcmasp_enable_rx_irq(intf, 1); + } + + return processed; +} + +static void bcmasp_adj_link(struct net_device *dev) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + struct phy_device *phydev = dev->phydev; + u32 cmd_bits = 0, reg; + int changed = 0; + + if (intf->old_link != phydev->link) { + changed = 1; + intf->old_link = phydev->link; + } + + if (intf->old_duplex != phydev->duplex) { + changed = 1; + intf->old_duplex = phydev->duplex; + } + + switch (phydev->speed) { + case SPEED_2500: + cmd_bits = UMC_CMD_SPEED_2500; + break; + case SPEED_1000: + cmd_bits = UMC_CMD_SPEED_1000; + break; + case SPEED_100: + cmd_bits = UMC_CMD_SPEED_100; + break; + case SPEED_10: + cmd_bits = UMC_CMD_SPEED_10; + break; + default: + break; + } + cmd_bits <<= UMC_CMD_SPEED_SHIFT; + + if (phydev->duplex == DUPLEX_HALF) + cmd_bits |= UMC_CMD_HD_EN; + + if (intf->old_pause != phydev->pause) { + changed = 1; + intf->old_pause = phydev->pause; + } + + if (!phydev->pause) + cmd_bits |= UMC_CMD_RX_PAUSE_IGNORE | UMC_CMD_TX_PAUSE_IGNORE; + + if (!changed) + return; + + if (phydev->link) { + reg = umac_rl(intf, UMC_CMD); + reg &= ~((UMC_CMD_SPEED_MASK << UMC_CMD_SPEED_SHIFT) | + UMC_CMD_HD_EN | UMC_CMD_RX_PAUSE_IGNORE | + UMC_CMD_TX_PAUSE_IGNORE); + reg |= cmd_bits; + umac_wl(intf, reg, UMC_CMD); + + intf->eee.eee_active = phy_init_eee(phydev, 0) >= 0; + bcmasp_eee_enable_set(intf, intf->eee.eee_active); + } + + reg = rgmii_rl(intf, RGMII_OOB_CNTRL); + if (phydev->link) + reg |= RGMII_LINK; + else + reg &= ~RGMII_LINK; + rgmii_wl(intf, reg, RGMII_OOB_CNTRL); + + if (changed) + phy_print_status(phydev); +} + +static int bcmasp_init_rx(struct bcmasp_intf *intf) +{ + struct device *kdev = &intf->parent->pdev->dev; + struct page *buffer_pg; + dma_addr_t dma; + void *p; + u32 reg; + int ret; + + intf->rx_buf_order = get_order(RING_BUFFER_SIZE); + buffer_pg = alloc_pages(GFP_KERNEL, intf->rx_buf_order); + + dma = dma_map_page(kdev, buffer_pg, 0, RING_BUFFER_SIZE, + DMA_FROM_DEVICE); + if (dma_mapping_error(kdev, dma)) { + __free_pages(buffer_pg, intf->rx_buf_order); + return -ENOMEM; + } + intf->rx_ring_cpu = page_to_virt(buffer_pg); + intf->rx_ring_dma = dma; + intf->rx_ring_dma_valid = intf->rx_ring_dma + RING_BUFFER_SIZE - 1; + + p = dma_alloc_coherent(kdev, DESC_RING_SIZE, &intf->rx_edpkt_dma_addr, + GFP_KERNEL); + if (!p) { + ret = -ENOMEM; + goto free_rx_ring; + } + intf->rx_edpkt_cpu = p; + + netif_napi_add(intf->ndev, &intf->rx_napi, bcmasp_rx_poll); + + intf->rx_edpkt_dma_read = intf->rx_edpkt_dma_addr; + intf->rx_edpkt_index = 0; + + /* Make sure channels are disabled */ + rx_edpkt_cfg_wl(intf, 0x0, RX_EDPKT_CFG_ENABLE); + + /* Rx SPB */ + rx_edpkt_cfg_wq(intf, intf->rx_ring_dma, RX_EDPKT_RING_BUFFER_READ); + rx_edpkt_cfg_wq(intf, intf->rx_ring_dma, RX_EDPKT_RING_BUFFER_WRITE); + rx_edpkt_cfg_wq(intf, intf->rx_ring_dma, RX_EDPKT_RING_BUFFER_BASE); + rx_edpkt_cfg_wq(intf, intf->rx_ring_dma_valid, + RX_EDPKT_RING_BUFFER_END); + rx_edpkt_cfg_wq(intf, intf->rx_ring_dma_valid, + RX_EDPKT_RING_BUFFER_VALID); + + /* EDPKT */ + rx_edpkt_cfg_wl(intf, (RX_EDPKT_CFG_CFG0_RBUF_4K << + RX_EDPKT_CFG_CFG0_DBUF_SHIFT) | + (RX_EDPKT_CFG_CFG0_64_ALN << + RX_EDPKT_CFG_CFG0_BALN_SHIFT) | + (RX_EDPKT_CFG_CFG0_EFRM_STUF), + RX_EDPKT_CFG_CFG0); + rx_edpkt_dma_wq(intf, intf->rx_edpkt_dma_addr, RX_EDPKT_DMA_WRITE); + rx_edpkt_dma_wq(intf, intf->rx_edpkt_dma_addr, RX_EDPKT_DMA_READ); + rx_edpkt_dma_wq(intf, intf->rx_edpkt_dma_addr, RX_EDPKT_DMA_BASE); + rx_edpkt_dma_wq(intf, intf->rx_edpkt_dma_addr + (DESC_RING_SIZE - 1), + RX_EDPKT_DMA_END); + rx_edpkt_dma_wq(intf, intf->rx_edpkt_dma_addr + (DESC_RING_SIZE - 1), + RX_EDPKT_DMA_VALID); + + reg = UMAC2FB_CFG_DEFAULT_EN | + ((intf->channel + 11) << UMAC2FB_CFG_CHID_SHIFT); + reg |= (0xd << UMAC2FB_CFG_OK_SEND_SHIFT); + umac2fb_wl(intf, reg, UMAC2FB_CFG); + + return 0; + +free_rx_ring: + dma_unmap_page(kdev, intf->rx_ring_dma, RING_BUFFER_SIZE, + DMA_FROM_DEVICE); + __free_pages(virt_to_page(intf->rx_ring_cpu), intf->rx_buf_order); + + return ret; +} + +static void bcmasp_reclaim_free_all_rx(struct bcmasp_intf *intf) +{ + struct device *kdev = &intf->parent->pdev->dev; + + dma_free_coherent(kdev, DESC_RING_SIZE, intf->rx_edpkt_cpu, + intf->rx_edpkt_dma_addr); + dma_unmap_page(kdev, intf->rx_ring_dma, RING_BUFFER_SIZE, + DMA_FROM_DEVICE); + __free_pages(virt_to_page(intf->rx_ring_cpu), intf->rx_buf_order); +} + +static int bcmasp_init_tx(struct bcmasp_intf *intf) +{ + struct device *kdev = &intf->parent->pdev->dev; + void *p; + int ret; + + p = dma_alloc_coherent(kdev, DESC_RING_SIZE, &intf->tx_spb_dma_addr, + GFP_KERNEL); + if (!p) + return -ENOMEM; + + intf->tx_spb_cpu = p; + intf->tx_spb_dma_valid = intf->tx_spb_dma_addr + DESC_RING_SIZE - 1; + intf->tx_spb_dma_read = intf->tx_spb_dma_addr; + + intf->tx_cbs = kcalloc(DESC_RING_COUNT, sizeof(struct bcmasp_tx_cb), + GFP_KERNEL); + if (!intf->tx_cbs) { + ret = -ENOMEM; + goto free_tx_spb; + } + + spin_lock_init(&intf->tx_lock); + intf->tx_spb_index = 0; + intf->tx_spb_clean_index = 0; + + netif_napi_add_tx(intf->ndev, &intf->tx_napi, bcmasp_tx_poll); + + /* Make sure channels are disabled */ + tx_spb_ctrl_wl(intf, 0x0, TX_SPB_CTRL_ENABLE); + tx_epkt_core_wl(intf, 0x0, TX_EPKT_C_CFG_MISC); + + /* Tx SPB */ + tx_spb_ctrl_wl(intf, ((intf->channel + 8) << TX_SPB_CTRL_XF_BID_SHIFT), + TX_SPB_CTRL_XF_CTRL2); + tx_pause_ctrl_wl(intf, (1 << (intf->channel + 8)), TX_PAUSE_MAP_VECTOR); + tx_spb_top_wl(intf, 0x1e, TX_SPB_TOP_BLKOUT); + tx_spb_top_wl(intf, 0x0, TX_SPB_TOP_SPRE_BW_CTRL); + + tx_spb_dma_wq(intf, intf->tx_spb_dma_addr, TX_SPB_DMA_READ); + tx_spb_dma_wq(intf, intf->tx_spb_dma_addr, TX_SPB_DMA_BASE); + tx_spb_dma_wq(intf, intf->tx_spb_dma_valid, TX_SPB_DMA_END); + tx_spb_dma_wq(intf, intf->tx_spb_dma_valid, TX_SPB_DMA_VALID); + + return 0; + +free_tx_spb: + dma_free_coherent(kdev, DESC_RING_SIZE, intf->tx_spb_cpu, + intf->tx_spb_dma_addr); + + return ret; +} + +static void bcmasp_reclaim_free_all_tx(struct bcmasp_intf *intf) +{ + struct device *kdev = &intf->parent->pdev->dev; + + /* Free descriptors */ + dma_free_coherent(kdev, DESC_RING_SIZE, intf->tx_spb_cpu, + intf->tx_spb_dma_addr); + + /* Free cbs */ + kfree(intf->tx_cbs); +} + +static void bcmasp_ephy_enable_set(struct bcmasp_intf *intf, bool enable) +{ + u32 mask = RGMII_EPHY_CFG_IDDQ_BIAS | RGMII_EPHY_CFG_EXT_PWRDOWN | + RGMII_EPHY_CFG_IDDQ_GLOBAL; + u32 reg; + + reg = rgmii_rl(intf, RGMII_EPHY_CNTRL); + if (enable) { + reg &= ~RGMII_EPHY_CK25_DIS; + rgmii_wl(intf, reg, RGMII_EPHY_CNTRL); + mdelay(1); + + reg &= ~mask; + reg |= RGMII_EPHY_RESET; + rgmii_wl(intf, reg, RGMII_EPHY_CNTRL); + mdelay(1); + + reg &= ~RGMII_EPHY_RESET; + } else { + reg |= mask | RGMII_EPHY_RESET; + rgmii_wl(intf, reg, RGMII_EPHY_CNTRL); + mdelay(1); + reg |= RGMII_EPHY_CK25_DIS; + } + rgmii_wl(intf, reg, RGMII_EPHY_CNTRL); + mdelay(1); + + /* Set or clear the LED control override to avoid lighting up LEDs + * while the EPHY is powered off and drawing unnecessary current. + */ + reg = rgmii_rl(intf, RGMII_SYS_LED_CNTRL); + if (enable) + reg &= ~RGMII_SYS_LED_CNTRL_LINK_OVRD; + else + reg |= RGMII_SYS_LED_CNTRL_LINK_OVRD; + rgmii_wl(intf, reg, RGMII_SYS_LED_CNTRL); +} + +static void bcmasp_rgmii_mode_en_set(struct bcmasp_intf *intf, bool enable) +{ + u32 reg; + + reg = rgmii_rl(intf, RGMII_OOB_CNTRL); + reg &= ~RGMII_OOB_DIS; + if (enable) + reg |= RGMII_MODE_EN; + else + reg &= ~RGMII_MODE_EN; + rgmii_wl(intf, reg, RGMII_OOB_CNTRL); +} + +static void bcmasp_netif_deinit(struct net_device *dev) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + u32 reg, timeout = 1000; + + napi_disable(&intf->tx_napi); + + bcmasp_enable_tx(intf, 0); + + /* Flush any TX packets in the pipe */ + tx_spb_dma_wl(intf, TX_SPB_DMA_FIFO_FLUSH, TX_SPB_DMA_FIFO_CTRL); + do { + reg = tx_spb_dma_rl(intf, TX_SPB_DMA_FIFO_STATUS); + if (!(reg & TX_SPB_DMA_FIFO_FLUSH)) + break; + usleep_range(1000, 2000); + } while (timeout-- > 0); + tx_spb_dma_wl(intf, 0x0, TX_SPB_DMA_FIFO_CTRL); + + umac_enable_set(intf, UMC_CMD_TX_EN, 0); + + phy_stop(dev->phydev); + + umac_enable_set(intf, UMC_CMD_RX_EN, 0); + + bcmasp_flush_rx_port(intf); + usleep_range(1000, 2000); + bcmasp_enable_rx(intf, 0); + + napi_disable(&intf->rx_napi); + + /* Disable interrupts */ + bcmasp_enable_tx_irq(intf, 0); + bcmasp_enable_rx_irq(intf, 0); + + netif_napi_del(&intf->tx_napi); + bcmasp_reclaim_free_all_tx(intf); + + netif_napi_del(&intf->rx_napi); + bcmasp_reclaim_free_all_rx(intf); +} + +static int bcmasp_stop(struct net_device *dev) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + + netif_dbg(intf, ifdown, dev, "bcmasp stop\n"); + + /* Stop tx from updating HW */ + netif_tx_disable(dev); + + bcmasp_netif_deinit(dev); + + phy_disconnect(dev->phydev); + + /* Disable internal EPHY or external PHY */ + if (intf->internal_phy) + bcmasp_ephy_enable_set(intf, false); + else + bcmasp_rgmii_mode_en_set(intf, false); + + /* Disable the interface clocks */ + bcmasp_core_clock_set_intf(intf, false); + + clk_disable_unprepare(intf->parent->clk); + + return 0; +} + +static void bcmasp_configure_port(struct bcmasp_intf *intf) +{ + u32 reg, id_mode_dis = 0; + + reg = rgmii_rl(intf, RGMII_PORT_CNTRL); + reg &= ~RGMII_PORT_MODE_MASK; + + switch (intf->phy_interface) { + case PHY_INTERFACE_MODE_RGMII: + /* RGMII_NO_ID: TXC transitions at the same time as TXD + * (requires PCB or receiver-side delay) + * RGMII: Add 2ns delay on TXC (90 degree shift) + * + * ID is implicitly disabled for 100Mbps (RG)MII operation. + */ + id_mode_dis = RGMII_ID_MODE_DIS; + fallthrough; + case PHY_INTERFACE_MODE_RGMII_TXID: + reg |= RGMII_PORT_MODE_EXT_GPHY; + break; + case PHY_INTERFACE_MODE_MII: + reg |= RGMII_PORT_MODE_EXT_EPHY; + break; + default: + break; + } + + if (intf->internal_phy) + reg |= RGMII_PORT_MODE_EPHY; + + rgmii_wl(intf, reg, RGMII_PORT_CNTRL); + + reg = rgmii_rl(intf, RGMII_OOB_CNTRL); + reg &= ~RGMII_ID_MODE_DIS; + reg |= id_mode_dis; + rgmii_wl(intf, reg, RGMII_OOB_CNTRL); +} + +static int bcmasp_netif_init(struct net_device *dev, bool phy_connect) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + phy_interface_t phy_iface = intf->phy_interface; + u32 phy_flags = PHY_BRCM_AUTO_PWRDWN_ENABLE | + PHY_BRCM_DIS_TXCRXC_NOENRGY | + PHY_BRCM_IDDQ_SUSPEND; + struct phy_device *phydev = NULL; + int ret; + + /* Always enable interface clocks */ + bcmasp_core_clock_set_intf(intf, true); + + /* Enable internal PHY or external PHY before any MAC activity */ + if (intf->internal_phy) + bcmasp_ephy_enable_set(intf, true); + else + bcmasp_rgmii_mode_en_set(intf, true); + bcmasp_configure_port(intf); + + /* This is an ugly quirk but we have not been correctly + * interpreting the phy_interface values and we have done that + * across different drivers, so at least we are consistent in + * our mistakes. + * + * When the Generic PHY driver is in use either the PHY has + * been strapped or programmed correctly by the boot loader so + * we should stick to our incorrect interpretation since we + * have validated it. + * + * Now when a dedicated PHY driver is in use, we need to + * reverse the meaning of the phy_interface_mode values to + * something that the PHY driver will interpret and act on such + * that we have two mistakes canceling themselves so to speak. + * We only do this for the two modes that GENET driver + * officially supports on Broadcom STB chips: + * PHY_INTERFACE_MODE_RGMII and PHY_INTERFACE_MODE_RGMII_TXID. + * Other modes are not *officially* supported with the boot + * loader and the scripted environment generating Device Tree + * blobs for those platforms. + * + * Note that internal PHY and fixed-link configurations are not + * affected because they use different phy_interface_t values + * or the Generic PHY driver. + */ + switch (phy_iface) { + case PHY_INTERFACE_MODE_RGMII: + phy_iface = PHY_INTERFACE_MODE_RGMII_ID; + break; + case PHY_INTERFACE_MODE_RGMII_TXID: + phy_iface = PHY_INTERFACE_MODE_RGMII_RXID; + break; + default: + break; + } + + if (phy_connect) { + phydev = of_phy_connect(dev, intf->phy_dn, + bcmasp_adj_link, phy_flags, + phy_iface); + if (!phydev) { + ret = -ENODEV; + netdev_err(dev, "could not attach to PHY\n"); + goto err_phy_disable; + } + } else if (!intf->wolopts) { + ret = phy_resume(dev->phydev); + if (ret) + goto err_phy_disable; + } + + umac_reset(intf); + + umac_init(intf); + + /* Disable the UniMAC RX/TX */ + umac_enable_set(intf, (UMC_CMD_RX_EN | UMC_CMD_TX_EN), 0); + + umac_set_hw_addr(intf, dev->dev_addr); + + intf->old_duplex = -1; + intf->old_link = -1; + intf->old_pause = -1; + + ret = bcmasp_init_tx(intf); + if (ret) + goto err_phy_disconnect; + + /* Turn on asp */ + bcmasp_enable_tx(intf, 1); + + ret = bcmasp_init_rx(intf); + if (ret) + goto err_reclaim_tx; + + bcmasp_enable_rx(intf, 1); + + /* Turn on UniMAC TX/RX */ + umac_enable_set(intf, (UMC_CMD_RX_EN | UMC_CMD_TX_EN), 1); + + intf->crc_fwd = !!(umac_rl(intf, UMC_CMD) & UMC_CMD_CRC_FWD); + + bcmasp_netif_start(dev); + + netif_start_queue(dev); + + return 0; + +err_reclaim_tx: + bcmasp_reclaim_free_all_tx(intf); +err_phy_disconnect: + if (phydev) + phy_disconnect(phydev); +err_phy_disable: + if (intf->internal_phy) + bcmasp_ephy_enable_set(intf, false); + else + bcmasp_rgmii_mode_en_set(intf, false); + return ret; +} + +static int bcmasp_open(struct net_device *dev) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + int ret; + + netif_dbg(intf, ifup, dev, "bcmasp open\n"); + + ret = clk_prepare_enable(intf->parent->clk); + if (ret) + return ret; + + ret = bcmasp_netif_init(dev, true); + if (ret) + clk_disable_unprepare(intf->parent->clk); + + return ret; +} + +static void bcmasp_reset_mib(struct bcmasp_intf *intf) +{ + umac_wl(intf, UMC_MIB_CNTRL_RX_CNT_RST | + UMC_MIB_CNTRL_RUNT_CNT_RST | + UMC_MIB_CNTRL_TX_CNT_RST, UMC_MIB_CNTRL); + usleep_range(1000, 2000); + umac_wl(intf, 0, UMC_MIB_CNTRL); +} + +static void bcmasp_tx_timeout(struct net_device *dev, unsigned int txqueue) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + + netif_dbg(intf, tx_err, dev, "transmit timeout!\n"); + + netif_trans_update(dev); + dev->stats.tx_errors++; + + netif_wake_queue(dev); +} + +static int bcmasp_get_phys_port_name(struct net_device *dev, + char *name, size_t len) +{ + struct bcmasp_intf *intf = netdev_priv(dev); + + if (snprintf(name, len, "p%d", intf->port) >= len) + return -EINVAL; + + return 0; +} + +static struct net_device_stats *bcmasp_get_stats(struct net_device *dev) +{ + return &dev->stats; +} + +static int bcmasp_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) +{ + if (!netif_running(dev)) + return -EINVAL; + + if (!dev->phydev) + return -ENODEV; + + return phy_mii_ioctl(dev->phydev, rq, cmd); +} + +static const struct net_device_ops bcmasp_netdev_ops = { + .ndo_open = bcmasp_open, + .ndo_stop = bcmasp_stop, + .ndo_start_xmit = bcmasp_xmit, + .ndo_tx_timeout = bcmasp_tx_timeout, + .ndo_set_rx_mode = bcmasp_set_rx_mode, + .ndo_get_phys_port_name = bcmasp_get_phys_port_name, + .ndo_get_stats = bcmasp_get_stats, + .ndo_do_ioctl = bcmasp_ioctl, + .ndo_set_mac_address = eth_mac_addr, +}; + +static inline void bcmasp_map_res(struct bcmasp_priv *priv, + struct bcmasp_intf *intf) +{ + /* Per port */ + intf->res.umac = priv->base + UMC_OFFSET(intf); + intf->res.umac2fb = priv->base + (priv->hw_info->umac2fb + + (intf->port * 0x4)); + intf->res.rgmii = priv->base + RGMII_OFFSET(intf); + + /* Per ch */ + intf->tx_spb_dma = priv->base + TX_SPB_DMA_OFFSET(intf); + intf->res.tx_spb_ctrl = priv->base + TX_SPB_CTRL_OFFSET(intf); + intf->res.tx_spb_top = priv->base + TX_SPB_TOP_OFFSET(intf); + intf->res.tx_epkt_core = priv->base + TX_EPKT_C_OFFSET(intf); + intf->res.tx_pause_ctrl = priv->base + TX_PAUSE_CTRL_OFFSET(intf); + + intf->rx_edpkt_dma = priv->base + RX_EDPKT_DMA_OFFSET(intf); + intf->rx_edpkt_cfg = priv->base + RX_EDPKT_CFG_OFFSET(intf); +} + +#define MAX_IRQ_STR_LEN 64 +struct bcmasp_intf *bcmasp_interface_create(struct bcmasp_priv *priv, + struct device_node *ndev_dn) +{ + struct device *dev = &priv->pdev->dev; + struct bcmasp_intf *intf; + struct net_device *ndev; + int ch, port, ret; + + if (of_property_read_u32(ndev_dn, "reg", &port)) { + dev_warn(dev, "%s: invalid ch number\n", ndev_dn->name); + goto err; + } + + if (of_property_read_u32(ndev_dn, "brcm,channel", &ch)) { + dev_warn(dev, "%s: invalid ch number\n", ndev_dn->name); + goto err; + } + + ndev = alloc_etherdev(sizeof(struct bcmasp_intf)); + if (!dev) { + dev_warn(dev, "%s: unable to alloc ndev\n", ndev_dn->name); + goto err; + } + intf = netdev_priv(ndev); + + intf->parent = priv; + intf->ndev = ndev; + intf->channel = ch; + intf->port = port; + intf->ndev_dn = ndev_dn; + + ret = of_get_phy_mode(ndev_dn, &intf->phy_interface); + if (ret < 0) { + dev_err(dev, "invalid PHY mode property\n"); + goto err_free_netdev; + } + + if (intf->phy_interface == PHY_INTERFACE_MODE_INTERNAL) + intf->internal_phy = true; + + intf->phy_dn = of_parse_phandle(ndev_dn, "phy-handle", 0); + if (!intf->phy_dn && of_phy_is_fixed_link(ndev_dn)) { + ret = of_phy_register_fixed_link(ndev_dn); + if (ret) { + dev_warn(dev, "%s: failed to register fixed PHY\n", + ndev_dn->name); + goto err_free_netdev; + } + intf->phy_dn = ndev_dn; + } + + /* Map resource */ + bcmasp_map_res(priv, intf); + + if ((!phy_interface_mode_is_rgmii(intf->phy_interface) && + intf->phy_interface != PHY_INTERFACE_MODE_MII && + intf->phy_interface != PHY_INTERFACE_MODE_INTERNAL) || + (intf->port != 1 && intf->internal_phy)) { + netdev_err(intf->ndev, "invalid PHY mode: %s for port %d\n", + phy_modes(intf->phy_interface), intf->port); + ret = -EINVAL; + goto err_free_netdev; + } + + bcmasp_reset_mib(intf); + + ret = of_get_ethdev_address(ndev_dn, ndev); + if (ret) { + netdev_warn(ndev, "using random Ethernet MAC\n"); + eth_hw_addr_random(ndev); + } + + SET_NETDEV_DEV(ndev, dev); + intf->ops = &bcmasp_intf_ops; + ndev->netdev_ops = &bcmasp_netdev_ops; + ndev->ethtool_ops = &bcmasp_ethtool_ops; + intf->msg_enable = netif_msg_init(-1, NETIF_MSG_DRV | + NETIF_MSG_PROBE | + NETIF_MSG_LINK); + ndev->features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_SG | + NETIF_F_RXCSUM; + ndev->hw_features |= ndev->features; + ndev->needed_headroom += sizeof(struct bcmasp_pkt_offload); + + return intf; + +err_free_netdev: + free_netdev(ndev); +err: + return NULL; +} + +void bcmasp_interface_destroy(struct bcmasp_intf *intf, bool unregister) +{ + if (unregister) + unregister_netdev(intf->ndev); + if (of_phy_is_fixed_link(intf->ndev_dn)) + of_phy_deregister_fixed_link(intf->ndev_dn); + free_netdev(intf->ndev); +} + +static void bcmasp_suspend_to_wol(struct bcmasp_intf *intf) +{ + struct net_device *ndev = intf->ndev; + u32 reg; + + reg = umac_rl(intf, UMC_MPD_CTRL); + if (intf->wolopts & (WAKE_MAGIC | WAKE_MAGICSECURE)) + reg |= UMC_MPD_CTRL_MPD_EN; + reg &= ~UMC_MPD_CTRL_PSW_EN; + if (intf->wolopts & WAKE_MAGICSECURE) { + /* Program the SecureOn password */ + umac_wl(intf, get_unaligned_be16(&intf->sopass[0]), + UMC_PSW_MS); + umac_wl(intf, get_unaligned_be32(&intf->sopass[2]), + UMC_PSW_LS); + reg |= UMC_MPD_CTRL_PSW_EN; + } + umac_wl(intf, reg, UMC_MPD_CTRL); + + if (intf->wolopts & WAKE_FILTER) + bcmasp_netfilt_suspend(intf); + + /* UniMAC receive needs to be turned on */ + umac_enable_set(intf, UMC_CMD_RX_EN, 1); + + if (intf->parent->wol_irq > 0) { + wakeup_intr2_core_wl(intf->parent, 0xffffffff, + ASP_WAKEUP_INTR2_MASK_CLEAR); + } + + netif_dbg(intf, wol, ndev, "entered WOL mode\n"); +} + +int bcmasp_interface_suspend(struct bcmasp_intf *intf) +{ + struct device *kdev = &intf->parent->pdev->dev; + struct net_device *dev = intf->ndev; + int ret = 0; + + if (!netif_running(dev)) + return 0; + + netif_device_detach(dev); + + bcmasp_netif_deinit(dev); + + if (!intf->wolopts) { + ret = phy_suspend(dev->phydev); + if (ret) + goto out; + + if (intf->internal_phy) + bcmasp_ephy_enable_set(intf, false); + else + bcmasp_rgmii_mode_en_set(intf, false); + + /* If Wake-on-LAN is disabled, we can safely + * disable the network interface clocks. + */ + bcmasp_core_clock_set_intf(intf, false); + } + + if (device_may_wakeup(kdev) && intf->wolopts) + bcmasp_suspend_to_wol(intf); + + clk_disable_unprepare(intf->parent->clk); + + return ret; + +out: + bcmasp_netif_init(dev, false); + return ret; +} + +static void bcmasp_resume_from_wol(struct bcmasp_intf *intf) +{ + u32 reg; + + reg = umac_rl(intf, UMC_MPD_CTRL); + reg &= ~UMC_MPD_CTRL_MPD_EN; + umac_wl(intf, reg, UMC_MPD_CTRL); + + if (intf->parent->wol_irq > 0) { + wakeup_intr2_core_wl(intf->parent, 0xffffffff, + ASP_WAKEUP_INTR2_MASK_SET); + } +} + +int bcmasp_interface_resume(struct bcmasp_intf *intf) +{ + struct net_device *dev = intf->ndev; + int ret; + + if (!netif_running(dev)) + return 0; + + ret = clk_prepare_enable(intf->parent->clk); + if (ret) + return ret; + + ret = bcmasp_netif_init(dev, false); + if (ret) + goto out; + + bcmasp_resume_from_wol(intf); + + if (intf->eee.eee_enabled) + bcmasp_eee_enable_set(intf, true); + + netif_device_attach(dev); + + return 0; + +out: + clk_disable_unprepare(intf->parent->clk); + return ret; +} diff --git a/drivers/net/ethernet/broadcom/asp2/bcmasp_intf_defs.h b/drivers/net/ethernet/broadcom/asp2/bcmasp_intf_defs.h new file mode 100644 index 000000000000..ab1e65002260 --- /dev/null +++ b/drivers/net/ethernet/broadcom/asp2/bcmasp_intf_defs.h @@ -0,0 +1,238 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __BCMASP_INTF_DEFS_H +#define __BCMASP_INTF_DEFS_H + +#define UMC_OFFSET(intf) \ + ((((intf)->port) * 0x800) + 0xc000) +#define UMC_CMD 0x008 +#define UMC_CMD_TX_EN BIT(0) +#define UMC_CMD_RX_EN BIT(1) +#define UMC_CMD_SPEED_SHIFT 0x2 +#define UMC_CMD_SPEED_MASK 0x3 +#define UMC_CMD_SPEED_10 0x0 +#define UMC_CMD_SPEED_100 0x1 +#define UMC_CMD_SPEED_1000 0x2 +#define UMC_CMD_SPEED_2500 0x3 +#define UMC_CMD_PROMISC BIT(4) +#define UMC_CMD_PAD_EN BIT(5) +#define UMC_CMD_CRC_FWD BIT(6) +#define UMC_CMD_PAUSE_FWD BIT(7) +#define UMC_CMD_RX_PAUSE_IGNORE BIT(8) +#define UMC_CMD_TX_ADDR_INS BIT(9) +#define UMC_CMD_HD_EN BIT(10) +#define UMC_CMD_SW_RESET BIT(13) +#define UMC_CMD_LCL_LOOP_EN BIT(15) +#define UMC_CMD_AUTO_CONFIG BIT(22) +#define UMC_CMD_CNTL_FRM_EN BIT(23) +#define UMC_CMD_NO_LEN_CHK BIT(24) +#define UMC_CMD_RMT_LOOP_EN BIT(25) +#define UMC_CMD_PRBL_EN BIT(27) +#define UMC_CMD_TX_PAUSE_IGNORE BIT(28) +#define UMC_CMD_TX_RX_EN BIT(29) +#define UMC_CMD_RUNT_FILTER_DIS BIT(30) +#define UMC_MAC0 0x0c +#define UMC_MAC1 0x10 +#define UMC_FRM_LEN 0x14 +#define UMC_EEE_CTRL 0x64 +#define EN_LPI_RX_PAUSE BIT(0) +#define EN_LPI_TX_PFC BIT(1) +#define EN_LPI_TX_PAUSE BIT(2) +#define EEE_EN BIT(3) +#define RX_FIFO_CHECK BIT(4) +#define EEE_TX_CLK_DIS BIT(5) +#define DIS_EEE_10M BIT(6) +#define LP_IDLE_PREDICTION_MODE BIT(7) +#define UMC_EEE_LPI_TIMER 0x68 +#define UMC_PAUSE_CNTRL 0x330 +#define UMC_TX_FLUSH 0x334 +#define UMC_MIB_START 0x400 +#define UMC_MIB_CNTRL 0x580 +#define UMC_MIB_CNTRL_RX_CNT_RST BIT(0) +#define UMC_MIB_CNTRL_RUNT_CNT_RST BIT(1) +#define UMC_MIB_CNTRL_TX_CNT_RST BIT(2) +#define UMC_RX_MAX_PKT_SZ 0x608 +#define UMC_MPD_CTRL 0x620 +#define UMC_MPD_CTRL_MPD_EN BIT(0) +#define UMC_MPD_CTRL_PSW_EN BIT(27) +#define UMC_PSW_MS 0x624 +#define UMC_PSW_LS 0x628 + +#define UMAC2FB_OFFSET_2_1 0x9f044 +#define UMAC2FB_OFFSET 0x9f03c +#define UMAC2FB_CFG 0x0 +#define UMAC2FB_CFG_OPUT_EN BIT(0) +#define UMAC2FB_CFG_VLAN_EN BIT(1) +#define UMAC2FB_CFG_SNAP_EN BIT(2) +#define UMAC2FB_CFG_BCM_TG_EN BIT(3) +#define UMAC2FB_CFG_IPUT_EN BIT(4) +#define UMAC2FB_CFG_CHID_SHIFT 8 +#define UMAC2FB_CFG_OK_SEND_SHIFT 24 +#define UMAC2FB_CFG_DEFAULT_EN \ + (UMAC2FB_CFG_OPUT_EN | UMAC2FB_CFG_VLAN_EN \ + | UMAC2FB_CFG_SNAP_EN | UMAC2FB_CFG_IPUT_EN) + +#define RGMII_OFFSET(intf) \ + ((((intf)->port) * 0x100) + 0xd000) +#define RGMII_EPHY_CNTRL 0x00 +#define RGMII_EPHY_CFG_IDDQ_BIAS BIT(0) +#define RGMII_EPHY_CFG_EXT_PWRDOWN BIT(1) +#define RGMII_EPHY_CFG_FORCE_DLL_EN BIT(2) +#define RGMII_EPHY_CFG_IDDQ_GLOBAL BIT(3) +#define RGMII_EPHY_CK25_DIS BIT(4) +#define RGMII_EPHY_RESET BIT(7) +#define RGMII_OOB_CNTRL 0x0c +#define RGMII_LINK BIT(4) +#define RGMII_OOB_DIS BIT(5) +#define RGMII_MODE_EN BIT(6) +#define RGMII_ID_MODE_DIS BIT(16) + +#define RGMII_PORT_CNTRL 0x60 +#define RGMII_PORT_MODE_EPHY 0 +#define RGMII_PORT_MODE_GPHY 1 +#define RGMII_PORT_MODE_EXT_EPHY 2 +#define RGMII_PORT_MODE_EXT_GPHY 3 +#define RGMII_PORT_MODE_EXT_RVMII 4 +#define RGMII_PORT_MODE_MASK GENMASK(2, 0) + +#define RGMII_SYS_LED_CNTRL 0x74 +#define RGMII_SYS_LED_CNTRL_LINK_OVRD BIT(15) + +#define OUTDMA_OFFSET(intf) \ + (((intf->channel - 6) * 0xb0) + 0x47000) +#define OUTDMA_ENABLE 0x00 +#define OUTDMA_ENABLE_EN BIT(0) +#define OUTDMA_HW_STATUS 0x04 +#define OUTDMA_HW_STATUS_IDLE BIT(0) +#define OUTDMA_DATA_DMA_WRITE 0x08 +#define OUTDMA_DATA_DMA_READ 0x10 +#define OUTDMA_DATA_DMA_BASE 0x18 +#define OUTDMA_DATA_DMA_END 0x20 +#define OUTDMA_DATA_DMA_VALID 0x28 +#define OUTDMA_DATA_CTRL1 0x30 +#define OUTDMA_DATA_CTRL1_E_BALN_MASK GENMASK(2, 0) +#define OUTDMA_DATA_CTRL1_E_NO_ALN 0x00 +#define OUTDMA_DATA_CTRL1_E_4_ALN 0x02 +#define OUTDMA_DATA_CTRL1_E_64_ALN 0x06 +#define OUTDMA_DATA_CTRL1_E_STUFF BIT(3) +#define OUTDMA_DATA_CTRL1_PSH_TMR_EN BIT(4) +#define OUTDMA_DATA_PUSH_TIMER 0x34 +#define OUTDMA_DATA_PUSH_EVENT_CTRL 0x38 +#define OUTDMA_DATA_PUSH_CTRL_PUSH BIT(0) +#define OUTDMA_DATA_PUSH_EVENT_STATUS 0x3c +#define OUTDMA_DATA_PUSH_EVT_STATUS BIT(0) +#define OUTDMA_DESC_DMA_WRITE 0x50 +#define OUTDMA_DESC_DMA_READ 0x58 +#define OUTDMA_DESC_DMA_BASE 0x60 +#define OUTDMA_DESC_DMA_END 0x68 +#define OUTDMA_DESC_DMA_VALID 0x70 +#define OUTDMA_DESC_DMA_CTRL1 0x78 +#define OUTDMA_DESC_CTRL1_PSH_TIMR_EN BIT(0) +#define OUTDMA_DESC_PUSH_TIMER 0x7c +#define OUTDMA_DESC_PUSH_EVT_CTL 0x80 +#define OUTDMA_DESC_PUSH_EVT_CTL_PSH BIT(0) +#define OUTDMA_DESC_PSH_EVT_ST 0x84 +#define OUTDMA_DESC_FIFO_CTRL 0x88 +#define OUTDMA_DESC_FIFO_CTL_FLUSH BIT(0) +#define OUTDMA_DESC_FIFO_FLUSH_STATUS 0x8c +#define OUTDMA_DESC_FIFO_FLH_ST BIT(0) +#define OUTDMA_DESC_DMA_CTRL2 0x94 +#define OUTMDA_DESC_DMA_CTRL2_WD_EN BIT(1) +#define OUTDMA_DESC_DMA_CTRL2_RX_PORT 8 + +#define TX_SPB_DMA_OFFSET(intf) \ + ((((intf)->channel) * 0x30) + 0x48180) +#define TX_SPB_DMA_READ 0x00 +#define TX_SPB_DMA_BASE 0x08 +#define TX_SPB_DMA_END 0x10 +#define TX_SPB_DMA_VALID 0x18 +#define TX_SPB_DMA_FIFO_CTRL 0x20 +#define TX_SPB_DMA_FIFO_FLUSH BIT(0) +#define TX_SPB_DMA_FIFO_STATUS 0x24 + +#define TX_SPB_CTRL_OFFSET(intf) \ + ((((intf)->channel) * 0x68) + 0x49340) +#define TX_SPB_CTRL_ENABLE 0x0 +#define TX_SPB_CTRL_ENABLE_EN BIT(0) +#define TX_SPB_CTRL_XF_CTRL2 0x20 +#define TX_SPB_CTRL_XF_BID_SHIFT 16 + +#define TX_SPB_TOP_OFFSET(intf) \ + ((((intf)->channel) * 0x1c) + 0x4a0e0) +#define TX_SPB_TOP_BLKOUT 0x0 +#define TX_SPB_TOP_SPRE_BW_CTRL 0x4 + +#define TX_EPKT_C_OFFSET(intf) \ + ((((intf)->channel) * 0x120) + 0x40900) +#define TX_EPKT_C_CFG_MISC 0x0 +#define TX_EPKT_C_CFG_MISC_EN BIT(0) +#define TX_EPKT_C_CFG_MISC_PT BIT(1) +#define TX_EPKT_C_CFG_MISC_PS_SHIFT 14 +#define TX_EPKT_C_CFG_MISC_FD_SHIFT 20 + +#define TX_PAUSE_CTRL_OFFSET(intf) \ + ((((intf)->channel * 0xc) + 0x49a20)) +#define TX_PAUSE_MAP_VECTOR 0x8 + +#define RX_EDPKT_DMA_OFFSET(intf) \ + ((((intf)->channel) * 0x38) + 0x9ca00) +#define RX_EDPKT_DMA_WRITE 0x00 +#define RX_EDPKT_DMA_READ 0x08 +#define RX_EDPKT_DMA_BASE 0x10 +#define RX_EDPKT_DMA_END 0x18 +#define RX_EDPKT_DMA_VALID 0x20 +#define RX_EDPKT_DMA_FULLNESS 0x28 +#define RX_EDPKT_DMA_MIN_THRES 0x2c +#define RX_EDPKT_DMA_CH_XONOFF 0x30 + +#define RX_EDPKT_CFG_OFFSET(intf) \ + ((((intf)->channel) * 0x70) + 0x9c600) +#define RX_EDPKT_CFG_CFG0 0x0 +#define RX_EDPKT_CFG_CFG0_DBUF_SHIFT 9 +#define RX_EDPKT_CFG_CFG0_RBUF 0x0 +#define RX_EDPKT_CFG_CFG0_RBUF_4K 0x1 +#define RX_EDPKT_CFG_CFG0_BUF_4K 0x2 +/* EFRM STUFF, 0 = no byte stuff, 1 = two byte stuff */ +#define RX_EDPKT_CFG_CFG0_EFRM_STUF BIT(11) +#define RX_EDPKT_CFG_CFG0_BALN_SHIFT 12 +#define RX_EDPKT_CFG_CFG0_NO_ALN 0 +#define RX_EDPKT_CFG_CFG0_4_ALN 2 +#define RX_EDPKT_CFG_CFG0_64_ALN 6 +#define RX_EDPKT_RING_BUFFER_WRITE 0x38 +#define RX_EDPKT_RING_BUFFER_READ 0x40 +#define RX_EDPKT_RING_BUFFER_BASE 0x48 +#define RX_EDPKT_RING_BUFFER_END 0x50 +#define RX_EDPKT_RING_BUFFER_VALID 0x58 +#define RX_EDPKT_CFG_ENABLE 0x6c +#define RX_EDPKT_CFG_ENABLE_EN BIT(0) + +#define RX_SPB_DMA_OFFSET(intf) \ + ((((intf)->channel) * 0x30) + 0xa0000) +#define RX_SPB_DMA_READ 0x00 +#define RX_SPB_DMA_BASE 0x08 +#define RX_SPB_DMA_END 0x10 +#define RX_SPB_DMA_VALID 0x18 +#define RX_SPB_DMA_FIFO_CTRL 0x20 +#define RX_SPB_DMA_FIFO_FLUSH BIT(0) +#define RX_SPB_DMA_FIFO_STATUS 0x24 + +#define RX_SPB_CTRL_OFFSET(intf) \ + ((((intf)->channel - 6) * 0x68) + 0xa1000) +#define RX_SPB_CTRL_ENABLE 0x00 +#define RX_SPB_CTRL_ENABLE_EN BIT(0) + +#define RX_PAUSE_CTRL_OFFSET(intf) \ + ((((intf)->channel - 6) * 0x4) + 0xa1138) +#define RX_PAUSE_MAP_VECTOR 0x00 + +#define RX_SPB_TOP_CTRL_OFFSET(intf) \ + ((((intf)->channel - 6) * 0x14) + 0xa2000) +#define RX_SPB_TOP_BLKOUT 0x00 + +#define NUM_4K_BUFFERS 32 +#define RING_BUFFER_SIZE (PAGE_SIZE * NUM_4K_BUFFERS) + +#define DESC_RING_COUNT (64 * NUM_4K_BUFFERS) +#define DESC_SIZE 16 +#define DESC_RING_SIZE (DESC_RING_COUNT * DESC_SIZE) + +#endif -- 2.7.4 [-- Attachment #2: S/MIME Cryptographic Signature --] [-- Type: application/pkcs7-signature, Size: 4206 bytes --] ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v3 3/6] net: bcmasp: Add support for ASP2.0 Ethernet controller 2023-05-19 21:19 ` [PATCH net-next v3 3/6] net: bcmasp: Add support for ASP2.0 " Justin Chen @ 2023-05-20 4:43 ` Jakub Kicinski 2023-05-21 9:05 ` kernel test robot ` (2 subsequent siblings) 3 siblings, 0 replies; 16+ messages in thread From: Jakub Kicinski @ 2023-05-20 4:43 UTC (permalink / raw) To: Justin Chen Cc: netdev, devicetree, linux-kernel, linux-media, dri-devel, bcm-kernel-feedback-list, justinpopo6, f.fainelli, davem, florian.fainelli, edumazet, pabeni, robh+dt, krzysztof.kozlowski+dt, opendmb, andrew, hkallweit1, linux, richardcochran, sumit.semwal, christian.koenig On Fri, 19 May 2023 14:19:41 -0700 Justin Chen wrote: > Add support for the Broadcom ASP 2.0 Ethernet controller which is first > introduced with 72165. This controller features two distinct Ethernet > ports that can be independently operated. > > This patch supports: > > - Wake-on-LAN using magic packets > - basic ethtool operations (link, counters, message level) > - MAC destination address filtering (promiscuous, ALL_MULTI, etc.) There are some sparse warnings where (try building with C=1). Please also remove the inline keyword from all functions in source files, unless you actually checked that the compiler does the wrong thing. -- pw-bot: cr ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v3 3/6] net: bcmasp: Add support for ASP2.0 Ethernet controller 2023-05-19 21:19 ` [PATCH net-next v3 3/6] net: bcmasp: Add support for ASP2.0 " Justin Chen 2023-05-20 4:43 ` Jakub Kicinski @ 2023-05-21 9:05 ` kernel test robot 2023-05-22 11:34 ` Simon Horman 2023-05-22 11:38 ` Simon Horman 3 siblings, 0 replies; 16+ messages in thread From: kernel test robot @ 2023-05-21 9:05 UTC (permalink / raw) To: Justin Chen, netdev, devicetree, linux-kernel, linux-media, dri-devel, bcm-kernel-feedback-list Cc: oe-kbuild-all, justinpopo6, justin.chen, f.fainelli, davem, florian.fainelli, edumazet, kuba, pabeni, robh+dt, krzysztof.kozlowski+dt, opendmb, andrew, hkallweit1, linux, richardcochran, sumit.semwal, christian.koenig [-- Attachment #1: Type: text/plain, Size: 6800 bytes --] Hi Justin, kernel test robot noticed the following build warnings: [auto build test WARNING on net-next/main] url: https://github.com/intel-lab-lkp/linux/commits/Justin-Chen/dt-bindings-net-brcm-unimac-mdio-Add-asp-v2-0/20230520-052323 base: net-next/main patch link: https://lore.kernel.org/r/1684531184-14009-4-git-send-email-justin.chen%40broadcom.com patch subject: [PATCH net-next v3 3/6] net: bcmasp: Add support for ASP2.0 Ethernet controller config: loongarch-randconfig-s032-20230521 compiler: loongarch64-linux-gcc (GCC) 12.1.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.4-39-gce1a6720-dirty # https://github.com/intel-lab-lkp/linux/commit/a9faa319dd01367b8dc99ab86dc337596fe20c80 git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Justin-Chen/dt-bindings-net-brcm-unimac-mdio-Add-asp-v2-0/20230520-052323 git checkout a9faa319dd01367b8dc99ab86dc337596fe20c80 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=loongarch olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=loongarch SHELL=/bin/bash drivers/net/ethernet/broadcom/asp2/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202305211619.O61tjQyE-lkp@intel.com/ sparse warnings: (new ones prefixed by >>) >> drivers/net/ethernet/broadcom/asp2/bcmasp.c:355:16: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __be16 [addressable] [assigned] [usertype] val_16 @@ got int @@ drivers/net/ethernet/broadcom/asp2/bcmasp.c:355:16: sparse: expected restricted __be16 [addressable] [assigned] [usertype] val_16 drivers/net/ethernet/broadcom/asp2/bcmasp.c:355:16: sparse: got int >> drivers/net/ethernet/broadcom/asp2/bcmasp.c:356:17: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __be16 [addressable] [assigned] [usertype] mask_16 @@ got int @@ drivers/net/ethernet/broadcom/asp2/bcmasp.c:356:17: sparse: expected restricted __be16 [addressable] [assigned] [usertype] mask_16 drivers/net/ethernet/broadcom/asp2/bcmasp.c:356:17: sparse: got int -- >> drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:186:18: sparse: sparse: cast from restricted __be16 >> drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:186:16: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned short [usertype] ip_ver @@ got restricted __be16 [usertype] @@ drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:186:16: sparse: expected unsigned short [usertype] ip_ver drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:186:16: sparse: got restricted __be16 [usertype] >> drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:227:22: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] nop @@ got restricted __be32 [usertype] @@ drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:227:22: sparse: expected unsigned int [usertype] nop drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:227:22: sparse: got restricted __be32 [usertype] >> drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:228:25: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] header @@ got restricted __be32 [usertype] @@ drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:228:25: sparse: expected unsigned int [usertype] header drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:228:25: sparse: got restricted __be32 [usertype] >> drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:229:26: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] header2 @@ got restricted __be32 [usertype] @@ drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:229:26: sparse: expected unsigned int [usertype] header2 drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:229:26: sparse: got restricted __be32 [usertype] >> drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:230:23: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] epkt @@ got restricted __be32 [usertype] @@ drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:230:23: sparse: expected unsigned int [usertype] epkt drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:230:23: sparse: got restricted __be32 [usertype] >> drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:231:22: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] end @@ got restricted __be32 [usertype] @@ drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:231:22: sparse: expected unsigned int [usertype] end drivers/net/ethernet/broadcom/asp2/bcmasp_intf.c:231:22: sparse: got restricted __be32 [usertype] vim +355 drivers/net/ethernet/broadcom/asp2/bcmasp.c 342 343 static void bcmasp_netfilt_tcpip6_wr(struct bcmasp_priv *priv, 344 struct bcmasp_net_filter *nfilt, 345 struct ethtool_tcpip6_spec *match, 346 struct ethtool_tcpip6_spec *mask, 347 u32 offset) 348 { 349 __be16 val_16, mask_16; 350 351 val_16 = htons(ETH_P_IPV6); 352 mask_16 = htons(0xFFFF); 353 bcmasp_netfilt_wr_m_wake(priv, nfilt, (ETH_ALEN * 2) + offset, 354 &val_16, &mask_16, sizeof(val_16)); > 355 val_16 = match->tclass << 4; > 356 mask_16 = mask->tclass << 4; 357 bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset, 358 &val_16, &mask_16, sizeof(val_16)); 359 bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 8, 360 &match->ip6src, &mask->ip6src, 361 sizeof(match->ip6src)); 362 bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 24, 363 &match->ip6dst, &mask->ip6dst, 364 sizeof(match->ip6dst)); 365 bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 40, 366 &match->psrc, &mask->psrc, 367 sizeof(match->psrc)); 368 bcmasp_netfilt_wr_m_wake(priv, nfilt, ETH_HLEN + offset + 42, 369 &match->pdst, &mask->pdst, 370 sizeof(match->pdst)); 371 } 372 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki [-- Attachment #2: config --] [-- Type: text/plain, Size: 184722 bytes --] # # Automatically generated file; DO NOT EDIT. # Linux/loongarch 6.4.0-rc2 Kernel Configuration # CONFIG_CC_VERSION_TEXT="loongarch64-linux-gcc (GCC) 12.1.0" CONFIG_CC_IS_GCC=y CONFIG_GCC_VERSION=120100 CONFIG_CLANG_VERSION=0 CONFIG_AS_IS_GNU=y CONFIG_AS_VERSION=23800 CONFIG_LD_IS_BFD=y CONFIG_LD_VERSION=23800 CONFIG_LLD_VERSION=0 CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y CONFIG_CC_HAS_ASM_INLINE=y CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y CONFIG_PAHOLE_VERSION=125 CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_TABLE_SORT=y # # General setup # CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_COMPILE_TEST=y # CONFIG_WERROR is not set CONFIG_LOCALVERSION="" CONFIG_BUILD_SALT="" CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_LZMA=y CONFIG_HAVE_KERNEL_XZ=y CONFIG_HAVE_KERNEL_LZO=y CONFIG_HAVE_KERNEL_LZ4=y CONFIG_HAVE_KERNEL_ZSTD=y # CONFIG_KERNEL_GZIP is not set # CONFIG_KERNEL_LZMA is not set # CONFIG_KERNEL_XZ is not set # CONFIG_KERNEL_LZO is not set # CONFIG_KERNEL_LZ4 is not set CONFIG_KERNEL_ZSTD=y CONFIG_DEFAULT_INIT="" CONFIG_DEFAULT_HOSTNAME="(none)" CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y # CONFIG_POSIX_MQUEUE is not set CONFIG_WATCH_QUEUE=y # CONFIG_CROSS_MEMORY_ATTACH is not set # CONFIG_USELIB is not set CONFIG_AUDIT=y CONFIG_HAVE_ARCH_AUDITSYSCALL=y CONFIG_AUDITSYSCALL=y # # IRQ subsystem # CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_IRQ_SHOW=y CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y CONFIG_GENERIC_IRQ_MIGRATION=y CONFIG_GENERIC_IRQ_INJECTION=y CONFIG_GENERIC_IRQ_CHIP=y CONFIG_IRQ_DOMAIN=y CONFIG_IRQ_DOMAIN_HIERARCHY=y CONFIG_IRQ_FASTEOI_HIERARCHY_HANDLERS=y CONFIG_GENERIC_MSI_IRQ=y CONFIG_IRQ_FORCED_THREADING=y CONFIG_SPARSE_IRQ=y CONFIG_GENERIC_IRQ_DEBUGFS=y # end of IRQ subsystem CONFIG_GENERIC_IRQ_MULTI_HANDLER=y CONFIG_GENERIC_TIME_VSYSCALL=y CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CMOS_UPDATE=y CONFIG_CONTEXT_TRACKING=y CONFIG_CONTEXT_TRACKING_IDLE=y # # Timers subsystem # CONFIG_TICK_ONESHOT=y CONFIG_NO_HZ_COMMON=y # CONFIG_HZ_PERIODIC is not set CONFIG_NO_HZ_IDLE=y # CONFIG_NO_HZ_FULL is not set # CONFIG_NO_HZ is not set CONFIG_HIGH_RES_TIMERS=y # end of Timers subsystem CONFIG_BPF=y CONFIG_HAVE_EBPF_JIT=y # # BPF subsystem # CONFIG_BPF_SYSCALL=y CONFIG_BPF_UNPRIV_DEFAULT_OFF=y CONFIG_USERMODE_DRIVER=y # end of BPF subsystem CONFIG_PREEMPT_BUILD=y # CONFIG_PREEMPT_NONE is not set # CONFIG_PREEMPT_VOLUNTARY is not set CONFIG_PREEMPT=y CONFIG_PREEMPT_COUNT=y CONFIG_PREEMPTION=y # # CPU/Task time and stats accounting # CONFIG_TICK_CPU_ACCOUNTING=y # CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set # CONFIG_IRQ_TIME_ACCOUNTING is not set CONFIG_BSD_PROCESS_ACCT=y # CONFIG_BSD_PROCESS_ACCT_V3 is not set CONFIG_TASKSTATS=y # CONFIG_TASK_DELAY_ACCT is not set CONFIG_TASK_XACCT=y # CONFIG_TASK_IO_ACCOUNTING is not set CONFIG_PSI=y # CONFIG_PSI_DEFAULT_DISABLED is not set # end of CPU/Task time and stats accounting # CONFIG_CPU_ISOLATION is not set # # RCU Subsystem # CONFIG_TREE_RCU=y CONFIG_PREEMPT_RCU=y # CONFIG_RCU_EXPERT is not set CONFIG_TREE_SRCU=y CONFIG_TASKS_RCU_GENERIC=y CONFIG_TASKS_RCU=y CONFIG_TASKS_TRACE_RCU=y CONFIG_RCU_STALL_COMMON=y CONFIG_RCU_NEED_SEGCBLIST=y # end of RCU Subsystem CONFIG_IKCONFIG=y # CONFIG_IKCONFIG_PROC is not set # CONFIG_IKHEADERS is not set CONFIG_LOG_BUF_SHIFT=17 CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 CONFIG_PRINTK_INDEX=y CONFIG_GENERIC_SCHED_CLOCK=y # # Scheduler features # # end of Scheduler features CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y CONFIG_CC_HAS_INT128=y CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" CONFIG_GCC11_NO_ARRAY_BOUNDS=y CONFIG_CC_NO_ARRAY_BOUNDS=y # CONFIG_NUMA_BALANCING is not set CONFIG_CGROUPS=y CONFIG_PAGE_COUNTER=y # CONFIG_CGROUP_FAVOR_DYNMODS is not set CONFIG_MEMCG=y CONFIG_MEMCG_KMEM=y CONFIG_BLK_CGROUP=y CONFIG_CGROUP_WRITEBACK=y CONFIG_CGROUP_SCHED=y CONFIG_FAIR_GROUP_SCHED=y # CONFIG_CFS_BANDWIDTH is not set CONFIG_RT_GROUP_SCHED=y CONFIG_SCHED_MM_CID=y CONFIG_CGROUP_PIDS=y CONFIG_CGROUP_RDMA=y # CONFIG_CGROUP_FREEZER is not set # CONFIG_CGROUP_HUGETLB is not set # CONFIG_CPUSETS is not set # CONFIG_CGROUP_DEVICE is not set # CONFIG_CGROUP_CPUACCT is not set # CONFIG_CGROUP_PERF is not set # CONFIG_CGROUP_BPF is not set CONFIG_CGROUP_MISC=y # CONFIG_CGROUP_DEBUG is not set CONFIG_SOCK_CGROUP_DATA=y CONFIG_NAMESPACES=y CONFIG_UTS_NS=y # CONFIG_IPC_NS is not set # CONFIG_USER_NS is not set CONFIG_PID_NS=y CONFIG_NET_NS=y # CONFIG_CHECKPOINT_RESTORE is not set CONFIG_SCHED_AUTOGROUP=y CONFIG_RELAY=y CONFIG_BLK_DEV_INITRD=y CONFIG_INITRAMFS_SOURCE="" CONFIG_INITRAMFS_FORCE=y CONFIG_RD_GZIP=y CONFIG_RD_BZIP2=y CONFIG_RD_LZMA=y CONFIG_RD_XZ=y CONFIG_RD_LZO=y CONFIG_RD_LZ4=y # CONFIG_RD_ZSTD is not set # CONFIG_BOOT_CONFIG is not set CONFIG_INITRAMFS_PRESERVE_MTIME=y CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set CONFIG_LD_ORPHAN_WARN=y CONFIG_LD_ORPHAN_WARN_LEVEL="warn" CONFIG_SYSCTL=y CONFIG_SYSCTL_EXCEPTION_TRACE=y CONFIG_SYSCTL_ARCH_UNALIGN_NO_WARN=y CONFIG_SYSCTL_ARCH_UNALIGN_ALLOW=y # CONFIG_EXPERT is not set CONFIG_MULTIUSER=y CONFIG_SYSFS_SYSCALL=y CONFIG_FHANDLE=y CONFIG_POSIX_TIMERS=y CONFIG_PRINTK=y CONFIG_BUG=y CONFIG_ELF_CORE=y CONFIG_BASE_FULL=y CONFIG_FUTEX=y CONFIG_FUTEX_PI=y CONFIG_EPOLL=y CONFIG_SIGNALFD=y CONFIG_TIMERFD=y CONFIG_EVENTFD=y CONFIG_SHMEM=y CONFIG_AIO=y CONFIG_IO_URING=y CONFIG_ADVISE_SYSCALLS=y CONFIG_MEMBARRIER=y CONFIG_KALLSYMS=y # CONFIG_KALLSYMS_SELFTEST is not set CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_BASE_RELATIVE=y CONFIG_KCMP=y CONFIG_RSEQ=y # CONFIG_EMBEDDED is not set CONFIG_HAVE_PERF_EVENTS=y CONFIG_PERF_USE_VMALLOC=y # # Kernel Performance Events And Counters # CONFIG_PERF_EVENTS=y # CONFIG_DEBUG_PERF_USE_VMALLOC is not set # end of Kernel Performance Events And Counters CONFIG_SYSTEM_DATA_VERIFICATION=y CONFIG_PROFILING=y CONFIG_TRACEPOINTS=y # end of General setup CONFIG_LOONGARCH=y CONFIG_64BIT=y CONFIG_CPU_HAS_FPU=y CONFIG_CPU_HAS_PREFETCH=y CONFIG_GENERIC_BUG=y CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_GENERIC_CSUM=y CONFIG_GENERIC_HWEIGHT=y CONFIG_L1_CACHE_SHIFT=6 CONFIG_LOCKDEP_SUPPORT=y CONFIG_STACKTRACE_SUPPORT=y CONFIG_MACH_LOONGSON64=y CONFIG_FIX_EARLYCON_MEM=y CONFIG_PAGE_SIZE_16KB=y CONFIG_PGTABLE_3LEVEL=y CONFIG_PGTABLE_LEVELS=3 CONFIG_SCHED_OMIT_FRAME_POINTER=y # # Kernel type and options # # CONFIG_HZ_100 is not set CONFIG_HZ_250=y # CONFIG_HZ_300 is not set # CONFIG_HZ_1000 is not set CONFIG_HZ=250 CONFIG_SCHED_HRTICK=y # CONFIG_4KB_3LEVEL is not set # CONFIG_4KB_4LEVEL is not set # CONFIG_16KB_2LEVEL is not set CONFIG_16KB_3LEVEL=y # CONFIG_64KB_2LEVEL is not set # CONFIG_64KB_3LEVEL is not set CONFIG_CMDLINE="" # CONFIG_CMDLINE_BOOTLOADER is not set # CONFIG_CMDLINE_EXTEND is not set CONFIG_CMDLINE_FORCE=y # CONFIG_DMI is not set CONFIG_EFI=y CONFIG_EFI_STUB=y CONFIG_SMP=y CONFIG_HOTPLUG_CPU=y CONFIG_NR_CPUS=64 CONFIG_NUMA=y CONFIG_NODES_SHIFT=6 CONFIG_ARCH_FORCE_MAX_ORDER=11 CONFIG_ARCH_IOREMAP=y CONFIG_ARCH_WRITECOMBINE=y CONFIG_ARCH_STRICT_ALIGN=y CONFIG_KEXEC=y CONFIG_CRASH_DUMP=y CONFIG_RELOCATABLE=y # CONFIG_RANDOMIZE_BASE is not set # CONFIG_SECCOMP is not set # end of Kernel type and options CONFIG_ARCH_SELECT_MEMORY_MODEL=y CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_MMU=y CONFIG_ARCH_MMAP_RND_BITS_MIN=12 CONFIG_ARCH_MMAP_RND_BITS_MAX=18 # # Power management options # CONFIG_ARCH_SUSPEND_POSSIBLE=y CONFIG_ARCH_HIBERNATION_POSSIBLE=y CONFIG_SUSPEND=y CONFIG_SUSPEND_FREEZER=y CONFIG_HIBERNATE_CALLBACKS=y CONFIG_HIBERNATION=y # CONFIG_HIBERNATION_SNAPSHOT_DEV is not set CONFIG_PM_STD_PARTITION="" CONFIG_PM_SLEEP=y CONFIG_PM_SLEEP_SMP=y # CONFIG_PM_AUTOSLEEP is not set CONFIG_PM_USERSPACE_AUTOSLEEP=y CONFIG_PM_WAKELOCKS=y CONFIG_PM_WAKELOCKS_LIMIT=100 CONFIG_PM_WAKELOCKS_GC=y CONFIG_PM=y CONFIG_PM_DEBUG=y CONFIG_PM_ADVANCED_DEBUG=y CONFIG_PM_SLEEP_DEBUG=y CONFIG_PM_CLK=y CONFIG_PM_GENERIC_DOMAINS=y CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y CONFIG_PM_GENERIC_DOMAINS_SLEEP=y CONFIG_PM_GENERIC_DOMAINS_OF=y CONFIG_CPU_PM=y CONFIG_ARCH_SUPPORTS_ACPI=y CONFIG_ACPI=y CONFIG_ACPI_GENERIC_GSI=y CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=y # CONFIG_ACPI_DEBUGGER is not set # CONFIG_ACPI_SPCR_TABLE is not set CONFIG_ACPI_SLEEP=y # CONFIG_ACPI_EC_DEBUGFS is not set CONFIG_ACPI_AC=y CONFIG_ACPI_BATTERY=y # CONFIG_ACPI_BUTTON is not set # CONFIG_ACPI_TINY_POWER_BUTTON is not set CONFIG_ACPI_VIDEO=y CONFIG_ACPI_FAN=y # CONFIG_ACPI_TAD is not set CONFIG_ACPI_DOCK=y CONFIG_ACPI_CPU_FREQ_PSS=y CONFIG_ACPI_PROCESSOR_IDLE=y CONFIG_ACPI_MCFG=y CONFIG_ACPI_PROCESSOR=y CONFIG_ACPI_HOTPLUG_CPU=y CONFIG_ACPI_THERMAL=y CONFIG_ACPI_PLATFORM_PROFILE=y CONFIG_ARCH_HAS_ACPI_TABLE_UPGRADE=y # CONFIG_ACPI_TABLE_UPGRADE is not set # CONFIG_ACPI_DEBUG is not set CONFIG_ACPI_PCI_SLOT=y CONFIG_ACPI_CONTAINER=y CONFIG_ACPI_HED=y CONFIG_ACPI_CUSTOM_METHOD=y CONFIG_ACPI_NUMA=y # CONFIG_ACPI_HMAT is not set # CONFIG_ACPI_CONFIGFS is not set CONFIG_ACPI_PFRUT=y CONFIG_ACPI_FFH=y # CONFIG_PMIC_OPREGION is not set # end of Power management options # # Firmware Drivers # # # ARM System Control and Management Interface Protocol # CONFIG_ARM_SCMI_PROTOCOL=y # CONFIG_ARM_SCMI_RAW_MODE_SUPPORT is not set CONFIG_ARM_SCMI_HAVE_TRANSPORT=y CONFIG_ARM_SCMI_HAVE_MSG=y CONFIG_ARM_SCMI_TRANSPORT_VIRTIO=y CONFIG_ARM_SCMI_TRANSPORT_VIRTIO_VERSION1_COMPLIANCE=y CONFIG_ARM_SCMI_TRANSPORT_VIRTIO_ATOMIC_ENABLE=y CONFIG_ARM_SCMI_POWER_DOMAIN=y CONFIG_ARM_SCMI_POWER_CONTROL=y # end of ARM System Control and Management Interface Protocol CONFIG_ARM_SCPI_POWER_DOMAIN=y CONFIG_ISCSI_IBFT=y CONFIG_QCOM_SCM=y CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT=y # CONFIG_SYSFB_SIMPLEFB is not set # CONFIG_BCM47XX_NVRAM is not set # CONFIG_TEE_BNXT_FW is not set # CONFIG_GOOGLE_FIRMWARE is not set # # EFI (Extensible Firmware Interface) Support # CONFIG_EFI_ESRT=y CONFIG_EFI_RUNTIME_WRAPPERS=y CONFIG_EFI_GENERIC_STUB=y CONFIG_EFI_ZBOOT=y CONFIG_EFI_BOOTLOADER_CONTROL=y CONFIG_EFI_CAPSULE_LOADER=y CONFIG_EFI_TEST=y # CONFIG_RESET_ATTACK_MITIGATION is not set CONFIG_EFI_RCI2_TABLE=y # CONFIG_EFI_DISABLE_PCI_DMA is not set CONFIG_EFI_EARLYCON=y # CONFIG_EFI_CUSTOM_SSDT_OVERLAYS is not set # CONFIG_EFI_DISABLE_RUNTIME is not set # CONFIG_EFI_COCO_SECRET is not set # end of EFI (Extensible Firmware Interface) Support # # Tegra firmware driver # # end of Tegra firmware driver # end of Firmware Drivers # # General architecture-dependent options # CONFIG_CRASH_CORE=y CONFIG_KEXEC_CORE=y CONFIG_GENERIC_ENTRY=y CONFIG_HAVE_64BIT_ALIGNED_ACCESS=y CONFIG_ARCH_USE_BUILTIN_BSWAP=y CONFIG_HAVE_IOREMAP_PROT=y CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y CONFIG_HAVE_KPROBES_ON_FTRACE=y CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y CONFIG_HAVE_NMI=y CONFIG_TRACE_IRQFLAGS_SUPPORT=y CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_HAVE_DMA_CONTIGUOUS=y CONFIG_GENERIC_SMP_IDLE_THREAD=y CONFIG_ARCH_HAS_FORTIFY_SOURCE=y CONFIG_ARCH_WANTS_NO_INSTR=y CONFIG_HAVE_ASM_MODVERSIONS=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_RSEQ=y CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y CONFIG_HAVE_HW_BREAKPOINT=y CONFIG_HAVE_PERF_REGS=y CONFIG_HAVE_PERF_USER_STACK_DUMP=y CONFIG_MMU_GATHER_MERGE_VMAS=y CONFIG_MMU_LAZY_TLB_REFCOUNT=y CONFIG_ARCH_HAS_NMI_SAFE_THIS_CPU_OPS=y CONFIG_HAVE_ARCH_SECCOMP=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y CONFIG_HAVE_STACKPROTECTOR=y CONFIG_STACKPROTECTOR=y # CONFIG_STACKPROTECTOR_STRONG is not set CONFIG_LTO_NONE=y CONFIG_HAVE_CONTEXT_TRACKING_USER=y CONFIG_HAVE_TIF_NOHZ=y CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y CONFIG_HAVE_MOD_ARCH_SPECIFIC=y CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y CONFIG_ARCH_HAS_ELF_RANDOMIZE=y CONFIG_HAVE_ARCH_MMAP_RND_BITS=y CONFIG_HAVE_EXIT_THREAD=y CONFIG_ARCH_MMAP_RND_BITS=12 CONFIG_PAGE_SIZE_LESS_THAN_64KB=y CONFIG_PAGE_SIZE_LESS_THAN_256KB=y CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT=y # CONFIG_COMPAT_32BIT_TIME is not set CONFIG_ARCH_USE_MEMREMAP_PROT=y # CONFIG_LOCK_EVENT_COUNTS is not set CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y # # GCOV-based kernel profiling # # CONFIG_GCOV_KERNEL is not set # end of GCOV-based kernel profiling CONFIG_FUNCTION_ALIGNMENT=0 # end of General architecture-dependent options CONFIG_RT_MUTEXES=y CONFIG_BASE_SMALL=0 # CONFIG_MODULES is not set CONFIG_BLOCK=y # CONFIG_BLOCK_LEGACY_AUTOLOAD is not set CONFIG_BLK_RQ_ALLOC_TIME=y CONFIG_BLK_CGROUP_PUNT_BIO=y CONFIG_BLK_DEV_BSG_COMMON=y CONFIG_BLK_DEV_BSGLIB=y CONFIG_BLK_DEV_INTEGRITY=y CONFIG_BLK_DEV_INTEGRITY_T10=y # CONFIG_BLK_DEV_ZONED is not set # CONFIG_BLK_DEV_THROTTLING is not set CONFIG_BLK_WBT=y # CONFIG_BLK_WBT_MQ is not set CONFIG_BLK_CGROUP_IOLATENCY=y CONFIG_BLK_CGROUP_IOCOST=y # CONFIG_BLK_CGROUP_IOPRIO is not set CONFIG_BLK_DEBUG_FS=y # CONFIG_BLK_SED_OPAL is not set CONFIG_BLK_INLINE_ENCRYPTION=y # CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK is not set # # Partition Types # CONFIG_PARTITION_ADVANCED=y CONFIG_ACORN_PARTITION=y CONFIG_ACORN_PARTITION_CUMANA=y # CONFIG_ACORN_PARTITION_EESOX is not set CONFIG_ACORN_PARTITION_ICS=y CONFIG_ACORN_PARTITION_ADFS=y CONFIG_ACORN_PARTITION_POWERTEC=y # CONFIG_ACORN_PARTITION_RISCIX is not set CONFIG_AIX_PARTITION=y CONFIG_OSF_PARTITION=y CONFIG_AMIGA_PARTITION=y # CONFIG_ATARI_PARTITION is not set # CONFIG_MAC_PARTITION is not set # CONFIG_MSDOS_PARTITION is not set # CONFIG_LDM_PARTITION is not set # CONFIG_SGI_PARTITION is not set CONFIG_ULTRIX_PARTITION=y # CONFIG_SUN_PARTITION is not set # CONFIG_KARMA_PARTITION is not set # CONFIG_EFI_PARTITION is not set # CONFIG_SYSV68_PARTITION is not set # CONFIG_CMDLINE_PARTITION is not set # end of Partition Types CONFIG_BLK_MQ_PCI=y CONFIG_BLK_MQ_VIRTIO=y CONFIG_BLK_PM=y # # IO Schedulers # CONFIG_MQ_IOSCHED_DEADLINE=y # CONFIG_MQ_IOSCHED_KYBER is not set # CONFIG_IOSCHED_BFQ is not set # end of IO Schedulers CONFIG_PADATA=y CONFIG_ASN1=y CONFIG_UNINLINE_SPIN_UNLOCK=y CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y CONFIG_MUTEX_SPIN_ON_OWNER=y CONFIG_RWSEM_SPIN_ON_OWNER=y CONFIG_LOCK_SPIN_ON_OWNER=y CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y CONFIG_QUEUED_SPINLOCKS=y CONFIG_ARCH_USE_QUEUED_RWLOCKS=y CONFIG_QUEUED_RWLOCKS=y CONFIG_FREEZER=y # # Executable file formats # # CONFIG_BINFMT_ELF is not set CONFIG_ARCH_BINFMT_ELF_STATE=y CONFIG_BINFMT_SCRIPT=y CONFIG_BINFMT_MISC=y CONFIG_COREDUMP=y # end of Executable file formats # # Memory Management options # CONFIG_SWAP=y # CONFIG_ZSWAP is not set # # SLAB allocator options # CONFIG_SLAB=y # CONFIG_SLUB is not set CONFIG_SLAB_MERGE_DEFAULT=y CONFIG_SLAB_FREELIST_RANDOM=y CONFIG_SLAB_FREELIST_HARDENED=y # end of SLAB allocator options CONFIG_SHUFFLE_PAGE_ALLOCATOR=y # CONFIG_COMPAT_BRK is not set CONFIG_SELECT_MEMORY_MODEL=y CONFIG_SPARSEMEM_MANUAL=y CONFIG_SPARSEMEM=y CONFIG_SPARSEMEM_EXTREME=y CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y CONFIG_SPARSEMEM_VMEMMAP=y CONFIG_ARCH_WANT_OPTIMIZE_VMEMMAP=y CONFIG_HAVE_FAST_GUP=y CONFIG_ARCH_KEEP_MEMBLOCK=y CONFIG_MEMORY_ISOLATION=y CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y # CONFIG_MEMORY_HOTPLUG is not set CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_MEMORY_BALLOON=y # CONFIG_BALLOON_COMPACTION is not set CONFIG_COMPACTION=y CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1 CONFIG_PAGE_REPORTING=y CONFIG_MIGRATION=y CONFIG_CONTIG_ALLOC=y CONFIG_PHYS_ADDR_T_64BIT=y CONFIG_MMU_NOTIFIER=y # CONFIG_KSM is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 # CONFIG_TRANSPARENT_HUGEPAGE is not set CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y CONFIG_USE_PERCPU_NUMA_NODE_ID=y CONFIG_HAVE_SETUP_PER_CPU_AREA=y CONFIG_CMA=y # CONFIG_CMA_DEBUG is not set # CONFIG_CMA_DEBUGFS is not set # CONFIG_CMA_SYSFS is not set CONFIG_CMA_AREAS=19 # CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set CONFIG_PAGE_IDLE_FLAG=y # CONFIG_IDLE_PAGE_TRACKING is not set CONFIG_ZONE_DMA32=y CONFIG_HMM_MIRROR=y CONFIG_VM_EVENT_COUNTERS=y # CONFIG_PERCPU_STATS is not set CONFIG_GUP_TEST=y CONFIG_DMAPOOL_TEST=y CONFIG_ARCH_HAS_PTE_SPECIAL=y CONFIG_ANON_VMA_NAME=y CONFIG_USERFAULTFD=y # CONFIG_LRU_GEN is not set # # Data Access Monitoring # CONFIG_DAMON=y # CONFIG_DAMON_VADDR is not set CONFIG_DAMON_PADDR=y # CONFIG_DAMON_SYSFS is not set CONFIG_DAMON_RECLAIM=y # CONFIG_DAMON_LRU_SORT is not set # end of Data Access Monitoring # end of Memory Management options CONFIG_NET=y CONFIG_SKB_EXTENSIONS=y # # Networking options # CONFIG_PACKET=y # CONFIG_PACKET_DIAG is not set CONFIG_UNIX=y CONFIG_UNIX_SCM=y CONFIG_AF_UNIX_OOB=y CONFIG_UNIX_DIAG=y # CONFIG_TLS is not set CONFIG_XFRM=y CONFIG_XFRM_ALGO=y # CONFIG_XFRM_USER is not set CONFIG_XFRM_INTERFACE=y CONFIG_XFRM_SUB_POLICY=y CONFIG_XFRM_MIGRATE=y # CONFIG_XFRM_STATISTICS is not set CONFIG_XFRM_AH=y CONFIG_XFRM_ESP=y CONFIG_XFRM_IPCOMP=y # CONFIG_NET_KEY is not set CONFIG_SMC=y CONFIG_SMC_DIAG=y CONFIG_XDP_SOCKETS=y CONFIG_XDP_SOCKETS_DIAG=y CONFIG_NET_HANDSHAKE=y CONFIG_INET=y CONFIG_IP_MULTICAST=y CONFIG_IP_ADVANCED_ROUTER=y # CONFIG_IP_FIB_TRIE_STATS is not set # CONFIG_IP_MULTIPLE_TABLES is not set # CONFIG_IP_ROUTE_MULTIPATH is not set # CONFIG_IP_ROUTE_VERBOSE is not set CONFIG_IP_PNP=y CONFIG_IP_PNP_DHCP=y # CONFIG_IP_PNP_BOOTP is not set CONFIG_IP_PNP_RARP=y # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE_DEMUX is not set CONFIG_NET_IP_TUNNEL=y # CONFIG_IP_MROUTE is not set # CONFIG_SYN_COOKIES is not set CONFIG_NET_IPVTI=y CONFIG_NET_UDP_TUNNEL=y # CONFIG_NET_FOU is not set CONFIG_INET_AH=y CONFIG_INET_ESP=y # CONFIG_INET_ESP_OFFLOAD is not set # CONFIG_INET_ESPINTCP is not set CONFIG_INET_IPCOMP=y CONFIG_INET_TABLE_PERTURB_ORDER=16 CONFIG_INET_XFRM_TUNNEL=y CONFIG_INET_TUNNEL=y CONFIG_INET_DIAG=y CONFIG_INET_TCP_DIAG=y CONFIG_INET_UDP_DIAG=y # CONFIG_INET_RAW_DIAG is not set CONFIG_INET_DIAG_DESTROY=y # CONFIG_TCP_CONG_ADVANCED is not set CONFIG_TCP_CONG_CUBIC=y CONFIG_DEFAULT_TCP_CONG="cubic" # CONFIG_TCP_MD5SIG is not set CONFIG_IPV6=y CONFIG_IPV6_ROUTER_PREF=y # CONFIG_IPV6_ROUTE_INFO is not set # CONFIG_IPV6_OPTIMISTIC_DAD is not set # CONFIG_INET6_AH is not set CONFIG_INET6_ESP=y # CONFIG_INET6_ESP_OFFLOAD is not set # CONFIG_INET6_ESPINTCP is not set CONFIG_INET6_IPCOMP=y CONFIG_IPV6_MIP6=y CONFIG_INET6_XFRM_TUNNEL=y CONFIG_INET6_TUNNEL=y CONFIG_IPV6_VTI=y # CONFIG_IPV6_SIT is not set CONFIG_IPV6_TUNNEL=y # CONFIG_IPV6_MULTIPLE_TABLES is not set # CONFIG_IPV6_MROUTE is not set # CONFIG_IPV6_SEG6_LWTUNNEL is not set CONFIG_IPV6_SEG6_HMAC=y # CONFIG_IPV6_RPL_LWTUNNEL is not set CONFIG_IPV6_IOAM6_LWTUNNEL=y # CONFIG_MPTCP is not set # CONFIG_NETWORK_SECMARK is not set CONFIG_NET_PTP_CLASSIFY=y CONFIG_NETWORK_PHY_TIMESTAMPING=y # CONFIG_NETFILTER is not set CONFIG_BPFILTER=y # CONFIG_IP_DCCP is not set CONFIG_IP_SCTP=y CONFIG_SCTP_DBG_OBJCNT=y # CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y # CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set CONFIG_SCTP_COOKIE_HMAC_MD5=y CONFIG_SCTP_COOKIE_HMAC_SHA1=y CONFIG_INET_SCTP_DIAG=y # CONFIG_RDS is not set CONFIG_TIPC=y CONFIG_TIPC_MEDIA_IB=y # CONFIG_TIPC_MEDIA_UDP is not set CONFIG_TIPC_CRYPTO=y # CONFIG_TIPC_DIAG is not set CONFIG_ATM=y CONFIG_ATM_CLIP=y # CONFIG_ATM_CLIP_NO_ICMP is not set CONFIG_ATM_LANE=y CONFIG_ATM_MPOA=y CONFIG_ATM_BR2684=y # CONFIG_ATM_BR2684_IPFILTER is not set # CONFIG_L2TP is not set CONFIG_STP=y CONFIG_BRIDGE=y CONFIG_BRIDGE_IGMP_SNOOPING=y CONFIG_BRIDGE_MRP=y CONFIG_BRIDGE_CFM=y CONFIG_NET_DSA=y CONFIG_NET_DSA_TAG_NONE=y CONFIG_NET_DSA_TAG_AR9331=y CONFIG_NET_DSA_TAG_BRCM_COMMON=y CONFIG_NET_DSA_TAG_BRCM=y CONFIG_NET_DSA_TAG_BRCM_LEGACY=y CONFIG_NET_DSA_TAG_BRCM_PREPEND=y CONFIG_NET_DSA_TAG_HELLCREEK=y CONFIG_NET_DSA_TAG_GSWIP=y CONFIG_NET_DSA_TAG_DSA_COMMON=y CONFIG_NET_DSA_TAG_DSA=y # CONFIG_NET_DSA_TAG_EDSA is not set CONFIG_NET_DSA_TAG_MTK=y # CONFIG_NET_DSA_TAG_KSZ is not set # CONFIG_NET_DSA_TAG_OCELOT is not set CONFIG_NET_DSA_TAG_OCELOT_8021Q=y CONFIG_NET_DSA_TAG_QCA=y CONFIG_NET_DSA_TAG_RTL4_A=y CONFIG_NET_DSA_TAG_RTL8_4=y CONFIG_NET_DSA_TAG_RZN1_A5PSW=y CONFIG_NET_DSA_TAG_LAN9303=y CONFIG_NET_DSA_TAG_SJA1105=y CONFIG_NET_DSA_TAG_TRAILER=y CONFIG_NET_DSA_TAG_XRS700X=y # CONFIG_VLAN_8021Q is not set CONFIG_LLC=y CONFIG_LLC2=y CONFIG_ATALK=y CONFIG_DEV_APPLETALK=y # CONFIG_IPDDP is not set # CONFIG_X25 is not set CONFIG_LAPB=y # CONFIG_PHONET is not set # CONFIG_6LOWPAN is not set CONFIG_IEEE802154=y CONFIG_IEEE802154_NL802154_EXPERIMENTAL=y CONFIG_IEEE802154_SOCKET=y CONFIG_MAC802154=y # CONFIG_NET_SCHED is not set CONFIG_DCB=y CONFIG_DNS_RESOLVER=y CONFIG_BATMAN_ADV=y # CONFIG_BATMAN_ADV_BATMAN_V is not set # CONFIG_BATMAN_ADV_BLA is not set CONFIG_BATMAN_ADV_DAT=y # CONFIG_BATMAN_ADV_NC is not set CONFIG_BATMAN_ADV_MCAST=y CONFIG_BATMAN_ADV_DEBUG=y CONFIG_BATMAN_ADV_TRACING=y CONFIG_OPENVSWITCH=y CONFIG_VSOCKETS=y # CONFIG_VSOCKETS_DIAG is not set CONFIG_VSOCKETS_LOOPBACK=y CONFIG_VIRTIO_VSOCKETS=y CONFIG_VIRTIO_VSOCKETS_COMMON=y # CONFIG_NETLINK_DIAG is not set CONFIG_MPLS=y CONFIG_NET_MPLS_GSO=y CONFIG_MPLS_ROUTING=y CONFIG_MPLS_IPTUNNEL=y CONFIG_NET_NSH=y CONFIG_HSR=y CONFIG_NET_SWITCHDEV=y # CONFIG_NET_L3_MASTER_DEV is not set CONFIG_QRTR=y # CONFIG_QRTR_SMD is not set CONFIG_QRTR_TUN=y # CONFIG_QRTR_MHI is not set CONFIG_NET_NCSI=y CONFIG_NCSI_OEM_CMD_GET_MAC=y # CONFIG_NCSI_OEM_CMD_KEEP_PHY is not set CONFIG_PCPU_DEV_REFCNT=y CONFIG_MAX_SKB_FRAGS=17 CONFIG_RPS=y CONFIG_RFS_ACCEL=y CONFIG_SOCK_RX_QUEUE_MAPPING=y CONFIG_XPS=y # CONFIG_CGROUP_NET_PRIO is not set CONFIG_CGROUP_NET_CLASSID=y CONFIG_NET_RX_BUSY_POLL=y CONFIG_BQL=y CONFIG_NET_FLOW_LIMIT=y # # Network testing # CONFIG_NET_PKTGEN=y CONFIG_NET_DROP_MONITOR=y # end of Network testing # end of Networking options CONFIG_HAMRADIO=y # # Packet Radio protocols # CONFIG_AX25=y # CONFIG_AX25_DAMA_SLAVE is not set CONFIG_NETROM=y CONFIG_ROSE=y # # AX.25 network device drivers # # CONFIG_MKISS is not set # CONFIG_6PACK is not set CONFIG_BPQETHER=y # CONFIG_BAYCOM_SER_FDX is not set CONFIG_BAYCOM_SER_HDX=y # CONFIG_YAM is not set # end of AX.25 network device drivers CONFIG_CAN=y # CONFIG_CAN_RAW is not set # CONFIG_CAN_BCM is not set # CONFIG_CAN_GW is not set # CONFIG_CAN_J1939 is not set # CONFIG_CAN_ISOTP is not set CONFIG_BT=y # CONFIG_BT_BREDR is not set # CONFIG_BT_LE is not set CONFIG_BT_LEDS=y # CONFIG_BT_MSFTEXT is not set # CONFIG_BT_AOSPEXT is not set # CONFIG_BT_DEBUGFS is not set CONFIG_BT_SELFTEST=y # CONFIG_BT_FEATURE_DEBUG is not set # # Bluetooth device drivers # CONFIG_BT_INTEL=y CONFIG_BT_BCM=y CONFIG_BT_QCA=y CONFIG_BT_MTK=y # CONFIG_BT_HCIBTSDIO is not set CONFIG_BT_HCIUART=y CONFIG_BT_HCIUART_SERDEV=y CONFIG_BT_HCIUART_H4=y CONFIG_BT_HCIUART_NOKIA=y CONFIG_BT_HCIUART_BCSP=y CONFIG_BT_HCIUART_ATH3K=y CONFIG_BT_HCIUART_LL=y # CONFIG_BT_HCIUART_3WIRE is not set CONFIG_BT_HCIUART_INTEL=y # CONFIG_BT_HCIUART_RTL is not set # CONFIG_BT_HCIUART_QCA is not set # CONFIG_BT_HCIUART_AG6XX is not set # CONFIG_BT_HCIUART_MRVL is not set # CONFIG_BT_HCIBCM4377 is not set CONFIG_BT_HCIVHCI=y CONFIG_BT_MRVL=y CONFIG_BT_MRVL_SDIO=y # CONFIG_BT_MTKSDIO is not set CONFIG_BT_MTKUART=y CONFIG_BT_QCOMSMD=y CONFIG_BT_VIRTIO=y # CONFIG_BT_NXPUART is not set # end of Bluetooth device drivers CONFIG_AF_RXRPC=y CONFIG_AF_RXRPC_IPV6=y CONFIG_AF_RXRPC_INJECT_LOSS=y CONFIG_AF_RXRPC_INJECT_RX_DELAY=y CONFIG_AF_RXRPC_DEBUG=y # CONFIG_RXKAD is not set # CONFIG_RXPERF is not set CONFIG_AF_KCM=y CONFIG_STREAM_PARSER=y # CONFIG_MCTP is not set CONFIG_WIRELESS=y CONFIG_CFG80211=y # CONFIG_NL80211_TESTMODE is not set CONFIG_CFG80211_DEVELOPER_WARNINGS=y CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y # CONFIG_CFG80211_DEFAULT_PS is not set CONFIG_CFG80211_DEBUGFS=y CONFIG_CFG80211_CRDA_SUPPORT=y # CONFIG_CFG80211_WEXT is not set CONFIG_MAC80211=y CONFIG_MAC80211_HAS_RC=y CONFIG_MAC80211_RC_MINSTREL=y CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" CONFIG_MAC80211_MESH=y CONFIG_MAC80211_LEDS=y CONFIG_MAC80211_DEBUGFS=y # CONFIG_MAC80211_MESSAGE_TRACING is not set CONFIG_MAC80211_DEBUG_MENU=y CONFIG_MAC80211_NOINLINE=y CONFIG_MAC80211_VERBOSE_DEBUG=y # CONFIG_MAC80211_MLME_DEBUG is not set # CONFIG_MAC80211_STA_DEBUG is not set CONFIG_MAC80211_HT_DEBUG=y CONFIG_MAC80211_OCB_DEBUG=y CONFIG_MAC80211_IBSS_DEBUG=y CONFIG_MAC80211_PS_DEBUG=y # CONFIG_MAC80211_MPL_DEBUG is not set # CONFIG_MAC80211_MPATH_DEBUG is not set CONFIG_MAC80211_MHWMP_DEBUG=y # CONFIG_MAC80211_MESH_SYNC_DEBUG is not set # CONFIG_MAC80211_MESH_CSA_DEBUG is not set CONFIG_MAC80211_MESH_PS_DEBUG=y CONFIG_MAC80211_TDLS_DEBUG=y # CONFIG_MAC80211_DEBUG_COUNTERS is not set CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 # CONFIG_RFKILL is not set # CONFIG_NET_9P is not set # CONFIG_CAIF is not set CONFIG_CEPH_LIB=y CONFIG_CEPH_LIB_PRETTYDEBUG=y # CONFIG_CEPH_LIB_USE_DNS_RESOLVER is not set CONFIG_NFC=y # CONFIG_NFC_DIGITAL is not set CONFIG_NFC_NCI=y # CONFIG_NFC_NCI_UART is not set # CONFIG_NFC_HCI is not set # # Near Field Communication (NFC) devices # # CONFIG_NFC_VIRTUAL_NCI is not set # CONFIG_NFC_FDP is not set CONFIG_NFC_PN533=y CONFIG_NFC_PN533_I2C=y CONFIG_NFC_PN532_UART=y CONFIG_NFC_ST_NCI=y CONFIG_NFC_ST_NCI_I2C=y # CONFIG_NFC_NXP_NCI is not set CONFIG_NFC_S3FWRN5=y CONFIG_NFC_S3FWRN5_I2C=y # CONFIG_NFC_S3FWRN82_UART is not set # end of Near Field Communication (NFC) devices CONFIG_PSAMPLE=y CONFIG_NET_IFE=y CONFIG_LWTUNNEL=y # CONFIG_LWTUNNEL_BPF is not set CONFIG_DST_CACHE=y CONFIG_GRO_CELLS=y CONFIG_NET_SELFTESTS=y CONFIG_NET_SOCK_MSG=y CONFIG_NET_DEVLINK=y CONFIG_PAGE_POOL=y CONFIG_PAGE_POOL_STATS=y CONFIG_FAILOVER=y CONFIG_ETHTOOL_NETLINK=y # # Device Drivers # CONFIG_HAVE_PCI=y CONFIG_PCI=y CONFIG_PCI_DOMAINS=y CONFIG_PCI_DOMAINS_GENERIC=y # CONFIG_PCIEPORTBUS is not set CONFIG_PCIEASPM=y # CONFIG_PCIEASPM_DEFAULT is not set # CONFIG_PCIEASPM_POWERSAVE is not set CONFIG_PCIEASPM_POWER_SUPERSAVE=y # CONFIG_PCIEASPM_PERFORMANCE is not set # CONFIG_PCIE_PTM is not set CONFIG_PCI_MSI=y CONFIG_PCI_MSI_ARCH_FALLBACKS=y CONFIG_PCI_QUIRKS=y # CONFIG_PCI_DEBUG is not set CONFIG_PCI_REALLOC_ENABLE_AUTO=y CONFIG_PCI_STUB=y CONFIG_PCI_PF_STUB=y CONFIG_PCI_ATS=y CONFIG_PCI_ECAM=y CONFIG_PCI_BRIDGE_EMUL=y CONFIG_PCI_IOV=y # CONFIG_PCI_PRI is not set # CONFIG_PCI_PASID is not set CONFIG_PCI_LABEL=y CONFIG_VGA_ARB=y CONFIG_VGA_ARB_MAX_GPUS=16 CONFIG_HOTPLUG_PCI=y CONFIG_HOTPLUG_PCI_ACPI=y CONFIG_HOTPLUG_PCI_ACPI_IBM=y CONFIG_HOTPLUG_PCI_CPCI=y # CONFIG_HOTPLUG_PCI_SHPC is not set # # PCI controller drivers # CONFIG_PCI_AARDVARK=y CONFIG_PCIE_ALTERA=y # CONFIG_PCIE_ALTERA_MSI is not set CONFIG_PCIE_APPLE_MSI_DOORBELL_ADDR=0xfffff000 CONFIG_PCIE_APPLE=y # CONFIG_PCI_VERSATILE is not set CONFIG_PCIE_BRCMSTB=y # CONFIG_PCI_HOST_THUNDER_PEM is not set CONFIG_PCI_HOST_THUNDER_ECAM=y CONFIG_PCI_FTPCI100=y CONFIG_PCI_HOST_COMMON=y CONFIG_PCI_HOST_GENERIC=y CONFIG_PCI_LOONGSON=y CONFIG_PCIE_MEDIATEK=y # CONFIG_PCIE_MEDIATEK_GEN3 is not set CONFIG_PCIE_MT7621=y # CONFIG_PCIE_MICROCHIP_HOST is not set CONFIG_PCI_TEGRA=y # CONFIG_PCIE_RCAR_HOST is not set CONFIG_PCIE_ROCKCHIP=y CONFIG_PCIE_ROCKCHIP_HOST=y CONFIG_PCI_V3_SEMI=y CONFIG_PCI_XGENE=y # CONFIG_PCI_XGENE_MSI is not set # CONFIG_PCIE_XILINX is not set CONFIG_PCIE_XILINX_NWL=y CONFIG_PCIE_XILINX_CPM=y # # Cadence-based PCIe controllers # CONFIG_PCIE_CADENCE=y CONFIG_PCIE_CADENCE_HOST=y CONFIG_PCIE_CADENCE_PLAT=y CONFIG_PCIE_CADENCE_PLAT_HOST=y # CONFIG_PCI_J721E_HOST is not set # end of Cadence-based PCIe controllers # # DesignWare-based PCIe controllers # CONFIG_PCIE_DW=y CONFIG_PCIE_DW_HOST=y # CONFIG_PCIE_AL is not set CONFIG_PCI_MESON=y CONFIG_PCIE_ARTPEC6=y CONFIG_PCIE_ARTPEC6_HOST=y CONFIG_PCIE_BT1=y CONFIG_PCI_IMX6=y CONFIG_PCI_IMX6_HOST=y CONFIG_PCI_LAYERSCAPE=y CONFIG_PCI_HISI=y # CONFIG_PCIE_KIRIN is not set # CONFIG_PCIE_HISI_STB is not set CONFIG_PCIE_INTEL_GW=y # CONFIG_PCIE_KEEMBAY_HOST is not set CONFIG_PCIE_ARMADA_8K=y # CONFIG_PCIE_TEGRA194_HOST is not set CONFIG_PCIE_DW_PLAT=y CONFIG_PCIE_DW_PLAT_HOST=y CONFIG_PCIE_QCOM=y CONFIG_PCIE_ROCKCHIP_DW_HOST=y CONFIG_PCI_EXYNOS=y # CONFIG_PCIE_FU740 is not set CONFIG_PCIE_UNIPHIER=y CONFIG_PCIE_SPEAR13XX=y # CONFIG_PCI_DRA7XX_HOST is not set # CONFIG_PCI_KEYSTONE_HOST is not set # CONFIG_PCIE_VISCONTI_HOST is not set # end of DesignWare-based PCIe controllers # # Mobiveil-based PCIe controllers # CONFIG_PCIE_MOBIVEIL=y CONFIG_PCIE_MOBIVEIL_HOST=y CONFIG_PCIE_LAYERSCAPE_GEN4=y # CONFIG_PCIE_MOBIVEIL_PLAT is not set # end of Mobiveil-based PCIe controllers # end of PCI controller drivers # # PCI Endpoint # # CONFIG_PCI_ENDPOINT is not set # end of PCI Endpoint # # PCI switch controller drivers # CONFIG_PCI_SW_SWITCHTEC=y # end of PCI switch controller drivers # CONFIG_CXL_BUS is not set CONFIG_PCCARD=y # CONFIG_PCMCIA is not set # CONFIG_CARDBUS is not set # # PC-card bridges # # CONFIG_YENTA is not set CONFIG_RAPIDIO=y CONFIG_RAPIDIO_DISC_TIMEOUT=30 CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS=y CONFIG_RAPIDIO_DMA_ENGINE=y # CONFIG_RAPIDIO_DEBUG is not set CONFIG_RAPIDIO_ENUM_BASIC=y # CONFIG_RAPIDIO_CHMAN is not set CONFIG_RAPIDIO_MPORT_CDEV=y # # RapidIO Switch drivers # CONFIG_RAPIDIO_CPS_XX=y # CONFIG_RAPIDIO_CPS_GEN2 is not set # CONFIG_RAPIDIO_RXS_GEN3 is not set # end of RapidIO Switch drivers # # Generic Driver Options # CONFIG_AUXILIARY_BUS=y CONFIG_UEVENT_HELPER=y CONFIG_UEVENT_HELPER_PATH="" # CONFIG_DEVTMPFS is not set CONFIG_STANDALONE=y # CONFIG_PREVENT_FIRMWARE_BUILD is not set # # Firmware loader # CONFIG_FW_LOADER=y CONFIG_FW_LOADER_PAGED_BUF=y CONFIG_FW_LOADER_SYSFS=y CONFIG_EXTRA_FIRMWARE="" # CONFIG_FW_LOADER_USER_HELPER is not set # CONFIG_FW_LOADER_COMPRESS is not set # CONFIG_FW_CACHE is not set CONFIG_FW_UPLOAD=y # end of Firmware loader CONFIG_WANT_DEV_COREDUMP=y CONFIG_ALLOW_DEV_COREDUMP=y CONFIG_DEV_COREDUMP=y # CONFIG_DEBUG_DRIVER is not set # CONFIG_DEBUG_DEVRES is not set CONFIG_DEBUG_TEST_DRIVER_REMOVE=y CONFIG_GENERIC_CPU_AUTOPROBE=y CONFIG_SOC_BUS=y CONFIG_REGMAP=y CONFIG_REGMAP_I2C=y CONFIG_REGMAP_MMIO=y CONFIG_REGMAP_IRQ=y CONFIG_DMA_SHARED_BUFFER=y CONFIG_DMA_FENCE_TRACE=y CONFIG_FW_DEVLINK_SYNC_STATE_TIMEOUT=y # end of Generic Driver Options # # Bus devices # # CONFIG_ARM_INTEGRATOR_LM is not set CONFIG_BT1_APB=y # CONFIG_BT1_AXI is not set # CONFIG_HISILICON_LPC is not set # CONFIG_INTEL_IXP4XX_EB is not set CONFIG_QCOM_EBI2=y CONFIG_MHI_BUS=y # CONFIG_MHI_BUS_DEBUG is not set CONFIG_MHI_BUS_PCI_GENERIC=y # CONFIG_MHI_BUS_EP is not set # end of Bus devices # CONFIG_CONNECTOR is not set # # Firmware Drivers # # # ARM System Control and Management Interface Protocol # # end of ARM System Control and Management Interface Protocol # # EFI (Extensible Firmware Interface) Support # # end of EFI (Extensible Firmware Interface) Support # # Tegra firmware driver # # end of Tegra firmware driver # end of Firmware Drivers CONFIG_GNSS=y # CONFIG_GNSS_MTK_SERIAL is not set # CONFIG_GNSS_SIRF_SERIAL is not set # CONFIG_GNSS_UBX_SERIAL is not set # CONFIG_MTD is not set CONFIG_DTC=y CONFIG_OF=y # CONFIG_OF_UNITTEST is not set CONFIG_OF_ALL_DTBS=y CONFIG_OF_FLATTREE=y CONFIG_OF_EARLY_FLATTREE=y CONFIG_OF_KOBJ=y CONFIG_OF_DYNAMIC=y CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y CONFIG_OF_RESERVED_MEM=y CONFIG_OF_RESOLVE=y CONFIG_OF_OVERLAY=y CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y # CONFIG_PARPORT is not set CONFIG_PNP=y CONFIG_PNP_DEBUG_MESSAGES=y # # Protocols # # CONFIG_ISAPNP is not set CONFIG_PNPACPI=y # CONFIG_BLK_DEV is not set # # NVME Support # CONFIG_NVME_COMMON=y CONFIG_NVME_CORE=y CONFIG_BLK_DEV_NVME=y CONFIG_NVME_MULTIPATH=y CONFIG_NVME_VERBOSE_ERRORS=y # CONFIG_NVME_HWMON is not set CONFIG_NVME_FABRICS=y # CONFIG_NVME_RDMA is not set # CONFIG_NVME_FC is not set CONFIG_NVME_TCP=y CONFIG_NVME_AUTH=y CONFIG_NVME_TARGET=y CONFIG_NVME_TARGET_PASSTHRU=y CONFIG_NVME_TARGET_LOOP=y # CONFIG_NVME_TARGET_RDMA is not set # CONFIG_NVME_TARGET_FC is not set CONFIG_NVME_TARGET_TCP=y # CONFIG_NVME_TARGET_AUTH is not set # end of NVME Support # # Misc devices # CONFIG_SENSORS_LIS3LV02D=y # CONFIG_AD525X_DPOT is not set CONFIG_DUMMY_IRQ=y # CONFIG_PHANTOM is not set CONFIG_TIFM_CORE=y # CONFIG_TIFM_7XX1 is not set CONFIG_ICS932S401=y CONFIG_ATMEL_SSC=y # CONFIG_ENCLOSURE_SERVICES is not set CONFIG_SMPRO_ERRMON=y CONFIG_SMPRO_MISC=y CONFIG_HP_ILO=y CONFIG_QCOM_COINCELL=y # CONFIG_APDS9802ALS is not set CONFIG_ISL29003=y # CONFIG_ISL29020 is not set CONFIG_SENSORS_TSL2550=y CONFIG_SENSORS_BH1770=y # CONFIG_SENSORS_APDS990X is not set # CONFIG_HMC6352 is not set # CONFIG_DS1682 is not set # CONFIG_PCH_PHUB is not set CONFIG_SRAM=y # CONFIG_DW_XDATA_PCIE is not set CONFIG_PCI_ENDPOINT_TEST=y # CONFIG_XILINX_SDFEC is not set CONFIG_OPEN_DICE=y # CONFIG_VCPU_STALL_DETECTOR is not set CONFIG_C2PORT=y # # EEPROM support # # CONFIG_EEPROM_AT24 is not set CONFIG_EEPROM_LEGACY=y # CONFIG_EEPROM_MAX6875 is not set CONFIG_EEPROM_93CX6=y CONFIG_EEPROM_IDT_89HPESX=y CONFIG_EEPROM_EE1004=y # end of EEPROM support CONFIG_CB710_CORE=y # CONFIG_CB710_DEBUG is not set CONFIG_CB710_DEBUG_ASSUMPTIONS=y # # Texas Instruments shared transport line discipline # CONFIG_TI_ST=y # end of Texas Instruments shared transport line discipline CONFIG_SENSORS_LIS3_I2C=y CONFIG_ALTERA_STAPL=y CONFIG_GENWQE=y CONFIG_GENWQE_PLATFORM_ERROR_RECOVERY=0 CONFIG_ECHO=y # CONFIG_BCM_VK is not set # CONFIG_MISC_ALCOR_PCI is not set # CONFIG_MISC_RTSX_PCI is not set CONFIG_UACCE=y CONFIG_PVPANIC=y CONFIG_PVPANIC_MMIO=y # CONFIG_PVPANIC_PCI is not set CONFIG_GP_PCI1XXXX=y # end of Misc devices # # SCSI device support # CONFIG_SCSI_MOD=y CONFIG_RAID_ATTRS=y CONFIG_SCSI_COMMON=y CONFIG_SCSI=y CONFIG_SCSI_DMA=y CONFIG_SCSI_PROC_FS=y # # SCSI support type (disk, tape, CD-ROM) # # CONFIG_BLK_DEV_SD is not set # CONFIG_CHR_DEV_ST is not set # CONFIG_CHR_DEV_SG is not set CONFIG_BLK_DEV_BSG=y CONFIG_CHR_DEV_SCH=y CONFIG_SCSI_CONSTANTS=y # CONFIG_SCSI_LOGGING is not set # CONFIG_SCSI_SCAN_ASYNC is not set # # SCSI Transports # CONFIG_SCSI_SPI_ATTRS=y # CONFIG_SCSI_FC_ATTRS is not set CONFIG_SCSI_ISCSI_ATTRS=y CONFIG_SCSI_SAS_ATTRS=y CONFIG_SCSI_SAS_LIBSAS=y # CONFIG_SCSI_SAS_HOST_SMP is not set CONFIG_SCSI_SRP_ATTRS=y # end of SCSI Transports CONFIG_SCSI_LOWLEVEL=y CONFIG_ISCSI_TCP=y CONFIG_ISCSI_BOOT_SYSFS=y CONFIG_SCSI_CXGB3_ISCSI=y # CONFIG_SCSI_CXGB4_ISCSI is not set # CONFIG_SCSI_BNX2_ISCSI is not set # CONFIG_BE2ISCSI is not set CONFIG_BLK_DEV_3W_XXXX_RAID=y CONFIG_SCSI_HPSA=y CONFIG_SCSI_3W_9XXX=y CONFIG_SCSI_3W_SAS=y # CONFIG_SCSI_ACARD is not set CONFIG_SCSI_AACRAID=y # CONFIG_SCSI_AIC7XXX is not set # CONFIG_SCSI_AIC79XX is not set # CONFIG_SCSI_AIC94XX is not set # CONFIG_SCSI_MVSAS is not set # CONFIG_SCSI_MVUMI is not set CONFIG_SCSI_ADVANSYS=y # CONFIG_SCSI_ARCMSR is not set CONFIG_SCSI_ESAS2R=y # CONFIG_MEGARAID_NEWGEN is not set CONFIG_MEGARAID_LEGACY=y CONFIG_MEGARAID_SAS=y CONFIG_SCSI_MPT3SAS=y CONFIG_SCSI_MPT2SAS_MAX_SGE=128 CONFIG_SCSI_MPT3SAS_MAX_SGE=128 # CONFIG_SCSI_MPT2SAS is not set CONFIG_SCSI_MPI3MR=y CONFIG_SCSI_SMARTPQI=y CONFIG_SCSI_HPTIOP=y # CONFIG_SCSI_BUSLOGIC is not set CONFIG_SCSI_MYRB=y CONFIG_SCSI_MYRS=y CONFIG_SCSI_SNIC=y CONFIG_SCSI_SNIC_DEBUG_FS=y CONFIG_SCSI_DMX3191D=y # CONFIG_SCSI_FDOMAIN_PCI is not set # CONFIG_SCSI_IPS is not set # CONFIG_SCSI_INITIO is not set # CONFIG_SCSI_INIA100 is not set # CONFIG_SCSI_STEX is not set CONFIG_SCSI_SYM53C8XX_2=y CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 CONFIG_SCSI_SYM53C8XX_MMIO=y # CONFIG_SCSI_IPR is not set CONFIG_SCSI_QLOGIC_1280=y # CONFIG_SCSI_QLA_ISCSI is not set # CONFIG_SCSI_DC395x is not set CONFIG_SCSI_AM53C974=y CONFIG_SCSI_WD719X=y # CONFIG_SCSI_DEBUG is not set CONFIG_SCSI_PMCRAID=y CONFIG_SCSI_PM8001=y # CONFIG_SCSI_VIRTIO is not set CONFIG_SCSI_DH=y CONFIG_SCSI_DH_RDAC=y CONFIG_SCSI_DH_HP_SW=y CONFIG_SCSI_DH_EMC=y # CONFIG_SCSI_DH_ALUA is not set # end of SCSI device support # CONFIG_ATA is not set # CONFIG_MD is not set # CONFIG_TARGET_CORE is not set CONFIG_FUSION=y CONFIG_FUSION_SPI=y # CONFIG_FUSION_SAS is not set CONFIG_FUSION_MAX_SGE=128 CONFIG_FUSION_CTL=y # CONFIG_FUSION_LOGGING is not set # # IEEE 1394 (FireWire) support # CONFIG_FIREWIRE=y CONFIG_FIREWIRE_OHCI=y CONFIG_FIREWIRE_SBP2=y # CONFIG_FIREWIRE_NET is not set CONFIG_FIREWIRE_NOSY=y # end of IEEE 1394 (FireWire) support CONFIG_NETDEVICES=y CONFIG_MII=y # CONFIG_NET_CORE is not set CONFIG_ARCNET=y CONFIG_ARCNET_1201=y # CONFIG_ARCNET_1051 is not set CONFIG_ARCNET_RAW=y CONFIG_ARCNET_CAP=y # CONFIG_ARCNET_COM90xx is not set CONFIG_ARCNET_COM90xxIO=y # CONFIG_ARCNET_RIM_I is not set CONFIG_ARCNET_COM20020=y # CONFIG_ARCNET_COM20020_PCI is not set CONFIG_ATM_DRIVERS=y # CONFIG_ATM_DUMMY is not set CONFIG_ATM_TCP=y CONFIG_ATM_LANAI=y CONFIG_ATM_ENI=y # CONFIG_ATM_ENI_DEBUG is not set # CONFIG_ATM_ENI_TUNE_BURST is not set CONFIG_ATM_NICSTAR=y CONFIG_ATM_NICSTAR_USE_SUNI=y # CONFIG_ATM_NICSTAR_USE_IDT77105 is not set # CONFIG_ATM_IDT77252 is not set CONFIG_ATM_IA=y CONFIG_ATM_IA_DEBUG=y CONFIG_ATM_FORE200E=y CONFIG_ATM_FORE200E_USE_TASKLET=y CONFIG_ATM_FORE200E_TX_RETRY=16 CONFIG_ATM_FORE200E_DEBUG=0 # CONFIG_ATM_HE is not set CONFIG_ATM_SOLOS=y # # Distributed Switch Architecture drivers # CONFIG_B53=y CONFIG_B53_MDIO_DRIVER=y CONFIG_B53_MMAP_DRIVER=y # CONFIG_B53_SRAB_DRIVER is not set # CONFIG_B53_SERDES is not set CONFIG_NET_DSA_BCM_SF2=y # CONFIG_NET_DSA_LOOP is not set # CONFIG_NET_DSA_LANTIQ_GSWIP is not set CONFIG_NET_DSA_MT7530=y CONFIG_NET_DSA_MT7530_MDIO=y CONFIG_NET_DSA_MT7530_MMIO=y # CONFIG_NET_DSA_MV88E6060 is not set # CONFIG_NET_DSA_MICROCHIP_KSZ_COMMON is not set # CONFIG_NET_DSA_MV88E6XXX is not set CONFIG_NET_DSA_AR9331=y CONFIG_NET_DSA_QCA8K=y CONFIG_NET_DSA_QCA8K_LEDS_SUPPORT=y CONFIG_NET_DSA_XRS700X=y CONFIG_NET_DSA_XRS700X_I2C=y CONFIG_NET_DSA_XRS700X_MDIO=y CONFIG_NET_DSA_REALTEK=y # CONFIG_NET_DSA_REALTEK_MDIO is not set # CONFIG_NET_DSA_REALTEK_SMI is not set CONFIG_NET_DSA_REALTEK_RTL8365MB=y CONFIG_NET_DSA_REALTEK_RTL8366RB=y CONFIG_NET_DSA_SMSC_LAN9303=y # CONFIG_NET_DSA_SMSC_LAN9303_I2C is not set CONFIG_NET_DSA_SMSC_LAN9303_MDIO=y # CONFIG_NET_DSA_VITESSE_VSC73XX_PLATFORM is not set # end of Distributed Switch Architecture drivers CONFIG_ETHERNET=y CONFIG_MDIO=y # CONFIG_NET_VENDOR_3COM is not set # CONFIG_NET_VENDOR_ACTIONS is not set CONFIG_NET_VENDOR_ADAPTEC=y CONFIG_ADAPTEC_STARFIRE=y CONFIG_NET_VENDOR_AGERE=y CONFIG_ET131X=y # CONFIG_NET_VENDOR_ALACRITECH is not set CONFIG_NET_VENDOR_ALTEON=y CONFIG_ACENIC=y CONFIG_ACENIC_OMIT_TIGON_I=y CONFIG_ALTERA_TSE=y CONFIG_NET_VENDOR_AMAZON=y CONFIG_ENA_ETHERNET=y CONFIG_NET_VENDOR_AMD=y # CONFIG_AMD8111_ETH is not set CONFIG_PCNET32=y CONFIG_AMD_XGBE=y CONFIG_AMD_XGBE_DCB=y CONFIG_PDS_CORE=y # CONFIG_NET_XGENE is not set # CONFIG_NET_XGENE_V2 is not set CONFIG_NET_VENDOR_AQUANTIA=y # CONFIG_AQTION is not set # CONFIG_NET_VENDOR_ARC is not set # CONFIG_NET_VENDOR_ASIX is not set CONFIG_NET_VENDOR_ATHEROS=y # CONFIG_ATL2 is not set CONFIG_ATL1=y CONFIG_ATL1E=y CONFIG_ATL1C=y # CONFIG_ALX is not set # CONFIG_CX_ECAT is not set CONFIG_NET_VENDOR_BROADCOM=y CONFIG_B44=y CONFIG_B44_PCI_AUTOSELECT=y CONFIG_B44_PCICORE_AUTOSELECT=y CONFIG_B44_PCI=y CONFIG_BCM4908_ENET=y # CONFIG_BCMGENET is not set CONFIG_BNX2=y CONFIG_CNIC=y # CONFIG_TIGON3 is not set # CONFIG_BNX2X is not set CONFIG_BGMAC=y # CONFIG_BGMAC_BCMA is not set CONFIG_BGMAC_PLATFORM=y CONFIG_SYSTEMPORT=y CONFIG_BNXT=y # CONFIG_BNXT_SRIOV is not set # CONFIG_BNXT_FLOWER_OFFLOAD is not set CONFIG_BNXT_DCB=y CONFIG_BNXT_HWMON=y CONFIG_BCMASP=y CONFIG_NET_VENDOR_CADENCE=y CONFIG_MACB=y CONFIG_MACB_USE_HWSTAMP=y CONFIG_MACB_PCI=y CONFIG_NET_CALXEDA_XGMAC=y # CONFIG_NET_VENDOR_CAVIUM is not set CONFIG_NET_VENDOR_CHELSIO=y # CONFIG_CHELSIO_T1 is not set CONFIG_CHELSIO_T3=y # CONFIG_CHELSIO_T4 is not set # CONFIG_CHELSIO_T4VF is not set CONFIG_CHELSIO_LIB=y CONFIG_NET_VENDOR_CIRRUS=y CONFIG_CS89x0=y CONFIG_CS89x0_PLATFORM=y CONFIG_EP93XX_ETH=y # CONFIG_NET_VENDOR_CISCO is not set # CONFIG_NET_VENDOR_CORTINA is not set # CONFIG_NET_VENDOR_DAVICOM is not set CONFIG_DNET=y CONFIG_NET_VENDOR_DEC=y # CONFIG_NET_TULIP is not set CONFIG_NET_VENDOR_DLINK=y CONFIG_DL2K=y # CONFIG_SUNDANCE is not set CONFIG_NET_VENDOR_EMULEX=y # CONFIG_BE2NET is not set CONFIG_NET_VENDOR_ENGLEDER=y CONFIG_TSNEP=y CONFIG_TSNEP_SELFTESTS=y CONFIG_NET_VENDOR_EZCHIP=y CONFIG_EZCHIP_NPS_MANAGEMENT_ENET=y # CONFIG_NET_VENDOR_FARADAY is not set CONFIG_NET_VENDOR_FREESCALE=y # CONFIG_FEC is not set CONFIG_FSL_FMAN=y CONFIG_FSL_PQ_MDIO=y CONFIG_FSL_XGMAC_MDIO=y # CONFIG_GIANFAR is not set CONFIG_FSL_DPAA2_SWITCH=y CONFIG_FSL_ENETC_CORE=y # CONFIG_FSL_ENETC is not set CONFIG_FSL_ENETC_VF=y CONFIG_FSL_ENETC_IERB=y CONFIG_FSL_ENETC_MDIO=y CONFIG_FSL_ENETC_PTP_CLOCK=y # CONFIG_NET_VENDOR_FUNGIBLE is not set CONFIG_NET_VENDOR_GOOGLE=y # CONFIG_NET_VENDOR_HISILICON is not set # CONFIG_NET_VENDOR_HUAWEI is not set CONFIG_NET_VENDOR_I825XX=y CONFIG_NET_VENDOR_INTEL=y CONFIG_E100=y # CONFIG_E1000 is not set CONFIG_E1000E=y # CONFIG_IGB is not set CONFIG_IGBVF=y CONFIG_IXGBE=y CONFIG_IXGBE_HWMON=y # CONFIG_IXGBE_DCB is not set CONFIG_IXGBEVF=y CONFIG_I40E=y # CONFIG_I40E_DCB is not set CONFIG_IAVF=y CONFIG_I40EVF=y # CONFIG_ICE is not set CONFIG_FM10K=y # CONFIG_IGC is not set CONFIG_JME=y CONFIG_KORINA=y CONFIG_NET_VENDOR_LITEX=y CONFIG_LITEX_LITEETH=y CONFIG_NET_VENDOR_MARVELL=y # CONFIG_MV643XX_ETH is not set CONFIG_MVMDIO=y CONFIG_MVNETA=y CONFIG_MVPP2=y # CONFIG_MVPP2_PTP is not set # CONFIG_PXA168_ETH is not set CONFIG_SKGE=y # CONFIG_SKGE_DEBUG is not set # CONFIG_SKGE_GENESIS is not set # CONFIG_SKY2 is not set CONFIG_OCTEONTX2_MBOX=y # CONFIG_OCTEONTX2_AF is not set CONFIG_OCTEONTX2_PF=y # CONFIG_OCTEONTX2_VF is not set CONFIG_OCTEON_EP=y CONFIG_NET_VENDOR_MEDIATEK=y CONFIG_NET_MEDIATEK_SOC_WED=y CONFIG_NET_MEDIATEK_SOC=y # CONFIG_NET_MEDIATEK_STAR_EMAC is not set CONFIG_NET_VENDOR_MELLANOX=y CONFIG_MLX4_EN=y CONFIG_MLX4_EN_DCB=y CONFIG_MLX4_CORE=y CONFIG_MLX4_DEBUG=y CONFIG_MLX4_CORE_GEN2=y CONFIG_MLX5_CORE=y CONFIG_MLX5_FPGA=y # CONFIG_MLX5_CORE_EN is not set # CONFIG_MLXSW_CORE is not set CONFIG_MLXFW=y CONFIG_MLXBF_GIGE=y CONFIG_NET_VENDOR_MICREL=y # CONFIG_KS8842 is not set CONFIG_KS8851_MLL=y # CONFIG_KSZ884X_PCI is not set # CONFIG_NET_VENDOR_MICROCHIP is not set # CONFIG_NET_VENDOR_MICROSEMI is not set CONFIG_NET_VENDOR_MICROSOFT=y # CONFIG_NET_VENDOR_MYRI is not set CONFIG_FEALNX=y # CONFIG_NET_VENDOR_NI is not set # CONFIG_NET_VENDOR_NATSEMI is not set # CONFIG_NET_VENDOR_NETERION is not set # CONFIG_NET_VENDOR_NETRONOME is not set # CONFIG_NET_VENDOR_NVIDIA is not set CONFIG_LPC_ENET=y # CONFIG_NET_VENDOR_OKI is not set CONFIG_ETHOC=y CONFIG_NET_VENDOR_PACKET_ENGINES=y # CONFIG_HAMACHI is not set CONFIG_YELLOWFIN=y CONFIG_NET_VENDOR_PENSANDO=y CONFIG_IONIC=y # CONFIG_NET_VENDOR_QLOGIC is not set # CONFIG_NET_VENDOR_BROCADE is not set # CONFIG_NET_VENDOR_QUALCOMM is not set # CONFIG_NET_VENDOR_RDC is not set # CONFIG_NET_VENDOR_REALTEK is not set CONFIG_NET_VENDOR_RENESAS=y CONFIG_SH_ETH=y CONFIG_RAVB=y # CONFIG_RENESAS_ETHER_SWITCH is not set # CONFIG_NET_VENDOR_ROCKER is not set # CONFIG_NET_VENDOR_SAMSUNG is not set CONFIG_NET_VENDOR_SEEQ=y # CONFIG_NET_VENDOR_SILAN is not set # CONFIG_NET_VENDOR_SIS is not set CONFIG_NET_VENDOR_SOLARFLARE=y CONFIG_SFC=y # CONFIG_SFC_MCDI_MON is not set # CONFIG_SFC_SRIOV is not set CONFIG_SFC_MCDI_LOGGING=y CONFIG_SFC_FALCON=y CONFIG_SFC_SIENA=y CONFIG_SFC_SIENA_MCDI_MON=y # CONFIG_SFC_SIENA_SRIOV is not set # CONFIG_SFC_SIENA_MCDI_LOGGING is not set # CONFIG_NET_VENDOR_SMSC is not set CONFIG_NET_VENDOR_SOCIONEXT=y # CONFIG_SNI_AVE is not set # CONFIG_SNI_NETSEC is not set # CONFIG_NET_VENDOR_STMICRO is not set # CONFIG_NET_VENDOR_SUN is not set # CONFIG_NET_VENDOR_SUNPLUS is not set CONFIG_NET_VENDOR_SYNOPSYS=y CONFIG_DWC_XLGMAC=y CONFIG_DWC_XLGMAC_PCI=y # CONFIG_NET_VENDOR_TEHUTI is not set CONFIG_NET_VENDOR_TI=y # CONFIG_TI_DAVINCI_EMAC is not set CONFIG_TI_DAVINCI_MDIO=y # CONFIG_TI_CPSW_PHY_SEL is not set CONFIG_TI_CPSW=y CONFIG_TI_CPSW_SWITCHDEV=y # CONFIG_TI_CPTS is not set # CONFIG_TLAN is not set # CONFIG_NET_VENDOR_VERTEXCOM is not set # CONFIG_NET_VENDOR_VIA is not set CONFIG_NET_VENDOR_WANGXUN=y CONFIG_LIBWX=y CONFIG_NGBE=y CONFIG_TXGBE=y # CONFIG_NET_VENDOR_WIZNET is not set CONFIG_NET_VENDOR_XILINX=y CONFIG_XILINX_EMACLITE=y CONFIG_XILINX_AXI_EMAC=y # CONFIG_XILINX_LL_TEMAC is not set CONFIG_FDDI=y CONFIG_DEFXX=y # CONFIG_SKFP is not set CONFIG_HIPPI=y # CONFIG_ROADRUNNER is not set CONFIG_NET_SB1000=y CONFIG_PHYLINK=y CONFIG_PHYLIB=y CONFIG_SWPHY=y # CONFIG_LED_TRIGGER_PHY is not set CONFIG_PHYLIB_LEDS=y CONFIG_FIXED_PHY=y CONFIG_SFP=y # # MII PHY device drivers # CONFIG_AMD_PHY=y # CONFIG_MESON_GXL_PHY is not set # CONFIG_ADIN_PHY is not set CONFIG_ADIN1100_PHY=y # CONFIG_AQUANTIA_PHY is not set CONFIG_AX88796B_PHY=y # CONFIG_BROADCOM_PHY is not set CONFIG_BCM54140_PHY=y CONFIG_BCM63XX_PHY=y CONFIG_BCM7XXX_PHY=y # CONFIG_BCM84881_PHY is not set # CONFIG_BCM87XX_PHY is not set CONFIG_BCM_CYGNUS_PHY=y CONFIG_BCM_NET_PHYLIB=y # CONFIG_CICADA_PHY is not set CONFIG_CORTINA_PHY=y CONFIG_DAVICOM_PHY=y CONFIG_ICPLUS_PHY=y # CONFIG_LXT_PHY is not set # CONFIG_INTEL_XWAY_PHY is not set # CONFIG_LSI_ET1011C_PHY is not set CONFIG_MARVELL_PHY=y # CONFIG_MARVELL_10G_PHY is not set # CONFIG_MARVELL_88X2222_PHY is not set CONFIG_MAXLINEAR_GPHY=y CONFIG_MEDIATEK_GE_PHY=y CONFIG_MICREL_PHY=y CONFIG_MICROCHIP_T1S_PHY=y CONFIG_MICROCHIP_PHY=y CONFIG_MICROCHIP_T1_PHY=y CONFIG_MICROSEMI_PHY=y CONFIG_MOTORCOMM_PHY=y # CONFIG_NATIONAL_PHY is not set CONFIG_NXP_CBTX_PHY=y CONFIG_NXP_C45_TJA11XX_PHY=y CONFIG_NXP_TJA11XX_PHY=y # CONFIG_NCN26000_PHY is not set CONFIG_AT803X_PHY=y CONFIG_QSEMI_PHY=y CONFIG_REALTEK_PHY=y CONFIG_RENESAS_PHY=y CONFIG_ROCKCHIP_PHY=y # CONFIG_SMSC_PHY is not set CONFIG_STE10XP=y CONFIG_TERANETICS_PHY=y CONFIG_DP83822_PHY=y CONFIG_DP83TC811_PHY=y # CONFIG_DP83848_PHY is not set CONFIG_DP83867_PHY=y CONFIG_DP83869_PHY=y CONFIG_DP83TD510_PHY=y CONFIG_VITESSE_PHY=y CONFIG_XILINX_GMII2RGMII=y CONFIG_PSE_CONTROLLER=y # CONFIG_PSE_REGULATOR is not set # CONFIG_CAN_DEV is not set CONFIG_MDIO_DEVICE=y CONFIG_MDIO_BUS=y CONFIG_FWNODE_MDIO=y CONFIG_OF_MDIO=y CONFIG_ACPI_MDIO=y CONFIG_MDIO_DEVRES=y # CONFIG_MDIO_SUN4I is not set CONFIG_MDIO_XGENE=y CONFIG_MDIO_ASPEED=y CONFIG_MDIO_BITBANG=y CONFIG_MDIO_BCM_IPROC=y CONFIG_MDIO_BCM_UNIMAC=y CONFIG_MDIO_CAVIUM=y CONFIG_MDIO_GPIO=y CONFIG_MDIO_HISI_FEMAC=y CONFIG_MDIO_I2C=y # CONFIG_MDIO_MSCC_MIIM is not set # CONFIG_MDIO_MOXART is not set CONFIG_MDIO_OCTEON=y # CONFIG_MDIO_IPQ4019 is not set CONFIG_MDIO_IPQ8064=y CONFIG_MDIO_THUNDER=y # # MDIO Multiplexers # CONFIG_MDIO_BUS_MUX=y CONFIG_MDIO_BUS_MUX_MESON_G12A=y CONFIG_MDIO_BUS_MUX_MESON_GXL=y CONFIG_MDIO_BUS_MUX_BCM6368=y CONFIG_MDIO_BUS_MUX_BCM_IPROC=y CONFIG_MDIO_BUS_MUX_GPIO=y CONFIG_MDIO_BUS_MUX_MULTIPLEXER=y CONFIG_MDIO_BUS_MUX_MMIOREG=y # # PCS device drivers # CONFIG_PCS_LYNX=y CONFIG_PCS_MTK_LYNXI=y CONFIG_PCS_RZN1_MIIC=y CONFIG_PCS_ALTERA_TSE=y # end of PCS device drivers # CONFIG_PPP is not set # CONFIG_SLIP is not set # # Host-side USB support is needed for USB Network Adapter support # # CONFIG_WLAN is not set CONFIG_WAN=y CONFIG_HDLC=y CONFIG_HDLC_RAW=y CONFIG_HDLC_RAW_ETH=y CONFIG_HDLC_CISCO=y CONFIG_HDLC_FR=y CONFIG_HDLC_PPP=y # CONFIG_HDLC_X25 is not set CONFIG_PCI200SYN=y # CONFIG_WANXL is not set CONFIG_PC300TOO=y # CONFIG_FARSYNC is not set # CONFIG_IEEE802154_DRIVERS is not set # # Wireless WAN # CONFIG_WWAN=y CONFIG_WWAN_DEBUGFS=y # CONFIG_WWAN_HWSIM is not set CONFIG_MHI_WWAN_CTRL=y # CONFIG_MHI_WWAN_MBIM is not set CONFIG_QCOM_BAM_DMUX=y # CONFIG_IOSM is not set CONFIG_MTK_T7XX=y # end of Wireless WAN CONFIG_VMXNET3=y CONFIG_FUJITSU_ES=y CONFIG_NETDEVSIM=y # CONFIG_NET_FAILOVER is not set CONFIG_ISDN=y CONFIG_ISDN_CAPI=y CONFIG_MISDN=y CONFIG_MISDN_DSP=y CONFIG_MISDN_L1OIP=y # # mISDN hardware drivers # CONFIG_MISDN_HFCPCI=y # CONFIG_MISDN_HFCMULTI is not set CONFIG_MISDN_AVMFRITZ=y CONFIG_MISDN_SPEEDFAX=y CONFIG_MISDN_INFINEON=y # CONFIG_MISDN_W6692 is not set CONFIG_MISDN_NETJET=y CONFIG_MISDN_HDLC=y CONFIG_MISDN_IPAC=y CONFIG_MISDN_ISAR=y # # Input device support # CONFIG_INPUT=y # CONFIG_INPUT_LEDS is not set CONFIG_INPUT_FF_MEMLESS=y CONFIG_INPUT_SPARSEKMAP=y CONFIG_INPUT_MATRIXKMAP=y # # Userland interfaces # CONFIG_INPUT_MOUSEDEV=y CONFIG_INPUT_MOUSEDEV_PSAUX=y CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 CONFIG_INPUT_JOYDEV=y CONFIG_INPUT_EVDEV=y CONFIG_INPUT_EVBUG=y # # Input Device Drivers # # CONFIG_INPUT_KEYBOARD is not set # CONFIG_INPUT_MOUSE is not set # CONFIG_INPUT_JOYSTICK is not set CONFIG_INPUT_TABLET=y # CONFIG_TABLET_SERIAL_WACOM4 is not set CONFIG_INPUT_TOUCHSCREEN=y # CONFIG_TOUCHSCREEN_88PM860X is not set # CONFIG_TOUCHSCREEN_AD7879 is not set CONFIG_TOUCHSCREEN_ADC=y CONFIG_TOUCHSCREEN_AR1021_I2C=y # CONFIG_TOUCHSCREEN_ATMEL_MXT is not set CONFIG_TOUCHSCREEN_AUO_PIXCIR=y # CONFIG_TOUCHSCREEN_BU21013 is not set CONFIG_TOUCHSCREEN_BU21029=y CONFIG_TOUCHSCREEN_CHIPONE_ICN8318=y CONFIG_TOUCHSCREEN_CHIPONE_ICN8505=y CONFIG_TOUCHSCREEN_CY8CTMA140=y # CONFIG_TOUCHSCREEN_CY8CTMG110 is not set CONFIG_TOUCHSCREEN_CYTTSP_CORE=y CONFIG_TOUCHSCREEN_CYTTSP_I2C=y CONFIG_TOUCHSCREEN_CYTTSP4_CORE=y CONFIG_TOUCHSCREEN_CYTTSP4_I2C=y CONFIG_TOUCHSCREEN_CYTTSP5=y # CONFIG_TOUCHSCREEN_DA9034 is not set # CONFIG_TOUCHSCREEN_DYNAPRO is not set CONFIG_TOUCHSCREEN_HAMPSHIRE=y CONFIG_TOUCHSCREEN_EETI=y CONFIG_TOUCHSCREEN_EGALAX=y # CONFIG_TOUCHSCREEN_EGALAX_SERIAL is not set CONFIG_TOUCHSCREEN_EXC3000=y CONFIG_TOUCHSCREEN_FUJITSU=y CONFIG_TOUCHSCREEN_GOODIX=y CONFIG_TOUCHSCREEN_HIDEEP=y CONFIG_TOUCHSCREEN_HYCON_HY46XX=y # CONFIG_TOUCHSCREEN_HYNITRON_CSTXXX is not set CONFIG_TOUCHSCREEN_ILI210X=y CONFIG_TOUCHSCREEN_ILITEK=y CONFIG_TOUCHSCREEN_IPROC=y # CONFIG_TOUCHSCREEN_S6SY761 is not set # CONFIG_TOUCHSCREEN_GUNZE is not set # CONFIG_TOUCHSCREEN_EKTF2127 is not set CONFIG_TOUCHSCREEN_ELAN=y # CONFIG_TOUCHSCREEN_ELO is not set CONFIG_TOUCHSCREEN_WACOM_W8001=y CONFIG_TOUCHSCREEN_WACOM_I2C=y # CONFIG_TOUCHSCREEN_MAX11801 is not set CONFIG_TOUCHSCREEN_MCS5000=y CONFIG_TOUCHSCREEN_MMS114=y CONFIG_TOUCHSCREEN_MELFAS_MIP4=y # CONFIG_TOUCHSCREEN_MSG2638 is not set CONFIG_TOUCHSCREEN_MTOUCH=y CONFIG_TOUCHSCREEN_NOVATEK_NVT_TS=y # CONFIG_TOUCHSCREEN_IMAGIS is not set CONFIG_TOUCHSCREEN_IMX6UL_TSC=y CONFIG_TOUCHSCREEN_INEXIO=y # CONFIG_TOUCHSCREEN_MK712 is not set CONFIG_TOUCHSCREEN_PENMOUNT=y CONFIG_TOUCHSCREEN_EDT_FT5X06=y CONFIG_TOUCHSCREEN_RASPBERRYPI_FW=y CONFIG_TOUCHSCREEN_MIGOR=y # CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set CONFIG_TOUCHSCREEN_TOUCHWIN=y # CONFIG_TOUCHSCREEN_TI_AM335X_TSC is not set # CONFIG_TOUCHSCREEN_PIXCIR is not set # CONFIG_TOUCHSCREEN_WDT87XX_I2C is not set # CONFIG_TOUCHSCREEN_MX25 is not set CONFIG_TOUCHSCREEN_MC13783=y # CONFIG_TOUCHSCREEN_TOUCHIT213 is not set CONFIG_TOUCHSCREEN_TS4800=y CONFIG_TOUCHSCREEN_TSC_SERIO=y CONFIG_TOUCHSCREEN_TSC200X_CORE=y CONFIG_TOUCHSCREEN_TSC2004=y CONFIG_TOUCHSCREEN_TSC2007=y # CONFIG_TOUCHSCREEN_TSC2007_IIO is not set # CONFIG_TOUCHSCREEN_RM_TS is not set # CONFIG_TOUCHSCREEN_SILEAD is not set CONFIG_TOUCHSCREEN_SIS_I2C=y CONFIG_TOUCHSCREEN_ST1232=y CONFIG_TOUCHSCREEN_STMFTS=y CONFIG_TOUCHSCREEN_SUN4I=y # CONFIG_TOUCHSCREEN_SX8654 is not set CONFIG_TOUCHSCREEN_TPS6507X=y CONFIG_TOUCHSCREEN_ZET6223=y # CONFIG_TOUCHSCREEN_ZFORCE is not set # CONFIG_TOUCHSCREEN_COLIBRI_VF50 is not set CONFIG_TOUCHSCREEN_ROHM_BU21023=y # CONFIG_TOUCHSCREEN_IQS5XX is not set CONFIG_TOUCHSCREEN_ZINITIX=y CONFIG_TOUCHSCREEN_HIMAX_HX83112B=y # CONFIG_INPUT_MISC is not set # CONFIG_RMI4_CORE is not set # # Hardware I/O ports # CONFIG_SERIO=y CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y # CONFIG_SERIO_I8042 is not set CONFIG_SERIO_SERPORT=y # CONFIG_SERIO_PCIPS2 is not set CONFIG_SERIO_LIBPS2=y CONFIG_SERIO_RAW=y # CONFIG_SERIO_ALTERA_PS2 is not set CONFIG_SERIO_PS2MULT=y CONFIG_SERIO_ARC_PS2=y CONFIG_SERIO_APBPS2=y CONFIG_SERIO_OLPC_APSP=y # CONFIG_SERIO_SUN4I_PS2 is not set # CONFIG_SERIO_GPIO_PS2 is not set CONFIG_USERIO=y CONFIG_GAMEPORT=y # CONFIG_GAMEPORT_NS558 is not set # CONFIG_GAMEPORT_L4 is not set # CONFIG_GAMEPORT_EMU10K1 is not set CONFIG_GAMEPORT_FM801=y # end of Hardware I/O ports # end of Input device support # # Character devices # CONFIG_TTY=y CONFIG_VT=y CONFIG_CONSOLE_TRANSLATIONS=y CONFIG_VT_CONSOLE=y CONFIG_VT_CONSOLE_SLEEP=y CONFIG_HW_CONSOLE=y CONFIG_VT_HW_CONSOLE_BINDING=y CONFIG_UNIX98_PTYS=y # CONFIG_LEGACY_PTYS is not set # CONFIG_LEGACY_TIOCSTI is not set # CONFIG_LDISC_AUTOLOAD is not set # # Serial drivers # CONFIG_SERIAL_EARLYCON=y CONFIG_SERIAL_8250=y # CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set CONFIG_SERIAL_8250_PNP=y # CONFIG_SERIAL_8250_16550A_VARIANTS is not set CONFIG_SERIAL_8250_FINTEK=y # CONFIG_SERIAL_8250_CONSOLE is not set CONFIG_SERIAL_8250_DMA=y # CONFIG_SERIAL_8250_PCI is not set CONFIG_SERIAL_8250_MEN_MCB=y CONFIG_SERIAL_8250_NR_UARTS=4 CONFIG_SERIAL_8250_RUNTIME_UARTS=4 # CONFIG_SERIAL_8250_EXTENDED is not set CONFIG_SERIAL_8250_ASPEED_VUART=y # CONFIG_SERIAL_8250_PCI1XXXX is not set CONFIG_SERIAL_8250_DWLIB=y CONFIG_SERIAL_8250_DW=y # CONFIG_SERIAL_8250_EM is not set # CONFIG_SERIAL_8250_IOC3 is not set # CONFIG_SERIAL_8250_RT288X is not set CONFIG_SERIAL_8250_OMAP=y # CONFIG_SERIAL_8250_LPC18XX is not set # CONFIG_SERIAL_8250_MT6577 is not set CONFIG_SERIAL_8250_UNIPHIER=y CONFIG_SERIAL_8250_INGENIC=y # CONFIG_SERIAL_8250_LPSS is not set CONFIG_SERIAL_8250_MID=y CONFIG_SERIAL_8250_PERICOM=y # CONFIG_SERIAL_8250_PXA is not set # CONFIG_SERIAL_8250_TEGRA is not set CONFIG_SERIAL_8250_BCM7271=y CONFIG_SERIAL_OF_PLATFORM=y # # Non-8250 serial port support # CONFIG_SERIAL_AMBA_PL010=y CONFIG_SERIAL_AMBA_PL010_CONSOLE=y CONFIG_SERIAL_ATMEL=y # CONFIG_SERIAL_ATMEL_CONSOLE is not set CONFIG_SERIAL_ATMEL_PDC=y CONFIG_SERIAL_ATMEL_TTYAT=y CONFIG_SERIAL_MESON=y # CONFIG_SERIAL_MESON_CONSOLE is not set CONFIG_SERIAL_CLPS711X=y # CONFIG_SERIAL_CLPS711X_CONSOLE is not set CONFIG_SERIAL_SAMSUNG=y CONFIG_SERIAL_SAMSUNG_UARTS=4 CONFIG_SERIAL_SAMSUNG_CONSOLE=y # CONFIG_SERIAL_TEGRA is not set # CONFIG_SERIAL_IMX is not set # CONFIG_SERIAL_IMX_EARLYCON is not set CONFIG_SERIAL_UARTLITE=y # CONFIG_SERIAL_UARTLITE_CONSOLE is not set CONFIG_SERIAL_UARTLITE_NR_UARTS=1 # CONFIG_SERIAL_SH_SCI is not set CONFIG_SERIAL_HS_LPC32XX=y # CONFIG_SERIAL_HS_LPC32XX_CONSOLE is not set CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_SERIAL_ICOM=y # CONFIG_SERIAL_JSM is not set CONFIG_SERIAL_MSM=y CONFIG_SERIAL_MSM_CONSOLE=y CONFIG_SERIAL_VT8500=y # CONFIG_SERIAL_VT8500_CONSOLE is not set # CONFIG_SERIAL_OMAP is not set CONFIG_SERIAL_SIFIVE=y # CONFIG_SERIAL_SIFIVE_CONSOLE is not set CONFIG_SERIAL_LANTIQ=y # CONFIG_SERIAL_LANTIQ_CONSOLE is not set # CONFIG_SERIAL_SCCNXP is not set CONFIG_SERIAL_SC16IS7XX_CORE=y CONFIG_SERIAL_SC16IS7XX=y CONFIG_SERIAL_SC16IS7XX_I2C=y CONFIG_SERIAL_TIMBERDALE=y # CONFIG_SERIAL_BCM63XX is not set # CONFIG_SERIAL_ALTERA_JTAGUART is not set CONFIG_SERIAL_ALTERA_UART=y CONFIG_SERIAL_ALTERA_UART_MAXPORTS=4 CONFIG_SERIAL_ALTERA_UART_BAUDRATE=115200 CONFIG_SERIAL_ALTERA_UART_CONSOLE=y CONFIG_SERIAL_PCH_UART=y CONFIG_SERIAL_PCH_UART_CONSOLE=y CONFIG_SERIAL_MXS_AUART=y # CONFIG_SERIAL_MXS_AUART_CONSOLE is not set # CONFIG_SERIAL_XILINX_PS_UART is not set # CONFIG_SERIAL_MPS2_UART is not set # CONFIG_SERIAL_ARC is not set # CONFIG_SERIAL_RP2 is not set # CONFIG_SERIAL_FSL_LPUART is not set CONFIG_SERIAL_FSL_LINFLEXUART=y CONFIG_SERIAL_FSL_LINFLEXUART_CONSOLE=y CONFIG_SERIAL_CONEXANT_DIGICOLOR=y CONFIG_SERIAL_CONEXANT_DIGICOLOR_CONSOLE=y CONFIG_SERIAL_ST_ASC=y # CONFIG_SERIAL_ST_ASC_CONSOLE is not set CONFIG_SERIAL_MEN_Z135=y CONFIG_SERIAL_SPRD=y # CONFIG_SERIAL_SPRD_CONSOLE is not set CONFIG_SERIAL_STM32=y CONFIG_SERIAL_STM32_CONSOLE=y # CONFIG_SERIAL_MVEBU_UART is not set CONFIG_SERIAL_OWL=y CONFIG_SERIAL_OWL_CONSOLE=y CONFIG_SERIAL_RDA=y # CONFIG_SERIAL_RDA_CONSOLE is not set CONFIG_SERIAL_MILBEAUT_USIO=y CONFIG_SERIAL_MILBEAUT_USIO_PORTS=4 CONFIG_SERIAL_MILBEAUT_USIO_CONSOLE=y CONFIG_SERIAL_LITEUART=y CONFIG_SERIAL_LITEUART_MAX_PORTS=1 CONFIG_SERIAL_LITEUART_CONSOLE=y # CONFIG_SERIAL_SUNPLUS is not set # end of Serial drivers CONFIG_SERIAL_MCTRL_GPIO=y CONFIG_SERIAL_NONSTANDARD=y CONFIG_MOXA_INTELLIO=y CONFIG_MOXA_SMARTIO=y CONFIG_SYNCLINK_GT=y CONFIG_N_HDLC=y CONFIG_N_GSM=y # CONFIG_NOZOMI is not set # CONFIG_NULL_TTY is not set CONFIG_HVC_DRIVER=y CONFIG_SERIAL_DEV_BUS=y # CONFIG_SERIAL_DEV_CTRL_TTYPORT is not set CONFIG_VIRTIO_CONSOLE=y # CONFIG_IPMI_HANDLER is not set CONFIG_IPMI_KCS_BMC=y # CONFIG_ASPEED_KCS_IPMI_BMC is not set CONFIG_NPCM7XX_KCS_IPMI_BMC=y CONFIG_IPMI_KCS_BMC_CDEV_IPMI=y CONFIG_IPMI_KCS_BMC_SERIO=y CONFIG_ASPEED_BT_IPMI_BMC=y CONFIG_SSIF_IPMI_BMC=y CONFIG_IPMB_DEVICE_INTERFACE=y CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM_TIMERIOMEM=y CONFIG_HW_RANDOM_ATMEL=y CONFIG_HW_RANDOM_BA431=y CONFIG_HW_RANDOM_BCM2835=y # CONFIG_HW_RANDOM_IPROC_RNG200 is not set # CONFIG_HW_RANDOM_IXP4XX is not set # CONFIG_HW_RANDOM_OMAP is not set CONFIG_HW_RANDOM_OMAP3_ROM=y CONFIG_HW_RANDOM_VIRTIO=y CONFIG_HW_RANDOM_IMX_RNGC=y # CONFIG_HW_RANDOM_NOMADIK is not set CONFIG_HW_RANDOM_STM32=y CONFIG_HW_RANDOM_MESON=y # CONFIG_HW_RANDOM_MTK is not set CONFIG_HW_RANDOM_EXYNOS=y CONFIG_HW_RANDOM_NPCM=y CONFIG_HW_RANDOM_KEYSTONE=y # CONFIG_HW_RANDOM_CCTRNG is not set CONFIG_HW_RANDOM_XIPHERA=y CONFIG_HW_RANDOM_CN10K=y CONFIG_HW_RANDOM_JH7110=y # CONFIG_APPLICOM is not set CONFIG_DEVMEM=y # CONFIG_DEVPORT is not set CONFIG_TCG_TPM=y # CONFIG_HW_RANDOM_TPM is not set CONFIG_TCG_TIS_CORE=y CONFIG_TCG_TIS=y # CONFIG_TCG_TIS_I2C is not set # CONFIG_TCG_TIS_SYNQUACER is not set # CONFIG_TCG_TIS_I2C_CR50 is not set # CONFIG_TCG_TIS_I2C_ATMEL is not set CONFIG_TCG_TIS_I2C_INFINEON=y CONFIG_TCG_TIS_I2C_NUVOTON=y CONFIG_TCG_ATMEL=y CONFIG_TCG_INFINEON=y CONFIG_TCG_CRB=y CONFIG_TCG_VTPM_PROXY=y # CONFIG_TCG_TIS_ST33ZP24_I2C is not set CONFIG_XILLYBUS_CLASS=y CONFIG_XILLYBUS=y CONFIG_XILLYBUS_PCIE=y # CONFIG_XILLYBUS_OF is not set # end of Character devices # # I2C support # CONFIG_I2C=y # CONFIG_ACPI_I2C_OPREGION is not set CONFIG_I2C_BOARDINFO=y # CONFIG_I2C_COMPAT is not set CONFIG_I2C_CHARDEV=y CONFIG_I2C_MUX=y # # Multiplexer I2C Chip support # CONFIG_I2C_ARB_GPIO_CHALLENGE=y CONFIG_I2C_MUX_GPIO=y CONFIG_I2C_MUX_GPMUX=y # CONFIG_I2C_MUX_LTC4306 is not set # CONFIG_I2C_MUX_PCA9541 is not set # CONFIG_I2C_MUX_PCA954x is not set CONFIG_I2C_MUX_PINCTRL=y # CONFIG_I2C_MUX_REG is not set CONFIG_I2C_DEMUX_PINCTRL=y CONFIG_I2C_MUX_MLXCPLD=y # end of Multiplexer I2C Chip support # CONFIG_I2C_HELPER_AUTO is not set CONFIG_I2C_SMBUS=y # # I2C Algorithms # CONFIG_I2C_ALGOBIT=y CONFIG_I2C_ALGOPCF=y CONFIG_I2C_ALGOPCA=y # end of I2C Algorithms # # I2C Hardware Bus support # # # PC SMBus host controller drivers # CONFIG_I2C_CCGX_UCSI=y CONFIG_I2C_ALI1535=y CONFIG_I2C_ALI1563=y CONFIG_I2C_ALI15X3=y CONFIG_I2C_AMD756=y CONFIG_I2C_AMD8111=y # CONFIG_I2C_AMD_MP2 is not set # CONFIG_I2C_HIX5HD2 is not set CONFIG_I2C_I801=y # CONFIG_I2C_ISCH is not set CONFIG_I2C_PIIX4=y CONFIG_I2C_NFORCE2=y CONFIG_I2C_NVIDIA_GPU=y CONFIG_I2C_SIS5595=y CONFIG_I2C_SIS630=y # CONFIG_I2C_SIS96X is not set CONFIG_I2C_VIA=y # CONFIG_I2C_VIAPRO is not set # # ACPI drivers # CONFIG_I2C_SCMI=y # # I2C system bus drivers (mostly embedded / system-on-chip) # CONFIG_I2C_ALTERA=y CONFIG_I2C_ASPEED=y CONFIG_I2C_AT91=y CONFIG_I2C_AT91_SLAVE_EXPERIMENTAL=y CONFIG_I2C_AXXIA=y CONFIG_I2C_BCM2835=y CONFIG_I2C_BCM_IPROC=y CONFIG_I2C_BCM_KONA=y CONFIG_I2C_BRCMSTB=y CONFIG_I2C_CADENCE=y CONFIG_I2C_CBUS_GPIO=y # CONFIG_I2C_DAVINCI is not set CONFIG_I2C_DESIGNWARE_CORE=y # CONFIG_I2C_DESIGNWARE_SLAVE is not set CONFIG_I2C_DESIGNWARE_PLATFORM=y CONFIG_I2C_DESIGNWARE_PCI=y # CONFIG_I2C_DIGICOLOR is not set CONFIG_I2C_EG20T=y CONFIG_I2C_EMEV2=y CONFIG_I2C_EXYNOS5=y CONFIG_I2C_GPIO=y # CONFIG_I2C_GPIO_FAULT_INJECTOR is not set CONFIG_I2C_GXP=y CONFIG_I2C_HIGHLANDER=y CONFIG_I2C_HISI=y # CONFIG_I2C_IMG is not set CONFIG_I2C_IMX=y CONFIG_I2C_IMX_LPI2C=y CONFIG_I2C_IOP3XX=y CONFIG_I2C_JZ4780=y CONFIG_I2C_KEMPLD=y CONFIG_I2C_LPC2K=y CONFIG_I2C_LS2X=y CONFIG_I2C_MESON=y CONFIG_I2C_MICROCHIP_CORE=y # CONFIG_I2C_MT65XX is not set CONFIG_I2C_MT7621=y CONFIG_I2C_MV64XXX=y CONFIG_I2C_MXS=y CONFIG_I2C_NPCM=y # CONFIG_I2C_OCORES is not set CONFIG_I2C_OMAP=y CONFIG_I2C_OWL=y CONFIG_I2C_APPLE=y CONFIG_I2C_PCA_PLATFORM=y CONFIG_I2C_PNX=y CONFIG_I2C_PXA=y CONFIG_I2C_PXA_SLAVE=y # CONFIG_I2C_QCOM_CCI is not set # CONFIG_I2C_QUP is not set CONFIG_I2C_RIIC=y CONFIG_I2C_RK3X=y CONFIG_I2C_RZV2M=y CONFIG_I2C_S3C2410=y CONFIG_I2C_SH_MOBILE=y CONFIG_I2C_SIMTEC=y # CONFIG_I2C_SPRD is not set # CONFIG_I2C_ST is not set CONFIG_I2C_STM32F4=y # CONFIG_I2C_STM32F7 is not set # CONFIG_I2C_SUN6I_P2WI is not set # CONFIG_I2C_SYNQUACER is not set CONFIG_I2C_TEGRA_BPMP=y CONFIG_I2C_UNIPHIER=y CONFIG_I2C_UNIPHIER_F=y # CONFIG_I2C_VERSATILE is not set # CONFIG_I2C_WMT is not set # CONFIG_I2C_THUNDERX is not set CONFIG_I2C_XILINX=y CONFIG_I2C_XLP9XX=y # CONFIG_I2C_RCAR is not set # # External I2C/SMBus adapter drivers # CONFIG_I2C_PCI1XXXX=y CONFIG_I2C_TAOS_EVM=y # # Other I2C/SMBus bus drivers # CONFIG_I2C_MLXCPLD=y # CONFIG_I2C_FSI is not set # CONFIG_I2C_VIRTIO is not set # end of I2C Hardware Bus support CONFIG_I2C_SLAVE=y CONFIG_I2C_SLAVE_EEPROM=y CONFIG_I2C_SLAVE_TESTUNIT=y # CONFIG_I2C_DEBUG_CORE is not set CONFIG_I2C_DEBUG_ALGO=y CONFIG_I2C_DEBUG_BUS=y # end of I2C support CONFIG_I3C=y CONFIG_CDNS_I3C_MASTER=y # CONFIG_DW_I3C_MASTER is not set CONFIG_SVC_I3C_MASTER=y # CONFIG_MIPI_I3C_HCI is not set # CONFIG_SPI is not set # CONFIG_SPMI is not set CONFIG_HSI=y CONFIG_HSI_BOARDINFO=y # # HSI controllers # # # HSI clients # CONFIG_HSI_CHAR=y CONFIG_PPS=y # CONFIG_PPS_DEBUG is not set # # PPS clients support # CONFIG_PPS_CLIENT_KTIMER=y CONFIG_PPS_CLIENT_LDISC=y CONFIG_PPS_CLIENT_GPIO=y # # PPS generators support # # # PTP clock support # CONFIG_PTP_1588_CLOCK=y CONFIG_PTP_1588_CLOCK_OPTIONAL=y # CONFIG_PTP_1588_CLOCK_DTE is not set CONFIG_PTP_1588_CLOCK_QORIQ=y CONFIG_DP83640_PHY=y CONFIG_PTP_1588_CLOCK_INES=y CONFIG_PTP_1588_CLOCK_PCH=y CONFIG_PTP_1588_CLOCK_IDT82P33=y CONFIG_PTP_1588_CLOCK_IDTCM=y # end of PTP clock support CONFIG_PINCTRL=y CONFIG_GENERIC_PINCTRL_GROUPS=y CONFIG_PINMUX=y CONFIG_GENERIC_PINMUX_FUNCTIONS=y CONFIG_PINCONF=y CONFIG_GENERIC_PINCONF=y CONFIG_DEBUG_PINCTRL=y CONFIG_PINCTRL_AMD=y CONFIG_PINCTRL_AS3722=y # CONFIG_PINCTRL_AT91PIO4 is not set # CONFIG_PINCTRL_AXP209 is not set CONFIG_PINCTRL_BM1880=y CONFIG_PINCTRL_CY8C95X0=y # CONFIG_PINCTRL_DA850_PUPD is not set CONFIG_PINCTRL_EQUILIBRIUM=y CONFIG_PINCTRL_INGENIC=y # CONFIG_PINCTRL_LOONGSON2 is not set CONFIG_PINCTRL_LPC18XX=y CONFIG_PINCTRL_MCP23S08_I2C=y CONFIG_PINCTRL_MCP23S08=y CONFIG_PINCTRL_MICROCHIP_SGPIO=y CONFIG_PINCTRL_OCELOT=y # CONFIG_PINCTRL_PISTACHIO is not set # CONFIG_PINCTRL_ROCKCHIP is not set CONFIG_PINCTRL_SINGLE=y CONFIG_PINCTRL_STMFX=y CONFIG_PINCTRL_SX150X=y CONFIG_PINCTRL_MLXBF3=y CONFIG_PINCTRL_OWL=y # CONFIG_PINCTRL_S500 is not set CONFIG_PINCTRL_S700=y # CONFIG_PINCTRL_S900 is not set CONFIG_PINCTRL_ASPEED=y # CONFIG_PINCTRL_ASPEED_G4 is not set CONFIG_PINCTRL_ASPEED_G5=y # CONFIG_PINCTRL_ASPEED_G6 is not set # CONFIG_PINCTRL_BCM281XX is not set CONFIG_PINCTRL_BCM2835=y CONFIG_PINCTRL_BCM4908=y CONFIG_PINCTRL_BCM63XX=y CONFIG_PINCTRL_BCM6318=y # CONFIG_PINCTRL_BCM6328 is not set CONFIG_PINCTRL_BCM6358=y CONFIG_PINCTRL_BCM6362=y # CONFIG_PINCTRL_BCM6368 is not set # CONFIG_PINCTRL_BCM63268 is not set CONFIG_PINCTRL_IPROC_GPIO=y # CONFIG_PINCTRL_CYGNUS_MUX is not set CONFIG_PINCTRL_NS=y # CONFIG_PINCTRL_NSP_GPIO is not set # CONFIG_PINCTRL_NS2_MUX is not set CONFIG_PINCTRL_NSP_MUX=y CONFIG_PINCTRL_BERLIN=y # CONFIG_PINCTRL_AS370 is not set CONFIG_PINCTRL_BERLIN_BG4CT=y CONFIG_PINCTRL_MADERA=y CONFIG_PINCTRL_CS47L35=y CONFIG_PINCTRL_CS47L85=y CONFIG_PINCTRL_CS47L92=y # # Intel pinctrl drivers # CONFIG_PINCTRL_BAYTRAIL=y CONFIG_PINCTRL_CHERRYVIEW=y CONFIG_PINCTRL_LYNXPOINT=y CONFIG_PINCTRL_INTEL=y CONFIG_PINCTRL_ALDERLAKE=y CONFIG_PINCTRL_BROXTON=y # CONFIG_PINCTRL_CANNONLAKE is not set # CONFIG_PINCTRL_CEDARFORK is not set # CONFIG_PINCTRL_DENVERTON is not set CONFIG_PINCTRL_ELKHARTLAKE=y CONFIG_PINCTRL_EMMITSBURG=y # CONFIG_PINCTRL_GEMINILAKE is not set CONFIG_PINCTRL_ICELAKE=y CONFIG_PINCTRL_JASPERLAKE=y CONFIG_PINCTRL_LAKEFIELD=y CONFIG_PINCTRL_LEWISBURG=y CONFIG_PINCTRL_METEORLAKE=y # CONFIG_PINCTRL_SUNRISEPOINT is not set # CONFIG_PINCTRL_TIGERLAKE is not set # end of Intel pinctrl drivers # # MediaTek pinctrl drivers # CONFIG_EINT_MTK=y CONFIG_PINCTRL_MTK=y CONFIG_PINCTRL_MTK_V2=y CONFIG_PINCTRL_MTK_MOORE=y CONFIG_PINCTRL_MTK_PARIS=y # CONFIG_PINCTRL_MT2701 is not set # CONFIG_PINCTRL_MT7623 is not set # CONFIG_PINCTRL_MT7629 is not set # CONFIG_PINCTRL_MT8135 is not set CONFIG_PINCTRL_MT8127=y CONFIG_PINCTRL_MT2712=y # CONFIG_PINCTRL_MT6765 is not set CONFIG_PINCTRL_MT6779=y CONFIG_PINCTRL_MT6795=y # CONFIG_PINCTRL_MT6797 is not set # CONFIG_PINCTRL_MT7622 is not set CONFIG_PINCTRL_MT7981=y # CONFIG_PINCTRL_MT7986 is not set CONFIG_PINCTRL_MT8167=y CONFIG_PINCTRL_MT8173=y CONFIG_PINCTRL_MT8183=y # CONFIG_PINCTRL_MT8186 is not set CONFIG_PINCTRL_MT8188=y CONFIG_PINCTRL_MT8192=y # CONFIG_PINCTRL_MT8195 is not set CONFIG_PINCTRL_MT8365=y # CONFIG_PINCTRL_MT8516 is not set CONFIG_PINCTRL_MT6397=y # end of MediaTek pinctrl drivers CONFIG_PINCTRL_MESON=y # CONFIG_PINCTRL_WPCM450 is not set # CONFIG_PINCTRL_NPCM7XX is not set CONFIG_PINCTRL_PXA=y CONFIG_PINCTRL_PXA25X=y CONFIG_PINCTRL_PXA27X=y CONFIG_PINCTRL_MSM=y # CONFIG_PINCTRL_APQ8064 is not set CONFIG_PINCTRL_APQ8084=y CONFIG_PINCTRL_IPQ4019=y CONFIG_PINCTRL_IPQ8064=y # CONFIG_PINCTRL_IPQ5332 is not set CONFIG_PINCTRL_IPQ8074=y CONFIG_PINCTRL_IPQ6018=y # CONFIG_PINCTRL_IPQ9574 is not set CONFIG_PINCTRL_MSM8226=y CONFIG_PINCTRL_MSM8660=y CONFIG_PINCTRL_MSM8960=y CONFIG_PINCTRL_MDM9607=y CONFIG_PINCTRL_MDM9615=y # CONFIG_PINCTRL_MSM8X74 is not set CONFIG_PINCTRL_MSM8909=y CONFIG_PINCTRL_MSM8916=y CONFIG_PINCTRL_MSM8953=y # CONFIG_PINCTRL_MSM8976 is not set # CONFIG_PINCTRL_MSM8994 is not set CONFIG_PINCTRL_MSM8996=y # CONFIG_PINCTRL_MSM8998 is not set CONFIG_PINCTRL_QCM2290=y CONFIG_PINCTRL_QCS404=y CONFIG_PINCTRL_QDF2XXX=y # CONFIG_PINCTRL_QCOM_SSBI_PMIC is not set # CONFIG_PINCTRL_QDU1000 is not set # CONFIG_PINCTRL_SA8775P is not set CONFIG_PINCTRL_SC7180=y # CONFIG_PINCTRL_SC7280 is not set CONFIG_PINCTRL_SC8180X=y # CONFIG_PINCTRL_SC8280XP is not set CONFIG_PINCTRL_SDM660=y CONFIG_PINCTRL_SDM670=y # CONFIG_PINCTRL_SDM845 is not set CONFIG_PINCTRL_SDX55=y CONFIG_PINCTRL_SM6115=y CONFIG_PINCTRL_SM6125=y CONFIG_PINCTRL_SM6350=y # CONFIG_PINCTRL_SM6375 is not set CONFIG_PINCTRL_SDX65=y CONFIG_PINCTRL_SM7150=y CONFIG_PINCTRL_SM8150=y CONFIG_PINCTRL_SM8250=y CONFIG_PINCTRL_SM8350=y CONFIG_PINCTRL_SM8450=y CONFIG_PINCTRL_SM8550=y # CONFIG_PINCTRL_LPASS_LPI is not set # # Renesas pinctrl drivers # # CONFIG_PINCTRL_RENESAS is not set CONFIG_PINCTRL_SH_PFC=y CONFIG_PINCTRL_SH_PFC_GPIO=y CONFIG_PINCTRL_SH_FUNC_GPIO=y # CONFIG_PINCTRL_PFC_EMEV2 is not set CONFIG_PINCTRL_PFC_R8A77995=y # CONFIG_PINCTRL_PFC_R8A7794 is not set # CONFIG_PINCTRL_PFC_R8A77990 is not set # CONFIG_PINCTRL_PFC_R8A7779 is not set CONFIG_PINCTRL_PFC_R8A7790=y CONFIG_PINCTRL_PFC_R8A77951=y CONFIG_PINCTRL_PFC_R8A7778=y CONFIG_PINCTRL_PFC_R8A7793=y CONFIG_PINCTRL_PFC_R8A7791=y CONFIG_PINCTRL_PFC_R8A77965=y CONFIG_PINCTRL_PFC_R8A77960=y # CONFIG_PINCTRL_PFC_R8A77961 is not set CONFIG_PINCTRL_PFC_R8A779F0=y # CONFIG_PINCTRL_PFC_R8A7792 is not set # CONFIG_PINCTRL_PFC_R8A77980 is not set # CONFIG_PINCTRL_PFC_R8A77970 is not set CONFIG_PINCTRL_PFC_R8A779A0=y # CONFIG_PINCTRL_PFC_R8A779G0 is not set # CONFIG_PINCTRL_PFC_R8A7740 is not set CONFIG_PINCTRL_PFC_R8A73A4=y CONFIG_PINCTRL_RZA1=y CONFIG_PINCTRL_RZA2=y CONFIG_PINCTRL_RZG2L=y # CONFIG_PINCTRL_PFC_R8A77470 is not set CONFIG_PINCTRL_PFC_R8A7745=y # CONFIG_PINCTRL_PFC_R8A7742 is not set CONFIG_PINCTRL_PFC_R8A7743=y # CONFIG_PINCTRL_PFC_R8A7744 is not set CONFIG_PINCTRL_PFC_R8A774C0=y CONFIG_PINCTRL_PFC_R8A774E1=y CONFIG_PINCTRL_PFC_R8A774A1=y # CONFIG_PINCTRL_PFC_R8A774B1 is not set CONFIG_PINCTRL_RZN1=y CONFIG_PINCTRL_RZV2M=y # CONFIG_PINCTRL_PFC_SH7203 is not set CONFIG_PINCTRL_PFC_SH7264=y # CONFIG_PINCTRL_PFC_SH7269 is not set # CONFIG_PINCTRL_PFC_SH7720 is not set # CONFIG_PINCTRL_PFC_SH7722 is not set # CONFIG_PINCTRL_PFC_SH7734 is not set # CONFIG_PINCTRL_PFC_SH7757 is not set # CONFIG_PINCTRL_PFC_SH7785 is not set # CONFIG_PINCTRL_PFC_SH7786 is not set # CONFIG_PINCTRL_PFC_SH73A0 is not set CONFIG_PINCTRL_PFC_SH7723=y CONFIG_PINCTRL_PFC_SH7724=y # CONFIG_PINCTRL_PFC_SHX3 is not set # end of Renesas pinctrl drivers # CONFIG_PINCTRL_EXYNOS is not set # CONFIG_PINCTRL_S3C64XX is not set CONFIG_PINCTRL_SPRD=y CONFIG_PINCTRL_SPRD_SC9860=y CONFIG_PINCTRL_STARFIVE_JH7100=y # CONFIG_PINCTRL_STARFIVE_JH7110_SYS is not set # CONFIG_PINCTRL_STARFIVE_JH7110_AON is not set CONFIG_PINCTRL_STM32=y # CONFIG_PINCTRL_STM32F429 is not set # CONFIG_PINCTRL_STM32F469 is not set CONFIG_PINCTRL_STM32F746=y CONFIG_PINCTRL_STM32F769=y CONFIG_PINCTRL_STM32H743=y # CONFIG_PINCTRL_STM32MP135 is not set CONFIG_PINCTRL_STM32MP157=y CONFIG_PINCTRL_TI_IODELAY=y # CONFIG_PINCTRL_UNIPHIER is not set CONFIG_PINCTRL_VISCONTI=y CONFIG_PINCTRL_TMPV7700=y CONFIG_GPIOLIB=y CONFIG_GPIOLIB_FASTPATH_LIMIT=512 CONFIG_OF_GPIO=y CONFIG_GPIO_ACPI=y CONFIG_GPIOLIB_IRQCHIP=y # CONFIG_DEBUG_GPIO is not set CONFIG_GPIO_CDEV=y CONFIG_GPIO_CDEV_V1=y CONFIG_GPIO_GENERIC=y CONFIG_GPIO_REGMAP=y CONFIG_GPIO_MAX730X=y # # Memory mapped GPIO drivers # CONFIG_GPIO_74XX_MMIO=y # CONFIG_GPIO_ALTERA is not set # CONFIG_GPIO_AMDPT is not set # CONFIG_GPIO_ASPEED is not set # CONFIG_GPIO_ASPEED_SGPIO is not set CONFIG_GPIO_ATH79=y CONFIG_GPIO_RASPBERRYPI_EXP=y CONFIG_GPIO_BCM_KONA=y # CONFIG_GPIO_BCM_XGS_IPROC is not set # CONFIG_GPIO_BRCMSTB is not set # CONFIG_GPIO_CADENCE is not set CONFIG_GPIO_CLPS711X=y CONFIG_GPIO_DWAPB=y # CONFIG_GPIO_EIC_SPRD is not set CONFIG_GPIO_EM=y # CONFIG_GPIO_FTGPIO010 is not set # CONFIG_GPIO_GENERIC_PLATFORM is not set # CONFIG_GPIO_GRGPIO is not set CONFIG_GPIO_HISI=y CONFIG_GPIO_HLWD=y # CONFIG_GPIO_LOGICVC is not set # CONFIG_GPIO_LOONGSON_64BIT is not set CONFIG_GPIO_LPC18XX=y # CONFIG_GPIO_LPC32XX is not set CONFIG_GPIO_MB86S7X=y # CONFIG_GPIO_MENZ127 is not set CONFIG_GPIO_MPC8XXX=y # CONFIG_GPIO_MT7621 is not set # CONFIG_GPIO_MXC is not set CONFIG_GPIO_MXS=y CONFIG_GPIO_PXA=y CONFIG_GPIO_RCAR=y CONFIG_GPIO_RDA=y # CONFIG_GPIO_ROCKCHIP is not set CONFIG_GPIO_SAMA5D2_PIOBU=y CONFIG_GPIO_SIFIVE=y # CONFIG_GPIO_SIOX is not set CONFIG_GPIO_SNPS_CREG=y CONFIG_GPIO_SPRD=y # CONFIG_GPIO_STP_XWAY is not set CONFIG_GPIO_SYSCON=y CONFIG_GPIO_TANGIER=y CONFIG_GPIO_TEGRA=y CONFIG_GPIO_TEGRA186=y # CONFIG_GPIO_TS4800 is not set CONFIG_GPIO_THUNDERX=y # CONFIG_GPIO_UNIPHIER is not set # CONFIG_GPIO_VISCONTI is not set CONFIG_GPIO_VX855=y # CONFIG_GPIO_XGENE_SB is not set CONFIG_GPIO_XILINX=y CONFIG_GPIO_XLP=y # CONFIG_GPIO_AMD_FCH is not set CONFIG_GPIO_IDT3243X=y # end of Memory mapped GPIO drivers # # I2C GPIO expanders # CONFIG_GPIO_ADNP=y # CONFIG_GPIO_FXL6408 is not set # CONFIG_GPIO_GW_PLD is not set CONFIG_GPIO_MAX7300=y # CONFIG_GPIO_MAX732X is not set # CONFIG_GPIO_PCA953X is not set CONFIG_GPIO_PCA9570=y # CONFIG_GPIO_PCF857X is not set CONFIG_GPIO_TPIC2810=y # CONFIG_GPIO_TS4900 is not set # end of I2C GPIO expanders # # MFD GPIO expanders # CONFIG_GPIO_BD9571MWV=y # CONFIG_GPIO_CRYSTAL_COVE is not set CONFIG_GPIO_ELKHARTLAKE=y # CONFIG_GPIO_KEMPLD is not set # CONFIG_GPIO_LP3943 is not set # CONFIG_GPIO_MADERA is not set CONFIG_GPIO_MAX77650=y CONFIG_GPIO_PMIC_EIC_SPRD=y CONFIG_GPIO_RC5T583=y # CONFIG_GPIO_SL28CPLD is not set CONFIG_GPIO_TC3589X=y CONFIG_GPIO_TPS6586X=y CONFIG_GPIO_TPS65910=y CONFIG_GPIO_TQMX86=y CONFIG_GPIO_TWL6040=y CONFIG_GPIO_WM8350=y CONFIG_GPIO_WM8994=y # end of MFD GPIO expanders # # PCI GPIO expanders # CONFIG_GPIO_AMD8111=y CONFIG_GPIO_BT8XX=y CONFIG_GPIO_MLXBF=y CONFIG_GPIO_MLXBF2=y CONFIG_GPIO_ML_IOH=y CONFIG_GPIO_PCH=y # CONFIG_GPIO_PCI_IDIO_16 is not set CONFIG_GPIO_PCIE_IDIO_24=y CONFIG_GPIO_RDC321X=y # end of PCI GPIO expanders # # Virtual GPIO drivers # CONFIG_GPIO_AGGREGATOR=y CONFIG_GPIO_LATCH=y # CONFIG_GPIO_MOCKUP is not set CONFIG_GPIO_VIRTIO=y # CONFIG_GPIO_SIM is not set # end of Virtual GPIO drivers # CONFIG_W1 is not set # CONFIG_POWER_RESET is not set CONFIG_POWER_SUPPLY=y # CONFIG_POWER_SUPPLY_DEBUG is not set CONFIG_POWER_SUPPLY_HWMON=y CONFIG_GENERIC_ADC_BATTERY=y CONFIG_IP5XXX_POWER=y CONFIG_MAX8925_POWER=y CONFIG_WM8350_POWER=y CONFIG_TEST_POWER=y CONFIG_BATTERY_88PM860X=y # CONFIG_CHARGER_ADP5061 is not set CONFIG_BATTERY_ACT8945A=y # CONFIG_BATTERY_CW2015 is not set # CONFIG_BATTERY_DS2780 is not set # CONFIG_BATTERY_DS2781 is not set CONFIG_BATTERY_DS2782=y CONFIG_BATTERY_LEGO_EV3=y CONFIG_BATTERY_SAMSUNG_SDI=y # CONFIG_BATTERY_SBS is not set CONFIG_CHARGER_SBS=y CONFIG_MANAGER_SBS=y CONFIG_BATTERY_BQ27XXX=y CONFIG_BATTERY_BQ27XXX_I2C=y # CONFIG_BATTERY_BQ27XXX_DT_UPDATES_NVM is not set CONFIG_BATTERY_DA9030=y # CONFIG_AXP20X_POWER is not set # CONFIG_BATTERY_MAX17040 is not set CONFIG_BATTERY_MAX17042=y CONFIG_CHARGER_88PM860X=y CONFIG_CHARGER_PCF50633=y # CONFIG_CHARGER_MAX8903 is not set # CONFIG_CHARGER_LP8727 is not set CONFIG_CHARGER_GPIO=y CONFIG_CHARGER_MANAGER=y CONFIG_CHARGER_LT3651=y # CONFIG_CHARGER_LTC4162L is not set CONFIG_CHARGER_MAX14577=y CONFIG_CHARGER_DETECTOR_MAX14656=y CONFIG_CHARGER_MAX77650=y # CONFIG_CHARGER_MAX77976 is not set # CONFIG_CHARGER_MT6360 is not set CONFIG_CHARGER_MT6370=y # CONFIG_CHARGER_QCOM_SMBB is not set CONFIG_CHARGER_BQ2415X=y CONFIG_CHARGER_BQ24190=y # CONFIG_CHARGER_BQ24257 is not set CONFIG_CHARGER_BQ24735=y CONFIG_CHARGER_BQ2515X=y # CONFIG_CHARGER_BQ25890 is not set CONFIG_CHARGER_BQ25980=y # CONFIG_CHARGER_BQ256XX is not set CONFIG_CHARGER_SMB347=y # CONFIG_CHARGER_TPS65090 is not set CONFIG_BATTERY_GAUGE_LTC2941=y # CONFIG_BATTERY_GOLDFISH is not set # CONFIG_BATTERY_RT5033 is not set CONFIG_CHARGER_RT9455=y CONFIG_CHARGER_RT9467=y # CONFIG_CHARGER_RT9471 is not set CONFIG_CHARGER_SC2731=y CONFIG_FUEL_GAUGE_SC27XX=y # CONFIG_CHARGER_UCS1002 is not set CONFIG_CHARGER_BD99954=y CONFIG_RN5T618_POWER=y # CONFIG_BATTERY_ACER_A500 is not set CONFIG_BATTERY_SURFACE=y # CONFIG_CHARGER_SURFACE is not set # CONFIG_BATTERY_UG3105 is not set CONFIG_HWMON=y CONFIG_HWMON_VID=y # CONFIG_HWMON_DEBUG_CHIP is not set # # Native drivers # CONFIG_SENSORS_SMPRO=y CONFIG_SENSORS_AD7414=y CONFIG_SENSORS_AD7418=y CONFIG_SENSORS_ADM1021=y CONFIG_SENSORS_ADM1025=y CONFIG_SENSORS_ADM1026=y CONFIG_SENSORS_ADM1029=y # CONFIG_SENSORS_ADM1031 is not set # CONFIG_SENSORS_ADM1177 is not set CONFIG_SENSORS_ADM9240=y # CONFIG_SENSORS_ADT7410 is not set CONFIG_SENSORS_ADT7411=y CONFIG_SENSORS_ADT7462=y CONFIG_SENSORS_ADT7470=y # CONFIG_SENSORS_ADT7475 is not set # CONFIG_SENSORS_AHT10 is not set CONFIG_SENSORS_AS370=y CONFIG_SENSORS_ASC7621=y # CONFIG_SENSORS_AXI_FAN_CONTROL is not set CONFIG_SENSORS_ARM_SCMI=y # CONFIG_SENSORS_ASB100 is not set CONFIG_SENSORS_ASPEED=y # CONFIG_SENSORS_ATXP1 is not set # CONFIG_SENSORS_BT1_PVT is not set CONFIG_SENSORS_DS620=y CONFIG_SENSORS_DS1621=y CONFIG_SENSORS_I5K_AMB=y CONFIG_SENSORS_SPARX5=y # CONFIG_SENSORS_F71805F is not set CONFIG_SENSORS_F71882FG=y # CONFIG_SENSORS_F75375S is not set # CONFIG_SENSORS_MC13783_ADC is not set # CONFIG_SENSORS_FSCHMD is not set CONFIG_SENSORS_GL518SM=y # CONFIG_SENSORS_GL520SM is not set # CONFIG_SENSORS_G760A is not set # CONFIG_SENSORS_G762 is not set CONFIG_SENSORS_GPIO_FAN=y # CONFIG_SENSORS_GXP_FAN_CTRL is not set CONFIG_SENSORS_HIH6130=y CONFIG_SENSORS_IIO_HWMON=y CONFIG_SENSORS_IT87=y # CONFIG_SENSORS_JC42 is not set CONFIG_SENSORS_POWR1220=y # CONFIG_SENSORS_LAN966X is not set CONFIG_SENSORS_LINEAGE=y # CONFIG_SENSORS_LTC2945 is not set CONFIG_SENSORS_LTC2947=y CONFIG_SENSORS_LTC2947_I2C=y CONFIG_SENSORS_LTC2990=y # CONFIG_SENSORS_LTC2992 is not set CONFIG_SENSORS_LTC4151=y # CONFIG_SENSORS_LTC4215 is not set CONFIG_SENSORS_LTC4222=y CONFIG_SENSORS_LTC4245=y CONFIG_SENSORS_LTC4260=y CONFIG_SENSORS_LTC4261=y # CONFIG_SENSORS_MAX127 is not set CONFIG_SENSORS_MAX16065=y # CONFIG_SENSORS_MAX1619 is not set CONFIG_SENSORS_MAX1668=y CONFIG_SENSORS_MAX197=y CONFIG_SENSORS_MAX31730=y CONFIG_SENSORS_MAX31760=y CONFIG_SENSORS_MAX6620=y CONFIG_SENSORS_MAX6621=y CONFIG_SENSORS_MAX6639=y CONFIG_SENSORS_MAX6642=y # CONFIG_SENSORS_MAX6650 is not set CONFIG_SENSORS_MAX6697=y CONFIG_SENSORS_MAX31790=y CONFIG_SENSORS_MC34VR500=y CONFIG_SENSORS_MCP3021=y CONFIG_SENSORS_TC654=y CONFIG_SENSORS_TPS23861=y CONFIG_SENSORS_MENF21BMC_HWMON=y # CONFIG_SENSORS_MR75203 is not set CONFIG_SENSORS_LM63=y # CONFIG_SENSORS_LM73 is not set # CONFIG_SENSORS_LM75 is not set CONFIG_SENSORS_LM77=y CONFIG_SENSORS_LM78=y # CONFIG_SENSORS_LM80 is not set CONFIG_SENSORS_LM83=y # CONFIG_SENSORS_LM85 is not set # CONFIG_SENSORS_LM87 is not set # CONFIG_SENSORS_LM90 is not set CONFIG_SENSORS_LM92=y # CONFIG_SENSORS_LM93 is not set CONFIG_SENSORS_LM95234=y # CONFIG_SENSORS_LM95241 is not set CONFIG_SENSORS_LM95245=y CONFIG_SENSORS_PC87360=y # CONFIG_SENSORS_PC87427 is not set CONFIG_SENSORS_NTC_THERMISTOR=y CONFIG_SENSORS_NCT6683=y CONFIG_SENSORS_NCT6775_CORE=y CONFIG_SENSORS_NCT6775=y CONFIG_SENSORS_NCT6775_I2C=y CONFIG_SENSORS_NCT7802=y CONFIG_SENSORS_NPCM7XX=y CONFIG_SENSORS_NSA320=y CONFIG_SENSORS_OCC_P8_I2C=y # CONFIG_SENSORS_OCC_P9_SBE is not set CONFIG_SENSORS_OCC=y CONFIG_SENSORS_PCF8591=y CONFIG_PMBUS=y CONFIG_SENSORS_PMBUS=y CONFIG_SENSORS_ACBEL_FSG032=y CONFIG_SENSORS_ADM1266=y CONFIG_SENSORS_ADM1275=y # CONFIG_SENSORS_BEL_PFE is not set # CONFIG_SENSORS_BPA_RS600 is not set CONFIG_SENSORS_DELTA_AHE50DC_FAN=y CONFIG_SENSORS_FSP_3Y=y # CONFIG_SENSORS_IBM_CFFPS is not set # CONFIG_SENSORS_DPS920AB is not set # CONFIG_SENSORS_INSPUR_IPSPS is not set # CONFIG_SENSORS_IR35221 is not set CONFIG_SENSORS_IR36021=y # CONFIG_SENSORS_IR38064 is not set CONFIG_SENSORS_IRPS5401=y CONFIG_SENSORS_ISL68137=y CONFIG_SENSORS_LM25066=y CONFIG_SENSORS_LM25066_REGULATOR=y CONFIG_SENSORS_LT7182S=y # CONFIG_SENSORS_LTC2978 is not set CONFIG_SENSORS_LTC3815=y # CONFIG_SENSORS_MAX15301 is not set # CONFIG_SENSORS_MAX16064 is not set CONFIG_SENSORS_MAX16601=y # CONFIG_SENSORS_MAX20730 is not set CONFIG_SENSORS_MAX20751=y # CONFIG_SENSORS_MAX31785 is not set CONFIG_SENSORS_MAX34440=y # CONFIG_SENSORS_MAX8688 is not set CONFIG_SENSORS_MP2888=y CONFIG_SENSORS_MP2975=y # CONFIG_SENSORS_MP5023 is not set CONFIG_SENSORS_MPQ7932_REGULATOR=y CONFIG_SENSORS_MPQ7932=y # CONFIG_SENSORS_PIM4328 is not set CONFIG_SENSORS_PLI1209BC=y CONFIG_SENSORS_PLI1209BC_REGULATOR=y CONFIG_SENSORS_PM6764TR=y CONFIG_SENSORS_PXE1610=y CONFIG_SENSORS_Q54SJ108A2=y # CONFIG_SENSORS_STPDDC60 is not set CONFIG_SENSORS_TDA38640=y # CONFIG_SENSORS_TDA38640_REGULATOR is not set CONFIG_SENSORS_TPS40422=y # CONFIG_SENSORS_TPS53679 is not set CONFIG_SENSORS_TPS546D24=y CONFIG_SENSORS_UCD9000=y CONFIG_SENSORS_UCD9200=y CONFIG_SENSORS_XDPE152=y CONFIG_SENSORS_XDPE122=y # CONFIG_SENSORS_XDPE122_REGULATOR is not set # CONFIG_SENSORS_ZL6100 is not set # CONFIG_SENSORS_PWM_FAN is not set # CONFIG_SENSORS_RASPBERRYPI_HWMON is not set CONFIG_SENSORS_SL28CPLD=y CONFIG_SENSORS_SBTSI=y CONFIG_SENSORS_SBRMI=y CONFIG_SENSORS_SHT15=y CONFIG_SENSORS_SHT21=y CONFIG_SENSORS_SHT3x=y # CONFIG_SENSORS_SHT4x is not set CONFIG_SENSORS_SHTC1=y # CONFIG_SENSORS_SIS5595 is not set CONFIG_SENSORS_DME1737=y # CONFIG_SENSORS_EMC1403 is not set CONFIG_SENSORS_EMC2103=y CONFIG_SENSORS_EMC2305=y CONFIG_SENSORS_EMC6W201=y CONFIG_SENSORS_SMSC47M1=y CONFIG_SENSORS_SMSC47M192=y CONFIG_SENSORS_SMSC47B397=y CONFIG_SENSORS_STTS751=y CONFIG_SENSORS_SFCTEMP=y # CONFIG_SENSORS_SMM665 is not set # CONFIG_SENSORS_ADC128D818 is not set CONFIG_SENSORS_ADS7828=y CONFIG_SENSORS_AMC6821=y CONFIG_SENSORS_INA209=y CONFIG_SENSORS_INA2XX=y CONFIG_SENSORS_INA238=y # CONFIG_SENSORS_INA3221 is not set # CONFIG_SENSORS_TC74 is not set CONFIG_SENSORS_THMC50=y # CONFIG_SENSORS_TMP102 is not set CONFIG_SENSORS_TMP103=y # CONFIG_SENSORS_TMP108 is not set CONFIG_SENSORS_TMP401=y # CONFIG_SENSORS_TMP421 is not set CONFIG_SENSORS_TMP464=y CONFIG_SENSORS_TMP513=y # CONFIG_SENSORS_VIA686A is not set CONFIG_SENSORS_VT1211=y # CONFIG_SENSORS_VT8231 is not set CONFIG_SENSORS_W83773G=y CONFIG_SENSORS_W83781D=y CONFIG_SENSORS_W83791D=y CONFIG_SENSORS_W83792D=y CONFIG_SENSORS_W83793=y CONFIG_SENSORS_W83795=y # CONFIG_SENSORS_W83795_FANCTRL is not set # CONFIG_SENSORS_W83L785TS is not set # CONFIG_SENSORS_W83L786NG is not set CONFIG_SENSORS_W83627HF=y # CONFIG_SENSORS_W83627EHF is not set CONFIG_SENSORS_WM8350=y # # ACPI drivers # # CONFIG_SENSORS_ACPI_POWER is not set CONFIG_THERMAL=y CONFIG_THERMAL_NETLINK=y CONFIG_THERMAL_STATISTICS=y CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 # CONFIG_THERMAL_HWMON is not set CONFIG_THERMAL_OF=y CONFIG_THERMAL_WRITABLE_TRIPS=y # CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE is not set CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE=y # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set CONFIG_THERMAL_GOV_FAIR_SHARE=y # CONFIG_THERMAL_GOV_STEP_WISE is not set CONFIG_THERMAL_GOV_BANG_BANG=y CONFIG_THERMAL_GOV_USER_SPACE=y CONFIG_CPU_THERMAL=y CONFIG_DEVFREQ_THERMAL=y CONFIG_THERMAL_EMULATION=y CONFIG_THERMAL_MMIO=y # CONFIG_HISI_THERMAL is not set CONFIG_IMX_THERMAL=y CONFIG_IMX8MM_THERMAL=y CONFIG_K3_THERMAL=y CONFIG_QORIQ_THERMAL=y # CONFIG_SPEAR_THERMAL is not set CONFIG_SUN8I_THERMAL=y CONFIG_ROCKCHIP_THERMAL=y CONFIG_RCAR_THERMAL=y CONFIG_RCAR_GEN3_THERMAL=y CONFIG_RZG2L_THERMAL=y # CONFIG_KIRKWOOD_THERMAL is not set CONFIG_DOVE_THERMAL=y # CONFIG_ARMADA_THERMAL is not set CONFIG_DA9062_THERMAL=y # # Mediatek thermal drivers # CONFIG_MTK_THERMAL=y CONFIG_MTK_SOC_THERMAL=y CONFIG_MTK_LVTS_THERMAL=y CONFIG_MTK_LVTS_THERMAL_DEBUGFS=y # end of Mediatek thermal drivers # # Intel thermal drivers # # # ACPI INT340X thermal drivers # # end of ACPI INT340X thermal drivers # end of Intel thermal drivers # # Broadcom thermal drivers # # CONFIG_BCM2711_THERMAL is not set CONFIG_BCM2835_THERMAL=y CONFIG_BRCMSTB_THERMAL=y CONFIG_BCM_NS_THERMAL=y CONFIG_BCM_SR_THERMAL=y # end of Broadcom thermal drivers # # Texas Instruments thermal drivers # CONFIG_TI_SOC_THERMAL=y CONFIG_TI_THERMAL=y # CONFIG_OMAP3_THERMAL is not set # CONFIG_OMAP4_THERMAL is not set # CONFIG_OMAP5_THERMAL is not set # CONFIG_DRA752_THERMAL is not set # end of Texas Instruments thermal drivers # # Samsung thermal drivers # # CONFIG_EXYNOS_THERMAL is not set # end of Samsung thermal drivers # # NVIDIA Tegra thermal drivers # CONFIG_TEGRA_SOCTHERM=y CONFIG_TEGRA_BPMP_THERMAL=y CONFIG_TEGRA30_TSENSOR=y # end of NVIDIA Tegra thermal drivers CONFIG_GENERIC_ADC_THERMAL=y # # Qualcomm thermal drivers # CONFIG_QCOM_TSENS=y # end of Qualcomm thermal drivers CONFIG_UNIPHIER_THERMAL=y # CONFIG_SPRD_THERMAL is not set # CONFIG_WATCHDOG is not set CONFIG_SSB_POSSIBLE=y CONFIG_SSB=y CONFIG_SSB_SPROM=y CONFIG_SSB_PCIHOST_POSSIBLE=y CONFIG_SSB_PCIHOST=y CONFIG_SSB_SDIOHOST_POSSIBLE=y CONFIG_SSB_SDIOHOST=y CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y CONFIG_SSB_DRIVER_PCICORE=y CONFIG_SSB_DRIVER_GPIO=y CONFIG_BCMA_POSSIBLE=y CONFIG_BCMA=y CONFIG_BCMA_HOST_PCI_POSSIBLE=y # CONFIG_BCMA_HOST_PCI is not set CONFIG_BCMA_HOST_SOC=y # CONFIG_BCMA_DRIVER_PCI is not set CONFIG_BCMA_DRIVER_MIPS=y CONFIG_BCMA_PFLASH=y # CONFIG_BCMA_SFLASH is not set CONFIG_BCMA_NFLASH=y # CONFIG_BCMA_DRIVER_GMAC_CMN is not set CONFIG_BCMA_DRIVER_GPIO=y CONFIG_BCMA_DEBUG=y # # Multifunction device drivers # CONFIG_MFD_CORE=y CONFIG_MFD_ACT8945A=y # CONFIG_MFD_AS3711 is not set CONFIG_MFD_SMPRO=y CONFIG_MFD_AS3722=y # CONFIG_PMIC_ADP5520 is not set CONFIG_MFD_AAT2870_CORE=y CONFIG_MFD_AT91_USART=y CONFIG_MFD_ATMEL_FLEXCOM=y CONFIG_MFD_ATMEL_HLCDC=y # CONFIG_MFD_BCM590XX is not set CONFIG_MFD_BD9571MWV=y CONFIG_MFD_AXP20X=y CONFIG_MFD_AXP20X_I2C=y CONFIG_MFD_MADERA=y CONFIG_MFD_MADERA_I2C=y CONFIG_MFD_MAX597X=y # CONFIG_MFD_CS47L15 is not set CONFIG_MFD_CS47L35=y CONFIG_MFD_CS47L85=y # CONFIG_MFD_CS47L90 is not set CONFIG_MFD_CS47L92=y CONFIG_PMIC_DA903X=y # CONFIG_MFD_DA9052_I2C is not set # CONFIG_MFD_DA9055 is not set # CONFIG_MFD_DA9062 is not set CONFIG_MFD_DA9063=y # CONFIG_MFD_DA9150 is not set # CONFIG_MFD_ENE_KB3930 is not set CONFIG_MFD_EXYNOS_LPASS=y # CONFIG_MFD_GATEWORKS_GSC is not set CONFIG_MFD_MC13XXX=y CONFIG_MFD_MC13XXX_I2C=y CONFIG_MFD_MP2629=y # CONFIG_MFD_MXS_LRADC is not set CONFIG_MFD_MX25_TSADC=y # CONFIG_MFD_HI6421_PMIC is not set # CONFIG_MFD_HI655X_PMIC is not set # CONFIG_LPC_ICH is not set # CONFIG_LPC_SCH is not set CONFIG_INTEL_SOC_PMIC=y # CONFIG_INTEL_SOC_PMIC_CHTWC is not set CONFIG_MFD_IQS62X=y # CONFIG_MFD_JANZ_CMODIO is not set CONFIG_MFD_KEMPLD=y CONFIG_MFD_88PM800=y CONFIG_MFD_88PM805=y CONFIG_MFD_88PM860X=y CONFIG_MFD_MAX14577=y # CONFIG_MFD_MAX77620 is not set CONFIG_MFD_MAX77650=y CONFIG_MFD_MAX77686=y # CONFIG_MFD_MAX77693 is not set # CONFIG_MFD_MAX77714 is not set # CONFIG_MFD_MAX77843 is not set CONFIG_MFD_MAX8907=y CONFIG_MFD_MAX8925=y # CONFIG_MFD_MAX8997 is not set CONFIG_MFD_MAX8998=y CONFIG_MFD_MT6360=y CONFIG_MFD_MT6370=y # CONFIG_MFD_MT6397 is not set CONFIG_MFD_MENF21BMC=y CONFIG_MFD_NTXEC=y CONFIG_MFD_RETU=y CONFIG_MFD_PCF50633=y CONFIG_PCF50633_ADC=y CONFIG_PCF50633_GPIO=y CONFIG_MFD_PM8XXX=y # CONFIG_MFD_SY7636A is not set CONFIG_MFD_RDC321X=y # CONFIG_MFD_RT4831 is not set # CONFIG_MFD_RT5033 is not set # CONFIG_MFD_RT5120 is not set CONFIG_MFD_RC5T583=y # CONFIG_MFD_RK808 is not set CONFIG_MFD_RN5T618=y CONFIG_MFD_SEC_CORE=y # CONFIG_MFD_SI476X_CORE is not set CONFIG_MFD_SIMPLE_MFD_I2C=y CONFIG_MFD_SL28CPLD=y # CONFIG_MFD_SM501 is not set # CONFIG_MFD_SKY81452 is not set # CONFIG_RZ_MTU3 is not set CONFIG_ABX500_CORE=y # CONFIG_MFD_STMPE is not set # CONFIG_MFD_SUN6I_PRCM is not set CONFIG_MFD_SYSCON=y CONFIG_MFD_TI_AM335X_TSCADC=y CONFIG_MFD_LP3943=y # CONFIG_MFD_LP8788 is not set CONFIG_MFD_TI_LMU=y # CONFIG_MFD_PALMAS is not set # CONFIG_TPS6105X is not set CONFIG_TPS65010=y CONFIG_TPS6507X=y # CONFIG_MFD_TPS65086 is not set CONFIG_MFD_TPS65090=y # CONFIG_MFD_TPS65217 is not set # CONFIG_MFD_TI_LP873X is not set # CONFIG_MFD_TI_LP87565 is not set # CONFIG_MFD_TPS65218 is not set # CONFIG_MFD_TPS65219 is not set CONFIG_MFD_TPS6586X=y CONFIG_MFD_TPS65910=y # CONFIG_MFD_TPS65912_I2C is not set # CONFIG_TWL4030_CORE is not set CONFIG_TWL6040_CORE=y CONFIG_MFD_WL1273_CORE=y # CONFIG_MFD_LM3533 is not set # CONFIG_MFD_TIMBERDALE is not set CONFIG_MFD_TC3589X=y CONFIG_MFD_TQMX86=y CONFIG_MFD_VX855=y # CONFIG_MFD_LOCHNAGAR is not set # CONFIG_MFD_ARIZONA_I2C is not set # CONFIG_MFD_WM8400 is not set # CONFIG_MFD_WM831X_I2C is not set CONFIG_MFD_WM8350=y CONFIG_MFD_WM8350_I2C=y CONFIG_MFD_WM8994=y CONFIG_MFD_STW481X=y # CONFIG_MFD_ROHM_BD718XX is not set # CONFIG_MFD_ROHM_BD71828 is not set # CONFIG_MFD_ROHM_BD957XMUF is not set CONFIG_MFD_STM32_LPTIMER=y CONFIG_MFD_STM32_TIMERS=y # CONFIG_MFD_STPMIC1 is not set CONFIG_MFD_STMFX=y CONFIG_MFD_ATC260X=y CONFIG_MFD_ATC260X_I2C=y # CONFIG_MFD_KHADAS_MCU is not set CONFIG_MFD_ACER_A500_EC=y # CONFIG_MFD_QCOM_PM8008 is not set CONFIG_RAVE_SP_CORE=y CONFIG_MFD_RSMU_I2C=y # end of Multifunction device drivers CONFIG_REGULATOR=y CONFIG_REGULATOR_DEBUG=y # CONFIG_REGULATOR_FIXED_VOLTAGE is not set CONFIG_REGULATOR_VIRTUAL_CONSUMER=y # CONFIG_REGULATOR_USERSPACE_CONSUMER is not set CONFIG_REGULATOR_88PG86X=y CONFIG_REGULATOR_88PM800=y # CONFIG_REGULATOR_88PM8607 is not set CONFIG_REGULATOR_ACT8865=y # CONFIG_REGULATOR_ACT8945A is not set # CONFIG_REGULATOR_AD5398 is not set CONFIG_REGULATOR_ANATOP=y CONFIG_REGULATOR_AAT2870=y # CONFIG_REGULATOR_ARM_SCMI is not set CONFIG_REGULATOR_AS3722=y CONFIG_REGULATOR_ATC260X=y # CONFIG_REGULATOR_AXP20X is not set CONFIG_REGULATOR_BD9571MWV=y CONFIG_REGULATOR_DA903X=y CONFIG_REGULATOR_DA9063=y CONFIG_REGULATOR_DA9121=y CONFIG_REGULATOR_DA9210=y # CONFIG_REGULATOR_DA9211 is not set CONFIG_REGULATOR_FAN53555=y # CONFIG_REGULATOR_FAN53880 is not set CONFIG_REGULATOR_GPIO=y CONFIG_REGULATOR_ISL9305=y CONFIG_REGULATOR_ISL6271A=y CONFIG_REGULATOR_LM363X=y CONFIG_REGULATOR_LP3971=y CONFIG_REGULATOR_LP3972=y CONFIG_REGULATOR_LP872X=y CONFIG_REGULATOR_LP8755=y CONFIG_REGULATOR_LTC3589=y CONFIG_REGULATOR_LTC3676=y CONFIG_REGULATOR_MAX14577=y # CONFIG_REGULATOR_MAX1586 is not set CONFIG_REGULATOR_MAX597X=y CONFIG_REGULATOR_MAX77620=y # CONFIG_REGULATOR_MAX77650 is not set CONFIG_REGULATOR_MAX8649=y CONFIG_REGULATOR_MAX8660=y CONFIG_REGULATOR_MAX8893=y CONFIG_REGULATOR_MAX8907=y CONFIG_REGULATOR_MAX8925=y # CONFIG_REGULATOR_MAX8952 is not set CONFIG_REGULATOR_MAX8973=y # CONFIG_REGULATOR_MAX8998 is not set # CONFIG_REGULATOR_MAX20086 is not set CONFIG_REGULATOR_MAX20411=y # CONFIG_REGULATOR_MAX77686 is not set CONFIG_REGULATOR_MAX77693=y CONFIG_REGULATOR_MAX77802=y CONFIG_REGULATOR_MAX77826=y CONFIG_REGULATOR_MC13XXX_CORE=y CONFIG_REGULATOR_MC13783=y CONFIG_REGULATOR_MC13892=y CONFIG_REGULATOR_MCP16502=y CONFIG_REGULATOR_MP5416=y # CONFIG_REGULATOR_MP8859 is not set # CONFIG_REGULATOR_MP886X is not set # CONFIG_REGULATOR_MPQ7920 is not set CONFIG_REGULATOR_MT6311=y # CONFIG_REGULATOR_MT6360 is not set CONFIG_REGULATOR_MT6370=y CONFIG_REGULATOR_MT6380=y CONFIG_REGULATOR_PBIAS=y CONFIG_REGULATOR_PCA9450=y CONFIG_REGULATOR_PCF50633=y # CONFIG_REGULATOR_PF8X00 is not set # CONFIG_REGULATOR_PFUZE100 is not set CONFIG_REGULATOR_PV88060=y # CONFIG_REGULATOR_PV88080 is not set CONFIG_REGULATOR_PV88090=y # CONFIG_REGULATOR_QCOM_RPMH is not set # CONFIG_REGULATOR_QCOM_SPMI is not set # CONFIG_REGULATOR_QCOM_USB_VBUS is not set CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=y CONFIG_REGULATOR_RC5T583=y CONFIG_REGULATOR_RN5T618=y # CONFIG_REGULATOR_RT4801 is not set CONFIG_REGULATOR_RT4803=y # CONFIG_REGULATOR_RT5190A is not set CONFIG_REGULATOR_RT5739=y CONFIG_REGULATOR_RT5759=y CONFIG_REGULATOR_RT6160=y CONFIG_REGULATOR_RT6190=y CONFIG_REGULATOR_RT6245=y CONFIG_REGULATOR_RTQ2134=y # CONFIG_REGULATOR_RTMV20 is not set CONFIG_REGULATOR_RTQ6752=y CONFIG_REGULATOR_S2MPA01=y CONFIG_REGULATOR_S2MPS11=y CONFIG_REGULATOR_S5M8767=y CONFIG_REGULATOR_SC2731=y CONFIG_REGULATOR_SLG51000=y CONFIG_REGULATOR_STM32_BOOSTER=y CONFIG_REGULATOR_STM32_VREFBUF=y CONFIG_REGULATOR_STM32_PWR=y CONFIG_REGULATOR_TI_ABB=y CONFIG_REGULATOR_STW481X_VMMC=y # CONFIG_REGULATOR_SY8106A is not set # CONFIG_REGULATOR_SY8824X is not set CONFIG_REGULATOR_SY8827N=y CONFIG_REGULATOR_TPS51632=y CONFIG_REGULATOR_TPS62360=y CONFIG_REGULATOR_TPS6286X=y CONFIG_REGULATOR_TPS65023=y CONFIG_REGULATOR_TPS6507X=y # CONFIG_REGULATOR_TPS65090 is not set CONFIG_REGULATOR_TPS65132=y CONFIG_REGULATOR_TPS6586X=y # CONFIG_REGULATOR_TPS65910 is not set # CONFIG_REGULATOR_TPS68470 is not set CONFIG_REGULATOR_UNIPHIER=y CONFIG_REGULATOR_VCTRL=y CONFIG_REGULATOR_WM8350=y CONFIG_REGULATOR_WM8994=y CONFIG_REGULATOR_QCOM_LABIBB=y CONFIG_RC_CORE=y # CONFIG_BPF_LIRC_MODE2 is not set CONFIG_LIRC=y CONFIG_RC_MAP=y CONFIG_RC_DECODERS=y CONFIG_IR_IMON_DECODER=y # CONFIG_IR_JVC_DECODER is not set CONFIG_IR_MCE_KBD_DECODER=y # CONFIG_IR_NEC_DECODER is not set CONFIG_IR_RC5_DECODER=y CONFIG_IR_RC6_DECODER=y CONFIG_IR_RCMM_DECODER=y # CONFIG_IR_SANYO_DECODER is not set CONFIG_IR_SHARP_DECODER=y CONFIG_IR_SONY_DECODER=y CONFIG_IR_XMP_DECODER=y CONFIG_RC_DEVICES=y CONFIG_IR_ENE=y # CONFIG_IR_FINTEK is not set CONFIG_IR_GPIO_CIR=y CONFIG_IR_GPIO_TX=y # CONFIG_IR_HIX5HD2 is not set # CONFIG_IR_ITE_CIR is not set CONFIG_IR_MESON=y # CONFIG_IR_MESON_TX is not set CONFIG_IR_MTK=y CONFIG_IR_NUVOTON=y CONFIG_IR_RX51=y CONFIG_IR_SERIAL=y # CONFIG_IR_SERIAL_TRANSMITTER is not set CONFIG_IR_SUNXI=y # CONFIG_IR_WINBOND_CIR is not set CONFIG_RC_LOOPBACK=y CONFIG_RC_ST=y # CONFIG_IR_IMG is not set CONFIG_CEC_CORE=y CONFIG_CEC_NOTIFIER=y CONFIG_CEC_PIN=y # # CEC support # # CONFIG_MEDIA_CEC_RC is not set # CONFIG_CEC_PIN_ERROR_INJ is not set # CONFIG_MEDIA_CEC_SUPPORT is not set # end of CEC support CONFIG_MEDIA_SUPPORT=y # CONFIG_MEDIA_SUPPORT_FILTER is not set CONFIG_MEDIA_SUBDRV_AUTOSELECT=y # # Media device types # CONFIG_MEDIA_CAMERA_SUPPORT=y CONFIG_MEDIA_ANALOG_TV_SUPPORT=y CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y CONFIG_MEDIA_RADIO_SUPPORT=y CONFIG_MEDIA_SDR_SUPPORT=y CONFIG_MEDIA_PLATFORM_SUPPORT=y CONFIG_MEDIA_TEST_SUPPORT=y # end of Media device types # # Media core support # # CONFIG_VIDEO_DEV is not set # CONFIG_MEDIA_CONTROLLER is not set CONFIG_DVB_CORE=y # end of Media core support # # Digital TV options # # CONFIG_DVB_NET is not set CONFIG_DVB_MAX_ADAPTERS=16 # CONFIG_DVB_DYNAMIC_MINORS is not set CONFIG_DVB_DEMUX_SECTION_LOSS_LOG=y CONFIG_DVB_ULE_DEBUG=y # end of Digital TV options # # Media drivers # # # Media drivers # CONFIG_MEDIA_PCI_SUPPORT=y # # Media capture support # # # Media capture/analog TV support # # # Media capture/analog/hybrid TV support # # # Media digital TV PCI Adapters # CONFIG_DVB_B2C2_FLEXCOP_PCI=y # CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set CONFIG_DVB_DDBRIDGE=y CONFIG_DVB_DDBRIDGE_MSIENABLE=y CONFIG_DVB_DM1105=y CONFIG_MANTIS_CORE=y CONFIG_DVB_MANTIS=y CONFIG_DVB_HOPPER=y CONFIG_DVB_NGENE=y CONFIG_DVB_PLUTO2=y CONFIG_DVB_PT1=y # CONFIG_DVB_PT3 is not set CONFIG_DVB_SMIPCIE=y # CONFIG_DVB_BUDGET_CORE is not set CONFIG_MEDIA_PLATFORM_DRIVERS=y CONFIG_V4L_PLATFORM_DRIVERS=y # CONFIG_SDR_PLATFORM_DRIVERS is not set CONFIG_DVB_PLATFORM_DRIVERS=y # # Allegro DVT media platform drivers # # # Amlogic media platform drivers # # # Amphion drivers # # # Aspeed media platform drivers # # # Atmel media platform drivers # # # Cadence media platform drivers # # # Chips&Media media platform drivers # # # Intel media platform drivers # # # Marvell media platform drivers # # # Mediatek media platform drivers # # # Microchip Technology, Inc. media platform drivers # # # NVidia media platform drivers # # # NXP media platform drivers # # # Qualcomm media platform drivers # # # Renesas media platform drivers # # # Rockchip media platform drivers # # # Samsung media platform drivers # # # STMicroelectronics media platform drivers # CONFIG_DVB_C8SECTPFE=y # # Sunxi media platform drivers # # # Texas Instruments drivers # # # Verisilicon media platform drivers # # # VIA media platform drivers # # # Xilinx media platform drivers # # # MMC/SDIO DVB adapters # CONFIG_SMS_SDIO_DRV=y # CONFIG_DVB_TEST_DRIVERS is not set # # FireWire (IEEE 1394) Adapters # CONFIG_DVB_FIREDTV=y CONFIG_DVB_FIREDTV_INPUT=y CONFIG_MEDIA_COMMON_OPTIONS=y # # common driver options # CONFIG_DVB_B2C2_FLEXCOP=y CONFIG_SMS_SIANO_MDTV=y CONFIG_SMS_SIANO_RC=y # end of Media drivers # # Media ancillary drivers # CONFIG_MEDIA_TUNER=y # # Customize TV tuners # CONFIG_MEDIA_TUNER_FC0011=y CONFIG_MEDIA_TUNER_FC0012=y # CONFIG_MEDIA_TUNER_FC0013 is not set CONFIG_MEDIA_TUNER_IT913X=y CONFIG_MEDIA_TUNER_M88RS6000T=y # CONFIG_MEDIA_TUNER_MAX2165 is not set CONFIG_MEDIA_TUNER_MC44S803=y CONFIG_MEDIA_TUNER_MT2060=y # CONFIG_MEDIA_TUNER_MT2063 is not set CONFIG_MEDIA_TUNER_MT20XX=y CONFIG_MEDIA_TUNER_MT2131=y CONFIG_MEDIA_TUNER_MT2266=y CONFIG_MEDIA_TUNER_MXL301RF=y # CONFIG_MEDIA_TUNER_MXL5005S is not set # CONFIG_MEDIA_TUNER_MXL5007T is not set CONFIG_MEDIA_TUNER_QM1D1B0004=y CONFIG_MEDIA_TUNER_QM1D1C0042=y # CONFIG_MEDIA_TUNER_QT1010 is not set CONFIG_MEDIA_TUNER_R820T=y CONFIG_MEDIA_TUNER_SI2157=y CONFIG_MEDIA_TUNER_SIMPLE=y CONFIG_MEDIA_TUNER_TDA18212=y CONFIG_MEDIA_TUNER_TDA18218=y CONFIG_MEDIA_TUNER_TDA18250=y CONFIG_MEDIA_TUNER_TDA18271=y CONFIG_MEDIA_TUNER_TDA827X=y CONFIG_MEDIA_TUNER_TDA8290=y CONFIG_MEDIA_TUNER_TDA9887=y CONFIG_MEDIA_TUNER_TEA5761=y CONFIG_MEDIA_TUNER_TEA5767=y CONFIG_MEDIA_TUNER_TUA9001=y CONFIG_MEDIA_TUNER_XC2028=y CONFIG_MEDIA_TUNER_XC4000=y CONFIG_MEDIA_TUNER_XC5000=y # end of Customize TV tuners # # Customise DVB Frontends # # # Multistandard (satellite) frontends # CONFIG_DVB_M88DS3103=y CONFIG_DVB_MXL5XX=y CONFIG_DVB_STB0899=y CONFIG_DVB_STB6100=y CONFIG_DVB_STV090x=y CONFIG_DVB_STV0910=y CONFIG_DVB_STV6110x=y CONFIG_DVB_STV6111=y # # Multistandard (cable + terrestrial) frontends # CONFIG_DVB_DRXK=y CONFIG_DVB_MN88472=y CONFIG_DVB_MN88473=y CONFIG_DVB_SI2165=y CONFIG_DVB_TDA18271C2DD=y # # DVB-S (satellite) frontends # # CONFIG_DVB_CX24110 is not set CONFIG_DVB_CX24116=y CONFIG_DVB_CX24117=y CONFIG_DVB_CX24120=y CONFIG_DVB_CX24123=y CONFIG_DVB_DS3000=y CONFIG_DVB_MB86A16=y CONFIG_DVB_MT312=y CONFIG_DVB_S5H1420=y CONFIG_DVB_SI21XX=y CONFIG_DVB_STB6000=y CONFIG_DVB_STV0288=y CONFIG_DVB_STV0299=y CONFIG_DVB_STV0900=y CONFIG_DVB_STV6110=y CONFIG_DVB_TDA10071=y CONFIG_DVB_TDA10086=y CONFIG_DVB_TDA8083=y # CONFIG_DVB_TDA8261 is not set CONFIG_DVB_TDA826X=y CONFIG_DVB_TS2020=y # CONFIG_DVB_TUA6100 is not set CONFIG_DVB_TUNER_CX24113=y CONFIG_DVB_TUNER_ITD1000=y CONFIG_DVB_VES1X93=y CONFIG_DVB_ZL10036=y CONFIG_DVB_ZL10039=y # # DVB-T (terrestrial) frontends # CONFIG_DVB_AF9013=y # CONFIG_DVB_CX22700 is not set CONFIG_DVB_CX22702=y CONFIG_DVB_CXD2820R=y CONFIG_DVB_CXD2841ER=y # CONFIG_DVB_DIB3000MB is not set CONFIG_DVB_DIB3000MC=y # CONFIG_DVB_DIB7000M is not set CONFIG_DVB_DIB7000P=y CONFIG_DVB_DIB9000=y CONFIG_DVB_DRXD=y # CONFIG_DVB_EC100 is not set CONFIG_DVB_L64781=y CONFIG_DVB_MT352=y # CONFIG_DVB_NXT6000 is not set CONFIG_DVB_RTL2830=y CONFIG_DVB_RTL2832=y CONFIG_DVB_S5H1432=y CONFIG_DVB_SI2168=y CONFIG_DVB_SP887X=y CONFIG_DVB_STV0367=y # CONFIG_DVB_TDA10048 is not set CONFIG_DVB_TDA1004X=y # CONFIG_DVB_ZD1301_DEMOD is not set CONFIG_DVB_ZL10353=y # # DVB-C (cable) frontends # CONFIG_DVB_STV0297=y CONFIG_DVB_TDA10021=y CONFIG_DVB_TDA10023=y CONFIG_DVB_VES1820=y # # ATSC (North American/Korean Terrestrial/Cable DTV) frontends # CONFIG_DVB_AU8522=y CONFIG_DVB_AU8522_DTV=y CONFIG_DVB_BCM3510=y CONFIG_DVB_LG2160=y # CONFIG_DVB_LGDT3305 is not set CONFIG_DVB_LGDT3306A=y CONFIG_DVB_LGDT330X=y CONFIG_DVB_MXL692=y CONFIG_DVB_NXT200X=y # CONFIG_DVB_OR51132 is not set CONFIG_DVB_OR51211=y CONFIG_DVB_S5H1409=y CONFIG_DVB_S5H1411=y # # ISDB-T (terrestrial) frontends # # CONFIG_DVB_DIB8000 is not set CONFIG_DVB_MB86A20S=y CONFIG_DVB_S921=y # # ISDB-S (satellite) & ISDB-T (terrestrial) frontends # CONFIG_DVB_MN88443X=y CONFIG_DVB_TC90522=y # # Digital terrestrial only tuners/PLL # CONFIG_DVB_PLL=y CONFIG_DVB_TUNER_DIB0070=y # CONFIG_DVB_TUNER_DIB0090 is not set # # SEC control devices for DVB-S # CONFIG_DVB_A8293=y # CONFIG_DVB_AF9033 is not set # CONFIG_DVB_ASCOT2E is not set # CONFIG_DVB_ATBM8830 is not set CONFIG_DVB_HELENE=y # CONFIG_DVB_HORUS3A is not set CONFIG_DVB_ISL6405=y CONFIG_DVB_ISL6421=y CONFIG_DVB_ISL6423=y # CONFIG_DVB_IX2505V is not set CONFIG_DVB_LGS8GL5=y CONFIG_DVB_LGS8GXX=y CONFIG_DVB_LNBH25=y # CONFIG_DVB_LNBH29 is not set CONFIG_DVB_LNBP21=y CONFIG_DVB_LNBP22=y CONFIG_DVB_M88RS2000=y CONFIG_DVB_TDA665x=y # CONFIG_DVB_DRX39XYJ is not set # # Common Interface (EN50221) controller drivers # CONFIG_DVB_CXD2099=y # CONFIG_DVB_SP2 is not set # end of Customise DVB Frontends # # Tools to develop new frontends # # CONFIG_DVB_DUMMY_FE is not set # end of Media ancillary drivers # # Graphics support # CONFIG_APERTURE_HELPERS=y CONFIG_VIDEO_CMDLINE=y CONFIG_VIDEO_NOMODESET=y CONFIG_TEGRA_HOST1X_CONTEXT_BUS=y CONFIG_TEGRA_HOST1X=y # CONFIG_TEGRA_HOST1X_FIREWALL is not set CONFIG_IMX_IPUV3_CORE=y CONFIG_DRM=y CONFIG_DRM_MIPI_DSI=y CONFIG_DRM_DEBUG_MM=y CONFIG_DRM_KMS_HELPER=y CONFIG_DRM_FBDEV_EMULATION=y CONFIG_DRM_FBDEV_OVERALLOC=100 # CONFIG_DRM_LOAD_EDID_FIRMWARE is not set CONFIG_DRM_DP_AUX_BUS=y CONFIG_DRM_DISPLAY_HELPER=y CONFIG_DRM_DISPLAY_DP_HELPER=y CONFIG_DRM_DISPLAY_HDCP_HELPER=y CONFIG_DRM_DISPLAY_HDMI_HELPER=y CONFIG_DRM_DP_AUX_CHARDEV=y # CONFIG_DRM_DP_CEC is not set CONFIG_DRM_TTM=y CONFIG_DRM_BUDDY=y CONFIG_DRM_VRAM_HELPER=y CONFIG_DRM_TTM_HELPER=y CONFIG_DRM_GEM_DMA_HELPER=y CONFIG_DRM_GEM_SHMEM_HELPER=y CONFIG_DRM_SUBALLOC_HELPER=y CONFIG_DRM_SCHED=y # # I2C encoder or helper chips # CONFIG_DRM_I2C_CH7006=y CONFIG_DRM_I2C_SIL164=y # CONFIG_DRM_I2C_NXP_TDA998X is not set CONFIG_DRM_I2C_NXP_TDA9950=y # end of I2C encoder or helper chips # # ARM devices # # CONFIG_DRM_HDLCD is not set # CONFIG_DRM_MALI_DISPLAY is not set # CONFIG_DRM_KOMEDA is not set # end of ARM devices CONFIG_DRM_RADEON=y # CONFIG_DRM_RADEON_USERPTR is not set CONFIG_DRM_AMDGPU=y # CONFIG_DRM_AMDGPU_SI is not set CONFIG_DRM_AMDGPU_CIK=y # CONFIG_DRM_AMDGPU_USERPTR is not set # # ACP (Audio CoProcessor) Configuration # CONFIG_DRM_AMD_ACP=y # end of ACP (Audio CoProcessor) Configuration # # Display Engine Configuration # CONFIG_DRM_AMD_DC=y # end of Display Engine Configuration CONFIG_DRM_NOUVEAU=y CONFIG_NOUVEAU_DEBUG=5 CONFIG_NOUVEAU_DEBUG_DEFAULT=3 CONFIG_NOUVEAU_DEBUG_MMU=y # CONFIG_NOUVEAU_DEBUG_PUSH is not set CONFIG_DRM_NOUVEAU_BACKLIGHT=y # CONFIG_DRM_KMB_DISPLAY is not set CONFIG_DRM_VGEM=y # CONFIG_DRM_VKMS is not set # CONFIG_DRM_EXYNOS is not set # CONFIG_DRM_AST is not set # CONFIG_DRM_MGAG200 is not set CONFIG_DRM_RCAR_DW_HDMI=y # CONFIG_DRM_RCAR_USE_LVDS is not set # CONFIG_DRM_RCAR_USE_MIPI_DSI is not set CONFIG_DRM_RZG2L_MIPI_DSI=y CONFIG_DRM_SUN4I=y CONFIG_DRM_SUN4I_HDMI=y CONFIG_DRM_SUN4I_HDMI_CEC=y CONFIG_DRM_SUN4I_BACKEND=y CONFIG_DRM_SUN6I_DSI=y CONFIG_DRM_SUN8I_DW_HDMI=y CONFIG_DRM_SUN8I_MIXER=y CONFIG_DRM_SUN8I_TCON_TOP=y CONFIG_DRM_QXL=y CONFIG_DRM_VIRTIO_GPU=y # CONFIG_DRM_VIRTIO_GPU_KMS is not set CONFIG_DRM_MSM=y CONFIG_DRM_MSM_GPU_STATE=y CONFIG_DRM_MSM_MDSS=y CONFIG_DRM_MSM_MDP4=y # CONFIG_DRM_MSM_MDP5 is not set CONFIG_DRM_MSM_DPU=y CONFIG_DRM_MSM_DP=y CONFIG_DRM_MSM_DSI=y CONFIG_DRM_MSM_DSI_28NM_PHY=y CONFIG_DRM_MSM_DSI_20NM_PHY=y CONFIG_DRM_MSM_DSI_28NM_8960_PHY=y # CONFIG_DRM_MSM_DSI_14NM_PHY is not set # CONFIG_DRM_MSM_DSI_10NM_PHY is not set CONFIG_DRM_MSM_DSI_7NM_PHY=y # CONFIG_DRM_MSM_HDMI is not set # CONFIG_DRM_TEGRA is not set CONFIG_DRM_PANEL=y # # Display Panels # CONFIG_DRM_PANEL_ARM_VERSATILE=y CONFIG_DRM_PANEL_ASUS_Z00T_TM5P5_NT35596=y # CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0 is not set CONFIG_DRM_PANEL_BOE_HIMAX8279D=y # CONFIG_DRM_PANEL_BOE_TV101WUM_NL6 is not set # CONFIG_DRM_PANEL_DSI_CM is not set # CONFIG_DRM_PANEL_LVDS is not set # CONFIG_DRM_PANEL_SIMPLE is not set CONFIG_DRM_PANEL_EDP=y CONFIG_DRM_PANEL_EBBG_FT8719=y CONFIG_DRM_PANEL_ELIDA_KD35T133=y CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02=y CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D=y CONFIG_DRM_PANEL_HIMAX_HX8394=y CONFIG_DRM_PANEL_ILITEK_ILI9881C=y CONFIG_DRM_PANEL_INNOLUX_P079ZCA=y CONFIG_DRM_PANEL_JADARD_JD9365DA_H3=y CONFIG_DRM_PANEL_JDI_LT070ME05000=y # CONFIG_DRM_PANEL_JDI_R63452 is not set CONFIG_DRM_PANEL_KHADAS_TS050=y # CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04 is not set CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W=y CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829=y CONFIG_DRM_PANEL_NEWVISION_NV3051D=y # CONFIG_DRM_PANEL_NOVATEK_NT35510 is not set # CONFIG_DRM_PANEL_NOVATEK_NT35560 is not set # CONFIG_DRM_PANEL_NOVATEK_NT35950 is not set # CONFIG_DRM_PANEL_NOVATEK_NT36523 is not set CONFIG_DRM_PANEL_NOVATEK_NT36672A=y # CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO=y # CONFIG_DRM_PANEL_ORISETECH_OTM8009A is not set CONFIG_DRM_PANEL_OSD_OSD101T2587_53TS=y CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00=y CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=y CONFIG_DRM_PANEL_RAYDIUM_RM67191=y CONFIG_DRM_PANEL_RAYDIUM_RM68200=y CONFIG_DRM_PANEL_RONBO_RB070D30=y CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20=y # CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=y # CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01=y CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=y CONFIG_DRM_PANEL_SAMSUNG_SOFEF00=y CONFIG_DRM_PANEL_SEIKO_43WVF1G=y # CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set CONFIG_DRM_PANEL_SHARP_LS037V7DW01=y CONFIG_DRM_PANEL_SHARP_LS043T1LE01=y # CONFIG_DRM_PANEL_SHARP_LS060T1SX01 is not set CONFIG_DRM_PANEL_SITRONIX_ST7701=y # CONFIG_DRM_PANEL_SITRONIX_ST7703 is not set # CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521=y CONFIG_DRM_PANEL_TDO_TL070WSH30=y CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=y # CONFIG_DRM_PANEL_VISIONOX_RM69299 is not set # CONFIG_DRM_PANEL_VISIONOX_VTDR6130 is not set CONFIG_DRM_PANEL_XINPENG_XPP055C272=y # end of Display Panels CONFIG_DRM_BRIDGE=y CONFIG_DRM_PANEL_BRIDGE=y # # Display Interface Bridges # CONFIG_DRM_CHIPONE_ICN6211=y CONFIG_DRM_CHRONTEL_CH7033=y CONFIG_DRM_CROS_EC_ANX7688=y CONFIG_DRM_DISPLAY_CONNECTOR=y CONFIG_DRM_FSL_LDB=y CONFIG_DRM_ITE_IT6505=y CONFIG_DRM_LONTIUM_LT8912B=y # CONFIG_DRM_LONTIUM_LT9211 is not set CONFIG_DRM_LONTIUM_LT9611=y # CONFIG_DRM_LONTIUM_LT9611UXC is not set CONFIG_DRM_ITE_IT66121=y CONFIG_DRM_LVDS_CODEC=y CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW=y CONFIG_DRM_NWL_MIPI_DSI=y CONFIG_DRM_NXP_PTN3460=y # CONFIG_DRM_PARADE_PS8622 is not set CONFIG_DRM_PARADE_PS8640=y CONFIG_DRM_SAMSUNG_DSIM=y CONFIG_DRM_SIL_SII8620=y CONFIG_DRM_SII902X=y CONFIG_DRM_SII9234=y CONFIG_DRM_SIMPLE_BRIDGE=y # CONFIG_DRM_THINE_THC63LVD1024 is not set CONFIG_DRM_TOSHIBA_TC358762=y # CONFIG_DRM_TOSHIBA_TC358764 is not set CONFIG_DRM_TOSHIBA_TC358767=y CONFIG_DRM_TOSHIBA_TC358768=y # CONFIG_DRM_TOSHIBA_TC358775 is not set CONFIG_DRM_TI_DLPC3433=y # CONFIG_DRM_TI_TFP410 is not set # CONFIG_DRM_TI_SN65DSI83 is not set CONFIG_DRM_TI_SN65DSI86=y CONFIG_DRM_TI_TPD12S015=y # CONFIG_DRM_ANALOGIX_ANX6345 is not set CONFIG_DRM_ANALOGIX_ANX78XX=y CONFIG_DRM_ANALOGIX_DP=y CONFIG_DRM_ANALOGIX_ANX7625=y # CONFIG_DRM_I2C_ADV7511 is not set # CONFIG_DRM_CDNS_DSI is not set # CONFIG_DRM_CDNS_MHDP8546 is not set CONFIG_DRM_IMX8QM_LDB=y # CONFIG_DRM_IMX8QXP_LDB is not set CONFIG_DRM_IMX8QXP_PIXEL_COMBINER=y CONFIG_DRM_IMX8QXP_PIXEL_LINK_TO_DPI=y CONFIG_DRM_DW_HDMI=y CONFIG_DRM_DW_HDMI_CEC=y # end of Display Interface Bridges CONFIG_DRM_IMX=y # CONFIG_DRM_IMX_PARALLEL_DISPLAY is not set CONFIG_DRM_IMX_TVE=y CONFIG_DRM_IMX_LDB=y # CONFIG_DRM_IMX_HDMI is not set # CONFIG_DRM_IMX_LCDC is not set # CONFIG_DRM_INGENIC is not set CONFIG_DRM_V3D=y CONFIG_DRM_ETNAVIV=y CONFIG_DRM_ETNAVIV_THERMAL=y # CONFIG_DRM_HISI_HIBMC is not set CONFIG_DRM_LOGICVC=y # CONFIG_DRM_MXSFB is not set # CONFIG_DRM_IMX_LCDIF is not set CONFIG_DRM_ARCPGU=y CONFIG_DRM_BOCHS=y CONFIG_DRM_CIRRUS_QEMU=y CONFIG_DRM_OFDRM=y CONFIG_DRM_SIMPLEDRM=y CONFIG_DRM_PL111=y CONFIG_DRM_TVE200=y # CONFIG_DRM_LIMA is not set CONFIG_DRM_PANFROST=y # CONFIG_DRM_ASPEED_GFX is not set CONFIG_DRM_MCDE=y CONFIG_DRM_TIDSS=y CONFIG_DRM_SSD130X=y CONFIG_DRM_SSD130X_I2C=y # CONFIG_DRM_SPRD is not set CONFIG_DRM_LEGACY=y CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y # # Frame buffer Devices # CONFIG_FB_NOTIFY=y CONFIG_FB=y CONFIG_FIRMWARE_EDID=y CONFIG_FB_DDC=y CONFIG_FB_CFB_FILLRECT=y CONFIG_FB_CFB_COPYAREA=y CONFIG_FB_CFB_IMAGEBLIT=y CONFIG_FB_CFB_REV_PIXELS_IN_BYTE=y CONFIG_FB_SYS_FILLRECT=y CONFIG_FB_SYS_COPYAREA=y CONFIG_FB_SYS_IMAGEBLIT=y # CONFIG_FB_FOREIGN_ENDIAN is not set CONFIG_FB_SYS_FOPS=y CONFIG_FB_DEFERRED_IO=y CONFIG_FB_SVGALIB=y CONFIG_FB_MACMODES=y CONFIG_FB_BACKLIGHT=y CONFIG_FB_MODE_HELPERS=y CONFIG_FB_TILEBLITTING=y # # Frame buffer hardware drivers # CONFIG_FB_CIRRUS=y CONFIG_FB_PM2=y # CONFIG_FB_PM2_FIFO_DISCONNECT is not set # CONFIG_FB_CLPS711X is not set CONFIG_FB_IMX=y CONFIG_FB_CYBER2000=y # CONFIG_FB_CYBER2000_DDC is not set CONFIG_FB_ARC=y CONFIG_FB_CONTROL=y CONFIG_FB_ASILIANT=y CONFIG_FB_IMSTT=y # CONFIG_FB_EFI is not set # CONFIG_FB_GBE is not set # CONFIG_FB_PVR2 is not set # CONFIG_FB_OPENCORES is not set # CONFIG_FB_S1D13XXX is not set # CONFIG_FB_ATMEL is not set CONFIG_FB_NVIDIA=y # CONFIG_FB_NVIDIA_I2C is not set # CONFIG_FB_NVIDIA_DEBUG is not set # CONFIG_FB_NVIDIA_BACKLIGHT is not set CONFIG_FB_RIVA=y CONFIG_FB_RIVA_I2C=y CONFIG_FB_RIVA_DEBUG=y CONFIG_FB_RIVA_BACKLIGHT=y # CONFIG_FB_I740 is not set CONFIG_FB_MATROX=y # CONFIG_FB_MATROX_MILLENIUM is not set # CONFIG_FB_MATROX_MYSTIQUE is not set # CONFIG_FB_MATROX_G is not set CONFIG_FB_MATROX_I2C=y CONFIG_FB_RADEON=y CONFIG_FB_RADEON_I2C=y CONFIG_FB_RADEON_BACKLIGHT=y # CONFIG_FB_RADEON_DEBUG is not set # CONFIG_FB_ATY128 is not set # CONFIG_FB_ATY is not set CONFIG_FB_S3=y # CONFIG_FB_S3_DDC is not set CONFIG_FB_SAVAGE=y CONFIG_FB_SAVAGE_I2C=y CONFIG_FB_SAVAGE_ACCEL=y # CONFIG_FB_SIS is not set # CONFIG_FB_VIA is not set CONFIG_FB_NEOMAGIC=y # CONFIG_FB_KYRO is not set CONFIG_FB_3DFX=y # CONFIG_FB_3DFX_ACCEL is not set # CONFIG_FB_3DFX_I2C is not set # CONFIG_FB_VOODOO1 is not set # CONFIG_FB_VT8623 is not set CONFIG_FB_TRIDENT=y # CONFIG_FB_ARK is not set CONFIG_FB_PM3=y CONFIG_FB_CARMINE=y CONFIG_FB_CARMINE_DRAM_EVAL=y # CONFIG_CARMINE_DRAM_CUSTOM is not set CONFIG_FB_WM8505=y # CONFIG_FB_WMT_GE_ROPS is not set # CONFIG_FB_PXA168 is not set # CONFIG_FB_SH_MOBILE_LCDC is not set # CONFIG_FB_S3C is not set # CONFIG_FB_IBM_GXT4500 is not set CONFIG_FB_GOLDFISH=y CONFIG_FB_DA8XX=y CONFIG_FB_VIRTUAL=y # CONFIG_FB_METRONOME is not set CONFIG_FB_MB862XX=y CONFIG_FB_MB862XX_PCI_GDC=y # CONFIG_FB_MB862XX_I2C is not set CONFIG_FB_BROADSHEET=y CONFIG_FB_SSD1307=y CONFIG_FB_SM712=y CONFIG_FB_OMAP2=y CONFIG_FB_OMAP2_DEBUG_SUPPORT=y CONFIG_FB_OMAP2_NUM_FBS=3 CONFIG_FB_OMAP2_DSS_INIT=y CONFIG_FB_OMAP2_DSS=y # CONFIG_FB_OMAP2_DSS_DEBUG is not set # CONFIG_FB_OMAP2_DSS_DEBUGFS is not set CONFIG_FB_OMAP2_DSS_DPI=y # CONFIG_FB_OMAP2_DSS_VENC is not set CONFIG_FB_OMAP2_DSS_HDMI_COMMON=y # CONFIG_FB_OMAP4_DSS_HDMI is not set CONFIG_FB_OMAP5_DSS_HDMI=y CONFIG_FB_OMAP2_DSS_SDI=y CONFIG_FB_OMAP2_DSS_DSI=y CONFIG_FB_OMAP2_DSS_MIN_FCK_PER_PCK=0 CONFIG_FB_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y # # OMAPFB Panel and Encoder Drivers # CONFIG_FB_OMAP2_ENCODER_OPA362=y # CONFIG_FB_OMAP2_ENCODER_TFP410 is not set CONFIG_FB_OMAP2_ENCODER_TPD12S015=y # CONFIG_FB_OMAP2_CONNECTOR_DVI is not set CONFIG_FB_OMAP2_CONNECTOR_HDMI=y CONFIG_FB_OMAP2_CONNECTOR_ANALOG_TV=y CONFIG_FB_OMAP2_PANEL_DPI=y # CONFIG_FB_OMAP2_PANEL_DSI_CM is not set # end of OMAPFB Panel and Encoder Drivers # CONFIG_MMP_DISP is not set # end of Frame buffer Devices # # Backlight & LCD device support # CONFIG_LCD_CLASS_DEVICE=y CONFIG_LCD_PLATFORM=y CONFIG_BACKLIGHT_CLASS_DEVICE=y CONFIG_BACKLIGHT_KTD253=y # CONFIG_BACKLIGHT_KTZ8866 is not set CONFIG_BACKLIGHT_OMAP1=y CONFIG_BACKLIGHT_DA903X=y # CONFIG_BACKLIGHT_MAX8925 is not set CONFIG_BACKLIGHT_MT6370=y CONFIG_BACKLIGHT_QCOM_WLED=y CONFIG_BACKLIGHT_ADP8860=y CONFIG_BACKLIGHT_ADP8870=y CONFIG_BACKLIGHT_88PM860X=y CONFIG_BACKLIGHT_PCF50633=y # CONFIG_BACKLIGHT_AAT2870 is not set CONFIG_BACKLIGHT_LM3639=y # CONFIG_BACKLIGHT_GPIO is not set CONFIG_BACKLIGHT_LV5207LP=y CONFIG_BACKLIGHT_BD6107=y CONFIG_BACKLIGHT_ARCXCNN=y CONFIG_BACKLIGHT_RAVE_SP=y # CONFIG_BACKLIGHT_LED is not set # end of Backlight & LCD device support CONFIG_VGASTATE=y CONFIG_VIDEOMODE_HELPERS=y CONFIG_HDMI=y # # Console display driver support # # CONFIG_VGA_CONSOLE is not set CONFIG_DUMMY_CONSOLE=y CONFIG_DUMMY_CONSOLE_COLUMNS=80 CONFIG_DUMMY_CONSOLE_ROWS=25 CONFIG_FRAMEBUFFER_CONSOLE=y CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION=y CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set # CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER is not set # end of Console display driver support CONFIG_LOGO=y # CONFIG_LOGO_LINUX_MONO is not set CONFIG_LOGO_LINUX_VGA16=y CONFIG_LOGO_LINUX_CLUT224=y # end of Graphics support # CONFIG_DRM_ACCEL is not set # CONFIG_SOUND is not set # CONFIG_HID_SUPPORT is not set CONFIG_USB_OHCI_LITTLE_ENDIAN=y # CONFIG_USB_SUPPORT is not set CONFIG_MMC=y # CONFIG_PWRSEQ_EMMC is not set CONFIG_PWRSEQ_SD8787=y # CONFIG_PWRSEQ_SIMPLE is not set # CONFIG_MMC_BLOCK is not set CONFIG_SDIO_UART=y CONFIG_MMC_TEST=y # CONFIG_MMC_CRYPTO is not set # # MMC/SD/SDIO Host Controller Drivers # # CONFIG_MMC_DEBUG is not set CONFIG_MMC_SUNPLUS=y CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI_IO_ACCESSORS=y # CONFIG_MMC_SDHCI_PCI is not set CONFIG_MMC_SDHCI_ACPI=y CONFIG_MMC_SDHCI_PLTFM=y CONFIG_MMC_SDHCI_OF_ARASAN=y CONFIG_MMC_SDHCI_OF_ASPEED=y CONFIG_MMC_SDHCI_OF_AT91=y # CONFIG_MMC_SDHCI_OF_ESDHC is not set CONFIG_MMC_SDHCI_OF_DWCMSHC=y # CONFIG_MMC_SDHCI_OF_SPARX5 is not set CONFIG_MMC_SDHCI_CADENCE=y CONFIG_MMC_SDHCI_ESDHC_IMX=y # CONFIG_MMC_SDHCI_DOVE is not set # CONFIG_MMC_SDHCI_TEGRA is not set CONFIG_MMC_SDHCI_S3C=y CONFIG_MMC_SDHCI_PXAV3=y # CONFIG_MMC_SDHCI_PXAV2 is not set CONFIG_MMC_SDHCI_SPEAR=y CONFIG_MMC_SDHCI_S3C_DMA=y CONFIG_MMC_SDHCI_BCM_KONA=y CONFIG_MMC_SDHCI_F_SDH30=y CONFIG_MMC_SDHCI_MILBEAUT=y CONFIG_MMC_SDHCI_IPROC=y CONFIG_MMC_MESON_GX=y CONFIG_MMC_MESON_MX_SDHC=y # CONFIG_MMC_MESON_MX_SDIO is not set # CONFIG_MMC_MOXART is not set CONFIG_MMC_SDHCI_ST=y CONFIG_MMC_OMAP_HS=y # CONFIG_MMC_SDHCI_MSM is not set CONFIG_MMC_TIFM_SD=y CONFIG_MMC_DAVINCI=y CONFIG_MMC_SDHCI_SPRD=y CONFIG_MMC_TMIO_CORE=y CONFIG_MMC_SDHI=y CONFIG_MMC_SDHI_SYS_DMAC=y CONFIG_MMC_SDHI_INTERNAL_DMAC=y # CONFIG_MMC_UNIPHIER is not set CONFIG_MMC_CB710=y # CONFIG_MMC_VIA_SDMMC is not set CONFIG_MMC_CAVIUM_THUNDERX=y # CONFIG_MMC_DW is not set CONFIG_MMC_SH_MMCIF=y CONFIG_MMC_USDHI6ROL0=y # CONFIG_MMC_SUNXI is not set CONFIG_MMC_CQHCI=y CONFIG_MMC_HSQ=y # CONFIG_MMC_TOSHIBA_PCI is not set # CONFIG_MMC_BCM2835 is not set # CONFIG_MMC_MTK is not set CONFIG_MMC_SDHCI_BRCMSTB=y CONFIG_MMC_SDHCI_XENON=y CONFIG_MMC_SDHCI_OMAP=y CONFIG_MMC_SDHCI_AM654=y # CONFIG_MMC_OWL is not set CONFIG_MMC_SDHCI_EXTERNAL_DMA=y # CONFIG_MMC_LITEX is not set CONFIG_SCSI_UFSHCD=y # CONFIG_SCSI_UFS_BSG is not set CONFIG_SCSI_UFS_CRYPTO=y CONFIG_SCSI_UFS_HPB=y # CONFIG_SCSI_UFS_HWMON is not set # CONFIG_SCSI_UFSHCD_PCI is not set CONFIG_SCSI_UFSHCD_PLATFORM=y CONFIG_SCSI_UFS_CDNS_PLATFORM=y CONFIG_SCSI_UFS_DWC_TC_PLATFORM=y CONFIG_SCSI_UFS_HISI=y CONFIG_SCSI_UFS_RENESAS=y # CONFIG_SCSI_UFS_TI_J721E is not set # CONFIG_SCSI_UFS_EXYNOS is not set CONFIG_SCSI_UFS_SPRD=y # CONFIG_MEMSTICK is not set CONFIG_NEW_LEDS=y CONFIG_LEDS_CLASS=y CONFIG_LEDS_CLASS_FLASH=y CONFIG_LEDS_CLASS_MULTICOLOR=y CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y # # LED drivers # CONFIG_LEDS_88PM860X=y # CONFIG_LEDS_AN30259A is not set # CONFIG_LEDS_ARIEL is not set CONFIG_LEDS_AW2013=y CONFIG_LEDS_BCM6328=y # CONFIG_LEDS_BCM6358 is not set CONFIG_LEDS_TURRIS_OMNIA=y CONFIG_LEDS_LM3530=y CONFIG_LEDS_LM3532=y CONFIG_LEDS_LM3642=y CONFIG_LEDS_LM3692X=y CONFIG_LEDS_COBALT_QUBE=y CONFIG_LEDS_COBALT_RAQ=y CONFIG_LEDS_PCA9532=y # CONFIG_LEDS_PCA9532_GPIO is not set CONFIG_LEDS_GPIO=y CONFIG_LEDS_LP3944=y # CONFIG_LEDS_LP3952 is not set CONFIG_LEDS_LP50XX=y # CONFIG_LEDS_LP55XX_COMMON is not set # CONFIG_LEDS_LP8860 is not set CONFIG_LEDS_PCA955X=y # CONFIG_LEDS_PCA955X_GPIO is not set CONFIG_LEDS_PCA963X=y # CONFIG_LEDS_WM8350 is not set # CONFIG_LEDS_DA903X is not set # CONFIG_LEDS_REGULATOR is not set CONFIG_LEDS_BD2606MVV=y CONFIG_LEDS_BD2802=y CONFIG_LEDS_LT3593=y CONFIG_LEDS_MC13783=y CONFIG_LEDS_NS2=y CONFIG_LEDS_NETXBIG=y CONFIG_LEDS_TCA6507=y CONFIG_LEDS_TLC591XX=y CONFIG_LEDS_MAX77650=y CONFIG_LEDS_LM355x=y CONFIG_LEDS_OT200=y CONFIG_LEDS_MENF21BMC=y CONFIG_LEDS_IS31FL319X=y CONFIG_LEDS_IS31FL32XX=y # # LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) # CONFIG_LEDS_BLINKM=y # CONFIG_LEDS_SYSCON is not set CONFIG_LEDS_PM8058=y CONFIG_LEDS_MLXREG=y CONFIG_LEDS_USER=y CONFIG_LEDS_TI_LMU_COMMON=y # CONFIG_LEDS_LM3697 is not set CONFIG_LEDS_LM36274=y CONFIG_LEDS_IP30=y # CONFIG_LEDS_ACER_A500 is not set CONFIG_LEDS_BCM63138=y CONFIG_LEDS_LGM=y # # Flash and Torch LED drivers # CONFIG_LEDS_AAT1290=y # CONFIG_LEDS_AS3645A is not set CONFIG_LEDS_KTD2692=y # CONFIG_LEDS_LM3601X is not set CONFIG_LEDS_MT6360=y CONFIG_LEDS_MT6370_FLASH=y CONFIG_LEDS_QCOM_FLASH=y CONFIG_LEDS_RT4505=y # CONFIG_LEDS_RT8515 is not set CONFIG_LEDS_SGM3140=y # # RGB LED drivers # CONFIG_LEDS_MT6370_RGB=y # # LED Triggers # CONFIG_LEDS_TRIGGERS=y CONFIG_LEDS_TRIGGER_TIMER=y # CONFIG_LEDS_TRIGGER_ONESHOT is not set # CONFIG_LEDS_TRIGGER_HEARTBEAT is not set CONFIG_LEDS_TRIGGER_BACKLIGHT=y CONFIG_LEDS_TRIGGER_CPU=y CONFIG_LEDS_TRIGGER_ACTIVITY=y CONFIG_LEDS_TRIGGER_DEFAULT_ON=y # # iptables trigger is under Netfilter config (LED target) # CONFIG_LEDS_TRIGGER_TRANSIENT=y # CONFIG_LEDS_TRIGGER_CAMERA is not set CONFIG_LEDS_TRIGGER_PANIC=y CONFIG_LEDS_TRIGGER_NETDEV=y # CONFIG_LEDS_TRIGGER_PATTERN is not set # CONFIG_LEDS_TRIGGER_AUDIO is not set CONFIG_LEDS_TRIGGER_TTY=y # # Simple LED drivers # CONFIG_ACCESSIBILITY=y # CONFIG_A11Y_BRAILLE_CONSOLE is not set # # Speakup console speech # CONFIG_SPEAKUP=y CONFIG_SPEAKUP_SERIALIO=y CONFIG_SPEAKUP_SYNTH_ACNTSA=y CONFIG_SPEAKUP_SYNTH_ACNTPC=y # CONFIG_SPEAKUP_SYNTH_APOLLO is not set # CONFIG_SPEAKUP_SYNTH_AUDPTR is not set CONFIG_SPEAKUP_SYNTH_BNS=y CONFIG_SPEAKUP_SYNTH_DECTLK=y CONFIG_SPEAKUP_SYNTH_DECEXT=y CONFIG_SPEAKUP_SYNTH_DTLK=y CONFIG_SPEAKUP_SYNTH_KEYPC=y CONFIG_SPEAKUP_SYNTH_LTLK=y CONFIG_SPEAKUP_SYNTH_SOFT=y CONFIG_SPEAKUP_SYNTH_SPKOUT=y CONFIG_SPEAKUP_SYNTH_TXPRT=y CONFIG_SPEAKUP_SYNTH_DUMMY=y # end of Speakup console speech CONFIG_INFINIBAND=y CONFIG_INFINIBAND_USER_MAD=y CONFIG_INFINIBAND_USER_ACCESS=y CONFIG_INFINIBAND_USER_MEM=y CONFIG_INFINIBAND_ON_DEMAND_PAGING=y CONFIG_INFINIBAND_ADDR_TRANS=y CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y CONFIG_INFINIBAND_VIRT_DMA=y # CONFIG_INFINIBAND_BNXT_RE is not set CONFIG_INFINIBAND_EFA=y CONFIG_INFINIBAND_ERDMA=y CONFIG_MLX4_INFINIBAND=y # CONFIG_MLX5_INFINIBAND is not set CONFIG_INFINIBAND_MTHCA=y CONFIG_INFINIBAND_MTHCA_DEBUG=y # CONFIG_INFINIBAND_OCRDMA is not set # CONFIG_INFINIBAND_VMWARE_PVRDMA is not set CONFIG_RDMA_RXE=y CONFIG_RDMA_SIW=y CONFIG_INFINIBAND_IPOIB=y # CONFIG_INFINIBAND_IPOIB_CM is not set CONFIG_INFINIBAND_IPOIB_DEBUG=y # CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set CONFIG_INFINIBAND_SRP=y # CONFIG_INFINIBAND_ISER is not set CONFIG_INFINIBAND_RTRS=y # CONFIG_INFINIBAND_RTRS_CLIENT is not set CONFIG_INFINIBAND_RTRS_SERVER=y CONFIG_RTC_LIB=y # CONFIG_RTC_CLASS is not set CONFIG_DMADEVICES=y CONFIG_DMADEVICES_DEBUG=y CONFIG_DMADEVICES_VDEBUG=y # # DMA Devices # CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH=y CONFIG_DMA_ENGINE=y CONFIG_DMA_VIRTUAL_CHANNELS=y CONFIG_DMA_ACPI=y CONFIG_DMA_OF=y # CONFIG_ALTERA_MSGDMA is not set CONFIG_APPLE_ADMAC=y # CONFIG_AXI_DMAC is not set CONFIG_DMA_JZ4780=y CONFIG_DMA_SA11X0=y CONFIG_DMA_SUN6I=y CONFIG_DW_AXI_DMAC=y # CONFIG_EP93XX_DMA is not set CONFIG_FSL_EDMA=y CONFIG_HISI_DMA=y CONFIG_IMG_MDC_DMA=y CONFIG_INTEL_IDMA64=y CONFIG_K3_DMA=y CONFIG_MCF_EDMA=y CONFIG_MILBEAUT_HDMAC=y CONFIG_MILBEAUT_XDMAC=y CONFIG_MMP_PDMA=y CONFIG_MMP_TDMA=y CONFIG_MV_XOR=y # CONFIG_MXS_DMA is not set CONFIG_NBPFAXI_DMA=y CONFIG_PCH_DMA=y CONFIG_PLX_DMA=y # CONFIG_STM32_DMA is not set # CONFIG_STM32_DMAMUX is not set # CONFIG_STM32_MDMA is not set CONFIG_SPRD_DMA=y # CONFIG_TEGRA186_GPC_DMA is not set CONFIG_TEGRA20_APB_DMA=y CONFIG_TEGRA210_ADMA=y # CONFIG_TIMB_DMA is not set # CONFIG_UNIPHIER_MDMAC is not set # CONFIG_UNIPHIER_XDMAC is not set CONFIG_XGENE_DMA=y # CONFIG_XILINX_XDMA is not set CONFIG_XILINX_ZYNQMP_DMA=y # CONFIG_XILINX_ZYNQMP_DPDMA is not set # CONFIG_MTK_HSDMA is not set # CONFIG_MTK_CQDMA is not set CONFIG_QCOM_HIDMA_MGMT=y # CONFIG_QCOM_HIDMA is not set CONFIG_DW_DMAC_CORE=y CONFIG_DW_DMAC=y CONFIG_RZN1_DMAMUX=y CONFIG_DW_DMAC_PCI=y CONFIG_DW_EDMA=y # CONFIG_DW_EDMA_PCIE is not set CONFIG_HSU_DMA=y CONFIG_SF_PDMA=y CONFIG_RENESAS_DMA=y # CONFIG_SH_DMAE_BASE is not set CONFIG_RCAR_DMAC=y CONFIG_RENESAS_USB_DMAC=y CONFIG_RZ_DMAC=y CONFIG_TI_EDMA=y # CONFIG_DMA_OMAP is not set CONFIG_TI_DMA_CROSSBAR=y CONFIG_INTEL_LDMA=y # # DMA Clients # # CONFIG_ASYNC_TX_DMA is not set CONFIG_DMATEST=y CONFIG_DMA_ENGINE_RAID=y # # DMABUF options # CONFIG_SYNC_FILE=y CONFIG_SW_SYNC=y # CONFIG_UDMABUF is not set CONFIG_DMABUF_MOVE_NOTIFY=y CONFIG_DMABUF_DEBUG=y CONFIG_DMABUF_SELFTESTS=y CONFIG_DMABUF_HEAPS=y # CONFIG_DMABUF_SYSFS_STATS is not set CONFIG_DMABUF_HEAPS_SYSTEM=y CONFIG_DMABUF_HEAPS_CMA=y # end of DMABUF options CONFIG_AUXDISPLAY=y CONFIG_CHARLCD=y CONFIG_LINEDISP=y # CONFIG_HD44780_COMMON is not set # CONFIG_HD44780 is not set CONFIG_IMG_ASCII_LCD=y # CONFIG_HT16K33 is not set CONFIG_LCD2S=y CONFIG_PANEL_CHANGE_MESSAGE=y CONFIG_PANEL_BOOT_MESSAGE="" # CONFIG_CHARLCD_BL_OFF is not set # CONFIG_CHARLCD_BL_ON is not set CONFIG_CHARLCD_BL_FLASH=y CONFIG_UIO=y CONFIG_UIO_CIF=y CONFIG_UIO_PDRV_GENIRQ=y # CONFIG_UIO_DMEM_GENIRQ is not set # CONFIG_UIO_AEC is not set CONFIG_UIO_SERCOS3=y CONFIG_UIO_PCI_GENERIC=y # CONFIG_UIO_NETX is not set CONFIG_UIO_PRUSS=y CONFIG_UIO_MF624=y CONFIG_VFIO=y CONFIG_VFIO_CONTAINER=y CONFIG_VFIO_NOIOMMU=y CONFIG_VFIO_VIRQFD=y CONFIG_VFIO_PCI_CORE=y CONFIG_VFIO_PCI_MMAP=y CONFIG_VFIO_PCI_INTX=y CONFIG_VFIO_PCI=y CONFIG_MLX5_VFIO_PCI=y # CONFIG_HISI_ACC_VFIO_PCI is not set CONFIG_VFIO_PLATFORM=y CONFIG_VFIO_AMBA=y CONFIG_VFIO_PLATFORM_CALXEDAXGMAC_RESET=y # CONFIG_VFIO_PLATFORM_AMDXGBE_RESET is not set # CONFIG_VFIO_PLATFORM_BCMFLEXRM_RESET is not set CONFIG_IRQ_BYPASS_MANAGER=y CONFIG_VIRT_DRIVERS=y CONFIG_VMGENID=y CONFIG_VIRTIO_ANCHOR=y CONFIG_VIRTIO=y CONFIG_VIRTIO_PCI_LIB=y CONFIG_VIRTIO_MENU=y CONFIG_VIRTIO_PCI=y # CONFIG_VIRTIO_PCI_LEGACY is not set # CONFIG_VIRTIO_VDPA is not set CONFIG_VIRTIO_BALLOON=y # CONFIG_VIRTIO_INPUT is not set CONFIG_VIRTIO_MMIO=y # CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set CONFIG_VIRTIO_DMA_SHARED_BUFFER=y CONFIG_VDPA=y # CONFIG_VDPA_SIM is not set # CONFIG_VDPA_USER is not set CONFIG_IFCVF=y CONFIG_MLX5_VDPA=y CONFIG_MLX5_VDPA_NET=y CONFIG_MLX5_VDPA_STEERING_DEBUG=y CONFIG_VP_VDPA=y # CONFIG_SNET_VDPA is not set CONFIG_VHOST_IOTLB=y CONFIG_VHOST_RING=y CONFIG_VHOST_TASK=y CONFIG_VHOST=y CONFIG_VHOST_MENU=y CONFIG_VHOST_NET=y CONFIG_VHOST_VSOCK=y # CONFIG_VHOST_VDPA is not set CONFIG_VHOST_CROSS_ENDIAN_LEGACY=y # # Microsoft Hyper-V guest support # # end of Microsoft Hyper-V guest support CONFIG_GREYBUS=y # CONFIG_COMEDI is not set # CONFIG_STAGING is not set CONFIG_LOONGARCH_PLATFORM_DEVICES=y CONFIG_LOONGSON_LAPTOP=y # CONFIG_GOLDFISH is not set # CONFIG_CHROME_PLATFORMS is not set # CONFIG_MELLANOX_PLATFORM is not set CONFIG_OLPC_XO175=y CONFIG_SURFACE_PLATFORMS=y # CONFIG_SURFACE_3_POWER_OPREGION is not set CONFIG_SURFACE_ACPI_NOTIFY=y # CONFIG_SURFACE_AGGREGATOR_CDEV is not set # CONFIG_SURFACE_AGGREGATOR_HUB is not set CONFIG_SURFACE_AGGREGATOR_REGISTRY=y # CONFIG_SURFACE_AGGREGATOR_TABLET_SWITCH is not set # CONFIG_SURFACE_DTX is not set CONFIG_SURFACE_HOTPLUG=y CONFIG_SURFACE_PLATFORM_PROFILE=y CONFIG_SURFACE_PRO3_BUTTON=y CONFIG_SURFACE_AGGREGATOR=y CONFIG_SURFACE_AGGREGATOR_BUS=y CONFIG_HAVE_CLK=y CONFIG_HAVE_CLK_PREPARE=y CONFIG_COMMON_CLK=y # # Clock driver for ARM Reference designs # # CONFIG_CLK_ICST is not set CONFIG_CLK_SP810=y # end of Clock driver for ARM Reference designs # CONFIG_CLK_HSDK is not set # CONFIG_COMMON_CLK_APPLE_NCO is not set CONFIG_COMMON_CLK_MAX77686=y CONFIG_COMMON_CLK_MAX9485=y CONFIG_COMMON_CLK_SCMI=y # CONFIG_COMMON_CLK_SCPI is not set CONFIG_COMMON_CLK_SI5341=y # CONFIG_COMMON_CLK_SI5351 is not set # CONFIG_COMMON_CLK_SI514 is not set CONFIG_COMMON_CLK_SI544=y # CONFIG_COMMON_CLK_SI570 is not set # CONFIG_COMMON_CLK_BM1880 is not set CONFIG_COMMON_CLK_CDCE706=y # CONFIG_COMMON_CLK_TPS68470 is not set CONFIG_COMMON_CLK_CDCE925=y CONFIG_COMMON_CLK_CS2000_CP=y # CONFIG_COMMON_CLK_EN7523 is not set CONFIG_COMMON_CLK_FSL_FLEXSPI=y CONFIG_COMMON_CLK_FSL_SAI=y # CONFIG_COMMON_CLK_GEMINI is not set CONFIG_COMMON_CLK_LAN966X=y CONFIG_COMMON_CLK_ASPEED=y CONFIG_COMMON_CLK_S2MPS11=y CONFIG_CLK_TWL6040=y # CONFIG_COMMON_CLK_AXI_CLKGEN is not set # CONFIG_CLK_QORIQ is not set CONFIG_CLK_LS1028A_PLLDIG=y # CONFIG_COMMON_CLK_XGENE is not set # CONFIG_COMMON_CLK_LOONGSON2 is not set CONFIG_COMMON_CLK_OXNAS=y # CONFIG_COMMON_CLK_RS9_PCIE is not set CONFIG_COMMON_CLK_SI521XX=y CONFIG_COMMON_CLK_VC5=y CONFIG_COMMON_CLK_VC7=y CONFIG_COMMON_CLK_MMP2_AUDIO=y # CONFIG_COMMON_CLK_FIXED_MMIO is not set CONFIG_COMMON_CLK_SP7021=y CONFIG_CLK_ACTIONS=y # CONFIG_CLK_OWL_S500 is not set # CONFIG_CLK_OWL_S700 is not set # CONFIG_CLK_OWL_S900 is not set # CONFIG_CLK_BAIKAL_T1 is not set # CONFIG_CLK_BCM2711_DVP is not set CONFIG_CLK_BCM2835=y CONFIG_CLK_BCM_63XX=y # CONFIG_CLK_BCM_63XX_GATE is not set # CONFIG_CLK_BCM63268_TIMER is not set CONFIG_CLK_BCM_KONA=y CONFIG_COMMON_CLK_IPROC=y # CONFIG_CLK_BCM_CYGNUS is not set CONFIG_CLK_BCM_HR2=y # CONFIG_CLK_BCM_NSP is not set CONFIG_CLK_BCM_NS2=y # CONFIG_CLK_BCM_SR is not set CONFIG_CLK_RASPBERRYPI=y CONFIG_COMMON_CLK_HI3516CV300=y CONFIG_COMMON_CLK_HI3519=y # CONFIG_COMMON_CLK_HI3559A is not set # CONFIG_COMMON_CLK_HI3660 is not set # CONFIG_COMMON_CLK_HI3670 is not set # CONFIG_COMMON_CLK_HI3798CV200 is not set CONFIG_COMMON_CLK_HI6220=y CONFIG_RESET_HISI=y # CONFIG_COMMON_CLK_BOSTON is not set CONFIG_MXC_CLK=y CONFIG_CLK_IMX8MM=y CONFIG_CLK_IMX8MN=y CONFIG_CLK_IMX8MP=y CONFIG_CLK_IMX8MQ=y CONFIG_CLK_IMX8ULP=y CONFIG_CLK_IMX93=y CONFIG_CLK_IMXRT1050=y # # Ingenic SoCs drivers # CONFIG_INGENIC_CGU_COMMON=y # CONFIG_INGENIC_CGU_JZ4740 is not set # CONFIG_INGENIC_CGU_JZ4755 is not set CONFIG_INGENIC_CGU_JZ4725B=y # CONFIG_INGENIC_CGU_JZ4760 is not set CONFIG_INGENIC_CGU_JZ4770=y # CONFIG_INGENIC_CGU_JZ4780 is not set CONFIG_INGENIC_CGU_X1000=y CONFIG_INGENIC_CGU_X1830=y # CONFIG_INGENIC_TCU_CLK is not set # end of Ingenic SoCs drivers # CONFIG_COMMON_CLK_KEYSTONE is not set CONFIG_TI_SYSCON_CLK=y # # Clock driver for MediaTek SoC # CONFIG_COMMON_CLK_MEDIATEK=y CONFIG_COMMON_CLK_MEDIATEK_FHCTL=y CONFIG_COMMON_CLK_MT2701=y # CONFIG_COMMON_CLK_MT2701_MMSYS is not set CONFIG_COMMON_CLK_MT2701_IMGSYS=y # CONFIG_COMMON_CLK_MT2701_VDECSYS is not set # CONFIG_COMMON_CLK_MT2701_HIFSYS is not set CONFIG_COMMON_CLK_MT2701_ETHSYS=y # CONFIG_COMMON_CLK_MT2701_BDPSYS is not set CONFIG_COMMON_CLK_MT2701_AUDSYS=y CONFIG_COMMON_CLK_MT2701_G3DSYS=y CONFIG_COMMON_CLK_MT2712=y CONFIG_COMMON_CLK_MT2712_BDPSYS=y CONFIG_COMMON_CLK_MT2712_IMGSYS=y CONFIG_COMMON_CLK_MT2712_JPGDECSYS=y CONFIG_COMMON_CLK_MT2712_MFGCFG=y # CONFIG_COMMON_CLK_MT2712_MMSYS is not set CONFIG_COMMON_CLK_MT2712_VDECSYS=y CONFIG_COMMON_CLK_MT2712_VENCSYS=y CONFIG_COMMON_CLK_MT6765=y # CONFIG_COMMON_CLK_MT6765_AUDIOSYS is not set # CONFIG_COMMON_CLK_MT6765_CAMSYS is not set CONFIG_COMMON_CLK_MT6765_GCESYS=y CONFIG_COMMON_CLK_MT6765_MMSYS=y # CONFIG_COMMON_CLK_MT6765_IMGSYS is not set CONFIG_COMMON_CLK_MT6765_VCODECSYS=y CONFIG_COMMON_CLK_MT6765_MFGSYS=y CONFIG_COMMON_CLK_MT6765_MIPI0ASYS=y # CONFIG_COMMON_CLK_MT6765_MIPI0BSYS is not set CONFIG_COMMON_CLK_MT6765_MIPI1ASYS=y CONFIG_COMMON_CLK_MT6765_MIPI1BSYS=y # CONFIG_COMMON_CLK_MT6765_MIPI2ASYS is not set # CONFIG_COMMON_CLK_MT6765_MIPI2BSYS is not set CONFIG_COMMON_CLK_MT6779=y CONFIG_COMMON_CLK_MT6779_MMSYS=y # CONFIG_COMMON_CLK_MT6779_IMGSYS is not set CONFIG_COMMON_CLK_MT6779_IPESYS=y # CONFIG_COMMON_CLK_MT6779_CAMSYS is not set # CONFIG_COMMON_CLK_MT6779_VDECSYS is not set CONFIG_COMMON_CLK_MT6779_VENCSYS=y # CONFIG_COMMON_CLK_MT6779_MFGCFG is not set CONFIG_COMMON_CLK_MT6779_AUDSYS=y CONFIG_COMMON_CLK_MT6795=y CONFIG_COMMON_CLK_MT6795_MFGCFG=y CONFIG_COMMON_CLK_MT6795_MMSYS=y # CONFIG_COMMON_CLK_MT6795_VDECSYS is not set # CONFIG_COMMON_CLK_MT6795_VENCSYS is not set CONFIG_COMMON_CLK_MT6797=y CONFIG_COMMON_CLK_MT6797_MMSYS=y # CONFIG_COMMON_CLK_MT6797_IMGSYS is not set CONFIG_COMMON_CLK_MT6797_VDECSYS=y CONFIG_COMMON_CLK_MT6797_VENCSYS=y CONFIG_COMMON_CLK_MT7622=y # CONFIG_COMMON_CLK_MT7622_ETHSYS is not set # CONFIG_COMMON_CLK_MT7622_HIFSYS is not set # CONFIG_COMMON_CLK_MT7622_AUDSYS is not set # CONFIG_COMMON_CLK_MT7629 is not set CONFIG_COMMON_CLK_MT7981=y CONFIG_COMMON_CLK_MT7981_ETHSYS=y CONFIG_COMMON_CLK_MT7986=y CONFIG_COMMON_CLK_MT7986_ETHSYS=y # CONFIG_COMMON_CLK_MT8135 is not set CONFIG_COMMON_CLK_MT8167=y CONFIG_COMMON_CLK_MT8167_AUDSYS=y # CONFIG_COMMON_CLK_MT8167_IMGSYS is not set CONFIG_COMMON_CLK_MT8167_MFGCFG=y # CONFIG_COMMON_CLK_MT8167_MMSYS is not set CONFIG_COMMON_CLK_MT8167_VDECSYS=y CONFIG_COMMON_CLK_MT8173=y # CONFIG_COMMON_CLK_MT8173_IMGSYS is not set # CONFIG_COMMON_CLK_MT8173_MMSYS is not set CONFIG_COMMON_CLK_MT8173_VDECSYS=y CONFIG_COMMON_CLK_MT8173_VENCSYS=y CONFIG_COMMON_CLK_MT8183=y CONFIG_COMMON_CLK_MT8183_AUDIOSYS=y CONFIG_COMMON_CLK_MT8183_CAMSYS=y # CONFIG_COMMON_CLK_MT8183_IMGSYS is not set CONFIG_COMMON_CLK_MT8183_IPU_CORE0=y CONFIG_COMMON_CLK_MT8183_IPU_CORE1=y CONFIG_COMMON_CLK_MT8183_IPU_ADL=y CONFIG_COMMON_CLK_MT8183_IPU_CONN=y # CONFIG_COMMON_CLK_MT8183_MFGCFG is not set CONFIG_COMMON_CLK_MT8183_MMSYS=y CONFIG_COMMON_CLK_MT8183_VDECSYS=y # CONFIG_COMMON_CLK_MT8183_VENCSYS is not set CONFIG_COMMON_CLK_MT8186=y # CONFIG_COMMON_CLK_MT8186_CAMSYS is not set CONFIG_COMMON_CLK_MT8186_IMGSYS=y CONFIG_COMMON_CLK_MT8186_IPESYS=y CONFIG_COMMON_CLK_MT8186_WPESYS=y CONFIG_COMMON_CLK_MT8186_IMP_IIC_WRAP=y # CONFIG_COMMON_CLK_MT8186_MCUSYS is not set CONFIG_COMMON_CLK_MT8186_MDPSYS=y CONFIG_COMMON_CLK_MT8186_MFGCFG=y CONFIG_COMMON_CLK_MT8186_MMSYS=y CONFIG_COMMON_CLK_MT8186_VDECSYS=y # CONFIG_COMMON_CLK_MT8186_VENCSYS is not set CONFIG_COMMON_CLK_MT8188=y CONFIG_COMMON_CLK_MT8188_ADSP_AUDIO26M=y # CONFIG_COMMON_CLK_MT8188_IMP_IIC_WRAP is not set CONFIG_COMMON_CLK_MT8188_MFGCFG=y CONFIG_COMMON_CLK_MT8188_VDOSYS=y # CONFIG_COMMON_CLK_MT8188_VPPSYS is not set CONFIG_COMMON_CLK_MT8192=y # CONFIG_COMMON_CLK_MT8192_AUDSYS is not set CONFIG_COMMON_CLK_MT8192_CAMSYS=y CONFIG_COMMON_CLK_MT8192_IMGSYS=y # CONFIG_COMMON_CLK_MT8192_IMP_IIC_WRAP is not set CONFIG_COMMON_CLK_MT8192_IPESYS=y CONFIG_COMMON_CLK_MT8192_MDPSYS=y CONFIG_COMMON_CLK_MT8192_MFGCFG=y CONFIG_COMMON_CLK_MT8192_MMSYS=y CONFIG_COMMON_CLK_MT8192_MSDC=y # CONFIG_COMMON_CLK_MT8192_SCP_ADSP is not set CONFIG_COMMON_CLK_MT8192_VDECSYS=y CONFIG_COMMON_CLK_MT8192_VENCSYS=y # CONFIG_COMMON_CLK_MT8195 is not set CONFIG_COMMON_CLK_MT8365=y CONFIG_COMMON_CLK_MT8365_APU=y # CONFIG_COMMON_CLK_MT8365_CAM is not set CONFIG_COMMON_CLK_MT8365_MFG=y CONFIG_COMMON_CLK_MT8365_MMSYS=y CONFIG_COMMON_CLK_MT8365_VDEC=y CONFIG_COMMON_CLK_MT8365_VENC=y # CONFIG_COMMON_CLK_MT8516 is not set # end of Clock driver for MediaTek SoC # # Clock support for Amlogic platforms # # end of Clock support for Amlogic platforms # CONFIG_MSTAR_MSC313_CPUPLL is not set CONFIG_MSTAR_MSC313_MPLL=y # CONFIG_MCHP_CLK_MPFS is not set CONFIG_COMMON_CLK_PISTACHIO=y # CONFIG_COMMON_CLK_QCOM is not set CONFIG_CLK_MT7621=y CONFIG_CLK_RENESAS=y CONFIG_CLK_EMEV2=y # CONFIG_CLK_RZA1 is not set # CONFIG_CLK_R7S9210 is not set CONFIG_CLK_R8A73A4=y CONFIG_CLK_R8A7740=y CONFIG_CLK_R8A7742=y CONFIG_CLK_R8A7743=y CONFIG_CLK_R8A7745=y # CONFIG_CLK_R8A77470 is not set CONFIG_CLK_R8A774A1=y # CONFIG_CLK_R8A774B1 is not set CONFIG_CLK_R8A774C0=y CONFIG_CLK_R8A774E1=y CONFIG_CLK_R8A7778=y CONFIG_CLK_R8A7779=y # CONFIG_CLK_R8A7790 is not set # CONFIG_CLK_R8A7791 is not set # CONFIG_CLK_R8A7792 is not set # CONFIG_CLK_R8A7794 is not set CONFIG_CLK_R8A7795=y CONFIG_CLK_R8A77960=y # CONFIG_CLK_R8A77961 is not set CONFIG_CLK_R8A77965=y # CONFIG_CLK_R8A77970 is not set # CONFIG_CLK_R8A77980 is not set # CONFIG_CLK_R8A77990 is not set CONFIG_CLK_R8A77995=y # CONFIG_CLK_R8A779A0 is not set CONFIG_CLK_R8A779F0=y # CONFIG_CLK_R8A779G0 is not set # CONFIG_CLK_R9A06G032 is not set # CONFIG_CLK_R9A07G043 is not set # CONFIG_CLK_R9A07G044 is not set # CONFIG_CLK_R9A07G054 is not set # CONFIG_CLK_R9A09G011 is not set CONFIG_CLK_SH73A0=y CONFIG_CLK_RCAR_CPG_LIB=y CONFIG_CLK_RCAR_GEN2_CPG=y CONFIG_CLK_RCAR_GEN3_CPG=y CONFIG_CLK_RCAR_GEN4_CPG=y # CONFIG_CLK_RCAR_USB2_CLOCK_SEL is not set CONFIG_CLK_RZG2L=y CONFIG_CLK_RENESAS_CPG_MSSR=y CONFIG_CLK_RENESAS_CPG_MSTP=y CONFIG_CLK_RENESAS_DIV6=y CONFIG_COMMON_CLK_SAMSUNG=y CONFIG_S3C64XX_COMMON_CLK=y CONFIG_S5PV210_COMMON_CLK=y # CONFIG_EXYNOS_3250_COMMON_CLK is not set CONFIG_EXYNOS_4_COMMON_CLK=y CONFIG_EXYNOS_5250_COMMON_CLK=y CONFIG_EXYNOS_5260_COMMON_CLK=y CONFIG_EXYNOS_5410_COMMON_CLK=y # CONFIG_EXYNOS_5420_COMMON_CLK is not set # CONFIG_EXYNOS_ARM64_COMMON_CLK is not set # CONFIG_EXYNOS_AUDSS_CLK_CON is not set CONFIG_EXYNOS_CLKOUT=y # CONFIG_CLK_SIFIVE is not set CONFIG_CLK_INTEL_SOCFPGA=y CONFIG_CLK_INTEL_SOCFPGA32=y # CONFIG_CLK_INTEL_SOCFPGA64 is not set # CONFIG_SPRD_COMMON_CLK is not set CONFIG_CLK_STARFIVE_JH71X0=y CONFIG_CLK_STARFIVE_JH7100=y # CONFIG_CLK_STARFIVE_JH7100_AUDIO is not set # CONFIG_CLK_STARFIVE_JH7110_SYS is not set # CONFIG_CLK_SUNXI is not set CONFIG_SUNXI_CCU=y CONFIG_SUNIV_F1C100S_CCU=y CONFIG_SUN20I_D1_CCU=y # CONFIG_SUN20I_D1_R_CCU is not set CONFIG_SUN50I_A64_CCU=y CONFIG_SUN50I_A100_CCU=y CONFIG_SUN50I_A100_R_CCU=y # CONFIG_SUN50I_H6_CCU is not set CONFIG_SUN50I_H616_CCU=y CONFIG_SUN50I_H6_R_CCU=y # CONFIG_SUN4I_A10_CCU is not set # CONFIG_SUN5I_CCU is not set # CONFIG_SUN6I_A31_CCU is not set CONFIG_SUN6I_RTC_CCU=y CONFIG_SUN8I_A23_CCU=y # CONFIG_SUN8I_A33_CCU is not set CONFIG_SUN8I_A83T_CCU=y CONFIG_SUN8I_H3_CCU=y CONFIG_SUN8I_V3S_CCU=y CONFIG_SUN8I_DE2_CCU=y # CONFIG_SUN8I_R40_CCU is not set # CONFIG_SUN9I_A80_CCU is not set CONFIG_SUN8I_R_CCU=y CONFIG_COMMON_CLK_TI_ADPLL=y # CONFIG_CLK_UNIPHIER is not set # CONFIG_COMMON_CLK_VISCONTI is not set # CONFIG_CLK_LGM_CGU is not set CONFIG_XILINX_VCU=y # CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set # CONFIG_COMMON_CLK_ZYNQMP is not set CONFIG_HWSPINLOCK=y CONFIG_HWSPINLOCK_OMAP=y CONFIG_HWSPINLOCK_QCOM=y # CONFIG_HWSPINLOCK_SPRD is not set CONFIG_HWSPINLOCK_STM32=y CONFIG_HWSPINLOCK_SUN6I=y CONFIG_HSEM_U8500=y # # Clock Source drivers # CONFIG_TIMER_OF=y CONFIG_TIMER_PROBE=y CONFIG_CLKSRC_MMIO=y CONFIG_BCM2835_TIMER=y # CONFIG_BCM_KONA_TIMER is not set CONFIG_DAVINCI_TIMER=y # CONFIG_DIGICOLOR_TIMER is not set # CONFIG_OMAP_DM_TIMER is not set CONFIG_DW_APB_TIMER=y CONFIG_FTTMR010_TIMER=y # CONFIG_IXP4XX_TIMER is not set # CONFIG_MESON6_TIMER is not set # CONFIG_OWL_TIMER is not set CONFIG_RDA_TIMER=y # CONFIG_SUN4I_TIMER is not set # CONFIG_SUN5I_HSTIMER is not set # CONFIG_TEGRA_TIMER is not set CONFIG_VT8500_TIMER=y # CONFIG_NPCM7XX_TIMER is not set # CONFIG_CADENCE_TTC_TIMER is not set CONFIG_ASM9260_TIMER=y CONFIG_CLKSRC_DBX500_PRCMU=y # CONFIG_CLPS711X_TIMER is not set CONFIG_MXS_TIMER=y CONFIG_NSPIRE_TIMER=y # CONFIG_INTEGRATOR_AP_TIMER is not set CONFIG_CLKSRC_PISTACHIO=y # CONFIG_CLKSRC_TI_32K is not set # CONFIG_CLKSRC_STM32_LP is not set # CONFIG_CLKSRC_MPS2 is not set CONFIG_ARC_TIMERS=y # CONFIG_ARC_TIMERS_64BIT is not set # CONFIG_ARM_TIMER_SP804 is not set # CONFIG_ARMV7M_SYSTICK is not set CONFIG_ATMEL_PIT=y CONFIG_ATMEL_ST=y # CONFIG_CLKSRC_SAMSUNG_PWM is not set # CONFIG_FSL_FTM_TIMER is not set # CONFIG_OXNAS_RPS_TIMER is not set CONFIG_MTK_TIMER=y CONFIG_MTK_CPUX_TIMER=y # CONFIG_CLKSRC_JCORE_PIT is not set CONFIG_SH_TIMER_CMT=y # CONFIG_SH_TIMER_MTU2 is not set CONFIG_RENESAS_OSTM=y # CONFIG_SH_TIMER_TMU is not set CONFIG_EM_TIMER_STI=y # CONFIG_CLKSRC_VERSATILE is not set # CONFIG_CLKSRC_PXA is not set CONFIG_TIMER_IMX_SYS_CTR=y # CONFIG_CLKSRC_ST_LPC is not set # CONFIG_GXP_TIMER is not set CONFIG_MSC313E_TIMER=y CONFIG_INGENIC_TIMER=y # CONFIG_INGENIC_SYSOST is not set CONFIG_INGENIC_OST=y # end of Clock Source drivers # CONFIG_MAILBOX is not set CONFIG_IOMMU_IOVA=y CONFIG_IOMMU_API=y CONFIG_IOMMU_SUPPORT=y # # Generic IOMMU Pagetable Support # CONFIG_IOMMU_IO_PGTABLE=y CONFIG_IOMMU_IO_PGTABLE_LPAE=y # CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set CONFIG_IOMMU_IO_PGTABLE_ARMV7S=y CONFIG_IOMMU_IO_PGTABLE_ARMV7S_SELFTEST=y CONFIG_IOMMU_IO_PGTABLE_DART=y # end of Generic IOMMU Pagetable Support # CONFIG_IOMMU_DEBUGFS is not set # CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set # CONFIG_IOMMU_DEFAULT_DMA_LAZY is not set CONFIG_IOMMU_DEFAULT_PASSTHROUGH=y CONFIG_OF_IOMMU=y # CONFIG_IOMMUFD is not set CONFIG_OMAP_IOMMU=y CONFIG_OMAP_IOMMU_DEBUG=y # CONFIG_ROCKCHIP_IOMMU is not set CONFIG_SUN50I_IOMMU=y CONFIG_EXYNOS_IOMMU=y # CONFIG_EXYNOS_IOMMU_DEBUG is not set # CONFIG_IPMMU_VMSA is not set CONFIG_APPLE_DART=y CONFIG_ARM_SMMU=y # CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS is not set CONFIG_ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT=y # CONFIG_S390_CCW_IOMMU is not set # CONFIG_S390_AP_IOMMU is not set CONFIG_MTK_IOMMU=y CONFIG_QCOM_IOMMU=y CONFIG_SPRD_IOMMU=y # # Remoteproc drivers # # CONFIG_REMOTEPROC is not set # end of Remoteproc drivers # # Rpmsg drivers # # CONFIG_RPMSG_VIRTIO is not set # end of Rpmsg drivers # CONFIG_SOUNDWIRE is not set # # SOC (System On Chip) specific Drivers # # CONFIG_OWL_PM_DOMAINS is not set # # Amlogic SoC drivers # CONFIG_MESON_CANVAS=y CONFIG_MESON_CLK_MEASURE=y CONFIG_MESON_GX_SOCINFO=y # CONFIG_MESON_GX_PM_DOMAINS is not set # CONFIG_MESON_EE_PM_DOMAINS is not set # CONFIG_MESON_MX_SOCINFO is not set # end of Amlogic SoC drivers # # Apple SoC drivers # # CONFIG_APPLE_PMGR_PWRSTATE is not set # CONFIG_APPLE_SART is not set # end of Apple SoC drivers # # ASPEED SoC drivers # # CONFIG_ASPEED_LPC_CTRL is not set # CONFIG_ASPEED_LPC_SNOOP is not set CONFIG_ASPEED_UART_ROUTING=y # CONFIG_ASPEED_P2A_CTRL is not set CONFIG_ASPEED_SOCINFO=y # end of ASPEED SoC drivers CONFIG_AT91_SOC_ID=y # CONFIG_AT91_SOC_SFR is not set # # Broadcom SoC drivers # CONFIG_BCM2835_POWER=y # CONFIG_SOC_BCM63XX is not set CONFIG_SOC_BRCMSTB=y CONFIG_BCM_PMB=y # end of Broadcom SoC drivers # # NXP/Freescale QorIQ SoC drivers # # CONFIG_QUICC_ENGINE is not set # CONFIG_CPM_TSA is not set CONFIG_DPAA2_CONSOLE=y # end of NXP/Freescale QorIQ SoC drivers # # fujitsu SoC drivers # # end of fujitsu SoC drivers # # i.MX SoC drivers # # CONFIG_IMX_GPCV2_PM_DOMAINS is not set # CONFIG_SOC_IMX8M is not set CONFIG_SOC_IMX9=y # end of i.MX SoC drivers # # IXP4xx SoC drivers # # CONFIG_IXP4XX_QMGR is not set # CONFIG_IXP4XX_NPE is not set # end of IXP4xx SoC drivers # # Enable LiteX SoC Builder specific drivers # CONFIG_LITEX=y CONFIG_LITEX_SOC_CONTROLLER=y # end of Enable LiteX SoC Builder specific drivers CONFIG_LOONGSON2_GUTS=y # # MediaTek SoC drivers # # CONFIG_MTK_CMDQ is not set CONFIG_MTK_DEVAPC=y CONFIG_MTK_INFRACFG=y CONFIG_MTK_PMIC_WRAP=y CONFIG_MTK_REGULATOR_COUPLER=y CONFIG_MTK_SCPSYS=y CONFIG_MTK_SCPSYS_PM_DOMAINS=y CONFIG_MTK_MMSYS=y # end of MediaTek SoC drivers CONFIG_WPCM450_SOC=y # # Qualcomm SoC drivers # # CONFIG_QCOM_COMMAND_DB is not set # CONFIG_QCOM_GENI_SE is not set # CONFIG_QCOM_GSBI is not set CONFIG_QCOM_LLCC=y # CONFIG_QCOM_RAMP_CTRL is not set CONFIG_QCOM_RPMH=y # CONFIG_QCOM_SMEM is not set CONFIG_QCOM_SPM=y CONFIG_QCOM_ICC_BWMON=y # end of Qualcomm SoC drivers CONFIG_SOC_RENESAS=y # CONFIG_PWC_RZV2M is not set CONFIG_RST_RCAR=y CONFIG_SYSC_RCAR=y CONFIG_SYSC_RCAR_GEN4=y # CONFIG_SYSC_R8A77995 is not set # CONFIG_SYSC_R8A7794 is not set CONFIG_SYSC_R8A77990=y # CONFIG_SYSC_R8A7779 is not set # CONFIG_SYSC_R8A7790 is not set # CONFIG_SYSC_R8A7795 is not set # CONFIG_SYSC_R8A7791 is not set CONFIG_SYSC_R8A77965=y # CONFIG_SYSC_R8A77960 is not set CONFIG_SYSC_R8A77961=y CONFIG_SYSC_R8A779F0=y # CONFIG_SYSC_R8A7792 is not set # CONFIG_SYSC_R8A77980 is not set CONFIG_SYSC_R8A77970=y CONFIG_SYSC_R8A779A0=y CONFIG_SYSC_R8A779G0=y # CONFIG_SYSC_RMOBILE is not set CONFIG_SYSC_R8A77470=y CONFIG_SYSC_R8A7745=y CONFIG_SYSC_R8A7742=y CONFIG_SYSC_R8A7743=y # CONFIG_SYSC_R8A774C0 is not set CONFIG_SYSC_R8A774E1=y CONFIG_SYSC_R8A774A1=y # CONFIG_SYSC_R8A774B1 is not set CONFIG_ROCKCHIP_GRF=y # CONFIG_ROCKCHIP_IODOMAIN is not set CONFIG_ROCKCHIP_PM_DOMAINS=y # CONFIG_SOC_SAMSUNG is not set CONFIG_JH71XX_PMU=y CONFIG_SUN20I_PPU=y CONFIG_SOC_TEGRA20_VOLTAGE_COUPLER=y CONFIG_SOC_TEGRA30_VOLTAGE_COUPLER=y # CONFIG_SOC_TI is not set # CONFIG_UX500_SOC_ID is not set # # Xilinx SoC drivers # # end of Xilinx SoC drivers # end of SOC (System On Chip) specific Drivers CONFIG_PM_DEVFREQ=y # # DEVFREQ Governors # CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y CONFIG_DEVFREQ_GOV_PERFORMANCE=y CONFIG_DEVFREQ_GOV_POWERSAVE=y CONFIG_DEVFREQ_GOV_USERSPACE=y CONFIG_DEVFREQ_GOV_PASSIVE=y # # DEVFREQ Drivers # # CONFIG_ARM_EXYNOS_BUS_DEVFREQ is not set CONFIG_ARM_IMX_BUS_DEVFREQ=y CONFIG_ARM_TEGRA_DEVFREQ=y CONFIG_ARM_MEDIATEK_CCI_DEVFREQ=y CONFIG_ARM_SUN8I_A33_MBUS_DEVFREQ=y CONFIG_PM_DEVFREQ_EVENT=y # CONFIG_DEVFREQ_EVENT_EXYNOS_NOCP is not set # CONFIG_DEVFREQ_EVENT_EXYNOS_PPMU is not set CONFIG_DEVFREQ_EVENT_ROCKCHIP_DFI=y CONFIG_EXTCON=y # # Extcon Device Drivers # CONFIG_EXTCON_ADC_JACK=y # CONFIG_EXTCON_FSA9480 is not set # CONFIG_EXTCON_GPIO is not set CONFIG_EXTCON_INTEL_INT3496=y CONFIG_EXTCON_MAX14577=y # CONFIG_EXTCON_MAX3355 is not set CONFIG_EXTCON_PTN5150=y CONFIG_EXTCON_QCOM_SPMI_MISC=y CONFIG_EXTCON_RT8973A=y CONFIG_EXTCON_SM5502=y CONFIG_EXTCON_USB_GPIO=y CONFIG_MEMORY=y CONFIG_DDR=y # CONFIG_ATMEL_SDRAMC is not set # CONFIG_ATMEL_EBI is not set CONFIG_BRCMSTB_DPFE=y CONFIG_BRCMSTB_MEMC=y CONFIG_BT1_L2_CTL=y # CONFIG_TI_AEMIF is not set # CONFIG_TI_EMIF is not set CONFIG_OMAP_GPMC=y # CONFIG_OMAP_GPMC_DEBUG is not set # CONFIG_MVEBU_DEVBUS is not set CONFIG_FSL_CORENET_CF=y CONFIG_FSL_IFC=y # CONFIG_JZ4780_NEMC is not set CONFIG_MTK_SMI=y CONFIG_DA8XX_DDRCTL=y # CONFIG_RENESAS_RPCIF is not set # CONFIG_STM32_FMC2_EBI is not set # CONFIG_SAMSUNG_MC is not set CONFIG_TEGRA_MC=y CONFIG_TEGRA20_EMC=y CONFIG_TEGRA30_EMC=y CONFIG_TEGRA124_EMC=y # CONFIG_TEGRA210_EMC is not set CONFIG_IIO=y CONFIG_IIO_BUFFER=y CONFIG_IIO_BUFFER_CB=y CONFIG_IIO_BUFFER_DMA=y CONFIG_IIO_BUFFER_DMAENGINE=y CONFIG_IIO_BUFFER_HW_CONSUMER=y CONFIG_IIO_KFIFO_BUF=y CONFIG_IIO_TRIGGERED_BUFFER=y CONFIG_IIO_CONFIGFS=y CONFIG_IIO_GTS_HELPER=y CONFIG_IIO_TRIGGER=y CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 CONFIG_IIO_SW_DEVICE=y # CONFIG_IIO_SW_TRIGGER is not set CONFIG_IIO_TRIGGERED_EVENT=y # # Accelerometers # CONFIG_ADXL313=y CONFIG_ADXL313_I2C=y CONFIG_ADXL345=y CONFIG_ADXL345_I2C=y CONFIG_ADXL355=y CONFIG_ADXL355_I2C=y CONFIG_ADXL367=y CONFIG_ADXL367_I2C=y CONFIG_ADXL372=y CONFIG_ADXL372_I2C=y # CONFIG_BMA180 is not set # CONFIG_BMA400 is not set CONFIG_BMC150_ACCEL=y CONFIG_BMC150_ACCEL_I2C=y # CONFIG_DA280 is not set CONFIG_DA311=y CONFIG_DMARD06=y CONFIG_DMARD09=y CONFIG_DMARD10=y CONFIG_FXLS8962AF=y CONFIG_FXLS8962AF_I2C=y # CONFIG_IIO_KX022A_I2C is not set CONFIG_KXSD9=y CONFIG_KXSD9_I2C=y # CONFIG_KXCJK1013 is not set CONFIG_MC3230=y # CONFIG_MMA7455_I2C is not set CONFIG_MMA7660=y # CONFIG_MMA8452 is not set CONFIG_MMA9551_CORE=y CONFIG_MMA9551=y # CONFIG_MMA9553 is not set CONFIG_MSA311=y CONFIG_MXC4005=y CONFIG_MXC6255=y # CONFIG_STK8312 is not set # CONFIG_STK8BA50 is not set # end of Accelerometers # # Analog to digital converters # CONFIG_AD7091R5=y CONFIG_AD7291=y CONFIG_AD7606=y CONFIG_AD7606_IFACE_PARALLEL=y CONFIG_AD799X=y # CONFIG_ADI_AXI_ADC is not set CONFIG_ASPEED_ADC=y CONFIG_AT91_ADC=y # CONFIG_AT91_SAMA5D2_ADC is not set # CONFIG_AXP20X_ADC is not set CONFIG_AXP288_ADC=y CONFIG_BCM_IPROC_ADC=y # CONFIG_BERLIN2_ADC is not set # CONFIG_CC10001_ADC is not set CONFIG_ENVELOPE_DETECTOR=y CONFIG_EP93XX_ADC=y CONFIG_EXYNOS_ADC=y CONFIG_FSL_MX25_ADC=y CONFIG_HX711=y # CONFIG_INGENIC_ADC is not set # CONFIG_IMX7D_ADC is not set # CONFIG_IMX8QXP_ADC is not set # CONFIG_IMX93_ADC is not set CONFIG_LPC18XX_ADC=y # CONFIG_LPC32XX_ADC is not set CONFIG_LTC2471=y CONFIG_LTC2485=y CONFIG_LTC2497=y CONFIG_MAX1363=y # CONFIG_MAX9611 is not set # CONFIG_MCP3422 is not set CONFIG_MEDIATEK_MT6360_ADC=y # CONFIG_MEDIATEK_MT6370_ADC is not set CONFIG_MEDIATEK_MT6577_AUXADC=y # CONFIG_MEN_Z188_ADC is not set # CONFIG_MESON_SARADC is not set # CONFIG_MP2629_ADC is not set CONFIG_NAU7802=y # CONFIG_NPCM_ADC is not set # CONFIG_QCOM_PM8XXX_XOADC is not set CONFIG_RCAR_GYRO_ADC=y CONFIG_RN5T618_ADC=y CONFIG_ROCKCHIP_SARADC=y CONFIG_RICHTEK_RTQ6056=y # CONFIG_RZG2L_ADC is not set # CONFIG_SC27XX_ADC is not set CONFIG_SPEAR_ADC=y CONFIG_SD_ADC_MODULATOR=y CONFIG_STM32_ADC_CORE=y # CONFIG_STM32_ADC is not set CONFIG_STM32_DFSDM_CORE=y CONFIG_STM32_DFSDM_ADC=y # CONFIG_TI_ADC081C is not set # CONFIG_TI_ADS1015 is not set CONFIG_TI_ADS7924=y CONFIG_TI_ADS1100=y CONFIG_TI_AM335X_ADC=y CONFIG_VF610_ADC=y CONFIG_XILINX_XADC=y CONFIG_XILINX_AMS=y # end of Analog to digital converters # # Analog to digital and digital to analog converters # # end of Analog to digital and digital to analog converters # # Analog Front Ends # CONFIG_IIO_RESCALE=y # end of Analog Front Ends # # Amplifiers # # CONFIG_HMC425 is not set # end of Amplifiers # # Capacitance to digital converters # # CONFIG_AD7150 is not set # CONFIG_AD7746 is not set # end of Capacitance to digital converters # # Chemical Sensors # # CONFIG_ATLAS_PH_SENSOR is not set CONFIG_ATLAS_EZO_SENSOR=y # CONFIG_BME680 is not set # CONFIG_CCS811 is not set CONFIG_IAQCORE=y # CONFIG_PMS7003 is not set # CONFIG_SCD30_CORE is not set CONFIG_SCD4X=y CONFIG_SENSIRION_SGP30=y CONFIG_SENSIRION_SGP40=y CONFIG_SPS30=y CONFIG_SPS30_I2C=y # CONFIG_SPS30_SERIAL is not set # CONFIG_SENSEAIR_SUNRISE_CO2 is not set # CONFIG_VZ89X is not set # end of Chemical Sensors # # Hid Sensor IIO Common # # end of Hid Sensor IIO Common CONFIG_IIO_MS_SENSORS_I2C=y # # IIO SCMI Sensors # CONFIG_IIO_SCMI=y # end of IIO SCMI Sensors # # SSP Sensor Common # # end of SSP Sensor Common CONFIG_IIO_ST_SENSORS_I2C=y CONFIG_IIO_ST_SENSORS_CORE=y # # Digital to analog converters # CONFIG_AD5064=y CONFIG_AD5380=y # CONFIG_AD5446 is not set CONFIG_AD5592R_BASE=y CONFIG_AD5593R=y CONFIG_AD5686=y CONFIG_AD5696_I2C=y CONFIG_DPOT_DAC=y # CONFIG_DS4424 is not set CONFIG_LPC18XX_DAC=y CONFIG_M62332=y CONFIG_MAX517=y # CONFIG_MAX5821 is not set CONFIG_MCP4725=y CONFIG_STM32_DAC=y CONFIG_STM32_DAC_CORE=y CONFIG_TI_DAC5571=y CONFIG_VF610_DAC=y # end of Digital to analog converters # # IIO dummy driver # CONFIG_IIO_SIMPLE_DUMMY=y # CONFIG_IIO_SIMPLE_DUMMY_EVENTS is not set CONFIG_IIO_SIMPLE_DUMMY_BUFFER=y # end of IIO dummy driver # # Filters # # end of Filters # # Frequency Synthesizers DDS/PLL # # # Clock Generator/Distribution # # end of Clock Generator/Distribution # # Phase-Locked Loop (PLL) frequency synthesizers # # end of Phase-Locked Loop (PLL) frequency synthesizers # end of Frequency Synthesizers DDS/PLL # # Digital gyroscope sensors # CONFIG_BMG160=y CONFIG_BMG160_I2C=y CONFIG_FXAS21002C=y CONFIG_FXAS21002C_I2C=y CONFIG_MPU3050=y CONFIG_MPU3050_I2C=y CONFIG_IIO_ST_GYRO_3AXIS=y CONFIG_IIO_ST_GYRO_I2C_3AXIS=y CONFIG_ITG3200=y # end of Digital gyroscope sensors # # Health Sensors # # # Heart Rate Monitors # CONFIG_AFE4404=y CONFIG_MAX30100=y CONFIG_MAX30102=y # end of Heart Rate Monitors # end of Health Sensors # # Humidity sensors # CONFIG_AM2315=y CONFIG_DHT11=y # CONFIG_HDC100X is not set CONFIG_HDC2010=y CONFIG_HTS221=y CONFIG_HTS221_I2C=y # CONFIG_HTU21 is not set # CONFIG_SI7005 is not set # CONFIG_SI7020 is not set # end of Humidity sensors # # Inertial measurement units # CONFIG_BMI160=y CONFIG_BMI160_I2C=y # CONFIG_BOSCH_BNO055_SERIAL is not set # CONFIG_BOSCH_BNO055_I2C is not set # CONFIG_FXOS8700_I2C is not set CONFIG_KMX61=y CONFIG_INV_ICM42600=y CONFIG_INV_ICM42600_I2C=y # CONFIG_INV_MPU6050_I2C is not set # CONFIG_IIO_ST_LSM6DSX is not set # end of Inertial measurement units # # Light sensors # # CONFIG_ACPI_ALS is not set CONFIG_ADJD_S311=y # CONFIG_ADUX1020 is not set CONFIG_AL3010=y CONFIG_AL3320A=y # CONFIG_APDS9300 is not set CONFIG_APDS9960=y CONFIG_AS73211=y CONFIG_BH1750=y # CONFIG_BH1780 is not set # CONFIG_CM32181 is not set CONFIG_CM3232=y # CONFIG_CM3323 is not set # CONFIG_CM3605 is not set CONFIG_CM36651=y # CONFIG_GP2AP002 is not set CONFIG_GP2AP020A00F=y CONFIG_IQS621_ALS=y # CONFIG_SENSORS_ISL29018 is not set CONFIG_SENSORS_ISL29028=y # CONFIG_ISL29125 is not set CONFIG_JSA1212=y CONFIG_ROHM_BU27034=y # CONFIG_RPR0521 is not set CONFIG_LTR501=y # CONFIG_LTRF216A is not set # CONFIG_LV0104CS is not set CONFIG_MAX44000=y CONFIG_MAX44009=y # CONFIG_NOA1305 is not set CONFIG_OPT3001=y CONFIG_PA12203001=y CONFIG_SI1133=y CONFIG_SI1145=y CONFIG_STK3310=y # CONFIG_ST_UVIS25 is not set CONFIG_TCS3414=y CONFIG_TCS3472=y CONFIG_SENSORS_TSL2563=y # CONFIG_TSL2583 is not set # CONFIG_TSL2591 is not set CONFIG_TSL2772=y CONFIG_TSL4531=y # CONFIG_US5182D is not set # CONFIG_VCNL4000 is not set CONFIG_VCNL4035=y CONFIG_VEML6030=y # CONFIG_VEML6070 is not set # CONFIG_VL6180 is not set # CONFIG_ZOPT2201 is not set # end of Light sensors # # Magnetometer sensors # # CONFIG_AK8974 is not set CONFIG_AK8975=y CONFIG_AK09911=y CONFIG_BMC150_MAGN=y CONFIG_BMC150_MAGN_I2C=y CONFIG_MAG3110=y CONFIG_MMC35240=y CONFIG_IIO_ST_MAGN_3AXIS=y CONFIG_IIO_ST_MAGN_I2C_3AXIS=y # CONFIG_SENSORS_HMC5843_I2C is not set # CONFIG_SENSORS_RM3100_I2C is not set CONFIG_TI_TMAG5273=y # CONFIG_YAMAHA_YAS530 is not set # end of Magnetometer sensors # # Multiplexers # # CONFIG_IIO_MUX is not set # end of Multiplexers # # Inclinometer sensors # # end of Inclinometer sensors # # Triggers - standalone # CONFIG_IIO_INTERRUPT_TRIGGER=y CONFIG_IIO_STM32_LPTIMER_TRIGGER=y CONFIG_IIO_STM32_TIMER_TRIGGER=y # CONFIG_IIO_SYSFS_TRIGGER is not set # end of Triggers - standalone # # Linear and angular position sensors # # CONFIG_IQS624_POS is not set # end of Linear and angular position sensors # # Digital potentiometers # CONFIG_AD5110=y # CONFIG_AD5272 is not set CONFIG_DS1803=y CONFIG_MAX5432=y CONFIG_MCP4018=y # CONFIG_MCP4531 is not set CONFIG_TPL0102=y # end of Digital potentiometers # # Digital potentiostats # # CONFIG_LMP91000 is not set # end of Digital potentiostats # # Pressure sensors # CONFIG_ABP060MG=y CONFIG_BMP280=y CONFIG_BMP280_I2C=y CONFIG_DLHL60D=y CONFIG_DPS310=y CONFIG_HP03=y CONFIG_ICP10100=y CONFIG_MPL115=y CONFIG_MPL115_I2C=y # CONFIG_MPL3115 is not set CONFIG_MS5611=y CONFIG_MS5611_I2C=y # CONFIG_MS5637 is not set # CONFIG_IIO_ST_PRESS is not set CONFIG_T5403=y CONFIG_HP206C=y CONFIG_ZPA2326=y CONFIG_ZPA2326_I2C=y # end of Pressure sensors # # Lightning sensors # # end of Lightning sensors # # Proximity and distance sensors # # CONFIG_ISL29501 is not set # CONFIG_LIDAR_LITE_V2 is not set # CONFIG_MB1232 is not set CONFIG_PING=y CONFIG_RFD77402=y CONFIG_SRF04=y CONFIG_SX_COMMON=y CONFIG_SX9310=y CONFIG_SX9324=y # CONFIG_SX9360 is not set CONFIG_SX9500=y CONFIG_SRF08=y CONFIG_VCNL3020=y # CONFIG_VL53L0X_I2C is not set # end of Proximity and distance sensors # # Resolver to digital converters # # end of Resolver to digital converters # # Temperature sensors # CONFIG_IQS620AT_TEMP=y # CONFIG_MLX90614 is not set CONFIG_MLX90632=y CONFIG_TMP006=y CONFIG_TMP007=y # CONFIG_TMP117 is not set CONFIG_TSYS01=y CONFIG_TSYS02D=y # CONFIG_MAX30208 is not set # end of Temperature sensors # CONFIG_NTB is not set # CONFIG_PWM is not set # # IRQ chip support # CONFIG_IRQCHIP=y CONFIG_AL_FIC=y CONFIG_MADERA_IRQ=y # CONFIG_JCORE_AIC is not set CONFIG_RENESAS_INTC_IRQPIN=y # CONFIG_RENESAS_IRQC is not set # CONFIG_RENESAS_RZA1_IRQC is not set # CONFIG_RENESAS_RZG2L_IRQC is not set # CONFIG_SL28CPLD_INTC is not set CONFIG_TS4800_IRQ=y CONFIG_XILINX_INTC=y CONFIG_INGENIC_TCU_IRQ=y CONFIG_IRQ_UNIPHIER_AIDET=y # CONFIG_MESON_IRQ_GPIO is not set # CONFIG_IMX_IRQSTEER is not set CONFIG_IMX_INTMUX=y CONFIG_IMX_MU_MSI=y CONFIG_EXYNOS_IRQ_COMBINER=y CONFIG_IRQ_LOONGARCH_CPU=y CONFIG_LOONGSON_LIOINTC=y CONFIG_LOONGSON_EIOINTC=y CONFIG_LOONGSON_HTVEC=y CONFIG_LOONGSON_PCH_PIC=y CONFIG_LOONGSON_PCH_MSI=y CONFIG_LOONGSON_PCH_LPC=y # CONFIG_MST_IRQ is not set # CONFIG_MCHP_EIC is not set CONFIG_SUNPLUS_SP7021_INTC=y # end of IRQ chip support # CONFIG_IPACK_BUS is not set CONFIG_RESET_CONTROLLER=y # CONFIG_RESET_A10SR is not set CONFIG_RESET_ATH79=y # CONFIG_RESET_AXS10X is not set # CONFIG_RESET_BCM6345 is not set CONFIG_RESET_BERLIN=y CONFIG_RESET_BRCMSTB=y CONFIG_RESET_BRCMSTB_RESCAL=y CONFIG_RESET_HSDK=y CONFIG_RESET_IMX7=y # CONFIG_RESET_INTEL_GW is not set CONFIG_RESET_K210=y CONFIG_RESET_LANTIQ=y CONFIG_RESET_LPC18XX=y CONFIG_RESET_MCHP_SPARX5=y # CONFIG_RESET_MESON is not set CONFIG_RESET_MESON_AUDIO_ARB=y CONFIG_RESET_NPCM=y CONFIG_RESET_PISTACHIO=y CONFIG_RESET_QCOM_AOSS=y # CONFIG_RESET_QCOM_PDC is not set CONFIG_RESET_RASPBERRYPI=y # CONFIG_RESET_RZG2L_USBPHY_CTRL is not set CONFIG_RESET_SCMI=y CONFIG_RESET_SIMPLE=y # CONFIG_RESET_SOCFPGA is not set # CONFIG_RESET_SUNPLUS is not set # CONFIG_RESET_SUNXI is not set CONFIG_RESET_TI_SCI=y CONFIG_RESET_TI_SYSCON=y CONFIG_RESET_TI_TPS380X=y CONFIG_RESET_TN48M_CPLD=y CONFIG_RESET_UNIPHIER=y CONFIG_RESET_UNIPHIER_GLUE=y # CONFIG_RESET_ZYNQ is not set CONFIG_RESET_STARFIVE_JH71X0=y CONFIG_RESET_STARFIVE_JH7100=y CONFIG_COMMON_RESET_HI3660=y CONFIG_COMMON_RESET_HI6220=y # # PHY Subsystem # CONFIG_GENERIC_PHY=y CONFIG_GENERIC_PHY_MIPI_DPHY=y CONFIG_PHY_LPC18XX_USB_OTG=y CONFIG_PHY_PISTACHIO_USB=y CONFIG_PHY_XGENE=y # CONFIG_PHY_CAN_TRANSCEIVER is not set CONFIG_PHY_SUN6I_MIPI_DPHY=y CONFIG_PHY_SUN50I_USB3=y # CONFIG_PHY_MESON8_HDMI_TX is not set CONFIG_PHY_MESON_G12A_MIPI_DPHY_ANALOG=y # CONFIG_PHY_MESON_G12A_USB2 is not set CONFIG_PHY_MESON_G12A_USB3_PCIE=y # CONFIG_PHY_MESON_AXG_PCIE is not set CONFIG_PHY_MESON_AXG_MIPI_PCIE_ANALOG=y # CONFIG_PHY_MESON_AXG_MIPI_DPHY is not set # # PHY drivers for Broadcom platforms # CONFIG_PHY_BCM63XX_USBH=y CONFIG_PHY_CYGNUS_PCIE=y # CONFIG_PHY_BCM_SR_USB is not set CONFIG_BCM_KONA_USB2_PHY=y CONFIG_PHY_BCM_NS_USB2=y CONFIG_PHY_BCM_NS_USB3=y # CONFIG_PHY_NS2_PCIE is not set CONFIG_PHY_NS2_USB_DRD=y CONFIG_PHY_BRCM_SATA=y CONFIG_PHY_BRCM_USB=y CONFIG_PHY_BCM_SR_PCIE=y # end of PHY drivers for Broadcom platforms # CONFIG_PHY_CADENCE_TORRENT is not set CONFIG_PHY_CADENCE_DPHY=y # CONFIG_PHY_CADENCE_DPHY_RX is not set # CONFIG_PHY_CADENCE_SIERRA is not set CONFIG_PHY_CADENCE_SALVO=y CONFIG_PHY_FSL_IMX8MQ_USB=y CONFIG_PHY_MIXEL_LVDS_PHY=y # CONFIG_PHY_MIXEL_MIPI_DPHY is not set CONFIG_PHY_FSL_IMX8M_PCIE=y CONFIG_PHY_FSL_LYNX_28G=y # CONFIG_PHY_HI6220_USB is not set CONFIG_PHY_HI3660_USB=y CONFIG_PHY_HI3670_USB=y # CONFIG_PHY_HI3670_PCIE is not set CONFIG_PHY_HISTB_COMBPHY=y # CONFIG_PHY_HISI_INNO_USB2 is not set # CONFIG_PHY_LANTIQ_VRX200_PCIE is not set CONFIG_PHY_LANTIQ_RCU_USB2=y CONFIG_ARMADA375_USBCLUSTER_PHY=y CONFIG_PHY_BERLIN_SATA=y CONFIG_PHY_BERLIN_USB=y # CONFIG_PHY_MVEBU_A3700_UTMI is not set # CONFIG_PHY_MVEBU_A38X_COMPHY is not set CONFIG_PHY_PXA_28NM_HSIC=y # CONFIG_PHY_PXA_28NM_USB2 is not set CONFIG_PHY_PXA_USB=y # CONFIG_PHY_MMP3_USB is not set CONFIG_PHY_MMP3_HSIC=y CONFIG_PHY_MTK_PCIE=y # CONFIG_PHY_MTK_TPHY is not set CONFIG_PHY_MTK_UFS=y CONFIG_PHY_MTK_XSPHY=y # CONFIG_PHY_MTK_HDMI is not set CONFIG_PHY_MTK_MIPI_DSI=y CONFIG_PHY_MTK_DP=y CONFIG_PHY_SPARX5_SERDES=y # CONFIG_PHY_LAN966X_SERDES is not set # CONFIG_PHY_OCELOT_SERDES is not set CONFIG_PHY_ATH79_USB=y # CONFIG_PHY_QCOM_EDP is not set CONFIG_PHY_QCOM_IPQ4019_USB=y CONFIG_PHY_QCOM_PCIE2=y # CONFIG_PHY_QCOM_QMP is not set # CONFIG_PHY_QCOM_QUSB2 is not set CONFIG_PHY_QCOM_SNPS_EUSB2=y CONFIG_PHY_QCOM_EUSB2_REPEATER=y CONFIG_PHY_QCOM_USB_SNPS_FEMTO_V2=y # CONFIG_PHY_QCOM_USB_HS_28NM is not set CONFIG_PHY_QCOM_USB_SS=y CONFIG_PHY_QCOM_IPQ806X_USB=y CONFIG_PHY_MT7621_PCI=y CONFIG_PHY_RALINK_USB=y CONFIG_PHY_R8A779F0_ETHERNET_SERDES=y CONFIG_PHY_RCAR_GEN3_USB3=y # CONFIG_PHY_ROCKCHIP_DPHY_RX0 is not set CONFIG_PHY_ROCKCHIP_INNO_HDMI=y CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY=y CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY=y # CONFIG_PHY_ROCKCHIP_PCIE is not set CONFIG_PHY_ROCKCHIP_SNPS_PCIE3=y # CONFIG_PHY_ROCKCHIP_TYPEC is not set # CONFIG_PHY_EXYNOS_DP_VIDEO is not set CONFIG_PHY_EXYNOS_MIPI_VIDEO=y # CONFIG_PHY_EXYNOS_PCIE is not set CONFIG_PHY_SAMSUNG_UFS=y CONFIG_PHY_SAMSUNG_USB2=y CONFIG_PHY_S5PV210_USB2=y CONFIG_PHY_UNIPHIER_USB2=y # CONFIG_PHY_UNIPHIER_USB3 is not set CONFIG_PHY_UNIPHIER_PCIE=y CONFIG_PHY_UNIPHIER_AHCI=y # CONFIG_PHY_ST_SPEAR1310_MIPHY is not set CONFIG_PHY_ST_SPEAR1340_MIPHY=y CONFIG_PHY_STIH407_USB=y CONFIG_PHY_STM32_USBPHYC=y CONFIG_PHY_SUNPLUS_USB=y CONFIG_PHY_TEGRA194_P2U=y # CONFIG_PHY_DA8XX_USB is not set CONFIG_PHY_AM654_SERDES=y CONFIG_PHY_J721E_WIZ=y CONFIG_OMAP_CONTROL_PHY=y CONFIG_TI_PIPE3=y CONFIG_PHY_TI_GMII_SEL=y # CONFIG_PHY_INTEL_KEEMBAY_EMMC is not set # CONFIG_PHY_INTEL_KEEMBAY_USB is not set # CONFIG_PHY_INTEL_LGM_COMBO is not set CONFIG_PHY_INTEL_LGM_EMMC=y CONFIG_PHY_XILINX_ZYNQMP=y # end of PHY Subsystem # CONFIG_POWERCAP is not set CONFIG_MCB=y # CONFIG_MCB_PCI is not set CONFIG_MCB_LPC=y # # Performance monitor support # CONFIG_ARM_CCN=y # CONFIG_ARM_CMN is not set CONFIG_ARM_SMMU_V3_PMU=y # CONFIG_FSL_IMX8_DDR_PMU is not set CONFIG_THUNDERX2_PMU=y # CONFIG_XGENE_PMU is not set # CONFIG_ARM_DMC620_PMU is not set CONFIG_MARVELL_CN10K_TAD_PMU=y CONFIG_ALIBABA_UNCORE_DRW_PMU=y CONFIG_HNS3_PMU=y CONFIG_MARVELL_CN10K_DDR_PMU=y CONFIG_MESON_DDR_PMU=y # end of Performance monitor support # CONFIG_RAS is not set # CONFIG_USB4 is not set # # Android # # CONFIG_ANDROID_BINDER_IPC is not set # end of Android CONFIG_DAX=y CONFIG_NVMEM=y # CONFIG_NVMEM_SYSFS is not set # # Layout Types # CONFIG_NVMEM_LAYOUT_SL28_VPD=y CONFIG_NVMEM_LAYOUT_ONIE_TLV=y # end of Layout Types CONFIG_NVMEM_APPLE_EFUSES=y CONFIG_NVMEM_BCM_OCOTP=y CONFIG_NVMEM_BRCM_NVRAM=y CONFIG_NVMEM_IMX_IIM=y CONFIG_NVMEM_IMX_OCOTP=y CONFIG_NVMEM_JZ4780_EFUSE=y CONFIG_NVMEM_LAN9662_OTPC=y # CONFIG_NVMEM_LAYERSCAPE_SFP is not set CONFIG_NVMEM_LPC18XX_EEPROM=y # CONFIG_NVMEM_LPC18XX_OTP is not set CONFIG_NVMEM_MESON_MX_EFUSE=y # CONFIG_NVMEM_MICROCHIP_OTPC is not set # CONFIG_NVMEM_MTK_EFUSE is not set # CONFIG_NVMEM_MXS_OCOTP is not set CONFIG_NVMEM_NINTENDO_OTP=y CONFIG_NVMEM_QCOM_QFPROM=y CONFIG_NVMEM_RAVE_SP_EEPROM=y # CONFIG_NVMEM_RMEM is not set CONFIG_NVMEM_ROCKCHIP_EFUSE=y # CONFIG_NVMEM_ROCKCHIP_OTP is not set # CONFIG_NVMEM_SC27XX_EFUSE is not set # CONFIG_NVMEM_SNVS_LPGPR is not set # CONFIG_NVMEM_SPRD_EFUSE is not set CONFIG_NVMEM_STM32_ROMEM=y CONFIG_NVMEM_SUNPLUS_OCOTP=y CONFIG_NVMEM_UNIPHIER_EFUSE=y CONFIG_NVMEM_VF610_OCOTP=y # # HW tracing support # # CONFIG_STM is not set # CONFIG_INTEL_TH is not set CONFIG_HISI_PTT=y # end of HW tracing support CONFIG_FPGA=y CONFIG_FPGA_MGR_SOCFPGA=y # CONFIG_FPGA_MGR_SOCFPGA_A10 is not set # CONFIG_ALTERA_PR_IP_CORE is not set CONFIG_FPGA_MGR_ALTERA_CVP=y # CONFIG_FPGA_MGR_ZYNQ_FPGA is not set CONFIG_FPGA_BRIDGE=y CONFIG_ALTERA_FREEZE_BRIDGE=y # CONFIG_XILINX_PR_DECOUPLER is not set CONFIG_FPGA_REGION=y # CONFIG_OF_FPGA_REGION is not set # CONFIG_FPGA_DFL is not set CONFIG_FPGA_MGR_ZYNQMP_FPGA=y # CONFIG_FPGA_MGR_VERSAL_FPGA is not set CONFIG_FSI=y # CONFIG_FSI_NEW_DEV_NODE is not set CONFIG_FSI_MASTER_GPIO=y # CONFIG_FSI_MASTER_HUB is not set # CONFIG_FSI_MASTER_ASPEED is not set CONFIG_FSI_SCOM=y CONFIG_FSI_SBEFIFO=y CONFIG_FSI_OCC=y CONFIG_TEE=y CONFIG_MULTIPLEXER=y # # Multiplexer drivers # CONFIG_MUX_ADG792A=y # CONFIG_MUX_GPIO is not set CONFIG_MUX_MMIO=y # end of Multiplexer drivers CONFIG_PM_OPP=y CONFIG_SIOX=y CONFIG_SIOX_BUS_GPIO=y # CONFIG_SLIMBUS is not set CONFIG_INTERCONNECT=y # CONFIG_INTERCONNECT_IMX is not set CONFIG_INTERCONNECT_QCOM_OSM_L3=y CONFIG_INTERCONNECT_SAMSUNG=y CONFIG_INTERCONNECT_EXYNOS=y CONFIG_COUNTER=y # CONFIG_104_QUAD_8 is not set # CONFIG_FTM_QUADDEC is not set CONFIG_INTERRUPT_CNT=y CONFIG_MICROCHIP_TCB_CAPTURE=y CONFIG_RZ_MTU3_CNT=y CONFIG_STM32_LPTIMER_CNT=y # CONFIG_STM32_TIMER_CNT is not set CONFIG_TI_ECAP_CAPTURE=y # CONFIG_TI_EQEP is not set # CONFIG_MOST is not set # CONFIG_PECI is not set CONFIG_HTE=y # end of Device Drivers # # File systems # # CONFIG_VALIDATE_FS_PARSER is not set CONFIG_FS_IOMAP=y CONFIG_LEGACY_DIRECT_IO=y # CONFIG_EXT2_FS is not set CONFIG_EXT3_FS=y # CONFIG_EXT3_FS_POSIX_ACL is not set # CONFIG_EXT3_FS_SECURITY is not set CONFIG_EXT4_FS=y CONFIG_EXT4_USE_FOR_EXT2=y CONFIG_EXT4_FS_POSIX_ACL=y # CONFIG_EXT4_FS_SECURITY is not set CONFIG_EXT4_DEBUG=y CONFIG_JBD2=y CONFIG_JBD2_DEBUG=y CONFIG_FS_MBCACHE=y CONFIG_REISERFS_FS=y CONFIG_REISERFS_CHECK=y # CONFIG_REISERFS_PROC_INFO is not set # CONFIG_REISERFS_FS_XATTR is not set CONFIG_JFS_FS=y # CONFIG_JFS_POSIX_ACL is not set CONFIG_JFS_SECURITY=y # CONFIG_JFS_DEBUG is not set # CONFIG_JFS_STATISTICS is not set CONFIG_XFS_FS=y CONFIG_XFS_SUPPORT_V4=y CONFIG_XFS_SUPPORT_ASCII_CI=y # CONFIG_XFS_QUOTA is not set CONFIG_XFS_POSIX_ACL=y CONFIG_XFS_RT=y CONFIG_XFS_DRAIN_INTENTS=y CONFIG_XFS_ONLINE_SCRUB=y CONFIG_XFS_ONLINE_REPAIR=y # CONFIG_XFS_WARN is not set # CONFIG_XFS_DEBUG is not set CONFIG_GFS2_FS=y CONFIG_OCFS2_FS=y # CONFIG_OCFS2_FS_O2CB is not set CONFIG_OCFS2_FS_STATS=y CONFIG_OCFS2_DEBUG_MASKLOG=y # CONFIG_OCFS2_DEBUG_FS is not set CONFIG_BTRFS_FS=y CONFIG_BTRFS_FS_POSIX_ACL=y CONFIG_BTRFS_FS_CHECK_INTEGRITY=y # CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set # CONFIG_BTRFS_DEBUG is not set # CONFIG_BTRFS_ASSERT is not set CONFIG_BTRFS_FS_REF_VERIFY=y CONFIG_NILFS2_FS=y CONFIG_F2FS_FS=y CONFIG_F2FS_STAT_FS=y # CONFIG_F2FS_FS_XATTR is not set CONFIG_F2FS_CHECK_FS=y CONFIG_F2FS_FAULT_INJECTION=y # CONFIG_F2FS_FS_COMPRESSION is not set CONFIG_F2FS_IOSTAT=y # CONFIG_F2FS_UNFAIR_RWSEM is not set CONFIG_FS_POSIX_ACL=y CONFIG_EXPORTFS=y CONFIG_EXPORTFS_BLOCK_OPS=y CONFIG_FILE_LOCKING=y # CONFIG_FS_ENCRYPTION is not set # CONFIG_FS_VERITY is not set CONFIG_FSNOTIFY=y # CONFIG_DNOTIFY is not set # CONFIG_INOTIFY_USER is not set # CONFIG_FANOTIFY is not set CONFIG_QUOTA=y # CONFIG_QUOTA_NETLINK_INTERFACE is not set # CONFIG_QUOTA_DEBUG is not set CONFIG_QUOTA_TREE=y CONFIG_QFMT_V1=y CONFIG_QFMT_V2=y CONFIG_QUOTACTL=y CONFIG_AUTOFS4_FS=y CONFIG_AUTOFS_FS=y CONFIG_FUSE_FS=y CONFIG_CUSE=y # CONFIG_VIRTIO_FS is not set CONFIG_OVERLAY_FS=y CONFIG_OVERLAY_FS_REDIRECT_DIR=y CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y # CONFIG_OVERLAY_FS_INDEX is not set CONFIG_OVERLAY_FS_XINO_AUTO=y CONFIG_OVERLAY_FS_METACOPY=y # # Caches # CONFIG_NETFS_SUPPORT=y CONFIG_NETFS_STATS=y CONFIG_FSCACHE=y CONFIG_FSCACHE_STATS=y # CONFIG_FSCACHE_DEBUG is not set # CONFIG_CACHEFILES is not set # end of Caches # # CD-ROM/DVD Filesystems # CONFIG_ISO9660_FS=y # CONFIG_JOLIET is not set CONFIG_ZISOFS=y CONFIG_UDF_FS=y # end of CD-ROM/DVD Filesystems # # DOS/FAT/EXFAT/NT Filesystems # CONFIG_FAT_FS=y # CONFIG_MSDOS_FS is not set CONFIG_VFAT_FS=y CONFIG_FAT_DEFAULT_CODEPAGE=437 CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" CONFIG_FAT_DEFAULT_UTF8=y CONFIG_EXFAT_FS=y CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" CONFIG_NTFS_FS=y CONFIG_NTFS_DEBUG=y # CONFIG_NTFS_RW is not set CONFIG_NTFS3_FS=y CONFIG_NTFS3_64BIT_CLUSTER=y # CONFIG_NTFS3_LZX_XPRESS is not set CONFIG_NTFS3_FS_POSIX_ACL=y # end of DOS/FAT/EXFAT/NT Filesystems # # Pseudo filesystems # CONFIG_PROC_FS=y CONFIG_PROC_KCORE=y CONFIG_PROC_VMCORE=y # CONFIG_PROC_VMCORE_DEVICE_DUMP is not set CONFIG_PROC_SYSCTL=y CONFIG_PROC_PAGE_MONITOR=y CONFIG_PROC_CHILDREN=y CONFIG_KERNFS=y CONFIG_SYSFS=y CONFIG_TMPFS=y CONFIG_TMPFS_POSIX_ACL=y CONFIG_TMPFS_XATTR=y # CONFIG_TMPFS_INODE64 is not set CONFIG_ARCH_SUPPORTS_HUGETLBFS=y CONFIG_HUGETLBFS=y CONFIG_HUGETLB_PAGE=y CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP=y # CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON is not set CONFIG_MEMFD_CREATE=y CONFIG_CONFIGFS_FS=y # CONFIG_EFIVAR_FS is not set # end of Pseudo filesystems CONFIG_MISC_FILESYSTEMS=y CONFIG_ORANGEFS_FS=y # CONFIG_ADFS_FS is not set CONFIG_AFFS_FS=y CONFIG_ECRYPT_FS=y # CONFIG_ECRYPT_FS_MESSAGING is not set CONFIG_HFS_FS=y # CONFIG_HFSPLUS_FS is not set CONFIG_BEFS_FS=y # CONFIG_BEFS_DEBUG is not set CONFIG_BFS_FS=y CONFIG_EFS_FS=y CONFIG_CRAMFS=y CONFIG_CRAMFS_BLOCKDEV=y CONFIG_SQUASHFS=y CONFIG_SQUASHFS_FILE_CACHE=y # CONFIG_SQUASHFS_FILE_DIRECT is not set CONFIG_SQUASHFS_DECOMP_SINGLE=y CONFIG_SQUASHFS_DECOMP_MULTI=y CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y CONFIG_SQUASHFS_CHOICE_DECOMP_BY_MOUNT=y CONFIG_SQUASHFS_MOUNT_DECOMP_THREADS=y # CONFIG_SQUASHFS_XATTR is not set CONFIG_SQUASHFS_ZLIB=y CONFIG_SQUASHFS_LZ4=y CONFIG_SQUASHFS_LZO=y CONFIG_SQUASHFS_XZ=y # CONFIG_SQUASHFS_ZSTD is not set # CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set CONFIG_SQUASHFS_EMBEDDED=y CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 CONFIG_VXFS_FS=y CONFIG_MINIX_FS=y CONFIG_OMFS_FS=y # CONFIG_HPFS_FS is not set CONFIG_QNX4FS_FS=y CONFIG_QNX6FS_FS=y CONFIG_QNX6FS_DEBUG=y # CONFIG_ROMFS_FS is not set # CONFIG_PSTORE is not set CONFIG_SYSV_FS=y CONFIG_UFS_FS=y # CONFIG_UFS_FS_WRITE is not set # CONFIG_UFS_DEBUG is not set CONFIG_EROFS_FS=y CONFIG_EROFS_FS_DEBUG=y # CONFIG_EROFS_FS_XATTR is not set # CONFIG_EROFS_FS_ZIP is not set CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=y # CONFIG_NFS_V2 is not set CONFIG_NFS_V3=y CONFIG_NFS_V3_ACL=y # CONFIG_NFS_V4 is not set CONFIG_NFS_SWAP=y CONFIG_ROOT_NFS=y CONFIG_NFS_FSCACHE=y CONFIG_NFS_DISABLE_UDP_SUPPORT=y CONFIG_NFSD=y # CONFIG_NFSD_V2 is not set # CONFIG_NFSD_V3_ACL is not set CONFIG_NFSD_V4=y CONFIG_NFSD_PNFS=y CONFIG_NFSD_BLOCKLAYOUT=y # CONFIG_NFSD_SCSILAYOUT is not set # CONFIG_NFSD_FLEXFILELAYOUT is not set CONFIG_GRACE_PERIOD=y CONFIG_LOCKD=y CONFIG_LOCKD_V4=y CONFIG_NFS_ACL_SUPPORT=y CONFIG_NFS_COMMON=y CONFIG_SUNRPC=y CONFIG_SUNRPC_GSS=y CONFIG_SUNRPC_SWAP=y CONFIG_RPCSEC_GSS_KRB5=y # CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_DES is not set # CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_AES_SHA1 is not set # CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_AES_SHA2 is not set # CONFIG_SUNRPC_DEBUG is not set # CONFIG_SUNRPC_XPRT_RDMA is not set CONFIG_CEPH_FS=y # CONFIG_CEPH_FSCACHE is not set # CONFIG_CEPH_FS_POSIX_ACL is not set CONFIG_CIFS=y CONFIG_CIFS_STATS2=y CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y CONFIG_CIFS_UPCALL=y # CONFIG_CIFS_XATTR is not set # CONFIG_CIFS_DEBUG is not set CONFIG_CIFS_DFS_UPCALL=y CONFIG_CIFS_SWN_UPCALL=y CONFIG_CIFS_SMB_DIRECT=y CONFIG_CIFS_FSCACHE=y CONFIG_CIFS_ROOT=y CONFIG_SMB_SERVER=y CONFIG_SMB_SERVER_SMBDIRECT=y CONFIG_SMB_SERVER_CHECK_CAP_NET_ADMIN=y # CONFIG_SMB_SERVER_KERBEROS5 is not set CONFIG_SMBFS_COMMON=y # CONFIG_CODA_FS is not set # CONFIG_AFS_FS is not set CONFIG_NLS=y CONFIG_NLS_DEFAULT="iso8859-1" # CONFIG_NLS_CODEPAGE_437 is not set CONFIG_NLS_CODEPAGE_737=y # CONFIG_NLS_CODEPAGE_775 is not set # CONFIG_NLS_CODEPAGE_850 is not set # CONFIG_NLS_CODEPAGE_852 is not set CONFIG_NLS_CODEPAGE_855=y CONFIG_NLS_CODEPAGE_857=y CONFIG_NLS_CODEPAGE_860=y # CONFIG_NLS_CODEPAGE_861 is not set CONFIG_NLS_CODEPAGE_862=y CONFIG_NLS_CODEPAGE_863=y # CONFIG_NLS_CODEPAGE_864 is not set CONFIG_NLS_CODEPAGE_865=y CONFIG_NLS_CODEPAGE_866=y CONFIG_NLS_CODEPAGE_869=y CONFIG_NLS_CODEPAGE_936=y # CONFIG_NLS_CODEPAGE_950 is not set # CONFIG_NLS_CODEPAGE_932 is not set CONFIG_NLS_CODEPAGE_949=y CONFIG_NLS_CODEPAGE_874=y CONFIG_NLS_ISO8859_8=y CONFIG_NLS_CODEPAGE_1250=y CONFIG_NLS_CODEPAGE_1251=y CONFIG_NLS_ASCII=y # CONFIG_NLS_ISO8859_1 is not set CONFIG_NLS_ISO8859_2=y CONFIG_NLS_ISO8859_3=y CONFIG_NLS_ISO8859_4=y # CONFIG_NLS_ISO8859_5 is not set CONFIG_NLS_ISO8859_6=y CONFIG_NLS_ISO8859_7=y CONFIG_NLS_ISO8859_9=y CONFIG_NLS_ISO8859_13=y CONFIG_NLS_ISO8859_14=y # CONFIG_NLS_ISO8859_15 is not set CONFIG_NLS_KOI8_R=y CONFIG_NLS_KOI8_U=y # CONFIG_NLS_MAC_ROMAN is not set # CONFIG_NLS_MAC_CELTIC is not set # CONFIG_NLS_MAC_CENTEURO is not set CONFIG_NLS_MAC_CROATIAN=y CONFIG_NLS_MAC_CYRILLIC=y # CONFIG_NLS_MAC_GAELIC is not set CONFIG_NLS_MAC_GREEK=y CONFIG_NLS_MAC_ICELAND=y CONFIG_NLS_MAC_INUIT=y CONFIG_NLS_MAC_ROMANIAN=y CONFIG_NLS_MAC_TURKISH=y CONFIG_NLS_UTF8=y # CONFIG_DLM is not set # CONFIG_UNICODE is not set CONFIG_IO_WQ=y # end of File systems # # Security options # CONFIG_KEYS=y CONFIG_KEYS_REQUEST_CACHE=y CONFIG_PERSISTENT_KEYRINGS=y CONFIG_TRUSTED_KEYS=y # CONFIG_TRUSTED_KEYS_TPM is not set CONFIG_TRUSTED_KEYS_TEE=y # CONFIG_ENCRYPTED_KEYS is not set # CONFIG_KEY_DH_OPERATIONS is not set CONFIG_KEY_NOTIFICATIONS=y # CONFIG_SECURITY_DMESG_RESTRICT is not set # CONFIG_SECURITY is not set CONFIG_SECURITYFS=y CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y CONFIG_HARDENED_USERCOPY=y # CONFIG_FORTIFY_SOURCE is not set CONFIG_STATIC_USERMODEHELPER=y CONFIG_STATIC_USERMODEHELPER_PATH="/sbin/usermode-helper" CONFIG_DEFAULT_SECURITY_DAC=y CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,bpf" # # Kernel hardening options # # # Memory initialization # CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_BARE=y CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y # CONFIG_INIT_STACK_NONE is not set CONFIG_INIT_STACK_ALL_PATTERN=y # CONFIG_INIT_STACK_ALL_ZERO is not set # CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set CONFIG_INIT_ON_FREE_DEFAULT_ON=y CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y CONFIG_ZERO_CALL_USED_REGS=y # end of Memory initialization CONFIG_RANDSTRUCT_NONE=y # end of Kernel hardening options # end of Security options CONFIG_XOR_BLOCKS=y CONFIG_CRYPTO=y # # Crypto core or helper # CONFIG_CRYPTO_ALGAPI=y CONFIG_CRYPTO_ALGAPI2=y CONFIG_CRYPTO_AEAD=y CONFIG_CRYPTO_AEAD2=y CONFIG_CRYPTO_SKCIPHER=y CONFIG_CRYPTO_SKCIPHER2=y CONFIG_CRYPTO_HASH=y CONFIG_CRYPTO_HASH2=y CONFIG_CRYPTO_RNG=y CONFIG_CRYPTO_RNG2=y CONFIG_CRYPTO_RNG_DEFAULT=y CONFIG_CRYPTO_AKCIPHER2=y CONFIG_CRYPTO_AKCIPHER=y CONFIG_CRYPTO_KPP2=y CONFIG_CRYPTO_KPP=y CONFIG_CRYPTO_ACOMP2=y CONFIG_CRYPTO_MANAGER=y CONFIG_CRYPTO_MANAGER2=y # CONFIG_CRYPTO_USER is not set CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y CONFIG_CRYPTO_NULL=y CONFIG_CRYPTO_NULL2=y CONFIG_CRYPTO_PCRYPT=y # CONFIG_CRYPTO_CRYPTD is not set CONFIG_CRYPTO_AUTHENC=y CONFIG_CRYPTO_ENGINE=y # end of Crypto core or helper # # Public-key cryptography # CONFIG_CRYPTO_RSA=y CONFIG_CRYPTO_DH=y CONFIG_CRYPTO_DH_RFC7919_GROUPS=y CONFIG_CRYPTO_ECC=y CONFIG_CRYPTO_ECDH=y CONFIG_CRYPTO_ECDSA=y CONFIG_CRYPTO_ECRDSA=y CONFIG_CRYPTO_SM2=y CONFIG_CRYPTO_CURVE25519=y # end of Public-key cryptography # # Block ciphers # CONFIG_CRYPTO_AES=y # CONFIG_CRYPTO_AES_TI is not set CONFIG_CRYPTO_ANUBIS=y CONFIG_CRYPTO_ARIA=y # CONFIG_CRYPTO_BLOWFISH is not set # CONFIG_CRYPTO_CAMELLIA is not set CONFIG_CRYPTO_CAST_COMMON=y CONFIG_CRYPTO_CAST5=y # CONFIG_CRYPTO_CAST6 is not set CONFIG_CRYPTO_DES=y CONFIG_CRYPTO_FCRYPT=y CONFIG_CRYPTO_KHAZAD=y CONFIG_CRYPTO_SEED=y # CONFIG_CRYPTO_SERPENT is not set CONFIG_CRYPTO_SM4=y CONFIG_CRYPTO_SM4_GENERIC=y CONFIG_CRYPTO_TEA=y CONFIG_CRYPTO_TWOFISH=y CONFIG_CRYPTO_TWOFISH_COMMON=y # end of Block ciphers # # Length-preserving ciphers and modes # CONFIG_CRYPTO_ADIANTUM=y # CONFIG_CRYPTO_ARC4 is not set CONFIG_CRYPTO_CHACHA20=y CONFIG_CRYPTO_CBC=y CONFIG_CRYPTO_CFB=y CONFIG_CRYPTO_CTR=y CONFIG_CRYPTO_CTS=y CONFIG_CRYPTO_ECB=y CONFIG_CRYPTO_HCTR2=y CONFIG_CRYPTO_KEYWRAP=y # CONFIG_CRYPTO_LRW is not set CONFIG_CRYPTO_OFB=y # CONFIG_CRYPTO_PCBC is not set CONFIG_CRYPTO_XCTR=y CONFIG_CRYPTO_XTS=y CONFIG_CRYPTO_NHPOLY1305=y # end of Length-preserving ciphers and modes # # AEAD (authenticated encryption with associated data) ciphers # # CONFIG_CRYPTO_AEGIS128 is not set CONFIG_CRYPTO_CHACHA20POLY1305=y CONFIG_CRYPTO_CCM=y CONFIG_CRYPTO_GCM=y CONFIG_CRYPTO_SEQIV=y CONFIG_CRYPTO_ECHAINIV=y CONFIG_CRYPTO_ESSIV=y # end of AEAD (authenticated encryption with associated data) ciphers # # Hashes, digests, and MACs # CONFIG_CRYPTO_BLAKE2B=y CONFIG_CRYPTO_CMAC=y CONFIG_CRYPTO_GHASH=y CONFIG_CRYPTO_HMAC=y # CONFIG_CRYPTO_MD4 is not set CONFIG_CRYPTO_MD5=y # CONFIG_CRYPTO_MICHAEL_MIC is not set CONFIG_CRYPTO_POLYVAL=y CONFIG_CRYPTO_POLY1305=y CONFIG_CRYPTO_RMD160=y CONFIG_CRYPTO_SHA1=y CONFIG_CRYPTO_SHA256=y CONFIG_CRYPTO_SHA512=y CONFIG_CRYPTO_SHA3=y CONFIG_CRYPTO_SM3=y CONFIG_CRYPTO_SM3_GENERIC=y CONFIG_CRYPTO_STREEBOG=y CONFIG_CRYPTO_VMAC=y CONFIG_CRYPTO_WP512=y # CONFIG_CRYPTO_XCBC is not set CONFIG_CRYPTO_XXHASH=y # end of Hashes, digests, and MACs # # CRCs (cyclic redundancy checks) # CONFIG_CRYPTO_CRC32C=y CONFIG_CRYPTO_CRC32=y CONFIG_CRYPTO_CRCT10DIF=y CONFIG_CRYPTO_CRC64_ROCKSOFT=y # end of CRCs (cyclic redundancy checks) # # Compression # CONFIG_CRYPTO_DEFLATE=y CONFIG_CRYPTO_LZO=y CONFIG_CRYPTO_842=y CONFIG_CRYPTO_LZ4=y # CONFIG_CRYPTO_LZ4HC is not set # CONFIG_CRYPTO_ZSTD is not set # end of Compression # # Random number generation # # CONFIG_CRYPTO_ANSI_CPRNG is not set CONFIG_CRYPTO_DRBG_MENU=y CONFIG_CRYPTO_DRBG_HMAC=y # CONFIG_CRYPTO_DRBG_HASH is not set CONFIG_CRYPTO_DRBG_CTR=y CONFIG_CRYPTO_DRBG=y CONFIG_CRYPTO_JITTERENTROPY=y # end of Random number generation # # Userspace interface # CONFIG_CRYPTO_USER_API=y # CONFIG_CRYPTO_USER_API_HASH is not set # CONFIG_CRYPTO_USER_API_SKCIPHER is not set # CONFIG_CRYPTO_USER_API_RNG is not set CONFIG_CRYPTO_USER_API_AEAD=y CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE=y # end of Userspace interface CONFIG_CRYPTO_HASH_INFO=y # # Accelerated Cryptographic Algorithms for CPU (loongarch) # CONFIG_CRYPTO_CRC32_LOONGARCH=y # end of Accelerated Cryptographic Algorithms for CPU (loongarch) CONFIG_CRYPTO_HW=y # CONFIG_CRYPTO_DEV_ALLWINNER is not set # CONFIG_CRYPTO_DEV_SL3516 is not set # CONFIG_CRYPTO_DEV_EXYNOS_RNG is not set # CONFIG_CRYPTO_DEV_S5P is not set # CONFIG_CRYPTO_DEV_ATMEL_AES is not set # CONFIG_CRYPTO_DEV_ATMEL_TDES is not set # CONFIG_CRYPTO_DEV_ATMEL_SHA is not set CONFIG_CRYPTO_DEV_ATMEL_I2C=y CONFIG_CRYPTO_DEV_ATMEL_ECC=y CONFIG_CRYPTO_DEV_ATMEL_SHA204A=y # CONFIG_CAVIUM_CPT is not set CONFIG_CRYPTO_DEV_NITROX=y CONFIG_CRYPTO_DEV_NITROX_CNN55XX=y CONFIG_CRYPTO_DEV_MARVELL=y CONFIG_CRYPTO_DEV_OCTEONTX_CPT=y CONFIG_CRYPTO_DEV_OCTEONTX2_CPT=y # CONFIG_CRYPTO_DEV_KEEMBAY_OCS_AES_SM4 is not set CONFIG_CRYPTO_DEV_KEEMBAY_OCS_ECC=y CONFIG_CRYPTO_DEV_KEEMBAY_OCS_HCU=y CONFIG_CRYPTO_DEV_KEEMBAY_OCS_HCU_HMAC_SHA224=y CONFIG_CRYPTO_DEV_QAT=y CONFIG_CRYPTO_DEV_QAT_DH895xCC=y CONFIG_CRYPTO_DEV_QAT_C3XXX=y CONFIG_CRYPTO_DEV_QAT_C62X=y # CONFIG_CRYPTO_DEV_QAT_4XXX is not set CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=y # CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set CONFIG_CRYPTO_DEV_QAT_C62XVF=y CONFIG_CRYPTO_DEV_CAVIUM_ZIP=y CONFIG_CRYPTO_DEV_QCE=y CONFIG_CRYPTO_DEV_QCE_AEAD=y # CONFIG_CRYPTO_DEV_QCE_ENABLE_ALL is not set # CONFIG_CRYPTO_DEV_QCE_ENABLE_SKCIPHER is not set # CONFIG_CRYPTO_DEV_QCE_ENABLE_SHA is not set CONFIG_CRYPTO_DEV_QCE_ENABLE_AEAD=y CONFIG_CRYPTO_DEV_QCOM_RNG=y CONFIG_CRYPTO_DEV_IMGTEC_HASH=y # CONFIG_CRYPTO_DEV_ZYNQMP_AES is not set # CONFIG_CRYPTO_DEV_ZYNQMP_SHA3 is not set CONFIG_CRYPTO_DEV_VIRTIO=y CONFIG_CRYPTO_DEV_SAFEXCEL=y # CONFIG_CRYPTO_DEV_CCREE is not set CONFIG_CRYPTO_DEV_HISI_SEC=y CONFIG_CRYPTO_DEV_HISI_SEC2=y CONFIG_CRYPTO_DEV_HISI_QM=y CONFIG_CRYPTO_DEV_HISI_ZIP=y CONFIG_CRYPTO_DEV_HISI_HPRE=y # CONFIG_CRYPTO_DEV_HISTB_TRNG is not set # CONFIG_CRYPTO_DEV_AMLOGIC_GXL is not set CONFIG_CRYPTO_DEV_SA2UL=y CONFIG_CRYPTO_DEV_ASPEED=y # CONFIG_CRYPTO_DEV_ASPEED_DEBUG is not set CONFIG_CRYPTO_DEV_ASPEED_HACE_HASH=y CONFIG_CRYPTO_DEV_ASPEED_HACE_CRYPTO=y CONFIG_CRYPTO_DEV_ASPEED_ACRY=y CONFIG_ASYMMETRIC_KEY_TYPE=y CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y CONFIG_X509_CERTIFICATE_PARSER=y CONFIG_PKCS8_PRIVATE_KEY_PARSER=y CONFIG_PKCS7_MESSAGE_PARSER=y CONFIG_PKCS7_TEST_KEY=y CONFIG_SIGNED_PE_FILE_VERIFICATION=y # CONFIG_FIPS_SIGNATURE_SELFTEST is not set # # Certificates for signature checking # CONFIG_SYSTEM_TRUSTED_KEYRING=y CONFIG_SYSTEM_TRUSTED_KEYS="" # CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set # CONFIG_SECONDARY_TRUSTED_KEYRING is not set # CONFIG_SYSTEM_BLACKLIST_KEYRING is not set # end of Certificates for signature checking CONFIG_BINARY_PRINTF=y # # Library routines # CONFIG_RAID6_PQ=y CONFIG_RAID6_PQ_BENCHMARK=y CONFIG_LINEAR_RANGES=y CONFIG_PACKING=y CONFIG_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y CONFIG_GENERIC_NET_UTILS=y # CONFIG_CORDIC is not set # CONFIG_PRIME_NUMBERS is not set CONFIG_RATIONAL=y CONFIG_GENERIC_PCI_IOMAP=y CONFIG_STMP_DEVICE=y CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y # # Crypto library routines # CONFIG_CRYPTO_LIB_UTILS=y CONFIG_CRYPTO_LIB_AES=y CONFIG_CRYPTO_LIB_ARC4=y CONFIG_CRYPTO_LIB_GF128MUL=y CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y CONFIG_CRYPTO_LIB_CHACHA_GENERIC=y CONFIG_CRYPTO_LIB_CHACHA=y CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=y CONFIG_CRYPTO_LIB_CURVE25519=y CONFIG_CRYPTO_LIB_DES=y CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1 CONFIG_CRYPTO_LIB_POLY1305_GENERIC=y CONFIG_CRYPTO_LIB_POLY1305=y # CONFIG_CRYPTO_LIB_CHACHA20POLY1305 is not set CONFIG_CRYPTO_LIB_SHA1=y CONFIG_CRYPTO_LIB_SHA256=y # end of Crypto library routines CONFIG_CRC_CCITT=y CONFIG_CRC16=y CONFIG_CRC_T10DIF=y CONFIG_CRC64_ROCKSOFT=y CONFIG_CRC_ITU_T=y CONFIG_CRC32=y CONFIG_CRC32_SELFTEST=y CONFIG_CRC32_SLICEBY8=y # CONFIG_CRC32_SLICEBY4 is not set # CONFIG_CRC32_SARWATE is not set # CONFIG_CRC32_BIT is not set CONFIG_CRC64=y CONFIG_CRC4=y CONFIG_CRC7=y CONFIG_LIBCRC32C=y CONFIG_CRC8=y CONFIG_XXHASH=y CONFIG_AUDIT_GENERIC=y # CONFIG_RANDOM32_SELFTEST is not set CONFIG_842_COMPRESS=y CONFIG_842_DECOMPRESS=y CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_DEFLATE=y CONFIG_LZO_COMPRESS=y CONFIG_LZO_DECOMPRESS=y CONFIG_LZ4_COMPRESS=y CONFIG_LZ4_DECOMPRESS=y CONFIG_ZSTD_COMMON=y CONFIG_ZSTD_COMPRESS=y CONFIG_ZSTD_DECOMPRESS=y CONFIG_XZ_DEC=y CONFIG_XZ_DEC_X86=y CONFIG_XZ_DEC_POWERPC=y CONFIG_XZ_DEC_IA64=y CONFIG_XZ_DEC_ARM=y CONFIG_XZ_DEC_ARMTHUMB=y CONFIG_XZ_DEC_SPARC=y CONFIG_XZ_DEC_MICROLZMA=y CONFIG_XZ_DEC_BCJ=y CONFIG_XZ_DEC_TEST=y CONFIG_DECOMPRESS_GZIP=y CONFIG_DECOMPRESS_BZIP2=y CONFIG_DECOMPRESS_LZMA=y CONFIG_DECOMPRESS_XZ=y CONFIG_DECOMPRESS_LZO=y CONFIG_DECOMPRESS_LZ4=y CONFIG_GENERIC_ALLOCATOR=y CONFIG_INTERVAL_TREE=y CONFIG_ASSOCIATIVE_ARRAY=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT=y CONFIG_HAS_IOPORT_MAP=y CONFIG_HAS_DMA=y CONFIG_NEED_DMA_MAP_STATE=y CONFIG_ARCH_DMA_ADDR_T_64BIT=y CONFIG_DMA_DECLARE_COHERENT=y CONFIG_SWIOTLB=y CONFIG_DMA_RESTRICTED_POOL=y CONFIG_DMA_CMA=y CONFIG_DMA_PERNUMA_CMA=y # # Default contiguous memory area size: # CONFIG_CMA_SIZE_PERCENTAGE=10 # CONFIG_CMA_SIZE_SEL_MBYTES is not set CONFIG_CMA_SIZE_SEL_PERCENTAGE=y # CONFIG_CMA_SIZE_SEL_MIN is not set # CONFIG_CMA_SIZE_SEL_MAX is not set CONFIG_CMA_ALIGNMENT=8 # CONFIG_DMA_API_DEBUG is not set CONFIG_DMA_MAP_BENCHMARK=y CONFIG_SGL_ALLOC=y CONFIG_CHECK_SIGNATURE=y CONFIG_CPUMASK_OFFSTACK=y CONFIG_CPU_RMAP=y CONFIG_DQL=y CONFIG_GLOB=y # CONFIG_GLOB_SELFTEST is not set CONFIG_NLATTR=y CONFIG_CLZ_TAB=y CONFIG_IRQ_POLL=y CONFIG_MPILIB=y CONFIG_DIMLIB=y CONFIG_LIBFDT=y CONFIG_OID_REGISTRY=y CONFIG_UCS2_STRING=y CONFIG_HAVE_GENERIC_VDSO=y CONFIG_GENERIC_GETTIMEOFDAY=y CONFIG_FONT_SUPPORT=y # CONFIG_FONTS is not set CONFIG_FONT_8x8=y CONFIG_FONT_8x16=y CONFIG_SG_SPLIT=y CONFIG_SG_POOL=y CONFIG_ARCH_STACKWALK=y CONFIG_STACKDEPOT=y CONFIG_REF_TRACKER=y CONFIG_SBITMAP=y # CONFIG_PARMAN is not set CONFIG_OBJAGG=y # end of Library routines CONFIG_GENERIC_LIB_ASHLDI3=y CONFIG_GENERIC_LIB_ASHRDI3=y CONFIG_GENERIC_LIB_LSHRDI3=y CONFIG_GENERIC_LIB_CMPDI2=y CONFIG_GENERIC_LIB_UCMPDI2=y CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y CONFIG_POLYNOMIAL=y # # Kernel hacking # # # printk and dmesg options # # CONFIG_PRINTK_TIME is not set # CONFIG_PRINTK_CALLER is not set # CONFIG_STACKTRACE_BUILD_ID is not set CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 CONFIG_CONSOLE_LOGLEVEL_QUIET=4 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 CONFIG_BOOT_PRINTK_DELAY=y # CONFIG_DYNAMIC_DEBUG is not set CONFIG_DYNAMIC_DEBUG_CORE=y CONFIG_SYMBOLIC_ERRNAME=y CONFIG_DEBUG_BUGVERBOSE=y # end of printk and dmesg options CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_MISC=y # # Compile-time checks and compiler options # CONFIG_DEBUG_INFO=y CONFIG_AS_HAS_NON_CONST_LEB128=y # CONFIG_DEBUG_INFO_NONE is not set # CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set CONFIG_DEBUG_INFO_DWARF4=y # CONFIG_DEBUG_INFO_DWARF5 is not set CONFIG_DEBUG_INFO_REDUCED=y CONFIG_DEBUG_INFO_COMPRESSED_NONE=y # CONFIG_DEBUG_INFO_COMPRESSED_ZLIB is not set # CONFIG_DEBUG_INFO_SPLIT is not set CONFIG_PAHOLE_HAS_SPLIT_BTF=y CONFIG_PAHOLE_HAS_LANG_EXCLUDE=y CONFIG_GDB_SCRIPTS=y CONFIG_FRAME_WARN=2048 CONFIG_STRIP_ASM_SYMS=y # CONFIG_READABLE_ASM is not set CONFIG_HEADERS_INSTALL=y CONFIG_DEBUG_SECTION_MISMATCH=y CONFIG_SECTION_MISMATCH_WARN_ONLY=y CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y # end of Compile-time checks and compiler options # # Generic Kernel Debugging Instruments # # CONFIG_MAGIC_SYSRQ is not set CONFIG_DEBUG_FS=y # CONFIG_DEBUG_FS_ALLOW_ALL is not set CONFIG_DEBUG_FS_DISALLOW_MOUNT=y # CONFIG_DEBUG_FS_ALLOW_NONE is not set CONFIG_UBSAN=y CONFIG_CC_HAS_UBSAN_BOUNDS=y # CONFIG_UBSAN_BOUNDS is not set CONFIG_UBSAN_SHIFT=y # CONFIG_UBSAN_DIV_ZERO is not set CONFIG_UBSAN_UNREACHABLE=y # CONFIG_UBSAN_BOOL is not set CONFIG_UBSAN_ENUM=y CONFIG_HAVE_KCSAN_COMPILER=y # end of Generic Kernel Debugging Instruments # # Networking Debugging # # CONFIG_NET_DEV_REFCNT_TRACKER is not set CONFIG_NET_NS_REFCNT_TRACKER=y CONFIG_DEBUG_NET=y # end of Networking Debugging # # Memory Debugging # CONFIG_PAGE_EXTENSION=y # CONFIG_DEBUG_SLAB is not set CONFIG_PAGE_OWNER=y # CONFIG_PAGE_POISONING is not set CONFIG_DEBUG_PAGE_REF=y CONFIG_DEBUG_OBJECTS=y CONFIG_DEBUG_OBJECTS_SELFTEST=y # CONFIG_DEBUG_OBJECTS_FREE is not set CONFIG_DEBUG_OBJECTS_TIMERS=y # CONFIG_DEBUG_OBJECTS_WORK is not set CONFIG_DEBUG_OBJECTS_RCU_HEAD=y # CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1 # CONFIG_SHRINKER_DEBUG is not set CONFIG_DEBUG_STACK_USAGE=y # CONFIG_SCHED_STACK_END_CHECK is not set CONFIG_DEBUG_VM_IRQSOFF=y CONFIG_DEBUG_VM=y # CONFIG_DEBUG_VM_MAPLE_TREE is not set # CONFIG_DEBUG_VM_RB is not set # CONFIG_DEBUG_VM_PGFLAGS is not set CONFIG_DEBUG_MEMORY_INIT=y CONFIG_DEBUG_PER_CPU_MAPS=y CONFIG_HAVE_DEBUG_STACKOVERFLOW=y CONFIG_DEBUG_STACKOVERFLOW=y CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y # end of Memory Debugging # CONFIG_DEBUG_SHIRQ is not set # # Debug Oops, Lockups and Hangs # # CONFIG_PANIC_ON_OOPS is not set CONFIG_PANIC_ON_OOPS_VALUE=0 CONFIG_PANIC_TIMEOUT=0 # CONFIG_SOFTLOCKUP_DETECTOR is not set CONFIG_DETECT_HUNG_TASK=y CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y CONFIG_WQ_WATCHDOG=y # end of Debug Oops, Lockups and Hangs # # Scheduler Debugging # CONFIG_SCHED_DEBUG=y CONFIG_SCHED_INFO=y CONFIG_SCHEDSTATS=y # end of Scheduler Debugging # CONFIG_DEBUG_TIMEKEEPING is not set # CONFIG_DEBUG_PREEMPT is not set # # Lock Debugging (spinlocks, mutexes, etc...) # CONFIG_LOCK_DEBUGGING_SUPPORT=y CONFIG_PROVE_LOCKING=y CONFIG_PROVE_RAW_LOCK_NESTING=y CONFIG_LOCK_STAT=y CONFIG_DEBUG_RT_MUTEXES=y CONFIG_DEBUG_SPINLOCK=y CONFIG_DEBUG_MUTEXES=y CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y CONFIG_DEBUG_RWSEMS=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_LOCKDEP=y CONFIG_LOCKDEP_BITS=15 CONFIG_LOCKDEP_CHAINS_BITS=16 CONFIG_LOCKDEP_STACK_TRACE_BITS=19 CONFIG_LOCKDEP_STACK_TRACE_HASH_BITS=14 CONFIG_LOCKDEP_CIRCULAR_QUEUE_BITS=12 CONFIG_DEBUG_LOCKDEP=y # CONFIG_DEBUG_ATOMIC_SLEEP is not set CONFIG_DEBUG_LOCKING_API_SELFTESTS=y CONFIG_LOCK_TORTURE_TEST=y CONFIG_WW_MUTEX_SELFTEST=y CONFIG_SCF_TORTURE_TEST=y # CONFIG_CSD_LOCK_WAIT_DEBUG is not set # end of Lock Debugging (spinlocks, mutexes, etc...) CONFIG_TRACE_IRQFLAGS=y CONFIG_DEBUG_IRQFLAGS=y CONFIG_STACKTRACE=y CONFIG_WARN_ALL_UNSEEDED_RANDOM=y # CONFIG_DEBUG_KOBJECT is not set # CONFIG_DEBUG_KOBJECT_RELEASE is not set # # Debug kernel data structures # CONFIG_DEBUG_LIST=y CONFIG_DEBUG_PLIST=y # CONFIG_DEBUG_SG is not set CONFIG_DEBUG_NOTIFIERS=y CONFIG_BUG_ON_DATA_CORRUPTION=y CONFIG_DEBUG_MAPLE_TREE=y # end of Debug kernel data structures # CONFIG_DEBUG_CREDENTIALS is not set # # RCU Debugging # CONFIG_PROVE_RCU=y CONFIG_TORTURE_TEST=y CONFIG_RCU_SCALE_TEST=y CONFIG_RCU_TORTURE_TEST=y # CONFIG_RCU_REF_SCALE_TEST is not set CONFIG_RCU_CPU_STALL_TIMEOUT=21 CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0 CONFIG_RCU_CPU_STALL_CPUTIME=y # CONFIG_RCU_TRACE is not set # CONFIG_RCU_EQS_DEBUG is not set # end of RCU Debugging CONFIG_DEBUG_WQ_FORCE_RR_CPU=y CONFIG_CPU_HOTPLUG_STATE_CONTROL=y CONFIG_USER_STACKTRACE_SUPPORT=y CONFIG_NOP_TRACER=y CONFIG_HAVE_FUNCTION_TRACER=y CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y CONFIG_HAVE_DYNAMIC_FTRACE=y CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y CONFIG_HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS=y CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y CONFIG_HAVE_SYSCALL_TRACEPOINTS=y CONFIG_HAVE_C_RECORDMCOUNT=y CONFIG_TRACE_CLOCK=y CONFIG_RING_BUFFER=y CONFIG_EVENT_TRACING=y CONFIG_CONTEXT_SWITCH_TRACER=y CONFIG_PREEMPTIRQ_TRACEPOINTS=y CONFIG_TRACING=y CONFIG_TRACING_SUPPORT=y # CONFIG_FTRACE is not set # CONFIG_SAMPLES is not set CONFIG_HAVE_SAMPLE_FTRACE_DIRECT=y CONFIG_HAVE_SAMPLE_FTRACE_DIRECT_MULTI=y # CONFIG_STRICT_DEVMEM is not set # # loongarch Debugging # CONFIG_UNWINDER_GUESS=y # CONFIG_UNWINDER_PROLOGUE is not set # end of loongarch Debugging # # Kernel Testing and Coverage # # CONFIG_KUNIT is not set # CONFIG_NOTIFIER_ERROR_INJECTION is not set # CONFIG_FAULT_INJECTION is not set CONFIG_CC_HAS_SANCOV_TRACE_PC=y CONFIG_RUNTIME_TESTING_MENU=y CONFIG_TEST_DHRY=y # CONFIG_LKDTM is not set # CONFIG_TEST_MIN_HEAP is not set CONFIG_TEST_DIV64=y CONFIG_BACKTRACE_SELF_TEST=y # CONFIG_TEST_REF_TRACKER is not set CONFIG_RBTREE_TEST=y # CONFIG_REED_SOLOMON_TEST is not set CONFIG_INTERVAL_TREE_TEST=y # CONFIG_ATOMIC64_SELFTEST is not set # CONFIG_TEST_HEXDUMP is not set CONFIG_STRING_SELFTEST=y # CONFIG_TEST_STRING_HELPERS is not set # CONFIG_TEST_KSTRTOX is not set # CONFIG_TEST_PRINTF is not set # CONFIG_TEST_SCANF is not set CONFIG_TEST_BITMAP=y CONFIG_TEST_UUID=y # CONFIG_TEST_XARRAY is not set CONFIG_TEST_MAPLE_TREE=y CONFIG_TEST_RHASHTABLE=y CONFIG_TEST_IDA=y # CONFIG_FIND_BIT_BENCHMARK is not set # CONFIG_TEST_FIRMWARE is not set CONFIG_TEST_SYSCTL=y # CONFIG_TEST_UDELAY is not set CONFIG_TEST_MEMCAT_P=y # CONFIG_TEST_OBJAGG is not set # CONFIG_TEST_MEMINIT is not set CONFIG_TEST_FREE_PAGES=y # end of Kernel Testing and Coverage # # Rust hacking # # end of Rust hacking # end of Kernel hacking # # Documentation # CONFIG_WARN_MISSING_DOCUMENTS=y CONFIG_WARN_ABI_ERRORS=y # end of Documentation ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v3 3/6] net: bcmasp: Add support for ASP2.0 Ethernet controller 2023-05-19 21:19 ` [PATCH net-next v3 3/6] net: bcmasp: Add support for ASP2.0 " Justin Chen 2023-05-20 4:43 ` Jakub Kicinski 2023-05-21 9:05 ` kernel test robot @ 2023-05-22 11:34 ` Simon Horman 2023-05-22 11:38 ` Simon Horman 3 siblings, 0 replies; 16+ messages in thread From: Simon Horman @ 2023-05-22 11:34 UTC (permalink / raw) To: Justin Chen Cc: netdev, devicetree, linux-kernel, linux-media, dri-devel, bcm-kernel-feedback-list, justinpopo6, f.fainelli, davem, florian.fainelli, edumazet, kuba, pabeni, robh+dt, krzysztof.kozlowski+dt, opendmb, andrew, hkallweit1, linux, richardcochran, sumit.semwal, christian.koenig On Fri, May 19, 2023 at 02:19:41PM -0700, Justin Chen wrote: > Add support for the Broadcom ASP 2.0 Ethernet controller which is first > introduced with 72165. This controller features two distinct Ethernet > ports that can be independently operated. > > This patch supports: > > - Wake-on-LAN using magic packets > - basic ethtool operations (link, counters, message level) > - MAC destination address filtering (promiscuous, ALL_MULTI, etc.) > > Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com> > Signed-off-by: Justin Chen <justin.chen@broadcom.com> ... > +static netdev_tx_t bcmasp_xmit(struct sk_buff *skb, struct net_device *dev) > +{ > + struct bcmasp_intf *intf = netdev_priv(dev); > + struct device *kdev = &intf->parent->pdev->dev; > + int spb_index, nr_frags, ret, i, j; > + unsigned int total_bytes, size; > + struct bcmasp_tx_cb *txcb; > + dma_addr_t mapping, valid; > + struct bcmasp_desc *desc; > + bool csum_hw = false; > + skb_frag_t *frag; Hi Justin, Please use reverse xmas tree order - lognest line to shortest - for local variables, even in cases of assignment such as this one. In this case I would suggest splitting the declarations and assignment of kdev. Something line this: struct bcmasp_intf *intf = netdev_priv(dev); int spb_index, nr_frags, ret, i, j; unsigned int total_bytes, size; struct bcmasp_tx_cb *txcb; dma_addr_t mapping, valid; struct bcmasp_desc *desc; bool csum_hw = false; struct device *kdev; skb_frag_t *frag; kdev = &intf->parent->pdev->dev; ... ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH net-next v3 3/6] net: bcmasp: Add support for ASP2.0 Ethernet controller 2023-05-19 21:19 ` [PATCH net-next v3 3/6] net: bcmasp: Add support for ASP2.0 " Justin Chen ` (2 preceding siblings ...) 2023-05-22 11:34 ` Simon Horman @ 2023-05-22 11:38 ` Simon Horman 3 siblings, 0 replies; 16+ messages in thread From: Simon Horman @ 2023-05-22 11:38 UTC (permalink / raw) To: Justin Chen Cc: netdev, devicetree, linux-kernel, linux-media, dri-devel, bcm-kernel-feedback-list, justinpopo6, f.fainelli, davem, florian.fainelli, edumazet, kuba, pabeni, robh+dt, krzysztof.kozlowski+dt, opendmb, andrew, hkallweit1, linux, richardcochran, sumit.semwal, christian.koenig On Fri, May 19, 2023 at 02:19:41PM -0700, Justin Chen wrote: > Add support for the Broadcom ASP 2.0 Ethernet controller which is first > introduced with 72165. This controller features two distinct Ethernet > ports that can be independently operated. > > This patch supports: > > - Wake-on-LAN using magic packets > - basic ethtool operations (link, counters, message level) > - MAC destination address filtering (promiscuous, ALL_MULTI, etc.) > > Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com> > Signed-off-by: Justin Chen <justin.chen@broadcom.com> ... > +static int bcmasp_netfilt_get_reg_offset(struct bcmasp_priv *priv, > + struct bcmasp_net_filter *nfilt, > + enum asp_netfilt_reg_type reg_type, > + u32 offset) > +{ > + u32 block_index, filter_sel; > + > + if (offset < 32) { > + block_index = ASP_RX_FILTER_NET_L2; > + filter_sel = nfilt->hw_index; > + } else if (offset < 64) { > + block_index = ASP_RX_FILTER_NET_L2; > + filter_sel = nfilt->hw_index + 1; > + } else if (offset < 96) { > + block_index = ASP_RX_FILTER_NET_L3_0; > + filter_sel = nfilt->hw_index; > + } else if (offset < 128) { > + block_index = ASP_RX_FILTER_NET_L3_0; > + filter_sel = nfilt->hw_index + 1; > + } else if (offset < 160) { > + block_index = ASP_RX_FILTER_NET_L3_1; > + filter_sel = nfilt->hw_index; > + } else if (offset < 192) { > + block_index = ASP_RX_FILTER_NET_L3_1; > + filter_sel = nfilt->hw_index + 1; > + } else if (offset < 224) { > + block_index = ASP_RX_FILTER_NET_L4; > + filter_sel = nfilt->hw_index; > + } else if (offset < 256) { > + block_index = ASP_RX_FILTER_NET_L4; > + filter_sel = nfilt->hw_index + 1; > + } Hi Justin, Perhaps it is not possible. But it seems to me that it would be nice to have: else { return -EINVAL; } Otherwise, if that case does occur, block_index and filter_sel will be used uninitialised. > + > + switch (reg_type) { > + case ASP_NETFILT_MATCH: > + return ASP_RX_FILTER_NET_PAT(filter_sel, block_index, > + (offset % 32)); > + case ASP_NETFILT_MASK: > + return ASP_RX_FILTER_NET_MASK(filter_sel, block_index, > + (offset % 32)); > + default: > + return -EINVAL; > + } > +} ... ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH net-next v3 4/6] net: phy: mdio-bcm-unimac: Add asp v2.0 support 2023-05-19 21:19 [PATCH net-next v3 0/6] Brcm ASP 2.0 Ethernet Controller Justin Chen ` (2 preceding siblings ...) 2023-05-19 21:19 ` [PATCH net-next v3 3/6] net: bcmasp: Add support for ASP2.0 " Justin Chen @ 2023-05-19 21:19 ` Justin Chen 2023-05-19 21:19 ` [PATCH net-next v3 5/6] net: phy: bcm7xxx: Add EPHY entry for 74165 Justin Chen 2023-05-19 21:19 ` [PATCH net-next v3 6/6] MAINTAINERS: ASP 2.0 Ethernet driver maintainers Justin Chen 5 siblings, 0 replies; 16+ messages in thread From: Justin Chen @ 2023-05-19 21:19 UTC (permalink / raw) To: netdev, devicetree, linux-kernel, linux-media, dri-devel, bcm-kernel-feedback-list Cc: justinpopo6, justin.chen, f.fainelli, davem, florian.fainelli, edumazet, kuba, pabeni, robh+dt, krzysztof.kozlowski+dt, opendmb, andrew, hkallweit1, linux, richardcochran, sumit.semwal, christian.koenig [-- Attachment #1: Type: text/plain, Size: 897 bytes --] Add mdio compat string for ASP 2.0 ethernet driver. Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com> Signed-off-by: Justin Chen <justin.chen@broadcom.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> --- drivers/net/mdio/mdio-bcm-unimac.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/net/mdio/mdio-bcm-unimac.c b/drivers/net/mdio/mdio-bcm-unimac.c index bfc9be23c973..6b26a0803696 100644 --- a/drivers/net/mdio/mdio-bcm-unimac.c +++ b/drivers/net/mdio/mdio-bcm-unimac.c @@ -334,6 +334,8 @@ static SIMPLE_DEV_PM_OPS(unimac_mdio_pm_ops, unimac_mdio_suspend, unimac_mdio_resume); static const struct of_device_id unimac_mdio_ids[] = { + { .compatible = "brcm,asp-v2.1-mdio", }, + { .compatible = "brcm,asp-v2.0-mdio", }, { .compatible = "brcm,genet-mdio-v5", }, { .compatible = "brcm,genet-mdio-v4", }, { .compatible = "brcm,genet-mdio-v3", }, -- 2.7.4 [-- Attachment #2: S/MIME Cryptographic Signature --] [-- Type: application/pkcs7-signature, Size: 4206 bytes --] ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH net-next v3 5/6] net: phy: bcm7xxx: Add EPHY entry for 74165 2023-05-19 21:19 [PATCH net-next v3 0/6] Brcm ASP 2.0 Ethernet Controller Justin Chen ` (3 preceding siblings ...) 2023-05-19 21:19 ` [PATCH net-next v3 4/6] net: phy: mdio-bcm-unimac: Add asp v2.0 support Justin Chen @ 2023-05-19 21:19 ` Justin Chen 2023-05-19 21:19 ` [PATCH net-next v3 6/6] MAINTAINERS: ASP 2.0 Ethernet driver maintainers Justin Chen 5 siblings, 0 replies; 16+ messages in thread From: Justin Chen @ 2023-05-19 21:19 UTC (permalink / raw) To: netdev, devicetree, linux-kernel, linux-media, dri-devel, bcm-kernel-feedback-list Cc: justinpopo6, justin.chen, f.fainelli, davem, florian.fainelli, edumazet, kuba, pabeni, robh+dt, krzysztof.kozlowski+dt, opendmb, andrew, hkallweit1, linux, richardcochran, sumit.semwal, christian.koenig [-- Attachment #1: Type: text/plain, Size: 1555 bytes --] From: Florian Fainelli <florian.fainelli@broadcom.com> 74165 is a 16nm process SoC with a 10/100 integrated Ethernet PHY, utilize the recently defined 16nm EPHY macro to configure that PHY. Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com> Signed-off-by: Justin Chen <justin.chen@broadcom.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> --- drivers/net/phy/bcm7xxx.c | 1 + include/linux/brcmphy.h | 1 + 2 files changed, 2 insertions(+) diff --git a/drivers/net/phy/bcm7xxx.c b/drivers/net/phy/bcm7xxx.c index f8c17a253f8b..8478b081c058 100644 --- a/drivers/net/phy/bcm7xxx.c +++ b/drivers/net/phy/bcm7xxx.c @@ -913,6 +913,7 @@ static struct phy_driver bcm7xxx_driver[] = { BCM7XXX_28NM_GPHY(PHY_ID_BCM7278, "Broadcom BCM7278"), BCM7XXX_28NM_GPHY(PHY_ID_BCM7364, "Broadcom BCM7364"), BCM7XXX_28NM_GPHY(PHY_ID_BCM7366, "Broadcom BCM7366"), + BCM7XXX_16NM_EPHY(PHY_ID_BCM74165, "Broadcom BCM74165"), BCM7XXX_28NM_GPHY(PHY_ID_BCM74371, "Broadcom BCM74371"), BCM7XXX_28NM_GPHY(PHY_ID_BCM7439, "Broadcom BCM7439"), BCM7XXX_28NM_GPHY(PHY_ID_BCM7439_2, "Broadcom BCM7439 (2)"), diff --git a/include/linux/brcmphy.h b/include/linux/brcmphy.h index e9afbfb6d7a5..409ec9d35051 100644 --- a/include/linux/brcmphy.h +++ b/include/linux/brcmphy.h @@ -44,6 +44,7 @@ #define PHY_ID_BCM7366 0x600d8490 #define PHY_ID_BCM7346 0x600d8650 #define PHY_ID_BCM7362 0x600d84b0 +#define PHY_ID_BCM74165 0x359052c0 #define PHY_ID_BCM7425 0x600d86b0 #define PHY_ID_BCM7429 0x600d8730 #define PHY_ID_BCM7435 0x600d8750 -- 2.7.4 [-- Attachment #2: S/MIME Cryptographic Signature --] [-- Type: application/pkcs7-signature, Size: 4206 bytes --] ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH net-next v3 6/6] MAINTAINERS: ASP 2.0 Ethernet driver maintainers 2023-05-19 21:19 [PATCH net-next v3 0/6] Brcm ASP 2.0 Ethernet Controller Justin Chen ` (4 preceding siblings ...) 2023-05-19 21:19 ` [PATCH net-next v3 5/6] net: phy: bcm7xxx: Add EPHY entry for 74165 Justin Chen @ 2023-05-19 21:19 ` Justin Chen 5 siblings, 0 replies; 16+ messages in thread From: Justin Chen @ 2023-05-19 21:19 UTC (permalink / raw) To: netdev, devicetree, linux-kernel, linux-media, dri-devel, bcm-kernel-feedback-list Cc: justinpopo6, justin.chen, f.fainelli, davem, florian.fainelli, edumazet, kuba, pabeni, robh+dt, krzysztof.kozlowski+dt, opendmb, andrew, hkallweit1, linux, richardcochran, sumit.semwal, christian.koenig [-- Attachment #1: Type: text/plain, Size: 982 bytes --] Add maintainers entry for ASP 2.0 Ethernet driver. Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com> Signed-off-by: Justin Chen <justin.chen@broadcom.com> --- v3 Change from gmail to broadcom emails MAINTAINERS | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index e2fd64c2ebdc..732a099f4a10 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4198,6 +4198,15 @@ F: drivers/net/mdio/mdio-bcm-unimac.c F: include/linux/platform_data/bcmgenet.h F: include/linux/platform_data/mdio-bcm-unimac.h +BROADCOM ASP 2.0 ETHERNET DRIVER +M: Justin Chen <justin.chen@broadcom.com> +M: Florian Fainelli <florian.fainelli@broadcom.com> +L: bcm-kernel-feedback-list@broadcom.com +L: netdev@vger.kernel.org +S: Supported +F: Documentation/devicetree/bindings/net/brcm,asp-v2.0.yaml +F: drivers/net/ethernet/broadcom/asp2/ + BROADCOM IPROC ARM ARCHITECTURE M: Ray Jui <rjui@broadcom.com> M: Scott Branden <sbranden@broadcom.com> -- 2.7.4 [-- Attachment #2: S/MIME Cryptographic Signature --] [-- Type: application/pkcs7-signature, Size: 4206 bytes --] ^ permalink raw reply related [flat|nested] 16+ messages in thread
end of thread, other threads:[~2023-05-22 18:48 UTC | newest] Thread overview: 16+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-05-19 21:19 [PATCH net-next v3 0/6] Brcm ASP 2.0 Ethernet Controller Justin Chen 2023-05-19 21:19 ` [PATCH net-next v3 1/6] dt-bindings: net: brcm,unimac-mdio: Add asp-v2.0 Justin Chen 2023-05-22 18:17 ` Conor Dooley 2023-05-22 18:25 ` Florian Fainelli 2023-05-22 18:38 ` Conor Dooley 2023-05-19 21:19 ` [PATCH net-next v3 2/6] dt-bindings: net: Brcm ASP 2.0 Ethernet controller Justin Chen 2023-05-22 18:27 ` Conor Dooley 2023-05-22 18:48 ` Justin Chen 2023-05-19 21:19 ` [PATCH net-next v3 3/6] net: bcmasp: Add support for ASP2.0 " Justin Chen 2023-05-20 4:43 ` Jakub Kicinski 2023-05-21 9:05 ` kernel test robot 2023-05-22 11:34 ` Simon Horman 2023-05-22 11:38 ` Simon Horman 2023-05-19 21:19 ` [PATCH net-next v3 4/6] net: phy: mdio-bcm-unimac: Add asp v2.0 support Justin Chen 2023-05-19 21:19 ` [PATCH net-next v3 5/6] net: phy: bcm7xxx: Add EPHY entry for 74165 Justin Chen 2023-05-19 21:19 ` [PATCH net-next v3 6/6] MAINTAINERS: ASP 2.0 Ethernet driver maintainers Justin Chen
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).