summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Yilun Lin <yllin@chromium.org>2020-11-11 13:57:08 +0800
committerCommit Bot <commit-bot@chromium.org>2020-11-12 03:16:43 +0000
commit2f1da8fe2f1ef9a2daf8e02dcf9650c2e37a37b2 (patch)
treed26ab047b07db954cf53d763e213858c0e3aeecd
parent48dfb28451d7ecf756a02261ce69fa001ddcc848 (diff)
downloadchrome-ec-2f1da8fe2f1ef9a2daf8e02dcf9650c2e37a37b2.tar.gz
kukui: enlarge task stacks
This CL adds analyzstack.yaml and ensure the stack is enoguh for all the tasks. Also, correct excpetion_frame_size from 224 to 64 and this reduces the stack usage. BUG=b:172182593 TEST=No stack overflow in the test: cat <<"EOF" | bash #!/bin/bash BRDS=$(grep -r BASEBOARD:=kukui $(find . -name "build.mk") | awk -F'/' '{print $3}') BRDS+=" krane juniper" echo $BRDS for BRD in ${BRDS}; do echo Analyzing ${BRD} make BOARD=${BRD} -j 2>&1 > /dev/null && make BOARD=${BRD} analyzestack -j | grep Task | awk -F'[ :,]' '{if ($8>$NF) printf " %-15s %-5s (used) > %-5s (allocated)\n", $3, $8, $NF}' done EOF BRANCH=kukui Change-Id: Ie30ac827df66ea4786598c7b74b1ab4fe1922a08 Signed-off-by: Eric Yilun Lin <yllin@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2530818
-rw-r--r--board/burnet/analyzestack.yaml246
-rw-r--r--board/burnet/ec.tasklist8
-rw-r--r--board/cerise/analyzestack.yaml246
-rw-r--r--board/cerise/ec.tasklist8
-rw-r--r--board/damu/analyzestack.yaml246
-rw-r--r--board/damu/ec.tasklist8
-rw-r--r--board/fennel/analyzestack.yaml246
-rw-r--r--board/fennel/ec.tasklist8
-rw-r--r--board/jacuzzi/analyzestack.yaml244
-rw-r--r--board/jacuzzi/ec.tasklist8
-rw-r--r--board/kakadu/analyzestack.yaml268
-rw-r--r--board/kakadu/ec.tasklist4
-rw-r--r--board/kappa/analyzestack.yaml244
-rw-r--r--board/kappa/ec.tasklist10
-rw-r--r--board/kodama/analyzestack.yaml285
-rw-r--r--board/kodama/ec.tasklist10
-rw-r--r--board/kukui/analyzestack.yaml10
-rw-r--r--board/kukui/ec.tasklist2
-rw-r--r--board/stern/analyzestack.yaml246
-rw-r--r--board/stern/ec.tasklist8
-rw-r--r--board/willow/analyzestack.yaml246
-rw-r--r--board/willow/ec.tasklist8
22 files changed, 2567 insertions, 42 deletions
diff --git a/board/burnet/analyzestack.yaml b/board/burnet/analyzestack.yaml
new file mode 100644
index 0000000000..76f8f523f2
--- /dev/null
+++ b/board/burnet/analyzestack.yaml
@@ -0,0 +1,246 @@
+# Check cortex-m/switch.S
+exception_frame_size: 64
+add:
+# TCPC functions, see fusb302_tcpm_drv struct.
+ tcpm_init[driver/tcpm/tcpm.h:121]:
+ - fusb302_tcpm_init
+ tcpm_release[driver/tcpm/tcpm.h:134]:
+ - fusb302_tcpm_release,
+ tcpm_select_rp_value[driver/tcpm/tcpm.h:150]:
+ - fusb302_tcpm_select_rp_value
+ tcpm_set_msg_header[driver/tcpm/tcpm.h:170]:
+ - fusb302_tcpm_set_msg_header
+ tcpm_enter_low_power_mode[driver/tcpm/tcpm.h:234]:
+ - fusb302_tcpm_enter_low_power_mode
+ tcpm_transmit[driver/tcpm/tcpm.h:188]:
+ - fusb302_tcpm_transmit
+ tcpm_get_cc[driver/tcpm/tcpm.h:140]:
+ - fusb302_tcpm_get_cc
+ tcpm_set_rx_enable[driver/tcpm/tcpm.h:176]:
+ - fusb302_tcpm_set_rx_enable
+ tcpm_set_vconn[driver/tcpm/tcpm.h:165]:
+ - fusb302_tcpm_set_vconn
+ tcpm_set_polarity[driver/tcpm/tcpm.h:160]:
+ - fusb302_tcpm_set_polarity
+ tcpm_set_cc[driver/tcpm/tcpm.h:155]:
+ - fusb302_tcpm_set_cc
+ tcpm_get_vbus_level[driver/tcpm/tcpm.h:145]:
+ - fusb302_tcpm_get_vbus_level
+ tcpm_enqueue_message[driver/tcpm/tcpci.c:468]:
+ - fusb302_tcpm_get_message_raw
+# USB mux, see it5205_usb_mux_driver
+ usb_mux_flip[driver/usb_mux/usb_mux.c:164]: #get
+ - it5205_set_mux
+ usb_mux_flip[driver/usb_mux/usb_mux.c:175]: #set
+ - it5205_get_mux
+ usb_mux_init[driver/usb_mux/usb_mux.c:65]: #init
+ - it5205_init
+ usb_mux_init[driver/usb_mux/usb_mux.c:76]: # board_init
+ - None
+ enter_low_power_mode[driver/usb_mux/usb_mux.c:43]:
+ - it5205_enter_low_power_mode
+ usb_mux_set[driver/usb_mux/usb_mux.c:113]:
+ - it5205_set_mux
+ hc_usb_pd_mux_info[driver/usb_mux/usb_mux.c:241]:
+ - it5205_get_mux
+ usb_mux_get[driver/usb_mux/usb_mux.c:141]:
+ - it5205_get_mux
+# usb_mux hpd_update
+ svdm_dp_post_config[baseboard/kukui/usb_pd_policy.c:200]:
+ - board_hpd_status
+ svdm_exit_dp_mode[baseboard/kukui/usb_pd_policy.c:263]:
+ - board_hpd_status
+ svdm_dp_attention[baseboard/kukui/usb_pd_policy.c:219]:
+ - board_hpd_status
+# USB PD policy, see struct svdm_amode_fx
+ pd_svdm[common/usb_pd_policy.c:766]:
+ - svdm_dp_status
+ - svdm_gfu_status
+ pd_svdm[common/usb_pd_policy.c:777]:
+ - svdm_dp_config
+ - svdm_gfu_config
+ pd_svdm[common/usb_pd_policy.c:783]:
+ - svdm_dp_post_config
+ pd_dfp_enter_mode[common/usb_pd_policy.c:440]:
+ - svdm_enter_dp_mode
+ - svdm_enter_gfu_mode
+ pd_dfp_exit_mode[common/usb_pd_policy.c:544]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+ dfp_consume_attention[common/usb_pd_policy.c:478]:
+ - svdm_dp_attention
+ - svdm_gfu_attention
+ pd_dfp_exit_mode[common/usb_pd_policy.c:561]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+# Motion sense: bmi160
+ motion_sense_set_data_rate[common/motion_sense.c:156]: # set_data_rate
+ - set_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:175]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:184]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_motion_intervals[common/motion_sense.c:302]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_ec_rate_from_ap[common/motion_sense.c:196]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_init[common/motion_sense.c:327]: # init
+ - init[driver/accelgyro_bmi160.c]
+ sensor_init_done[common/motion_sense.c:353]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:431]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:437]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:440]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:589]: # read
+ - read[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:576]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_process[common/motion_sense.c:667]: # irq_handler
+ - irq_handler[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1153]: # set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1164]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1179]: # set_offset
+ - set_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1207]: # set_scale
+ - set_scale[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1233]: # perform_calib
+ - perform_calib[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1237]: # get_offset
+ - get_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1313]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1333]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1337]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1455]: # set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1460]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ command_accelresolution[common/motion_sense.c:1504]: # set_resolution
+ - None
+ command_accelresolution[common/motion_sense.c:1508]: # get_resolution
+ - get_resolution[driver/accelgyro_bmi160.c]
+ command_accel_data_rate[common/motion_sense.c:1560]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ command_accel_read_xyz[common/motion_sense.c:1595]: # read
+ - read[driver/accelgyro_bmi160.c]
+
+# Core
+ handle_command[common/console.c:248]:
+ - { name: __cmds, stride: 16, offset: 4 }
+ hook_task[common/hooks.c:200]:
+ - { name: __deferred_funcs, stride: 4, offset: 0 }
+ - { name: __hooks_second, stride: 8, offset: 0 }
+ - { name: __hooks_tick, stride: 8, offset: 0 }
+ # Note: This assumes worse case, where all hook functions can be called from
+ # any hook_notify call
+ # Generate using `grep hooks_.*_end build/kukui/R*/ec.R*.smap |
+ # sed -e 's/.*\(__hooks.*\)_end/ - { name: \1, stride: 8, offset: 0 }/' |
+ # sort -u`
+ hook_notify[common/hooks.c:130]:
+ - { name: __hooks_ac_change, stride: 8, offset: 0 }
+ - { name: __hooks_base_attached_change, stride: 8, offset: 0 }
+ - { name: __hooks_battery_soc_change, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_pre_init, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_reset, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_resume, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_shutdown, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_startup, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_suspend, stride: 8, offset: 0 }
+ - { name: __hooks_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_lid_change, stride: 8, offset: 0 }
+ - { name: __hooks_pre_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_pwrbtn_change, stride: 8, offset: 0 }
+ - { name: __hooks_sysjump, stride: 8, offset: 0 }
+ - { name: __hooks_tablet_mode_change, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_connect, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_disconnect, stride: 8, offset: 0 }
+ mkbp_get_next_event[common/mkbp_event.c:369]:
+ - { name: __mkbp_evt_srcs, stride: 8, offset: 4 }
+ host_command_process[common/host_command.c:708]:
+ - { name: __hcmds, stride: 12, offset: 0 }
+ vfnprintf:
+ # This covers all the addchar in vfnprintf, but stackanalyzer does not
+ # realize that...
+ - __tx_char
+ host_send_response[common/host_command.c:153]: # send_response
+ - spi_send_response
+ host_packet_respond[common/host_command.c:240]:
+ - spi_send_response_packet
+# Misc
+ i2c_command_passthru[common/i2c_master.c:991]:
+ - None
+ cprints[common/console_output.c:108]:
+ - None # I'm not sure what this is?!
+ chip_i2c_xfer_with_notify[common/i2c_master.c:112]: # i2c_port->drv->xfer
+ - i2c_bitbang_xfer
+ default_handler[core/cortex-m0/init.S:100]:
+ - exception_panic
+ gpio_interrupt[chip/stm32/gpio.c:154]:
+ - None
+
+remove:
+# Remove all callsites pointing to panic_assert_fail.
+- panic_assert_fail
+
+# Remove paths that make no sense
+# HOOK_USB_PD_DISCONNECT
+- [ pd_request_power_swap, set_state.lto_priv.206, hook_notify,
+ [ motion_sense_shutdown, charger_enable_psys, charger_disable_psys,
+ system_common_shutdown ] ]
+# HOOK_AC_CHANGE/HOOK_BATTERY_SOC_CHANGE
+- [ charger_task, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_LID_CHANGE
+- [ [ lid_switch_open, lid_switch_close ], hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_BASE_ATTACHED_CHANGE/HOOK_TABLET_MODE_CHANGE
+- [ tablet_set_mode, hook_notify, [ system_common_shutdown, charger_enable_psys, charger_disable_psys ] ]
+# HOOK_POWER_BUTTON_CHANGE
+- [ power_button_change_deferred, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_SECOND
+- [ hook_task, hook_notify, [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_SYSJUMP
+- [ jump_to_image, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown, charger_enable_psys, charger_disable_psys ] ]
+- [ pd_request_power_swap, set_state, hook_notify, panic_init ]
+# set_state(port, PD_STATE_SRC/SNK_SWAP_INIT); will not call these functions
+- [ pd_request_power_swap, set_state,
+ [ pd_dfp_exit_mode, usb_mux_set, pd_power_supply_reset, tcpm_set_vconn ] ]
+- [ [ pd_request_data_swap, pd_request_vconn_swap ] , set_state, pd_power_supply_reset ]
+# All sensors will be shut down in S5
+- [ motion_sense_shutdown, motion_sense_switch_sensor_rate,
+ [ motion_sense_set_data_rate, motion_sense_init ] ]
+# HOOK_CHIPSET_PRE_INIT, HOOK_CHIPSET_STARTUP, HOOK_CHIPSET_RESUME,
+# HOOK_CHIPSET_SUSPEND, HOOK_CHIPSET_SHUTDOWN
+- [ chipset_task, hook_notify ]
+# TCPC, KEYBOARD, BC12 will not access battery's bitbang
+- [ [ raw_read8.lto_priv.157, tcpc_read.lto_priv.352, tcpc_write.lto_priv.351,
+ it8801_ioex_write, it8801_read, it8801_write.lto_priv.336, raw_read16.lto_priv.349,
+ raw_write16.lto_priv.348, it5205_init.lto_priv.241, it5205_write,
+ raw_read8, tcpc_read.lto_priv.340 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ], [ i2c_write, i2c_read ],
+ i2c_xfer_unlocked, i2c_bitbang_xfer ]
+- [ [ raw_read8.lto_priv.157, tcpc_read.lto_priv.352, tcpc_write.lto_priv.351,
+ it8801_ioex_write, it8801_read, it8801_write.lto_priv.336, raw_read16.lto_priv.349,
+ raw_write16.lto_priv.348, it5205_init.lto_priv.241, it5205_write,
+ raw_read8, tcpc_read.lto_priv.340 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ] , [ i2c_write, i2c_read ],
+ i2c_xfer, i2c_xfer_unlocked, i2c_bitbang_xfer ]
+# PD_INT_C0_TASK
+# pd_wait_exit_low_power -> reset_device_and_notify can only be called in a pd_task NOT pd_interrupt_handler_task
+- [ pd_interrupt_handler_task, fusb302_tcpc_alert, pd_execute_hard_reset, set_state.lto_priv.206,
+ pd_power_supply_reset, charge_manager_source_port.part.10, charge_manager_save_log.part.9,
+ charge_manager_fill_power_info, tcpc_read.lto_priv.352, pd_wait_exit_low_power, reset_device_and_notify ]
+# CONSOLE_TASK
+# pd_wait_exit_low_power -> reset_device_and_notify can only be called in a pd_task NOT pd_interrupt_handler_task
+- [ console_task, command_pd, set_state.lto_priv.206, pd_power_supply_reset, charge_manager_source_port.part.10,
+ charge_manager_save_log.part.9, charge_manager_fill_power_info, tcpc_read.lto_priv.352, pd_wait_exit_low_power,
+ reset_device_and_notify ]
diff --git a/board/burnet/ec.tasklist b/board/burnet/ec.tasklist
index 5622d67685..c7f7811cff 100644
--- a/board/burnet/ec.tasklist
+++ b/board/burnet/ec.tasklist
@@ -7,14 +7,14 @@
* See CONFIG_TASK_LIST in config.h for details.
*/
#define CONFIG_TASK_LIST \
- TASK_ALWAYS(HOOKS, hook_task, NULL, VENTI_TASK_STACK_SIZE) \
- TASK_ALWAYS(CHARGER, charger_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOOKS, hook_task, NULL, 1024) \
+ TASK_ALWAYS(CHARGER, charger_task, NULL, 1152) \
TASK_ALWAYS(USB_CHG_P0, usb_charger_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(CHIPSET, chipset_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS_RW(MOTIONSENSE, motion_sense_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(PDCMD, pd_command_task, NULL, 1024) \
- TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1024) \
- TASK_ALWAYS(CONSOLE, console_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1152) \
+ TASK_ALWAYS(CONSOLE, console_task, NULL, 1024) \
TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS(PD_C0, pd_task, NULL, 1280) \
TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, 1024) \
diff --git a/board/cerise/analyzestack.yaml b/board/cerise/analyzestack.yaml
new file mode 100644
index 0000000000..76f8f523f2
--- /dev/null
+++ b/board/cerise/analyzestack.yaml
@@ -0,0 +1,246 @@
+# Check cortex-m/switch.S
+exception_frame_size: 64
+add:
+# TCPC functions, see fusb302_tcpm_drv struct.
+ tcpm_init[driver/tcpm/tcpm.h:121]:
+ - fusb302_tcpm_init
+ tcpm_release[driver/tcpm/tcpm.h:134]:
+ - fusb302_tcpm_release,
+ tcpm_select_rp_value[driver/tcpm/tcpm.h:150]:
+ - fusb302_tcpm_select_rp_value
+ tcpm_set_msg_header[driver/tcpm/tcpm.h:170]:
+ - fusb302_tcpm_set_msg_header
+ tcpm_enter_low_power_mode[driver/tcpm/tcpm.h:234]:
+ - fusb302_tcpm_enter_low_power_mode
+ tcpm_transmit[driver/tcpm/tcpm.h:188]:
+ - fusb302_tcpm_transmit
+ tcpm_get_cc[driver/tcpm/tcpm.h:140]:
+ - fusb302_tcpm_get_cc
+ tcpm_set_rx_enable[driver/tcpm/tcpm.h:176]:
+ - fusb302_tcpm_set_rx_enable
+ tcpm_set_vconn[driver/tcpm/tcpm.h:165]:
+ - fusb302_tcpm_set_vconn
+ tcpm_set_polarity[driver/tcpm/tcpm.h:160]:
+ - fusb302_tcpm_set_polarity
+ tcpm_set_cc[driver/tcpm/tcpm.h:155]:
+ - fusb302_tcpm_set_cc
+ tcpm_get_vbus_level[driver/tcpm/tcpm.h:145]:
+ - fusb302_tcpm_get_vbus_level
+ tcpm_enqueue_message[driver/tcpm/tcpci.c:468]:
+ - fusb302_tcpm_get_message_raw
+# USB mux, see it5205_usb_mux_driver
+ usb_mux_flip[driver/usb_mux/usb_mux.c:164]: #get
+ - it5205_set_mux
+ usb_mux_flip[driver/usb_mux/usb_mux.c:175]: #set
+ - it5205_get_mux
+ usb_mux_init[driver/usb_mux/usb_mux.c:65]: #init
+ - it5205_init
+ usb_mux_init[driver/usb_mux/usb_mux.c:76]: # board_init
+ - None
+ enter_low_power_mode[driver/usb_mux/usb_mux.c:43]:
+ - it5205_enter_low_power_mode
+ usb_mux_set[driver/usb_mux/usb_mux.c:113]:
+ - it5205_set_mux
+ hc_usb_pd_mux_info[driver/usb_mux/usb_mux.c:241]:
+ - it5205_get_mux
+ usb_mux_get[driver/usb_mux/usb_mux.c:141]:
+ - it5205_get_mux
+# usb_mux hpd_update
+ svdm_dp_post_config[baseboard/kukui/usb_pd_policy.c:200]:
+ - board_hpd_status
+ svdm_exit_dp_mode[baseboard/kukui/usb_pd_policy.c:263]:
+ - board_hpd_status
+ svdm_dp_attention[baseboard/kukui/usb_pd_policy.c:219]:
+ - board_hpd_status
+# USB PD policy, see struct svdm_amode_fx
+ pd_svdm[common/usb_pd_policy.c:766]:
+ - svdm_dp_status
+ - svdm_gfu_status
+ pd_svdm[common/usb_pd_policy.c:777]:
+ - svdm_dp_config
+ - svdm_gfu_config
+ pd_svdm[common/usb_pd_policy.c:783]:
+ - svdm_dp_post_config
+ pd_dfp_enter_mode[common/usb_pd_policy.c:440]:
+ - svdm_enter_dp_mode
+ - svdm_enter_gfu_mode
+ pd_dfp_exit_mode[common/usb_pd_policy.c:544]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+ dfp_consume_attention[common/usb_pd_policy.c:478]:
+ - svdm_dp_attention
+ - svdm_gfu_attention
+ pd_dfp_exit_mode[common/usb_pd_policy.c:561]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+# Motion sense: bmi160
+ motion_sense_set_data_rate[common/motion_sense.c:156]: # set_data_rate
+ - set_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:175]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:184]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_motion_intervals[common/motion_sense.c:302]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_ec_rate_from_ap[common/motion_sense.c:196]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_init[common/motion_sense.c:327]: # init
+ - init[driver/accelgyro_bmi160.c]
+ sensor_init_done[common/motion_sense.c:353]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:431]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:437]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:440]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:589]: # read
+ - read[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:576]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_process[common/motion_sense.c:667]: # irq_handler
+ - irq_handler[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1153]: # set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1164]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1179]: # set_offset
+ - set_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1207]: # set_scale
+ - set_scale[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1233]: # perform_calib
+ - perform_calib[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1237]: # get_offset
+ - get_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1313]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1333]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1337]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1455]: # set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1460]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ command_accelresolution[common/motion_sense.c:1504]: # set_resolution
+ - None
+ command_accelresolution[common/motion_sense.c:1508]: # get_resolution
+ - get_resolution[driver/accelgyro_bmi160.c]
+ command_accel_data_rate[common/motion_sense.c:1560]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ command_accel_read_xyz[common/motion_sense.c:1595]: # read
+ - read[driver/accelgyro_bmi160.c]
+
+# Core
+ handle_command[common/console.c:248]:
+ - { name: __cmds, stride: 16, offset: 4 }
+ hook_task[common/hooks.c:200]:
+ - { name: __deferred_funcs, stride: 4, offset: 0 }
+ - { name: __hooks_second, stride: 8, offset: 0 }
+ - { name: __hooks_tick, stride: 8, offset: 0 }
+ # Note: This assumes worse case, where all hook functions can be called from
+ # any hook_notify call
+ # Generate using `grep hooks_.*_end build/kukui/R*/ec.R*.smap |
+ # sed -e 's/.*\(__hooks.*\)_end/ - { name: \1, stride: 8, offset: 0 }/' |
+ # sort -u`
+ hook_notify[common/hooks.c:130]:
+ - { name: __hooks_ac_change, stride: 8, offset: 0 }
+ - { name: __hooks_base_attached_change, stride: 8, offset: 0 }
+ - { name: __hooks_battery_soc_change, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_pre_init, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_reset, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_resume, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_shutdown, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_startup, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_suspend, stride: 8, offset: 0 }
+ - { name: __hooks_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_lid_change, stride: 8, offset: 0 }
+ - { name: __hooks_pre_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_pwrbtn_change, stride: 8, offset: 0 }
+ - { name: __hooks_sysjump, stride: 8, offset: 0 }
+ - { name: __hooks_tablet_mode_change, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_connect, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_disconnect, stride: 8, offset: 0 }
+ mkbp_get_next_event[common/mkbp_event.c:369]:
+ - { name: __mkbp_evt_srcs, stride: 8, offset: 4 }
+ host_command_process[common/host_command.c:708]:
+ - { name: __hcmds, stride: 12, offset: 0 }
+ vfnprintf:
+ # This covers all the addchar in vfnprintf, but stackanalyzer does not
+ # realize that...
+ - __tx_char
+ host_send_response[common/host_command.c:153]: # send_response
+ - spi_send_response
+ host_packet_respond[common/host_command.c:240]:
+ - spi_send_response_packet
+# Misc
+ i2c_command_passthru[common/i2c_master.c:991]:
+ - None
+ cprints[common/console_output.c:108]:
+ - None # I'm not sure what this is?!
+ chip_i2c_xfer_with_notify[common/i2c_master.c:112]: # i2c_port->drv->xfer
+ - i2c_bitbang_xfer
+ default_handler[core/cortex-m0/init.S:100]:
+ - exception_panic
+ gpio_interrupt[chip/stm32/gpio.c:154]:
+ - None
+
+remove:
+# Remove all callsites pointing to panic_assert_fail.
+- panic_assert_fail
+
+# Remove paths that make no sense
+# HOOK_USB_PD_DISCONNECT
+- [ pd_request_power_swap, set_state.lto_priv.206, hook_notify,
+ [ motion_sense_shutdown, charger_enable_psys, charger_disable_psys,
+ system_common_shutdown ] ]
+# HOOK_AC_CHANGE/HOOK_BATTERY_SOC_CHANGE
+- [ charger_task, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_LID_CHANGE
+- [ [ lid_switch_open, lid_switch_close ], hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_BASE_ATTACHED_CHANGE/HOOK_TABLET_MODE_CHANGE
+- [ tablet_set_mode, hook_notify, [ system_common_shutdown, charger_enable_psys, charger_disable_psys ] ]
+# HOOK_POWER_BUTTON_CHANGE
+- [ power_button_change_deferred, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_SECOND
+- [ hook_task, hook_notify, [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_SYSJUMP
+- [ jump_to_image, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown, charger_enable_psys, charger_disable_psys ] ]
+- [ pd_request_power_swap, set_state, hook_notify, panic_init ]
+# set_state(port, PD_STATE_SRC/SNK_SWAP_INIT); will not call these functions
+- [ pd_request_power_swap, set_state,
+ [ pd_dfp_exit_mode, usb_mux_set, pd_power_supply_reset, tcpm_set_vconn ] ]
+- [ [ pd_request_data_swap, pd_request_vconn_swap ] , set_state, pd_power_supply_reset ]
+# All sensors will be shut down in S5
+- [ motion_sense_shutdown, motion_sense_switch_sensor_rate,
+ [ motion_sense_set_data_rate, motion_sense_init ] ]
+# HOOK_CHIPSET_PRE_INIT, HOOK_CHIPSET_STARTUP, HOOK_CHIPSET_RESUME,
+# HOOK_CHIPSET_SUSPEND, HOOK_CHIPSET_SHUTDOWN
+- [ chipset_task, hook_notify ]
+# TCPC, KEYBOARD, BC12 will not access battery's bitbang
+- [ [ raw_read8.lto_priv.157, tcpc_read.lto_priv.352, tcpc_write.lto_priv.351,
+ it8801_ioex_write, it8801_read, it8801_write.lto_priv.336, raw_read16.lto_priv.349,
+ raw_write16.lto_priv.348, it5205_init.lto_priv.241, it5205_write,
+ raw_read8, tcpc_read.lto_priv.340 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ], [ i2c_write, i2c_read ],
+ i2c_xfer_unlocked, i2c_bitbang_xfer ]
+- [ [ raw_read8.lto_priv.157, tcpc_read.lto_priv.352, tcpc_write.lto_priv.351,
+ it8801_ioex_write, it8801_read, it8801_write.lto_priv.336, raw_read16.lto_priv.349,
+ raw_write16.lto_priv.348, it5205_init.lto_priv.241, it5205_write,
+ raw_read8, tcpc_read.lto_priv.340 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ] , [ i2c_write, i2c_read ],
+ i2c_xfer, i2c_xfer_unlocked, i2c_bitbang_xfer ]
+# PD_INT_C0_TASK
+# pd_wait_exit_low_power -> reset_device_and_notify can only be called in a pd_task NOT pd_interrupt_handler_task
+- [ pd_interrupt_handler_task, fusb302_tcpc_alert, pd_execute_hard_reset, set_state.lto_priv.206,
+ pd_power_supply_reset, charge_manager_source_port.part.10, charge_manager_save_log.part.9,
+ charge_manager_fill_power_info, tcpc_read.lto_priv.352, pd_wait_exit_low_power, reset_device_and_notify ]
+# CONSOLE_TASK
+# pd_wait_exit_low_power -> reset_device_and_notify can only be called in a pd_task NOT pd_interrupt_handler_task
+- [ console_task, command_pd, set_state.lto_priv.206, pd_power_supply_reset, charge_manager_source_port.part.10,
+ charge_manager_save_log.part.9, charge_manager_fill_power_info, tcpc_read.lto_priv.352, pd_wait_exit_low_power,
+ reset_device_and_notify ]
diff --git a/board/cerise/ec.tasklist b/board/cerise/ec.tasklist
index 3549007a02..c7f7811cff 100644
--- a/board/cerise/ec.tasklist
+++ b/board/cerise/ec.tasklist
@@ -7,14 +7,14 @@
* See CONFIG_TASK_LIST in config.h for details.
*/
#define CONFIG_TASK_LIST \
- TASK_ALWAYS(HOOKS, hook_task, NULL, VENTI_TASK_STACK_SIZE) \
- TASK_ALWAYS(CHARGER, charger_task, NULL, 1024) \
+ TASK_ALWAYS(HOOKS, hook_task, NULL, 1024) \
+ TASK_ALWAYS(CHARGER, charger_task, NULL, 1152) \
TASK_ALWAYS(USB_CHG_P0, usb_charger_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(CHIPSET, chipset_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS_RW(MOTIONSENSE, motion_sense_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(PDCMD, pd_command_task, NULL, 1024) \
- TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1024) \
- TASK_ALWAYS(CONSOLE, console_task, NULL, LARGER_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1152) \
+ TASK_ALWAYS(CONSOLE, console_task, NULL, 1024) \
TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS(PD_C0, pd_task, NULL, 1280) \
TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, 1024) \
diff --git a/board/damu/analyzestack.yaml b/board/damu/analyzestack.yaml
new file mode 100644
index 0000000000..76f8f523f2
--- /dev/null
+++ b/board/damu/analyzestack.yaml
@@ -0,0 +1,246 @@
+# Check cortex-m/switch.S
+exception_frame_size: 64
+add:
+# TCPC functions, see fusb302_tcpm_drv struct.
+ tcpm_init[driver/tcpm/tcpm.h:121]:
+ - fusb302_tcpm_init
+ tcpm_release[driver/tcpm/tcpm.h:134]:
+ - fusb302_tcpm_release,
+ tcpm_select_rp_value[driver/tcpm/tcpm.h:150]:
+ - fusb302_tcpm_select_rp_value
+ tcpm_set_msg_header[driver/tcpm/tcpm.h:170]:
+ - fusb302_tcpm_set_msg_header
+ tcpm_enter_low_power_mode[driver/tcpm/tcpm.h:234]:
+ - fusb302_tcpm_enter_low_power_mode
+ tcpm_transmit[driver/tcpm/tcpm.h:188]:
+ - fusb302_tcpm_transmit
+ tcpm_get_cc[driver/tcpm/tcpm.h:140]:
+ - fusb302_tcpm_get_cc
+ tcpm_set_rx_enable[driver/tcpm/tcpm.h:176]:
+ - fusb302_tcpm_set_rx_enable
+ tcpm_set_vconn[driver/tcpm/tcpm.h:165]:
+ - fusb302_tcpm_set_vconn
+ tcpm_set_polarity[driver/tcpm/tcpm.h:160]:
+ - fusb302_tcpm_set_polarity
+ tcpm_set_cc[driver/tcpm/tcpm.h:155]:
+ - fusb302_tcpm_set_cc
+ tcpm_get_vbus_level[driver/tcpm/tcpm.h:145]:
+ - fusb302_tcpm_get_vbus_level
+ tcpm_enqueue_message[driver/tcpm/tcpci.c:468]:
+ - fusb302_tcpm_get_message_raw
+# USB mux, see it5205_usb_mux_driver
+ usb_mux_flip[driver/usb_mux/usb_mux.c:164]: #get
+ - it5205_set_mux
+ usb_mux_flip[driver/usb_mux/usb_mux.c:175]: #set
+ - it5205_get_mux
+ usb_mux_init[driver/usb_mux/usb_mux.c:65]: #init
+ - it5205_init
+ usb_mux_init[driver/usb_mux/usb_mux.c:76]: # board_init
+ - None
+ enter_low_power_mode[driver/usb_mux/usb_mux.c:43]:
+ - it5205_enter_low_power_mode
+ usb_mux_set[driver/usb_mux/usb_mux.c:113]:
+ - it5205_set_mux
+ hc_usb_pd_mux_info[driver/usb_mux/usb_mux.c:241]:
+ - it5205_get_mux
+ usb_mux_get[driver/usb_mux/usb_mux.c:141]:
+ - it5205_get_mux
+# usb_mux hpd_update
+ svdm_dp_post_config[baseboard/kukui/usb_pd_policy.c:200]:
+ - board_hpd_status
+ svdm_exit_dp_mode[baseboard/kukui/usb_pd_policy.c:263]:
+ - board_hpd_status
+ svdm_dp_attention[baseboard/kukui/usb_pd_policy.c:219]:
+ - board_hpd_status
+# USB PD policy, see struct svdm_amode_fx
+ pd_svdm[common/usb_pd_policy.c:766]:
+ - svdm_dp_status
+ - svdm_gfu_status
+ pd_svdm[common/usb_pd_policy.c:777]:
+ - svdm_dp_config
+ - svdm_gfu_config
+ pd_svdm[common/usb_pd_policy.c:783]:
+ - svdm_dp_post_config
+ pd_dfp_enter_mode[common/usb_pd_policy.c:440]:
+ - svdm_enter_dp_mode
+ - svdm_enter_gfu_mode
+ pd_dfp_exit_mode[common/usb_pd_policy.c:544]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+ dfp_consume_attention[common/usb_pd_policy.c:478]:
+ - svdm_dp_attention
+ - svdm_gfu_attention
+ pd_dfp_exit_mode[common/usb_pd_policy.c:561]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+# Motion sense: bmi160
+ motion_sense_set_data_rate[common/motion_sense.c:156]: # set_data_rate
+ - set_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:175]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:184]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_motion_intervals[common/motion_sense.c:302]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_ec_rate_from_ap[common/motion_sense.c:196]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_init[common/motion_sense.c:327]: # init
+ - init[driver/accelgyro_bmi160.c]
+ sensor_init_done[common/motion_sense.c:353]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:431]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:437]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:440]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:589]: # read
+ - read[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:576]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_process[common/motion_sense.c:667]: # irq_handler
+ - irq_handler[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1153]: # set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1164]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1179]: # set_offset
+ - set_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1207]: # set_scale
+ - set_scale[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1233]: # perform_calib
+ - perform_calib[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1237]: # get_offset
+ - get_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1313]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1333]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1337]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1455]: # set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1460]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ command_accelresolution[common/motion_sense.c:1504]: # set_resolution
+ - None
+ command_accelresolution[common/motion_sense.c:1508]: # get_resolution
+ - get_resolution[driver/accelgyro_bmi160.c]
+ command_accel_data_rate[common/motion_sense.c:1560]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ command_accel_read_xyz[common/motion_sense.c:1595]: # read
+ - read[driver/accelgyro_bmi160.c]
+
+# Core
+ handle_command[common/console.c:248]:
+ - { name: __cmds, stride: 16, offset: 4 }
+ hook_task[common/hooks.c:200]:
+ - { name: __deferred_funcs, stride: 4, offset: 0 }
+ - { name: __hooks_second, stride: 8, offset: 0 }
+ - { name: __hooks_tick, stride: 8, offset: 0 }
+ # Note: This assumes worse case, where all hook functions can be called from
+ # any hook_notify call
+ # Generate using `grep hooks_.*_end build/kukui/R*/ec.R*.smap |
+ # sed -e 's/.*\(__hooks.*\)_end/ - { name: \1, stride: 8, offset: 0 }/' |
+ # sort -u`
+ hook_notify[common/hooks.c:130]:
+ - { name: __hooks_ac_change, stride: 8, offset: 0 }
+ - { name: __hooks_base_attached_change, stride: 8, offset: 0 }
+ - { name: __hooks_battery_soc_change, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_pre_init, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_reset, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_resume, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_shutdown, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_startup, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_suspend, stride: 8, offset: 0 }
+ - { name: __hooks_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_lid_change, stride: 8, offset: 0 }
+ - { name: __hooks_pre_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_pwrbtn_change, stride: 8, offset: 0 }
+ - { name: __hooks_sysjump, stride: 8, offset: 0 }
+ - { name: __hooks_tablet_mode_change, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_connect, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_disconnect, stride: 8, offset: 0 }
+ mkbp_get_next_event[common/mkbp_event.c:369]:
+ - { name: __mkbp_evt_srcs, stride: 8, offset: 4 }
+ host_command_process[common/host_command.c:708]:
+ - { name: __hcmds, stride: 12, offset: 0 }
+ vfnprintf:
+ # This covers all the addchar in vfnprintf, but stackanalyzer does not
+ # realize that...
+ - __tx_char
+ host_send_response[common/host_command.c:153]: # send_response
+ - spi_send_response
+ host_packet_respond[common/host_command.c:240]:
+ - spi_send_response_packet
+# Misc
+ i2c_command_passthru[common/i2c_master.c:991]:
+ - None
+ cprints[common/console_output.c:108]:
+ - None # I'm not sure what this is?!
+ chip_i2c_xfer_with_notify[common/i2c_master.c:112]: # i2c_port->drv->xfer
+ - i2c_bitbang_xfer
+ default_handler[core/cortex-m0/init.S:100]:
+ - exception_panic
+ gpio_interrupt[chip/stm32/gpio.c:154]:
+ - None
+
+remove:
+# Remove all callsites pointing to panic_assert_fail.
+- panic_assert_fail
+
+# Remove paths that make no sense
+# HOOK_USB_PD_DISCONNECT
+- [ pd_request_power_swap, set_state.lto_priv.206, hook_notify,
+ [ motion_sense_shutdown, charger_enable_psys, charger_disable_psys,
+ system_common_shutdown ] ]
+# HOOK_AC_CHANGE/HOOK_BATTERY_SOC_CHANGE
+- [ charger_task, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_LID_CHANGE
+- [ [ lid_switch_open, lid_switch_close ], hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_BASE_ATTACHED_CHANGE/HOOK_TABLET_MODE_CHANGE
+- [ tablet_set_mode, hook_notify, [ system_common_shutdown, charger_enable_psys, charger_disable_psys ] ]
+# HOOK_POWER_BUTTON_CHANGE
+- [ power_button_change_deferred, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_SECOND
+- [ hook_task, hook_notify, [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_SYSJUMP
+- [ jump_to_image, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown, charger_enable_psys, charger_disable_psys ] ]
+- [ pd_request_power_swap, set_state, hook_notify, panic_init ]
+# set_state(port, PD_STATE_SRC/SNK_SWAP_INIT); will not call these functions
+- [ pd_request_power_swap, set_state,
+ [ pd_dfp_exit_mode, usb_mux_set, pd_power_supply_reset, tcpm_set_vconn ] ]
+- [ [ pd_request_data_swap, pd_request_vconn_swap ] , set_state, pd_power_supply_reset ]
+# All sensors will be shut down in S5
+- [ motion_sense_shutdown, motion_sense_switch_sensor_rate,
+ [ motion_sense_set_data_rate, motion_sense_init ] ]
+# HOOK_CHIPSET_PRE_INIT, HOOK_CHIPSET_STARTUP, HOOK_CHIPSET_RESUME,
+# HOOK_CHIPSET_SUSPEND, HOOK_CHIPSET_SHUTDOWN
+- [ chipset_task, hook_notify ]
+# TCPC, KEYBOARD, BC12 will not access battery's bitbang
+- [ [ raw_read8.lto_priv.157, tcpc_read.lto_priv.352, tcpc_write.lto_priv.351,
+ it8801_ioex_write, it8801_read, it8801_write.lto_priv.336, raw_read16.lto_priv.349,
+ raw_write16.lto_priv.348, it5205_init.lto_priv.241, it5205_write,
+ raw_read8, tcpc_read.lto_priv.340 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ], [ i2c_write, i2c_read ],
+ i2c_xfer_unlocked, i2c_bitbang_xfer ]
+- [ [ raw_read8.lto_priv.157, tcpc_read.lto_priv.352, tcpc_write.lto_priv.351,
+ it8801_ioex_write, it8801_read, it8801_write.lto_priv.336, raw_read16.lto_priv.349,
+ raw_write16.lto_priv.348, it5205_init.lto_priv.241, it5205_write,
+ raw_read8, tcpc_read.lto_priv.340 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ] , [ i2c_write, i2c_read ],
+ i2c_xfer, i2c_xfer_unlocked, i2c_bitbang_xfer ]
+# PD_INT_C0_TASK
+# pd_wait_exit_low_power -> reset_device_and_notify can only be called in a pd_task NOT pd_interrupt_handler_task
+- [ pd_interrupt_handler_task, fusb302_tcpc_alert, pd_execute_hard_reset, set_state.lto_priv.206,
+ pd_power_supply_reset, charge_manager_source_port.part.10, charge_manager_save_log.part.9,
+ charge_manager_fill_power_info, tcpc_read.lto_priv.352, pd_wait_exit_low_power, reset_device_and_notify ]
+# CONSOLE_TASK
+# pd_wait_exit_low_power -> reset_device_and_notify can only be called in a pd_task NOT pd_interrupt_handler_task
+- [ console_task, command_pd, set_state.lto_priv.206, pd_power_supply_reset, charge_manager_source_port.part.10,
+ charge_manager_save_log.part.9, charge_manager_fill_power_info, tcpc_read.lto_priv.352, pd_wait_exit_low_power,
+ reset_device_and_notify ]
diff --git a/board/damu/ec.tasklist b/board/damu/ec.tasklist
index 84d1ebcb2f..75c10654d3 100644
--- a/board/damu/ec.tasklist
+++ b/board/damu/ec.tasklist
@@ -7,14 +7,14 @@
* See CONFIG_TASK_LIST in config.h for details.
*/
#define CONFIG_TASK_LIST \
- TASK_ALWAYS(HOOKS, hook_task, NULL, VENTI_TASK_STACK_SIZE) \
- TASK_ALWAYS(CHARGER, charger_task, NULL, 1024) \
+ TASK_ALWAYS(HOOKS, hook_task, NULL, 1024) \
+ TASK_ALWAYS(CHARGER, charger_task, NULL, 1152) \
TASK_ALWAYS(USB_CHG_P0, usb_charger_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(CHIPSET, chipset_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS_RW(MOTIONSENSE, motion_sense_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(PDCMD, pd_command_task, NULL, 1024) \
- TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1024) \
- TASK_ALWAYS(CONSOLE, console_task, NULL, LARGER_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1152) \
+ TASK_ALWAYS(CONSOLE, console_task, NULL, 1024) \
TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS(PD_C0, pd_task, NULL, 1280) \
TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, 1024) \
diff --git a/board/fennel/analyzestack.yaml b/board/fennel/analyzestack.yaml
new file mode 100644
index 0000000000..76f8f523f2
--- /dev/null
+++ b/board/fennel/analyzestack.yaml
@@ -0,0 +1,246 @@
+# Check cortex-m/switch.S
+exception_frame_size: 64
+add:
+# TCPC functions, see fusb302_tcpm_drv struct.
+ tcpm_init[driver/tcpm/tcpm.h:121]:
+ - fusb302_tcpm_init
+ tcpm_release[driver/tcpm/tcpm.h:134]:
+ - fusb302_tcpm_release,
+ tcpm_select_rp_value[driver/tcpm/tcpm.h:150]:
+ - fusb302_tcpm_select_rp_value
+ tcpm_set_msg_header[driver/tcpm/tcpm.h:170]:
+ - fusb302_tcpm_set_msg_header
+ tcpm_enter_low_power_mode[driver/tcpm/tcpm.h:234]:
+ - fusb302_tcpm_enter_low_power_mode
+ tcpm_transmit[driver/tcpm/tcpm.h:188]:
+ - fusb302_tcpm_transmit
+ tcpm_get_cc[driver/tcpm/tcpm.h:140]:
+ - fusb302_tcpm_get_cc
+ tcpm_set_rx_enable[driver/tcpm/tcpm.h:176]:
+ - fusb302_tcpm_set_rx_enable
+ tcpm_set_vconn[driver/tcpm/tcpm.h:165]:
+ - fusb302_tcpm_set_vconn
+ tcpm_set_polarity[driver/tcpm/tcpm.h:160]:
+ - fusb302_tcpm_set_polarity
+ tcpm_set_cc[driver/tcpm/tcpm.h:155]:
+ - fusb302_tcpm_set_cc
+ tcpm_get_vbus_level[driver/tcpm/tcpm.h:145]:
+ - fusb302_tcpm_get_vbus_level
+ tcpm_enqueue_message[driver/tcpm/tcpci.c:468]:
+ - fusb302_tcpm_get_message_raw
+# USB mux, see it5205_usb_mux_driver
+ usb_mux_flip[driver/usb_mux/usb_mux.c:164]: #get
+ - it5205_set_mux
+ usb_mux_flip[driver/usb_mux/usb_mux.c:175]: #set
+ - it5205_get_mux
+ usb_mux_init[driver/usb_mux/usb_mux.c:65]: #init
+ - it5205_init
+ usb_mux_init[driver/usb_mux/usb_mux.c:76]: # board_init
+ - None
+ enter_low_power_mode[driver/usb_mux/usb_mux.c:43]:
+ - it5205_enter_low_power_mode
+ usb_mux_set[driver/usb_mux/usb_mux.c:113]:
+ - it5205_set_mux
+ hc_usb_pd_mux_info[driver/usb_mux/usb_mux.c:241]:
+ - it5205_get_mux
+ usb_mux_get[driver/usb_mux/usb_mux.c:141]:
+ - it5205_get_mux
+# usb_mux hpd_update
+ svdm_dp_post_config[baseboard/kukui/usb_pd_policy.c:200]:
+ - board_hpd_status
+ svdm_exit_dp_mode[baseboard/kukui/usb_pd_policy.c:263]:
+ - board_hpd_status
+ svdm_dp_attention[baseboard/kukui/usb_pd_policy.c:219]:
+ - board_hpd_status
+# USB PD policy, see struct svdm_amode_fx
+ pd_svdm[common/usb_pd_policy.c:766]:
+ - svdm_dp_status
+ - svdm_gfu_status
+ pd_svdm[common/usb_pd_policy.c:777]:
+ - svdm_dp_config
+ - svdm_gfu_config
+ pd_svdm[common/usb_pd_policy.c:783]:
+ - svdm_dp_post_config
+ pd_dfp_enter_mode[common/usb_pd_policy.c:440]:
+ - svdm_enter_dp_mode
+ - svdm_enter_gfu_mode
+ pd_dfp_exit_mode[common/usb_pd_policy.c:544]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+ dfp_consume_attention[common/usb_pd_policy.c:478]:
+ - svdm_dp_attention
+ - svdm_gfu_attention
+ pd_dfp_exit_mode[common/usb_pd_policy.c:561]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+# Motion sense: bmi160
+ motion_sense_set_data_rate[common/motion_sense.c:156]: # set_data_rate
+ - set_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:175]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:184]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_motion_intervals[common/motion_sense.c:302]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_ec_rate_from_ap[common/motion_sense.c:196]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_init[common/motion_sense.c:327]: # init
+ - init[driver/accelgyro_bmi160.c]
+ sensor_init_done[common/motion_sense.c:353]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:431]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:437]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:440]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:589]: # read
+ - read[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:576]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_process[common/motion_sense.c:667]: # irq_handler
+ - irq_handler[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1153]: # set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1164]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1179]: # set_offset
+ - set_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1207]: # set_scale
+ - set_scale[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1233]: # perform_calib
+ - perform_calib[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1237]: # get_offset
+ - get_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1313]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1333]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1337]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1455]: # set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1460]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ command_accelresolution[common/motion_sense.c:1504]: # set_resolution
+ - None
+ command_accelresolution[common/motion_sense.c:1508]: # get_resolution
+ - get_resolution[driver/accelgyro_bmi160.c]
+ command_accel_data_rate[common/motion_sense.c:1560]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ command_accel_read_xyz[common/motion_sense.c:1595]: # read
+ - read[driver/accelgyro_bmi160.c]
+
+# Core
+ handle_command[common/console.c:248]:
+ - { name: __cmds, stride: 16, offset: 4 }
+ hook_task[common/hooks.c:200]:
+ - { name: __deferred_funcs, stride: 4, offset: 0 }
+ - { name: __hooks_second, stride: 8, offset: 0 }
+ - { name: __hooks_tick, stride: 8, offset: 0 }
+ # Note: This assumes worse case, where all hook functions can be called from
+ # any hook_notify call
+ # Generate using `grep hooks_.*_end build/kukui/R*/ec.R*.smap |
+ # sed -e 's/.*\(__hooks.*\)_end/ - { name: \1, stride: 8, offset: 0 }/' |
+ # sort -u`
+ hook_notify[common/hooks.c:130]:
+ - { name: __hooks_ac_change, stride: 8, offset: 0 }
+ - { name: __hooks_base_attached_change, stride: 8, offset: 0 }
+ - { name: __hooks_battery_soc_change, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_pre_init, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_reset, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_resume, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_shutdown, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_startup, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_suspend, stride: 8, offset: 0 }
+ - { name: __hooks_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_lid_change, stride: 8, offset: 0 }
+ - { name: __hooks_pre_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_pwrbtn_change, stride: 8, offset: 0 }
+ - { name: __hooks_sysjump, stride: 8, offset: 0 }
+ - { name: __hooks_tablet_mode_change, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_connect, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_disconnect, stride: 8, offset: 0 }
+ mkbp_get_next_event[common/mkbp_event.c:369]:
+ - { name: __mkbp_evt_srcs, stride: 8, offset: 4 }
+ host_command_process[common/host_command.c:708]:
+ - { name: __hcmds, stride: 12, offset: 0 }
+ vfnprintf:
+ # This covers all the addchar in vfnprintf, but stackanalyzer does not
+ # realize that...
+ - __tx_char
+ host_send_response[common/host_command.c:153]: # send_response
+ - spi_send_response
+ host_packet_respond[common/host_command.c:240]:
+ - spi_send_response_packet
+# Misc
+ i2c_command_passthru[common/i2c_master.c:991]:
+ - None
+ cprints[common/console_output.c:108]:
+ - None # I'm not sure what this is?!
+ chip_i2c_xfer_with_notify[common/i2c_master.c:112]: # i2c_port->drv->xfer
+ - i2c_bitbang_xfer
+ default_handler[core/cortex-m0/init.S:100]:
+ - exception_panic
+ gpio_interrupt[chip/stm32/gpio.c:154]:
+ - None
+
+remove:
+# Remove all callsites pointing to panic_assert_fail.
+- panic_assert_fail
+
+# Remove paths that make no sense
+# HOOK_USB_PD_DISCONNECT
+- [ pd_request_power_swap, set_state.lto_priv.206, hook_notify,
+ [ motion_sense_shutdown, charger_enable_psys, charger_disable_psys,
+ system_common_shutdown ] ]
+# HOOK_AC_CHANGE/HOOK_BATTERY_SOC_CHANGE
+- [ charger_task, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_LID_CHANGE
+- [ [ lid_switch_open, lid_switch_close ], hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_BASE_ATTACHED_CHANGE/HOOK_TABLET_MODE_CHANGE
+- [ tablet_set_mode, hook_notify, [ system_common_shutdown, charger_enable_psys, charger_disable_psys ] ]
+# HOOK_POWER_BUTTON_CHANGE
+- [ power_button_change_deferred, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_SECOND
+- [ hook_task, hook_notify, [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_SYSJUMP
+- [ jump_to_image, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown, charger_enable_psys, charger_disable_psys ] ]
+- [ pd_request_power_swap, set_state, hook_notify, panic_init ]
+# set_state(port, PD_STATE_SRC/SNK_SWAP_INIT); will not call these functions
+- [ pd_request_power_swap, set_state,
+ [ pd_dfp_exit_mode, usb_mux_set, pd_power_supply_reset, tcpm_set_vconn ] ]
+- [ [ pd_request_data_swap, pd_request_vconn_swap ] , set_state, pd_power_supply_reset ]
+# All sensors will be shut down in S5
+- [ motion_sense_shutdown, motion_sense_switch_sensor_rate,
+ [ motion_sense_set_data_rate, motion_sense_init ] ]
+# HOOK_CHIPSET_PRE_INIT, HOOK_CHIPSET_STARTUP, HOOK_CHIPSET_RESUME,
+# HOOK_CHIPSET_SUSPEND, HOOK_CHIPSET_SHUTDOWN
+- [ chipset_task, hook_notify ]
+# TCPC, KEYBOARD, BC12 will not access battery's bitbang
+- [ [ raw_read8.lto_priv.157, tcpc_read.lto_priv.352, tcpc_write.lto_priv.351,
+ it8801_ioex_write, it8801_read, it8801_write.lto_priv.336, raw_read16.lto_priv.349,
+ raw_write16.lto_priv.348, it5205_init.lto_priv.241, it5205_write,
+ raw_read8, tcpc_read.lto_priv.340 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ], [ i2c_write, i2c_read ],
+ i2c_xfer_unlocked, i2c_bitbang_xfer ]
+- [ [ raw_read8.lto_priv.157, tcpc_read.lto_priv.352, tcpc_write.lto_priv.351,
+ it8801_ioex_write, it8801_read, it8801_write.lto_priv.336, raw_read16.lto_priv.349,
+ raw_write16.lto_priv.348, it5205_init.lto_priv.241, it5205_write,
+ raw_read8, tcpc_read.lto_priv.340 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ] , [ i2c_write, i2c_read ],
+ i2c_xfer, i2c_xfer_unlocked, i2c_bitbang_xfer ]
+# PD_INT_C0_TASK
+# pd_wait_exit_low_power -> reset_device_and_notify can only be called in a pd_task NOT pd_interrupt_handler_task
+- [ pd_interrupt_handler_task, fusb302_tcpc_alert, pd_execute_hard_reset, set_state.lto_priv.206,
+ pd_power_supply_reset, charge_manager_source_port.part.10, charge_manager_save_log.part.9,
+ charge_manager_fill_power_info, tcpc_read.lto_priv.352, pd_wait_exit_low_power, reset_device_and_notify ]
+# CONSOLE_TASK
+# pd_wait_exit_low_power -> reset_device_and_notify can only be called in a pd_task NOT pd_interrupt_handler_task
+- [ console_task, command_pd, set_state.lto_priv.206, pd_power_supply_reset, charge_manager_source_port.part.10,
+ charge_manager_save_log.part.9, charge_manager_fill_power_info, tcpc_read.lto_priv.352, pd_wait_exit_low_power,
+ reset_device_and_notify ]
diff --git a/board/fennel/ec.tasklist b/board/fennel/ec.tasklist
index 5622d67685..c7f7811cff 100644
--- a/board/fennel/ec.tasklist
+++ b/board/fennel/ec.tasklist
@@ -7,14 +7,14 @@
* See CONFIG_TASK_LIST in config.h for details.
*/
#define CONFIG_TASK_LIST \
- TASK_ALWAYS(HOOKS, hook_task, NULL, VENTI_TASK_STACK_SIZE) \
- TASK_ALWAYS(CHARGER, charger_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOOKS, hook_task, NULL, 1024) \
+ TASK_ALWAYS(CHARGER, charger_task, NULL, 1152) \
TASK_ALWAYS(USB_CHG_P0, usb_charger_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(CHIPSET, chipset_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS_RW(MOTIONSENSE, motion_sense_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(PDCMD, pd_command_task, NULL, 1024) \
- TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1024) \
- TASK_ALWAYS(CONSOLE, console_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1152) \
+ TASK_ALWAYS(CONSOLE, console_task, NULL, 1024) \
TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS(PD_C0, pd_task, NULL, 1280) \
TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, 1024) \
diff --git a/board/jacuzzi/analyzestack.yaml b/board/jacuzzi/analyzestack.yaml
new file mode 100644
index 0000000000..b89da4c25b
--- /dev/null
+++ b/board/jacuzzi/analyzestack.yaml
@@ -0,0 +1,244 @@
+# Check cortex-m/switch.S
+exception_frame_size: 64
+add:
+# TCPC functions, see fusb302_tcpm_drv struct.
+ tcpm_init[driver/tcpm/tcpm.h:121]:
+ - fusb302_tcpm_init
+ tcpm_release[driver/tcpm/tcpm.h:134]:
+ - fusb302_tcpm_release,
+ tcpm_select_rp_value[driver/tcpm/tcpm.h:150]:
+ - fusb302_tcpm_select_rp_value
+ tcpm_set_msg_header[driver/tcpm/tcpm.h:170]:
+ - fusb302_tcpm_set_msg_header
+ tcpm_enter_low_power_mode[driver/tcpm/tcpm.h:234]:
+ - fusb302_tcpm_enter_low_power_mode
+ tcpm_transmit[driver/tcpm/tcpm.h:188]:
+ - fusb302_tcpm_transmit
+ tcpm_get_cc[driver/tcpm/tcpm.h:140]:
+ - fusb302_tcpm_get_cc
+ tcpm_set_rx_enable[driver/tcpm/tcpm.h:176]:
+ - fusb302_tcpm_set_rx_enable
+ tcpm_set_vconn[driver/tcpm/tcpm.h:165]:
+ - fusb302_tcpm_set_vconn
+ tcpm_set_polarity[driver/tcpm/tcpm.h:160]:
+ - fusb302_tcpm_set_polarity
+ tcpm_set_cc[driver/tcpm/tcpm.h:155]:
+ - fusb302_tcpm_set_cc
+ tcpm_get_vbus_level[driver/tcpm/tcpm.h:145]:
+ - fusb302_tcpm_get_vbus_level
+ tcpm_enqueue_message[driver/tcpm/tcpci.c:468]:
+ - fusb302_tcpm_get_message_raw
+# USB mux, see it5205_usb_mux_driver
+ usb_mux_flip[driver/usb_mux/usb_mux.c:164]: #get
+ - it5205_set_mux
+ usb_mux_flip[driver/usb_mux/usb_mux.c:175]: #set
+ - it5205_get_mux
+ usb_mux_init[driver/usb_mux/usb_mux.c:65]: #init
+ - it5205_init
+ usb_mux_init[driver/usb_mux/usb_mux.c:76]: # board_init
+ - None
+ enter_low_power_mode[driver/usb_mux/usb_mux.c:43]:
+ - it5205_enter_low_power_mode
+ usb_mux_set[driver/usb_mux/usb_mux.c:113]:
+ - it5205_set_mux
+ hc_usb_pd_mux_info[driver/usb_mux/usb_mux.c:241]:
+ - it5205_get_mux
+ usb_mux_get[driver/usb_mux/usb_mux.c:141]:
+ - it5205_get_mux
+# usb_mux hpd_update
+ svdm_dp_post_config[baseboard/kukui/usb_pd_policy.c:200]:
+ - board_hpd_status
+ svdm_exit_dp_mode[baseboard/kukui/usb_pd_policy.c:263]:
+ - board_hpd_status
+ svdm_dp_attention[baseboard/kukui/usb_pd_policy.c:219]:
+ - board_hpd_status
+# USB PD policy, see struct svdm_amode_fx
+ pd_svdm[common/usb_pd_policy.c:766]:
+ - svdm_dp_status
+ - svdm_gfu_status
+ pd_svdm[common/usb_pd_policy.c:777]:
+ - svdm_dp_config
+ - svdm_gfu_config
+ pd_svdm[common/usb_pd_policy.c:783]:
+ - svdm_dp_post_config
+ pd_dfp_enter_mode[common/usb_pd_policy.c:440]:
+ - svdm_enter_dp_mode
+ - svdm_enter_gfu_mode
+ pd_dfp_exit_mode[common/usb_pd_policy.c:544]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+ dfp_consume_attention[common/usb_pd_policy.c:478]:
+ - svdm_dp_attention
+ - svdm_gfu_attention
+ pd_dfp_exit_mode[common/usb_pd_policy.c:561]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+# Motion sense: bmi160
+ motion_sense_set_data_rate[common/motion_sense.c:156]: # set_data_rate
+ - set_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:175]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:184]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_motion_intervals[common/motion_sense.c:302]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_ec_rate_from_ap[common/motion_sense.c:196]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_init[common/motion_sense.c:327]: # init
+ - init[driver/accelgyro_bmi160.c]
+ sensor_init_done[common/motion_sense.c:353]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:431]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:437]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:440]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:589]: # read
+ - read[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:576]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_process[common/motion_sense.c:667]: # irq_handler
+ - irq_handler[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1153]: # set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1164]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1179]: # set_offset
+ - set_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1207]: # set_scale
+ - set_scale[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1233]: # perform_calib
+ - perform_calib[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1237]: # get_offset
+ - get_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1313]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1333]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1337]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1455]: # set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1460]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ command_accelresolution[common/motion_sense.c:1504]: # set_resolution
+ - None
+ command_accelresolution[common/motion_sense.c:1508]: # get_resolution
+ - get_resolution[driver/accelgyro_bmi160.c]
+ command_accel_data_rate[common/motion_sense.c:1560]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ command_accel_read_xyz[common/motion_sense.c:1595]: # read
+ - read[driver/accelgyro_bmi160.c]
+
+# Core
+ handle_command[common/console.c:248]:
+ - { name: __cmds, stride: 16, offset: 4 }
+ hook_task[common/hooks.c:200]:
+ - { name: __deferred_funcs, stride: 4, offset: 0 }
+ - { name: __hooks_second, stride: 8, offset: 0 }
+ - { name: __hooks_tick, stride: 8, offset: 0 }
+ # Note: This assumes worse case, where all hook functions can be called from
+ # any hook_notify call
+ # Generate using `grep hooks_.*_end build/kukui/R*/ec.R*.smap |
+ # sed -e 's/.*\(__hooks.*\)_end/ - { name: \1, stride: 8, offset: 0 }/' |
+ # sort -u`
+ hook_notify[common/hooks.c:130]:
+ - { name: __hooks_ac_change, stride: 8, offset: 0 }
+ - { name: __hooks_base_attached_change, stride: 8, offset: 0 }
+ - { name: __hooks_battery_soc_change, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_pre_init, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_reset, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_resume, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_shutdown, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_startup, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_suspend, stride: 8, offset: 0 }
+ - { name: __hooks_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_lid_change, stride: 8, offset: 0 }
+ - { name: __hooks_pre_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_pwrbtn_change, stride: 8, offset: 0 }
+ - { name: __hooks_sysjump, stride: 8, offset: 0 }
+ - { name: __hooks_tablet_mode_change, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_connect, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_disconnect, stride: 8, offset: 0 }
+ mkbp_get_next_event[common/mkbp_event.c:369]:
+ - { name: __mkbp_evt_srcs, stride: 8, offset: 4 }
+ host_command_process[common/host_command.c:708]:
+ - { name: __hcmds, stride: 12, offset: 0 }
+ vfnprintf:
+ # This covers all the addchar in vfnprintf, but stackanalyzer does not
+ # realize that...
+ - __tx_char
+ host_send_response[common/host_command.c:153]: # send_response
+ - spi_send_response
+ host_packet_respond[common/host_command.c:240]:
+ - spi_send_response_packet
+# Misc
+ i2c_command_passthru[common/i2c_master.c:991]:
+ - None
+ cprints[common/console_output.c:108]:
+ - None # I'm not sure what this is?!
+ chip_i2c_xfer_with_notify[common/i2c_master.c:112]: # i2c_port->drv->xfer
+ - i2c_bitbang_xfer
+ default_handler[core/cortex-m0/init.S:100]:
+ - exception_panic
+ gpio_interrupt[chip/stm32/gpio.c:154]:
+ - None
+
+remove:
+# Remove all callsites pointing to panic_assert_fail.
+- panic_assert_fail
+
+# Remove paths that make no sense
+# HOOK_USB_PD_DISCONNECT
+- [ pd_request_power_swap, set_state.lto_priv.206, hook_notify,
+ [ motion_sense_shutdown, charger_enable_psys, charger_disable_psys,
+ system_common_shutdown ] ]
+# HOOK_AC_CHANGE/HOOK_BATTERY_SOC_CHANGE
+- [ charger_task, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_LID_CHANGE
+- [ [ lid_switch_open, lid_switch_close ], hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_BASE_ATTACHED_CHANGE/HOOK_TABLET_MODE_CHANGE
+- [ tablet_set_mode, hook_notify, [ system_common_shutdown, charger_enable_psys, charger_disable_psys ] ]
+# HOOK_POWER_BUTTON_CHANGE
+- [ power_button_change_deferred, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_SECOND
+- [ hook_task, hook_notify, [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_SYSJUMP
+- [ jump_to_image, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown, charger_enable_psys, charger_disable_psys ] ]
+- [ pd_request_power_swap, set_state, hook_notify, panic_init ]
+# set_state(port, PD_STATE_SRC/SNK_SWAP_INIT); will not call these functions
+- [ pd_request_power_swap, set_state,
+ [ pd_dfp_exit_mode, usb_mux_set, pd_power_supply_reset, tcpm_set_vconn ] ]
+- [ [ pd_request_data_swap, pd_request_vconn_swap ] , set_state, pd_power_supply_reset ]
+# All sensors will be shut down in S5
+- [ motion_sense_shutdown, motion_sense_switch_sensor_rate,
+ [ motion_sense_set_data_rate, motion_sense_init ] ]
+# HOOK_CHIPSET_PRE_INIT, HOOK_CHIPSET_STARTUP, HOOK_CHIPSET_RESUME,
+# HOOK_CHIPSET_SUSPEND, HOOK_CHIPSET_SHUTDOWN
+- [ chipset_task, hook_notify ]
+# TCPC, KEYBOARD, BC12 will not access battery's bitbang
+- [ [ raw_read8.lto_priv.157, tcpc_read.lto_priv.352, tcpc_write.lto_priv.351,
+ it8801_ioex_write, it8801_read, it8801_write.lto_priv.336, raw_read16.lto_priv.349,
+ raw_write16.lto_priv.348, raw_read8.lto_priv.157 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ], [ i2c_write, i2c_read ],
+ i2c_xfer_unlocked, i2c_bitbang_xfer ]
+- [ [ raw_read8.lto_priv.157, tcpc_read.lto_priv.352, tcpc_write.lto_priv.351,
+ it8801_ioex_write, it8801_read, it8801_write.lto_priv.336, raw_read16.lto_priv.349,
+ raw_write16.lto_priv.348, raw_read8.lto_priv.157 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ] , [ i2c_write, i2c_read ],
+ i2c_xfer, i2c_xfer_unlocked, i2c_bitbang_xfer ]
+# PD_INT_C0_TASK
+# pd_wait_exit_low_power -> reset_device_and_notify can only be called in a pd_task NOT pd_interrupt_handler_task
+- [ pd_interrupt_handler_task, fusb302_tcpc_alert, pd_execute_hard_reset, set_state.lto_priv.206,
+ pd_power_supply_reset, charge_manager_source_port.part.10, charge_manager_save_log.part.9,
+ charge_manager_fill_power_info, tcpc_read.lto_priv.352, pd_wait_exit_low_power, reset_device_and_notify ]
+# CONSOLE_TASK
+# pd_wait_exit_low_power -> reset_device_and_notify can only be called in a pd_task NOT pd_interrupt_handler_task
+- [ console_task, command_pd, set_state.lto_priv.206, pd_power_supply_reset, charge_manager_source_port.part.10,
+ charge_manager_save_log.part.9, charge_manager_fill_power_info, tcpc_read.lto_priv.352, pd_wait_exit_low_power,
+ reset_device_and_notify ]
diff --git a/board/jacuzzi/ec.tasklist b/board/jacuzzi/ec.tasklist
index a1e20808cc..75c10654d3 100644
--- a/board/jacuzzi/ec.tasklist
+++ b/board/jacuzzi/ec.tasklist
@@ -7,14 +7,14 @@
* See CONFIG_TASK_LIST in config.h for details.
*/
#define CONFIG_TASK_LIST \
- TASK_ALWAYS(HOOKS, hook_task, NULL, VENTI_TASK_STACK_SIZE) \
- TASK_ALWAYS(CHARGER, charger_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOOKS, hook_task, NULL, 1024) \
+ TASK_ALWAYS(CHARGER, charger_task, NULL, 1152) \
TASK_ALWAYS(USB_CHG_P0, usb_charger_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(CHIPSET, chipset_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS_RW(MOTIONSENSE, motion_sense_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(PDCMD, pd_command_task, NULL, 1024) \
- TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1024) \
- TASK_ALWAYS(CONSOLE, console_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1152) \
+ TASK_ALWAYS(CONSOLE, console_task, NULL, 1024) \
TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS(PD_C0, pd_task, NULL, 1280) \
TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, 1024) \
diff --git a/board/kakadu/analyzestack.yaml b/board/kakadu/analyzestack.yaml
index 4a057ce818..21d1f66b8b 100644
--- a/board/kakadu/analyzestack.yaml
+++ b/board/kakadu/analyzestack.yaml
@@ -1,3 +1,271 @@
+# Check cortex-m/switch.S
+exception_frame_size: 64
+add:
+# TCPC functions, see mt6370_tcpm_drv struct.
+ tcpm_init[driver/tcpm/tcpm.h:121]:
+ - mt6370_init
+ tcpm_release[driver/tcpm/tcpm.h:134]:
+ - tcpci_tcpm_release
+ tcpm_select_rp_value[driver/tcpm/tcpm.h:150]:
+ - tcpci_tcpm_select_rp_value
+ tcpm_set_msg_header[driver/tcpm/tcpm.h:170]:
+ - tcpci_tcpm_set_msg_header
+ tcpm_enable_drp_toggle[driver/tcpm/tcpm.h:227]:
+ - tcpci_tcpc_drp_toggle
+ tcpm_enter_low_power_mode[driver/tcpm/tcpm.h:234]:
+ - mt6370_enter_low_power_mode
+ tcpm_transmit[driver/tcpm/tcpm.h:188]:
+ - tcpci_tcpm_transmit
+ tcpm_get_chip_info[driver/tcpm/tcpm.h:256]:
+ - tcpci_get_chip_info
+ tcpm_get_cc[driver/tcpm/tcpm.h:140]:
+ - mt6370_get_cc
+ tcpm_set_rx_enable[driver/tcpm/tcpm.h:176]:
+ - tcpci_tcpm_set_rx_enable
+ tcpm_set_vconn[driver/tcpm/tcpm.h:165]:
+ - tcpci_tcpm_set_vconn
+ tcpm_set_polarity[driver/tcpm/tcpm.h:160]:
+ - mt6370_set_polarity
+ tcpm_set_cc[driver/tcpm/tcpm.h:155]:
+ - mt6370_set_cc
+ tcpm_get_vbus_level[driver/tcpm/tcpm.h:145]:
+ - tcpci_tcpm_get_vbus_level
+ tcpm_enqueue_message[driver/tcpm/tcpci.c:468]:
+ - tcpci_tcpm_get_message_raw
+# USB mux, see it5205_usb_mux_driver
+ usb_mux_flip[driver/usb_mux/usb_mux.c:164]: #get
+ - it5205_set_mux
+ usb_mux_flip[driver/usb_mux/usb_mux.c:175]: #set
+ - it5205_get_mux
+ usb_mux_init[driver/usb_mux/usb_mux.c:65]: #init
+ - it5205_init
+ usb_mux_init[driver/usb_mux/usb_mux.c:76]: # board_init
+ - None
+ enter_low_power_mode[driver/usb_mux/usb_mux.c:43]:
+ - it5205_enter_low_power_mode
+ usb_mux_set[driver/usb_mux/usb_mux.c:113]:
+ - it5205_set_mux
+ hc_usb_pd_mux_info[driver/usb_mux/usb_mux.c:241]:
+ - it5205_get_mux
+ usb_mux_get[driver/usb_mux/usb_mux.c:141]:
+ - it5205_get_mux
+# usb_mux hpd_update
+ svdm_dp_post_config[baseboard/kukui/usb_pd_policy.c:200]:
+ - board_hpd_update
+ svdm_exit_dp_mode[baseboard/kukui/usb_pd_policy.c:263]:
+ - board_hpd_update
+ svdm_dp_attention[baseboard/kukui/usb_pd_policy.c:219]:
+ - board_hpd_update
+# USB PD policy, see struct svdm_amode_fx
+ pd_svdm[common/usb_pd_policy.c:766]:
+ - svdm_dp_status
+ - svdm_gfu_status
+ pd_svdm[common/usb_pd_policy.c:777]:
+ - svdm_dp_config
+ - svdm_gfu_config
+ pd_svdm[common/usb_pd_policy.c:783]:
+ - svdm_dp_post_config
+ pd_dfp_enter_mode[common/usb_pd_policy.c:440]:
+ - svdm_enter_dp_mode
+ - svdm_enter_gfu_mode
+ pd_dfp_exit_mode[common/usb_pd_policy.c:544]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+ dfp_consume_attention[common/usb_pd_policy.c:478]:
+ - svdm_dp_attention
+ - svdm_gfu_attention
+ pd_dfp_exit_mode[common/usb_pd_policy.c:561]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+# Motion sense: bmi160 and tcs3400_drv, tcs3400_rgb_drv
+ motion_sense_set_data_rate[common/motion_sense.c:156]: # set_data_rate
+ - tcs3400_set_data_rate
+ - tcs3400_rgb_set_data_rate
+ - set_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:175]: # get_data_rate
+ - tcs3400_get_data_rate
+ - tcs3400_rgb_get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:184]: # get_data_rate
+ - tcs3400_get_data_rate
+ - tcs3400_rgb_get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_motion_intervals[common/motion_sense.c:302]: # get_data_rate
+ - tcs3400_get_data_rate
+ - tcs3400_rgb_get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_ec_rate_from_ap[common/motion_sense.c:196]: # get_data_rate
+ - tcs3400_get_data_rate
+ - tcs3400_rgb_get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_init[common/motion_sense.c:327]: # init
+ - tcs3400_init
+ - tcs3400_rgb_init
+ - init[driver/accelgyro_bmi160.c]
+ sensor_init_done[common/motion_sense.c:353]: # get_range
+ - tcs3400_get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ - set_range[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:431]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:437]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:440]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:589]: # read
+ - tcs3400_read
+ - tcs3400_rgb_read
+ - read[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:576]: # get_data_rate
+ - tcs3400_get_data_rate
+ - tcs3400_rgb_get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_process[common/motion_sense.c:667]: # irq_handler
+ - tcs3400_irq_handler
+ - irq_handler[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1153]: # set_range
+ - tcs3400_set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1164]: # get_range
+ - tcs3400_get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1179]: # set_offset
+ - tcs3400_set_offset
+ - tcs3400_rgb_set_offset
+ - set_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1207]: # set_scale
+ - tcs3400_set_scale
+ - tcs3400_rgb_set_scale
+ - set_scale[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1233]: # perform_calib
+ - tcs3400_perform_calib
+ - perform_calib[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1237]: # get_offset
+ - tcs3400_get_offset
+ - tcs3400_rgb_get_offset
+ - get_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1313]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1333]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1337]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1455]: # set_range
+ - tcs3400_set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1460]: # get_range
+ - tcs3400_get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ command_accelresolution[common/motion_sense.c:1504]: # set_resolution
+ - None
+ command_accelresolution[common/motion_sense.c:1508]: # get_resolution
+ - get_resolution[driver/accelgyro_bmi160.c]
+ command_accel_data_rate[common/motion_sense.c:1560]: # get_data_rate
+ - tcs3400_get_data_rate
+ - tcs3400_rgb_get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ command_accel_read_xyz[common/motion_sense.c:1595]: # read
+ - tcs3400_read
+ - tcs3400_rgb_read
+ - read[driver/accelgyro_bmi160.c]
+ config_interrupt[driver/accelgyro_bmi160.c:1073]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+
+# Core
+ handle_command[common/console.c:248]:
+ - { name: __cmds, stride: 16, offset: 4 }
+ hook_task[common/hooks.c:200]:
+ - { name: __deferred_funcs, stride: 4, offset: 0 }
+ - { name: __hooks_second, stride: 8, offset: 0 }
+ - { name: __hooks_tick, stride: 8, offset: 0 }
+ # Note: This assumes worse case, where all hook functions can be called from
+ # any hook_notify call
+ # Generate using `grep hooks_.*_end build/kukui/R*/ec.R*.smap |
+ # sed -e 's/.*\(__hooks.*\)_end/ - { name: \1, stride: 8, offset: 0 }/' |
+ # sort -u`
+ hook_notify[common/hooks.c:130]:
+ - { name: __hooks_ac_change, stride: 8, offset: 0 }
+ - { name: __hooks_base_attached_change, stride: 8, offset: 0 }
+ - { name: __hooks_battery_soc_change, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_pre_init, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_reset, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_resume, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_shutdown, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_startup, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_suspend, stride: 8, offset: 0 }
+ - { name: __hooks_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_lid_change, stride: 8, offset: 0 }
+ - { name: __hooks_pre_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_pwrbtn_change, stride: 8, offset: 0 }
+ - { name: __hooks_sysjump, stride: 8, offset: 0 }
+ - { name: __hooks_tablet_mode_change, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_connect, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_disconnect, stride: 8, offset: 0 }
+ mkbp_get_next_event[common/mkbp_event.c:369]:
+ - { name: __mkbp_evt_srcs, stride: 8, offset: 4 }
+ host_command_process[common/host_command.c:708]:
+ - { name: __hcmds, stride: 12, offset: 0 }
+ vfnprintf:
+ # This covers all the addchar in vfnprintf, but stackanalyzer does not
+ # realize that...
+ - __tx_char
+ host_send_response[common/host_command.c:153]: # send_response
+ - spi_send_response
+ host_packet_respond[common/host_command.c:240]:
+ - spi_send_response_packet
+# Misc
+ i2c_command_passthru[common/i2c_master.c:991]:
+ - None
+ cprints[common/console_output.c:108]:
+ - None # I'm not sure what this is?!
+ chip_i2c_xfer_with_notify[common/i2c_master.c:112]: # i2c_port->drv->xfer
+ - i2c_bitbang_xfer
+ default_handler[core/cortex-m0/init.S:100]:
+ - exception_panic
+ rt946x_enable_hz[driver/charger/rt946x.c:370]:
+ - rt946x_set_bit
+ - rt946x_clr_bit
+ gpio_interrupt[chip/stm32/gpio.c:154]:
+ - None
+
remove:
# Remove all callsites pointing to panic_assert_fail.
- panic_assert_fail
+
+# Remove paths that make no sense
+# HOOK_USB_PD_DISCONNECT
+- [ pd_request_power_swap, set_state.lto_priv.196, hook_notify,
+ [ debug_mode_handle, motion_sense_shutdown, rt946x_usb_connect,
+ system_common_shutdown, board_charge_termination] ]
+- [ hook_task, resume_pd_port.lto_priv.263, pd_set_suspend,
+ set_state.lto_priv.194, hook_notify, rt946x_usb_connect ]
+# HOOK_AC_CHANGE/HOOK_BATTERY_SOC_CHANGE
+- [ [ check_ac_state, charger_task ], hook_notify,
+ [ debug_mode_handle, motion_sense_shutdown, rt946x_usb_connect, system_common_shutdown] ]
+# HOOK_LID_CHANGE
+- [ [ lid_switch_open, lid_switch_close ], hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown] ]
+# HOOK_BASE_ATTACHED_CHANGE
+- [ base_set_state, hook_notify, system_common_shutdown ]
+# HOOK_POWER_BUTTON_CHANGE
+- [ power_button_change_deferred, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown] ]
+# HOOK_SECOND
+- [ hook_task, hook_notify, [ motion_sense_shutdown, system_common_shutdown ] ]
+- [ hook_task, resume_pd_port.lto_priv.263, pd_set_suspend,
+ set_state.lto_priv.194, hook_notify, [ motion_sense_shutdown,
+ system_common_shutdown ] ]
+# HOOK_SYSJUMP
+- [ jump_to_image, hook_notify,
+ [ debug_mode_handle, motion_sense_shutdown, rt946x_usb_connect, system_common_shutdown] ]
+- [ pd_request_power_swap, set_state, hook_notify, panic_init ]
+# set_state(port, PD_STATE_SRC/SNK_SWAP_INIT); will not call these functions
+- [ pd_request_power_swap, set_state,
+ [ pd_dfp_exit_mode, usb_mux_set, pd_power_supply_reset, tcpm_set_vconn ] ]
+- [ [ pd_request_data_swap, pd_request_vconn_swap ] , set_state, pd_power_supply_reset ]
+# All sensors will be shut down in S5
+- [ motion_sense_shutdown, motion_sense_switch_sensor_rate,
+ [ motion_sense_set_data_rate, motion_sense_init ] ]
+# HOOK_CHIPSET_PRE_INIT, HOOK_CHIPSET_STARTUP, HOOK_CHIPSET_RESUME,
+# HOOK_CHIPSET_SUSPEND, HOOK_CHIPSET_SHUTDOWN
+- [ chipset_task, hook_notify, [ rt946x_usb_connect, debug_mode_handle ] ]
diff --git a/board/kakadu/ec.tasklist b/board/kakadu/ec.tasklist
index 20f30efbd2..e2e02df0eb 100644
--- a/board/kakadu/ec.tasklist
+++ b/board/kakadu/ec.tasklist
@@ -7,13 +7,13 @@
* See CONFIG_TASK_LIST in config.h for details.
*/
#define CONFIG_TASK_LIST \
- TASK_ALWAYS(HOOKS, hook_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOOKS, hook_task, NULL, 1024) \
TASK_ALWAYS(CHARGER, charger_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_ALWAYS(USB_CHG, usb_charger_task, NULL, 832) \
TASK_NOTEST(CHIPSET, chipset_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_ALWAYS_RW(MOTIONSENSE, motion_sense_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(PDCMD, pd_command_task, NULL, 1024) \
- TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1088) \
+ TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1152) \
TASK_ALWAYS(CONSOLE, console_task, NULL, 1152) \
TASK_ALWAYS(PD_C0, pd_task, NULL, 1280) \
TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, 1088) \
diff --git a/board/kappa/analyzestack.yaml b/board/kappa/analyzestack.yaml
new file mode 100644
index 0000000000..b89da4c25b
--- /dev/null
+++ b/board/kappa/analyzestack.yaml
@@ -0,0 +1,244 @@
+# Check cortex-m/switch.S
+exception_frame_size: 64
+add:
+# TCPC functions, see fusb302_tcpm_drv struct.
+ tcpm_init[driver/tcpm/tcpm.h:121]:
+ - fusb302_tcpm_init
+ tcpm_release[driver/tcpm/tcpm.h:134]:
+ - fusb302_tcpm_release,
+ tcpm_select_rp_value[driver/tcpm/tcpm.h:150]:
+ - fusb302_tcpm_select_rp_value
+ tcpm_set_msg_header[driver/tcpm/tcpm.h:170]:
+ - fusb302_tcpm_set_msg_header
+ tcpm_enter_low_power_mode[driver/tcpm/tcpm.h:234]:
+ - fusb302_tcpm_enter_low_power_mode
+ tcpm_transmit[driver/tcpm/tcpm.h:188]:
+ - fusb302_tcpm_transmit
+ tcpm_get_cc[driver/tcpm/tcpm.h:140]:
+ - fusb302_tcpm_get_cc
+ tcpm_set_rx_enable[driver/tcpm/tcpm.h:176]:
+ - fusb302_tcpm_set_rx_enable
+ tcpm_set_vconn[driver/tcpm/tcpm.h:165]:
+ - fusb302_tcpm_set_vconn
+ tcpm_set_polarity[driver/tcpm/tcpm.h:160]:
+ - fusb302_tcpm_set_polarity
+ tcpm_set_cc[driver/tcpm/tcpm.h:155]:
+ - fusb302_tcpm_set_cc
+ tcpm_get_vbus_level[driver/tcpm/tcpm.h:145]:
+ - fusb302_tcpm_get_vbus_level
+ tcpm_enqueue_message[driver/tcpm/tcpci.c:468]:
+ - fusb302_tcpm_get_message_raw
+# USB mux, see it5205_usb_mux_driver
+ usb_mux_flip[driver/usb_mux/usb_mux.c:164]: #get
+ - it5205_set_mux
+ usb_mux_flip[driver/usb_mux/usb_mux.c:175]: #set
+ - it5205_get_mux
+ usb_mux_init[driver/usb_mux/usb_mux.c:65]: #init
+ - it5205_init
+ usb_mux_init[driver/usb_mux/usb_mux.c:76]: # board_init
+ - None
+ enter_low_power_mode[driver/usb_mux/usb_mux.c:43]:
+ - it5205_enter_low_power_mode
+ usb_mux_set[driver/usb_mux/usb_mux.c:113]:
+ - it5205_set_mux
+ hc_usb_pd_mux_info[driver/usb_mux/usb_mux.c:241]:
+ - it5205_get_mux
+ usb_mux_get[driver/usb_mux/usb_mux.c:141]:
+ - it5205_get_mux
+# usb_mux hpd_update
+ svdm_dp_post_config[baseboard/kukui/usb_pd_policy.c:200]:
+ - board_hpd_status
+ svdm_exit_dp_mode[baseboard/kukui/usb_pd_policy.c:263]:
+ - board_hpd_status
+ svdm_dp_attention[baseboard/kukui/usb_pd_policy.c:219]:
+ - board_hpd_status
+# USB PD policy, see struct svdm_amode_fx
+ pd_svdm[common/usb_pd_policy.c:766]:
+ - svdm_dp_status
+ - svdm_gfu_status
+ pd_svdm[common/usb_pd_policy.c:777]:
+ - svdm_dp_config
+ - svdm_gfu_config
+ pd_svdm[common/usb_pd_policy.c:783]:
+ - svdm_dp_post_config
+ pd_dfp_enter_mode[common/usb_pd_policy.c:440]:
+ - svdm_enter_dp_mode
+ - svdm_enter_gfu_mode
+ pd_dfp_exit_mode[common/usb_pd_policy.c:544]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+ dfp_consume_attention[common/usb_pd_policy.c:478]:
+ - svdm_dp_attention
+ - svdm_gfu_attention
+ pd_dfp_exit_mode[common/usb_pd_policy.c:561]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+# Motion sense: bmi160
+ motion_sense_set_data_rate[common/motion_sense.c:156]: # set_data_rate
+ - set_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:175]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:184]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_motion_intervals[common/motion_sense.c:302]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_ec_rate_from_ap[common/motion_sense.c:196]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_init[common/motion_sense.c:327]: # init
+ - init[driver/accelgyro_bmi160.c]
+ sensor_init_done[common/motion_sense.c:353]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:431]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:437]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:440]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:589]: # read
+ - read[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:576]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_process[common/motion_sense.c:667]: # irq_handler
+ - irq_handler[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1153]: # set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1164]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1179]: # set_offset
+ - set_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1207]: # set_scale
+ - set_scale[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1233]: # perform_calib
+ - perform_calib[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1237]: # get_offset
+ - get_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1313]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1333]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1337]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1455]: # set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1460]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ command_accelresolution[common/motion_sense.c:1504]: # set_resolution
+ - None
+ command_accelresolution[common/motion_sense.c:1508]: # get_resolution
+ - get_resolution[driver/accelgyro_bmi160.c]
+ command_accel_data_rate[common/motion_sense.c:1560]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ command_accel_read_xyz[common/motion_sense.c:1595]: # read
+ - read[driver/accelgyro_bmi160.c]
+
+# Core
+ handle_command[common/console.c:248]:
+ - { name: __cmds, stride: 16, offset: 4 }
+ hook_task[common/hooks.c:200]:
+ - { name: __deferred_funcs, stride: 4, offset: 0 }
+ - { name: __hooks_second, stride: 8, offset: 0 }
+ - { name: __hooks_tick, stride: 8, offset: 0 }
+ # Note: This assumes worse case, where all hook functions can be called from
+ # any hook_notify call
+ # Generate using `grep hooks_.*_end build/kukui/R*/ec.R*.smap |
+ # sed -e 's/.*\(__hooks.*\)_end/ - { name: \1, stride: 8, offset: 0 }/' |
+ # sort -u`
+ hook_notify[common/hooks.c:130]:
+ - { name: __hooks_ac_change, stride: 8, offset: 0 }
+ - { name: __hooks_base_attached_change, stride: 8, offset: 0 }
+ - { name: __hooks_battery_soc_change, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_pre_init, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_reset, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_resume, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_shutdown, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_startup, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_suspend, stride: 8, offset: 0 }
+ - { name: __hooks_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_lid_change, stride: 8, offset: 0 }
+ - { name: __hooks_pre_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_pwrbtn_change, stride: 8, offset: 0 }
+ - { name: __hooks_sysjump, stride: 8, offset: 0 }
+ - { name: __hooks_tablet_mode_change, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_connect, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_disconnect, stride: 8, offset: 0 }
+ mkbp_get_next_event[common/mkbp_event.c:369]:
+ - { name: __mkbp_evt_srcs, stride: 8, offset: 4 }
+ host_command_process[common/host_command.c:708]:
+ - { name: __hcmds, stride: 12, offset: 0 }
+ vfnprintf:
+ # This covers all the addchar in vfnprintf, but stackanalyzer does not
+ # realize that...
+ - __tx_char
+ host_send_response[common/host_command.c:153]: # send_response
+ - spi_send_response
+ host_packet_respond[common/host_command.c:240]:
+ - spi_send_response_packet
+# Misc
+ i2c_command_passthru[common/i2c_master.c:991]:
+ - None
+ cprints[common/console_output.c:108]:
+ - None # I'm not sure what this is?!
+ chip_i2c_xfer_with_notify[common/i2c_master.c:112]: # i2c_port->drv->xfer
+ - i2c_bitbang_xfer
+ default_handler[core/cortex-m0/init.S:100]:
+ - exception_panic
+ gpio_interrupt[chip/stm32/gpio.c:154]:
+ - None
+
+remove:
+# Remove all callsites pointing to panic_assert_fail.
+- panic_assert_fail
+
+# Remove paths that make no sense
+# HOOK_USB_PD_DISCONNECT
+- [ pd_request_power_swap, set_state.lto_priv.206, hook_notify,
+ [ motion_sense_shutdown, charger_enable_psys, charger_disable_psys,
+ system_common_shutdown ] ]
+# HOOK_AC_CHANGE/HOOK_BATTERY_SOC_CHANGE
+- [ charger_task, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_LID_CHANGE
+- [ [ lid_switch_open, lid_switch_close ], hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_BASE_ATTACHED_CHANGE/HOOK_TABLET_MODE_CHANGE
+- [ tablet_set_mode, hook_notify, [ system_common_shutdown, charger_enable_psys, charger_disable_psys ] ]
+# HOOK_POWER_BUTTON_CHANGE
+- [ power_button_change_deferred, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_SECOND
+- [ hook_task, hook_notify, [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_SYSJUMP
+- [ jump_to_image, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown, charger_enable_psys, charger_disable_psys ] ]
+- [ pd_request_power_swap, set_state, hook_notify, panic_init ]
+# set_state(port, PD_STATE_SRC/SNK_SWAP_INIT); will not call these functions
+- [ pd_request_power_swap, set_state,
+ [ pd_dfp_exit_mode, usb_mux_set, pd_power_supply_reset, tcpm_set_vconn ] ]
+- [ [ pd_request_data_swap, pd_request_vconn_swap ] , set_state, pd_power_supply_reset ]
+# All sensors will be shut down in S5
+- [ motion_sense_shutdown, motion_sense_switch_sensor_rate,
+ [ motion_sense_set_data_rate, motion_sense_init ] ]
+# HOOK_CHIPSET_PRE_INIT, HOOK_CHIPSET_STARTUP, HOOK_CHIPSET_RESUME,
+# HOOK_CHIPSET_SUSPEND, HOOK_CHIPSET_SHUTDOWN
+- [ chipset_task, hook_notify ]
+# TCPC, KEYBOARD, BC12 will not access battery's bitbang
+- [ [ raw_read8.lto_priv.157, tcpc_read.lto_priv.352, tcpc_write.lto_priv.351,
+ it8801_ioex_write, it8801_read, it8801_write.lto_priv.336, raw_read16.lto_priv.349,
+ raw_write16.lto_priv.348, raw_read8.lto_priv.157 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ], [ i2c_write, i2c_read ],
+ i2c_xfer_unlocked, i2c_bitbang_xfer ]
+- [ [ raw_read8.lto_priv.157, tcpc_read.lto_priv.352, tcpc_write.lto_priv.351,
+ it8801_ioex_write, it8801_read, it8801_write.lto_priv.336, raw_read16.lto_priv.349,
+ raw_write16.lto_priv.348, raw_read8.lto_priv.157 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ] , [ i2c_write, i2c_read ],
+ i2c_xfer, i2c_xfer_unlocked, i2c_bitbang_xfer ]
+# PD_INT_C0_TASK
+# pd_wait_exit_low_power -> reset_device_and_notify can only be called in a pd_task NOT pd_interrupt_handler_task
+- [ pd_interrupt_handler_task, fusb302_tcpc_alert, pd_execute_hard_reset, set_state.lto_priv.206,
+ pd_power_supply_reset, charge_manager_source_port.part.10, charge_manager_save_log.part.9,
+ charge_manager_fill_power_info, tcpc_read.lto_priv.352, pd_wait_exit_low_power, reset_device_and_notify ]
+# CONSOLE_TASK
+# pd_wait_exit_low_power -> reset_device_and_notify can only be called in a pd_task NOT pd_interrupt_handler_task
+- [ console_task, command_pd, set_state.lto_priv.206, pd_power_supply_reset, charge_manager_source_port.part.10,
+ charge_manager_save_log.part.9, charge_manager_fill_power_info, tcpc_read.lto_priv.352, pd_wait_exit_low_power,
+ reset_device_and_notify ]
diff --git a/board/kappa/ec.tasklist b/board/kappa/ec.tasklist
index a1e20808cc..13fd1821ae 100644
--- a/board/kappa/ec.tasklist
+++ b/board/kappa/ec.tasklist
@@ -7,14 +7,14 @@
* See CONFIG_TASK_LIST in config.h for details.
*/
#define CONFIG_TASK_LIST \
- TASK_ALWAYS(HOOKS, hook_task, NULL, VENTI_TASK_STACK_SIZE) \
- TASK_ALWAYS(CHARGER, charger_task, NULL, VENTI_TASK_STACK_SIZE) \
- TASK_ALWAYS(USB_CHG_P0, usb_charger_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOOKS, hook_task, NULL, 1024) \
+ TASK_ALWAYS(CHARGER, charger_task, NULL, 1152) \
+ TASK_ALWAYS(USB_CHG_P0, usb_charger_task, NULL, 1024) \
TASK_NOTEST(CHIPSET, chipset_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS_RW(MOTIONSENSE, motion_sense_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(PDCMD, pd_command_task, NULL, 1024) \
- TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1024) \
- TASK_ALWAYS(CONSOLE, console_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1152) \
+ TASK_ALWAYS(CONSOLE, console_task, NULL, 1024) \
TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS(PD_C0, pd_task, NULL, 1280) \
TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, 1024) \
diff --git a/board/kodama/analyzestack.yaml b/board/kodama/analyzestack.yaml
index 4a057ce818..e2f93ab763 100644
--- a/board/kodama/analyzestack.yaml
+++ b/board/kodama/analyzestack.yaml
@@ -1,3 +1,288 @@
+# Check cortex-m/switch.S
+exception_frame_size: 64
+add:
+# TCPC functions, see mt6370_tcpm_drv struct.
+ tcpm_init[driver/tcpm/tcpm.h:121]:
+ - mt6370_init
+ tcpm_release[driver/tcpm/tcpm.h:134]:
+ - tcpci_tcpm_release
+ tcpm_select_rp_value[driver/tcpm/tcpm.h:150]:
+ - tcpci_tcpm_select_rp_value
+ tcpm_set_msg_header[driver/tcpm/tcpm.h:170]:
+ - tcpci_tcpm_set_msg_header
+ tcpm_enable_drp_toggle[driver/tcpm/tcpm.h:227]:
+ - tcpci_tcpc_drp_toggle
+ tcpm_enter_low_power_mode[driver/tcpm/tcpm.h:234]:
+ - mt6370_enter_low_power_mode
+ tcpm_transmit[driver/tcpm/tcpm.h:188]:
+ - tcpci_tcpm_transmit
+ tcpm_get_chip_info[driver/tcpm/tcpm.h:256]:
+ - tcpci_get_chip_info
+ tcpm_get_cc[driver/tcpm/tcpm.h:140]:
+ - mt6370_get_cc
+ tcpm_set_rx_enable[driver/tcpm/tcpm.h:176]:
+ - tcpci_tcpm_set_rx_enable
+ tcpm_set_vconn[driver/tcpm/tcpm.h:165]:
+ - tcpci_tcpm_set_vconn
+ tcpm_set_polarity[driver/tcpm/tcpm.h:160]:
+ - mt6370_set_polarity
+ tcpm_set_cc[driver/tcpm/tcpm.h:155]:
+ - mt6370_set_cc
+ tcpm_get_vbus_level[driver/tcpm/tcpm.h:145]:
+ - tcpci_tcpm_get_vbus_level
+ tcpm_enqueue_message[driver/tcpm/tcpci.c:468]:
+ - tcpci_tcpm_get_message_raw
+# USB mux, see it5205_usb_mux_driver
+ usb_mux_flip[driver/usb_mux/usb_mux.c:164]: #get
+ - it5205_set_mux
+ usb_mux_flip[driver/usb_mux/usb_mux.c:175]: #set
+ - it5205_get_mux
+ usb_mux_init[driver/usb_mux/usb_mux.c:65]: #init
+ - it5205_init
+ usb_mux_init[driver/usb_mux/usb_mux.c:76]: # board_init
+ - None
+ enter_low_power_mode[driver/usb_mux/usb_mux.c:43]:
+ - it5205_enter_low_power_mode
+ usb_mux_set[driver/usb_mux/usb_mux.c:113]:
+ - it5205_set_mux
+ hc_usb_pd_mux_info[driver/usb_mux/usb_mux.c:241]:
+ - it5205_get_mux
+ usb_mux_get[driver/usb_mux/usb_mux.c:141]:
+ - it5205_get_mux
+# usb_mux hpd_update
+ svdm_dp_post_config[baseboard/kukui/usb_pd_policy.c:200]:
+ - board_hpd_update
+ svdm_exit_dp_mode[baseboard/kukui/usb_pd_policy.c:263]:
+ - board_hpd_update
+ svdm_dp_attention[baseboard/kukui/usb_pd_policy.c:219]:
+ - board_hpd_update
+# USB PD policy, see struct svdm_amode_fx
+ pd_svdm[common/usb_pd_policy.c:766]:
+ - svdm_dp_status
+ - svdm_gfu_status
+ pd_svdm[common/usb_pd_policy.c:777]:
+ - svdm_dp_config
+ - svdm_gfu_config
+ pd_svdm[common/usb_pd_policy.c:783]:
+ - svdm_dp_post_config
+ pd_dfp_enter_mode[common/usb_pd_policy.c:440]:
+ - svdm_enter_dp_mode
+ - svdm_enter_gfu_mode
+ pd_dfp_exit_mode[common/usb_pd_policy.c:544]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+ dfp_consume_attention[common/usb_pd_policy.c:478]:
+ - svdm_dp_attention
+ - svdm_gfu_attention
+ pd_dfp_exit_mode[common/usb_pd_policy.c:561]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+# Motion sense: bmi160 and tcs3400_drv, tcs3400_rgb_drv
+ motion_sense_set_data_rate[common/motion_sense.c:156]: # set_data_rate
+ - tcs3400_set_data_rate
+ - tcs3400_rgb_set_data_rate
+ - set_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:175]: # get_data_rate
+ - tcs3400_get_data_rate
+ - tcs3400_rgb_get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:184]: # get_data_rate
+ - tcs3400_get_data_rate
+ - tcs3400_rgb_get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_motion_intervals[common/motion_sense.c:302]: # get_data_rate
+ - tcs3400_get_data_rate
+ - tcs3400_rgb_get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_ec_rate_from_ap[common/motion_sense.c:196]: # get_data_rate
+ - tcs3400_get_data_rate
+ - tcs3400_rgb_get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_init[common/motion_sense.c:327]: # init
+ - tcs3400_init
+ - tcs3400_rgb_init
+ - init[driver/accelgyro_bmi160.c]
+ sensor_init_done[common/motion_sense.c:353]: # get_range
+ - tcs3400_get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ - set_range[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:431]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:437]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:440]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:589]: # read
+ - tcs3400_read
+ - tcs3400_rgb_read
+ - read[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:576]: # get_data_rate
+ - tcs3400_get_data_rate
+ - tcs3400_rgb_get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_process[common/motion_sense.c:667]: # irq_handler
+ - tcs3400_irq_handler
+ - irq_handler[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1153]: # set_range
+ - tcs3400_set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1164]: # get_range
+ - tcs3400_get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1179]: # set_offset
+ - tcs3400_set_offset
+ - tcs3400_rgb_set_offset
+ - set_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1207]: # set_scale
+ - tcs3400_set_scale
+ - tcs3400_rgb_set_scale
+ - set_scale[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1233]: # perform_calib
+ - tcs3400_perform_calib
+ - perform_calib[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1237]: # get_offset
+ - tcs3400_get_offset
+ - tcs3400_rgb_get_offset
+ - get_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1313]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1333]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1337]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1455]: # set_range
+ - tcs3400_set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1460]: # get_range
+ - tcs3400_get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ command_accelresolution[common/motion_sense.c:1504]: # set_resolution
+ - None
+ command_accelresolution[common/motion_sense.c:1508]: # get_resolution
+ - get_resolution[driver/accelgyro_bmi160.c]
+ command_accel_data_rate[common/motion_sense.c:1560]: # get_data_rate
+ - tcs3400_get_data_rate
+ - tcs3400_rgb_get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ command_accel_read_xyz[common/motion_sense.c:1595]: # read
+ - tcs3400_read
+ - tcs3400_rgb_read
+ - read[driver/accelgyro_bmi160.c]
+ config_interrupt[driver/accelgyro_bmi160.c:1073]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+
+# Core
+ handle_command[common/console.c:248]:
+ - { name: __cmds, stride: 16, offset: 4 }
+ hook_task[common/hooks.c:200]:
+ - { name: __deferred_funcs, stride: 4, offset: 0 }
+ - { name: __hooks_second, stride: 8, offset: 0 }
+ - { name: __hooks_tick, stride: 8, offset: 0 }
+ # Note: This assumes worse case, where all hook functions can be called from
+ # any hook_notify call
+ # Generate using `grep hooks_.*_end build/kukui/R*/ec.R*.smap |
+ # sed -e 's/.*\(__hooks.*\)_end/ - { name: \1, stride: 8, offset: 0 }/' |
+ # sort -u`
+ hook_notify[common/hooks.c:130]:
+ - { name: __hooks_ac_change, stride: 8, offset: 0 }
+ - { name: __hooks_base_attached_change, stride: 8, offset: 0 }
+ - { name: __hooks_battery_soc_change, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_pre_init, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_reset, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_resume, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_shutdown, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_startup, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_suspend, stride: 8, offset: 0 }
+ - { name: __hooks_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_lid_change, stride: 8, offset: 0 }
+ - { name: __hooks_pre_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_pwrbtn_change, stride: 8, offset: 0 }
+ - { name: __hooks_sysjump, stride: 8, offset: 0 }
+ - { name: __hooks_tablet_mode_change, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_connect, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_disconnect, stride: 8, offset: 0 }
+ mkbp_get_next_event[common/mkbp_event.c:369]:
+ - { name: __mkbp_evt_srcs, stride: 8, offset: 4 }
+ host_command_process[common/host_command.c:708]:
+ - { name: __hcmds, stride: 12, offset: 0 }
+ vfnprintf:
+ # This covers all the addchar in vfnprintf, but stackanalyzer does not
+ # realize that...
+ - __tx_char
+ host_send_response[common/host_command.c:153]: # send_response
+ - spi_send_response
+ host_packet_respond[common/host_command.c:240]:
+ - spi_send_response_packet
+# Misc
+ i2c_command_passthru[common/i2c_master.c:991]:
+ - None
+ cprints[common/console_output.c:108]:
+ - None # I'm not sure what this is?!
+ chip_i2c_xfer_with_notify[common/i2c_master.c:112]: # i2c_port->drv->xfer
+ - i2c_bitbang_xfer
+ default_handler[core/cortex-m0/init.S:100]:
+ - exception_panic
+ rt946x_enable_hz[driver/charger/rt946x.c:370]:
+ - rt946x_set_bit
+ - rt946x_clr_bit
+ gpio_interrupt[chip/stm32/gpio.c:154]:
+ - None
+
remove:
# Remove all callsites pointing to panic_assert_fail.
- panic_assert_fail
+
+# Remove paths that make no sense
+# HOOK_USB_PD_DISCONNECT
+- [ pd_request_power_swap, set_state.lto_priv.196, hook_notify,
+ [ debug_mode_handle, motion_sense_shutdown, rt946x_usb_connect,
+ system_common_shutdown, board_charge_termination] ]
+- [ hook_task, resume_pd_port.lto_priv.263, pd_set_suspend,
+ set_state.lto_priv.194, hook_notify, rt946x_usb_connect ]
+# HOOK_AC_CHANGE/HOOK_BATTERY_SOC_CHANGE
+- [ [ check_ac_state, charger_task ], hook_notify,
+ [ debug_mode_handle, motion_sense_shutdown, rt946x_usb_connect, system_common_shutdown] ]
+# HOOK_LID_CHANGE
+- [ [ lid_switch_open, lid_switch_close ], hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+- [ set_state.lto_priv.189, hook_notify, mkbp_lid_change ]
+# HOOK_BASE_ATTACHED_CHANGE
+- [ base_set_state, hook_notify, system_common_shutdown ]
+- [ set_state.lto_priv.189, hook_notify, mkbp_base_attached_change ]
+# HOOK_POWER_BUTTON_CHANGE
+- [ power_button_change_deferred, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+- [ set_state.lto_priv.189, hook_notify, keyboard_power_button ]
+# HOOK_SECOND
+- [ hook_task, hook_notify, [ motion_sense_shutdown, system_common_shutdown ] ]
+- [ hook_task, resume_pd_port.lto_priv.263, pd_set_suspend,
+ set_state.lto_priv.194, hook_notify, [ motion_sense_shutdown,
+ system_common_shutdown ] ]
+# HOOK_SYSJUMP
+- [ jump_to_image, hook_notify,
+ [ debug_mode_handle, motion_sense_shutdown, rt946x_usb_connect,
+ system_common_shutdown ] ]
+- [ pd_request_power_swap, set_state, hook_notify, panic_init ]
+# set_state(port, PD_STATE_SRC/SNK_SWAP_INIT); will not call these functions
+- [ pd_request_power_swap, set_state,
+ [ pd_dfp_exit_mode, usb_mux_set, pd_power_supply_reset, tcpm_set_vconn ] ]
+- [ [ pd_request_data_swap, pd_request_vconn_swap ] , set_state, pd_power_supply_reset ]
+# All sensors will be shut down in S5
+- [ motion_sense_shutdown, motion_sense_switch_sensor_rate,
+ [ motion_sense_set_data_rate, motion_sense_init ] ]
+# HOOK_CHIPSET_PRE_INIT, HOOK_CHIPSET_STARTUP, HOOK_CHIPSET_RESUME,
+# HOOK_CHIPSET_SUSPEND, HOOK_CHIPSET_SHUTDOWN
+- [ chipset_task, hook_notify, [ rt946x_usb_connect, debug_mode_handle ] ]
+# TCPC, battery bitbang
+- [ [ tcpc_read16, tcpc_read, tcpc_write16, tcpc_write, it5205_init.lto_priv.322,
+ it5205_write, rt946x_read8.lto_priv.327, rt946x_write8.lto_priv.334 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ], [ i2c_write, i2c_read ],
+ i2c_xfer_unlocked, i2c_bitbang_xfer ]
+- [ [ tcpc_read16, tcpc_read, tcpc_write16, tcpc_write, it5205_init.lto_priv.322,
+ it5205_write, it5205_read, rt946x_read8.lto_priv.327, rt946x_write8.lto_priv.334 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ], [ i2c_write, i2c_read ],
+ i2c_xfer, i2c_xfer_unlocked, i2c_bitbang_xfer ]
+- [ [ tcpc_read16, tcpc_read, tcpc_write16, tcpc_write, it5205_init.lto_priv.322 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ], [ i2c_write, i2c_read ],
+ i2c_bitbang_xfer ]
+- [ mt6370_enable_hidden_mode, i2c_write_block, i2c_bitbang_xfer ]
diff --git a/board/kodama/ec.tasklist b/board/kodama/ec.tasklist
index df944a1b07..530089ca74 100644
--- a/board/kodama/ec.tasklist
+++ b/board/kodama/ec.tasklist
@@ -7,14 +7,14 @@
* See CONFIG_TASK_LIST in config.h for details.
*/
#define CONFIG_TASK_LIST \
- TASK_ALWAYS(HOOKS, hook_task, NULL, VENTI_TASK_STACK_SIZE) \
- TASK_ALWAYS(CHARGER, charger_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOOKS, hook_task, NULL, 1024) \
+ TASK_ALWAYS(CHARGER, charger_task, NULL, 1152) \
TASK_ALWAYS(USB_CHG, usb_charger_task, NULL, VENTI_TASK_STACK_SIZE) \
- TASK_NOTEST(CHIPSET, chipset_task, NULL, LARGER_TASK_STACK_SIZE) \
+ TASK_NOTEST(CHIPSET, chipset_task, NULL, 1024) \
TASK_ALWAYS_RW(MOTIONSENSE, motion_sense_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(PDCMD, pd_command_task, NULL, 1024) \
- TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1024) \
- TASK_ALWAYS(CONSOLE, console_task, NULL, LARGER_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1152) \
+ TASK_ALWAYS(CONSOLE, console_task, NULL, 1024) \
TASK_ALWAYS(PD_C0, pd_task, NULL, 1280) \
TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, 1024) \
TASK_ALWAYS_RO(EMMC, emmc_task, NULL, LARGER_TASK_STACK_SIZE)
diff --git a/board/kukui/analyzestack.yaml b/board/kukui/analyzestack.yaml
index 535e661469..21d1f66b8b 100644
--- a/board/kukui/analyzestack.yaml
+++ b/board/kukui/analyzestack.yaml
@@ -1,3 +1,5 @@
+# Check cortex-m/switch.S
+exception_frame_size: 64
add:
# TCPC functions, see mt6370_tcpm_drv struct.
tcpm_init[driver/tcpm/tcpm.h:121]:
@@ -103,6 +105,7 @@ add:
sensor_init_done[common/motion_sense.c:353]: # get_range
- tcs3400_get_range
- get_range[driver/accelgyro_bmi160.c]
+ - set_range[driver/accelgyro_bmi160.c]
motion_sense_shutdown[common/motion_sense.c:431]: # list_activities
- list_activities[driver/accelgyro_bmi160.c]
motion_sense_shutdown[common/motion_sense.c:437]: # manage_activity
@@ -234,6 +237,8 @@ remove:
- [ pd_request_power_swap, set_state.lto_priv.196, hook_notify,
[ debug_mode_handle, motion_sense_shutdown, rt946x_usb_connect,
system_common_shutdown, board_charge_termination] ]
+- [ hook_task, resume_pd_port.lto_priv.263, pd_set_suspend,
+ set_state.lto_priv.194, hook_notify, rt946x_usb_connect ]
# HOOK_AC_CHANGE/HOOK_BATTERY_SOC_CHANGE
- [ [ check_ac_state, charger_task ], hook_notify,
[ debug_mode_handle, motion_sense_shutdown, rt946x_usb_connect, system_common_shutdown] ]
@@ -246,7 +251,10 @@ remove:
- [ power_button_change_deferred, hook_notify,
[ motion_sense_shutdown, system_common_shutdown] ]
# HOOK_SECOND
-- [ hook_task, hook_notify, [ motion_sense_shutdown, system_common_shutdown] ]
+- [ hook_task, hook_notify, [ motion_sense_shutdown, system_common_shutdown ] ]
+- [ hook_task, resume_pd_port.lto_priv.263, pd_set_suspend,
+ set_state.lto_priv.194, hook_notify, [ motion_sense_shutdown,
+ system_common_shutdown ] ]
# HOOK_SYSJUMP
- [ jump_to_image, hook_notify,
[ debug_mode_handle, motion_sense_shutdown, rt946x_usb_connect, system_common_shutdown] ]
diff --git a/board/kukui/ec.tasklist b/board/kukui/ec.tasklist
index dc4971f187..afc39c8e47 100644
--- a/board/kukui/ec.tasklist
+++ b/board/kukui/ec.tasklist
@@ -7,7 +7,7 @@
* See CONFIG_TASK_LIST in config.h for details.
*/
#define CONFIG_TASK_LIST \
- TASK_ALWAYS(HOOKS, hook_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOOKS, hook_task, NULL, 1024) \
TASK_ALWAYS(CHARGER, charger_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_ALWAYS(USB_CHG, usb_charger_task, NULL, 832) \
TASK_NOTEST(CHIPSET, chipset_task, NULL, VENTI_TASK_STACK_SIZE) \
diff --git a/board/stern/analyzestack.yaml b/board/stern/analyzestack.yaml
new file mode 100644
index 0000000000..76f8f523f2
--- /dev/null
+++ b/board/stern/analyzestack.yaml
@@ -0,0 +1,246 @@
+# Check cortex-m/switch.S
+exception_frame_size: 64
+add:
+# TCPC functions, see fusb302_tcpm_drv struct.
+ tcpm_init[driver/tcpm/tcpm.h:121]:
+ - fusb302_tcpm_init
+ tcpm_release[driver/tcpm/tcpm.h:134]:
+ - fusb302_tcpm_release,
+ tcpm_select_rp_value[driver/tcpm/tcpm.h:150]:
+ - fusb302_tcpm_select_rp_value
+ tcpm_set_msg_header[driver/tcpm/tcpm.h:170]:
+ - fusb302_tcpm_set_msg_header
+ tcpm_enter_low_power_mode[driver/tcpm/tcpm.h:234]:
+ - fusb302_tcpm_enter_low_power_mode
+ tcpm_transmit[driver/tcpm/tcpm.h:188]:
+ - fusb302_tcpm_transmit
+ tcpm_get_cc[driver/tcpm/tcpm.h:140]:
+ - fusb302_tcpm_get_cc
+ tcpm_set_rx_enable[driver/tcpm/tcpm.h:176]:
+ - fusb302_tcpm_set_rx_enable
+ tcpm_set_vconn[driver/tcpm/tcpm.h:165]:
+ - fusb302_tcpm_set_vconn
+ tcpm_set_polarity[driver/tcpm/tcpm.h:160]:
+ - fusb302_tcpm_set_polarity
+ tcpm_set_cc[driver/tcpm/tcpm.h:155]:
+ - fusb302_tcpm_set_cc
+ tcpm_get_vbus_level[driver/tcpm/tcpm.h:145]:
+ - fusb302_tcpm_get_vbus_level
+ tcpm_enqueue_message[driver/tcpm/tcpci.c:468]:
+ - fusb302_tcpm_get_message_raw
+# USB mux, see it5205_usb_mux_driver
+ usb_mux_flip[driver/usb_mux/usb_mux.c:164]: #get
+ - it5205_set_mux
+ usb_mux_flip[driver/usb_mux/usb_mux.c:175]: #set
+ - it5205_get_mux
+ usb_mux_init[driver/usb_mux/usb_mux.c:65]: #init
+ - it5205_init
+ usb_mux_init[driver/usb_mux/usb_mux.c:76]: # board_init
+ - None
+ enter_low_power_mode[driver/usb_mux/usb_mux.c:43]:
+ - it5205_enter_low_power_mode
+ usb_mux_set[driver/usb_mux/usb_mux.c:113]:
+ - it5205_set_mux
+ hc_usb_pd_mux_info[driver/usb_mux/usb_mux.c:241]:
+ - it5205_get_mux
+ usb_mux_get[driver/usb_mux/usb_mux.c:141]:
+ - it5205_get_mux
+# usb_mux hpd_update
+ svdm_dp_post_config[baseboard/kukui/usb_pd_policy.c:200]:
+ - board_hpd_status
+ svdm_exit_dp_mode[baseboard/kukui/usb_pd_policy.c:263]:
+ - board_hpd_status
+ svdm_dp_attention[baseboard/kukui/usb_pd_policy.c:219]:
+ - board_hpd_status
+# USB PD policy, see struct svdm_amode_fx
+ pd_svdm[common/usb_pd_policy.c:766]:
+ - svdm_dp_status
+ - svdm_gfu_status
+ pd_svdm[common/usb_pd_policy.c:777]:
+ - svdm_dp_config
+ - svdm_gfu_config
+ pd_svdm[common/usb_pd_policy.c:783]:
+ - svdm_dp_post_config
+ pd_dfp_enter_mode[common/usb_pd_policy.c:440]:
+ - svdm_enter_dp_mode
+ - svdm_enter_gfu_mode
+ pd_dfp_exit_mode[common/usb_pd_policy.c:544]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+ dfp_consume_attention[common/usb_pd_policy.c:478]:
+ - svdm_dp_attention
+ - svdm_gfu_attention
+ pd_dfp_exit_mode[common/usb_pd_policy.c:561]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+# Motion sense: bmi160
+ motion_sense_set_data_rate[common/motion_sense.c:156]: # set_data_rate
+ - set_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:175]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:184]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_motion_intervals[common/motion_sense.c:302]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_ec_rate_from_ap[common/motion_sense.c:196]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_init[common/motion_sense.c:327]: # init
+ - init[driver/accelgyro_bmi160.c]
+ sensor_init_done[common/motion_sense.c:353]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:431]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:437]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:440]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:589]: # read
+ - read[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:576]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_process[common/motion_sense.c:667]: # irq_handler
+ - irq_handler[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1153]: # set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1164]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1179]: # set_offset
+ - set_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1207]: # set_scale
+ - set_scale[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1233]: # perform_calib
+ - perform_calib[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1237]: # get_offset
+ - get_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1313]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1333]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1337]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1455]: # set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1460]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ command_accelresolution[common/motion_sense.c:1504]: # set_resolution
+ - None
+ command_accelresolution[common/motion_sense.c:1508]: # get_resolution
+ - get_resolution[driver/accelgyro_bmi160.c]
+ command_accel_data_rate[common/motion_sense.c:1560]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ command_accel_read_xyz[common/motion_sense.c:1595]: # read
+ - read[driver/accelgyro_bmi160.c]
+
+# Core
+ handle_command[common/console.c:248]:
+ - { name: __cmds, stride: 16, offset: 4 }
+ hook_task[common/hooks.c:200]:
+ - { name: __deferred_funcs, stride: 4, offset: 0 }
+ - { name: __hooks_second, stride: 8, offset: 0 }
+ - { name: __hooks_tick, stride: 8, offset: 0 }
+ # Note: This assumes worse case, where all hook functions can be called from
+ # any hook_notify call
+ # Generate using `grep hooks_.*_end build/kukui/R*/ec.R*.smap |
+ # sed -e 's/.*\(__hooks.*\)_end/ - { name: \1, stride: 8, offset: 0 }/' |
+ # sort -u`
+ hook_notify[common/hooks.c:130]:
+ - { name: __hooks_ac_change, stride: 8, offset: 0 }
+ - { name: __hooks_base_attached_change, stride: 8, offset: 0 }
+ - { name: __hooks_battery_soc_change, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_pre_init, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_reset, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_resume, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_shutdown, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_startup, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_suspend, stride: 8, offset: 0 }
+ - { name: __hooks_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_lid_change, stride: 8, offset: 0 }
+ - { name: __hooks_pre_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_pwrbtn_change, stride: 8, offset: 0 }
+ - { name: __hooks_sysjump, stride: 8, offset: 0 }
+ - { name: __hooks_tablet_mode_change, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_connect, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_disconnect, stride: 8, offset: 0 }
+ mkbp_get_next_event[common/mkbp_event.c:369]:
+ - { name: __mkbp_evt_srcs, stride: 8, offset: 4 }
+ host_command_process[common/host_command.c:708]:
+ - { name: __hcmds, stride: 12, offset: 0 }
+ vfnprintf:
+ # This covers all the addchar in vfnprintf, but stackanalyzer does not
+ # realize that...
+ - __tx_char
+ host_send_response[common/host_command.c:153]: # send_response
+ - spi_send_response
+ host_packet_respond[common/host_command.c:240]:
+ - spi_send_response_packet
+# Misc
+ i2c_command_passthru[common/i2c_master.c:991]:
+ - None
+ cprints[common/console_output.c:108]:
+ - None # I'm not sure what this is?!
+ chip_i2c_xfer_with_notify[common/i2c_master.c:112]: # i2c_port->drv->xfer
+ - i2c_bitbang_xfer
+ default_handler[core/cortex-m0/init.S:100]:
+ - exception_panic
+ gpio_interrupt[chip/stm32/gpio.c:154]:
+ - None
+
+remove:
+# Remove all callsites pointing to panic_assert_fail.
+- panic_assert_fail
+
+# Remove paths that make no sense
+# HOOK_USB_PD_DISCONNECT
+- [ pd_request_power_swap, set_state.lto_priv.206, hook_notify,
+ [ motion_sense_shutdown, charger_enable_psys, charger_disable_psys,
+ system_common_shutdown ] ]
+# HOOK_AC_CHANGE/HOOK_BATTERY_SOC_CHANGE
+- [ charger_task, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_LID_CHANGE
+- [ [ lid_switch_open, lid_switch_close ], hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_BASE_ATTACHED_CHANGE/HOOK_TABLET_MODE_CHANGE
+- [ tablet_set_mode, hook_notify, [ system_common_shutdown, charger_enable_psys, charger_disable_psys ] ]
+# HOOK_POWER_BUTTON_CHANGE
+- [ power_button_change_deferred, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_SECOND
+- [ hook_task, hook_notify, [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_SYSJUMP
+- [ jump_to_image, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown, charger_enable_psys, charger_disable_psys ] ]
+- [ pd_request_power_swap, set_state, hook_notify, panic_init ]
+# set_state(port, PD_STATE_SRC/SNK_SWAP_INIT); will not call these functions
+- [ pd_request_power_swap, set_state,
+ [ pd_dfp_exit_mode, usb_mux_set, pd_power_supply_reset, tcpm_set_vconn ] ]
+- [ [ pd_request_data_swap, pd_request_vconn_swap ] , set_state, pd_power_supply_reset ]
+# All sensors will be shut down in S5
+- [ motion_sense_shutdown, motion_sense_switch_sensor_rate,
+ [ motion_sense_set_data_rate, motion_sense_init ] ]
+# HOOK_CHIPSET_PRE_INIT, HOOK_CHIPSET_STARTUP, HOOK_CHIPSET_RESUME,
+# HOOK_CHIPSET_SUSPEND, HOOK_CHIPSET_SHUTDOWN
+- [ chipset_task, hook_notify ]
+# TCPC, KEYBOARD, BC12 will not access battery's bitbang
+- [ [ raw_read8.lto_priv.157, tcpc_read.lto_priv.352, tcpc_write.lto_priv.351,
+ it8801_ioex_write, it8801_read, it8801_write.lto_priv.336, raw_read16.lto_priv.349,
+ raw_write16.lto_priv.348, it5205_init.lto_priv.241, it5205_write,
+ raw_read8, tcpc_read.lto_priv.340 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ], [ i2c_write, i2c_read ],
+ i2c_xfer_unlocked, i2c_bitbang_xfer ]
+- [ [ raw_read8.lto_priv.157, tcpc_read.lto_priv.352, tcpc_write.lto_priv.351,
+ it8801_ioex_write, it8801_read, it8801_write.lto_priv.336, raw_read16.lto_priv.349,
+ raw_write16.lto_priv.348, it5205_init.lto_priv.241, it5205_write,
+ raw_read8, tcpc_read.lto_priv.340 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ] , [ i2c_write, i2c_read ],
+ i2c_xfer, i2c_xfer_unlocked, i2c_bitbang_xfer ]
+# PD_INT_C0_TASK
+# pd_wait_exit_low_power -> reset_device_and_notify can only be called in a pd_task NOT pd_interrupt_handler_task
+- [ pd_interrupt_handler_task, fusb302_tcpc_alert, pd_execute_hard_reset, set_state.lto_priv.206,
+ pd_power_supply_reset, charge_manager_source_port.part.10, charge_manager_save_log.part.9,
+ charge_manager_fill_power_info, tcpc_read.lto_priv.352, pd_wait_exit_low_power, reset_device_and_notify ]
+# CONSOLE_TASK
+# pd_wait_exit_low_power -> reset_device_and_notify can only be called in a pd_task NOT pd_interrupt_handler_task
+- [ console_task, command_pd, set_state.lto_priv.206, pd_power_supply_reset, charge_manager_source_port.part.10,
+ charge_manager_save_log.part.9, charge_manager_fill_power_info, tcpc_read.lto_priv.352, pd_wait_exit_low_power,
+ reset_device_and_notify ]
diff --git a/board/stern/ec.tasklist b/board/stern/ec.tasklist
index 3549007a02..c7f7811cff 100644
--- a/board/stern/ec.tasklist
+++ b/board/stern/ec.tasklist
@@ -7,14 +7,14 @@
* See CONFIG_TASK_LIST in config.h for details.
*/
#define CONFIG_TASK_LIST \
- TASK_ALWAYS(HOOKS, hook_task, NULL, VENTI_TASK_STACK_SIZE) \
- TASK_ALWAYS(CHARGER, charger_task, NULL, 1024) \
+ TASK_ALWAYS(HOOKS, hook_task, NULL, 1024) \
+ TASK_ALWAYS(CHARGER, charger_task, NULL, 1152) \
TASK_ALWAYS(USB_CHG_P0, usb_charger_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(CHIPSET, chipset_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS_RW(MOTIONSENSE, motion_sense_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(PDCMD, pd_command_task, NULL, 1024) \
- TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1024) \
- TASK_ALWAYS(CONSOLE, console_task, NULL, LARGER_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1152) \
+ TASK_ALWAYS(CONSOLE, console_task, NULL, 1024) \
TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS(PD_C0, pd_task, NULL, 1280) \
TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, 1024) \
diff --git a/board/willow/analyzestack.yaml b/board/willow/analyzestack.yaml
new file mode 100644
index 0000000000..76f8f523f2
--- /dev/null
+++ b/board/willow/analyzestack.yaml
@@ -0,0 +1,246 @@
+# Check cortex-m/switch.S
+exception_frame_size: 64
+add:
+# TCPC functions, see fusb302_tcpm_drv struct.
+ tcpm_init[driver/tcpm/tcpm.h:121]:
+ - fusb302_tcpm_init
+ tcpm_release[driver/tcpm/tcpm.h:134]:
+ - fusb302_tcpm_release,
+ tcpm_select_rp_value[driver/tcpm/tcpm.h:150]:
+ - fusb302_tcpm_select_rp_value
+ tcpm_set_msg_header[driver/tcpm/tcpm.h:170]:
+ - fusb302_tcpm_set_msg_header
+ tcpm_enter_low_power_mode[driver/tcpm/tcpm.h:234]:
+ - fusb302_tcpm_enter_low_power_mode
+ tcpm_transmit[driver/tcpm/tcpm.h:188]:
+ - fusb302_tcpm_transmit
+ tcpm_get_cc[driver/tcpm/tcpm.h:140]:
+ - fusb302_tcpm_get_cc
+ tcpm_set_rx_enable[driver/tcpm/tcpm.h:176]:
+ - fusb302_tcpm_set_rx_enable
+ tcpm_set_vconn[driver/tcpm/tcpm.h:165]:
+ - fusb302_tcpm_set_vconn
+ tcpm_set_polarity[driver/tcpm/tcpm.h:160]:
+ - fusb302_tcpm_set_polarity
+ tcpm_set_cc[driver/tcpm/tcpm.h:155]:
+ - fusb302_tcpm_set_cc
+ tcpm_get_vbus_level[driver/tcpm/tcpm.h:145]:
+ - fusb302_tcpm_get_vbus_level
+ tcpm_enqueue_message[driver/tcpm/tcpci.c:468]:
+ - fusb302_tcpm_get_message_raw
+# USB mux, see it5205_usb_mux_driver
+ usb_mux_flip[driver/usb_mux/usb_mux.c:164]: #get
+ - it5205_set_mux
+ usb_mux_flip[driver/usb_mux/usb_mux.c:175]: #set
+ - it5205_get_mux
+ usb_mux_init[driver/usb_mux/usb_mux.c:65]: #init
+ - it5205_init
+ usb_mux_init[driver/usb_mux/usb_mux.c:76]: # board_init
+ - None
+ enter_low_power_mode[driver/usb_mux/usb_mux.c:43]:
+ - it5205_enter_low_power_mode
+ usb_mux_set[driver/usb_mux/usb_mux.c:113]:
+ - it5205_set_mux
+ hc_usb_pd_mux_info[driver/usb_mux/usb_mux.c:241]:
+ - it5205_get_mux
+ usb_mux_get[driver/usb_mux/usb_mux.c:141]:
+ - it5205_get_mux
+# usb_mux hpd_update
+ svdm_dp_post_config[baseboard/kukui/usb_pd_policy.c:200]:
+ - board_hpd_status
+ svdm_exit_dp_mode[baseboard/kukui/usb_pd_policy.c:263]:
+ - board_hpd_status
+ svdm_dp_attention[baseboard/kukui/usb_pd_policy.c:219]:
+ - board_hpd_status
+# USB PD policy, see struct svdm_amode_fx
+ pd_svdm[common/usb_pd_policy.c:766]:
+ - svdm_dp_status
+ - svdm_gfu_status
+ pd_svdm[common/usb_pd_policy.c:777]:
+ - svdm_dp_config
+ - svdm_gfu_config
+ pd_svdm[common/usb_pd_policy.c:783]:
+ - svdm_dp_post_config
+ pd_dfp_enter_mode[common/usb_pd_policy.c:440]:
+ - svdm_enter_dp_mode
+ - svdm_enter_gfu_mode
+ pd_dfp_exit_mode[common/usb_pd_policy.c:544]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+ dfp_consume_attention[common/usb_pd_policy.c:478]:
+ - svdm_dp_attention
+ - svdm_gfu_attention
+ pd_dfp_exit_mode[common/usb_pd_policy.c:561]:
+ - svdm_exit_dp_mode
+ - svdm_exit_gfu_mode
+# Motion sense: bmi160
+ motion_sense_set_data_rate[common/motion_sense.c:156]: # set_data_rate
+ - set_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:175]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_data_rate[common/motion_sense.c:184]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_motion_intervals[common/motion_sense.c:302]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_set_ec_rate_from_ap[common/motion_sense.c:196]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_init[common/motion_sense.c:327]: # init
+ - init[driver/accelgyro_bmi160.c]
+ sensor_init_done[common/motion_sense.c:353]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:431]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:437]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_shutdown[common/motion_sense.c:440]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:589]: # read
+ - read[driver/accelgyro_bmi160.c]
+ motion_sense_read[common/motion_sense.c:576]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ motion_sense_process[common/motion_sense.c:667]: # irq_handler
+ - irq_handler[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1153]: # set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1164]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1179]: # set_offset
+ - set_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1207]: # set_scale
+ - set_scale[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1233]: # perform_calib
+ - perform_calib[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1237]: # get_offset
+ - get_offset[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1313]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1333]: # list_activities
+ - list_activities[driver/accelgyro_bmi160.c]
+ host_cmd_motion_sense[common/motion_sense.c:1337]: # manage_activity
+ - manage_activity[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1455]: # set_range
+ - set_range[driver/accelgyro_bmi160.c]
+ command_accelrange[common/motion_sense.c:1460]: # get_range
+ - get_range[driver/accelgyro_bmi160.c]
+ command_accelresolution[common/motion_sense.c:1504]: # set_resolution
+ - None
+ command_accelresolution[common/motion_sense.c:1508]: # get_resolution
+ - get_resolution[driver/accelgyro_bmi160.c]
+ command_accel_data_rate[common/motion_sense.c:1560]: # get_data_rate
+ - get_data_rate[driver/accelgyro_bmi160.c]
+ command_accel_read_xyz[common/motion_sense.c:1595]: # read
+ - read[driver/accelgyro_bmi160.c]
+
+# Core
+ handle_command[common/console.c:248]:
+ - { name: __cmds, stride: 16, offset: 4 }
+ hook_task[common/hooks.c:200]:
+ - { name: __deferred_funcs, stride: 4, offset: 0 }
+ - { name: __hooks_second, stride: 8, offset: 0 }
+ - { name: __hooks_tick, stride: 8, offset: 0 }
+ # Note: This assumes worse case, where all hook functions can be called from
+ # any hook_notify call
+ # Generate using `grep hooks_.*_end build/kukui/R*/ec.R*.smap |
+ # sed -e 's/.*\(__hooks.*\)_end/ - { name: \1, stride: 8, offset: 0 }/' |
+ # sort -u`
+ hook_notify[common/hooks.c:130]:
+ - { name: __hooks_ac_change, stride: 8, offset: 0 }
+ - { name: __hooks_base_attached_change, stride: 8, offset: 0 }
+ - { name: __hooks_battery_soc_change, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_pre_init, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_reset, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_resume, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_shutdown, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_startup, stride: 8, offset: 0 }
+ - { name: __hooks_chipset_suspend, stride: 8, offset: 0 }
+ - { name: __hooks_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_lid_change, stride: 8, offset: 0 }
+ - { name: __hooks_pre_freq_change, stride: 8, offset: 0 }
+ - { name: __hooks_pwrbtn_change, stride: 8, offset: 0 }
+ - { name: __hooks_sysjump, stride: 8, offset: 0 }
+ - { name: __hooks_tablet_mode_change, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_connect, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_disconnect, stride: 8, offset: 0 }
+ mkbp_get_next_event[common/mkbp_event.c:369]:
+ - { name: __mkbp_evt_srcs, stride: 8, offset: 4 }
+ host_command_process[common/host_command.c:708]:
+ - { name: __hcmds, stride: 12, offset: 0 }
+ vfnprintf:
+ # This covers all the addchar in vfnprintf, but stackanalyzer does not
+ # realize that...
+ - __tx_char
+ host_send_response[common/host_command.c:153]: # send_response
+ - spi_send_response
+ host_packet_respond[common/host_command.c:240]:
+ - spi_send_response_packet
+# Misc
+ i2c_command_passthru[common/i2c_master.c:991]:
+ - None
+ cprints[common/console_output.c:108]:
+ - None # I'm not sure what this is?!
+ chip_i2c_xfer_with_notify[common/i2c_master.c:112]: # i2c_port->drv->xfer
+ - i2c_bitbang_xfer
+ default_handler[core/cortex-m0/init.S:100]:
+ - exception_panic
+ gpio_interrupt[chip/stm32/gpio.c:154]:
+ - None
+
+remove:
+# Remove all callsites pointing to panic_assert_fail.
+- panic_assert_fail
+
+# Remove paths that make no sense
+# HOOK_USB_PD_DISCONNECT
+- [ pd_request_power_swap, set_state.lto_priv.206, hook_notify,
+ [ motion_sense_shutdown, charger_enable_psys, charger_disable_psys,
+ system_common_shutdown ] ]
+# HOOK_AC_CHANGE/HOOK_BATTERY_SOC_CHANGE
+- [ charger_task, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_LID_CHANGE
+- [ [ lid_switch_open, lid_switch_close ], hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_BASE_ATTACHED_CHANGE/HOOK_TABLET_MODE_CHANGE
+- [ tablet_set_mode, hook_notify, [ system_common_shutdown, charger_enable_psys, charger_disable_psys ] ]
+# HOOK_POWER_BUTTON_CHANGE
+- [ power_button_change_deferred, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_SECOND
+- [ hook_task, hook_notify, [ motion_sense_shutdown, system_common_shutdown ] ]
+# HOOK_SYSJUMP
+- [ jump_to_image, hook_notify,
+ [ motion_sense_shutdown, system_common_shutdown, charger_enable_psys, charger_disable_psys ] ]
+- [ pd_request_power_swap, set_state, hook_notify, panic_init ]
+# set_state(port, PD_STATE_SRC/SNK_SWAP_INIT); will not call these functions
+- [ pd_request_power_swap, set_state,
+ [ pd_dfp_exit_mode, usb_mux_set, pd_power_supply_reset, tcpm_set_vconn ] ]
+- [ [ pd_request_data_swap, pd_request_vconn_swap ] , set_state, pd_power_supply_reset ]
+# All sensors will be shut down in S5
+- [ motion_sense_shutdown, motion_sense_switch_sensor_rate,
+ [ motion_sense_set_data_rate, motion_sense_init ] ]
+# HOOK_CHIPSET_PRE_INIT, HOOK_CHIPSET_STARTUP, HOOK_CHIPSET_RESUME,
+# HOOK_CHIPSET_SUSPEND, HOOK_CHIPSET_SHUTDOWN
+- [ chipset_task, hook_notify ]
+# TCPC, KEYBOARD, BC12 will not access battery's bitbang
+- [ [ raw_read8.lto_priv.157, tcpc_read.lto_priv.352, tcpc_write.lto_priv.351,
+ it8801_ioex_write, it8801_read, it8801_write.lto_priv.336, raw_read16.lto_priv.349,
+ raw_write16.lto_priv.348, it5205_init.lto_priv.241, it5205_write,
+ raw_read8, tcpc_read.lto_priv.340 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ], [ i2c_write, i2c_read ],
+ i2c_xfer_unlocked, i2c_bitbang_xfer ]
+- [ [ raw_read8.lto_priv.157, tcpc_read.lto_priv.352, tcpc_write.lto_priv.351,
+ it8801_ioex_write, it8801_read, it8801_write.lto_priv.336, raw_read16.lto_priv.349,
+ raw_write16.lto_priv.348, it5205_init.lto_priv.241, it5205_write,
+ raw_read8, tcpc_read.lto_priv.340 ],
+ [ i2c_write8, i2c_read8, i2c_write16, i2c_read16 ] , [ i2c_write, i2c_read ],
+ i2c_xfer, i2c_xfer_unlocked, i2c_bitbang_xfer ]
+# PD_INT_C0_TASK
+# pd_wait_exit_low_power -> reset_device_and_notify can only be called in a pd_task NOT pd_interrupt_handler_task
+- [ pd_interrupt_handler_task, fusb302_tcpc_alert, pd_execute_hard_reset, set_state.lto_priv.206,
+ pd_power_supply_reset, charge_manager_source_port.part.10, charge_manager_save_log.part.9,
+ charge_manager_fill_power_info, tcpc_read.lto_priv.352, pd_wait_exit_low_power, reset_device_and_notify ]
+# CONSOLE_TASK
+# pd_wait_exit_low_power -> reset_device_and_notify can only be called in a pd_task NOT pd_interrupt_handler_task
+- [ console_task, command_pd, set_state.lto_priv.206, pd_power_supply_reset, charge_manager_source_port.part.10,
+ charge_manager_save_log.part.9, charge_manager_fill_power_info, tcpc_read.lto_priv.352, pd_wait_exit_low_power,
+ reset_device_and_notify ]
diff --git a/board/willow/ec.tasklist b/board/willow/ec.tasklist
index 5622d67685..c7f7811cff 100644
--- a/board/willow/ec.tasklist
+++ b/board/willow/ec.tasklist
@@ -7,14 +7,14 @@
* See CONFIG_TASK_LIST in config.h for details.
*/
#define CONFIG_TASK_LIST \
- TASK_ALWAYS(HOOKS, hook_task, NULL, VENTI_TASK_STACK_SIZE) \
- TASK_ALWAYS(CHARGER, charger_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOOKS, hook_task, NULL, 1024) \
+ TASK_ALWAYS(CHARGER, charger_task, NULL, 1152) \
TASK_ALWAYS(USB_CHG_P0, usb_charger_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(CHIPSET, chipset_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS_RW(MOTIONSENSE, motion_sense_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(PDCMD, pd_command_task, NULL, 1024) \
- TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1024) \
- TASK_ALWAYS(CONSOLE, console_task, NULL, VENTI_TASK_STACK_SIZE) \
+ TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 1152) \
+ TASK_ALWAYS(CONSOLE, console_task, NULL, 1024) \
TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS(PD_C0, pd_task, NULL, 1280) \
TASK_ALWAYS(PD_INT_C0, pd_interrupt_handler_task, 0, 1024) \