BeardOverflow / msi-ec

GNU General Public License v2.0
145 stars 45 forks source link

MSI Titan 18 HX A14V - Firmware version is not supported #105

Open nalim opened 8 months ago

nalim commented 8 months ago

Laptop model

MSI Titan 18 HX A14V

EC firmware version

1822EMS1.105

EC memory dump

 | _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f

-----+------------------------------------------------ 0x0 | 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x1 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x2 | 00 00 00 00 00 00 00 00 0a 05 00 00 00 27 1b 5b 0x3 | 03 01 00 0d 00 00 51 81 6a 18 60 3b 71 02 c0 00 0x4 | 35 0c 58 00 b9 18 00 00 a6 15 2d 41 d9 0b f8 43 0x5 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x6 | 00 00 00 00 00 00 00 00 34 00 3a 40 46 4c 52 58 0x7 | 64 19 00 19 23 2c 3a 46 4d 4b 09 03 03 03 03 03 0x8 | 00 00 34 3a 40 46 4c 52 64 00 00 19 23 2c 3a 46 0x9 | 4d 5f 07 03 03 03 03 03 02 00 6e 02 00 66 40 00 0xa | 31 38 32 32 45 4d 53 31 2e 31 30 35 31 31 32 39 0xb | 32 30 32 33 31 31 3a 31 33 3a 31 38 00 00 00 08 0xc | 00 00 07 22 00 00 19 00 01 1a 00 00 00 00 00 00 0xd | 00 00 c1 84 0d 00 05 bc 00 01 00 00 00 05 00 00 0xe | e2 00 00 b9 18 00 00 c1 01 00 00 00 00 92 00 00 0xf | 00 00 70 00 2a 7f 05 28 7f 05 00 00 00 01 00 00

GPU

Nvidia

Is your keyboard RGB?

Yes (multi color RGB)

Additional context

https://www.msi.com/Laptop/Titan-18-HX-A14VX/Specification

Makintos commented 8 months ago

New BIOS and EC firmware version released two days ago:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                                                                          ;;
;;          MSI BIOS Release Notes                          ;;
;;                                                      ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;           

Model    :  MS-1822                        
MKT Name :  Titan 18 HX A14VIG/Titan 18 HX A14VHG

;****************************************************************************;
New BIOS     :  E1822IMS.10E
ROM CheckSum :  0x249A
Release Date :  2024.1.12

;--------------------------- Description ------------------------------------;

1.Update EC version to 1822EMS1.109.

;****************************************************************************;
New BIOS     :  E1822IMS.109
ROM CheckSum :  0x9644 
Release Date :  2023.12.21

;--------------------------- Description ------------------------------------;

First Release.

https://www.msi.com/Laptop/Titan-18-HX-A14VX/support?sub_product=Titan-18-HX-A14VIG

nalim commented 8 months ago

EC firmware version

1822EMS1.109

EC memory dump

 | _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f

-----+------------------------------------------------ 0x0 | 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x1 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x2 | 00 00 00 00 00 00 00 00 0a 05 00 00 00 24 1b 5b 0x3 | 03 01 00 0d 00 00 51 81 6a 18 60 3b 71 02 c0 00 0x4 | 35 0c 5a 00 d0 18 00 00 26 16 73 41 e0 0b f8 43 0x5 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x6 | 00 00 00 00 00 00 00 00 33 00 3a 40 46 4c 52 58 0x7 | 64 19 00 19 23 2c 3a 46 4d 4b 09 03 03 03 03 03 0x8 | 00 00 34 3a 40 46 4c 52 64 00 00 19 23 2c 3a 46 0x9 | 4d 5f 07 03 03 03 03 03 02 00 6e 02 00 66 40 00 0xa | 31 38 32 32 45 4d 53 31 2e 31 30 39 30 31 30 35 0xb | 32 30 32 34 31 30 3a 32 39 3a 30 39 00 00 00 08 0xc | 00 00 07 22 00 00 00 00 01 19 00 00 00 00 00 00 0xd | 00 00 c1 84 0d 00 05 bc 00 01 00 00 00 05 00 00 0xe | e2 00 00 d0 18 00 00 c1 00 00 00 00 00 92 00 00 0xf | 00 00 70 00 2a 7f 05 28 7f 05 00 00 00 01 00 00

nalim commented 7 months ago

EC firmware version

1822EMS1.111

EC memory dump

 | _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f

-----+------------------------------------------------ 0x0 | 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x1 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x2 | 00 00 00 00 00 00 00 00 0a 05 00 00 00 26 1b 5b 0x3 | 03 01 00 0d 00 00 51 81 6a 18 60 3b 71 02 c0 00 0x4 | 35 0c 55 00 c2 18 00 00 d7 14 a7 40 e7 0b f8 43 0x5 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x6 | 00 00 00 00 00 00 00 00 37 00 3a 40 46 4c 52 58 0x7 | 64 19 00 19 23 2c 3a 46 4d 4b 09 03 03 03 03 03 0x8 | 00 00 34 3a 40 46 4c 52 64 00 00 19 23 2c 3a 46 0x9 | 4d 5f 07 03 03 03 03 03 02 00 6e 02 00 66 43 00 0xa | 31 38 32 32 45 4d 53 31 2e 31 31 31 30 31 32 39 0xb | 32 30 32 34 30 39 3a 32 35 3a 33 39 00 00 00 08 0xc | 00 00 07 22 00 00 00 00 01 18 00 00 00 00 00 00 0xd | 00 00 c1 84 0d 00 05 bc 00 01 00 00 00 0a 00 00 0xe | e2 00 00 c2 18 00 00 c1 01 00 00 00 00 92 00 00 0xf | 00 00 70 00 2c 7f 05 2a 7f 05 00 00 00 01 00 00

Makintos commented 7 months ago

Hi, I figured out these addresses using RWEverything (1822EMS1.109):

1822EMS1 109

Charge Threadshold

address: 0xD7
 values: 0xE4 (stop at 100%), 0xD0 (under 70%, stop at 80%), 0xBC (under 50%, stop at 60%)

Webcam

address: ??
 values: ??

Notes:
  - No change at all in EC when the webcam is active, address 0x2E value is 0x5B in all cases

Win/Fn Swap

address: 0xE8
 values: 0x01 (win-fn), 0x11 (fn-win)

Cooler Boost

address: 0x98
 values: 0x02 (off), 0x82 (on)

Shift Mode (User Scenario/Performance Mode)

address: 0xD2
 values: 0xC4 (Extreme), 0xC1 (Balanced), 0xC2 (Super Battery)

Notes:
  - Address 0xD6 also changes to: 0x03 (Extreme), 0x05 (Balanced and Super Battery)
  - To toggle Super Battery, we'll also need to write 0x0F (on) or 0x00 (off) to address 0xEB.
  - Silent mode in MSI Center is equivalent to Balanced mode with Silent fan mode.

Super Battery

address: 0xEB
 values: 0x00 (off), 0x0F (on)

Fan Mode

address: 0xD4
 values: 0x0D (Auto), 0x1D (Silent), 0x8D (Advanced)

Fan Curves

CPU:
  number of sub-fan setting: 6
  starting address: 0x72
  end address: 0x77 (0x72 + 5)

GPU:
  number of sub-fan setting: 6
  starting address: 0x8A
  end address: 0x8F (0x8A + 5)

Fan Speed (%)

CPU:
  address: 0x71
   values: 0x00..0x96 -> 00 (0%), 19 (25%), ..., 96 (150%)

GPU:
  address: 0x89
   values: 0x00..0x96 -> 00 (0%), 19 (25%), ..., 96 (150%)

Notes:
  - GPU fan speed (address 0x89) should show current value? Unlike CPU, it shows
    the minimum fan speed (set in 0x8A, the first sub-fan GPU setting in Advanced fan mode)

Fan Speed (n/RPM)

CPU: 0xC8 and 0xC9 (01 19 -> 480000/281 = 1708rpm)
GPU: 0xCA and 0xCB (01 3F -> 480000/319 = 1504rpm)

Mic Mute

address: 0x2C
 values: 0x02 (on), 0x00 (off)

Speaker Mute

address: 0x2D
 values: 0x26 (on), 0x24 (off)

Keyboard Backlight

address: 0xD3
 values: 0x81 (off), 0x82 (low), 0x83 (mid), 0x84 (high), 0x80 (full)

Notes:
  -  Windows values are different: 0x80 (off), 0x81 (low), 0x82 (mid), 0x83 (high), 0x84 (full)

USB Power Share

address: 0xBF
 values: 0x08 (off), 0x28 (on)

Sensors

CPU temperature address: 0x68
GPU temperature address: 0x80
 Battery charge address: 0x42

@glpnk @teackot Could you please take a look at it? Thank you!

glpnk commented 7 months ago

I check it and make test build, thanks for your contribution

Makintos commented 7 months ago

Ahother EC memory dump, this time in Linux:

     | _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
-----+------------------------------------------------
0x0_ | 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x1_ | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x2_ | 00 00 00 00 00 00 00 00 0a 05 00 00 00 24 5b 5b
0x3_ | 03 09 00 0d 01 00 51 81 6a 18 60 3b 71 02 e0 00
0x4_ | 00 00 64 00 33 18 00 00 33 18 2f 43 ad 0b 00 00
0x5_ | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x6_ | 00 00 00 00 00 00 00 00 3b 00 3a 40 46 4c 52 58
0x7_ | 64 19 00 19 23 2c 3a 46 4d 4b 09 03 03 03 03 03
0x8_ | 30 00 34 3a 40 46 4c 52 64 00 00 19 23 2c 3a 46
0x9_ | 4d 5f 07 03 03 03 03 03 02 00 6e 02 00 66 3f 00
0xa_ | 31 38 32 32 45 4d 53 31 2e 31 30 39 30 31 30 35
0xb_ | 32 30 32 34 31 30 3a 32 39 3a 30 39 00 00 00 28
0xc_ | 00 00 01 33 00 00 0d 00 01 09 01 13 00 00 00 00
0xd_ | 00 00 c1 80 0d 00 05 bc 00 01 00 00 00 09 00 00
0xe_ | e2 00 00 33 18 00 00 c1 01 00 00 00 00 c0 00 00
0xf_ | 00 00 70 00 32 3c 32 23 3c 32 00 00 00 01 00 00

Keyboard Backlight

address: 0xD3
 values: 0x81 (off), 0x82 (low), 0x83 (mid), 0x84 (high), 0x80 (full)

These are the good ones.

I check it and make test build, thanks for your contribution

Thank you :+1:

glpnk commented 7 months ago

These keyboard settings is weird. Do you tried OpenRGB? https://github.com/CalcProgrammer1/OpenRGB

Makintos commented 7 months ago

It seems that it is not supported, VID:PID is not listed here: https://openrgb.org/devices_0.9.html

Bus 001 Device 003: ID 1038:1122 SteelSeries ApS SteelSeries KLC
Bus 001 Device 004: ID 1038:115b SteelSeries ApS SteelSeries ALC

There are two issues opened for MSI GE 68/78 which are very similar:

If it uses the same protocol:

This controller would need to be refactored and generalised to accept the 53 LEDs that were found in the 2 frames sending colour data

There will need to be some more work done here to figure out the keyboard layout mapping. i.e. Index -> Key. The work to generalise the QCK controller should be done and tested first which should make adding the keyboard simpler.

It's going to take some time until it is supported...

glpnk commented 7 months ago

Added your model https://github.com/glpnk/msi-ec/tree/1822EMS1

Please check Web-Cam switch - maybe one of settings is works, then I remove broken. I hope it will not break your camera. Test on your risk. Also, check keyboard backlight - possibly it output wrong settings if it will not shut down.

-       .state_base_value = 0x81,
-       .max_state        = 3,
+       .state_base_value = 0x80,
+       .max_state        = 4,

To install: Download with

git clone -b 1822EMS1 https://github.com/glpnk/msi-ec.git

Make and load

make
sudo make load
Makintos commented 7 months ago

Thanks! About the webcam, this is my second Titan 18 HX, I had to return the first one, so I prefer to take no risks... maybe @nalim dares to try it.

The Keyboard backlight transitions using Fn key with 0x81 as base value and max_state = 3 are:

0 (off) => 0 (full) => 3 (high) => 2 (mid) => 1 (low) => 0 (off) => 0 (full) => [...]

However, using 0x80 as base value, max_state = 4, altering the mask:

diff ec_memory_configuration.h msi-ec/ec_memory_configuration.h

86c86
< #define MSI_EC_KBD_BL_STATE_MASK 0x3
---
> #define MSI_EC_KBD_BL_STATE_MASK 0x7

And doing a couple of changes in the code:

diff msi-ec.c msi-ec/msi-ec.c

2811c2811
<   if (brightness < 0 || brightness > 3)
---
>   if (brightness < 0 || brightness > 4)
2833c2833
<   .max_brightness = 3,
---
>   .max_brightness = 4,

Works as expected (values are n+1, although it's not a msi-ec fault)

In summary:

One last thing:

1542c1542
<       // n/rpm register is C9
---
>       // n/rpm registers are C8 and C9
1546a1547
>       // n/rpm registers are CA and CB

Thank you again! :+1:

glpnk commented 7 months ago

@teackot Hi! Have you any idea how to make not standard keyboard backlight work and don't break other models?

glpnk commented 7 months ago

@Makintos Thanks for your report

Do you know more about this?

  • Speaker Mute: OK (the LED does NOT turn on when volume is 0%, but it is related to snd-hda-intel)

I tried changing triggers, and small amount of them working. Mute trigger is broken

Makintos commented 6 months ago

Yes, this is a recurrent topic, it is explained here: https://wiki.archlinux.org/title/Laptop#Audio_mute_LED

The updated HD-Audio Codec model list: https://docs.kernel.org/sound/hd-audio/models.html

In this thread there are links, scripts to do all kind of tests and even a kernel patch: https://bbs.archlinux.org/viewtopic.php?id=282568

If I found a fix I will post it here.

sempervictus commented 4 months ago

Thanks for working on this. Curious where this effort is currently as the battery charge control bit is very handy to have and it seems the last comment was ~2mo ago. Building the current master branch still produces an unsupported error message.

glpnk commented 4 months ago

Seems I forgot to upstream it.

@sempervictus can you make new EC dump and send it to this issue?

Run in project directory

make
sudo make load-debug
cat /sys/devices/platform/msi-ec/debug/ec_dump
sempervictus commented 4 months ago

Thanks for picking this back up. The EC dump on this version is:

     | _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
-----+------------------------------------------------
0x0_ | 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x1_ | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x2_ | 00 00 00 00 00 00 00 00 0a 05 00 00 00 24 1b 5b
0x3_ | 03 09 00 0d 01 00 51 81 6a 18 60 3b 71 02 e0 00
0x4_ | 00 00 64 00 bc 17 00 00 bc 17 4e 43 fb 0b 00 00
0x5_ | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x6_ | 00 00 00 00 00 00 00 00 3e 00 3a 40 46 4c 52 58
0x7_ | 64 23 00 19 23 2c 3a 46 4d 4b 09 03 03 03 03 03
0x8_ | 2e 00 34 3a 40 46 4c 52 64 19 00 19 23 2c 3a 46
0x9_ | 4d 5f 07 03 03 03 03 03 02 00 6e 02 00 66 5a 00
0xa_ | 31 38 32 32 45 4d 53 31 2e 31 31 31 30 31 32 39
0xb_ | 32 30 32 34 30 39 3a 32 35 3a 33 39 00 00 00 08
0xc_ | 00 00 07 31 00 00 00 00 00 e9 00 e3 00 00 00 00
0xd_ | 00 00 c1 80 0d 00 05 80 00 01 00 00 00 0d 00 00
0xe_ | e2 00 00 f8 17 00 00 00 01 00 00 00 00 b7 00 00
0xf_ | 20 00 70 00 31 3c 32 33 3c 32 00 00 00 02 01 00
nalim commented 4 months ago

EC firmware version

1822EMS1.112

EC memory dump

 | _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f

-----+------------------------------------------------ 0x0 | 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x1 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x2 | 00 00 00 00 00 00 00 00 0a 05 00 00 00 24 1b 5b 0x3 | 03 01 00 0d 00 00 51 81 6a 18 60 3b 71 02 c0 00 0x4 | 35 0c 46 00 cc 18 00 00 3c 11 6c 3e c1 0b f8 43 0x5 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x6 | 00 00 00 00 00 00 00 00 32 00 3a 40 46 4c 52 58 0x7 | 64 19 00 19 23 2c 3a 46 4d 4b 09 03 03 03 03 03 0x8 | 00 00 34 3a 40 46 4c 52 64 00 00 19 23 2c 3a 46 0x9 | 4d 5f 07 03 03 03 03 03 02 00 6e 02 00 66 3f 00 0xa | 31 38 32 32 45 4d 53 31 2e 31 31 32 30 34 30 32 0xb | 32 30 32 34 31 31 3a 32 30 3a 32 37 00 00 00 08 0xc | 00 00 07 25 00 00 00 00 01 19 00 00 00 00 00 00 0xd | 00 00 c1 84 0d 00 05 bc 00 01 00 00 00 05 00 00 0xe | e2 00 00 cc 18 00 00 c1 01 00 00 00 00 92 00 00 0xf | 00 00 70 00 29 3c 32 27 3c 32 00 00 00 01 00 00

sempervictus commented 4 months ago

Interesting - seems our EC dumps differ quite a bit:

$ diff /tmp/mine /tmp/nalim 
1c1
<      | _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
---
>  | _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _a _b _c _d _e _f
6,7c6,7
< 0x3_ | 03 09 00 0d 01 00 51 81 6a 18 60 3b 71 02 e0 00
< 0x4_ | 00 00 64 00 bc 17 00 00 bc 17 4e 43 fb 0b 00 00
---
> 0x3_ | 03 01 00 0d 00 00 51 81 6a 18 60 3b 71 02 c0 00
> 0x4_ | 35 0c 46 00 cc 18 00 00 3c 11 6c 3e c1 0b f8 43
9,18c9,18
< 0x6_ | 00 00 00 00 00 00 00 00 3e 00 3a 40 46 4c 52 58
< 0x7_ | 64 23 00 19 23 2c 3a 46 4d 4b 09 03 03 03 03 03
< 0x8_ | 2e 00 34 3a 40 46 4c 52 64 19 00 19 23 2c 3a 46
< 0x9_ | 4d 5f 07 03 03 03 03 03 02 00 6e 02 00 66 5a 00
< 0xa_ | 31 38 32 32 45 4d 53 31 2e 31 31 31 30 31 32 39
< 0xb_ | 32 30 32 34 30 39 3a 32 35 3a 33 39 00 00 00 08
< 0xc_ | 00 00 07 31 00 00 00 00 00 e9 00 e3 00 00 00 00
< 0xd_ | 00 00 c1 80 0d 00 05 80 00 01 00 00 00 0d 00 00
< 0xe_ | e2 00 00 f8 17 00 00 00 01 00 00 00 00 b7 00 00
< 0xf_ | 20 00 70 00 31 3c 32 33 3c 32 00 00 00 02 01 00
---
> 0x6_ | 00 00 00 00 00 00 00 00 32 00 3a 40 46 4c 52 58
> 0x7_ | 64 19 00 19 23 2c 3a 46 4d 4b 09 03 03 03 03 03
> 0x8_ | 00 00 34 3a 40 46 4c 52 64 00 00 19 23 2c 3a 46
> 0x9_ | 4d 5f 07 03 03 03 03 03 02 00 6e 02 00 66 3f 00
> 0xa_ | 31 38 32 32 45 4d 53 31 2e 31 31 32 30 34 30 32
> 0xb_ | 32 30 32 34 31 31 3a 32 30 3a 32 37 00 00 00 08
> 0xc_ | 00 00 07 25 00 00 00 00 01 19 00 00 00 00 00 00
> 0xd_ | 00 00 c1 84 0d 00 05 bc 00 01 00 00 00 05 00 00
> 0xe_ | e2 00 00 cc 18 00 00 c1 01 00 00 00 00 92 00 00
> 0xf_ | 00 00 70 00 29 3c 32 27 3c 32 00 00 00 01 00 00

where did you pull the EC version from? Dmidecode seems to show just the BIOS version (mine being .111 from feb):

Handle 0x0001, DMI type 0, 26 bytes
BIOS Information
    Vendor: American Megatrends International, LLC.
    Version: E1822IMS.111
    Release Date: 02/06/2024
nalim commented 4 months ago

where did you pull the EC version from? Dmidecode seems to show just the BIOS version (mine being .111 from feb):

Handle 0x0001, DMI type 0, 26 bytes
BIOS Information
  Vendor: American Megatrends International, LLC.
  Version: E1822IMS.111
  Release Date: 02/06/2024

cat /sys/devices/platform/msi-ec/debug/fw_version

Read more about debug mode in README :-)