On 12.08.16 19:21, Simon Glass wrote: > Hi Alex, > > On 11 August 2016 at 05:49, Alexander Graf <ag...@suse.de> wrote: >> >> >> On 08.08.16 23:44, Simon Glass wrote: >>> Hi, >>> >>> On 7 August 2016 at 10:59, Andreas Färber <afaer...@suse.de> wrote: >>>> Am 14.07.2016 um 08:18 schrieb Alexander Graf: >>>>>> Am 14.07.2016 um 06:48 schrieb Andreas Färber <afaer...@suse.de>: >>>>>> >>>>>> Hi Alex, >>>>>> >>>>>>> Am 05.06.2016 um 23:17 schrieb Alexander Graf: >>>>>>> If Linux finds an EFI implementation it always uses the EFI reset >>>>>>> handler to >>>>>>> reboot or power down the system. >>>>>> >>>>>> Hm, I thought my powerdown issues on the Jetson TK1 were for lack of >>>>>> CONFIG_AS3277_RESET - sounds like it could be due to EFI instead? >>>>> >>>>> It depends. IIRC the TK1 is 32bit, where you're probably using grub2 >>>>> which is not efi Linux aware, but instead boots over the zImage protocol. >>>>> In that case Linux doesn't know about efi runtime services. >>>> >>>> We've confirmed in the meantime that the Jetson TK1 issues were >>>> unrelated to EFI and could be worked around by enabling some as3722 >>>> kernel option. >>>> >>>>>>> Unfortunately we haven't implemented that one yet. In fact, while we >>>>>>> prepared >>>>>>> for RTS handling, we never actually implemented a single user. >>>>>>> >>>>>>> This is going to change today. This simple patch set enables RTS reset >>>>>>> support >>>>>>> for the RPi systems, allowing you to reboot and shut down the rpi if >>>>>>> booted >>>>>>> via EFI. >>>>>>> >>>>>>> It also lays the groundwork to show how to implement that functionality >>>>>>> at all, >>>>>>> so I expect more boards to follow. >>>>>>> >>>>>>> Alexander Graf (2): >>>>>>> efi_loader: Allow boards to implement get_time and reset_system >>>>>>> ARM: bcm283x: Implement EFI RTS reset_system >>>>>>> >>>>>>> arch/arm/mach-bcm283x/include/mach/wdog.h | 2 +- >>>>>>> arch/arm/mach-bcm283x/reset.c | 59 +++++++++++++++-- >>>>>>> cmd/bootefi.c | 4 ++ >>>>>>> include/efi_loader.h | 18 ++++++ >>>>>>> lib/efi_loader/efi_runtime.c | 101 >>>>>>> ++++++++++++++++++++++++++---- >>>>>>> 5 files changed, 166 insertions(+), 18 deletions(-) >>>>>> >>>>>> This all looks very non-generic and would mean that every board will >>>>>> need to be patched individually, which is unrealistic to be tested by >>>>>> just the two of us. >>>>>> >>>>>> Can't you patch the reset_cpu() declaration (common.h/sysreset.h) >>>>>> instead of all its implementations? We might still need to patch >>>>>> individual implementations but I don't see why any reset_cpu() >>>>>> implementation should be in a different section than others. >>>>> >>>>> Hmm. There are 2 minor problems: >>>>> >>>>> 1) Efi also supports power off on top of reset >>>>> 2) We would have to convert all boards at once, rather than one by one, >>>>> as we couldn't distinguish between efi aware and unaware ones >>>> >>>> I don't see why we would need to convert everything at once either way. >>>> >>>>> >>>>> And one major issue: >>>>> >>>>> All device memory pointers used by the reset functions need to be marked >>>>> as such in the efi memory map and live relocated when entering runtime >>>>> mode. So we need to manually touch every function either way. >>> >>> I'm worried about this. It means that any code used from this run-time >>> needs to be so marked. This could be large tracts of U-Boot. In >> >> We only need to mark the few bits that are actually executed and used >> within RTS. That's usually just 2 or 3 functions. >> > > At present you only have reset, and you've only implemented it for one > board. Are there other calls that we need to implement? This > EFI_RUNTIME is transitive - anything it calls must be in the runtime. > Does the linker prevent us from screwing up?
It doesn't (I couldn't find a way), but the runtime relocation code does: https://github.com/trini/u-boot/blob/master/lib/efi_loader/efi_runtime.c#L205 > >> Also, moving forward, we'll see more and more systems implement PSCI >> which means we can implement a generic PSCI RTS for reset/shutdown. > > What system can I get that uses that today? Anything that runs ATF: https://github.com/ARM-software/arm-trusted-firmware in EL3: - Pine64 - ZynqMP - S905X - Hikey - probably many many more I think the only AArch64 systems that I'm aware of that do *not* run ATF in EL3 are - Anything FSL LS - RPi3 - uniphier and in all 3 cases it's a bad design decision IMHO, but it's one that their respective creators did. > >> >>> particular, as I have mentioned a few times, I think the UEFI tables >>> should be 'live' and not just created before booting, which means that >>> much of driver/core needs to be in the UEFI section. >> >> I don't fully understand what you're aiming for here. The tables are >> always static in a uEFI world. I don't see how they could get more >> "live" than creating them right before boot. > > I'd prefer to see the EFI requests be processed as they are received, > rather than with pre-canned data. Your original justification (e.g. > for efi_disk_add_dev()) was that there was not authoritative list of > block devices in U-Boot. But there is now. > > So do you think it would be feasible to drop these tables, and efi_obj_list? Ah, we're talking about different tables. I was thinking "tables" as in what EFI calls tables. That would be the device tree or SMBIOS tables. Those are really just pointers to memory. > What happens with the tables if I run an app and then come back to U-Boot? So let me try to grasp what you mean by tables. I guess you mean the list of devices? It gets regenerated on every bootefi invocation. Or did you mean something different? Alex _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot