mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-31 03:58:17 +00:00 
			
		
		
		
	Coreboot provides the CMOS layout in the tables it passes to U-Boot. Use that to build an editor for the CMOS settings. Signed-off-by: Simon Glass <sjg@chromium.org>
		
			
				
	
	
		
			237 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			237 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| .. 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
 | |
|     =>
 |