3cc808e323
Some reported by Stephen Rothwell. The rest were found by running the kernel-doc build script. Some indentation fixes. Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> Reported-by: kernel test robot <lkp@intel.com> Closes: https://lore.kernel.org/oe-kbuild-all/202311241526.Y2WZeUau-lkp@intel.com/ Signed-off-by: Donald Robson <donald.robson@imgtec.com> Signed-off-by: Maxime Ripard <mripard@kernel.org> Link: https://patchwork.freedesktop.org/patch/msgid/20231128173507.95119-1-donald.robson@imgtec.com
136 lines
3.5 KiB
C
136 lines
3.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only OR MIT */
|
|
/* Copyright (c) 2023 Imagination Technologies Ltd. */
|
|
|
|
#ifndef PVR_FW_INFO_H
|
|
#define PVR_FW_INFO_H
|
|
|
|
#include <linux/bits.h>
|
|
#include <linux/sizes.h>
|
|
#include <linux/types.h>
|
|
|
|
/*
|
|
* Firmware binary block unit in bytes.
|
|
* Raw data stored in FW binary will be aligned to this size.
|
|
*/
|
|
#define FW_BLOCK_SIZE SZ_4K
|
|
|
|
/* Maximum number of entries in firmware layout table. */
|
|
#define PVR_FW_INFO_MAX_NUM_ENTRIES 8
|
|
|
|
enum pvr_fw_section_id {
|
|
META_CODE = 0,
|
|
META_PRIVATE_DATA,
|
|
META_COREMEM_CODE,
|
|
META_COREMEM_DATA,
|
|
MIPS_CODE,
|
|
MIPS_EXCEPTIONS_CODE,
|
|
MIPS_BOOT_CODE,
|
|
MIPS_PRIVATE_DATA,
|
|
MIPS_BOOT_DATA,
|
|
MIPS_STACK,
|
|
RISCV_UNCACHED_CODE,
|
|
RISCV_CACHED_CODE,
|
|
RISCV_PRIVATE_DATA,
|
|
RISCV_COREMEM_CODE,
|
|
RISCV_COREMEM_DATA,
|
|
};
|
|
|
|
enum pvr_fw_section_type {
|
|
NONE = 0,
|
|
FW_CODE,
|
|
FW_DATA,
|
|
FW_COREMEM_CODE,
|
|
FW_COREMEM_DATA,
|
|
};
|
|
|
|
/*
|
|
* FW binary format with FW info attached:
|
|
*
|
|
* Contents Offset
|
|
* +-----------------+
|
|
* | | 0
|
|
* | |
|
|
* | Original binary |
|
|
* | file |
|
|
* | (.ldr/.elf) |
|
|
* | |
|
|
* | |
|
|
* +-----------------+
|
|
* | Device info | FILE_SIZE - 4K - device_info_size
|
|
* +-----------------+
|
|
* | FW info header | FILE_SIZE - 4K
|
|
* +-----------------+
|
|
* | |
|
|
* | FW layout table |
|
|
* | |
|
|
* +-----------------+
|
|
* FILE_SIZE
|
|
*/
|
|
|
|
#define PVR_FW_INFO_VERSION 3
|
|
|
|
#define PVR_FW_FLAGS_OPEN_SOURCE BIT(0)
|
|
|
|
/** struct pvr_fw_info_header - Firmware header */
|
|
struct pvr_fw_info_header {
|
|
/** @info_version: FW info header version. */
|
|
u32 info_version;
|
|
/** @header_len: Header length. */
|
|
u32 header_len;
|
|
/** @layout_entry_num: Number of entries in the layout table. */
|
|
u32 layout_entry_num;
|
|
/** @layout_entry_size: Size of an entry in the layout table. */
|
|
u32 layout_entry_size;
|
|
/** @bvnc: GPU ID supported by firmware. */
|
|
aligned_u64 bvnc;
|
|
/** @fw_page_size: Page size of processor on which firmware executes. */
|
|
u32 fw_page_size;
|
|
/** @flags: Compatibility flags. */
|
|
u32 flags;
|
|
/** @fw_version_major: Firmware major version number. */
|
|
u16 fw_version_major;
|
|
/** @fw_version_minor: Firmware minor version number. */
|
|
u16 fw_version_minor;
|
|
/** @fw_version_build: Firmware build number. */
|
|
u32 fw_version_build;
|
|
/** @device_info_size: Size of device info structure. */
|
|
u32 device_info_size;
|
|
/** @padding: Padding. */
|
|
u32 padding;
|
|
};
|
|
|
|
/**
|
|
* struct pvr_fw_layout_entry - Entry in firmware layout table, describing a
|
|
* section of the firmware image
|
|
*/
|
|
struct pvr_fw_layout_entry {
|
|
/** @id: Section ID. */
|
|
enum pvr_fw_section_id id;
|
|
/** @type: Section type. */
|
|
enum pvr_fw_section_type type;
|
|
/** @base_addr: Base address of section in FW address space. */
|
|
u32 base_addr;
|
|
/** @max_size: Maximum size of section, in bytes. */
|
|
u32 max_size;
|
|
/** @alloc_size: Allocation size of section, in bytes. */
|
|
u32 alloc_size;
|
|
/** @alloc_offset: Allocation offset of section. */
|
|
u32 alloc_offset;
|
|
};
|
|
|
|
/**
|
|
* struct pvr_fw_device_info_header - Device information header.
|
|
*/
|
|
struct pvr_fw_device_info_header {
|
|
/** @brn_mask_size: BRN mask size (in u64s). */
|
|
u64 brn_mask_size;
|
|
/** @ern_mask_size: ERN mask size (in u64s). */
|
|
u64 ern_mask_size;
|
|
/** @feature_mask_size: Feature mask size (in u64s). */
|
|
u64 feature_mask_size;
|
|
/** @feature_param_size: Feature parameter size (in u64s). */
|
|
u64 feature_param_size;
|
|
};
|
|
|
|
#endif /* PVR_FW_INFO_H */
|