| Introduction: |
| ============= |
| |
| The tz_log driver is a platform device driver that exposes a debugfs |
| interface for accessing and displaying diagnostic information related |
| to secure code (Trustzone). |
| |
| The Secure code (Trustzone) will store the diagnostic data in 4KB of |
| IMEM. The address of this IMEM region varies from platform. The |
| diagnostic data encodes information related to secure code boot-up, |
| reset, interrupt and other attributes in a specific format as shown |
| below: |
| |
| ---------------------------- |
| | | |
| | General info | |
| | (Magic #, CPU cnt etc) | |
| | | |
| ---------------------------- |
| | | |
| | VMID info | |
| | | |
| ---------------------------- |
| | | |
| | Boot info (per CPU) | |
| | | |
| ---------------------------- |
| | | |
| | Reset info (per CPU) | |
| | | |
| ---------------------------- |
| | | |
| | Interrupt info (per CPU) | |
| | | |
| ---------------------------- |
| | | |
| | Data logged by TZ | |
| | | |
| ---------------------------- |
| |
| During the initialization of the driver module, this 4KB of IMEM |
| is remapped for access by kernel. Further more, an additonal 4KB |
| memory is allocated for storing the formatted data that will be |
| displayed by the debugfs interface. |
| |
| Once the device is booted up and HLOS is up, the standard debugfs |
| interface is used to read out and display this information that |
| was logged in by secure code in a specific format as shown below. |
| |
| Debugfs is typically mounted with a command like: |
| mount -t debugfs none /sys/kernel/debug |
| (Or an equivalent /etc/fstab line). |
| |
| Note that the debugfs API is exported GPL-only to modules. |
| |
| Software description |
| ==================== |
| |
| The tz_log module is a Linux platform device driver with a debugfs |
| interface. The goal of this module is to provide a way to peek into |
| the Trustzone diagnostic information to help debug issues with |
| Trustzone. Although, this tz_log platform device driver will be |
| compiled into the kernel, the debugfs entries will not be exposed |
| unless Trustzone is supported by the platform. |
| |
| |
| On loading the tz_log driver, tzdbgfs_init() is invoked. tzdbgfs_init() |
| initializes the tz_log debugfs interface. The following is done in |
| this initialization call. |
| |
| (1) Create a directory "tzdbg", to hold a set of debugfs files |
| |
| (2) Create the following debugfs files in the "tzdbg" directory |
| - boot_info |
| Contains information on the warm boot jump address |
| - reset_info |
| Contains information on the cause of a CPU reset, number of |
| resets occurred on a specific CPU |
| - interrupt_info |
| Contains information on the number of IRQ and FIQ Interrupts |
| (with a brief description), interrupts fired and the number |
| of times it is fired on a specific CPU. |
| - general_info |
| Contains information on number of CPUs supported, magic number, |
| version number. |
| - vmid_info |
| Contains information on VMID supported, with a brief description |
| - log |
| Debug information (ASCII text) that is logged by Trustzone |
| |
| Following are the set of file operation defines and register |
| - read() |
| - open() |
| |
| (3) Remap the IMEM region where the secure code diagnostic information |
| is stored. |
| |
| (4) Allocate 4KB buffer for storing the formatted information |
| to be displayed |
| |
| When the tz_log driver is unloaded the tz_log debugfs entries are |
| explicitly removed. |
| |
| |
| Power Management |
| ================ |
| |
| n/a |
| |
| Security |
| ======== |
| |
| None |
| |
| Interface |
| ========= |
| |
| This module will create debugfs files under sys/kernel/debug which |
| contains information that can be displayed by using the "cat" command. |
| |
| |
| Dependencies |
| ============ |
| |
| This driver interacts with Trustzone operating environment, thus depends |
| on the TZBSP supported architecture. It also depends on debugfs. |
| |
| |
| To do |
| ===== |
| |
| TBD |