> -----Original Message----- > From: Ard Biesheuvel [mailto:ard.biesheuvel@xxxxxxxxxx] > Sent: Tuesday, December 11, 2018 6:18 PM > To: Pankaj Bansal <pankaj.bansal@xxxxxxx> > Cc: Bhupesh Sharma <bhsharma@xxxxxxxxxx>; Mark Rutland > <mark.rutland@xxxxxxx>; Leif Lindholm <leif.lindholm@xxxxxxxxxx>; Grant > Likely <grant.likely@xxxxxxx>; Varun Sethi <V.Sethi@xxxxxxx>; Udit Kumar > <udit.kumar@xxxxxxx>; linux-efi <linux-efi@xxxxxxxxxxxxxxx> > Subject: Re: [PATCH v2 2/2] drivers: firmware: efi: install new fdt in > configuration table > > On Tue, 11 Dec 2018 at 13:44, Pankaj Bansal <pankaj.bansal@xxxxxxx> wrote: > > > > > > > > > -----Original Message----- > > > From: Ard Biesheuvel [mailto:ard.biesheuvel@xxxxxxxxxx] > > > Sent: Tuesday, December 11, 2018 6:02 PM > > > To: Pankaj Bansal <pankaj.bansal@xxxxxxx> > > > Cc: Bhupesh Sharma <bhsharma@xxxxxxxxxx>; Mark Rutland > > > <mark.rutland@xxxxxxx>; Leif Lindholm <leif.lindholm@xxxxxxxxxx>; > > > Grant Likely <grant.likely@xxxxxxx>; Varun Sethi <V.Sethi@xxxxxxx>; > > > Udit Kumar <udit.kumar@xxxxxxx>; linux-efi > > > <linux-efi@xxxxxxxxxxxxxxx> > > > Subject: Re: [PATCH v2 2/2] drivers: firmware: efi: install new fdt > > > in configuration table > > > > > > On Tue, 11 Dec 2018 at 13:29, Pankaj Bansal <pankaj.bansal@xxxxxxx> > wrote: > > > > > > > > > > > > > > > > > -----Original Message----- > > > > > From: Ard Biesheuvel [mailto:ard.biesheuvel@xxxxxxxxxx] > > > > > Sent: Tuesday, December 11, 2018 5:55 PM > > > > > To: Pankaj Bansal <pankaj.bansal@xxxxxxx> > > > > > Cc: Bhupesh Sharma <bhsharma@xxxxxxxxxx>; Mark Rutland > > > > > <mark.rutland@xxxxxxx>; Leif Lindholm > > > > > <leif.lindholm@xxxxxxxxxx>; Grant Likely <grant.likely@xxxxxxx>; > > > > > Varun Sethi <V.Sethi@xxxxxxx>; Udit Kumar <udit.kumar@xxxxxxx>; > > > > > linux-efi <linux-efi@xxxxxxxxxxxxxxx> > > > > > Subject: Re: [PATCH v2 2/2] drivers: firmware: efi: install new > > > > > fdt in configuration table > > > > > > > > > > On Tue, 11 Dec 2018 at 13:22, Pankaj Bansal > > > > > <pankaj.bansal@xxxxxxx> > > > wrote: > > > > > > > -----Original Message----- > > > > > > > From: Bhupesh Sharma [mailto:bhsharma@xxxxxxxxxx] > > > > > > > Sent: Tuesday, December 11, 2018 4:25 PM > > > > > > > To: Pankaj Bansal <pankaj.bansal@xxxxxxx> > > > > > > > Cc: Ard Biesheuvel <ard.biesheuvel@xxxxxxxxxx>; Mark Rutland > > > > > > > <mark.rutland@xxxxxxx>; Leif Lindholm > > > > > > > <leif.lindholm@xxxxxxxxxx>; Grant Likely > > > > > > > <grant.likely@xxxxxxx>; Varun Sethi <V.Sethi@xxxxxxx>; Udit > > > > > > > Kumar <udit.kumar@xxxxxxx>; linux-efi@xxxxxxxxxxxxxxx > > > > > > > Subject: Re: [PATCH v2 2/2] drivers: firmware: efi: install > > > > > > > new fdt in configuration table > > > > > > > > > > > > > > Hi Pankaj, > > > > > > > > > > > > .. > > > > > > > Can you please share an example, as the above description is > > > > > > > not very clear to me. May be you can include a dt property > > > > > > > that you are trying to fix via kernel and what happens in > > > > > > > the kernel driver when it is not in > > > > > a expected state. > > > > > > > > > > > > We already do. The "status = "okay";" or "status = > > > > > > "disabled";" is added to the > > > > > device node in dts file. > > > > > > Based on this the device structure is created or not created > > > > > > in kernel when > > > > > booting. > > > > > > > > > > > > > > > > > > > > Also may be you can share why the boot firmware is not able > > > > > > > to set a correct state of the same. > > > > > > > > > > > > The correct state of device would depend on the user supplied > > > > > > parameters and > > > > > boot time configuration. > > > > > > Boot firmware is able to set the "status" in fdt file in exit boot services. > > > > > > > > > > But why not before? Why does it have to wait until > > > > > ExitBootServices() to do > > > this? > > > > > > > > We attempt to apply the user supplied parameters in ExitBootServices. > > > > > > What does 'user supplied' mean? And why can't you apply them earlier? > > > > The parameters are not part of uefi firmware. There is separate binary > > file that the uefi firmware copies from Nonvolatile flash memory and applied > to device. > > As I have already said, if we apply them earlier, the boot firmware > > would not be able to use these devices. While we want to use these devices in > uefi firmware. > > > > How does updating the DT 'status' field prevent you from using the device in > UEFI? It's not about just changing the status in dts file. Once the device is prepped for kernel (i.e. the user supplied parameters are applied to it), the device behaves in different manner. It behaves in interrupt based mechanism, which we don't have in UEFI. We can use only polling based mechanism in UEFI. > > > > > > > > If it fails, then the device state is un deterministic. If it > > > > passed, then device can > > > be used in kernel. > > > > Once there parameters are applied, regardless of they failed or > > > > passed, the > > > boot firmware cannot use the device. > > > > So we have no choice but to apply these parameters when we no > > > > longer wish > > > to use the device in boot firmware. > > > > > > > > > > This is incorrect. Setting the DT status property does absolutely > > > nothing until long after ExitBootServices() completes. So if you > > > want to set the device status, you need to do it before invoking the kernel. > > > > As I have said before, how do we determine "we have invoked kernel or we > have invoked any other efi application" ? > > We can hit the scenario where > > 1. we fetched the efi images (from tftp or from fat partition etc) 2. > > we applied the parameters and modified the dts file. > > 3. we started the efi image. > > 4. The efi image was NOT kernel image but a efi driver. (say hello > > world) 5. we are back in uefi firmware, but now we can't use the > > device. !!! Big problem > > > > How do I solve this? > > Why is it not possible to use the device now? Please describe > *exactly* how updating the DT status property results in the device no longer > being usable in the firmware. It's not about just changing the status in dts file. Once the device is prepped for kernel (i.e. the user supplied parameters are applied to it), the device behaves in different manner. It behaves in interrupt based mechanism, which we don't have in UEFI. We can use only polling based mechanism in UEFI. I am not able to understand the reservation about this patch. At least in earlier version, the apprehension was that if dtb supplied by kernel (using command line parameters) Is supplied to firmware, it may break firmware, as firmware might not understand the bindings in it. But that problem should not come with these changes.