Message ID | 20210423014741.11858-1-ansuelsmth@gmail.com |
---|---|
Headers | show |
Series | Multiple improvement to qca8k stability | expand |
On 4/22/2021 6:47 PM, Ansuel Smith wrote: > Currently qca8337 switch are widely used on ipq8064 based router. > On these particular router it was notice a very unstable switch with > port not link detected as link with unknown speed, port dropping > randomly and general unreliability. Lots of testing and comparison > between this dsa driver and the original qsdk driver showed lack of some > additional delay and values. A main difference arised from the original > driver and the dsa one. The original driver didn't use MASTER regs to > read phy status and the dedicated mdio driver worked correctly. Now that > the dsa driver actually use these regs, it was found that these special > read/write operation required mutual exclusion to normal > qca8k_read/write operation. The add of mutex for these operation fixed > the random port dropping and now only the actual linked port randomly > dropped. Adding additional delay for set_page operation and fixing a bug > in the mdio dedicated driver fixed also this problem. The current driver > requires also more time to apply vlan switch. All of these changes and > tweak permit a now very stable and reliable dsa driver and 0 port > dropping. This series is currently tested by at least 5 user with > different routers and all reports positive results and no problems. Since all of these changes are improvements and not really bug fixes, please target them at the net-next tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/networking/netdev-FAQ.rst#n40 also, the subject for your patches should just be: net: dsa: qca8k: net: mdio: mdio-ipq8064: to be consistent with previous submissions in these files. > > Ansuel Smith (14): > drivers: net: dsa: qca8k: handle error with set_page > drivers: net: dsa: qca8k: tweak internal delay to oem spec > drivers: net: mdio: mdio-ip8064: improve busy wait delay > drivers: net: dsa: qca8k: apply suggested packet priority > drivers: net: dsa: qca8k: add support for qca8327 switch > devicetree: net: dsa: qca8k: Document new compatible qca8327 > drivers: net: dsa: qca8k: limit priority tweak to qca8337 switch > drivers: net: dsa: qca8k: add GLOBAL_FC settings needed for qca8327 > drivers: net: dsa: qca8k: add support for switch rev > drivers: net: dsa: qca8k: add support for specific QCA access function > drivers: net: dsa: qca8k: apply switch revision fix > drivers: net: dsa: qca8k: clear MASTER_EN after phy read/write > drivers: net: dsa: qca8k: protect MASTER busy_wait with mdio mutex > drivers: net: dsa: qca8k: enlarge mdio delay and timeout > > .../devicetree/bindings/net/dsa/qca8k.txt | 1 + > drivers/net/dsa/qca8k.c | 256 ++++++++++++++++-- > drivers/net/dsa/qca8k.h | 54 +++- > drivers/net/mdio/mdio-ipq8064.c | 36 ++- > 4 files changed, 304 insertions(+), 43 deletions(-) >
> @@ -1467,11 +1468,16 @@ qca8k_sw_probe(struct mdio_device *mdiodev) > gpiod_set_value_cansleep(priv->reset_gpio, 0); > } > > + /* get the switches ID from the compatible */ > + data = of_device_get_match_data(&mdiodev->dev); > + if (!data) > + return -ENODEV; > + > /* read the switches ID register */ > id = qca8k_read(priv, QCA8K_REG_MASK_CTRL); > id >>= QCA8K_MASK_CTRL_ID_S; > id &= QCA8K_MASK_CTRL_ID_M; > - if (id != QCA8K_ID_QCA8337) > + if (id != data->id) > return -ENODEV; It is useful to print an error message here: Found X, expected Y. Gives the DT writer an idea what they did wrong. Andrew