blob: e54ea204b9f06ac56c2a8c23830e9117810776c6 [file] [log] [blame]
.. SPDX-License-Identifier: GPL-2.0+:
.. index::
single: cedit (command)
cedit command
=============
Synopsis
--------
::
cedit load <interface> <dev[:part]> <filename>
cedit run
cedit write_fdt <dev[:part]> <filename>
cedit read_fdt <dev[:part]> <filename>
cedit write_env [-v]
cedit read_env [-v]
cedit write_cmos [-v] [dev]
cedit cb_load
Description
-----------
The *cedit* command is used to load a configuration-editor description and allow
the user to interact with it.
It makes use of the expo subsystem.
The description is in the form of a devicetree file, as documented at
:ref:`expo_format`.
See :doc:`../../develop/cedit` for information about the configuration editor.
cedit load
~~~~~~~~~~
Loads a configuration-editor description from a file. It creates a new cedit
structure ready for use. Initially no settings are read, so default values are
used for each object.
cedit run
~~~~~~~~~
Runs the default configuration-editor event loop. This is very simple, just
accepting character input and moving through the objects under user control.
The implementation is at `cedit_run()`.
cedit write_fdt
~~~~~~~~~~~~~~~
Writes the current user settings to a devicetree file. For each menu item the
selected ID and its text string are written.
cedit read_fdt
~~~~~~~~~~~~~~
Reads the user settings from a devicetree file and updates the cedit with those
settings.
cedit read_env
~~~~~~~~~~~~~~
Reads the settings from the environment variables. For each menu item `<name>`,
cedit looks for a variable called `c.<name>` with the ID of the selected menu
item.
The `-v` flag enables verbose mode, where each variable is printed after it is
read.
cedit write_env
~~~~~~~~~~~~~~~
Writes the settings to environment variables. For each menu item the selected
ID and its text string are written, similar to:
setenv c.<name> <selected_id>
setenv c.<name>-str <selected_id's text string>
The `-v` flag enables verbose mode, where each variable is printed before it is
set.
cedit write_cmos
~~~~~~~~~~~~~~~~
Writes the settings to locations in the CMOS RAM. The locations used are
specified by the schema. See `expo_format_`.
The `-v` flag enables verbose mode, which shows which CMOS locations were
updated.
Normally the first RTC device is used to hold the data. You can specify a
different device by name using the `dev` parameter.
.. _cedit_cb_load:
cedit cb_load
~~~~~~~~~~~~~
This is supported only on x86 devices booted from coreboot. It creates a new
configuration editor which can be used to edit CMOS settings.
Example
-------
::
=> cedit load hostfs - fred.dtb
=> cedit run
=> cedit write_fdt hostfs - settings.dtb
That results in::
/ {
cedit-values {
cpu-speed = <0x00000006>;
cpu-speed-value = <0x00000003>;
cpu-speed-str = "2 GHz";
power-loss = <0x0000000a>;
power-loss-value = <0x00000000>;
power-loss-str = "Always Off";
};
}
=> cedit read_fdt hostfs - settings.dtb
This shows settings being stored in the environment::
=> cedit write_env -v
c.cpu-speed=11
c.cpu-speed-str=2.5 GHz
c.cpu-speed-value=3
c.power-loss=14
c.power-loss-str=Always Off
c.power-loss-value=0
c.machine-name=my-machine
c.cpu-speed=11
c.power-loss=14
c.machine-name=my-machine
=> print
...
c.cpu-speed=6
c.cpu-speed-str=2 GHz
c.power-loss=10
c.power-loss-str=Always Off
c.machine-name=my-machine
...
=> cedit read_env -v
c.cpu-speed=7
c.power-loss=12
This shows writing to CMOS RAM. Notice that the bytes at 80 and 84 change::
=> rtc read 80 8
00000080: 00 00 00 00 00 2f 2a 08 ...../*.
=> cedit write_cmos -v
Write 2 bytes from offset 80 to 84
=> rtc read 80 8
00000080: 01 00 00 00 08 2f 2a 08 ...../*.
=> cedit read_cmos -v
Read 2 bytes from offset 80 to 84
Here is an example with the device specified::
=> cedit write_cmos rtc@43
=>
This example shows editing coreboot CMOS-RAM settings. A script could be used
to automate this::
=> cbsysinfo
Coreboot table at 500, size 5c4, records 1d (dec 29), decoded to 000000007dce3f40, forwarded to 000000007ff9a000
CPU KHz : 0
Serial I/O port: 00000000
base : 00000000
pointer : 000000007ff9a370
type : 1
base : 000003f8
baud : 0d115200
regwidth : 1
input_hz : 0d1843200
PCI addr : 00000010
Mem ranges : 7
id: type || base || size
0: 10:table 0000000000000000 0000000000001000
1: 01:ram 0000000000001000 000000000009f000
2: 02:reserved 00000000000a0000 0000000000060000
3: 01:ram 0000000000100000 000000007fe6d000
4: 10:table 000000007ff6d000 0000000000093000
5: 02:reserved 00000000fec00000 0000000000001000
6: 02:reserved 00000000ff800000 0000000000800000
option_table: 000000007ff9a018
Bit Len Cfg ID Name
0 180 r 0 reserved_memory
180 1 e 4 boot_option 0:Fallback 1:Normal
184 4 h 0 reboot_counter
190 8 r 0 reserved_century
1b8 8 r 0 reserved_ibm_ps2_century
1c0 1 e 1 power_on_after_fail 0:Disable 1:Enable
1c4 4 e 6 debug_level 5:Notice 6:Info 7:Debug 8:Spew
1d0 80 r 0 vbnv
3f0 10 h 0 check_sum
CMOS start : 1c0
CMOS end : 1cf
CMOS csum loc: 3f0
VBNV start : ffffffff
VBNV size : ffffffff
...
Unimpl. : 10 37 40
Check that the CMOS RAM checksum is correct, then create a configuration editor
and load the settings from CMOS RAM::
=> cbcmos check
=> cedit cb
=> cedit read_cmos
Now run the cedit. In this case the user selected 'save' so `cedit run` returns
success::
=> if cedit run; then cedit write_cmos -v; fi
Write 2 bytes from offset 30 to 38
=> echo $?
0
Update the checksum in CMOS RAM::
=> cbcmos check
Checksum 6100 error: calculated 7100
=> cbcmos update
Checksum 7100 written
=> cbcmos check
=>