> On Mon, Dec 2, 2019 at 4:18 PM Ang, Chee Hong <chee.hong....@intel.com> > wrote: > > > > > On Mon, Dec 2, 2019 at 3:08 PM Ang, Chee Hong > > > <chee.hong....@intel.com> > > > wrote: > > > > > > > > > On Mon, Dec 2, 2019 at 2:38 PM Ang, Chee Hong > > > > > <chee.hong....@intel.com> > > > > > wrote: > > > > > > > > > > > > > On Mon, Dec 2, 2019 at 11:25 AM <chee.hong....@intel.com> > wrote: > > > > > > > > > > > > > > > > From: "Ang, Chee Hong" <chee.hong....@intel.com> > > > > > > > > > > > > > > > > New U-boot flow with ARM Trusted Firmware (ATF) support: > > > > > > > > SPL (EL3) -> ATF-BL31 (EL3) -> U-Boot Proper (EL2) -> > > > > > > > > Linux > > > > > > > > (EL1) > > > > > > > > > > > > > > Adding support for ATF means that using U-Boot on Stratix10 > > > > > > > and Agilex without ATF keeps working, right? > > > > > > ATF is needed in order for Stratix10 and Agilex's U-Boot to work. > > > > > > > > > > Is there a technical requirement for that? > > > > Yes. We are using ATF to provide PSCI services such as system > > > > reset (COLD reset), CPU_ON/CPU_OFF (CPU hotplug in Linux) and > > > > other secure services such as mailbox communications with Secure > > > > Device Manager and accessing the System Manager registers which are > secure. > > > > Without PSCI services, we are able to boot until U-Boot proper only. > > > > Currently, our U-Boot in mainline doesn't boot to Linux due to > > > > these missing > > > PSCI services. > > > > Another reason is we have another boot flow which is using ATF + UEFI. > > > > So now we are re-using the PSCI services from ATF so that now > > > > U-Boot and UEFI share the same ATF-BL31 image so that we don't > > > > have to > > > reimplement another sets of PSCI services for U-Boot again. > > > > This will greatly reduce our engineering efforts. > > > > > > Hmm, thanks for the explanation. > > > > > > I don't really think I can review this, given the lack of knowledge > > > about that PSCI stuff. > > I believe you can review it. > > Have you briefly gone through the patches ? It has nothing to do with the > > PSCI > stuff. > > It just call the invoke_smc() function to call the ATF's PSCI > > functions. Those PSCI functions in ATF will do the rest. > > No, not yet. But see below. > > > > > > > I must say it seems strange to me that U-Boot would have to rely on ATF > though. > > > How do other platforms implement this? Shouldn't PSCI be generic or > > > is it really platform specific? If it's generic, isn't that a > > > dupliation of code if you implement e.g. a reset driver for Stratix10 but > > > call > into PSCI? > > It's not strange at all. A lot of U-Boot users already using this boot > > flow (ATF + > U-Boot). > > Just because other boards do this doesn't mean it's not strange. Wasn't there > some kind of discussion around that PSCI stuff to make it available from > U-Boot? > What's wrong with that way? Our downstream U-Boot branch is already implemented the PSCI stuffs in U-Boot. I tried to upstream my PSCI code: https://lists.denx.de/pipermail/u-boot/2019-May/368822.html
Marek pointed me to this thread: https://www.mail-archive.com/u-boot@lists.denx.de/msg319458.html He had a point. He suggested maybe we can implement the PSCI stuffs in SPL/TPL. I took a look at the U-Boot code and found out ATF is already well supported. Why don't we just use the PSCI code from ATF rather than re-implementing the PSCI code again in SPL/TPL. It will save our effort to maintain two PSCI code in U-Boot and ATF while we already have the ATF PSCI implementation to support UEFI. > > In my opinion, you're reducing functionality in U-Boot by making ATF a > requirement. > > And by saying "I can't review this", I mean this looks like a questionable > way to > me and I'm not the one to say if a U-Boot board should go this way or not. I understand. Btw, who should I include to review this ? > > > Yes. PSCI is a generic software interface which encapsulate the platform > specific code. > > Let me give you a good example in one of your sysreset driver you have > implemented for S10. > > > > #include <dm.h> > > #include <errno.h> > > #include <sysreset.h> > > -#include <asm/arch/mailbox_s10.h> > > > > static int socfpga_sysreset_request(struct udevice *dev, > > enum sysreset_t type) { > > - puts("Mailbox: Issuing mailbox cmd REBOOT_HPS\n"); > > - mbox_reset_cold(); > > + psci_system_reset(); > > So this is not an socfgpa_s10 specific driver any more, right? > > > return -EINPROGRESS; > > } > > > > Above is the changes in one of my patchsets, the sysreset driver for > > S10 used to call mbox_reset_cold() to send mailbox message to Secure > > Device Manager > > (SDM) to trigger COLD reset. > > Calling 'mbox_reset_cold()' means you are calling platform specific > > code in the sysreset driver to perform COLD reset. What if method to trigger > COLD reset is changed in new platform ? > > We have to change the sysreset driver code to support another new platform. > > If this function call is replaced with "psci_system_reset()", we don't > > have to change the code at all because all the platform specific code > > for COLD reset is now reside in ATF because this function just invoke > > the PSCI function provided by ATF. You just have to replace the ATF > > binary with the new implementation for the new platform. We can re-use > > this sysreset driver for any platform that support ATF. In fact, it > > makes our U-Boot driver code more 'generic' because PSCI interface > > stay the same. BTW, Linux also call PSCI functions to perform COLD reset. By > using ATF, U-Boot and Linux share the same COLD reset service provided by ATF. > It actually reduce code duplication. > > What I meant was code duplication inside the U-Boot tree (having one driver > for > each arch but in effect all those drivers will call into the same psci > function). Can different archs share the same driver if the driver code is common to those platforms ? > What you're doing is to move this code from U-Boot open U-Boot sources to > possibly closed source ATF sources. But we've already had that discussion, I > think... Our PSCI implementation in ATF is open source: https://github.com/ARM-software/arm-trusted-firmware/tree/master/plat/intel/soc > > Regards, > Simon > > > > > I think you are aware of we are working to move the mailbox driver code away > from arch to drivers. > > You will see that a lot of those mailbox functions will be removed from the > mailbox driver. > > One of them is 'mbox_reset_cold()' which you called in sysreset driver for > > S10. > > > > > Regards, > > > Simon > > > > > > > > > > > > > Regard, > > > > > Simon > > > > > > > > > > > > > > > > > > > > > SPL loads the u-boot.itb which consist of: > > > > > > > > 1) u-boot-nodtb.bin (U-Boot Proper image) > > > > > > > > 2) u-boot.dtb (U-Boot Proper DTB) > > > > > > > > 3) bl31.bin (ATF-BL31 image) > > > > > > > > > > > > > > > > Supported Platform: Intel SoCFPGA 64bits (Stratix10 & > > > > > > > > Agilex) > > > > > > > > > > > > > > > > Now, U-Boot Proper is running in non-secure mode (EL2), it > > > > > > > > invokes SMC/PSCI calls provided by ATF to perform COLD > > > > > > > > reset, System Manager register accesses and mailbox > > > > > > > > communications with Secure Device Manager (SDM). > > > > > > > > > > > > > > > > Steps to build the U-Boot with ATF support: > > > > > > > > 1) Build U-Boot > > > > > > > > 2) Build ATF BL31 > > > > > > > > 3) Copy ATF BL31 binary image into U-Boot's root folder > > > > > > > > 4) "make u-boot.itb" to generate u-boot.itb > > > > > > > > > > > > > > > > These patchsets have dependency on: > > > > > > > > [U-Boot,v8,00/19] Add Intel Agilex SoC support: > > > > > > > > https://patchwork.ozlabs.org/cover/1201373/ > > > > > > > > > > > > > > > > Chee Hong Ang (19): > > > > > > > > arm: socfpga: add fit source file for pack itb with ATF > > > > > > > > arm: socfpga: Add function for checking description from FIT > image > > > > > > > > arm: socfpga: Load FIT image with ATF support > > > > > > > > arm: socfpga: Override 'lowlevel_init' to support ATF > > > > > > > > configs: socfpga: Enable FIT image loading with ATF support > > > > > > > > arm: socfpga: Disable "spin-table" method for booting Linux > > > > > > > > arm: socfpga: Add SMC helper function for Intel SOCFPGA > > > > > > > > (64bits) > > > > > > > > arm: socfpga: Define SMC function identifiers for PSCI SiP > > > > > > > > services > > > > > > > > arm: socfpga: Add secure register access helper functions for > > > > > > > > SoC > > > > > > > > 64bits > > > > > > > > arm: socfpga: Secure register access for clock manager (SoC > > > > > > > > 64bits) > > > > > > > > arm: socfpga: Secure register access in PHY mode setup > > > > > > > > arm: socfpga: Secure register access for reading PLL frequency > > > > > > > > mmc: dwmmc: socfpga: Secure register access in MMC driver > > > > > > > > net: designware: socfpga: Secure register access in MAC driver > > > > > > > > arm: socfpga: Secure register access in Reset Manager driver > > > > > > > > arm: socfpga: stratix10: Initialize timer in SPL > > > > > > > > arm: socfpga: stratix10: Refactor FPGA reconfig driver to > > > > > > > > support > ATF > > > > > > > > arm: socfpga: Bridge reset now invokes SMC calls to > > > > > > > > query FPGA > > > config > > > > > > > > status > > > > > > > > sysreset: socfpga: Invoke PSCI call for COLD reset > > > > > > > > > > > > > > > > Dalon Westergreen (1): > > > > > > > > configs: stratix10: Remove CONFIG_OF_EMBED > > > > > > > > > > > > > > This one is included in another series already: > > > > > > > https://patchwork.ozlabs.org/user/todo/uboot/?series=132976 > > > > > > > > > > > > > > Does this mean that one will be abandonen? > > > > > > > So the combined hex output part of that series is not required any > more? > > > > > > > > > > > > > > Regards, > > > > > > > Simon > > > > > > > > > > > > > > > > > > > > > > > arch/arm/mach-socfpga/Kconfig | 2 - > > > > > > > > arch/arm/mach-socfpga/Makefile | 4 + > > > > > > > > arch/arm/mach-socfpga/board.c | 10 + > > > > > > > > arch/arm/mach-socfpga/clock_manager_agilex.c | 5 +- > > > > > > > > arch/arm/mach-socfpga/clock_manager_s10.c | 5 +- > > > > > > > > arch/arm/mach-socfpga/include/mach/misc.h | 3 + > > > > > > > > .../mach-socfpga/include/mach/secure_reg_helper.h | 20 ++ > > > > > > > > arch/arm/mach-socfpga/lowlevel_init.S | 48 +++ > > > > > > > > arch/arm/mach-socfpga/misc_s10.c | 47 ++- > > > > > > > > arch/arm/mach-socfpga/reset_manager_s10.c | 31 +- > > > > > > > > arch/arm/mach-socfpga/secure_reg_helper.c | 67 ++++ > > > > > > > > arch/arm/mach-socfpga/timer_s10.c | 3 +- > > > > > > > > arch/arm/mach-socfpga/wrap_pll_config_s10.c | 9 +- > > > > > > > > board/altera/soc64/its/fit_spl_atf.its | 51 +++ > > > > > > > > configs/socfpga_agilex_defconfig | 8 +- > > > > > > > > configs/socfpga_stratix10_defconfig | 9 +- > > > > > > > > drivers/fpga/stratix10.c | 261 > > > > > > > > ++++---------- > > > > > > > > drivers/mmc/socfpga_dw_mmc.c | 7 +- > > > > > > > > drivers/net/dwmac_socfpga.c | 5 +- > > > > > > > > drivers/sysreset/sysreset_socfpga_s10.c | 4 +- > > > > > > > > include/configs/socfpga_soc64_common.h | 2 +- > > > > > > > > include/linux/intel-smc.h | 374 > +++++++++++++++++++++ > > > > > > > > 22 files changed, 732 insertions(+), 243 deletions(-) > > > > > > > > create mode > > > > > > > > 100644 > > > > > > > > arch/arm/mach-socfpga/include/mach/secure_reg_helper.h > > > > > > > > create mode 100644 arch/arm/mach-socfpga/lowlevel_init.S > > > > > > > > create mode 100644 > > > > > > > > arch/arm/mach-socfpga/secure_reg_helper.c > > > > > > > > create mode 100644 board/altera/soc64/its/fit_spl_atf.its > > > > > > > > create mode 100644 include/linux/intel-smc.h > > > > > > > > > > > > > > > > -- > > > > > > > > 2.7.4 > > > > > > > > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot