[SeaBIOS] Re: Floppy setup

2022-04-25 Thread Kevin O'Connor
On Sun, Apr 24, 2022 at 07:29:56PM -0400, Keith Hui wrote:
> (Looping in the SeaBIOS mailing list again.)
> 
> See this: https://www.seabios.org/Runtime_config
> 
> It appears CMOS locations are a legacy artifact and files within the
> cbfs image (eg. etc/floppy0) is the preferred way of passing SeaBIOS
> settings. If you want a proper fix with the value stored in CMOS (and
> be configurable via nvramtool), you'll need to modify both SeaBIOS and
> the coreboot option table layout for your board. If you need help with
> coreboot and are not subscribed to that mailing list, I can reach out
> and loop you in.
> 
> @Kevin - What are we to do for SeaBIOS settings that the we may want
> to change at runtime eg. via nvramtool? Are there any such settings?

The floppy drive type corresponds to the floppy drive hardware
attached to the machine, so it's not something that should change
frequently.  Storing it in flash (as etc/floppy0) I think should be
sufficient.

I, personally, wouldn't recommend using cmos for anything, as using
flash is notably more flexible.  That said, I suppose some protocol
could be worked out between coreboot and seabios.  It seems odd to go
through all that work for ancient floppy drives though.

-Kevin
___
SeaBIOS mailing list -- seabios@seabios.org
To unsubscribe send an email to seabios-le...@seabios.org


[SeaBIOS] Re: Floppy setup

2022-04-24 Thread Petr Cvek
By modifying SeaBIOS, you meant the addition of a new Kconfig option I suppose? 
For the coreboot part I have finished almost all the necessary changes, so it 
should be fine (I'm already subscribed to both mailing lists).

Thanks for your help.

Petr

Dne 25. 04. 22 v 1:29 Keith Hui napsal(a):
> (Looping in the SeaBIOS mailing list again.)
> 
> See this: https://www.seabios.org/Runtime_config
> 
> It appears CMOS locations are a legacy artifact and files within the
> cbfs image (eg. etc/floppy0) is the preferred way of passing SeaBIOS
> settings. If you want a proper fix with the value stored in CMOS (and
> be configurable via nvramtool), you'll need to modify both SeaBIOS and
> the coreboot option table layout for your board. If you need help with
> coreboot and are not subscribed to that mailing list, I can reach out
> and loop you in.
> 
> @Kevin - What are we to do for SeaBIOS settings that the we may want
> to change at runtime eg. via nvramtool? Are there any such settings?
> 
> Keith
> 
> On Sun, 24 Apr 2022 at 18:36, Petr Cvek  wrote:
>>
>> Linux actually reads the floppy type from the exact same CMOS location as 
>> QEMU compiled SeaBIOS:
>>
>> 
>> https://elixir.free-electrons.com/linux/v5.12.9/source/arch/x86/include/asm/floppy.h#L257
>>
>> and if I remember correctly I've had to force the type through floppy module 
>> parameter, before I modified the coreboot+SeaBIOS source codes.
>>
>> The other operating systems will probably try to read the CMOS location as 
>> well. IMO it is actually a standard bitfield in IBM PC compatible computer. 
>> Also all cmos.layout files start the configuration from bit 384 and some of 
>> them even have the first 120 bits explicitly defined as "reserved".
>>
>> Under these constraints I think it should be possible to change the line to 
>> something like this:
>>
>> if (CONFIG_QEMU || CONFIG_USE_CMOS) {
>>
>> With CONFIG_USE_CMOS be "n" by default so non floppy boards will end with 
>> the old code path.
>>
>> Petr
>>
>>
>> Dne 24. 04. 22 v 21:05 Keith Hui napsal(a):
>>> Hi Petr,
>>>
>>> Linux seems to have been able to pick up all the floppy drives on its own.
>>>
>>> But if you read a few more lines beyond the snippet you posted, you'll
>>> see that it only reads nvram for floppy types when compiled for and
>>> run on QEMU because that layout is hard coded and QEMU-specific. To
>>> extend it to other coreboot targets that layout will need to be
>>> incorporated into the option table of all coreboot mainboards, which
>>> isn't trivial and some boards don't even have floppy ports at all. And
>>> should those nvram bytes hold value for something else, results can be
>>> very unpredictable.
>>>
>>> You'll also see another way around it, using files etc/floppy0 and
>>> etc/floppy1 added to the coreboot image. Some tracing within this file
>>> will tell you what values to use. Downside is changing these values
>>> also requires reflashing.
>>>
>>> Hope this helps.
>>>
>>> Keith
>>>
>>> On Sun, 24 Apr 2022 at 07:15, Petr Cvek  wrote:

 Hello,

 I was playing with coreboot + floppy and it seems the drive type can be 
 read from CMOS only if the machine is QEMU.

 payloads/external/SeaBIOS/seabios/src/hw/floppy.c

 floppy_setup(void)
 {
 ...
 if (CONFIG_QEMU) {
 u8 type = rtc_read(CMOS_FLOPPY_DRIVE_TYPE);
 if (type & 0xf0)
 addFloppy(0, type >> 4);
 ...
 } else {
 u8 type = romfile_loadint("etc/floppy0", 0);
 ...

 Is it possible enable this function for a real coreboot target? What way 
 is the most acceptable way to do it (something like || CONFIG_USE_CMOS)?

 I've forced it with "always true" condition and after adding 
 configurations to cmos table and superio in coreboot, I was able to boot 
 msdos on kontron 986lcd-m board.

 P.S. original message got stuck somewhere in the mailserver as I forgot to 
 subscribe to seabios mailing list.

 Regards,
 Petr
 ___
 SeaBIOS mailing list -- seabios@seabios.org
 To unsubscribe send an email to seabios-le...@seabios.org
___
SeaBIOS mailing list -- seabios@seabios.org
To unsubscribe send an email to seabios-le...@seabios.org


[SeaBIOS] Re: Floppy setup

2022-04-24 Thread Keith Hui
(Looping in the SeaBIOS mailing list again.)

See this: https://www.seabios.org/Runtime_config

It appears CMOS locations are a legacy artifact and files within the
cbfs image (eg. etc/floppy0) is the preferred way of passing SeaBIOS
settings. If you want a proper fix with the value stored in CMOS (and
be configurable via nvramtool), you'll need to modify both SeaBIOS and
the coreboot option table layout for your board. If you need help with
coreboot and are not subscribed to that mailing list, I can reach out
and loop you in.

@Kevin - What are we to do for SeaBIOS settings that the we may want
to change at runtime eg. via nvramtool? Are there any such settings?

Keith

On Sun, 24 Apr 2022 at 18:36, Petr Cvek  wrote:
>
> Linux actually reads the floppy type from the exact same CMOS location as 
> QEMU compiled SeaBIOS:
>
> 
> https://elixir.free-electrons.com/linux/v5.12.9/source/arch/x86/include/asm/floppy.h#L257
>
> and if I remember correctly I've had to force the type through floppy module 
> parameter, before I modified the coreboot+SeaBIOS source codes.
>
> The other operating systems will probably try to read the CMOS location as 
> well. IMO it is actually a standard bitfield in IBM PC compatible computer. 
> Also all cmos.layout files start the configuration from bit 384 and some of 
> them even have the first 120 bits explicitly defined as "reserved".
>
> Under these constraints I think it should be possible to change the line to 
> something like this:
>
> if (CONFIG_QEMU || CONFIG_USE_CMOS) {
>
> With CONFIG_USE_CMOS be "n" by default so non floppy boards will end with the 
> old code path.
>
> Petr
>
>
> Dne 24. 04. 22 v 21:05 Keith Hui napsal(a):
> > Hi Petr,
> >
> > Linux seems to have been able to pick up all the floppy drives on its own.
> >
> > But if you read a few more lines beyond the snippet you posted, you'll
> > see that it only reads nvram for floppy types when compiled for and
> > run on QEMU because that layout is hard coded and QEMU-specific. To
> > extend it to other coreboot targets that layout will need to be
> > incorporated into the option table of all coreboot mainboards, which
> > isn't trivial and some boards don't even have floppy ports at all. And
> > should those nvram bytes hold value for something else, results can be
> > very unpredictable.
> >
> > You'll also see another way around it, using files etc/floppy0 and
> > etc/floppy1 added to the coreboot image. Some tracing within this file
> > will tell you what values to use. Downside is changing these values
> > also requires reflashing.
> >
> > Hope this helps.
> >
> > Keith
> >
> > On Sun, 24 Apr 2022 at 07:15, Petr Cvek  wrote:
> >>
> >> Hello,
> >>
> >> I was playing with coreboot + floppy and it seems the drive type can be 
> >> read from CMOS only if the machine is QEMU.
> >>
> >> payloads/external/SeaBIOS/seabios/src/hw/floppy.c
> >>
> >> floppy_setup(void)
> >> {
> >> ...
> >> if (CONFIG_QEMU) {
> >> u8 type = rtc_read(CMOS_FLOPPY_DRIVE_TYPE);
> >> if (type & 0xf0)
> >> addFloppy(0, type >> 4);
> >> ...
> >> } else {
> >> u8 type = romfile_loadint("etc/floppy0", 0);
> >> ...
> >>
> >> Is it possible enable this function for a real coreboot target? What way 
> >> is the most acceptable way to do it (something like || CONFIG_USE_CMOS)?
> >>
> >> I've forced it with "always true" condition and after adding 
> >> configurations to cmos table and superio in coreboot, I was able to boot 
> >> msdos on kontron 986lcd-m board.
> >>
> >> P.S. original message got stuck somewhere in the mailserver as I forgot to 
> >> subscribe to seabios mailing list.
> >>
> >> Regards,
> >> Petr
> >> ___
> >> SeaBIOS mailing list -- seabios@seabios.org
> >> To unsubscribe send an email to seabios-le...@seabios.org
___
SeaBIOS mailing list -- seabios@seabios.org
To unsubscribe send an email to seabios-le...@seabios.org