Exploring the Embedded Controller

Hey @TomsonTom! Sorry for the delay. I pushed a mirror to GitHub and brought in the BSD 3-clause license from the upstream repo.

Feel free to send in a pull request, and we can discuss it over there! :slightly_smiling_face:

2 Likes

Thank you @DHowett ! Great work on that repo, happy to see it mirrored on GitHub!

Here is the pull request for WinRing0 with Secure Boot:

2 Likes

Going to give this a go tomorrow! Really appreciate the work for the windows crowd!

1 Like

I don’t know if this is the right place for this. I was having issues with keylightd so I looked for something about the Error: No such file or directory (os error 2) it was giving me. I came here the find out what was wrong but everyone who got the

Missing Chromium EC memory map.
Cannot find I2C adapter
Unable to establish host communication
Couldn't find EC

was using AMD but I am on 11th Gen Intel. Does anyone have any ideas on why this is happening.

System:
CPU: 11th Gen Intel i7-1165G7
BIOS: 3.19
OS: EndeavourOS

hello, Sorry if this has been said elsewhere but am i correct in thinking that changing the colour of the power led on the framework 16 isn’t possible?
when i try to change it i get result code 3
i also get code 3 when trying to specify a side which i remeber someone saying isnt do able on the fw 16.
is there any reason why that inst exposed on the newer versions?
and one more thing is it possible to trigger the battery disconnect in ectool rather than limiting the charge can do the same thing as the bios disconnect option?

I notice that Dave Howett’s framework ec page is dated 22-Dec-2022 and so doesn’t mention the AMD Framework 16 laptop. But his ectool does support it.

To save others from figuring out how to compile it - just clone the repo and then follow the commands listed in the .gitlab-ci.yml file. Note: it needs root permissions to work. The command: ectool version gave

RO version:    lotus_v3.4.113353-ec:b4c1fb,os:
RW version:    lotus_v3.4.113353-ec:b4c1fb,os:
Firmware copy: RO
Build info:    lotus_v3.4.113353-ec:b4c1fb,os:7b88e1,cmsis:4aa3ff 2024-03-26 07:08:43 lotus@ip-172-26-3-226
Tool version:  0.0.1-isolate Jul  9 2024 none

DHowett in this discussion mentions the code is Zephyr port of the ChromeOS EC
which I presume is chromiumos ec platform but then links through to some very long complex multi-git extractions to build .

Sigh - it does seem very hard to find the actual EC source code.

Also it seems that the AMD Framework 16 EC datasheet is not freely available - probably have to have a login account at nuvoton to get it…

The good news is that the ectool is working well even if the documentation of the EC and the firmware source is very difficult to obtain.

Also interestingly

ectool chipinfo

gives

Chip info:
  vendor:    Nuvoton
  name:      npcx9m3f
  revision:  00160207
5 Likes

The actual EC source code for the Framework 13/16 AMD models is around here: EmbeddedController/zephyr/program/lotus at lotus-zephyr · FrameworkComputer/EmbeddedController · GitHub

2 Likes

Thanks – I’ve downloaded it - now look at how to build it - seems I need the zmake command as per zephyr build instructions

I have downloaded the chromium code which builds depot_tools

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/games:/usr/local/bin:/usr/local/sbin:/usr/local/games:/snap/bin:/home/amw/src/depot_tools export PATH

fetch chromium
cd src && ./build/install-build-deps.sh
gclient sync
  • which took about 12 hours… and gets me the cros_sdk tool but not zmake…

There’s a CMakeLists.txt in their repos, so you should try compiling using cmake.

I’m not sure whether “EndeavourOS” packages the ChromeOS EC drivers by default; you should be able to discover if it does by checking…

  1. Is there a cros_ec_lpcs.ko under /lib/modules?
    • `find /lib/modules -name ‘cros_ec*’
  2. Is /dev/cros_ec present?
    • ls -l /dev/cros_ec
  3. Are the modules throwing any errors?
    • dmesg | grep cros

LEDs

Unfortunately, yes - both of these things have changed with the AMD framework laptops.

The power LED no longer supports anything but white; it was updated for compatibility with the chromebook edition which only supported white.

I suspect they wanted to keep documentation between the models similar.

The side LEDs are treated as one entity, “charge” or “battery”, in the AMD boards and probably any newer boards as well.

Battery

You can issue a battery disconnect manually with ectool batterycutoff.

The machine is not intended to be used with the battery shut down. Do this only for experimentation.

In addition to what @pierce said (thank you!), I wrote up a quick gist explaining how to take a clean Debian install (I used a container, but you can use bare metal or whatever) to a Zephyr build environment. It’s actually terrible.

That gist is here.

If you are trying to build for the Framework Laptop 16 AMD, use lotus anywhere you see the name azalea.

4 Likes

On a FW16 I have:
lsmod |grep cros
cros_ec_lpcs 20480 0
cros_ec 20480 1 cros_ec_lpcs

/dev/cros_ec is not present.
dmesg | grep cros
[ 21.416956] cros_ec_lpcs cros_ec_lpcs.0: EC ID not detected

My guess is the ACPI config is not set up correctly.

For the AMD Framework Laptops, you need to be on kernel 6.11 or greater, or apply the kernel patch here: [PATCH v3 0/4] platform/chrome: cros_ec_lpc: add support for AMD Framework Laptops - Dustin L. Howett

@DHowett
Thank you, that works, I now have the /dev/cros_ec device and ectool uses it.

Thanks - that worked fine!
Surprisingly I did need to explicitly add contrib to my repository - perhaps that is no longer default on Debian bookworm.

Now perhaps I can debug some of these black screen crashes.

Tricky - linux mainline master is 6.10-rc7 - https://github.com/torvalds/linux/blob/master/Makefile

I’m getting this error on FW 13 Intel 13th gen, is there any way to fix this? I couldn’t figure it out… Just FYI I’m on BIOS 3.05 (recently released)

❯ sudo ectool chargecontrol
ERROR: Old EC doesn't support GET.

  Usage: chargecontrol
    Get current settings.
  Usage: chargecontrol normal|idle|discharge
    Set charge mode (and disable battery sustainer).
  Usage: chargecontrol normal <lower> <upper>
    Enable battery sustainer. <lower> and <upper> are battery SoC
    between which EC tries to keep the battery level.

❯ sudo ectool chargecontrol normal 20 80
ERROR: Old EC doesn't support sustainer.

  Usage: chargecontrol
    Get current settings.
  Usage: chargecontrol normal|idle|discharge
    Set charge mode (and disable battery sustainer).
  Usage: chargecontrol normal <lower> <upper>
    Enable battery sustainer. <lower> and <upper> are battery SoC
    between which EC tries to keep the battery level.

I may be mistaken, but I think those commands are only functional on the AMD platform’s EC, which uses a new architecture.

1 Like

I just built mainline v6.10 and Dustin’s patches are already present -

commit c8f460d991df
Author: Dustin L. Howett <dustin@howett.net>
Date:   Tue Apr 2 19:47:13 2024 -0500

    platform/chrome: cros_ec_lpc: add quirks for the Framework Laptop (AMD)
    
    The original Framework Laptop 13 platform (Intel 11th, 12th, and 13th
    Generation at this time) uses a Microchip embedded controller in a
    standard configuration.
    
    The newer devices in this product line--Framework Laptop 13 and 16 (AMD
    Ryzen)--use a NPCX embedded controller. However, they deviate from the
    configuration of ChromeOS platforms built with the NPCX EC.
    
    * The MMIO region for EC memory begins at port 0xE00 rather than the
      expected 0x900.
    
    cros_ec_lpc's quirks system is used to address this issue.
    
    Signed-off-by: Dustin L. Howett <dustin@howett.net>
    Reviewed-by: Thomas Weißschuh <linux@weissschuh.net>
    Tested-by: Thomas Weißschuh <linux@weissschuh.net>
    Tested-by: Mario Limonciello <superm1@gmail.com>
    Link: https://lore.kernel.org/r/20240403004713.130365-5-dustin@howett.net
    Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>

M       drivers/platform/chrome/cros_ec_lpc.c
  • My FW 16 hibernates and recovers ok with power cable plugged in

  • But if I then unplug the power and use zoom-client (a snap in debian bookworm) to connect to a meeting it freezes for a about 3-5s then goes black screen and after a while reboots. Strangely the ectool console shows no sign of the reboot that I can see - https://paste.debian.net/1323605/

1 Like

I didn’t realize it had made it into 6.10. Thanks!

1 Like

@DHowett I could not find anything about the ectool. How would I install it?