From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Vasut Date: Thu, 1 Oct 2020 21:49:39 +0200 Subject: [PATCH V2] net: smc911x: Automatically Update ethaddr with MAC In-Reply-To: <20201001185146.GW14816@bill-the-cat> References: <20200818131902.18533-1-aford173@gmail.com> <20201001140941.GJ14816@bill-the-cat> <815b267f-4c15-5743-c50a-e779b5192a58@denx.de> <20201001181750.GU14816@bill-the-cat> <20201001182838.GV14816@bill-the-cat> <92f2a898-622c-83ea-e911-2b756b86f7ac@denx.de> <20201001185146.GW14816@bill-the-cat> Message-ID: <3a07369f-5778-f6ea-1c64-35c5d8b6afda@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 10/1/20 8:51 PM, Tom Rini wrote: > On Thu, Oct 01, 2020 at 08:46:56PM +0200, Marek Vasut wrote: >> On 10/1/20 8:42 PM, Adam Ford wrote: >>> On Thu, Oct 1, 2020 at 1:28 PM Tom Rini wrote: >>> >>>> On Thu, Oct 01, 2020 at 01:22:37PM -0500, Adam Ford wrote: >>>>> On Thu, Oct 1, 2020 at 1:17 PM Tom Rini wrote: >>>>> >>>>>> On Thu, Oct 01, 2020 at 07:48:32PM +0200, Marek Vasut wrote: >>>>>>> On 10/1/20 4:09 PM, Tom Rini wrote: >>>>>>>> On Tue, Aug 18, 2020 at 08:19:02AM -0500, Adam Ford wrote: >>>>>>>> >>>>>>>>> The ethernet controller can read the MAC from EEPROM and display >>>> it, >>>>>>>>> but if ethaddr is not set, the ethernet is still unavailable. >>>>>>>>> >>>>>>>>> This patch checks will automatically set the MAC address if it has >>>>>>>>> not already been set. >>>>>>>>> >>>>>>>>> Signed-off-by: Adam Ford >>>>>>>>> Acked-by: Joe Hershberger >>>>>>>> >>>>>>>> Applied to u-boot/next, thanks! >>>>>>> >>>>>>> Note that this breaks every single setup where smc911x is not primary >>>>>>> ethernet. On systems where smc911x is secondary ethernet, you need to >>>>>>> set eth1addr and so on, so please do fix that. >>>>>>> >>>>>>> Also, this kind of ethXaddr update should happen in the ethernet core >>>>>>> instead, drivers shouldn't really modify environment, no ? >>>>>> >>>>>> Interesting points. So, if smc911x is not the primary ether device, >>>>>> something else will have already set "ethaddr", most likely. We do >>>> have >>>>>> both the common case where "ethaddr" (and "eth1addr" and so forth) are >>>>>> set. >>>>>> >>>>>> Adam, when exactly did you run in to the case where ethaddr wasn't set >>>>>> correctly? Was it on a non-DM_ETH case? To Marek's last point, we do >>>>>> have drivers that set ethaddr/ethXaddr, but that's in the non-DM_ETH >>>>>> case. >>>>>> >>>>> >>>>> The only situation I tested was with DM_ETH since I thought it was going >>>> to >>>>> be a requirement by 2020.07. If ethaddr is already set, it shouldn't >>>>> override it, but I can see an issue where using the SMC911x as a >>>> secondary >>>>> controller may cause an issue because the driver at this level doesn't >>>> know. >>>>> >>>>> It seems like there should be a way to determine if the MAC address is >>>>> readable so the user doesn't need to enter it manually, but it's probably >>>>> not at the driver level based on the feedback. >>>>> >>>>> If you want to revert this patch, I won't object. I don't really have >>>> time >>>>> to develop a better one right now. >>>> >>>> Well, wait. Did you encounter a case where "ethaddr" was not >>>> automatically correctly set? A quick skim of the driver and it looks >>>> like it's doing everything needed for the common code to set "ethaddr" >>>> correctly from enetaddr the driver probed. Thanks! >>>> >>> >>> I haven't tried lately, but when booting the Logic PD OMAP3 boards, I was >>> seeing a message displaying the MAC address while simultaneously showing >>> the message that it didn't have an address, so DHCP calls would fail. I >>> could confirm that ethaddr was not set. However, if I manually set the >>> ethaddr to the value dumped by the SMC911x driver, save the environmental >>> variables then reset the board, the ethernet would work. It seemed like >>> the area where the SMC911x displayed the MAC address made sense to update >>> it since it just finished fetching it. so that's why I set up the patch the >>> way it was. I hadn't considered a use case where it wasn't the primary >>> ethernet controller. >> >> Unless there is something else broken, the driver does provide a >> callback to pull ethernet address from the EEPROM already, and that >> should permit the driver core to set ethXaddr. So can you please debug >> that, why it is not happening on your board, instead of adding the >> current workaround ? > > It does sound like something more fundamental is broken in that > particular setup if the generic code path in net/net-uclass.c to set > "ethaddr"/etc as appropriate is not called. I will revert this for now, > as you said. Thanks! That's fine, but it would be good to figure out what was broken in that other setup too.