diff options
Diffstat (limited to 'gcip-kernel-driver/include/gcip/gcip-image-config.h')
-rw-r--r-- | gcip-kernel-driver/include/gcip/gcip-image-config.h | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/gcip-kernel-driver/include/gcip/gcip-image-config.h b/gcip-kernel-driver/include/gcip/gcip-image-config.h index a995188..bcc506f 100644 --- a/gcip-kernel-driver/include/gcip/gcip-image-config.h +++ b/gcip-kernel-driver/include/gcip/gcip-image-config.h @@ -8,6 +8,8 @@ #ifndef __GCIP_IMAGE_CONFIG_H__ #define __GCIP_IMAGE_CONFIG_H__ +#include <asm/page.h> +#include <linux/bits.h> #include <linux/types.h> #define GCIP_FW_NUM_VERSIONS 4 @@ -80,6 +82,31 @@ struct gcip_image_config_parser { struct gcip_image_config last_config; }; +#define GCIP_IMG_CFG_ADDR_SHIFT 12 +#define GCIP_IMG_CFG_MB_SHIFT 20 +#define GCIP_IMG_CFG_SIZE_MODE_BIT BIT(GCIP_IMG_CFG_ADDR_SHIFT - 1) +#define GCIP_IMG_CFG_SECURE_SIZE_MASK (GCIP_IMG_CFG_SIZE_MODE_BIT - 1u) +#define GCIP_IMG_CFG_NS_SIZE_MASK (GCIP_IMG_CFG_SIZE_MODE_BIT - 1u) +#define GCIP_IMG_CFG_ADDR_MASK ~(BIT(GCIP_IMG_CFG_ADDR_SHIFT) - 1u) + +/* For decoding the size of ns_iommu_mappings. */ +static inline u32 gcip_ns_config_to_size(u32 cfg) +{ + if (cfg & GCIP_IMG_CFG_SIZE_MODE_BIT) + return (cfg & GCIP_IMG_CFG_NS_SIZE_MASK) << PAGE_SHIFT; + + return (cfg & GCIP_IMG_CFG_NS_SIZE_MASK) << GCIP_IMG_CFG_MB_SHIFT; +} + +/* For decoding the size of iommu_mappings. */ +static inline u32 gcip_config_to_size(u32 cfg) +{ + if (cfg & GCIP_IMG_CFG_SIZE_MODE_BIT) + return (cfg & GCIP_IMG_CFG_SECURE_SIZE_MASK) << PAGE_SHIFT; + + return BIT(cfg & GCIP_IMG_CFG_SECURE_SIZE_MASK) << PAGE_SHIFT; +} + /* * Initializes the image configuration parser. * |