On Fri, Feb 25, 2022 at 2:43 PM Marek Vasut <ma...@denx.de> wrote: > > On 2/25/22 21:10, Adam Ford wrote: > > On Fri, Feb 25, 2022 at 2:08 PM Marek Vasut <ma...@denx.de> wrote: > >> > >> On 2/25/22 19:29, Adam Ford wrote: > >>> Some boards like the Beacon RZ/G2 SOM use either flags for > >>> tx-internal-delay-ps, rx-internal-delay-ps or rgmii-rxid. > >>> > >>> In Linux the APSR_RDM flag is set when either rx-internal-delay-ps > >>> is set or the mode is rgmii-rxid, and the APSR_TDM is set when > >>> tx-internal-delay-ps is found or rgmii-txid is set, and both > >>> are set if rgmii-id is set. > >>> > >>> The ravb driver in U-Boot driver was missing rgmii-rxid support, > >>> so add that support in a similar fashion to what is done in Linux. > >>> > >>> Signed-off-by: Adam Ford <aford...@gmail.com> > >>> --- > >>> V2: Add boolean for explit delays which skips the rgmii mode check > >>> if explicit delays are set. This more closely matches the > >>> behavior in Linux. Also add the same comments for the delays > >>> to match the comments found in Linux. > >>> > >>> diff --git a/drivers/net/ravb.c b/drivers/net/ravb.c > >>> index 1d1118c341..7bc8c84aaa 100644 > >>> --- a/drivers/net/ravb.c > >>> +++ b/drivers/net/ravb.c > >>> @@ -52,6 +52,7 @@ > >>> #define CSR_OPS 0x0000000F > >>> #define CSR_OPS_CONFIG BIT(1) > >>> > >>> +#define APSR_RDM BIT(13) > >>> #define APSR_TDM BIT(14) > >>> > >>> #define TCCR_TSRQ0 BIT(0) > >>> @@ -376,6 +377,9 @@ static int ravb_dmac_init(struct udevice *dev) > >>> struct ravb_priv *eth = dev_get_priv(dev); > >>> struct eth_pdata *pdata = dev_get_plat(dev); > >>> int ret = 0; > >>> + int mode = 0; > >>> + unsigned int delay; > >>> + bool explicit_delay = false; > >>> > >>> /* Set CONFIG mode */ > >>> ret = ravb_reset(dev); > >>> @@ -402,9 +406,33 @@ static int ravb_dmac_init(struct udevice *dev) > >>> (rmobile_get_cpu_type() == RMOBILE_CPU_TYPE_R8A77995)) > >>> return 0; > >>> > >>> - if ((pdata->phy_interface == PHY_INTERFACE_MODE_RGMII_ID) || > >>> - (pdata->phy_interface == PHY_INTERFACE_MODE_RGMII_TXID)) > >>> - writel(APSR_TDM, eth->iobase + RAVB_REG_APSR); > >>> + if (!dev_read_u32(dev, "tx-internal-delay-ps", &delay)) { > >>> + /* Valid values are 0 and 2000, according to DT bindings */ > >>> + if (delay) { > >>> + mode |= APSR_TDM; > >>> + explicit_delay = true; > >>> + } > >>> + } > >>> + > >>> + if (!dev_read_u32(dev, "rx-internal-delay-ps", &delay)) { > >>> + /* Valid values are 0 and 1800, according to DT bindings */ > >>> + if (delay) { > >>> + mode |= APSR_RDM; > >>> + explicit_delay = true; > >>> + } > >>> + } > >> > >> Any reason to reverse those two tests compared to Linux ? > >> Linux does rx test before tx test, and keeps the tests sorted > >> alphabetically. > > > > It wasn't intentional. I can swap them. > > V3 is now applied and in CI.
Thank you! Just as an FYI, you are not showing up as a maintainer for the ravb driver when run check_maintainer.py. I knew to add you to the CC list, but others in the future may not know to do that. adam