Hi Aaron, On Wed, Oct 23, 2019 at 4:50 PM Aaron Williams <awilli...@marvell.com> wrote: > > Hi all, > > I have been tasked with porting our Octeon U-Boot to the latest U-Boot and > merging it upstream. This will involve a very significant amount of code that > generally will not be compatible with other MIPS processors due to our needs > and requirements. For example, the start.S will need to be completely > different than what is present. For example, our existing start.S is 3577 > lines of code in order to deal with things like RAS, exceptions, virtual > memory and more. We need to use virtual memory since U-Boot can be loaded at > any 4MB boundary in memory, not just 0xbfc00000. A number of drivers will > need to be updated in order to properly map pointers to physical addresses. > This is needed anyway, since I see numerous drivers that assume that a > pointer is a DMA address. For MIPS this is never the case (I'm looking at > XHCI).
I don't have any specific reply to your questions. But as a Cavium/Marvell customer I'm really happy to see this finally happening. I've got a few boards using the Octeon3 SoC that I'd be able to upstream once this code lands. > The new Octeon U-Boot will be native 64-bit instead of how the earlier one > was 32-bit using the N32 ABI (so 64-bit addresses could be accessed). We had > to jump through some hoops to make a 32-bit U-Boot fully support 64-bit > hardware. > > I think we can shrink the code by removing support for starting "simple > executive" tasks. Simple executive tasks are bare metal applications that can > run on dedicated cores beside Linux (or without Linux). I will also not be > porting any support for anything older than Octeon3. > > We also make heavy use of our SDK in order to perform hardware initialization > and networking. In our old U-Boot, we have almost 900K lines of code. I can > cut out much of this but much will remain. > > We also have added extensive infrastructure for handling SFP and QSFP cables > as well as very extensive phy support for phys from Aquantia/Marvell, > Vitesse/Microsemi, Inphi/Cortina and an Avago gearbox. Our customer wants us > to port all of this to the new U-Boot and upstream it. I'm worried about the > sheer amount of code since it is absolutely massive. Some of these phy > drivers are extremely complex and need to tie into the SFP management. We > also need to use a background polling thread while at the command prompt. A > fair bit of our phy code is not in the normal phy drivers because it did not > fit the model. Some of these phy drivers need to interact with the SFP > support code in order to handle hot plug events in order to reconfigure > themselves based on the cable type. The existing SFP code handles everything > from SFP to SFP28 as well as QSFP and 100G QSFP (never tested). > > In the old U-Boot the PHY support had to be significantly enhanced due to > requirements for hot-plugging and how some of the PHYs are configured. It > gets quite complicated with phys like the Inphi where one phy can handle > either four ports (XFI/SGMII) or a single 4-lane port (XLAUI). It gets even > worse since in some boards we use reclocking chips and there is one chip that > handles the receive path of a QSFP and another that handles the transmit > path. Further complicating things, with a QSFP it can be treated either as > XLAUI or as four XFI ports, so you can have four ports spread across two > chips, with each port using different slices of each chip. In the case of the > Inphi/Cortina chip, a single device can handle one or four ports based on the > configuration and it is configured by "slice" which is basically an offset > into the MDIO register space. We had to jump through hoops in order to have > this stuff work in a sane way in the device tree. We added entries for SFP > and QSFP slots in the device tree which point to the MACs, GPIOs and I2C bus > because pointing them to the phys just got too insane. This will need to be > ported to the new U-Boot. It should not break the existing support since most > of it was implemented outside of the core PHY handling code. In the port, it > would be far better if this could be integrated in. The SFP management code > is architecture agnostic as is all of the PHY support. The callbacks for the > SFP support are used by the MAC which then notifies the PHY since the MAC > often needs to reconfigure itself. It can handle some crazy configurations. > > While I see some phy drivers that we also support, i.e. Cortina, our drivers > tend to have a lot more functionality. For example, all of our phy drivers > that support firmware support commands for upgrading the firmware as well as > things like cable testing and other features. > > Our bootloader needs to be able to be booted from a variety of sources, > including SPI, eMMC, NOR flash and booting over the PCI bus from a host > system. This is one reason we use virtual memory. The other reason is that it > eliminates the need to perform relocation. Our start.S code handles all of > these different cases as well as exception handling. > > I will also say up front that the memory initialization code is a mess and > quite large (it was written by a hardware engineer who never heard of > functions). > > One thing is that this will break mips unless it is refactored like ARM is, > for example, separating armv7 and armv8. This way we could have > arch/mips/cpu/octeon. I did this with the old bootloader to separate our > stuff. I'm open to suggestions as for the naming. I don't see how we can > share much of the code with the other MIPS CPUs. > > All in all, I think the final port will add between 500K-1M lines of code for > the Octeon CPU. It is much more extensive than what is required for OcteonTX > since in the latter case most of the hardware initialization is done by > earlier stage bootloaders and the ATF handles things like SFP port management > and many of the networking operations. > > I'm not sure how well I'll be able to upstream all of this code at this point > since I was just handed this task. We already have at least 1M lines of code > added to the old U-Boot which is based off of 2013.08 with a lot of backports. > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > https://lists.denx.de/listinfo/u-boot _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot