diff options
author | Nicolas Boichat <drinkcat@chromium.org> | 2018-03-16 11:45:04 +0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-03-19 07:41:01 -0700 |
commit | ec1c7022cdb50268ee54f6fdd185a2b07f3308fb (patch) | |
tree | 1d89d49d16d4c78d1d6586737b4a71a86a2c27f3 | |
parent | 9a810343abebf69f668d5d132d48ecd2b475cb08 (diff) | |
download | chrome-ec-ec1c7022cdb50268ee54f6fdd185a2b07f3308fb.tar.gz |
poppy: Increase task stack sizes, add stack analysis annotations
On cros/firmware-poppy-10431.B, plus the patches on this branch:
make BOARD=soraka SECTION=RO analyzestack | grep Task
Task: HOOKS, Max size: 776 (552 + 224), Allocated size: 800
Task: USB_CHG_P0, Max size: 696 (472 + 224), Allocated size: 800
Task: USB_CHG_P1, Max size: 696 (472 + 224), Allocated size: 800
Task: CHARGER, Max size: 776 (552 + 224), Allocated size: 800
Task: MOTIONSENSE, Max size: 664 (440 + 224), Allocated size: 768
Task: CHIPSET, Max size: 760 (536 + 224), Allocated size: 800
Task: PDCMD, Max size: 784 (560 + 224), Allocated size: 880
Task: HOSTCMD, Max size: 808 (584 + 224), Allocated size: 840
Task: CONSOLE, Max size: 856 (632 + 224), Allocated size: 960
Task: POWERBTN, Max size: 728 (504 + 224), Allocated size: 800
Task: PD_C0, Max size: 912 (688 + 224), Allocated size: 1000
Task: PD_C1, Max size: 912 (688 + 224), Allocated size: 1000
(RW returns identical values)
All tasks have a good amount of slack (some have even more, as
poppy board requires even more stack size than soraka).
Shared_mem_buf at:
200c7400 D __shared_mem_buf
(so there is still 3072 bytes of available RAM)
BRANCH=none
BUG=b:75234824
TEST=See line above, EC software sync still works
Change-Id: I60d8574c827c1102f0968766b1e6c4a50f56071a
Signed-off-by: Nicolas Boichat <drinkcat@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/966044
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
-rw-r--r-- | board/poppy/analyzestack.yaml | 230 | ||||
-rw-r--r-- | board/poppy/ec.tasklist | 24 |
2 files changed, 242 insertions, 12 deletions
diff --git a/board/poppy/analyzestack.yaml b/board/poppy/analyzestack.yaml new file mode 100644 index 0000000000..59e0f9de4c --- /dev/null +++ b/board/poppy/analyzestack.yaml @@ -0,0 +1,230 @@ +# Size of extra stack frame needed by exception context switch. +# See core/cortex-m/switch.S +exception_frame_size: 224 +# Add some missing calls. +add: + # TCPC stuff: + tcpm_init.lto_priv.255[driver/tcpm/tcpm.h:77]: + - anx74xx_tcpm_init + - tcpci_tcpm_init + tcpm_release[driver/tcpm/tcpm.h:90]: + - anx74xx_tcpm_release + - ps8xxx_tcpm_release + tcpm_get_cc.lto_priv.246[driver/tcpm/tcpm.h:95]: + - anx74xx_tcpm_get_cc + - tcpci_tcpm_get_cc + tcpm_select_rp_value[driver/tcpm/tcpm.h:105]: + - anx74xx_tcpm_select_rp_value + - tcpci_tcpm_select_rp_value + tcpm_set_cc.lto_priv.239[driver/tcpm/tcpm.h:110]: + - anx74xx_tcpm_set_cc + - tcpci_tcpm_set_cc + tcpm_set_polarity[driver/tcpm/tcpm.h:115]: + - anx74xx_tcpm_set_polarity + - tcpci_tcpm_set_polarity + tcpm_set_vconn.lto_priv.249[driver/tcpm/tcpm.h:120]: + - anx74xx_tcpm_set_vconn + - tcpci_tcpm_set_vconn + tcpm_set_msg_header[driver/tcpm/tcpm.h:125]: + - anx74xx_tcpm_set_msg_header + - tcpci_tcpm_set_msg_header + tcpm_set_rx_enable.lto_priv.252[driver/tcpm/tcpm.h:131]: + - anx74xx_tcpm_set_rx_enable + - tcpci_tcpm_set_rx_enable + tcpm_get_message[driver/tcpm/tcpm.h:136]: + - anx74xx_tcpm_get_message + - tcpci_tcpm_get_message + tcpm_transmit[driver/tcpm/tcpm.h:142]: + - anx74xx_tcpm_transmit + - ps8xxx_tcpm_transmit + tcpc_alert[driver/tcpm/tcpm.h:147]: + - anx74xx_tcpc_alert + - tcpci_tcpc_alert + tcpc_discharge_vbus[driver/tcpm/tcpm.h:152]: + - anx74xx_tcpc_discharge_vbus + - tcpci_tcpc_discharge_vbus + tcpm_set_drp_toggle[driver/tcpm/tcpm.h:163]: + - anx74xx_tcpc_drp_toggle + - tcpci_tcpc_drp_toggle + tcpm_get_chip_info[driver/tcpm/tcpm.h:185]: + - tcpci_get_chip_info + board_tcpc_init[board/poppy/board.c:336]: + - anx74xx_tcpc_update_hpd_status + - ps8xxx_tcpc_update_hpd_status + tcpci_tcpc_drp_toggle[driver/tcpm/tcpci.c:148]: + - None + # USB mux stuff + usb_mux_init[driver/usb_mux.c:25]: + - anx74xx_tcpm_mux_init + - tcpci_tcpm_mux_init + usb_mux_init[driver/usb_mux.c:31]: + - None + usb_mux_set[driver/usb_mux.c:52]: + - anx74xx_tcpm_mux_set + - tcpci_tcpm_mux_set + usb_mux_get[driver/usb_mux.c:71]: + - anx74xx_tcpm_mux_get + - tcpci_tcpm_mux_get + usb_mux_flip[driver/usb_mux.c:92]: + - anx74xx_tcpm_mux_get + - tcpci_tcpm_mux_get + usb_mux_flip[driver/usb_mux.c:103]: + - anx74xx_tcpm_mux_set + - tcpci_tcpm_mux_set + hc_usb_pd_mux_info[driver/usb_mux.c:169]: + - anx74xx_tcpm_mux_get + - tcpci_tcpm_mux_get + svdm_dp_post_config.lto_priv.271[board/poppy/usb_pd_policy.c:364]: + - anx74xx_tcpc_update_hpd_status + - ps8xxx_tcpc_update_hpd_status + svdm_dp_attention.lto_priv.272[board/poppy/usb_pd_policy.c:379]: + - anx74xx_tcpc_update_hpd_status + - ps8xxx_tcpc_update_hpd_status + svdm_exit_dp_mode.lto_priv.273[board/poppy/usb_pd_policy.c:390]: + - anx74xx_tcpc_update_hpd_status + - ps8xxx_tcpc_update_hpd_status + # pd_svdm + pd_dfp_enter_mode[common/usb_pd_policy.c:459]: + - svdm_enter_dp_mode + dfp_consume_attention.lto_priv.259[common/usb_pd_policy.c:497]: + - svdm_dp_attention + pd_dfp_exit_mode[common/usb_pd_policy.c:563]: + - svdm_exit_dp_mode + pd_dfp_exit_mode[common/usb_pd_policy.c:580]: + - svdm_exit_dp_mode + pd_svdm[common/usb_pd_policy.c:767]: + - svdm_dp_status + pd_svdm[common/usb_pd_policy.c:778]: + - svdm_dp_config + pd_svdm[common/usb_pd_policy.c:784]: + - svdm_dp_post_config + # Motion sense + queue_advance_head[common/queue.c:105]: + - queue_action_null + queue_advance_tail[common/queue.c:116]: + - queue_action_null + motion_sense_set_data_rate[common/motion_sense.c:270]: + - set_data_rate[driver/accelgyro_bmi160.c] + - opt3001_set_data_rate + motion_sense_set_data_rate[common/motion_sense.c:289]: + - get_data_rate[driver/accelgyro_bmi160.c] + - opt3001_get_data_rate + motion_sense_set_ec_rate_from_ap[common/motion_sense.c:308]: + - get_data_rate[driver/accelgyro_bmi160.c] + - opt3001_get_data_rate + motion_sense_set_motion_intervals.lto_priv.303[common/motion_sense.c:414]: + - get_data_rate[driver/accelgyro_bmi160.c] + - opt3001_get_data_rate + motion_sense_init[common/motion_sense.c:450]: + - init[driver/accelgyro_bmi160.c] + - opt3001_init + sensor_init_done[common/motion_sense.c:471]: + - set_range[driver/accelgyro_bmi160.c] + - opt3001_set_range + sensor_init_done[common/motion_sense.c:474]: + - get_range[driver/accelgyro_bmi160.c] + - opt3001_get_range + motion_sense_process.isra.9[common/motion_sense.c:721]: + - irq_handler[driver/accelgyro_bmi160.c] + host_cmd_motion_sense[common/motion_sense.c:1251]: + - set_range[driver/accelgyro_bmi160.c] + - opt3001_set_range + host_cmd_motion_sense[common/motion_sense.c:1259]: + - get_range[driver/accelgyro_bmi160.c] + - opt3001_get_range + host_cmd_motion_sense[common/motion_sense.c:1274]: + - set_offset[driver/accelgyro_bmi160.c] + - opt3001_set_offset + host_cmd_motion_sense[common/motion_sense.c:1297]: + - perform_calib[driver/accelgyro_bmi160.c] + host_cmd_motion_sense[common/motion_sense.c:1300]: + - get_offset[driver/accelgyro_bmi160.c] + - opt3001_get_offset + command_accelrange[common/motion_sense.c:1515]: + - set_range[driver/accelgyro_bmi160.c] + - opt3001_set_range + command_accelrange[common/motion_sense.c:1520]: + - get_range[driver/accelgyro_bmi160.c] + - opt3001_get_range + host_cmd_motion_sense[common/motion_sense.c:1520]: + - get_range[driver/accelgyro_bmi160.c] + - opt3001_get_range + command_accelresolution[common/motion_sense.c:1564]: + - None + command_accelresolution[common/motion_sense.c:1568]: + - get_resolution[driver/accelgyro_bmi160.c] + command_accel_data_rate[common/motion_sense.c:1623]: + - get_data_rate[driver/accelgyro_bmi160.c] + - opt3001_get_data_rate + command_accel_read_xyz[common/motion_sense.c:1659]: + - read[driver/accelgyro_bmi160.c] + - opt3001_read_lux + # Temp (see temp_sensors array in board file) + temp_sensor_read[common/temp_sensor.c:26]: + - charge_get_battery_temp + - bd99992gw_get_val + # Misc + jump_to_image[common/system.c:568]: + - None + system_download_from_flash[chip/npcx/system-npcx5.c:257]: + - None + __hibernate_npcx_series[chip/npcx/system-npcx5.c:144]: + - None + handle_command[common/console.c:248]: + - { name: __cmds, stride: 16, offset: 4 } + hook_task[common/hooks.c:197]: + - { 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/soraka/R*/ec.R*.smap | + # sed -e 's/.*\(__hooks.*\)_end/ - { name: \1, stride: 8, offset: 0 }/' | + # sort -u` + hook_notify[common/hooks.c:127]: + - { name: __hooks_ac_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 } + mkbp_get_next_event[common/mkbp_event.c:130]: + - { name: __mkbp_evt_srcs, stride: 8, offset: 4 } + host_send_response[common/host_command.c:153]: + - lpc_send_response + host_packet_respond[common/host_command.c:240]: + - lpc_send_response + host_command_process[common/host_command.c:704]: + - { name: __hcmds, stride: 12, offset: 0 } + # gpio_interrupt.lto_priv.407[chip/npcx/gpio.c:479] + vfnprintf: + # This covers all the addchar in vfnprintf, but stackanalyzer does not + # realize that... + - __tx_char + i2c_command_passthru[common/i2c_master.c:597]: + - None +remove: +# Remove all callsites pointing to panic_assert_fail. +- panic_assert_fail +# Remove hook paths that don't make sense +- [ common_intel_x86_power_handle_state, hook_notify, powerbtn_x86_lid_change ] +- [ base_disable, hook_notify, handle_pending_reboot.lto_priv.290 ] +- [ system_common_shutdown, hook_notify, system_run_image_copy ] +- [ base_detect_change, hook_notify, [ powerbtn_x86_lid_change, jump_to_image, power_up_inhibited_cb, motion_sense_shutdown, motion_sense_resume, system_common_shutdown, base_disable ] ] +- [ jump_to_image, hook_notify, [ powerbtn_x86_lid_change, system_common_shutdown, power_up_inhibited_cb, motion_sense_shutdown, motion_sense_resume, base_disable ] ] +- [ [ extpower_deferred, charger_task ], hook_notify, [ powerbtn_x86_lid_change, system_common_shutdown ] ] +- [ common_intel_x86_power_handle_state, hook_notify, power_up_inhibited_cb ] +# pd_request_power_swap calls set_state with either PD_STATE_SRC_SWAP_INIT or +# PD_STATE_SNK_SWAP_INIT as parameters, which cannot call any of the +# charge_manager functions. +- [ [ pd_request_power_swap, pd_execute_hard_reset, pd_request_data_swap, pd_request_vconn_swap.lto_priv.237, pd_send_request_msg.lto_priv.250 ], set_state.lto_priv.236, [ typec_set_input_current_limit, charge_manager_update_charge, pd_power_supply_reset, pd_dfp_exit_mode, usb_mux_set ] ] +# Debug prints that do not actually need a 64 uint division, of the time +- [ [i2c_reset, i2c_abort_data, i2c_xfer], cprintf, vfnprintf, [uint64divmod.part.3.lto_priv.141, get_time] ] diff --git a/board/poppy/ec.tasklist b/board/poppy/ec.tasklist index 53c97a0cb5..662e3336bb 100644 --- a/board/poppy/ec.tasklist +++ b/board/poppy/ec.tasklist @@ -21,15 +21,15 @@ */ #define CONFIG_TASK_LIST \ - TASK_ALWAYS(HOOKS, hook_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(USB_CHG_P0, usb_charger_task, NULL, TASK_STACK_SIZE) \ - TASK_ALWAYS(USB_CHG_P1, usb_charger_task, NULL, TASK_STACK_SIZE) \ - TASK_ALWAYS(CHARGER, charger_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(MOTIONSENSE, motion_sense_task, NULL, VENTI_TASK_STACK_SIZE) \ - TASK_NOTEST(CHIPSET, chipset_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_NOTEST(PDCMD, pd_command_task, NULL, TASK_STACK_SIZE) \ - TASK_ALWAYS(HOSTCMD, host_command_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(CONSOLE, console_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(POWERBTN, power_button_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(PD_C0, pd_task, NULL, LARGER_TASK_STACK_SIZE) \ - TASK_ALWAYS(PD_C1, pd_task, NULL, LARGER_TASK_STACK_SIZE) + TASK_ALWAYS(HOOKS, hook_task, NULL, 800) \ + TASK_ALWAYS(USB_CHG_P0, usb_charger_task, NULL, 800) \ + TASK_ALWAYS(USB_CHG_P1, usb_charger_task, NULL, 800) \ + TASK_ALWAYS(CHARGER, charger_task, NULL, 800) \ + TASK_ALWAYS(MOTIONSENSE, motion_sense_task, NULL, 768) \ + TASK_NOTEST(CHIPSET, chipset_task, NULL, 800) \ + TASK_NOTEST(PDCMD, pd_command_task, NULL, 880) \ + TASK_ALWAYS(HOSTCMD, host_command_task, NULL, 840) \ + TASK_ALWAYS(CONSOLE, console_task, NULL, 960) \ + TASK_ALWAYS(POWERBTN, power_button_task, NULL, 800) \ + TASK_ALWAYS(PD_C0, pd_task, NULL, 1000) \ + TASK_ALWAYS(PD_C1, pd_task, NULL, 1000) |