0059-ar71xx-Use-PHY-fixups-for-Open-Mesh-MR1750.patch 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. From: Sven Eckelmann <sven.eckelmann@open-mesh.com>
  2. Date: Wed, 16 Mar 2016 09:27:14 +0000
  3. Subject: ar71xx: Use PHY fixups for Open Mesh MR1750
  4. The delays of PHY/MAC on the MR1750 are done by u-boot and OpenWrt in
  5. different ways. u-boot only modifies the ETH_CFG of the QCA955x based on
  6. the link speed. But OpenWrt can only modify the PHY delays based on the
  7. link speed.
  8. This can lead to communication problems when u-boot initializes the ETH_CFG
  9. for a specific link speed (e.g. 10BASE-T) but then OpenWrt the sets the PHY
  10. delays to an incompatible value.
  11. Instead reset the ETH_CFG delay bits of the QCA955x to a specific value and
  12. only rely on the AT803x PHY settings.
  13. Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com>
  14. Backport of r49031
  15. Forwarded: https://patchwork.ozlabs.org/patch/624186/
  16. diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c
  17. index 8ace02f..f9e45bd 100644
  18. --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c
  19. +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-mr1750.c
  20. @@ -22,6 +22,7 @@
  21. #include <linux/ar8216_platform.h>
  22. #include <asm/mach-ath79/ar71xx_regs.h>
  23. +#include <linux/platform_data/phy-at803x.h>
  24. #include "common.h"
  25. #include "dev-ap9x-pci.h"
  26. @@ -92,14 +93,29 @@ static struct gpio_keys_button mr1750_gpio_keys[] __initdata = {
  27. },
  28. };
  29. +static struct at803x_platform_data mr1750_at803x_data = {
  30. + .disable_smarteee = 1,
  31. + .enable_rgmii_rx_delay = 1,
  32. + .enable_rgmii_tx_delay = 0,
  33. + .fixup_rgmii_tx_delay = 1,
  34. +};
  35. +
  36. +static struct mdio_board_info mr1750_mdio0_info[] = {
  37. + {
  38. + .bus_id = "ag71xx-mdio.0",
  39. + .phy_addr = 5,
  40. + .platform_data = &mr1750_at803x_data,
  41. + },
  42. +};
  43. +
  44. static void __init mr1750_setup(void)
  45. {
  46. u8 *art = (u8 *)KSEG1ADDR(0x1fff0000);
  47. u8 mac[6];
  48. - ath79_eth0_pll_data.pll_1000 = 0xbe000101;
  49. - ath79_eth0_pll_data.pll_100 = 0x80000101;
  50. - ath79_eth0_pll_data.pll_10 = 0x80001313;
  51. + ath79_eth0_pll_data.pll_1000 = 0xae000000;
  52. + ath79_eth0_pll_data.pll_100 = 0xa0000101;
  53. + ath79_eth0_pll_data.pll_10 = 0xa0001313;
  54. ath79_register_m25p80(NULL);
  55. @@ -116,6 +132,9 @@ static void __init mr1750_setup(void)
  56. ath79_setup_qca955x_eth_cfg(QCA955X_ETH_CFG_RGMII_EN);
  57. ath79_register_mdio(0, 0x0);
  58. + mdiobus_register_board_info(mr1750_mdio0_info,
  59. + ARRAY_SIZE(mr1750_mdio0_info));
  60. +
  61. ath79_init_mac(ath79_eth0_data.mac_addr, art + MR1750_MAC0_OFFSET, 0);
  62. /* GMAC0 is connected to the RMGII interface */