Commit deecae7d authored by David S. Miller's avatar David S. Miller
Browse files

Merge branch 'LiteETH-driver'



Joel Stanley says:

====================
net: Add LiteETH network driver

This adds a driver for the LiteX network device, LiteEth.

v4 Fixes the bindings and adds r-b tags from Gabriel and Rob.

v3 Updates the bindings to describe the slots in a way that makes more
sense for the hardware, instead of trying to fit some existing
properties. The driver is updated to use these bindings, and fix some
issues pointed out by Gabriel.

v2 Addresses feedback from Jakub, with detailed changes in each patch.

It also moves to the litex register accessors so the system works on big
endian litex platforms. I tested with mor1k on an Arty A7-100T.

I have removed the mdio aspects of the driver as they are not needed for
basic operation. I will continue to work on adding support in the
future, but I don't think it needs to block the mac driver going in.

The binding describes the mdio registers, and has been fixed to not show
any warnings against dtschema master.

LiteEth is a simple driver for the FPGA based Ethernet device used in various
RISC-V, PowerPC's microwatt, OpenRISC's mor1k and other FPGA based
systems on chip.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents bc8e05d6 ee7da21a
Loading
Loading
Loading
Loading
+98 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0-or-later OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/net/litex,liteeth.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: LiteX LiteETH ethernet device

maintainers:
  - Joel Stanley <joel@jms.id.au>

description: |
  LiteETH is a small footprint and configurable Ethernet core for FPGA based
  system on chips.

  The hardware source is Open Source and can be found on at
  https://github.com/enjoy-digital/liteeth/.

allOf:
  - $ref: ethernet-controller.yaml#

properties:
  compatible:
    const: litex,liteeth

  reg:
    items:
      - description: MAC registers
      - description: MDIO registers
      - description: Packet buffer

  reg-names:
    items:
      - const: mac
      - const: mdio
      - const: buffer

  interrupts:
    maxItems: 1

  litex,rx-slots:
    description: Number of slots in the receive buffer
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 1
    default: 2

  litex,tx-slots:
    description: Number of slots in the transmit buffer
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 1
    default: 2

  litex,slot-size:
    description: Size in bytes of a slot in the tx/rx buffer
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0x800
    default: 0x800

  mac-address: true
  local-mac-address: true
  phy-handle: true

  mdio:
    $ref: mdio.yaml#

required:
  - compatible
  - reg
  - interrupts

additionalProperties: false

examples:
  - |
    mac: ethernet@8020000 {
        compatible = "litex,liteeth";
        reg = <0x8021000 0x100>,
              <0x8020800 0x100>,
              <0x8030000 0x2000>;
        reg-names = "mac", "mdio", "buffer";
        litex,rx-slots = <2>;
        litex,tx-slots = <2>;
        litex,slot-size = <0x800>;
        interrupts = <0x11 0x1>;
        phy-handle = <&eth_phy>;

        mdio {
          #address-cells = <1>;
          #size-cells = <0>;

          eth_phy: ethernet-phy@0 {
            reg = <0>;
          };
        };
    };
...

#  vim: set ts=2 sw=2 sts=2 tw=80 et cc=80 ft=yaml :
+1 −0
Original line number Diff line number Diff line
@@ -118,6 +118,7 @@ config LANTIQ_XRX200
	  Support for the PMAC of the Gigabit switch (GSWIP) inside the
	  Lantiq / Intel VRX200 VDSL SoC

source "drivers/net/ethernet/litex/Kconfig"
source "drivers/net/ethernet/marvell/Kconfig"
source "drivers/net/ethernet/mediatek/Kconfig"
source "drivers/net/ethernet/mellanox/Kconfig"
+1 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ obj-$(CONFIG_JME) += jme.o
obj-$(CONFIG_KORINA) += korina.o
obj-$(CONFIG_LANTIQ_ETOP) += lantiq_etop.o
obj-$(CONFIG_LANTIQ_XRX200) += lantiq_xrx200.o
obj-$(CONFIG_NET_VENDOR_LITEX) += litex/
obj-$(CONFIG_NET_VENDOR_MARVELL) += marvell/
obj-$(CONFIG_NET_VENDOR_MEDIATEK) += mediatek/
obj-$(CONFIG_NET_VENDOR_MELLANOX) += mellanox/
+27 −0
Original line number Diff line number Diff line
#
# LiteX device configuration
#

config NET_VENDOR_LITEX
	bool "LiteX devices"
	default y
	help
	  If you have a network (Ethernet) card belonging to this class, say Y.

	  Note that the answer to this question doesn't directly affect the
	  kernel: saying N will just cause the configurator to skip all
	  the questions about LiteX devices. If you say Y, you will be asked
	  for your specific card in the following questions.

if NET_VENDOR_LITEX

config LITEX_LITEETH
	tristate "LiteX Ethernet support"
	help
	  If you wish to compile a kernel for hardware with a LiteX LiteEth
	  device then you should answer Y to this.

	  LiteX is a soft system-on-chip that targets FPGAs. LiteETH is a basic
	  network device that is commonly used in LiteX designs.

endif # NET_VENDOR_LITEX
+5 −0
Original line number Diff line number Diff line
#
# Makefile for the LiteX network device drivers.
#

obj-$(CONFIG_LITEX_LITEETH) += litex_liteeth.o
Loading