[OpenWrt-Devel] [PATCH v5 1/5] ar71xx: add eth rx delay for qca955x platforms

Christian Lamparter chunkeey at googlemail.com
Fri Nov 27 14:34:40 EST 2015


On Saturday, November 21, 2015 08:45:23 PM John Crispin wrote:
> Hi,
> 
> sorry to jump in this late at a V5 but i have a few concerns. see inline
Well, the *beautiful thing* of this platform is that Cisco charges people
a yearly fee if they want to stick with the original firmware. So people
are definitely interested in this openwrt port. Just look at the positive
response to the support thread [0].
 
> On 22/09/2015 18:49, Chris R Blake wrote:
> > From: Chris R Blake <chrisrblake93 at gmail.com>
> > 
> > This patch is to add support for qca955x_eth_rx_delay
> > to work with the qca955x SoC.
> > 
> > Signed-off-by: Chris R Blake <chrisrblake93 at gmail.com>
> > ---
> >  ...42-MIPS-ath79-add-qca955x-mac-tx-rx-delay.patch | 58 ++++++++++++++++++++++
> >  1 file changed, 58 insertions(+)
> >  create mode 100644 target/linux/ar71xx/patches-4.1/742-MIPS-ath79-add-qca955x-mac-tx-rx-delay.patch
> > 
> > diff --git a/target/linux/ar71xx/patches-4.1/742-MIPS-ath79-add-qca955x-mac-tx-rx-delay.patch b/target/linux/ar71xx/patches-4.1/742-MIPS-ath79-add-qca955x-mac-tx-rx-delay.patch
> > new file mode 100644
> > index 0000000..75e216e
> > --- /dev/null
> > +++ b/target/linux/ar71xx/patches-4.1/742-MIPS-ath79-add-qca955x-mac-tx-rx-delay.patch
> > @@ -0,0 +1,58 @@
> > +--- a/arch/mips/ath79/dev-eth.c
> > ++++ b/arch/mips/ath79/dev-eth.c
> > +@@ -823,6 +825,32 @@
> > + 	iounmap(base);
> > + }
> > +
> > ++void __init ath79_setup_qca955x_eth_rx_delay(unsigned int rxd,
> > ++					      unsigned int rxdv)
> > ++{
> > ++	void __iomem *base;
> > ++	u32 t;
> > ++
> > ++	rxd &= QCA955X_ETH_CFG_RXD_DELAY_MASK;
> > ++	rxdv &= QCA955X_ETH_CFG_RDV_DELAY_MASK;
> > ++
> > ++	base = ioremap(QCA955X_GMAC_BASE, QCA955X_GMAC_SIZE);
> > ++
> > ++	t = __raw_readl(base + QCA955X_GMAC_REG_ETH_CFG);
> > ++
> > ++	t &= ~(QCA955X_ETH_CFG_RXD_DELAY_MASK << QCA955X_ETH_CFG_RXD_DELAY_SHIFT |
> > ++	       QCA955X_ETH_CFG_RDV_DELAY_MASK << QCA955X_ETH_CFG_RDV_DELAY_SHIFT);
> > ++
> > ++	t |= (rxd << QCA955X_ETH_CFG_RXD_DELAY_SHIFT |
> > ++	      rxdv << QCA955X_ETH_CFG_RDV_DELAY_SHIFT);
> > ++
> > ++	__raw_writel(t, base + QCA955X_GMAC_REG_ETH_CFG);
> > ++	/* flush write */
> > ++	__raw_readl(base + QCA955X_GMAC_REG_ETH_CFG);
> > ++
> > ++	iounmap(base);
> 
> this is a pretty ugly way of doing it. the register is also modified at
> a different place which is also not optimal. the register is part of the
> ethernet macs io range so this magic setting should be applied inside
> the the actual driver. could you make such a change ?
> 
> 	John

Wait, the code for this function was just adapted (qca955x uses
slightly different registers and bitmask offsets) from a similar
function called:

void __init ath79_setup_ar934x_eth_rx_delay(unsigned int rxd,
                                            unsigned int rxdv)

which is also in the dev-eth.c [1] (added Felix). If this is
"pretty ugly" then what should be done about ath79_setup_ar934x_eth_rx_delay?
If it's just the function that bothers you, I can also pass the
rx/tx delays via the ath79_setup_qca955x_eth_cfg call. but I 
would like to keep the ar71xx_regs changes in place. Ok?

> > +--- a/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
> > ++++ b/arch/mips/include/asm/mach-ath79/ar71xx_regs.h
> > +@@ -1098,5 +1098,11 @@
> > +
> > + #define QCA955X_ETH_CFG_RGMII_EN	BIT(0)
> > + #define QCA955X_ETH_CFG_GE0_SGMII	BIT(6)
> > ++#define QCA955X_ETH_CFG_RXD_DELAY	BIT(14)
> > ++#define QCA955X_ETH_CFG_RXD_DELAY_MASK	0x3
> > ++#define QCA955X_ETH_CFG_RXD_DELAY_SHIFT	14
> > ++#define QCA955X_ETH_CFG_RDV_DELAY	BIT(16)
> > ++#define QCA955X_ETH_CFG_RDV_DELAY_MASK	0x3
> > ++#define QCA955X_ETH_CFG_RDV_DELAY_SHIFT	16

Regards,
Christian

[0] <https://forum.openwrt.org/viewtopic.php?id=59248>
[1] <https://dev.openwrt.org/changeset/45523>
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list