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