diff options
Diffstat (limited to 'arch/arm/mach-tegra/nv/include/nvbootargs.h')
-rw-r--r-- | arch/arm/mach-tegra/nv/include/nvbootargs.h | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/nv/include/nvbootargs.h b/arch/arm/mach-tegra/nv/include/nvbootargs.h new file mode 100644 index 000000000000..908c26f0ea52 --- /dev/null +++ b/arch/arm/mach-tegra/nv/include/nvbootargs.h @@ -0,0 +1,234 @@ +/* + * Copyright (c) 2008-2009 NVIDIA Corporation. + * 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 the NVIDIA Corporation 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 INCLUDED_NVBOOTARGS_H +#define INCLUDED_NVBOOTARGS_H + +/** + * This defines the basic bootarg structure and keys for use with + * NvOsBootArgGet and NvOsBootArgSet. + */ + +#include "nvcommon.h" + +/** + * The maximum number of memory handles that may be preserved across the + * bootloader-to-OS transition. @see NvRmBootArg_PreservedMemHandle. + */ +#define NV_BOOTARGS_MAX_PRESERVED_MEMHANDLES 3 + +#if defined(__cplusplus) +extern "C" +{ +#endif + +/* accessor for various boot arg classes, see NvOsBootArg* */ +typedef enum +{ + NvBootArgKey_Rm = 0x1, + NvBootArgKey_Display, + NvBootArgKey_Framebuffer, + NvBootArgKey_ChipShmoo, + NvBootArgKey_ChipShmooPhys, + NvBootArgKey_Carveout, + NvBootArgKey_WarmBoot, + NvBootArgKey_PreservedMemHandle_0 = 0x10000, + NvBootArgKey_PreservedMemHandle_Num = (NvBootArgKey_PreservedMemHandle_0 + + NV_BOOTARGS_MAX_PRESERVED_MEMHANDLES), + NvBootArgKey_Force32 = 0x7FFFFFFF, +} NvBootArgKey; + +/** + * Resource Manager boot args. + * + * Nothing here yet. + */ +typedef struct NvBootArgsRmRec +{ + NvU32 reserved; +} NvBootArgsRm; + +/** + * Carveout boot args, which define the physical memory location of the GPU + * carved-out memory region(s). + */ +typedef struct NvBootArgsCarveoutRec +{ + NvUPtr base; + NvU32 size; +} NvBootArgsCarveout; + +/** + * Warmbootloader boot args. This structure only contains + * a mem handle key to preserve the warm bootloader + * across the bootloader->os transition + */ +typedef struct NvBootArgsWarmbootRec +{ + NvU32 MemHandleKey; +} NvBootArgsWarmboot; + +/** + * PreservedMemHandle boot args, indexed by PreservedMemHandle_0 + n. + * All values n from 0 to the first value which does not return NvSuccess will + * be quered at RM initialization in the OS environment. If present, a new + * memory handle for the physical region specified will be created. + * This allows physical memory allocations (e.g., for framebuffers) to persist + * between the bootloader and operating system. Only carveout and IRAM + * allocations may be preserved with this interface. + */ +typedef struct NvBootArgsPreservedMemHandleRec +{ + NvUPtr Address; + NvU32 Size; +} NvBootArgsPreservedMemHandle; + + +/** + * Display boot args, indexed by NvBootArgKey_Display. + * + * The bootloader may have a splash screen. This will flag which controller + * and device was used for the splash screen so the device will not be + * reinitialized (which causes visual artifacts). + */ +typedef struct NvBootArgsDisplayRec +{ + /* which controller is initialized */ + NvU32 Controller; + + /* index into the ODM device list of the boot display device */ + NvU32 DisplayDeviceIndex; + + /* set to NV_TRUE if the display has been initialized */ + NvBool bEnabled; +} NvBootArgsDisplay; + +/** + * Framebuffer boot args, indexed by NvBootArgKey_Framebuffer + * + * A framebuffer may be shared between the bootloader and the + * operating system display driver. When this key is present, + * a preserved memory handle for the framebuffer must also + * be present, to ensure that no display corruption occurs + * during the transition. + */ +typedef struct NvBootArgsFramebufferRec +{ + /* The key used for accessing the preserved memory handle */ + NvU32 MemHandleKey; + /* Total memory size of the framebuffer */ + NvU32 Size; + /* Color format of the framebuffer, cast to a U32 */ + NvU32 ColorFormat; + /* Width of the framebuffer, in pixels */ + NvU16 Width; + /* Height of each surface in the framebuffer, in pixels */ + NvU16 Height; + /* Pitch of a framebuffer scanline, in bytes */ + NvU16 Pitch; + /* Surface layout of the framebuffer, cast to a U8 */ + NvU8 SurfaceLayout; + /* Number of contiguous surfaces of the same height in the + * framebuffer, if multi-buffering. Each surface is + * assumed to begin at Pitch * Height bytes from the + * previous surface. */ + NvU8 NumSurfaces; +} NvBootArgsFramebuffer; + +/** + * Chip chatcterization shmoo data indexed by NvBootArgKey_ChipShmoo + */ +typedef struct NvBootArgsChipShmooRec +{ + // The key used for accessing the preserved memory handle of packed + // charcterization tables + NvU32 MemHandleKey; + + // Offset and size of each unit in the packed buffer + NvU32 CoreShmooVoltagesListOffset; + NvU32 CoreShmooVoltagesListSize; + + NvU32 CoreScaledLimitsListOffset; + NvU32 CoreScaledLimitsListSize; + + NvU32 OscDoublerListOffset; + NvU32 OscDoublerListSize; + + NvU32 SKUedLimitsOffset; + NvU32 SKUedLimitsSize; + + NvU32 CpuShmooVoltagesListOffset; + NvU32 CpuShmooVoltagesListSize; + + NvU32 CpuScaledLimitsOffset; + NvU32 CpuScaledLimitsSize; + + // Misc charcterization settings + NvU16 CoreCorner; + NvU16 CpuCorner; + NvU32 Dqsib; + NvU32 SvopLowVoltage; + NvU32 SvopLowSetting; + NvU32 SvopHighSetting; +} NvBootArgsChipShmoo; + +/** + * Chip chatcterization shmoo data indexed by NvBootArgKey_ChipShmooPhys + */ +typedef struct NvBootArgsChipShmooPhysRec +{ + NvU32 PhysShmooPtr; + NvU32 Size; +} NvBootArgsChipShmooPhys; + +#define NVBOOTARG_NUM_PRESERVED_HANDLES (NvBootArgKey_PreservedMemHandle_Num - \ + NvBootArgKey_PreservedMemHandle_0) + +/** + * OS-agnostic bootarg structure. + */ +typedef struct NvBootArgsRec +{ + NvBootArgsRm RmArgs; + NvBootArgsDisplay DisplayArgs; + NvBootArgsFramebuffer FramebufferArgs; + NvBootArgsChipShmoo ChipShmooArgs; + NvBootArgsChipShmooPhys ChipShmooPhysArgs; + NvBootArgsWarmboot WarmbootArgs; + NvBootArgsPreservedMemHandle MemHandleArgs[NVBOOTARG_NUM_PRESERVED_HANDLES]; +} NvBootArgs; + +#if defined(__cplusplus) +} +#endif + +#endif // INCLUDED_NVBOOTARGS_H |