[OpenWrt-Devel] [PATCH v5 1/5] ar71xx: add eth rx delay for qca955x platforms
John Crispin
blogic at openwrt.org
Sat Nov 21 14:45:23 EST 2015
Hi,
sorry to jump in this late at a V5 but i have a few concerns. see inline
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
> ++}
> ++
> + static int ath79_eth_instance __initdata;
> + void __init ath79_register_eth(unsigned int id)
> + {
> +--- a/arch/mips/ath79/dev-eth.h
> ++++ b/arch/mips/ath79/dev-eth.h
> +@@ -49,5 +49,6 @@
> + void ath79_setup_ar934x_eth_cfg(u32 mask);
> + void ath79_setup_ar934x_eth_rx_delay(unsigned int rxd, unsigned int rxdv);
> + void ath79_setup_qca955x_eth_cfg(u32 mask);
> ++void ath79_setup_qca955x_eth_rx_delay(unsigned int rxd, unsigned int rxdv);
> +
> + #endif /* _ATH79_DEV_ETH_H */
> +--- 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
> +
> + #endif /* __ASM_MACH_AR71XX_REGS_H */
>
_______________________________________________
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