| /* |
| * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are met: |
| * |
| * Redistributions of source code must retain the above copyright notice, this |
| * list of conditions and the following disclaimer. |
| * |
| * Redistributions in binary form must reproduce the above copyright notice, |
| * this list of conditions and the following disclaimer in the documentation |
| * and/or other materials provided with the distribution. |
| * |
| * Neither the name of ARM nor the names of its contributors may be used |
| * to endorse or promote products derived from this software without specific |
| * prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
| * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| * POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #ifndef __PLAT_PARAMS_H__ |
| #define __PLAT_PARAMS_H__ |
| |
| #include <stdint.h> |
| |
| /* |
| * We defined several plat parameter structs for BL2 to pass platform related |
| * parameters to Rockchip BL31 platform code. All plat parameters start with |
| * a common header, which has a type field to indicate the parameter type, and |
| * a next pointer points to next parameter. If the parameter is the last one in |
| * the list, next pointer will points to NULL. After the header comes the |
| * variable-sized members that describe the parameter. The picture below shows |
| * how the parameters are kept in memory. |
| * |
| * head of list ---> +----------------+ --+ |
| * | type | | |
| * +----------------+ |--> struct bl31_plat_param |
| * +----| next | | |
| * | +----------------+ --+ |
| * | | parameter data | |
| * | +----------------+ |
| * | |
| * +--> +----------------+ --+ |
| * | type | | |
| * +----------------+ |--> struct bl31_plat_param |
| * NULL <---| next | | |
| * +----------------+ --+ |
| * | parameter data | |
| * +----------------+ |
| * |
| * Note: The SCTLR_EL3.A bit (Alignment fault check enable) of ARM TF is set, |
| * so be sure each parameter struct starts on 64-bit aligned address. If not, |
| * alignment fault will occur during accessing its data member. |
| */ |
| |
| #define BL31_GPIO_DIR_OUT 0 |
| #define BL31_GPIO_DIR_IN 1 |
| |
| #define BL31_GPIO_LEVEL_LOW 0 |
| #define BL31_GPIO_LEVEL_HIGH 1 |
| |
| #define BL31_GPIO_PULL_NONE 0 |
| #define BL31_GPIO_PULL_UP 1 |
| #define BL31_GPIO_PULL_DOWN 2 |
| |
| /* param type */ |
| enum { |
| PARAM_NONE = 0, |
| PARAM_RESET, |
| PARAM_POWEROFF, |
| PARAM_SUSPEND_GPIO, |
| PARAM_SUSPEND_APIO, |
| }; |
| |
| struct apio_info { |
| uint8_t apio1 : 1; |
| uint8_t apio2 : 1; |
| uint8_t apio3 : 1; |
| uint8_t apio4 : 1; |
| uint8_t apio5 : 1; |
| }; |
| |
| struct gpio_info { |
| uint8_t polarity; |
| uint8_t direction; |
| uint8_t pull_mode; |
| uint32_t index; |
| }; |
| |
| /* common header for all plat parameter type */ |
| struct bl31_plat_param { |
| uint64_t type; |
| void *next; |
| }; |
| |
| struct bl31_gpio_param { |
| struct bl31_plat_param h; |
| struct gpio_info gpio; |
| }; |
| |
| struct bl31_apio_param { |
| struct bl31_plat_param h; |
| struct apio_info apio; |
| }; |
| |
| #endif /* __PLAT_PARAMS_H__ */ |