| From 1c45ba93d34cd6af75228f34d0675200c81738b5 Mon Sep 17 00:00:00 2001 |
| From: Marek Vasut <marex@denx.de> |
| Date: Wed, 20 Jan 2021 04:05:02 +0100 |
| Subject: net: dsa: microchip: Adjust reset release timing to match reference reset circuit |
| |
| From: Marek Vasut <marex@denx.de> |
| |
| commit 1c45ba93d34cd6af75228f34d0675200c81738b5 upstream. |
| |
| KSZ8794CNX datasheet section 8.0 RESET CIRCUIT describes recommended |
| circuit for interfacing with CPU/FPGA reset consisting of 10k pullup |
| resistor and 10uF capacitor to ground. This circuit takes ~100 ms to |
| rise enough to release the reset. |
| |
| For maximum supply voltage VDDIO=3.3V VIH=2.0V R=10kR C=10uF that is |
| VDDIO - VIH |
| t = R * C * -ln( ------------- ) = 10000*0.00001*-(-0.93)=0.093 s |
| VDDIO |
| so we need ~95 ms for the reset to really de-assert, and then the |
| original 100us for the switch itself to come out of reset. Simply |
| msleep() for 100 ms which fits the constraint with a bit of extra |
| space. |
| |
| Fixes: 5b797980908a ("net: dsa: microchip: Implement recommended reset timing") |
| Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> |
| Signed-off-by: Marek Vasut <marex@denx.de> |
| Cc: Michael Grzeschik <m.grzeschik@pengutronix.de> |
| Reviewed-by: Paul Barker <pbarker@konsulko.com> |
| Reviewed-by: Andrew Lunn <andrew@lunn.ch> |
| Link: https://lore.kernel.org/r/20210120030502.617185-1-marex@denx.de |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/dsa/microchip/ksz_common.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c |
| index 489963664443..389abfd27770 100644 |
| --- a/drivers/net/dsa/microchip/ksz_common.c |
| +++ b/drivers/net/dsa/microchip/ksz_common.c |
| @@ -400,7 +400,7 @@ int ksz_switch_register(struct ksz_device *dev, |
| gpiod_set_value_cansleep(dev->reset_gpio, 1); |
| usleep_range(10000, 12000); |
| gpiod_set_value_cansleep(dev->reset_gpio, 0); |
| - usleep_range(100, 1000); |
| + msleep(100); |
| } |
| |
| mutex_init(&dev->dev_mutex); |
| -- |
| 2.30.0 |
| |