armbian_build/patch/kernel/archive/meson-6.12/0024-net-stmmac-dwmac-meson-Initialize-all-known-PREG_ETH.patch
Dominik Wójt 5b29f4dd4b
meson: kernel update: legacy -> 6.6, current -> 6.12 (#7801)
* Add MXQ target. Copy HDMI fix from odroid-c1.
* meson8, MXQ: add boot from usb support, configurable dtb
* MXQ: remove boot logo
Built-in U-BOOT is used, so the logo will not be displayed anyway.
* meson: kernel update: legacy -> 6.6, current -> 6.12
* Change Odroid C1 and Onecloud to community supported as build now passes
---------
Co-authored-by: Igor Pecovnik <igor@armbian.com>
2025-02-08 23:08:34 +01:00

77 lines
2.5 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Date: Sat, 25 Dec 2021 04:18:30 +0100
Subject: net: stmmac: dwmac-meson: Initialize all known PREG_ETHERNET_ADDR0
bits
Initialize all known PREG_ETHERNET_ADDR0 register bits to be less
dependent on the bootloader to set them up correctly.
Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
---
drivers/net/ethernet/stmicro/stmmac/dwmac-meson.c | 25 ++++++++--
1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-meson.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-meson.c
index 111111111111..222222222222 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-meson.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-meson.c
@@ -5,6 +5,7 @@
* Copyright (C) 2014 Beniamino Galvani <b.galvani@gmail.com>
*/
+#include <linux/bitfield.h>
#include <linux/clk.h>
#include <linux/device.h>
#include <linux/ethtool.h>
@@ -16,10 +17,20 @@
#include "stmmac_platform.h"
-#define PREG_ETHERNET_ADDR0_DIV_EN BIT(0)
+#define PREG_ETHERNET_ADDR0_DIV_EN BIT(0)
/* divides the input clock by 20 (= 0x0) or 2 (= 0x1) */
-#define PREG_ETHERNET_ADDR0_SPEED_100 BIT(1)
+#define PREG_ETHERNET_ADDR0_SPEED_100 BIT(1)
+
+/* 0x0 = little, 0x1 = big */
+#define PREG_ETHERNET_ADDR0_DATA_ENDIANNESS BIT(2)
+
+/* 0x0 = same order, 0x1: unknown */
+#define PREG_ETHERNET_ADDR0_DESC_ENDIANNESS BIT(3)
+
+#define PREG_ETHERNET_ADDR0_MII_MODE GENMASK(6, 4)
+#define PREG_ETHERNET_ADDR0_MII_MODE_RGMII 0x1
+#define PREG_ETHERNET_ADDR0_MII_MODE_RMII 0x4
struct meson_dwmac {
struct device *dev;
@@ -49,6 +60,7 @@ static void meson6_dwmac_fix_mac_speed(void *priv, unsigned int speed, unsigned
static int meson6_dwmac_init(struct platform_device *pdev, void *priv)
{
struct meson_dwmac *dwmac = priv;
+ u32 val;
int ret;
ret = clk_set_rate(dwmac->ethernet_clk, 50 * 1000 * 1000);
@@ -59,7 +71,14 @@ static int meson6_dwmac_init(struct platform_device *pdev, void *priv)
if (ret)
return ret;
- writel(readl(dwmac->reg) | PREG_ETHERNET_ADDR0_DIV_EN, dwmac->reg);
+ val = readl(dwmac->reg);
+ val &= ~PREG_ETHERNET_ADDR0_DATA_ENDIANNESS;
+ val &= ~PREG_ETHERNET_ADDR0_DESC_ENDIANNESS;
+ val &= ~PREG_ETHERNET_ADDR0_MII_MODE;
+ val |= FIELD_PREP(PREG_ETHERNET_ADDR0_MII_MODE,
+ PREG_ETHERNET_ADDR0_MII_MODE_RMII);
+ val |= PREG_ETHERNET_ADDR0_DIV_EN;
+ writel(val, dwmac->reg);
return 0;
}
--
Armbian