Hi Matias, So I didn't implement the activity triggers and reactions plus IDLE loop like on https://nuttx.apache.org/docs/latest/components/power.html. We just call pm_changestate(MCU_POWER_DOMAIN, PM_SLEEP) from the application, because this application has a sleep state. The pm_changestate() function will trigger the up_pm_prepare() and the up_pm_notify() callback functions in the peripherals, which will first set the UART1 to the new slow clock and then the MCU to the very low power run mode on this slow clock. But this is then defined for the whole architecture, which we don't want. We want do define this behavior like which clock frequencies and which peripherals to enable in the application or something.
Do you have an example of how you did this? Where is your IDLE loop defined? Kind regards, Cis van Mierlo Embedded Software Engineer NXP Semiconductors, CTO Systems Innovations High Tech Campus 46, room 0.64, 5656 AE Eindhoven, The Netherlands E-mail: cis.van.mie...@nxp.com<mailto:cis.van.mie...@nxp.com> Internet: http://www.nxp.com<http://www.nxp.com/> From: Matias N. <mat...@imap.cc> Sent: Wednesday, March 10, 2021 3:44 PM To: dev@nuttx.apache.org Subject: Re: [EXT] Re: Project specific power management configuration Caution: EXT Email The interaction between hardware on/off and sleep states usually occurs on IDLE loop. I'm not sure if you are aware of this option but you can have a board specific idle loop implementation. This is what I usually do to implement project specific handling of sleep states. Best, Matias On Wed, Mar 10, 2021, at 11:39, Cis Van Mierlo wrote: Hi Matias, I indeed saw that there are several governors. I implemented PM switches in the application code (you could see this as a governor), there is for example a sleep state of the application, there the PM_SLEEP state is used to set the MCU in a very low power state. Another one is the PM_STANDBY, where the MCU will be put in very low power run mode, with only one SPI bus and the console UART enabled. All on a slower clock source. To reduce as much power as possible. But the problem that I have is that these peripherals and MCU modes are chip specific and you want to do the configuration of which MCU mode, which peripherals, etc. to enable in a power mode per board/project. Because then you know which peripherals you can turn off in a certain mode to reduce as much power, but still have the application states functional. This is what I wanted to bring to a discussion on how to solve this. Kind regards, Cis van Mierlo Embedded Software Engineer NXP Semiconductors, CTO Systems Innovations High Tech Campus 46, room 0.64, 5656 AE Eindhoven, The Netherlands E-mail: cis.van.mie...@nxp.com<mailto:cis.van.mie...@nxp.com> Internet: http://www.nxp.com<https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.nxp.com%2F&data=04%7C01%7Ccis.van.mierlo%40nxp.com%7C0d027db521e64caf3cca08d8e3d31156%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C637509842964783976%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=9TXZF2GAVXYOFdjcg2Eyk6vdRX4vIhA1IquP9w9Gn88%3D&reserved=0> From: Matias N. <mat...@imap.cc<mailto:mat...@imap.cc>> Sent: Friday, March 5, 2021 4:32 PM To: dev@nuttx.apache.org<mailto:dev@nuttx.apache.org> Subject: [EXT] Re: Project specific power management configuration Caution: EXT Email Hi, I'm not entirely sure what is the specific control over PM you need but some time ago I introduced the notion of "governor" which lets you select either the activity based one (which uses a specific algorithm to control states), a greedy governor (which lets an application directly control states via relax/stay calls). This can easily be extended to have another governor or even an application defined one (in that case, there need to be some extra logic to receive the lower-half of the governor from board logic). Best, Matias On Fri, Mar 5, 2021, at 07:15, Cis Van Mierlo wrote: Hi all, Me and my colleagues (NXP mobile robotics) encountered a problem and we would like to start a discussion on how to solve that. We're making a development board using NuttX and we would like to add the power mode configuration to it. But this needs to be specific for this "project". The problem: The pm.h specific logic is in the chip dependent code (for example the up_pm_prepare() and up_pm_notify() callback functions are located in nuttx/arch/arm/src/s32k1xx/s32k1xx_clockconfig.c for the power mode switch of the MCU). And for peripherals in the chip specific files as well, for example to enable/disable peripherals, like in nuttx/arch/arm/src/s32k1xx/s32k1xx_serial.c to enable the serial on the other clock which is active in the MCU low power run mode. But you should not decide on chip level what your current board is doing, each board/project would want to have its own power optimizations and ability to enable/disable peripherals depending on the use case. So in that case you would want to give the user/developer the option to refine which power reductions he will use for his product/project. We have several ideas which we would like to use to start a discussion on this. Idea 1: Add the configuration with the kconfig files to for example "System Type" in menuconfig. Make a PM configure part in which you can enable/disable the various PM states (PM_IDLE, PM_STANDBY, PM_SLEEP) and going in this PM state will allow you to configure in what state the MCU should be and which peripherals should be enabled. [Machine generated alternative text: menuconfig Build Setup System Type Allows user to specify which peripherals are enabled In e specflc power mode and in which mode the MCI-I Is PM configuration IDLE SLEEP Copy configuratjon from menuconfig (pherjpherals)? chip specific MCIJ mode RUN chip specific MCIJ mode UART CARTO LIARTI only show PM suppo?ed peripherals HSRUN RUN VLPR STOP] Idea 2: Another idea is that you add the PM configuration of the peripherals, to the peripheral configuration. [Machine generated alternative text: menuconfig Build Setup System Type Peripheral Selection UART CARTO LIARTI BAUD rate OMA support Power Management NORMAL PM IDLE PM STANDBY PM SLEEP] Of course we are open to other ideas. We just wanted to get a discussion started on how to do this the best way. Kind regards, Cis van Mierlo Embedded Software Engineer NXP Semiconductors, CTO Systems Innovations High Tech Campus 46, room 0.64, 5656 AE Eindhoven, The Netherlands E-mail: cis.van.mie...@nxp.com<mailto:cis.van.mie...@nxp.com> Internet: http://www.nxp.com<https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.nxp.com%2F&data=04%7C01%7Ccis.van.mierlo%40nxp.com%7C0d027db521e64caf3cca08d8e3d31156%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0%7C0%7C637509842964783976%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=9TXZF2GAVXYOFdjcg2Eyk6vdRX4vIhA1IquP9w9Gn88%3D&reserved=0> Attachments: * image001.png * image002.png * PM_mode_configuration_option.png * PM_mode_configuration_option2.png Attachments: * image001.png * image002.png