| /**************************************************************************** |
| * |
| * Copyright (c) 2014 - 2016 Samsung Electronics Co., Ltd. All rights reserved |
| * |
| ****************************************************************************/ |
| |
| /** |
| * mx140 Infrastructure Configuration Structure. |
| * |
| * Used to pass configuration data from AP to R4 infrastructure |
| * on Maxwell Subsystem startup. |
| * |
| * Notes: |
| * |
| * - All multi-octet integers shall be stored LittleEndian. |
| * |
| * - All location fields ("*_loc") are 32 bit octet offsets w.r.t. the R4 |
| * address map. They can therefore refer to DRAM memory or Mailbox registers. |
| * |
| * - "typedefs" are avoided to allow inclusion in linux source code. |
| */ |
| #ifndef MXCONF_H__ |
| #define MXCONF_H__ |
| |
| /* Uses */ |
| |
| /* It appears that due to the previous syntax "__packed struct foo" used in this |
| * header, the structures here don't actually get packed. Clang warns that |
| * that syntax is ignored. But correcting it causes a misalignment with FW. |
| * The __MXPACKED macro is used to stop packing the structures in this |
| * header until we've investigated further. |
| */ |
| #define __MXPACKED /* TODO: HACK - don't actually pack! */ |
| |
| /* Definitions */ |
| |
| /** |
| * Config structure magic number. |
| * |
| * The AP writes this value and the R4 checks it to trap endian mismatches. |
| */ |
| #define MXCONF_MAGIC 0x79828486 |
| |
| /** |
| * Config structure version |
| * |
| * The AP writes these values and the R4 checks them to trap config structure |
| * mismatches. |
| */ |
| #define MXCONF_VERSION_MAJOR 0 |
| #define MXCONF_VERSION_MINOR 5 /* For fleximac moredump */ |
| #ifdef CONFIG_SOC_EXYNOS7885 |
| #define MXCONF_VERSION_MINOR_1 1 |
| #define MXCONF_VERSION_MINOR_2 2 |
| #endif |
| |
| /* Types */ |
| |
| /** |
| * Maxwell Circular Packet Buffer Configuration. |
| */ |
| struct mxcbufconf { |
| scsc_mifram_ref buffer_loc; /**< Location of allocated buffer in DRAM */ |
| uint32_t num_packets; /**< Total number of packets that can be stored in the buffer */ |
| uint32_t packet_size; /**< Size of each individual packet within the buffer */ |
| scsc_mifram_ref read_index_loc; /**< Location of 32bit read index in DRAM or Mailbox */ |
| scsc_mifram_ref write_index_loc; /**< Location of 32bit write index */ |
| } __MXPACKED; |
| |
| /** |
| * Maxwell Management Simplex Stream Configuration |
| * |
| * A circular buffer plus a pair of R/W signaling bits. |
| */ |
| struct mxstreamconf { |
| /** Circular Packet Buffer configuration */ |
| struct mxcbufconf buf_conf; |
| |
| /** Allocated MIF Interrupt Read Bit Index */ |
| uint8_t read_bit_idx; |
| |
| /** Allocated MIF Interrupt Write Bit Index */ |
| uint8_t write_bit_idx; |
| } __MXPACKED; |
| |
| /** |
| * Maxwell Management Transport Configuration |
| * |
| * A pair of simplex streams. |
| */ |
| struct mxtransconf { |
| struct mxstreamconf to_ap_stream_conf; |
| struct mxstreamconf from_ap_stream_conf; |
| } __MXPACKED; |
| |
| /** |
| * Maxwell Infrastructure Configuration Version |
| */ |
| struct mxconfversion { |
| uint16_t major; |
| uint16_t minor; |
| } __MXPACKED; |
| |
| /** |
| * Mxlog Event Buffer Configuration. |
| * |
| * A circular buffer. Size must be a multiple of 2. |
| */ |
| struct mxlogconf |
| { |
| struct mxstreamconf stream_conf; |
| } __MXPACKED; |
| |
| |
| /** |
| * Maxwell Infrastructure Configuration Override (HCF block) |
| */ |
| struct mxmibref { |
| uint32_t offset; |
| uint32_t size; |
| } __MXPACKED; |
| |
| |
| /** |
| * Maxwell Infrastructure Configuration |
| */ |
| struct mxconf { |
| /** |
| * Config Magic Number |
| * |
| * Always 1st field in config. |
| */ |
| uint32_t magic; |
| |
| /** |
| * Config Version. |
| * |
| * Always second field in config. |
| */ |
| struct mxconfversion version; |
| |
| /** |
| * MX Management Message Transport Configuration. |
| */ |
| struct mxtransconf mx_trans_conf; |
| |
| /** |
| * MX Management GDB Message Transport Configuration. |
| */ |
| /* Cortex-R4 channel */ |
| struct mxtransconf mx_trans_conf_gdb_r4; |
| /* Cortex-M4 channel */ |
| struct mxtransconf mx_trans_conf_gdb_m4; |
| |
| /** |
| * Mxlog Event Buffer Configuration. |
| */ |
| struct mxlogconf mxlogconf; |
| |
| /* FROM MINOR_2 */ |
| |
| /** |
| * SOC HW revision override from host |
| */ |
| uint32_t soc_revision; |
| |
| /* FROM MINOR_3 */ |
| |
| /** |
| * Setup flags |
| */ |
| #define MXCONF_FLAGS_FM_ON (BIT(0)) /* FM already on */ |
| uint32_t flags; |
| |
| /* FROM MINOR_4 */ |
| |
| /** |
| * Common HCF offset |
| */ |
| struct mxmibref fwconfig; |
| |
| /* FROM MINOR_5 */ |
| |
| /* Fleximac Cortex-M3_1 piggy back as M4 channel. |
| * (Driver must initialise from-ap buffer address to 0 |
| * if channel is not in use). |
| */ |
| struct mxtransconf mx_trans_conf_gdb_m4_1; |
| |
| } __MXPACKED; |
| |
| #endif /* MXCONF_H__ */ |