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

Merge branch 'stmmac-jh7100'

Cristian Ciocaltea says:

====================
StarFive DWMAC support for JH7100

This is just a subset of the initial patch series [1] adding networking
support for StarFive JH7100 SoC.

[1]: https://lore.kernel.org/lkml/20231218214451.2345691-1-cristian.ciocaltea@collabora.com/

Changes in v4:
 - Rebased series onto next-20240125
 - Added R-b tag from Rob in PATCH 1
 - v3:
   https://lore.kernel.org/lkml/20231222101001.2541758-1-cristian.ciocaltea@collabora.com/

Changes in v3:
 - Optimized jh7110 resets & reset-names properties (Rob)
 - Added R-b tag from Jacob in PATCH 1
 - v2:
   https://lore.kernel.org/lkml/20231220002824.2462655-1-cristian.ciocaltea@collabora.com/

Changes in v2:
 - Add the missing binding patch (Conor)
 - v1:
   https://lore.kernel.org/lkml/20231219231040.2459358-1-cristian.ciocaltea@collabora.com/


====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents ccf14452 8d4597b8
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -95,6 +95,7 @@ properties:
        - snps,dwmac-5.20
        - snps,dwxgmac
        - snps,dwxgmac-2.10
        - starfive,jh7100-dwmac
        - starfive,jh7110-dwmac

  reg:
@@ -144,8 +145,10 @@ properties:
      - description: AHB reset

  reset-names:
    minItems: 1
    items:
    oneOf:
      - items:
          - enum: [stmmaceth, ahb]
      - items:
          - const: stmmaceth
          - const: ahb

+50 −22
Original line number Diff line number Diff line
@@ -16,15 +16,19 @@ select:
    compatible:
      contains:
        enum:
          - starfive,jh7100-dwmac
          - starfive,jh7110-dwmac
  required:
    - compatible

properties:
  compatible:
    items:
      - enum:
          - starfive,jh7110-dwmac
    oneOf:
      - items:
          - const: starfive,jh7100-dwmac
          - const: snps,dwmac
      - items:
          - const: starfive,jh7110-dwmac
          - const: snps,dwmac-5.20

  reg:
@@ -46,24 +50,6 @@ properties:
      - const: tx
      - const: gtx

  interrupts:
    minItems: 3
    maxItems: 3

  interrupt-names:
    minItems: 3
    maxItems: 3

  resets:
    items:
      - description: MAC Reset signal.
      - description: AHB Reset signal.

  reset-names:
    items:
      - const: stmmaceth
      - const: ahb

  starfive,tx-use-rgmii-clk:
    description:
      Tx clock is provided by external rgmii clock.
@@ -94,6 +80,48 @@ required:
allOf:
  - $ref: snps,dwmac.yaml#

  - if:
      properties:
        compatible:
          contains:
            const: starfive,jh7100-dwmac
    then:
      properties:
        interrupts:
          minItems: 2
          maxItems: 2

        interrupt-names:
          minItems: 2
          maxItems: 2

        resets:
          maxItems: 1

        reset-names:
          const: ahb

  - if:
      properties:
        compatible:
          contains:
            const: starfive,jh7110-dwmac
    then:
      properties:
        interrupts:
          minItems: 3
          maxItems: 3

        interrupt-names:
          minItems: 3
          maxItems: 3

        resets:
          minItems: 2

        reset-names:
          minItems: 2

unevaluatedProperties: false

examples:
+3 −3
Original line number Diff line number Diff line
@@ -165,9 +165,9 @@ config DWMAC_STARFIVE
	help
	  Support for ethernet controllers on StarFive RISC-V SoCs

	  This selects the StarFive platform specific glue layer support for
	  the stmmac device driver. This driver is used for StarFive JH7110
	  ethernet controller.
	  This selects the StarFive platform specific glue layer support
	  for the stmmac device driver. This driver is used for the
	  StarFive JH7100 and JH7110 ethernet controllers.

config DWMAC_STI
	tristate "STi GMAC support"
+28 −4
Original line number Diff line number Diff line
@@ -19,9 +19,16 @@
#define STARFIVE_DWMAC_PHY_INFT_RMII		0x4
#define STARFIVE_DWMAC_PHY_INFT_FIELD		0x7U

#define JH7100_SYSMAIN_REGISTER49_DLYCHAIN	0xc8

struct starfive_dwmac_data {
	unsigned int gtxclk_dlychain;
};

struct starfive_dwmac {
	struct device *dev;
	struct clk *clk_tx;
	const struct starfive_dwmac_data *data;
};

static void starfive_dwmac_fix_mac_speed(void *priv, unsigned int speed, unsigned int mode)
@@ -67,6 +74,8 @@ static int starfive_dwmac_set_mode(struct plat_stmmacenet_data *plat_dat)

	case PHY_INTERFACE_MODE_RGMII:
	case PHY_INTERFACE_MODE_RGMII_ID:
	case PHY_INTERFACE_MODE_RGMII_RXID:
	case PHY_INTERFACE_MODE_RGMII_TXID:
		mode = STARFIVE_DWMAC_PHY_INFT_RGMII;
		break;

@@ -89,6 +98,14 @@ static int starfive_dwmac_set_mode(struct plat_stmmacenet_data *plat_dat)
	if (err)
		return dev_err_probe(dwmac->dev, err, "error setting phy mode\n");

	if (dwmac->data) {
		err = regmap_write(regmap, JH7100_SYSMAIN_REGISTER49_DLYCHAIN,
				   dwmac->data->gtxclk_dlychain);
		if (err)
			return dev_err_probe(dwmac->dev, err,
					     "error selecting gtxclk delay chain\n");
	}

	return 0;
}

@@ -114,6 +131,8 @@ static int starfive_dwmac_probe(struct platform_device *pdev)
	if (!dwmac)
		return -ENOMEM;

	dwmac->data = device_get_match_data(&pdev->dev);

	dwmac->clk_tx = devm_clk_get_enabled(&pdev->dev, "tx");
	if (IS_ERR(dwmac->clk_tx))
		return dev_err_probe(&pdev->dev, PTR_ERR(dwmac->clk_tx),
@@ -144,7 +163,12 @@ static int starfive_dwmac_probe(struct platform_device *pdev)
	return stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);
}

static const struct starfive_dwmac_data jh7100_data = {
	.gtxclk_dlychain = 4,
};

static const struct of_device_id starfive_dwmac_match[] = {
	{ .compatible = "starfive,jh7100-dwmac", .data = &jh7100_data },
	{ .compatible = "starfive,jh7110-dwmac" },
	{ /* sentinel */ }
};