[PATCH] net: zynq: Add support for GEM reset

Michal Simek michal.simek at xilinx.com
Mon Dec 6 16:25:36 CET 2021



On 11/22/21 11:33, Ramon Fried wrote:
> On Mon, Nov 22, 2021 at 9:34 AM Michal Simek <michal.simek at xilinx.com> wrote:
>>
>>
>>
>> On 11/21/21 20:12, Ramon Fried wrote:
>>> On Thu, Nov 18, 2021 at 2:08 PM Michal Simek <michal.simek at xilinx.com> wrote:
>>>>
>>>> Perform reset before core initialization.
>>> Does it fix any apparent issue ? How did it work before that ?
>>
>> Standard flow which I would say close to 99% users are using getting all
>> IPs out of reset that there is no need to reset IP again. This is
>> because of all low level initialization is done in previous bootloader
>> stage.
>> In SOM case which we are working on these IPs are not touched by
>> previous bootloader stage that's why reset needs to be called before IP
>> is accessed to make sure that it is in correct state.
>>
>> Thanks,
>> Michal
>>
>>
>>>>
>>>> Signed-off-by: Michal Simek <michal.simek at xilinx.com>
>>>> ---
>>>>
>>>>    drivers/net/zynq_gem.c | 26 ++++++++++++++++++++++++++
>>>>    1 file changed, 26 insertions(+)
>>>>
>>>> diff --git a/drivers/net/zynq_gem.c b/drivers/net/zynq_gem.c
>>>> index 91957757727d..5cbe8d28304b 100644
>>>> --- a/drivers/net/zynq_gem.c
>>>> +++ b/drivers/net/zynq_gem.c
>>>> @@ -21,6 +21,7 @@
>>>>    #include <asm/cache.h>
>>>>    #include <asm/io.h>
>>>>    #include <phy.h>
>>>> +#include <reset.h>
>>>>    #include <miiphy.h>
>>>>    #include <wait_bit.h>
>>>>    #include <watchdog.h>
>>>> @@ -217,6 +218,7 @@ struct zynq_gem_priv {
>>>>           bool int_pcs;
>>>>           bool dma_64bit;
>>>>           u32 clk_en_info;
>>>> +       struct reset_ctl_bulk resets;
>>>>    };
>>>>
>>>>    static int phy_setup_op(struct zynq_gem_priv *priv, u32 phy_addr, u32 regnum,
>>>> @@ -688,12 +690,36 @@ static int zynq_gem_miiphy_write(struct mii_dev *bus, int addr, int devad,
>>>>           return phywrite(priv, addr, reg, value);
>>>>    }
>>>>
>>>> +static int zynq_gem_reset_init(struct udevice *dev)
>>>> +{
>>>> +       struct zynq_gem_priv *priv = dev_get_priv(dev);
>>>> +       int ret;
>>>> +
>>>> +       ret = reset_get_bulk(dev, &priv->resets);
>>>> +       if (ret == -ENOTSUPP || ret == -ENOENT)
>>>> +               return 0;
>>>> +       else if (ret)
>>>> +               return ret;
>>>> +
>>>> +       ret = reset_deassert_bulk(&priv->resets);
>>>> +       if (ret) {
>>>> +               reset_release_bulk(&priv->resets);
>>>> +               return ret;
>>>> +       }
>>>> +
>>>> +       return 0;
>>>> +}
>>>> +
>>>>    static int zynq_gem_probe(struct udevice *dev)
>>>>    {
>>>>           void *bd_space;
>>>>           struct zynq_gem_priv *priv = dev_get_priv(dev);
>>>>           int ret;
>>>>
>>>> +       ret = zynq_gem_reset_init(dev);
>>>> +       if (ret)
>>>> +               return ret;
>>>> +
>>>>           /* Align rxbuffers to ARCH_DMA_MINALIGN */
>>>>           priv->rxbuffers = memalign(ARCH_DMA_MINALIGN, RX_BUF * PKTSIZE_ALIGN);
>>>>           if (!priv->rxbuffers)
>>>> --
>>>> 2.33.1
>>>>
> Can you add the above description to the commit message ?
> 

sure. v2 sent.

M


More information about the U-Boot mailing list