3939_SUSPEND_MONITOR_POLL_S : int = 1
4040_SUSPEND_GAP_THRESHOLD_S : float = 1.0
4141
42+ _RYZEN_SMU_WIKI = cfg .RYZEN_SMU_WIKI_URL
43+
4244_DAEMON_LOCK_FILE = "/run/uxtu4linux_daemon.lock"
4345_daemon_lock_fh : object = None
4446
@@ -150,13 +152,35 @@ def _fmt_duration(seconds: float) -> str:
150152 return f"{ seconds / 3600 :.1f} h"
151153
152154
155+ _smu_blocked_warned = False
156+
157+
158+ def _smu_blocked () -> str | None :
159+ from Assets .Modules import smu
160+ if not smu .is_available ():
161+ return "ryzen_smu is not available"
162+ if not smu .version_ok ():
163+ return f"ryzen_smu { smu .get_version ()} is too old (minimum: { smu .version_str (smu .MIN_VERSION )} )"
164+ return None
165+
166+
153167def _apply_via_smu (args : str , mode : str ) -> tuple [str , bool ]:
168+ global _smu_blocked_warned
154169 family = cfg .get ("Info" , "Family" )
155170 if not args .strip ():
156171 return "" , False
157172 if not family :
158173 log .error ("Cannot apply preset: CPU family not set in config — was hardware detected?" )
159174 return "" , False
175+ blocked = _smu_blocked ()
176+ if blocked :
177+ if not _smu_blocked_warned :
178+ _smu_blocked_warned = True
179+ log .error ("%s — presets cannot be applied.\n Install guide: %s" , blocked , cfg .RYZEN_SMU_WIKI_URL )
180+ return f"{ blocked } — preset not applied" , False
181+ if _smu_blocked_warned :
182+ _smu_blocked_warned = False
183+ log .info ("ryzen_smu is available again — presets can be applied." )
160184 try :
161185 from Assets .Modules import runner
162186 output , rejected = runner .apply_args (args , family )
@@ -776,8 +800,7 @@ def main() -> None:
776800 log .info ("UXTU4Linux daemon v%s" , cfg .LOCAL_VERSION )
777801
778802 if cfg .get ("Info" , "Type" ) == "Intel" :
779- log .error ("Intel CPUs are not supported — exiting." )
780- sys .exit (1 )
803+ log .warning ("Intel CPU detected — SMU control is not supported; presets will not be applied." )
781804
782805 from Assets .Modules .hardware import _find_dmidecode , secure_boot_enabled
783806 from Assets .Modules import smu
@@ -799,24 +822,21 @@ def main() -> None:
799822 installed = ryzen_smu_installed ()
800823 sb = secure_boot_enabled ()
801824 if not installed :
802- log .error ("ryzen_smu not installed. Install: git clone https://github.com/amkillam/ryzen_smu && cd ryzen_smu && sudo make dkms-install" )
803- log .error ("Then enroll the DKMS signing key: sudo mokutil --import /var/lib/dkms/mok.pub" )
825+ log .error ("ryzen_smu not installed.\n Install guide: %s" , _RYZEN_SMU_WIKI )
804826 elif sb and not ryzen_smu_signed ():
805- log .error ("ryzen_smu installed but not signed for Secure Boot." )
806- log .error ("Enroll the DKMS signing key: sudo mokutil --import /var/lib/dkms/mok.pub — then reboot." )
827+ log .error ("ryzen_smu installed but not signed for Secure Boot.\n Install guide: %s" , _RYZEN_SMU_WIKI )
807828 else :
808- log .error ("ryzen_smu installed but not loaded. Run: sudo modprobe ryzen_smu" )
809- sys .exit (1 )
810-
811- if not smu .version_ok ():
829+ log .error ("ryzen_smu installed but not loaded.\n Install guide: %s" , _RYZEN_SMU_WIKI )
830+ log .warning ("Running without SMU access — presets will not be applied until ryzen_smu is working." )
831+ elif not smu .version_ok ():
812832 log .error (
813- "ryzen_smu version %s is too old (minimum: %s). Update: git clone https://github.com/amkillam/ryzen_smu && cd ryzen_smu && sudo make dkms-install " ,
814- smu .get_version (), smu .version_str (smu .MIN_VERSION ),
833+ "ryzen_smu version %s is too old (minimum: %s).\n Install guide: %s " ,
834+ smu .get_version (), smu .version_str (smu .MIN_VERSION ), _RYZEN_SMU_WIKI ,
815835 )
816- sys . exit ( 1 )
817-
818- log .info ("ryzen_smu driver ready (version %s)." , smu .get_version ())
819- log .debug ("SMN interface available: %s" , smu .has_smn ())
836+ log . warning ( "Running without SMU access — presets will not be applied until ryzen_smu is updated." )
837+ else :
838+ log .info ("ryzen_smu driver ready (version %s)." , smu .get_version ())
839+ log .debug ("SMN interface available: %s" , smu .has_smn ())
820840
821841 daemon = PowerDaemon ()
822842 on_ready = (
0 commit comments