* [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
@ 2014-11-09 14:56 Ezequiel Garcia
2014-11-09 14:56 ` [PATCH v3 1/4] ARM: mvebu: Enable PUP register Ezequiel Garcia
` (4 more replies)
0 siblings, 5 replies; 25+ messages in thread
From: Ezequiel Garcia @ 2014-11-09 14:56 UTC (permalink / raw)
To: Thomas Petazzoni, Sebastian Hesselbarth, Sascha Hauer; +Cc: barebox
Very delayed third round of the support for the network controller present
on Marvell Armada 370/XP SoC.
The first patch enables the peripherals in a PUP register, which is required
on RGMII ports.
The second and third patches add support for Marvell's 88E1543 and 88E1545 PHY
chips.
The fourth patch adds the mvneta driver. Most of the configuration part is
based on Linux's mvneta driver, while some of code organization is based
on Barebox's orion-gbe driver.
Changes from v2:
* Included SPI in the PUP register as noted by Sebastian.
* Added MAC flow control configuration. Added missing support
for TX-delayed RGMII (RGMII_TXID) and RX-delayed RGMII.
As per Sebastian's comments.
* Dropped the defconfig patch. mvebu_defconfig should work fine.
Ezequiel Garcia (4):
ARM: mvebu: Enable PUP register
net: phy: Support Marvell 88EE1545 PHY
net: phy: Support Marvell 88EE1543 PHY
net: Add driver for Armada 370/XP 10/100/1000 Mbps network controller
arch/arm/mach-mvebu/armada-370-xp.c | 5 +
.../mach-mvebu/include/mach/armada-370-xp-regs.h | 7 +
drivers/net/Kconfig | 6 +
drivers/net/Makefile | 1 +
drivers/net/mvneta.c | 766 +++++++++++++++++++++
drivers/net/phy/marvell.c | 67 ++
include/linux/marvell_phy.h | 2 +
7 files changed, 854 insertions(+)
create mode 100644 drivers/net/mvneta.c
--
2.1.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v3 1/4] ARM: mvebu: Enable PUP register
2014-11-09 14:56 [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP Ezequiel Garcia
@ 2014-11-09 14:56 ` Ezequiel Garcia
2014-11-09 14:56 ` [PATCH v3 2/4] net: phy: Support Marvell 88EE1545 PHY Ezequiel Garcia
` (3 subsequent siblings)
4 siblings, 0 replies; 25+ messages in thread
From: Ezequiel Garcia @ 2014-11-09 14:56 UTC (permalink / raw)
To: Thomas Petazzoni, Sebastian Hesselbarth, Sascha Hauer; +Cc: barebox
As reported by Sebastian, we need to enable this explicitly for the
Tx clock on RGMII. While here, let's enable all the other peripherals.
Although this is documented to be required only for Armada XP SoC,
it has been found to be harmless on Armada 370, so we do it unconditionally
to simplify the code.
Reported-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Acked-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
arch/arm/mach-mvebu/armada-370-xp.c | 5 +++++
arch/arm/mach-mvebu/include/mach/armada-370-xp-regs.h | 7 +++++++
2 files changed, 12 insertions(+)
diff --git a/arch/arm/mach-mvebu/armada-370-xp.c b/arch/arm/mach-mvebu/armada-370-xp.c
index 57f6a5f..244f8cd 100644
--- a/arch/arm/mach-mvebu/armada-370-xp.c
+++ b/arch/arm/mach-mvebu/armada-370-xp.c
@@ -74,6 +74,11 @@ static int armada_370_xp_init_soc(struct device_node *root, void *context)
mvebu_set_memory(phys_base, phys_size);
+ /* Enable peripherals PUP */
+ reg = readl(ARMADA_XP_PUP_ENABLE_BASE);
+ reg |= GE0_PUP_EN | GE1_PUP_EN | LCD_PUP_EN | NAND_PUP_EN | SPI_PUP_EN;
+ writel(reg, ARMADA_XP_PUP_ENABLE_BASE);
+
return 0;
}
diff --git a/arch/arm/mach-mvebu/include/mach/armada-370-xp-regs.h b/arch/arm/mach-mvebu/include/mach/armada-370-xp-regs.h
index ccc687c..bac27e5 100644
--- a/arch/arm/mach-mvebu/include/mach/armada-370-xp-regs.h
+++ b/arch/arm/mach-mvebu/include/mach/armada-370-xp-regs.h
@@ -30,6 +30,13 @@
#define SAR_TCLK_FREQ BIT(20)
#define SAR_HIGH 0x04
+#define ARMADA_XP_PUP_ENABLE_BASE (ARMADA_370_XP_INT_REGS_BASE + 0x1864c)
+#define GE0_PUP_EN BIT(0)
+#define GE1_PUP_EN BIT(1)
+#define LCD_PUP_EN BIT(2)
+#define NAND_PUP_EN BIT(4)
+#define SPI_PUP_EN BIT(5)
+
#define ARMADA_370_XP_SDRAM_BASE (ARMADA_370_XP_INT_REGS_BASE + 0x20000)
#define DDR_BASE_CS 0x180
#define DDR_BASE_CSn(n) (DDR_BASE_CS + ((n) * 0x8))
--
2.1.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v3 2/4] net: phy: Support Marvell 88EE1545 PHY
2014-11-09 14:56 [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP Ezequiel Garcia
2014-11-09 14:56 ` [PATCH v3 1/4] ARM: mvebu: Enable PUP register Ezequiel Garcia
@ 2014-11-09 14:56 ` Ezequiel Garcia
2014-11-09 14:56 ` [PATCH v3 3/4] net: phy: Support Marvell 88EE1543 PHY Ezequiel Garcia
` (2 subsequent siblings)
4 siblings, 0 replies; 25+ messages in thread
From: Ezequiel Garcia @ 2014-11-09 14:56 UTC (permalink / raw)
To: Thomas Petazzoni, Sebastian Hesselbarth, Sascha Hauer; +Cc: barebox
This commit adds support for Marvell's 88E1545 PHY chip. In particular, this
allows to support QSGMII interfaces.
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
drivers/net/phy/marvell.c | 58 +++++++++++++++++++++++++++++++++++++++++++++
include/linux/marvell_phy.h | 1 +
2 files changed, 59 insertions(+)
diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
index f2bc649..3ea72e2 100644
--- a/drivers/net/phy/marvell.c
+++ b/drivers/net/phy/marvell.c
@@ -35,6 +35,13 @@
#define MII_88E1121_PHY_MSCR_DELAY_MASK \
(MII_88E1121_PHY_MSCR_RX_DELAY | MII_88E1121_PHY_MSCR_TX_DELAY)
+#define MII_88E1540_LED_PAGE 0x3
+#define MII_88E1540_LED_CONTROL 0x10
+
+#define MII_88E1540_QSGMII_PAGE 0x4
+#define MII_88E1540_QSGMII_CONTROL 0x0
+#define MII_88E1540_QSGMII_AUTONEG_EN BIT(12)
+
/*
* marvell_read_status
*
@@ -123,6 +130,48 @@ static int marvell_read_status(struct phy_device *phydev)
return 0;
}
+static int m88e1540_config_init(struct phy_device *phydev)
+{
+ u16 reg;
+ int ret;
+
+ /* Configure QSGMII auto-negotiation */
+ if (phydev->interface == PHY_INTERFACE_MODE_QSGMII) {
+ ret = phy_write(phydev, MII_MARVELL_PHY_PAGE,
+ MII_88E1540_QSGMII_PAGE);
+ if (ret < 0)
+ return ret;
+
+ reg = phy_read(phydev, MII_88E1540_QSGMII_CONTROL);
+ ret = phy_write(phydev, MII_88E1540_QSGMII_CONTROL,
+ reg | MII_88E1540_QSGMII_AUTONEG_EN);
+ if (ret < 0)
+ return ret;
+ }
+
+ /* Configure LED as:
+ * Activity: Blink
+ * Link: On
+ * No Link: Off
+ */
+ phy_write(phydev, MII_MARVELL_PHY_PAGE, MII_88E1540_LED_PAGE);
+ phy_write(phydev, MII_88E1540_LED_CONTROL, 0x1111);
+
+ /* Power-up the PHY. When going from power down to normal operation,
+ * software reset and auto-negotiation restart are also performed.
+ */
+ ret = phy_write(phydev, MII_MARVELL_PHY_PAGE,
+ MII_MARVELL_PHY_DEFAULT_PAGE);
+ if (ret < 0)
+ return ret;
+ ret = phy_write(phydev, MII_BMCR,
+ phy_read(phydev, MII_BMCR) & ~BMCR_PDOWN);
+ if (ret < 0)
+ return ret;
+
+ return 0;
+}
+
static int m88e1121_config_init(struct phy_device *phydev)
{
u16 reg;
@@ -175,6 +224,15 @@ static struct phy_driver marvell_phys[] = {
.config_aneg = genphy_config_aneg,
.read_status = marvell_read_status,
},
+{
+ .phy_id = MARVELL_PHY_ID_88E1545,
+ .phy_id_mask = MARVELL_PHY_ID_MASK,
+ .drv.name = "Marvell 88E1545",
+ .features = PHY_GBIT_FEATURES,
+ .config_init = m88e1540_config_init,
+ .config_aneg = genphy_config_aneg,
+ .read_status = marvell_read_status,
+},
};
static int __init marvell_phy_init(void)
diff --git a/include/linux/marvell_phy.h b/include/linux/marvell_phy.h
index bf2c66a..deb75bf 100644
--- a/include/linux/marvell_phy.h
+++ b/include/linux/marvell_phy.h
@@ -27,6 +27,7 @@
#define MARVELL_PHY_ID_88E1318S 0x01410e90
#define MARVELL_PHY_ID_88E1116R 0x01410e40
#define MARVELL_PHY_ID_88E1510 0x01410dd0
+#define MARVELL_PHY_ID_88E1545 0x01410eb0
/* Mask used for ID comparisons */
#define MARVELL_PHY_ID_MASK 0xfffffff0
--
2.1.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v3 3/4] net: phy: Support Marvell 88EE1543 PHY
2014-11-09 14:56 [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP Ezequiel Garcia
2014-11-09 14:56 ` [PATCH v3 1/4] ARM: mvebu: Enable PUP register Ezequiel Garcia
2014-11-09 14:56 ` [PATCH v3 2/4] net: phy: Support Marvell 88EE1545 PHY Ezequiel Garcia
@ 2014-11-09 14:56 ` Ezequiel Garcia
2014-11-10 6:57 ` Sascha Hauer
2014-11-09 14:56 ` [PATCH v3 4/4] net: Add driver for Armada 370/XP 10/100/1000 Mbps network controller Ezequiel Garcia
2014-11-10 8:06 ` [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP Uwe Kleine-König
4 siblings, 1 reply; 25+ messages in thread
From: Ezequiel Garcia @ 2014-11-09 14:56 UTC (permalink / raw)
To: Thomas Petazzoni, Sebastian Hesselbarth, Sascha Hauer; +Cc: barebox
This commit adds support for Marvell's 88E1543 PHY chip. This chip is
almost identical to the 88EE1545, except the 88E1545 supports QSGMII
and the 88EE1543 supports SGMII.
Therefore, the same configuration function is used for both PHYs. For now,
the only initialization provided for the 88EE1543 is the LED setup.
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
drivers/net/phy/marvell.c | 9 +++++++++
include/linux/marvell_phy.h | 1 +
2 files changed, 10 insertions(+)
diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
index 3ea72e2..3248b48 100644
--- a/drivers/net/phy/marvell.c
+++ b/drivers/net/phy/marvell.c
@@ -233,6 +233,15 @@ static struct phy_driver marvell_phys[] = {
.config_aneg = genphy_config_aneg,
.read_status = marvell_read_status,
},
+{
+ .phy_id = MARVELL_PHY_ID_88E1543,
+ .phy_id_mask = MARVELL_PHY_ID_MASK,
+ .drv.name = "Marvell 88E1543",
+ .features = PHY_GBIT_FEATURES,
+ .config_init = m88e1540_config_init,
+ .config_aneg = genphy_config_aneg,
+ .read_status = marvell_read_status,
+},
};
static int __init marvell_phy_init(void)
diff --git a/include/linux/marvell_phy.h b/include/linux/marvell_phy.h
index deb75bf..b7baae1 100644
--- a/include/linux/marvell_phy.h
+++ b/include/linux/marvell_phy.h
@@ -27,6 +27,7 @@
#define MARVELL_PHY_ID_88E1318S 0x01410e90
#define MARVELL_PHY_ID_88E1116R 0x01410e40
#define MARVELL_PHY_ID_88E1510 0x01410dd0
+#define MARVELL_PHY_ID_88E1543 0x01410ea0
#define MARVELL_PHY_ID_88E1545 0x01410eb0
/* Mask used for ID comparisons */
--
2.1.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH v3 4/4] net: Add driver for Armada 370/XP 10/100/1000 Mbps network controller
2014-11-09 14:56 [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP Ezequiel Garcia
` (2 preceding siblings ...)
2014-11-09 14:56 ` [PATCH v3 3/4] net: phy: Support Marvell 88EE1543 PHY Ezequiel Garcia
@ 2014-11-09 14:56 ` Ezequiel Garcia
2014-11-10 8:06 ` [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP Uwe Kleine-König
4 siblings, 0 replies; 25+ messages in thread
From: Ezequiel Garcia @ 2014-11-09 14:56 UTC (permalink / raw)
To: Thomas Petazzoni, Sebastian Hesselbarth, Sascha Hauer; +Cc: barebox
This patch introduces the mvneta driver to support the network controller
found in Armada 370/XP SoCs.
Tested-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
---
drivers/net/Kconfig | 6 +
drivers/net/Makefile | 1 +
drivers/net/mvneta.c | 766 +++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 773 insertions(+)
create mode 100644 drivers/net/mvneta.c
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index 24b9844..724507f 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -137,6 +137,12 @@ config DRIVER_NET_MPC5200
depends on ARCH_MPC5200
select PHYLIB
+config DRIVER_NET_MVNETA
+ bool "Marvell NETA"
+ depends on ARCH_MVEBU
+ select PHYLIB
+ select MDIO_MVEBU
+
config DRIVER_NET_NETX
bool "Hilscher Netx ethernet driver"
depends on HAS_NETX_ETHER
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
index 3e66b31..75a70be 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -19,6 +19,7 @@ obj-$(CONFIG_DRIVER_NET_KS8851_MLL) += ks8851_mll.o
obj-$(CONFIG_DRIVER_NET_MACB) += macb.o
obj-$(CONFIG_DRIVER_NET_MICREL) += ksz8864rmn.o
obj-$(CONFIG_DRIVER_NET_MPC5200) += fec_mpc5200.o
+obj-$(CONFIG_DRIVER_NET_MVNETA) += mvneta.o
obj-$(CONFIG_DRIVER_NET_NETX) += netx_eth.o
obj-$(CONFIG_DRIVER_NET_ORION) += orion-gbe.o
obj-$(CONFIG_DRIVER_NET_RTL8139) += rtl8139.o
diff --git a/drivers/net/mvneta.c b/drivers/net/mvneta.c
new file mode 100644
index 0000000..7734cf8
--- /dev/null
+++ b/drivers/net/mvneta.c
@@ -0,0 +1,766 @@
+/*
+ * (C) Copyright 2014 - Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
+ *
+ * based on mvneta driver from linux
+ * (C) Copyright 2012 Marvell
+ * Rami Rosen <rosenr@marvell.com>
+ * Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+ *
+ * based on orion-gbe driver from barebox
+ * (C) Copyright 2014
+ * Pengutronix, Michael Grzeschik <mgr@pengutronix.de>
+ * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
+
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <common.h>
+#include <init.h>
+#include <io.h>
+#include <net.h>
+#include <of_net.h>
+#include <sizes.h>
+#include <asm/mmu.h>
+#include <linux/clk.h>
+#include <linux/err.h>
+#include <linux/mbus.h>
+
+/* Registers */
+
+/* Rx queue */
+#define MVNETA_RXQ_CONFIG_REG(q) (0x1400 + ((q) << 2))
+#define MVNETA_RXQ_PKT_OFFSET_ALL_MASK (0xf << 8)
+#define MVNETA_RXQ_PKT_OFFSET_MASK(offs) ((offs) << 8)
+#define MVNETA_RXQ_THRESHOLD_REG(q) (0x14c0 + ((q) << 2))
+#define MVNETA_RXQ_NON_OCCUPIED(v) ((v) << 16)
+#define MVNETA_RXQ_BASE_ADDR_REG(q) (0x1480 + ((q) << 2))
+#define MVNETA_RXQ_SIZE_REG(q) (0x14a0 + ((q) << 2))
+#define MVNETA_RXQ_BUF_SIZE_SHIFT 19
+#define MVNETA_RXQ_BUF_SIZE_MASK (0x1fff << 19)
+#define MVNETA_RXQ_STATUS_REG(q) (0x14e0 + ((q) << 2))
+#define MVNETA_RXQ_OCCUPIED_ALL_MASK 0x3fff
+#define MVNETA_RXQ_STATUS_UPDATE_REG(q) (0x1500 + ((q) << 2))
+#define MVNETA_RXQ_ADD_NON_OCCUPIED_SHIFT 16
+#define MVNETA_RXQ_ADD_NON_OCCUPIED_MAX 255
+
+#define MVNETA_PORT_RX_RESET 0x1cc0
+#define MVNETA_MBUS_RETRY 0x2010
+#define MVNETA_UNIT_INTR_CAUSE 0x2080
+#define MVNETA_UNIT_CONTROL 0x20B0
+#define MVNETA_WIN_BASE(w) (0x2200 + ((w) << 3))
+#define MVNETA_WIN_SIZE(w) (0x2204 + ((w) << 3))
+#define MVNETA_WIN_REMAP(w) (0x2280 + ((w) << 2))
+#define MVNETA_BASE_ADDR_ENABLE 0x2290
+#define MVNETA_PORT_CONFIG 0x2400
+#define MVNETA_DEF_RXQ(q) ((q) << 1)
+#define MVNETA_DEF_RXQ_ARP(q) ((q) << 4)
+#define MVNETA_TX_UNSET_ERR_SUM BIT(12)
+#define MVNETA_DEF_RXQ_TCP(q) ((q) << 16)
+#define MVNETA_DEF_RXQ_UDP(q) ((q) << 19)
+#define MVNETA_DEF_RXQ_BPDU(q) ((q) << 22)
+#define MVNETA_RX_CSUM_WITH_PSEUDO_HDR BIT(25)
+#define MVNETA_PORT_CONFIG_DEFL_VALUE(q) (MVNETA_DEF_RXQ(q) | \
+ MVNETA_DEF_RXQ_ARP(q) | \
+ MVNETA_DEF_RXQ_TCP(q) | \
+ MVNETA_DEF_RXQ_UDP(q) | \
+ MVNETA_DEF_RXQ_BPDU(q) | \
+ MVNETA_TX_UNSET_ERR_SUM | \
+ MVNETA_RX_CSUM_WITH_PSEUDO_HDR)
+#define MVNETA_PORT_CONFIG_EXTEND 0x2404
+#define MVNETA_MAC_ADDR_LOW 0x2414
+#define MVNETA_MAC_ADDR_HIGH 0x2418
+#define MVNETA_SDMA_CONFIG 0x241c
+#define MVNETA_SDMA_BRST_SIZE_16 4
+#define MVNETA_RX_BRST_SZ_MASK(burst) ((burst) << 1)
+#define MVNETA_RX_NO_DATA_SWAP BIT(4)
+#define MVNETA_TX_NO_DATA_SWAP BIT(5)
+#define MVNETA_DESC_SWAP BIT(6)
+#define MVNETA_TX_BRST_SZ_MASK(burst) ((burst) << 22)
+#define MVNETA_RX_MIN_FRAME_SIZE 0x247c
+#define MVNETA_SERDES_CFG 0x24a0
+#define MVNETA_SGMII_SERDES 0x0cc7
+#define MVNETA_QSGMII_SERDES 0x0667
+#define MVNETA_TYPE_PRIO 0x24bc
+#define MVNETA_TXQ_CMD_1 0x24e4
+#define MVNETA_TXQ_CMD 0x2448
+#define MVNETA_TXQ_DISABLE_SHIFT 8
+#define MVNETA_TXQ_ENABLE_MASK 0x000000ff
+#define MVNETA_ACC_MODE 0x2500
+#define MVNETA_CPU_MAP(cpu) (0x2540 + ((cpu) << 2))
+
+#define MVNETA_INTR_NEW_CAUSE 0x25a0
+#define MVNETA_INTR_NEW_MASK 0x25a4
+#define MVNETA_INTR_OLD_CAUSE 0x25a8
+#define MVNETA_INTR_OLD_MASK 0x25ac
+#define MVNETA_INTR_MISC_CAUSE 0x25b0
+#define MVNETA_INTR_MISC_MASK 0x25b4
+#define MVNETA_INTR_ENABLE 0x25b8
+
+#define MVNETA_RXQ_CMD 0x2680
+#define MVNETA_RXQ_DISABLE_SHIFT 8
+#define MVNETA_RXQ_ENABLE_MASK 0x000000ff
+#define MVETH_TXQ_TOKEN_COUNT_REG(q) (0x2700 + ((q) << 4))
+#define MVETH_TXQ_TOKEN_CFG_REG(q) (0x2704 + ((q) << 4))
+#define MVNETA_GMAC_CTRL_0 0x2c00
+#define MVNETA_GMAC_CTRL_2 0x2c08
+#define MVNETA_GMAC2_PCS_ENABLE BIT(3)
+#define MVNETA_GMAC2_PORT_RGMII BIT(4)
+#define MVNETA_GMAC2_PORT_RESET BIT(6)
+#define MVNETA_GMAC_AUTONEG_CONFIG 0x2c0c
+#define MVNETA_GMAC_FORCE_LINK_DOWN BIT(0)
+#define MVNETA_GMAC_FORCE_LINK_PASS BIT(1)
+#define MVNETA_GMAC_CONFIG_MII_SPEED BIT(5)
+#define MVNETA_GMAC_CONFIG_GMII_SPEED BIT(6)
+#define MVNETA_GMAC_AN_SPEED_EN BIT(7)
+#define MVNETA_GMAC_CONFIG_FLOWCTRL BIT(8)
+#define MVNETA_GMAC_CONFIG_FULL_DUPLEX BIT(12)
+#define MVNETA_GMAC_AN_FLOWCTRL_EN BIT(11)
+#define MVNETA_GMAC_AN_DUPLEX_EN BIT(13)
+#define MVNETA_MIB_COUNTERS_BASE 0x3080
+#define MVNETA_MIB_LATE_COLLISION 0x7c
+#define MVNETA_DA_FILT_SPEC_MCAST 0x3400
+#define MVNETA_DA_FILT_OTH_MCAST 0x3500
+#define MVNETA_DA_FILT_UCAST_BASE 0x3600
+#define MVNETA_TXQ_BASE_ADDR_REG(q) (0x3c00 + ((q) << 2))
+#define MVNETA_TXQ_SIZE_REG(q) (0x3c20 + ((q) << 2))
+#define MVNETA_TXQ_UPDATE_REG(q) (0x3c60 + ((q) << 2))
+#define MVNETA_TXQ_DEC_SENT_SHIFT 16
+#define MVNETA_TXQ_STATUS_REG(q) (0x3c40 + ((q) << 2))
+#define MVNETA_PORT_TX_RESET 0x3cf0
+#define MVNETA_TX_MTU 0x3e0c
+#define MVNETA_TX_TOKEN_SIZE 0x3e14
+#define MVNETA_TXQ_TOKEN_SIZE_REG(q) (0x3e40 + ((q) << 2))
+
+/* The mvneta_tx_desc and mvneta_rx_desc structures describe the
+ * layout of the transmit and reception DMA descriptors, and their
+ * layout is therefore defined by the hardware design
+ */
+
+#define MVNETA_TX_L3_OFF_SHIFT 0
+#define MVNETA_TX_IP_HLEN_SHIFT 8
+#define MVNETA_TX_L4_UDP BIT(16)
+#define MVNETA_TX_L3_IP6 BIT(17)
+#define MVNETA_TXD_IP_CSUM BIT(18)
+#define MVNETA_TXD_Z_PAD BIT(19)
+#define MVNETA_TXD_L_DESC BIT(20)
+#define MVNETA_TXD_F_DESC BIT(21)
+#define MVNETA_TXD_FLZ_DESC (MVNETA_TXD_Z_PAD | \
+ MVNETA_TXD_L_DESC | \
+ MVNETA_TXD_F_DESC)
+#define MVNETA_TX_L4_CSUM_FULL BIT(30)
+#define MVNETA_TX_L4_CSUM_NOT BIT(31)
+
+#define MVNETA_TXD_ERROR BIT(0)
+#define TXD_ERROR_MASK 0x6
+#define TXD_ERROR_SHIFT 1
+
+#define MVNETA_RXD_ERR_CRC 0x0
+#define MVNETA_RXD_ERR_SUMMARY BIT(16)
+#define MVNETA_RXD_ERR_OVERRUN BIT(17)
+#define MVNETA_RXD_ERR_LEN BIT(18)
+#define MVNETA_RXD_ERR_RESOURCE (BIT(17) | BIT(18))
+#define MVNETA_RXD_ERR_CODE_MASK (BIT(17) | BIT(18))
+#define MVNETA_RXD_L3_IP4 BIT(25)
+#define MVNETA_RXD_FIRST_LAST_DESC (BIT(26) | BIT(27))
+#define MVNETA_RXD_L4_CSUM_OK BIT(30)
+
+#define MVNETA_MH_SIZE 2
+#define TXQ_NUM 8
+#define RX_RING_SIZE 4
+#define TRANSFER_TIMEOUT (10 * MSECOND)
+
+struct rxdesc {
+ u32 cmd_sts; /* Info about received packet */
+ u16 reserved1; /* pnc_info - (for future use, PnC) */
+ u16 data_size; /* Size of received packet in bytes */
+
+ u32 buf_phys_addr; /* Physical address of the buffer */
+ u32 reserved2; /* pnc_flow_id (for future use, PnC) */
+
+ u32 buf_cookie; /* cookie for access to RX buffer in rx path */
+ u16 reserved3; /* prefetch_cmd, for future use */
+ u16 reserved4; /* csum_l4 - (for future use, PnC) */
+
+ u32 reserved5; /* pnc_extra PnC (for future use, PnC) */
+ u32 reserved6; /* hw_cmd (for future use, PnC and HWF) */
+};
+
+struct txdesc {
+ u32 cmd_sts; /* Options used by HW for packet transmitting.*/
+ u16 reserverd1; /* csum_l4 (for future use) */
+ u16 byte_cnt; /* Data size of transmitted packet in bytes */
+ u32 buf_ptr; /* Physical addr of transmitted buffer */
+ u8 error; /* */
+ u8 reserved2; /* Reserved - (for future use) */
+ u16 reserved3; /* Reserved - (for future use) */
+ u32 reserved4[4]; /* Reserved - (for future use) */
+};
+
+struct mvneta_port {
+ void __iomem *reg;
+ struct device_d dev;
+ struct eth_device edev;
+ struct clk *clk;
+
+ struct txdesc *txdesc;
+ struct rxdesc *rxdesc;
+ int curr_rxdesc;
+ u8 *rxbuf;
+ phy_interface_t intf;
+};
+
+static void mvneta_conf_mbus_windows(struct mvneta_port *priv)
+{
+ const struct mbus_dram_target_info *dram = mvebu_mbus_dram_info();
+ u32 win_enable, win_protect;
+ int i;
+
+ for (i = 0; i < 6; i++) {
+ writel(0, priv->reg + MVNETA_WIN_BASE(i));
+ writel(0, priv->reg + MVNETA_WIN_SIZE(i));
+
+ if (i < 4)
+ writel(0, priv->reg + MVNETA_WIN_REMAP(i));
+ }
+
+ win_enable = 0x3f;
+ win_protect = 0;
+
+ for (i = 0; i < dram->num_cs; i++) {
+ const struct mbus_dram_window *cs = dram->cs + i;
+
+ writel((cs->base & 0xffff0000) |
+ (cs->mbus_attr << 8) |
+ dram->mbus_dram_target_id,
+ priv->reg + MVNETA_WIN_BASE(i));
+
+ writel((cs->size - 1) & 0xffff0000,
+ priv->reg + MVNETA_WIN_SIZE(i));
+
+ win_enable &= ~(1 << i);
+ win_protect |= 3 << (2 * i);
+ }
+
+ writel(win_enable, priv->reg + MVNETA_BASE_ADDR_ENABLE);
+}
+
+static void mvneta_clear_mcast_table(struct mvneta_port *priv)
+{
+ int offset;
+
+ for (offset = 0; offset <= 0xfc; offset += 4) {
+ writel(0, priv->reg + MVNETA_DA_FILT_UCAST_BASE + offset);
+ writel(0, priv->reg + MVNETA_DA_FILT_SPEC_MCAST + offset);
+ writel(0, priv->reg + MVNETA_DA_FILT_OTH_MCAST + offset);
+ }
+}
+
+/* Set unicast address */
+static void mvneta_set_ucast_addr(struct mvneta_port *priv, u8 last_nibble)
+{
+ unsigned int tbl_offset, reg_offset;
+ int queue = 0;
+ u32 val;
+
+ /* Locate the Unicast table entry */
+ last_nibble = (0xf & last_nibble);
+
+ /* offset from unicast tbl base */
+ tbl_offset = (last_nibble / 4) * 4;
+
+ /* offset within the above reg */
+ reg_offset = last_nibble % 4;
+
+ val = readl(priv->reg + MVNETA_DA_FILT_UCAST_BASE + tbl_offset);
+
+ val &= ~(0xff << (8 * reg_offset));
+ val |= ((0x01 | (queue << 1)) << (8 * reg_offset));
+
+ writel(val, priv->reg + MVNETA_DA_FILT_UCAST_BASE + tbl_offset);
+}
+
+static void mvneta_clear_ucast_addr(struct mvneta_port *priv, u8 last_nibble)
+{
+ unsigned int tbl_offset, reg_offset;
+ u32 val;
+
+ /* Locate the Unicast table entry */
+ last_nibble = (0xf & last_nibble);
+
+ /* offset from unicast tbl base */
+ tbl_offset = (last_nibble / 4) * 4;
+
+ /* offset within the above reg */
+ reg_offset = last_nibble % 4;
+
+ val = readl(priv->reg + MVNETA_DA_FILT_UCAST_BASE + tbl_offset);
+
+ /* Clear accepts frame bit at specified unicast DA tbl entry */
+ val &= ~(0xff << (8 * reg_offset));
+
+ writel(val, priv->reg + MVNETA_DA_FILT_UCAST_BASE + tbl_offset);
+}
+
+static void mvneta_rx_unicast_promisc_clear(struct mvneta_port *priv)
+{
+ u32 portcfg, val;
+
+ portcfg = readl(priv->reg + MVNETA_PORT_CONFIG);
+ val = readl(priv->reg + MVNETA_TYPE_PRIO);
+
+ /* Reject all Unicast addresses */
+ writel(portcfg & ~BIT(0), priv->reg + MVNETA_PORT_CONFIG);
+ writel(val & ~BIT(21), priv->reg + MVNETA_TYPE_PRIO);
+}
+
+/* Clear all MIB counters */
+static void mvneta_mib_counters_clear(struct mvneta_port *priv)
+{
+ int i;
+
+ /* Perform dummy reads from MIB counters */
+ for (i = 0; i < MVNETA_MIB_LATE_COLLISION; i += 4)
+ readl(priv->reg + MVNETA_MIB_COUNTERS_BASE + i);
+}
+
+static int mvneta_pending_tx(struct mvneta_port *priv)
+{
+ u32 val = readl(priv->reg + MVNETA_TXQ_STATUS_REG(0));
+
+ return val & 0x3fff;
+}
+
+static int mvneta_pending_rx(struct mvneta_port *priv)
+{
+ u32 val = readl(priv->reg + MVNETA_RXQ_STATUS_REG(0));
+
+ return val & 0x3fff;
+}
+
+static void mvneta_port_stop(struct mvneta_port *priv)
+{
+ u32 val;
+
+ /* Stop all queues */
+ writel(0xff << MVNETA_RXQ_DISABLE_SHIFT, priv->reg + MVNETA_RXQ_CMD);
+ writel(0xff << MVNETA_TXQ_DISABLE_SHIFT, priv->reg + MVNETA_TXQ_CMD);
+
+ /* Reset Tx */
+ writel(BIT(0), priv->reg + MVNETA_PORT_TX_RESET);
+ writel(0, priv->reg + MVNETA_PORT_TX_RESET);
+
+ /* Reset Rx */
+ writel(BIT(0), priv->reg + MVNETA_PORT_RX_RESET);
+ writel(0, priv->reg + MVNETA_PORT_RX_RESET);
+
+ /* Disable port 0 */
+ val = readl(priv->reg + MVNETA_GMAC_CTRL_0);
+ writel(val & ~BIT(0), priv->reg + MVNETA_GMAC_CTRL_0);
+ udelay(200);
+
+ /* Clear all Cause registers */
+ writel(0, priv->reg + MVNETA_INTR_NEW_CAUSE);
+ writel(0, priv->reg + MVNETA_INTR_OLD_CAUSE);
+ writel(0, priv->reg + MVNETA_INTR_MISC_CAUSE);
+ writel(0, priv->reg + MVNETA_UNIT_INTR_CAUSE);
+
+ /* Mask all interrupts */
+ writel(0, priv->reg + MVNETA_INTR_NEW_MASK);
+ writel(0, priv->reg + MVNETA_INTR_OLD_MASK);
+ writel(0, priv->reg + MVNETA_INTR_MISC_MASK);
+ writel(0, priv->reg + MVNETA_INTR_ENABLE);
+}
+
+static void mvneta_halt(struct eth_device *edev)
+{
+ mvneta_port_stop((struct mvneta_port *)edev->priv);
+}
+
+static int mvneta_send(struct eth_device *edev, void *data, int len)
+{
+ struct mvneta_port *priv = edev->priv;
+ struct txdesc *txdesc = priv->txdesc;
+ int ret, error, last_desc;
+
+ /* Flush transmit data */
+ dma_flush_range((unsigned long)data, (unsigned long)data+len);
+
+ /* Fill the Tx descriptor */
+ txdesc->cmd_sts |= MVNETA_TX_L4_CSUM_NOT | MVNETA_TXD_FLZ_DESC;
+ txdesc->buf_ptr = (u32)data;
+ txdesc->byte_cnt = len;
+
+ /* Increase the number of prepared descriptors (one), by writing
+ * to the 'NoOfWrittenDescriptors' field in the PTXSU register.
+ */
+ writel(1, priv->reg + MVNETA_TXQ_UPDATE_REG(0));
+
+ /* The controller updates the number of transmitted descriptors in
+ * the Tx port status register (PTXS).
+ */
+ ret = wait_on_timeout(TRANSFER_TIMEOUT, !mvneta_pending_tx(priv));
+ if (ret) {
+ dev_err(&edev->dev, "transmit timeout\n");
+ return ret;
+ }
+
+ last_desc = readl(&txdesc->cmd_sts) & MVNETA_TXD_L_DESC;
+ error = readl(&txdesc->error);
+ if (last_desc && error & MVNETA_TXD_ERROR) {
+ dev_err(&edev->dev, "transmit error %d\n",
+ (error & TXD_ERROR_MASK) >> TXD_ERROR_SHIFT);
+ return -EIO;
+ }
+
+ /* Release the transmitted descriptor by writing to the
+ * 'NoOfReleasedBuffers' field in the PTXSU register.
+ */
+ writel(1 << MVNETA_TXQ_DEC_SENT_SHIFT,
+ priv->reg + MVNETA_TXQ_UPDATE_REG(0));
+
+ return 0;
+}
+
+static int mvneta_recv(struct eth_device *edev)
+{
+ struct mvneta_port *priv = edev->priv;
+ struct rxdesc *rxdesc = &priv->rxdesc[priv->curr_rxdesc];
+ int ret, pending;
+ u32 cmd_sts;
+
+ /* wait for received packet */
+ pending = mvneta_pending_rx(priv);
+ if (!pending)
+ return 0;
+
+ /* drop malicious packets */
+ cmd_sts = readl(&rxdesc->cmd_sts);
+ if ((cmd_sts & MVNETA_RXD_FIRST_LAST_DESC) !=
+ MVNETA_RXD_FIRST_LAST_DESC) {
+ dev_err(&edev->dev, "rx packet spread on multiple descriptors\n");
+ ret = -EIO;
+ goto recv_err;
+ }
+
+ if (cmd_sts & MVNETA_RXD_ERR_SUMMARY) {
+ dev_err(&edev->dev, "receive error\n");
+ ret = -EIO;
+ goto recv_err;
+ }
+
+ /* invalidate current receive buffer */
+ dma_inv_range((unsigned long)rxdesc->buf_phys_addr,
+ (unsigned long)rxdesc->buf_phys_addr +
+ ALIGN(PKTSIZE, 8));
+
+ /* received packet is padded with two null bytes (Marvell header) */
+ net_receive(edev, (void *)(rxdesc->buf_phys_addr + MVNETA_MH_SIZE),
+ rxdesc->data_size - MVNETA_MH_SIZE);
+ ret = 0;
+
+recv_err:
+ /* reset this and get next rx descriptor*/
+ rxdesc->data_size = 0;
+ rxdesc->cmd_sts = 0;
+
+ priv->curr_rxdesc++;
+ if (priv->curr_rxdesc == RX_RING_SIZE)
+ priv->curr_rxdesc = 0;
+
+ /* Descriptor processed and refilled */
+ writel(1 | 1 << MVNETA_RXQ_ADD_NON_OCCUPIED_SHIFT,
+ priv->reg + MVNETA_RXQ_STATUS_UPDATE_REG(0));
+ return ret;
+}
+
+static int mvneta_set_ethaddr(struct eth_device *edev, unsigned char *mac)
+{
+ struct mvneta_port *priv = edev->priv;
+ u32 mac_h = (mac[0] << 24) | (mac[1] << 16) | (mac[2] << 8) | mac[3];
+ u32 mac_l = (mac[4] << 8) | mac[5];
+
+ mvneta_clear_ucast_addr(priv, mac[5]);
+
+ writel(mac_l, priv->reg + MVNETA_MAC_ADDR_LOW);
+ writel(mac_h, priv->reg + MVNETA_MAC_ADDR_HIGH);
+
+ /* accept frames for this address */
+ mvneta_set_ucast_addr(priv, mac[5]);
+
+ return 0;
+}
+
+static int mvneta_get_ethaddr(struct eth_device *edev, unsigned char *mac)
+{
+ struct mvneta_port *priv = edev->priv;
+ u32 mac_l = readl(priv->reg + MVNETA_MAC_ADDR_LOW);
+ u32 mac_h = readl(priv->reg + MVNETA_MAC_ADDR_HIGH);
+
+ mac[0] = (mac_h >> 24) & 0xff;
+ mac[1] = (mac_h >> 16) & 0xff;
+ mac[2] = (mac_h >> 8) & 0xff;
+ mac[3] = mac_h & 0xff;
+ mac[4] = (mac_l >> 8) & 0xff;
+ mac[5] = mac_l & 0xff;
+
+ return 0;
+}
+
+static void mvneta_adjust_link(struct eth_device *edev)
+{
+ struct mvneta_port *priv = edev->priv;
+ struct phy_device *phy = edev->phydev;
+ u32 val;
+
+ if (!phy->link)
+ return;
+
+ val = readl(priv->reg + MVNETA_GMAC_AUTONEG_CONFIG);
+ val &= ~(MVNETA_GMAC_CONFIG_MII_SPEED |
+ MVNETA_GMAC_CONFIG_GMII_SPEED |
+ MVNETA_GMAC_CONFIG_FULL_DUPLEX |
+ MVNETA_GMAC_AN_SPEED_EN |
+ MVNETA_GMAC_AN_FLOWCTRL_EN |
+ MVNETA_GMAC_AN_DUPLEX_EN);
+
+ if (phy->speed == SPEED_1000)
+ val |= MVNETA_GMAC_CONFIG_GMII_SPEED;
+ else if (phy->speed == SPEED_100)
+ val |= MVNETA_GMAC_CONFIG_MII_SPEED;
+
+ if (phy->duplex)
+ val |= MVNETA_GMAC_CONFIG_FULL_DUPLEX;
+
+ if (phy->pause)
+ val |= MVNETA_GMAC_CONFIG_FLOWCTRL;
+
+ val |= MVNETA_GMAC_FORCE_LINK_PASS | MVNETA_GMAC_FORCE_LINK_DOWN;
+
+ writel(val, priv->reg + MVNETA_GMAC_AUTONEG_CONFIG);
+
+ mvneta_mib_counters_clear(priv);
+
+ /* Enable first Tx and first Rx queues */
+ writel(BIT(0), priv->reg + MVNETA_TXQ_CMD);
+ writel(BIT(0), priv->reg + MVNETA_RXQ_CMD);
+}
+
+static int mvneta_open(struct eth_device *edev)
+{
+ struct mvneta_port *priv = edev->priv;
+ int ret;
+ u32 val;
+
+ ret = phy_device_connect(&priv->edev, NULL, -1,
+ mvneta_adjust_link, 0, priv->intf);
+ if (ret)
+ return ret;
+
+ /* Enable the first port */
+ val = readl(priv->reg + MVNETA_GMAC_CTRL_0);
+ writel(val | BIT(0), priv->reg + MVNETA_GMAC_CTRL_0);
+
+ return 0;
+}
+
+static void mvneta_init_rx_ring(struct mvneta_port *priv)
+{
+ int i;
+
+ for (i = 0; i < RX_RING_SIZE; i++) {
+ struct rxdesc *desc = &priv->rxdesc[i];
+
+ desc->buf_phys_addr = (u32)priv->rxbuf + i * ALIGN(PKTSIZE, 8);
+ }
+
+ priv->curr_rxdesc = 0;
+}
+
+void mvneta_setup_tx_rx(struct mvneta_port *priv)
+{
+ u32 val;
+
+ /* Allocate descriptors and buffers */
+ priv->txdesc = dma_alloc_coherent(ALIGN(sizeof(*priv->txdesc), 32));
+ priv->rxdesc = dma_alloc_coherent(RX_RING_SIZE *
+ ALIGN(sizeof(*priv->rxdesc), 32));
+ priv->rxbuf = dma_alloc(RX_RING_SIZE * ALIGN(PKTSIZE, 8));
+
+ mvneta_init_rx_ring(priv);
+
+ /* Configure the Rx queue */
+ val = readl(priv->reg + MVNETA_RXQ_CONFIG_REG(0));
+ val &= ~MVNETA_RXQ_PKT_OFFSET_ALL_MASK;
+ writel(val, priv->reg + MVNETA_RXQ_CONFIG_REG(0));
+
+ /* Configure the Tx descriptor */
+ writel(1, priv->reg + MVNETA_TXQ_SIZE_REG(0));
+ writel((u32)priv->txdesc, priv->reg + MVNETA_TXQ_BASE_ADDR_REG(0));
+
+ /* Configure the Rx descriptor. Packet size is in 8-byte units. */
+ val = RX_RING_SIZE;
+ val |= ((PKTSIZE >> 3) << MVNETA_RXQ_BUF_SIZE_SHIFT);
+ writel(val , priv->reg + MVNETA_RXQ_SIZE_REG(0));
+ writel((u32)priv->rxdesc, priv->reg + MVNETA_RXQ_BASE_ADDR_REG(0));
+
+ /* Set the number of available Rx descriptors */
+ writel(RX_RING_SIZE << MVNETA_RXQ_ADD_NON_OCCUPIED_SHIFT,
+ priv->reg + MVNETA_RXQ_STATUS_UPDATE_REG(0));
+}
+
+static int mvneta_port_config(struct mvneta_port *priv)
+{
+ int queue;
+ u32 val;
+
+ /* Enable MBUS Retry bit16 */
+ writel(0x20, priv->reg + MVNETA_MBUS_RETRY);
+
+ /* Map the first Tx queue and first Rx queue to CPU0 */
+ writel(BIT(0) | (BIT(0) << 8), priv->reg + MVNETA_CPU_MAP(0));
+
+ /* Reset Tx/Rx DMA */
+ writel(BIT(0), priv->reg + MVNETA_PORT_TX_RESET);
+ writel(BIT(0), priv->reg + MVNETA_PORT_RX_RESET);
+
+ /* Disable Legacy WRR, Disable EJP, Release from reset */
+ writel(0, priv->reg + MVNETA_TXQ_CMD_1);
+
+ /* Set maximum bandwidth for the first TX queue */
+ writel(0x3ffffff, priv->reg + MVETH_TXQ_TOKEN_CFG_REG(0));
+ writel(0x3ffffff, priv->reg + MVETH_TXQ_TOKEN_COUNT_REG(0));
+
+ /* Minimum bandwidth on the rest of them */
+ for (queue = 1; queue < TXQ_NUM; queue++) {
+ writel(0, priv->reg + MVETH_TXQ_TOKEN_COUNT_REG(queue));
+ writel(0, priv->reg + MVETH_TXQ_TOKEN_CFG_REG(queue));
+ }
+
+ writel(0, priv->reg + MVNETA_PORT_RX_RESET);
+ writel(0, priv->reg + MVNETA_PORT_TX_RESET);
+
+ /* Disable hardware PHY polling */
+ val = readl(priv->reg + MVNETA_UNIT_CONTROL);
+ writel(val & ~BIT(1), priv->reg + MVNETA_UNIT_CONTROL);
+
+ /* Port Acceleration Mode */
+ writel(0x1, priv->reg + MVNETA_ACC_MODE);
+
+ /* Port default configuration for the first Rx queue */
+ val = MVNETA_PORT_CONFIG_DEFL_VALUE(0);
+ writel(val, priv->reg + MVNETA_PORT_CONFIG);
+ writel(0, priv->reg + MVNETA_PORT_CONFIG_EXTEND);
+ writel(64, priv->reg + MVNETA_RX_MIN_FRAME_SIZE);
+
+ /* Default burst size */
+ val = 0;
+ val |= MVNETA_TX_BRST_SZ_MASK(MVNETA_SDMA_BRST_SIZE_16);
+ val |= MVNETA_RX_BRST_SZ_MASK(MVNETA_SDMA_BRST_SIZE_16);
+ val |= MVNETA_RX_NO_DATA_SWAP | MVNETA_TX_NO_DATA_SWAP;
+ writel(val, priv->reg + MVNETA_SDMA_CONFIG);
+
+ mvneta_clear_mcast_table(priv);
+ mvneta_rx_unicast_promisc_clear(priv);
+
+ /* Configure maximum MTU and token size */
+ writel(0x0003ffff, priv->reg + MVNETA_TX_MTU);
+ writel(0xffffffff, priv->reg + MVNETA_TX_TOKEN_SIZE);
+ writel(0x7fffffff, priv->reg + MVNETA_TXQ_TOKEN_SIZE_REG(0));
+
+ val = readl(priv->reg + MVNETA_GMAC_CTRL_2);
+
+ /* Even though it might look weird, when we're configured in
+ * SGMII or QSGMII mode, the RGMII bit needs to be set.
+ */
+ switch (priv->intf) {
+ case PHY_INTERFACE_MODE_QSGMII:
+ writel(MVNETA_QSGMII_SERDES, priv->reg + MVNETA_SERDES_CFG);
+ val |= MVNETA_GMAC2_PCS_ENABLE | MVNETA_GMAC2_PORT_RGMII;
+ break;
+ case PHY_INTERFACE_MODE_SGMII:
+ writel(MVNETA_SGMII_SERDES, priv->reg + MVNETA_SERDES_CFG);
+ val |= MVNETA_GMAC2_PCS_ENABLE | MVNETA_GMAC2_PORT_RGMII;
+ break;
+ case PHY_INTERFACE_MODE_RGMII:
+ case PHY_INTERFACE_MODE_RGMII_ID:
+ case PHY_INTERFACE_MODE_RGMII_TXID:
+ case PHY_INTERFACE_MODE_RGMII_RXID:
+ val |= MVNETA_GMAC2_PORT_RGMII;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ /* Cancel Port Reset */
+ val &= ~MVNETA_GMAC2_PORT_RESET;
+ writel(val, priv->reg + MVNETA_GMAC_CTRL_2);
+ while (readl(priv->reg + MVNETA_GMAC_CTRL_2) & MVNETA_GMAC2_PORT_RESET)
+ continue;
+
+ return 0;
+}
+
+static int mvneta_probe(struct device_d *dev)
+{
+ struct mvneta_port *priv;
+ int ret;
+
+ priv = xzalloc(sizeof(*priv));
+
+ priv->reg = dev_get_mem_region(dev, 0);
+
+ priv->clk = clk_get(dev, 0);
+ if (IS_ERR(priv->clk))
+ return PTR_ERR(priv->clk);
+ clk_enable(priv->clk);
+
+ ret = of_get_phy_mode(dev->device_node);
+ if (ret < 0)
+ return ret;
+ priv->intf = ret;
+
+ mvneta_port_stop(priv);
+
+ ret = mvneta_port_config(priv);
+ if (ret)
+ return ret;
+
+ mvneta_conf_mbus_windows(priv);
+ mvneta_setup_tx_rx(priv);
+
+ /* register eth device */
+ priv->edev.priv = priv;
+ priv->edev.open = mvneta_open;
+ priv->edev.send = mvneta_send;
+ priv->edev.recv = mvneta_recv;
+ priv->edev.halt = mvneta_halt;
+ priv->edev.set_ethaddr = mvneta_set_ethaddr;
+ priv->edev.get_ethaddr = mvneta_get_ethaddr;
+ priv->edev.parent = dev;
+
+ ret = eth_register(&priv->edev);
+ if (ret)
+ return ret;
+ return 0;
+}
+
+static struct of_device_id mvneta_dt_ids[] = {
+ { .compatible = "marvell,armada-370-neta", },
+ { }
+};
+
+static struct driver_d mvneta_driver = {
+ .name = "mvneta",
+ .probe = mvneta_probe,
+ .of_compatible = DRV_OF_COMPAT(mvneta_dt_ids),
+};
+device_platform_driver(mvneta_driver);
--
2.1.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 3/4] net: phy: Support Marvell 88EE1543 PHY
2014-11-09 14:56 ` [PATCH v3 3/4] net: phy: Support Marvell 88EE1543 PHY Ezequiel Garcia
@ 2014-11-10 6:57 ` Sascha Hauer
0 siblings, 0 replies; 25+ messages in thread
From: Sascha Hauer @ 2014-11-10 6:57 UTC (permalink / raw)
To: Ezequiel Garcia; +Cc: Thomas Petazzoni, barebox
Hi Ezequiel,
On Sun, Nov 09, 2014 at 11:56:17AM -0300, Ezequiel Garcia wrote:
> This commit adds support for Marvell's 88E1543 PHY chip. This chip is
> almost identical to the 88EE1545, except the 88E1545 supports QSGMII
> and the 88EE1543 supports SGMII.
>
> Therefore, the same configuration function is used for both PHYs. For now,
> the only initialization provided for the 88EE1543 is the LED setup.
>
> Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
> ---
> drivers/net/phy/marvell.c | 9 +++++++++
> include/linux/marvell_phy.h | 1 +
> 2 files changed, 10 insertions(+)
>
> diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
> index 3ea72e2..3248b48 100644
> --- a/drivers/net/phy/marvell.c
> +++ b/drivers/net/phy/marvell.c
> @@ -233,6 +233,15 @@ static struct phy_driver marvell_phys[] = {
> .config_aneg = genphy_config_aneg,
> .read_status = marvell_read_status,
> },
> +{
> + .phy_id = MARVELL_PHY_ID_88E1543,
> + .phy_id_mask = MARVELL_PHY_ID_MASK,
> + .drv.name = "Marvell 88E1543",
> + .features = PHY_GBIT_FEATURES,
> + .config_init = m88e1540_config_init,
> + .config_aneg = genphy_config_aneg,
> + .read_status = marvell_read_status,
> +},
> };
Could you fix the indentation before adding more elements to this array?
It should be
static struct phy_driver marvell_phys[] = {
{
...
},
};
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-09 14:56 [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP Ezequiel Garcia
` (3 preceding siblings ...)
2014-11-09 14:56 ` [PATCH v3 4/4] net: Add driver for Armada 370/XP 10/100/1000 Mbps network controller Ezequiel Garcia
@ 2014-11-10 8:06 ` Uwe Kleine-König
2014-11-10 18:10 ` Ezequiel Garcia
4 siblings, 1 reply; 25+ messages in thread
From: Uwe Kleine-König @ 2014-11-10 8:06 UTC (permalink / raw)
To: Ezequiel Garcia; +Cc: Thomas Petazzoni, barebox
Hello Ezequiel,
On Sun, Nov 09, 2014 at 11:56:14AM -0300, Ezequiel Garcia wrote:
> Very delayed third round of the support for the network controller present
> on Marvell Armada 370/XP SoC.
>
> The first patch enables the peripherals in a PUP register, which is required
> on RGMII ports.
>
> The second and third patches add support for Marvell's 88E1543 and 88E1545 PHY
> chips.
>
> The fourth patch adds the mvneta driver. Most of the configuration part is
> based on Linux's mvneta driver, while some of code organization is based
> on Barebox's orion-gbe driver.
I tested this series on top of 784b352aeeed with a patch to support my
ReadyNAS 104 (by Netgear, Armada 370 system, currently only second stage
booting from U-Boot, similar to mirabox with
armada-370-netgear-rn104.dts from next-20141106).
Marvell>> tftp start_netgear_rn104.pblx
Using egiga1 device
TFTP from server 192.168.77.157; our IP address is 192.168.77.133
Filename 'start_netgear_rn104.pblx'.
Load address: 0x2000000
Loading: ####################
done
Bytes transferred = 292148 (47534 hex)
Marvell>> go 0x2000000
## Starting application at 0x02000000 ...
barebox 2014.11.0-00123-g422a0a9d46a8 #3 Sun Nov 9 21:35:11 CET 2014
Board: NETGEAR ReadyNAS 104
SoC: Marvell 6710 rev 1
mdio_bus: miibus0: probed
eth1: got preset MAC address: 28:c6:8e:36:df:57
of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
malloc space: 0x01f00000 -> 0x03dfffff (size 31 MiB)
environment load /dev/env0: No such file or directory
Maybe you have to create the partition.
no valid environment found on /dev/env0. Using default environment
running /env/bin/init...
/env/bin/init not found
barebox:/ ethact eth1
barebox:/ dhcp
eth1: 1000Mbps full duplex link detected
T T T T T T T T T T T T T T T T T T T T dhcp failed: Connection timed out
dhcp: Connection timed out
barebox:/ eth1.ipaddr=192.168.77.133
barebox:/ eth1.netmask=255.255.255.0
barebox:/ echo $eth1.ethaddr
28:c6:8e:36:df:57
barebox:/ ping 192.168.77.157
T T T T T ping failed: Connection timed out
barebox:/
tcpdump on 192.168.77.157 (which is connected via a switch) worked just
fine from U-Boot, after all it served the barebox image.
The pca9554 i2c device is only used for leds, so I don't think the error
messages above are related.
Yesterday I saw a different error, that I cannot reproduce now with the
same barebox image. IIRC I first played around a bit with eth0 until
noticing that I need eth1. I didn't save the full log, but it resulted
in:
barebox:/ ethact eth1
barebox:/ dhcp
eth1: 1000Mbps full duplex link detected
eth1: transmit error 3
dhcp failed: I/O error
dhcp: I/O error
Any ideas? I can try to use a dtb without pinmux definitions later
today.
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-10 8:06 ` [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP Uwe Kleine-König
@ 2014-11-10 18:10 ` Ezequiel Garcia
2014-11-10 18:43 ` Uwe Kleine-König
0 siblings, 1 reply; 25+ messages in thread
From: Ezequiel Garcia @ 2014-11-10 18:10 UTC (permalink / raw)
To: Uwe Kleine-König, Sebastian Hesselbarth; +Cc: Thomas Petazzoni, barebox
On 11/10/2014 05:06 AM, Uwe Kleine-König wrote:
> Hello Ezequiel,
>
> On Sun, Nov 09, 2014 at 11:56:14AM -0300, Ezequiel Garcia wrote:
>> Very delayed third round of the support for the network controller present
>> on Marvell Armada 370/XP SoC.
>>
>> The first patch enables the peripherals in a PUP register, which is required
>> on RGMII ports.
>>
>> The second and third patches add support for Marvell's 88E1543 and 88E1545 PHY
>> chips.
>>
>> The fourth patch adds the mvneta driver. Most of the configuration part is
>> based on Linux's mvneta driver, while some of code organization is based
>> on Barebox's orion-gbe driver.
> I tested this series on top of 784b352aeeed with a patch to support my
> ReadyNAS 104 (by Netgear, Armada 370 system, currently only second stage
> booting from U-Boot, similar to mirabox with
> armada-370-netgear-rn104.dts from next-20141106).
>
> Marvell>> tftp start_netgear_rn104.pblx
> Using egiga1 device
> TFTP from server 192.168.77.157; our IP address is 192.168.77.133
> Filename 'start_netgear_rn104.pblx'.
> Load address: 0x2000000
> Loading: ####################
> done
> Bytes transferred = 292148 (47534 hex)
> Marvell>> go 0x2000000
> ## Starting application at 0x02000000 ...
>
>
> barebox 2014.11.0-00123-g422a0a9d46a8 #3 Sun Nov 9 21:35:11 CET 2014
>
>
> Board: NETGEAR ReadyNAS 104
> SoC: Marvell 6710 rev 1
> mdio_bus: miibus0: probed
> eth1: got preset MAC address: 28:c6:8e:36:df:57
> of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
> of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
> of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
> of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
> malloc space: 0x01f00000 -> 0x03dfffff (size 31 MiB)
> environment load /dev/env0: No such file or directory
> Maybe you have to create the partition.
> no valid environment found on /dev/env0. Using default environment
> running /env/bin/init...
> /env/bin/init not found
> barebox:/ ethact eth1
> barebox:/ dhcp
> eth1: 1000Mbps full duplex link detected
> T T T T T T T T T T T T T T T T T T T T dhcp failed: Connection timed out
> dhcp: Connection timed out
> barebox:/ eth1.ipaddr=192.168.77.133
> barebox:/ eth1.netmask=255.255.255.0
> barebox:/ echo $eth1.ethaddr
> 28:c6:8e:36:df:57
> barebox:/ ping 192.168.77.157
> T T T T T ping failed: Connection timed out
> barebox:/
>
> tcpdump on 192.168.77.157 (which is connected via a switch) worked just
> fine from U-Boot, after all it served the barebox image.
>
> The pca9554 i2c device is only used for leds, so I don't think the error
> messages above are related.
>
> Yesterday I saw a different error, that I cannot reproduce now with the
> same barebox image. IIRC I first played around a bit with eth0 until
> noticing that I need eth1. I didn't save the full log, but it resulted
> in:
>
> barebox:/ ethact eth1
> barebox:/ dhcp
> eth1: 1000Mbps full duplex link detected
> eth1: transmit error 3
> dhcp failed: I/O error
> dhcp: I/O error
>
> Any ideas? I can try to use a dtb without pinmux definitions later
> today.
>
Hm, not really. I've tested this with my Armada 370 Mirabox and Armada
XP Openblocks AX3-4 boards (I use kwboot to load the barebox image, so I
don't jump from U-Boot).
I guess we must be missing some config. What's confusing is that the
Mirabox and the RN104 should be pretty similar in this regard (e.g. they
use the same phy mode).
Sebastian, do you have any ideas?
--
Ezequiel García, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-10 18:10 ` Ezequiel Garcia
@ 2014-11-10 18:43 ` Uwe Kleine-König
2014-11-10 19:36 ` Sebastian Hesselbarth
0 siblings, 1 reply; 25+ messages in thread
From: Uwe Kleine-König @ 2014-11-10 18:43 UTC (permalink / raw)
To: Ezequiel Garcia; +Cc: Thomas Petazzoni, barebox
Hello Ezequiel,
On Mon, Nov 10, 2014 at 03:10:56PM -0300, Ezequiel Garcia wrote:
> On 11/10/2014 05:06 AM, Uwe Kleine-König wrote:
> > I tested this series on top of 784b352aeeed with a patch to support my
> > ReadyNAS 104 (by Netgear, Armada 370 system, currently only second stage
> > booting from U-Boot, similar to mirabox with
> > armada-370-netgear-rn104.dts from next-20141106).
> >
> > Marvell>> tftp start_netgear_rn104.pblx
> > Using egiga1 device
> > TFTP from server 192.168.77.157; our IP address is 192.168.77.133
> > Filename 'start_netgear_rn104.pblx'.
> > Load address: 0x2000000
> > Loading: ####################
> > done
> > Bytes transferred = 292148 (47534 hex)
> > Marvell>> go 0x2000000
> > ## Starting application at 0x02000000 ...
> >
> >
> > barebox 2014.11.0-00123-g422a0a9d46a8 #3 Sun Nov 9 21:35:11 CET 2014
> >
> >
> > Board: NETGEAR ReadyNAS 104
> > SoC: Marvell 6710 rev 1
> > mdio_bus: miibus0: probed
> > eth1: got preset MAC address: 28:c6:8e:36:df:57
> > of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
> > of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
> > of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
> > of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
> > malloc space: 0x01f00000 -> 0x03dfffff (size 31 MiB)
> > environment load /dev/env0: No such file or directory
> > Maybe you have to create the partition.
> > no valid environment found on /dev/env0. Using default environment
> > running /env/bin/init...
> > /env/bin/init not found
> > barebox:/ ethact eth1
> > barebox:/ dhcp
> > eth1: 1000Mbps full duplex link detected
> > T T T T T T T T T T T T T T T T T T T T dhcp failed: Connection timed out
> > dhcp: Connection timed out
> > barebox:/ eth1.ipaddr=192.168.77.133
> > barebox:/ eth1.netmask=255.255.255.0
> > barebox:/ echo $eth1.ethaddr
> > 28:c6:8e:36:df:57
> > barebox:/ ping 192.168.77.157
> > T T T T T ping failed: Connection timed out
> > barebox:/
> >
> > tcpdump on 192.168.77.157 (which is connected via a switch) worked just
> > fine from U-Boot, after all it served the barebox image.
> >
> > The pca9554 i2c device is only used for leds, so I don't think the error
> > messages above are related.
> >
> > Yesterday I saw a different error, that I cannot reproduce now with the
> > same barebox image. IIRC I first played around a bit with eth0 until
> > noticing that I need eth1. I didn't save the full log, but it resulted
> > in:
> >
> > barebox:/ ethact eth1
> > barebox:/ dhcp
> > eth1: 1000Mbps full duplex link detected
> > eth1: transmit error 3
> > dhcp failed: I/O error
> > dhcp: I/O error
> >
> > Any ideas? I can try to use a dtb without pinmux definitions later
> > today.
> >
>
> Hm, not really. I've tested this with my Armada 370 Mirabox and Armada
> XP Openblocks AX3-4 boards (I use kwboot to load the barebox image, so I
> don't jump from U-Boot).
I would expect to use second stage booting to be more robust, because a
missing gpio to enable some hardware component in barebox is already
setup by U-Boot.
Do you have a command line for me? I used
scripts/kwboot -b images/barebox-netgear-rn104-uart.img /dev/ttyUSB0
which took much longer than I expected (didn't time it, but I'd say in
the several minutes range). And I didn't know what to do then. Ctrl-C
and then connecting microcom was wrong. Adding -t to the command line
above, too.
> I guess we must be missing some config. What's confusing is that the
> Mirabox and the RN104 should be pretty similar in this regard (e.g. they
> use the same phy mode).
How do you know which phy is used? I assume from Arnaud's webpage?
Any hints how I can debug this apart from using a dtb without pinmuxing
stuff? (OTOH the same dtb works with linux, hmm.)
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-10 18:43 ` Uwe Kleine-König
@ 2014-11-10 19:36 ` Sebastian Hesselbarth
2014-11-11 9:06 ` Uwe Kleine-König
0 siblings, 1 reply; 25+ messages in thread
From: Sebastian Hesselbarth @ 2014-11-10 19:36 UTC (permalink / raw)
To: Uwe Kleine-König, Ezequiel Garcia; +Cc: Thomas Petazzoni, barebox
On 11/10/2014 07:43 PM, Uwe Kleine-König wrote:
> On Mon, Nov 10, 2014 at 03:10:56PM -0300, Ezequiel Garcia wrote:
>> On 11/10/2014 05:06 AM, Uwe Kleine-König wrote:
>>> I tested this series on top of 784b352aeeed with a patch to support my
>>> ReadyNAS 104 (by Netgear, Armada 370 system, currently only second stage
>>> booting from U-Boot, similar to mirabox with
>>> armada-370-netgear-rn104.dts from next-20141106).
>>>
>>> Marvell>> tftp start_netgear_rn104.pblx
>>> Using egiga1 device
>>> TFTP from server 192.168.77.157; our IP address is 192.168.77.133
>>> Filename 'start_netgear_rn104.pblx'.
>>> Load address: 0x2000000
>>> Loading: ####################
>>> done
>>> Bytes transferred = 292148 (47534 hex)
>>> Marvell>> go 0x2000000
>>> ## Starting application at 0x02000000 ...
>>>
>>> barebox 2014.11.0-00123-g422a0a9d46a8 #3 Sun Nov 9 21:35:11 CET 2014
>>>
>>> Board: NETGEAR ReadyNAS 104
>>> SoC: Marvell 6710 rev 1
>>> mdio_bus: miibus0: probed
>>> eth1: got preset MAC address: 28:c6:8e:36:df:57
>>> of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
>>> of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
>>> of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
>>> of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
>>> malloc space: 0x01f00000 -> 0x03dfffff (size 31 MiB)
>>> environment load /dev/env0: No such file or directory
>>> Maybe you have to create the partition.
>>> no valid environment found on /dev/env0. Using default environment
>>> running /env/bin/init...
>>> /env/bin/init not found
>>> barebox:/ ethact eth1
>>> barebox:/ dhcp
>>> eth1: 1000Mbps full duplex link detected
>>> T T T T T T T T T T T T T T T T T T T T dhcp failed: Connection timed out
>>> dhcp: Connection timed out
>>> barebox:/ eth1.ipaddr=192.168.77.133
>>> barebox:/ eth1.netmask=255.255.255.0
>>> barebox:/ echo $eth1.ethaddr
>>> 28:c6:8e:36:df:57
>>> barebox:/ ping 192.168.77.157
>>> T T T T T ping failed: Connection timed out
>>> barebox:/
>>>
>>> tcpdump on 192.168.77.157 (which is connected via a switch) worked just
>>> fine from U-Boot, after all it served the barebox image.
>>>
[...]
>> Hm, not really. I've tested this with my Armada 370 Mirabox and Armada
>> XP Openblocks AX3-4 boards (I use kwboot to load the barebox image, so I
>> don't jump from U-Boot).
> I would expect to use second stage booting to be more robust, because a
> missing gpio to enable some hardware component in barebox is already
> setup by U-Boot.
>
> Do you have a command line for me? I used
>
> scripts/kwboot -b images/barebox-netgear-rn104-uart.img /dev/ttyUSB0
>
> which took much longer than I expected (didn't time it, but I'd say in
> the several minutes range). And I didn't know what to do then. Ctrl-C
> and then connecting microcom was wrong. Adding -t to the command line
> above, too.
>
>> I guess we must be missing some config. What's confusing is that the
>> Mirabox and the RN104 should be pretty similar in this regard (e.g. they
>> use the same phy mode).
> How do you know which phy is used? I assume from Arnaud's webpage?
>
> Any hints how I can debug this apart from using a dtb without pinmuxing
> stuff? (OTOH the same dtb works with linux, hmm.)
If you use barebox as first-stage BL, then you definitely need the
pinmuxing. If you use it as second-stage BL, u-boot should have set
it up already. The log above suggests that you already used the same
egiga/mvneta controller before on u-boot so that should be fine.
Currently, I cannot tell what is the problem here. I never tried 2nd
stage booting. Can you add the pinmuxing and try uart booting? Also,
can you connect the RN104 directly to a PC and run wireshark on the
interface? You should see packets from the MAC above when e.g. ping
from RN104.
Sebastian
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-10 19:36 ` Sebastian Hesselbarth
@ 2014-11-11 9:06 ` Uwe Kleine-König
2014-11-11 14:25 ` Ezequiel Garcia
2014-11-12 10:56 ` Uwe Kleine-König
0 siblings, 2 replies; 25+ messages in thread
From: Uwe Kleine-König @ 2014-11-11 9:06 UTC (permalink / raw)
To: Sebastian Hesselbarth; +Cc: Thomas Petazzoni, barebox
Hello Sebastian,
On Mon, Nov 10, 2014 at 08:36:07PM +0100, Sebastian Hesselbarth wrote:
> On 11/10/2014 07:43 PM, Uwe Kleine-König wrote:
> >On Mon, Nov 10, 2014 at 03:10:56PM -0300, Ezequiel Garcia wrote:
> >>On 11/10/2014 05:06 AM, Uwe Kleine-König wrote:
> >>>I tested this series on top of 784b352aeeed with a patch to support my
> >>>ReadyNAS 104 (by Netgear, Armada 370 system, currently only second stage
> >>>booting from U-Boot, similar to mirabox with
> >>>armada-370-netgear-rn104.dts from next-20141106).
> >>>
> >>> Marvell>> tftp start_netgear_rn104.pblx
> >>> Using egiga1 device
> >>> TFTP from server 192.168.77.157; our IP address is 192.168.77.133
> >>> Filename 'start_netgear_rn104.pblx'.
> >>> Load address: 0x2000000
> >>> Loading: ####################
> >>> done
> >>> Bytes transferred = 292148 (47534 hex)
> >>> Marvell>> go 0x2000000
> >>> ## Starting application at 0x02000000 ...
> >>>
> >>> barebox 2014.11.0-00123-g422a0a9d46a8 #3 Sun Nov 9 21:35:11 CET 2014
> >>>
> >>> Board: NETGEAR ReadyNAS 104
> >>> SoC: Marvell 6710 rev 1
> >>> mdio_bus: miibus0: probed
> >>> eth1: got preset MAC address: 28:c6:8e:36:df:57
> >>> of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
> >>> of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
> >>> of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
> >>> of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
> >>> malloc space: 0x01f00000 -> 0x03dfffff (size 31 MiB)
> >>> environment load /dev/env0: No such file or directory
> >>> Maybe you have to create the partition.
> >>> no valid environment found on /dev/env0. Using default environment
> >>> running /env/bin/init...
> >>> /env/bin/init not found
> >>> barebox:/ ethact eth1
> >>> barebox:/ dhcp
> >>> eth1: 1000Mbps full duplex link detected
> >>> T T T T T T T T T T T T T T T T T T T T dhcp failed: Connection timed out
> >>> dhcp: Connection timed out
> >>> barebox:/ eth1.ipaddr=192.168.77.133
> >>> barebox:/ eth1.netmask=255.255.255.0
> >>> barebox:/ echo $eth1.ethaddr
> >>> 28:c6:8e:36:df:57
> >>> barebox:/ ping 192.168.77.157
> >>> T T T T T ping failed: Connection timed out
> >>> barebox:/
> >>>
> >>>tcpdump on 192.168.77.157 (which is connected via a switch) worked just
> >>>fine from U-Boot, after all it served the barebox image.
> >>>
> [...]
> >>Hm, not really. I've tested this with my Armada 370 Mirabox and Armada
> >>XP Openblocks AX3-4 boards (I use kwboot to load the barebox image, so I
> >>don't jump from U-Boot).
>
> >I would expect to use second stage booting to be more robust, because a
> >missing gpio to enable some hardware component in barebox is already
> >setup by U-Boot.
> >
> >Do you have a command line for me? I used
> >
> > scripts/kwboot -b images/barebox-netgear-rn104-uart.img /dev/ttyUSB0
> >
> >which took much longer than I expected (didn't time it, but I'd say in
> >the several minutes range). And I didn't know what to do then. Ctrl-C
> >and then connecting microcom was wrong. Adding -t to the command line
> >above, too.
Any hints on how kwboot is used? It loads the binary into RAM and runs
it from there, right? I timed my above command and it took 38m28.225s
for my image (341304 bytes).
> >>I guess we must be missing some config. What's confusing is that the
> >>Mirabox and the RN104 should be pretty similar in this regard (e.g. they
> >>use the same phy mode).
> >How do you know which phy is used? I assume from Arnaud's webpage?
> >
> >Any hints how I can debug this apart from using a dtb without pinmuxing
> >stuff? (OTOH the same dtb works with linux, hmm.)
>
> If you use barebox as first-stage BL, then you definitely need the
> pinmuxing. If you use it as second-stage BL, u-boot should have set
> it up already. The log above suggests that you already used the same
> egiga/mvneta controller before on u-boot so that should be fine.
right.
> Currently, I cannot tell what is the problem here. I never tried 2nd
> stage booting. Can you add the pinmuxing and try uart booting? Also,
I have the pinmuxing, the dts I used is
https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/tree/arch/arm/boot/dts/armada-370-netgear-rn104.dts?id=b0187bd33fba065ec736dc33085914a137d390d3
And arch/arm/dts/armada-370-rn104-bb.dts contains:
#include "arm/armada-370-netgear-rn104.dts"
/ {
chosen {
stdout-path = "/soc/internal-regs/serial@12000";
};
};
Double checking using
dtc -I dtb -O dts arch/arm/dts/armada-370-rn104-bb.dtb
shows that not all nodes (e.g. serial@12000) have pinctrl-* nodes, but
the same applies to armada-370-mirabox.dts.
> can you connect the RN104 directly to a PC and run wireshark on the
> interface? You should see packets from the MAC above when e.g. ping
> from RN104.
Running
tcpdump -i br-lan -vvv not ip6 and not host 192.168.77.177 and not host 192.168.77.157 and not host 192.168.77.151
on my router (which isn't a PC, but still should be good enough,
shouldn't it? It has the address 192.168.77.1). Running "ping 192.168.77.1"
seems to result in packages like this:
10:01:30.233928 42:40:00:10:40:60 > 00:00:00:34:00:12, ethertype MOP RC (0x6002), length 60:
0x0000: 0000 0034 0012 4240 0010 4060 6002 4000 ...4..B@..@``.@.
0x0010: 0054 8080 0012 4100 0002 c095 08e8 01a0 .T....A.........
0x0020: 1420 0020 8001 1020 0000 0000 0000 0000 ................
0x0030: 0000 0000 0000 0000 0000 0000 ............
which is utter nonsense.
Will debug that further later today.
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-11 9:06 ` Uwe Kleine-König
@ 2014-11-11 14:25 ` Ezequiel Garcia
2014-11-11 14:31 ` Thomas Petazzoni
2014-11-11 20:35 ` Uwe Kleine-König
2014-11-12 10:56 ` Uwe Kleine-König
1 sibling, 2 replies; 25+ messages in thread
From: Ezequiel Garcia @ 2014-11-11 14:25 UTC (permalink / raw)
To: Uwe Kleine-König, Sebastian Hesselbarth; +Cc: Thomas Petazzoni, barebox
Uwe,
On 11/11/2014 06:06 AM, Uwe Kleine-König wrote:
>>>
>>> Do you have a command line for me? I used
>>>
>>> scripts/kwboot -b images/barebox-netgear-rn104-uart.img /dev/ttyUSB0
>>>
>>> which took much longer than I expected (didn't time it, but I'd say in
>>> the several minutes range). And I didn't know what to do then. Ctrl-C
>>> and then connecting microcom was wrong. Adding -t to the command line
>>> above, too.
> Any hints on how kwboot is used? It loads the binary into RAM and runs
> it from there, right? I timed my above command and it took 38m28.225s
> for my image (341304 bytes).
>
This is how I use kwboot:
1. Boot your board (with stock U-Boot and Linux) and extract the bootloader.
According to my notes, I just grabbed a couple megabytes:
$ dd if=/dev/mtd0 of=/mtd0.dump bs=1M count=2
I guess you can grab the entire bootloader partition (if you have one).
2. Run kwbimage tool and dump the output to the appropriate board directory:
$ ./scripts/kwbimage -x -i /srv/nfs/mtd0.dump -o arch/arm/boards/plathome-openblocks-ax3/
Fix the produced kwbimage.cfg to boot from UART (actually, I think it's not needed):
diff --git a/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg b/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg
index 219c2ec..fd6c0df 100644
--- a/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg
+++ b/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg
@@ -1,5 +1,5 @@
VERSION 1
-BOOT_FROM spi
+BOOT_FROM uart
DESTADDR 00600000
EXECADDR 006b0000
NAND_BLKSZ 00000000
3. Make your barebox
$ make
4. Run kwboot and have fun!
$ ./scripts/kwboot -b images/barebox-plathome-openblocks-ax3.img -t -B 115200 /dev/ttyUSB0
After kwboot transfers the image, it starts a terminal. You don't need to open another one,
and close everything listening on ttyUSB0 or kwboot won't work fine. It should take less
than a minute to transfer the image.
This works for me on every mvebu board I have, but it was a major pain at first :/
--
Ezequiel García, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-11 14:25 ` Ezequiel Garcia
@ 2014-11-11 14:31 ` Thomas Petazzoni
2014-11-11 14:34 ` Ezequiel Garcia
2014-11-11 20:35 ` Uwe Kleine-König
1 sibling, 1 reply; 25+ messages in thread
From: Thomas Petazzoni @ 2014-11-11 14:31 UTC (permalink / raw)
To: Ezequiel Garcia; +Cc: barebox, Uwe Kleine-König
Dear Ezequiel Garcia,
On Tue, 11 Nov 2014 11:25:40 -0300, Ezequiel Garcia wrote:
> Fix the produced kwbimage.cfg to boot from UART (actually, I think it's not needed):
>
> diff --git a/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg b/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg
> index 219c2ec..fd6c0df 100644
> --- a/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg
> +++ b/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg
> @@ -1,5 +1,5 @@
> VERSION 1
> -BOOT_FROM spi
> +BOOT_FROM uart
> DESTADDR 00600000
> EXECADDR 006b0000
> NAND_BLKSZ 00000000
This is indeed not needed. The Barebox build system calls kwbimage
twice: once to generate an image that uses the BOOT_FROM media as the
boot media, and once to generate an image that can boot from the UART.
The former has a .kwb extension, the latter a .kwbuart extension.
Other than that, I think your tutorial is good. Is there a good place
in Barebox to put some documentation such as this?
Thanks!
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-11 14:31 ` Thomas Petazzoni
@ 2014-11-11 14:34 ` Ezequiel Garcia
2014-11-12 7:03 ` Sascha Hauer
0 siblings, 1 reply; 25+ messages in thread
From: Ezequiel Garcia @ 2014-11-11 14:34 UTC (permalink / raw)
To: Thomas Petazzoni; +Cc: barebox, Uwe Kleine-König
On 11/11/2014 11:31 AM, Thomas Petazzoni wrote:
> Dear Ezequiel Garcia,
>
> On Tue, 11 Nov 2014 11:25:40 -0300, Ezequiel Garcia wrote:
>
>> Fix the produced kwbimage.cfg to boot from UART (actually, I think it's not needed):
>>
>> diff --git a/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg b/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg
>> index 219c2ec..fd6c0df 100644
>> --- a/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg
>> +++ b/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg
>> @@ -1,5 +1,5 @@
>> VERSION 1
>> -BOOT_FROM spi
>> +BOOT_FROM uart
>> DESTADDR 00600000
>> EXECADDR 006b0000
>> NAND_BLKSZ 00000000
>
> This is indeed not needed. The Barebox build system calls kwbimage
> twice: once to generate an image that uses the BOOT_FROM media as the
> boot media, and once to generate an image that can boot from the UART.
> The former has a .kwb extension, the latter a .kwbuart extension.
>
> Other than that, I think your tutorial is good. Is there a good place
> in Barebox to put some documentation such as this?
>
Actually... it's a copy-paste of a something I wrote as
Documentation/boards/mvebu.txt, but never sent as a patch.
I can send it now, if you agree to double-check it and perhaps extend it
a bit :)
--
Ezequiel García, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-11 14:25 ` Ezequiel Garcia
2014-11-11 14:31 ` Thomas Petazzoni
@ 2014-11-11 20:35 ` Uwe Kleine-König
1 sibling, 0 replies; 25+ messages in thread
From: Uwe Kleine-König @ 2014-11-11 20:35 UTC (permalink / raw)
To: Ezequiel Garcia; +Cc: Thomas Petazzoni, barebox
Hi Ezequiel,
On Tue, Nov 11, 2014 at 11:25:40AM -0300, Ezequiel Garcia wrote:
> On 11/11/2014 06:06 AM, Uwe Kleine-König wrote:
> >>>
> >>> Do you have a command line for me? I used
> >>>
> >>> scripts/kwboot -b images/barebox-netgear-rn104-uart.img /dev/ttyUSB0
> >>>
> >>> which took much longer than I expected (didn't time it, but I'd say in
> >>> the several minutes range). And I didn't know what to do then. Ctrl-C
> >>> and then connecting microcom was wrong. Adding -t to the command line
> >>> above, too.
> > Any hints on how kwboot is used? It loads the binary into RAM and runs
> > it from there, right? I timed my above command and it took 38m28.225s
> > for my image (341304 bytes).
> >
>
> This is how I use kwboot:
>
> 1. Boot your board (with stock U-Boot and Linux) and extract the bootloader.
> According to my notes, I just grabbed a couple megabytes:
>
> $ dd if=/dev/mtd0 of=/mtd0.dump bs=1M count=2
>
> I guess you can grab the entire bootloader partition (if you have one).
>
> 2. Run kwbimage tool and dump the output to the appropriate board directory:
>
> $ ./scripts/kwbimage -x -i /srv/nfs/mtd0.dump -o arch/arm/boards/plathome-openblocks-ax3/
>
> Fix the produced kwbimage.cfg to boot from UART (actually, I think it's not needed):
>
> diff --git a/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg b/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg
> index 219c2ec..fd6c0df 100644
> --- a/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg
> +++ b/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg
> @@ -1,5 +1,5 @@
> VERSION 1
> -BOOT_FROM spi
> +BOOT_FROM uart
> DESTADDR 00600000
> EXECADDR 006b0000
> NAND_BLKSZ 00000000
My kwbimage looks similar:
VERSION 1
BOOT_FROM nand
DESTADDR 00600000
EXECADDR 006a0000
NAND_BLKSZ 00020000
NAND_BADBLK_LOCATION 01
BINARY arch/arm/boards/netgear-rn104/binary.0 0000005b 00000068
PAYLOAD ./payload
The other kwbimage.cfg files don't have a "PAYLOAD" line though, but if
I read the source correctly this shouldn't a problem.
BTW, is this binary.0 expected to be located in the source or the build
directory for oot-building? I would expect to provide it in the source
tree, but it's not picked up from there.
> 3. Make your barebox
>
> $ make
>
> 4. Run kwboot and have fun!
>
> $ ./scripts/kwboot -b images/barebox-plathome-openblocks-ax3.img -t -B 115200 /dev/ttyUSB0
With the patch I just sent, kwboot doesn't take 30+ minutes anymore, but
dies when an error occurs. (Unfortunately this happens 100% reproducibly
with two different USB-to-RS232 adapters.)
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-11 14:34 ` Ezequiel Garcia
@ 2014-11-12 7:03 ` Sascha Hauer
0 siblings, 0 replies; 25+ messages in thread
From: Sascha Hauer @ 2014-11-12 7:03 UTC (permalink / raw)
To: Ezequiel Garcia; +Cc: Thomas Petazzoni, barebox, Uwe Kleine-König
On Tue, Nov 11, 2014 at 11:34:30AM -0300, Ezequiel Garcia wrote:
> On 11/11/2014 11:31 AM, Thomas Petazzoni wrote:
> > Dear Ezequiel Garcia,
> >
> > On Tue, 11 Nov 2014 11:25:40 -0300, Ezequiel Garcia wrote:
> >
> >> Fix the produced kwbimage.cfg to boot from UART (actually, I think it's not needed):
> >>
> >> diff --git a/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg b/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg
> >> index 219c2ec..fd6c0df 100644
> >> --- a/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg
> >> +++ b/arch/arm/boards/plathome-openblocks-ax3/kwbimage.cfg
> >> @@ -1,5 +1,5 @@
> >> VERSION 1
> >> -BOOT_FROM spi
> >> +BOOT_FROM uart
> >> DESTADDR 00600000
> >> EXECADDR 006b0000
> >> NAND_BLKSZ 00000000
> >
> > This is indeed not needed. The Barebox build system calls kwbimage
> > twice: once to generate an image that uses the BOOT_FROM media as the
> > boot media, and once to generate an image that can boot from the UART.
> > The former has a .kwb extension, the latter a .kwbuart extension.
> >
> > Other than that, I think your tutorial is good. Is there a good place
> > in Barebox to put some documentation such as this?
> >
>
> Actually... it's a copy-paste of a something I wrote as
> Documentation/boards/mvebu.txt, but never sent as a patch.
s/txt/rst/ please. The docs are in restructured text format.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-11 9:06 ` Uwe Kleine-König
2014-11-11 14:25 ` Ezequiel Garcia
@ 2014-11-12 10:56 ` Uwe Kleine-König
2014-11-12 11:22 ` Sebastian Hesselbarth
1 sibling, 1 reply; 25+ messages in thread
From: Uwe Kleine-König @ 2014-11-12 10:56 UTC (permalink / raw)
To: Sebastian Hesselbarth; +Cc: Thomas Petazzoni, barebox
Hello again,
here come the recent insights.
On Tue, Nov 11, 2014 at 10:06:49AM +0100, Uwe Kleine-König wrote:
> shouldn't it? It has the address 192.168.77.1). Running "ping 192.168.77.1"
> seems to result in packages like this:
>
> 10:01:30.233928 42:40:00:10:40:60 > 00:00:00:34:00:12, ethertype MOP RC (0x6002), length 60:
> 0x0000: 0000 0034 0012 4240 0010 4060 6002 4000 ...4..B@..@``.@.
> 0x0010: 0054 8080 0012 4100 0002 c095 08e8 01a0 .T....A.........
> 0x0020: 1420 0020 8001 1020 0000 0000 0000 0000 ................
> 0x0030: 0000 0000 0000 0000 0000 0000 ............
>
> which is utter nonsense.
I sprinkled printfs over the network driver. The packet that is intended
to be sent looks ok:
Send a packet (len = 42, txdesc=0x01f15000):
01f12040: ff ff ff ff ff ff 28 c6 8e 36 df 57 08 06 00 01 ......(..6.W....
01f12050: 08 00 06 04 00 01 28 c6 8e 36 df 57 c0 a8 4d 85 ......(..6.W..M.
01f12060: 00 00 00 00 00 00 c0 a8 4d 01 ........M.
That's an ARP request asking for the address of 192.168.77.1 which is
expected. After that, both the descriptor and the data buffer look ok:
barebox:/ md 0x01f15000+32
01f15000: fefeffff 002a6fef 01f12040 f7effff4 .....o*.@ ......
01f15010: fcfefcfa ff2fbff6 fdfbffef 01f14ff8 ....../......O..
barebox:/ md -b 0x01f12040+42
01f12040: ff ff ff ff ff ff 28 c6 8e 36 df 57 08 06 00 01 ......(..6.W....
01f12050: 08 00 06 04 00 01 28 c6 8e 36 df 57 c0 a8 4d 85 ......(..6.W..M.
01f12060: 00 00 00 00 00 00 c0 a8 4d 01 ........M.
And I don't see what this has to do with the packet that enters my router:
10:26:31.133258 fe:bf:f7:f3:fb:7f (oui Unknown) > da:74:f7:fc:fb:fa (oui Unknown), ethertype Unknown (0xdfbf), length 60:
0x0000: da74 f7fc fbfa febf f7f3 fb7f dfbf fffb .t..............
0x0010: dffd ffea 7ffd c6e7 fffb faff febd fb5f ..............._
0x0020: fefb effc fefc eff5 0000 0000 0000 0000 ................
0x0030: 0000 0000 0000 0000 0000 0000 ............
The size looks OK (it was increased from 42 to 60 because that's the
minimal size that is supported by ethernet). So my theory is that either
the phy or some setting in the ethernet address range is broken.
The output of
md -s /dev/phy1
looks sane, too:
barebox:/ md -s /dev/phy1
00000000: 796d1140 0e900141 cde101e1 2001000f @.myA..........
00000010: 03004502 00003800 00000000 30000000 .E...8.........0
00000020: bc083060 1c400080 00000020 00000000 `0....@. .......
00000030: 00000000 00000040 00000000 00000000 ....@...........
It seems to be not possible to easily dump the register space in both
U-Boot and barebox for comparison. md 0xf1074000+0x4000 just hangs
somewhere in the middle.
A difference between U-Boot and barebox is the location where the
internal registers are mapped. Maybe something that depends on U-Boot's
memory layout leaks into barebox because I do 2nd stage booting?
Out of ideas at the moment. :-(
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-12 10:56 ` Uwe Kleine-König
@ 2014-11-12 11:22 ` Sebastian Hesselbarth
2014-11-13 9:09 ` Uwe Kleine-König
0 siblings, 1 reply; 25+ messages in thread
From: Sebastian Hesselbarth @ 2014-11-12 11:22 UTC (permalink / raw)
To: Uwe Kleine-König; +Cc: Thomas Petazzoni, barebox
On 11/12/2014 11:56 AM, Uwe Kleine-König wrote:
> Hello again,
>
> here come the recent insights.
[...]
>
> It seems to be not possible to easily dump the register space in both
> U-Boot and barebox for comparison. md 0xf1074000+0x4000 just hangs
> somewhere in the middle.
>
> A difference between U-Boot and barebox is the location where the
> internal registers are mapped. Maybe something that depends on U-Boot's
> memory layout leaks into barebox because I do 2nd stage booting?
>
> Out of ideas at the moment. :-(
Uwe,
Nice comparison, but did you double check caches are disabled? There is
no support for Dcache on mvebu SoCs in barebox atm.
Sebastian
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-12 11:22 ` Sebastian Hesselbarth
@ 2014-11-13 9:09 ` Uwe Kleine-König
2014-11-13 9:53 ` Sebastian Hesselbarth
0 siblings, 1 reply; 25+ messages in thread
From: Uwe Kleine-König @ 2014-11-13 9:09 UTC (permalink / raw)
To: Sebastian Hesselbarth; +Cc: Thomas Petazzoni, barebox
On Wed, Nov 12, 2014 at 12:22:22PM +0100, Sebastian Hesselbarth wrote:
> On 11/12/2014 11:56 AM, Uwe Kleine-König wrote:
> >Hello again,
> >
> >here come the recent insights.
> [...]
> >
> >It seems to be not possible to easily dump the register space in both
> >U-Boot and barebox for comparison. md 0xf1074000+0x4000 just hangs
> >somewhere in the middle.
> >
> >A difference between U-Boot and barebox is the location where the
> >internal registers are mapped. Maybe something that depends on U-Boot's
> >memory layout leaks into barebox because I do 2nd stage booting?
> >
> >Out of ideas at the moment. :-(
>
> Uwe,
>
> Nice comparison, but did you double check caches are disabled? There is
> no support for Dcache on mvebu SoCs in barebox atm.
I would expect that U-Boot disables caches on go. But I remember there
was a bug in that area some time ago.
Now I saw a different behaviour:
Marvell>> dhcp
BOOTP broadcast 1
*** Unhandled DHCP Option in OFFER/ACK: 28
*** Unhandled DHCP Option in OFFER/ACK: 28
DHCP client bound to address 192.168.77.133
Marvell>> tftp barebox-netgear-rn104-2nd.img
Using egiga1 device
TFTP from server 192.168.77.157; our IP address is 192.168.77.133
Filename 'barebox-netgear-rn104-2nd.img'.
Load address: 0x2000000
Loading: ####################
done
Bytes transferred = 292299 (475cb hex)
Marvell>> md 0x01f15000
That is where the descriptor ...
01f15000: ffffffff ffffffff ffffffff ffffffff ................
01f15010: ffffffff ffffffff ffffffff ffffffff ................
01f15020: ffffffff ffffffff ffffffff ffffffff ................
01f15030: ffffffff ffffffff ffffffff ffffffff ................
01f15040: ffffffff ffffffff ffffffff ffffffff ................
01f15050: ffffffff ffffffff ffffffff ffffffff ................
01f15060: ffffffff ffffffff ffffffff ffffffff ................
01f15070: ffffffff ffffffff ffffffff ffffffff ................
01f15080: ffffffff ffffffff ffffffff ffffffff ................
01f15090: ffffffff ffffffff ffffffff ffffffff ................
01f150a0: ffffffff ffffffff ffffffff ffffffff ................
01f150b0: ffffffff ffffffff ffffffff ffffffff ................
01f150c0: ffffffff ffffffff ffffffff ffffffff ................
01f150d0: ffffffff ffffffff ffffffff ffffffff ................
01f150e0: ffffffff ffffffff ffffffff ffffffff ................
01f150f0: ffffffff ffffffff ffffffff ffffffff ................
Marvell>> md 0x01f12040
... and the actual data will be located by barebox:
01f12040: ffffffff ffffffff ffffffff ffffffff ................
01f12050: ffffffff ffffffff ffffffff ffffffff ................
01f12060: ffffffff ffffffff ffffffff ffffffff ................
01f12070: ffffffff ffffffff ffffffff ffffffff ................
01f12080: ffffffff ffffffff ffffffff ffffffff ................
01f12090: ffffffff ffffffff ffffffff ffffffff ................
01f120a0: ffffffff ffffffff ffffffff ffffffff ................
01f120b0: ffffffff ffffffff ffffffff ffffffff ................
01f120c0: ffffffff ffffffff ffffffff ffffffff ................
01f120d0: ffffffff ffffffff ffffffff ffffffff ................
01f120e0: ffffffff ffffffff ffffffff ffffffff ................
01f120f0: ffffffff ffffffff ffffffff ffffffff ................
01f12100: ffffffff ffffffff ffffffff ffffffff ................
01f12110: ffffffff ffffffff ffffffff ffffffff ................
01f12120: ffffffff ffffffff ffffffff ffffffff ................
01f12130: ffffffff ffffffff ffffffff ffffffff ................
Marvell>> go $loadaddr
## Starting application at 0x02000000 ...
barebox 2014.11.0-00127-g263044f25b47-dirty #14 Thu Nov 13 09:26:54 CET 2014
Board: NETGEAR ReadyNAS 104
SoC: Marvell 6710 rev 1
mdio_bus: miibus0: probed
mvneta_setup_tx_rx: port = 0x01f11210, regbase = f1070000
mvneta_setup_tx_rx: port = 0x01f11520, regbase = f1074000
eth1: got preset MAC address: 28:c6:8e:36:df:57
of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
of_get_named_gpio_flags: unable to get gpio num of device pca95540: -19
malloc space: 0x01f00000 -> 0x03dfffff (size 31 MiB)
environment load /dev/env0: No such file or directory
Maybe you have to create the partition.
no valid environment found on /dev/env0. Using default environment
running /env/bin/init...
/env/bin/init not found
barebox:/ ethact eth1
barebox:/ eth1.ipaddr=192.168.77.133
barebox:/ eth1.netmask=255.255.255.0
barebox:/ ping 192.168.77.1
eth1: 1000Mbps full duplex link detected
Send a packet (len = 42, txdesc=0x01f15000):
01f12040: ff ff ff ff ff ff 28 c6 8e 36 df 57 08 06 00 01 ......(..6.W....
01f12050: 08 00 06 04 00 01 28 c6 8e 36 df 57 c0 a8 4d 85 ......(..6.W..M.
01f12060: 00 00 00 00 00 00 c0 a8 4d 01 ........M.
eth1: transmit error 3
ping failed: I/O error
Hmm, never saw an I/O error before. What does error 3 mean?
barebox:/ md 0x01f15000
01f15000: ffffffff 002affff 01f12040 ffffffff ......*.@ ......
01f15010: ffffffff ffffffff ffffffff 01f14ff8 .............O..
01f15020: 00000028 03e303f0 03e30408 00000000 (...............
01f15030: 00000000 01f11fd8 00000000 03e616fc ................
01f15040: 00000000 01f15070 01f11fbc 00000028 ....pP......(...
01f15050: 03e303f0 03e30408 00000000 00000000 ................
01f15060: 01f1507c 00000000 03e616fc 00000000 |P..............
01f15070: 01f150b0 01f15044 00000010 746f6f62 .P..DP......boot
01f15080: 666f2e6d 65657274 01f15000 00000028 m.oftree.P..(...
01f15090: 03e303f0 03e30408 00000000 00000000 ................
01f150a0: 01f150bc 00000000 03e616fc 00000000 .P..............
01f150b0: 01f150f0 01f15070 00000010 746f6f62 .P..pP......boot
01f150c0: 6e692e6d 64727469 01f15000 00000028 m.initrd.P..(...
01f150d0: 03e303f0 03e30408 00000000 00000000 ................
01f150e0: 01f150fc 00000000 03e616fc 00000000 .P..............
01f150f0: 01f15224 01f150b0 00000018 746f6f62 $R...P......boot
barebox:/ md 0x01f12040
01f12040: ffffffff c628ffff 57df368e 01000608 ......(..6.W....
01f12050: 04060008 c6280100 57df368e 854da8c0 ......(..6.W..M.
01f12060: 00000000 a8c00000 ffff014d ffffffff ........M.......
01f12070: ffffffff ffffffff ffffffff ffffffff ................
01f12080: ffffffff ffffffff ffffffff ffffffff ................
01f12090: ffffffff ffffffff ffffffff ffffffff ................
01f120a0: ffffffff ffffffff ffffffff ffffffff ................
01f120b0: ffffffff ffffffff ffffffff ffffffff ................
01f120c0: ffffffff ffffffff ffffffff ffffffff ................
01f120d0: ffffffff ffffffff ffffffff ffffffff ................
01f120e0: ffffffff ffffffff ffffffff ffffffff ................
01f120f0: ffffffff ffffffff ffffffff ffffffff ................
01f12100: ffffffff ffffffff ffffffff ffffffff ................
01f12110: ffffffff ffffffff ffffffff ffffffff ................
01f12120: ffffffff ffffffff ffffffff ffffffff ................
01f12130: ffffffff ffffffff ffffffff ffffffff ................
That looks ok. And when I warm reset and look at these memory locations
using U-Boot again, they are still holding that arp packet. So if it's
really a cache problem, the cache is very insistent and U-Boot has a
problem, too.
Furthermore Sascha interpreted
barebox:/ cpuinfo
implementer: Marvell Semiconductor Inc.
architecture: v7
core: unknown r1p1
cache: 512 bytes (linelen = 64)
Control register: A W P D L Z I DT IT U XP
as: The MMU is off (as there is no M in the Control register line) and
so caches must be off, too.
Looking into the vendor U-Boot sources and they didn't change
drivers/net/kirkwood_egiga.c compared to v2009.08.
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-13 9:09 ` Uwe Kleine-König
@ 2014-11-13 9:53 ` Sebastian Hesselbarth
2014-11-13 10:46 ` Uwe Kleine-König
0 siblings, 1 reply; 25+ messages in thread
From: Sebastian Hesselbarth @ 2014-11-13 9:53 UTC (permalink / raw)
To: Uwe Kleine-König; +Cc: Thomas Petazzoni, barebox
On 11/13/2014 10:09 AM, Uwe Kleine-König wrote:
> On Wed, Nov 12, 2014 at 12:22:22PM +0100, Sebastian Hesselbarth wrote:
>> On 11/12/2014 11:56 AM, Uwe Kleine-König wrote:
>>> Hello again,
>>>
>>> here come the recent insights.
>> [...]
>>>
>>> It seems to be not possible to easily dump the register space in both
>>> U-Boot and barebox for comparison. md 0xf1074000+0x4000 just hangs
>>> somewhere in the middle.
>>>
>>> A difference between U-Boot and barebox is the location where the
>>> internal registers are mapped. Maybe something that depends on U-Boot's
>>> memory layout leaks into barebox because I do 2nd stage booting?
>>>
>>> Out of ideas at the moment. :-(
>>
>> Uwe,
>>
>> Nice comparison, but did you double check caches are disabled? There is
>> no support for Dcache on mvebu SoCs in barebox atm.
> I would expect that U-Boot disables caches on go. But I remember there
> was a bug in that area some time ago.
Why should U-Boot do anything on go except jumping to that location?
> Now I saw a different behaviour:
Let's start from scratch and change one thing at a time:
Can you try to UART boot barebox directly and try both eth interfaces?
If that already does not work we have to look at barebox only.
Sebastian
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-13 9:53 ` Sebastian Hesselbarth
@ 2014-11-13 10:46 ` Uwe Kleine-König
2014-11-13 11:31 ` Sebastian Hesselbarth
0 siblings, 1 reply; 25+ messages in thread
From: Uwe Kleine-König @ 2014-11-13 10:46 UTC (permalink / raw)
To: Sebastian Hesselbarth; +Cc: Thomas Petazzoni, barebox
On Thu, Nov 13, 2014 at 10:53:46AM +0100, Sebastian Hesselbarth wrote:
> On 11/13/2014 10:09 AM, Uwe Kleine-König wrote:
> >On Wed, Nov 12, 2014 at 12:22:22PM +0100, Sebastian Hesselbarth wrote:
> >>On 11/12/2014 11:56 AM, Uwe Kleine-König wrote:
> >>>Hello again,
> >>>
> >>>here come the recent insights.
> >>[...]
> >>>
> >>>It seems to be not possible to easily dump the register space in both
> >>>U-Boot and barebox for comparison. md 0xf1074000+0x4000 just hangs
> >>>somewhere in the middle.
> >>>
> >>>A difference between U-Boot and barebox is the location where the
> >>>internal registers are mapped. Maybe something that depends on U-Boot's
> >>>memory layout leaks into barebox because I do 2nd stage booting?
> >>>
> >>>Out of ideas at the moment. :-(
> >>
> >>Uwe,
> >>
> >>Nice comparison, but did you double check caches are disabled? There is
> >>no support for Dcache on mvebu SoCs in barebox atm.
> >I would expect that U-Boot disables caches on go. But I remember there
> >was a bug in that area some time ago.
>
> Why should U-Boot do anything on go except jumping to that location?
>
> >Now I saw a different behaviour:
>
> Let's start from scratch and change one thing at a time:
>
> Can you try to UART boot barebox directly and try both eth interfaces?
I don't manage to boot via UART. The usual outcome is:
Sending boot message. Please reboot the target...\
Sending boot image...
0 % [......................................................................]
2 % [......................................................................]
5 % [......................................................................]
7 % [......................................................................]
10 % [......................................................................]
13 % [..................................xmodem: Connection timed out
If I try to boot a barebox-globalscale-mirabox.img (provided by
ezequielg in #mvlinux), I get:
$ scripts/kwboot -b ../barebox-globalscale-mirabox.img -t /dev/ttyUSB1
Sending boot message. Please reboot the target...\
Sending boot image...
0 % [......................................................................]
5 % [......................................................................]
10 % [......................................................................]
14 % [......................................................................]
19 % [......................................................................]
24 % [.................................DDR3 Training Sequence - Ver 2.1.6
DDR3 Training Sequence - Number of DIMMs detected: 1
+xmodem: Connection timed out
And funny enough, during testing I added
select(fd + 1, &rfds, NULL, NULL, &tv);
to kwboot_tty_recv after the read, this results reproduibly into a
single NAK and "BootROM: Invalid header checksum".
When booting from nand (as shipped by Netgear) the output starts with:
------------------------
BootROM 1.08
Booting from NAND flash
DDR3 Training Sequence - Ver 2.1.7
DDR3 Training Sequence - Ended Successfully
BootROM: Image checksum verification PASSED
...
------------------------
> If that already does not work we have to look at barebox only.
That would be great, yes.
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-13 10:46 ` Uwe Kleine-König
@ 2014-11-13 11:31 ` Sebastian Hesselbarth
2014-11-13 18:44 ` Uwe Kleine-König
0 siblings, 1 reply; 25+ messages in thread
From: Sebastian Hesselbarth @ 2014-11-13 11:31 UTC (permalink / raw)
To: Uwe Kleine-König; +Cc: Thomas Petazzoni, barebox
On 11/13/2014 11:46 AM, Uwe Kleine-König wrote:
> On Thu, Nov 13, 2014 at 10:53:46AM +0100, Sebastian Hesselbarth wrote:
>> On 11/13/2014 10:09 AM, Uwe Kleine-König wrote:
>>> On Wed, Nov 12, 2014 at 12:22:22PM +0100, Sebastian Hesselbarth wrote:
>>>> On 11/12/2014 11:56 AM, Uwe Kleine-König wrote:
>>>>> Hello again,
>>>>>
>>>>> here come the recent insights.
>>>> [...]
>>>>>
>>>>> It seems to be not possible to easily dump the register space in both
>>>>> U-Boot and barebox for comparison. md 0xf1074000+0x4000 just hangs
>>>>> somewhere in the middle.
>>>>>
>>>>> A difference between U-Boot and barebox is the location where the
>>>>> internal registers are mapped. Maybe something that depends on U-Boot's
>>>>> memory layout leaks into barebox because I do 2nd stage booting?
>>>>>
>>>>> Out of ideas at the moment. :-(
>>>>
>>>> Uwe,
>>>>
>>>> Nice comparison, but did you double check caches are disabled? There is
>>>> no support for Dcache on mvebu SoCs in barebox atm.
>>> I would expect that U-Boot disables caches on go. But I remember there
>>> was a bug in that area some time ago.
>>
>> Why should U-Boot do anything on go except jumping to that location?
>>
>>> Now I saw a different behaviour:
>>
>> Let's start from scratch and change one thing at a time:
>>
>> Can you try to UART boot barebox directly and try both eth interfaces?
> I don't manage to boot via UART. The usual outcome is:
>
> Sending boot message. Please reboot the target...\
> Sending boot image...
> 0 % [......................................................................]
> 2 % [......................................................................]
> 5 % [......................................................................]
> 7 % [......................................................................]
> 10 % [......................................................................]
> 13 % [..................................xmodem: Connection timed out
>
> If I try to boot a barebox-globalscale-mirabox.img (provided by
> ezequielg in #mvlinux), I get:
>
> $ scripts/kwboot -b ../barebox-globalscale-mirabox.img -t /dev/ttyUSB1
> Sending boot message. Please reboot the target...\
> Sending boot image...
> 0 % [......................................................................]
> 5 % [......................................................................]
> 10 % [......................................................................]
> 14 % [......................................................................]
> 19 % [......................................................................]
> 24 % [.................................DDR3 Training Sequence - Ver 2.1.6
> DDR3 Training Sequence - Number of DIMMs detected: 1
> +xmodem: Connection timed out
That indeed is strange and indicates some general problem. Can you retry
with setting the baudrate to 115200 (-b 115200 IIRC).
> And funny enough, during testing I added
>
> select(fd + 1, &rfds, NULL, NULL, &tv);
>
> to kwboot_tty_recv after the read, this results reproduibly into a
> single NAK and "BootROM: Invalid header checksum".
>
> When booting from nand (as shipped by Netgear) the output starts with:
You need to set boot source byte to UART (0x52 IIRC). Otherwise the NAND
image will not boot from UART boot mode. Check out kwbimage, it should
show you where and how to modify the binary. I cannot recall if kwbimage
can convert it for you already, you also need to update the image header
CRC.
Sebastian
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-13 11:31 ` Sebastian Hesselbarth
@ 2014-11-13 18:44 ` Uwe Kleine-König
2014-11-14 8:21 ` Sebastian Hesselbarth
0 siblings, 1 reply; 25+ messages in thread
From: Uwe Kleine-König @ 2014-11-13 18:44 UTC (permalink / raw)
To: Sebastian Hesselbarth; +Cc: Thomas Petazzoni, barebox
Hallo Sebastian,
On Thu, Nov 13, 2014 at 12:31:08PM +0100, Sebastian Hesselbarth wrote:
> >I don't manage to boot via UART. The usual outcome is:
> >
> >Sending boot message. Please reboot the target...\
> >Sending boot image...
> > 0 % [......................................................................]
> > 2 % [......................................................................]
> > 5 % [......................................................................]
> > 7 % [......................................................................]
> > 10 % [......................................................................]
> > 13 % [..................................xmodem: Connection timed out
> >
> >If I try to boot a barebox-globalscale-mirabox.img (provided by
> >ezequielg in #mvlinux), I get:
> >
> >$ scripts/kwboot -b ../barebox-globalscale-mirabox.img -t /dev/ttyUSB1
> >Sending boot message. Please reboot the target...\
> >Sending boot image...
> > 0 % [......................................................................]
> > 5 % [......................................................................]
> > 10 % [......................................................................]
> > 14 % [......................................................................]
> > 19 % [......................................................................]
> > 24 % [.................................DDR3 Training Sequence - Ver 2.1.6
> >DDR3 Training Sequence - Number of DIMMs detected: 1
> >+xmodem: Connection timed out
>
> That indeed is strange and indicates some general problem. Can you retry
> with setting the baudrate to 115200 (-b 115200 IIRC).
Doesn't change anything. In fact the tty is already configured for
115200 Baud. And I would expect that on a mismatch it wouldn't always
die just after the header is uploaded.
Just noticed that my binary.0 was corrupted as I extraced it from a nand
dump that also included the oob area ...
With a proper image I get barebox up now.
> >And funny enough, during testing I added
> >
> > select(fd + 1, &rfds, NULL, NULL, &tv);
> >
> >to kwboot_tty_recv after the read, this results reproduibly into a
> >single NAK and "BootROM: Invalid header checksum".
This is still not explained. I would have expected that this select
doesn't do anything noticable on the remote end.
> >When booting from nand (as shipped by Netgear) the output starts with:
>
> You need to set boot source byte to UART (0x52 IIRC). Otherwise the NAND
Just for the log: UART = 0x69.
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-13 18:44 ` Uwe Kleine-König
@ 2014-11-14 8:21 ` Sebastian Hesselbarth
2014-11-14 20:48 ` Uwe Kleine-König
0 siblings, 1 reply; 25+ messages in thread
From: Sebastian Hesselbarth @ 2014-11-14 8:21 UTC (permalink / raw)
To: Uwe Kleine-König; +Cc: Thomas Petazzoni, barebox
On 11/13/2014 07:44 PM, Uwe Kleine-König wrote:
> On Thu, Nov 13, 2014 at 12:31:08PM +0100, Sebastian Hesselbarth wrote:
>>> $ scripts/kwboot -b ../barebox-globalscale-mirabox.img -t /dev/ttyUSB1
>>> Sending boot message. Please reboot the target...\
>>> Sending boot image...
>>> 0 % [......................................................................]
>>> 5 % [......................................................................]
>>> 10 % [......................................................................]
>>> 14 % [......................................................................]
>>> 19 % [......................................................................]
>>> 24 % [.................................DDR3 Training Sequence - Ver 2.1.6
>>> DDR3 Training Sequence - Number of DIMMs detected: 1
>>> +xmodem: Connection timed out
>>
>> That indeed is strange and indicates some general problem. Can you retry
>> with setting the baudrate to 115200 (-b 115200 IIRC).
> Doesn't change anything. In fact the tty is already configured for
> 115200 Baud. And I would expect that on a mismatch it wouldn't always
> die just after the header is uploaded.
>
> Just noticed that my binary.0 was corrupted as I extraced it from a nand
> dump that also included the oob area ...
>
> With a proper image I get barebox up now.
Great, does that help with the ethernet issues you have been seeing
before?
>>> And funny enough, during testing I added
>>>
>>> select(fd + 1, &rfds, NULL, NULL, &tv);
>>>
>>> to kwboot_tty_recv after the read, this results reproduibly into a
>>> single NAK and "BootROM: Invalid header checksum".
> This is still not explained. I would have expected that this select
> doesn't do anything noticable on the remote end.
I cannot tell where you added that select nor can I tell why it breaks
uart boot mode. If you modifiy the code, I admit, you'll have to find
out yourself why it breaks.
Remember that the uart boot mode it neither well documented nor well
suited for "defined timings".. you'll have to hit some timing windows
otherwise it will fail.
>>> When booting from nand (as shipped by Netgear) the output starts with:
>>
>> You need to set boot source byte to UART (0x52 IIRC). Otherwise the NAND
> Just for the log: UART = 0x69.
Right.
Sebastian
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP
2014-11-14 8:21 ` Sebastian Hesselbarth
@ 2014-11-14 20:48 ` Uwe Kleine-König
0 siblings, 0 replies; 25+ messages in thread
From: Uwe Kleine-König @ 2014-11-14 20:48 UTC (permalink / raw)
To: Sebastian Hesselbarth; +Cc: Thomas Petazzoni, barebox
Hello Sebastian,
On Fri, Nov 14, 2014 at 09:21:00AM +0100, Sebastian Hesselbarth wrote:
> On 11/13/2014 07:44 PM, Uwe Kleine-König wrote:
> >With a proper image I get barebox up now.
>
> Great, does that help with the ethernet issues you have been seeing
> before?
No, still having issues with ethernet. Without U-Boot nothing reaches my
router, not even broken packages. Sending packages now always ends in
"eth1: transmit error 3". Didn't debug further what this means, yet.
Best regards
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | http://www.pengutronix.de/ |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2014-11-14 20:49 UTC | newest]
Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-11-09 14:56 [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP Ezequiel Garcia
2014-11-09 14:56 ` [PATCH v3 1/4] ARM: mvebu: Enable PUP register Ezequiel Garcia
2014-11-09 14:56 ` [PATCH v3 2/4] net: phy: Support Marvell 88EE1545 PHY Ezequiel Garcia
2014-11-09 14:56 ` [PATCH v3 3/4] net: phy: Support Marvell 88EE1543 PHY Ezequiel Garcia
2014-11-10 6:57 ` Sascha Hauer
2014-11-09 14:56 ` [PATCH v3 4/4] net: Add driver for Armada 370/XP 10/100/1000 Mbps network controller Ezequiel Garcia
2014-11-10 8:06 ` [PATCH v3 0/4] mvebu: Add network support for Armada 370/XP Uwe Kleine-König
2014-11-10 18:10 ` Ezequiel Garcia
2014-11-10 18:43 ` Uwe Kleine-König
2014-11-10 19:36 ` Sebastian Hesselbarth
2014-11-11 9:06 ` Uwe Kleine-König
2014-11-11 14:25 ` Ezequiel Garcia
2014-11-11 14:31 ` Thomas Petazzoni
2014-11-11 14:34 ` Ezequiel Garcia
2014-11-12 7:03 ` Sascha Hauer
2014-11-11 20:35 ` Uwe Kleine-König
2014-11-12 10:56 ` Uwe Kleine-König
2014-11-12 11:22 ` Sebastian Hesselbarth
2014-11-13 9:09 ` Uwe Kleine-König
2014-11-13 9:53 ` Sebastian Hesselbarth
2014-11-13 10:46 ` Uwe Kleine-König
2014-11-13 11:31 ` Sebastian Hesselbarth
2014-11-13 18:44 ` Uwe Kleine-König
2014-11-14 8:21 ` Sebastian Hesselbarth
2014-11-14 20:48 ` Uwe Kleine-König
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox