summaryrefslogtreecommitdiff
path: root/board/fleex
diff options
context:
space:
mode:
authorDiana Z <dzigterman@chromium.org>2018-12-05 13:30:28 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-12-10 16:00:40 -0800
commit20f3050871fad8a3fbfd9000ba44847fa4bb8a08 (patch)
treee67a3098bfb64547473f2d9b49e9f9bfa8291407 /board/fleex
parent02b3b17f3f7650e04611548e6327d2a131310868 (diff)
downloadchrome-ec-20f3050871fad8a3fbfd9000ba44847fa4bb8a08.tar.gz
Fleex: add stack analysis annotations
Stack analysis notations for this specific revision of fleex. Note that these annotations will not be valid for long, as the file line numbers referenced here will quickly become outdated with new changes. These notations may be somewhat transferrable to other octopus boards, depending on what sensors they use and how far the line numbers have drifted. BRANCH=octopus BUG=b:112309201 TEST=make -j BOARD=fleex analyzestack SECTION=RO Change-Id: Ib925eb8c308315e6eea18ec6e57ad16801a7184a Signed-off-by: Diana Z <dzigterman@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1366305 Reviewed-by: Jett Rink <jettrink@chromium.org> Reviewed-by: Nicolas Boichat <drinkcat@chromium.org>
Diffstat (limited to 'board/fleex')
-rw-r--r--board/fleex/analyzestack.yaml278
1 files changed, 278 insertions, 0 deletions
diff --git a/board/fleex/analyzestack.yaml b/board/fleex/analyzestack.yaml
new file mode 100644
index 0000000000..c0095c34f8
--- /dev/null
+++ b/board/fleex/analyzestack.yaml
@@ -0,0 +1,278 @@
+# Size of extra stack frame needed by exception context switch.
+# See core/cortex-m/switch.S
+exception_frame_size: 224
+# Missing calls
+add:
+ # TCPC stack
+ tcpm_set_cc[driver/tcpm/tcpm.h:139]:
+ - tcpci_tcpm_set_cc
+ tcpm_set_rx_enable[driver/tcpm/tcpm.h:160]:
+ - tcpci_tcpm_set_rx_enable
+ tcpm_set_snk_ctrl[driver/tcpm/tcpm.h:179]:
+ - tcpci_tcpm_set_snk_ctrl
+ tcpm_get_cc[driver/tcpm/tcpm.h:124]:
+ - tcpci_tcpm_get_cc
+ enter_low_power_mode[driver/usb_mux.c:42]:
+ - tcpci_enter_low_power_mode
+ svdm_exit_dp_mode[baseboard/octopus/usb_pd_policy.c:346]:
+ - anx7447_tcpc_update_hpd_status
+ - ps8xxx_tcpc_update_hpd_status
+ tcpm_set_src_ctrl[driver/tcpm/tcpm.h:187]:
+ - tcpci_tcpm_set_src_ctrl
+ tcpm_init[driver/tcpm/tcpm.h:106]:
+ - anx7447_init
+ - tcpci_tcpm_init
+ tcpm_get_vbus_level[driver/tcpm/tcpm.h:129]:
+ - anx7447_tcpm_get_vbus_level
+ - tcpci_tcpm_get_vbus_level
+ baseboard_tcpc_init[baseboard/octopus/baseboard.c:212]:
+ - anx7447_tcpc_update_hpd_status
+ - ps8xxx_tcpc_update_hpd_status
+ tcpm_get_chip_info[driver/tcpm/tcpm.h:240]:
+ - tcpci_get_chip_info
+ - ps8xxx_get_chip_info
+ tcpm_transmit[driver/tcpm/tcpm.h:172]:
+ - tcpci_tcpm_transmit
+ - ps8xxx_tcpm_transmit
+ tcpc_alert[driver/tcpm/tcpm.h:195]:
+ - anx7447_tcpc_alert
+ - tcpci_tcpc_alert
+ tcpm_set_msg_header[driver/tcpm/tcpm.h:154]:
+ - tcpci_tcpm_set_msg_header
+ tcpm_set_vconn[driver/tcpm/tcpm.h:149]:
+ - tcpci_tcpm_set_vconn
+ tcpm_select_rp_value[driver/tcpm/tcpm.h:134]:
+ - tcpci_tcpm_select_rp_value
+ tcpm_enqueue_message[driver/tcpm/tcpci.c:404]:
+ - tcpci_tcpm_get_message_raw
+ svdm_dp_post_config[baseboard/octopus/usb_pd_policy.c:320]:
+ - anx7447_tcpc_update_hpd_status
+ - ps8xxx_tcpc_update_hpd_status
+ svdm_dp_attention[baseboard/octopus/usb_pd_policy.c:335]:
+ - anx7447_tcpc_update_hpd_status
+ - ps8xxx_tcpc_update_hpd_status
+ tcpm_release[driver/tcpm/tcpm.h:119]:
+ - anx7447_release
+ - ps8xxx_tcpm_release
+ tcpm_set_polarity[driver/tcpm/tcpm.h:144]:
+ - tcpci_tcpm_set_polarity
+ tcpm_enable_drp_toggle[driver/tcpm/tcpm.h:211]:
+ - tcpci_tcpc_drp_toggle
+ tcpm_enter_low_power_mode[driver/tcpm/tcpm.h:218]:
+ - tcpci_enter_low_power_mode
+ # USB mux
+ usb_mux_flip[driver/usb_mux.c:163]:
+ - anx7447_mux_get
+ - tcpci_tcpm_mux_get
+ usb_mux_flip[driver/usb_mux.c:174]:
+ - anx7447_mux_set
+ - tcpci_tcpm_mux_set
+ usb_mux_set[driver/usb_mux.c:112]:
+ - anx7447_mux_set
+ - tcpci_tcpm_mux_set
+ usb_mux_init[driver/usb_mux.c:64]:
+ - anx7447_mux_init
+ - tcpci_tcpm_mux_init
+ usb_mux_get[driver/usb_mux.c:140]:
+ - anx7447_mux_get
+ - tcpci_tcpm_mux_get
+ hc_usb_pd_mux_info[driver/usb_mux.c:240]:
+ - anx7447_mux_get
+ - tcpci_tcpm_mux_get
+ # PPC
+ ppc_is_sourcing_vbus[common/usbc_ppc.c:42]:
+ - nx20p348x_is_sourcing_vbus
+ ppc_init[common/usbc_ppc.c:26]:
+ - nx20p348x_init
+ ppc_vbus_sink_enable[common/usbc_ppc.c:86]:
+ - nx20p348x_vbus_sink_enable
+ ppc_discharge_vbus[common/usbc_ppc.c:68]:
+ - nx20p348x_discharge_vbus
+ ppc_vbus_source_enable[common/usbc_ppc.c:107]:
+ - nx20p348x_vbus_source_enable
+ ppc_set_vbus_source_current_limit[common/usbc_ppc.c:60]:
+ - nx20p348x_set_vbus_source_current_limit
+ command_ppc_dump[common/usbc_ppc.c:135]:
+ - nx20p348x_dump
+ # Motion sensors
+ command_accelrange[common/motion_sense.c:1513]:
+ - set_range[driver/accel_lis2dh.c]
+ - set_range[driver/accelgyro_lsm6dsm.c]
+ command_accelrange[common/motion_sense.c:1519]:
+ - get_range[driver/accel_lis2dh.c]
+ - get_range[driver/accelgyro_lsm6dsm.c]
+ motion_sensor_time_to_read[common/motion_sense.c:213]:
+ - st_get_data_rate[driver/stm_mems_common.c]
+ motion_sense_read[common/motion_sense.c:694]:
+ - st_get_data_rate[driver/stm_mems_common.c]
+ motion_sense_read[common/motion_sense.c:707]:
+ - read[driver/accel_lis2dh.c]
+ - read[driver/accelgyro_lsm6dsm.c]
+ motion_sense_process[common/motion_sense.c:719]:
+ - irq_handler[driver/accelgyro_lsm6dsm.c]
+ sensor_init_done[common/motion_sense.c:468]:
+ - set_range[driver/accel_lis2dh.c]
+ - set_range[driver/accelgyro_lsm6dsm.c]
+ sensor_init_done[common/motion_sense.c:471]:
+ - get_range[driver/accel_lis2dh.c]
+ - get_range[driver/accelgyro_lsm6dsm.c]
+ motion_sense_set_ec_rate_from_ap[common/motion_sense.c:305]:
+ - st_get_data_rate[driver/stm_mems_common.c]
+ host_cmd_motion_sense[common/motion_sense.c:1242]:
+ - set_range[driver/accel_lis2dh.c]
+ - set_range[driver/accelgyro_lsm6dsm.c]
+ host_cmd_motion_sense[common/motion_sense.c:1253]:
+ - get_range[driver/accel_lis2dh.c]
+ - get_range[driver/accelgyro_lsm6dsm.c]
+ host_cmd_motion_sense[common/motion_sense.c:1268]:
+ - st_set_offset[driver/stm_mems_common.c]
+ host_cmd_motion_sense[common/motion_sense.c:1303]:
+ - None
+ host_cmd_motion_sense[common/motion_sense.c:1306]:
+ - st_get_offset[driver/stm_mems_common.c]
+ motion_sense_init[common/motion_sense.c:447]:
+ - init[driver/accel_lis2dh.c]
+ - init[driver/accelgyro_lsm6dsm.c]
+ motion_sense_set_data_rate[common/motion_sense.c:267]:
+ - set_data_rate[driver/accel_lis2dh.c]
+ - set_data_rate[driver/accelgyro_lsm6dsm.c]
+ motion_sense_set_data_rate[common/motion_sense.c:287]:
+ - st_get_data_rate[driver/stm_mems_common.c]
+ motion_sense_set_motion_intervals[common/motion_sense.c:411]:
+ - st_get_data_rate[driver/stm_mems_common.c]
+ calculate_lid_angle[common/motion_lid.c:385]:
+ - get_range[driver/accelgyro_lsm6dsm.c]
+ calculate_lid_angle[common/motion_lid.c:386]:
+ - get_range[driver/accel_lis2dh.c]
+ motion_sense_set_data_rate[common/motion_sense.c:286]:
+ - st_get_data_rate[driver/stm_mems_common.c]
+ command_accel_read_xyz[common/motion_sense.c:1657]:
+ - read[driver/accel_lis2dh.c]
+ - read[driver/accelgyro_lsm6dsm.c]
+ host_cmd_motion_sense[common/motion_sense.c:1294]:
+ - None
+ host_cmd_motion_sense[common/motion_sense.c:1297]:
+ - st_get_offset[driver/stm_mems_common.c]
+ command_accelresolution[common/motion_sense.c:1562]:
+ - None
+ command_accelresolution[common/motion_sense.c:1566]:
+ - st_get_resolution[driver/stm_mems_common.c]
+ command_accelrange[common/motion_sense.c:1518]:
+ - get_range[driver/accel_lis2dh.c]
+ - get_range[driver/accelgyro_lsm6dsm.c]
+ st_normalize[driver/stm_mems_common.c:137]:
+ - get_range[driver/accel_lis2dh.c]
+ - get_range[driver/accelgyro_lsm6dsm.c]
+ command_accel_data_rate[common/motion_sense.c:1621]:
+ - st_get_data_rate[driver/stm_mems_common.c]
+ # Misc.
+ host_send_response[common/host_command.c:153]:
+ - host_packet_respond
+ pd_dfp_enter_mode[common/usb_pd_policy.c:465]:
+ - svdm_enter_dp_mode[baseboard/octopus/usb_pd_policy.c]
+ - svdm_enter_gfu_mode[baseboard/octopus/usb_pd_policy.c]
+ pd_svdm[common/usb_pd_policy.c:773]:
+ - svdm_dp_status[baseboard/octopus/usb_pd_policy.c]
+ - svdm_gfu_status[baseboard/octopus/usb_pd_policy.c]
+ pd_svdm[common/usb_pd_policy.c:784]:
+ - svdm_dp_config[baseboard/octopus/usb_pd_policy.c]
+ - svdm_gfu_config[baseboard/octopus/usb_pd_policy.c]
+ pd_svdm[common/usb_pd_policy.c:790]:
+ - svdm_dp_post_config[baseboard/octopus/usb_pd_policy.c]
+ dfp_consume_attention[common/usb_pd_policy.c:503]:
+ - svdm_dp_attention[baseboard/octopus/usb_pd_policy.c]
+ - svdm_gfu_attention[baseboard/octopus/usb_pd_policy.c]
+ kblight_set_deferred[common/keyboard_backlight.c:35]:
+ - kblight_pwm_set
+ temp_sensor_read[common/temp_sensor.c:26]:
+ - charge_get_battery_temp
+ - get_temp_3v3_51k1_47k_4050b
+ - get_temp_3v3_13k7_47k_4050b
+ kblight_enable[common/keyboard_backlight.c:61]:
+ - kblight_pwm_enable
+ host_packet_respond[common/host_command.c:240]:
+ - lpc_send_response
+ kblight_init[common/keyboard_backlight.c:28]:
+ - kblight_pwm_init
+ vfnprintf[common/printf.c:75]:
+ - __tx_char
+ vfnprintf[common/printf.c:88]:
+ - __tx_char
+ vfnprintf[common/printf.c:96]:
+ - __tx_char
+ vfnprintf[common/printf.c:171]:
+ - __tx_char
+ vfnprintf[common/printf.c:172]:
+ - __tx_char
+ vfnprintf[common/printf.c:310]:
+ - __tx_char
+ vfnprintf[common/printf.c:315]:
+ - __tx_char
+ vfnprintf[common/printf.c:318]:
+ - __tx_char
+ pd_dfp_exit_mode[common/usb_pd_policy.c:569]:
+ - svdm_exit_dp_mode[baseboard/octopus/usb_pd_policy.c]
+ - svdm_exit_gfu_mode[baseboard/octopus/usb_pd_policy.c]
+ pd_dfp_exit_mode[common/usb_pd_policy.c:586]:
+ - svdm_exit_dp_mode[baseboard/octopus/usb_pd_policy.c]
+ - svdm_exit_gfu_mode[baseboard/octopus/usb_pd_policy.c]
+ # Indirect callsites in common structures - likely common for all boards
+ handle_command[common/console.c:248]:
+ - { name: __cmds, stride: 16, offset: 4 }
+ host_command_process[common/host_command.c:704]:
+ - { name: __hcmds, stride: 12, offset: 0 }
+ mkbp_get_next_event[common/mkbp_event.c:160]:
+ - { name: __mkbp_evt_srcs, stride: 8, offset: 4 }
+ hook_task[common/hooks.c:199]:
+ - { name: __deferred_funcs, stride: 4, 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/$BOARD/R*/ec.R*.smap |
+ # sed -e 's/.*\(__hooks.*\)_end/ - { name: \1, stride: 8, offset: 0 }/' |
+ # sort -u`
+ hook_notify[common/hooks.c:129]:
+ - { 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_init, 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_second, stride: 8, offset: 0 }
+ - { name: __hooks_sysjump, stride: 8, offset: 0 }
+ - { name: __hooks_tablet_mode_change, stride: 8, offset: 0 }
+ - { name: __hooks_tick, stride: 8, offset: 0 }
+ - { name: __hooks_usb_pd_disconnect, stride: 8, offset: 0 }
+ # NULL function pointers
+ i2c_command_passthru[common/i2c_master.c:678]:
+ - None
+ pd_svdm[common/usb_pd_policy.c:720]:
+ - None
+ usb_mux_init[driver/usb_mux.c:75]:
+ - None
+remove:
+# Remove panic callsites. Once panicking, we no longer care about stack usage
+- panic_assert_fail
+# Remove reset_device_and_notify for all non-PD analysis since it can only be called from PD task IDs. Comment this out for the PD tasks
+- reset_device_and_notify
+# Remove the LPM path because the PD_FLAGS_LPM_TRANSITION flag presents this loop
+- [ reset_device_and_notify, tcpci_tcpm_init, [ tcpc_read, tcpc_write16 ], pd_wait_for_wakeup ]
+# Remove nonesense hook paths that come from the general hook_notify above (Note: these are not a comprehensive list, but a list of
+# paths that came up as longest during analysis
+# These functions do not call HOOK_INIT
+- [ [ s0ix_transition, charger_task, power_button_change_deferred, jump_to_image, tablet_set_mode, pd_set_suspend, set_state, extpower_deferred, lid_switch_open, lid_switch_close, espi_chipset_reset, lpc_chipset_reset ], hook_notify, [ usb_charger_init, baseboard_tcpc_init, motion_sense_startup, hall_sensor_init, powerbtn_x86_init, cbi_init ] ]
+# These functions do not call HOOK_CHIPSET_SHUTDOWN
+- [ [ s0ix_transition, charger_task, power_button_change_deferred, jump_to_image, tablet_set_mode, pd_set_suspend, set_state, extpower_deferred, lid_switch_open, lid_switch_close, hook_task, espi_chipset_reset, lpc_chipset_reset ], hook_notify, [ system_common_shutdown, motion_sense_shutdown, board_disable_a1_redriver ] ]
+# These functions do not call HOOK_LID_CHANGE
+- [ [ s0ix_transition, charger_task, power_button_change_deferred, jump_to_image, tablet_set_mode, pd_set_suspend, set_state, extpower_deferred, hook_task, espi_chipset_reset, lpc_chipset_reset ], hook_notify, powerbtn_x86_lid_change ]
+# These functions do not call HOOK_BATTERY_SOC_CHANGE
+- [ [ s0ix_transition, power_button_change_deferred, jump_to_image, tablet_set_mode, pd_set_suspend, set_state, extpower_deferred, lid_switch_open, lid_switch_close, hook_task, espi_chipset_reset, lpc_chipset_reset ], hook_notify, power_up_inhibited_cb ]
+# These functions do not call HOOK_CHIPSET_STARTUP
+- [ [ charger_task, power_button_change_deferred, jump_to_image, tablet_set_mode, pd_set_suspend, set_state, extpower_deferred, lid_switch_open, lid_switch_close, hook_task, espi_chipset_reset, lpc_chipset_reset ], hook_notify, board_enable_a1_redriver ]