/* $NetBSD: octeon_uboot.h,v 1.3 2020/06/20 02:01:56 simonb Exp $ */
#ifndef _EVBMIPS_OCTEON_UBOOT_H_
#define _EVBMIPS_OCTEON_UBOOT_H_
#define OCTEON_BTDESC_ARGV_MAX 64
#define OCTEON_BTDESC_SERIAL_LEN 20
#define OCTEON_BTDESC_DEP2_LEN 6
#define OCTEON_BTINFO_PADDR_OFFSET 392
#define OCTEON_BTINFO_SERIAL_LEN 20
#define OCTEON_BTINFO_MAJOR_VERSION 1
#define OCTEON_BTINFO_MINOR_VERSION 2
struct octeon_btdesc {
uint32_t obt_desc_ver;
uint32_t obt_desc_size;
uint64_t obt_stack_top; /* deprecated */
uint64_t obt_heap_start;
uint64_t obt_heap_end;
uint64_t obt_deprecated17;
uint64_t obt_deprecated16;
uint32_t obt_deprecated18;
uint32_t obt_deprecated15;
uint32_t obt_deprecated14;
uint32_t obt_argc;
uint32_t obt_argv[OCTEON_BTDESC_ARGV_MAX];
uint32_t obt_flags; /* deprecated */
uint32_t obt_core_mask; /* deprecated */
uint32_t obt_dram_size; /* deprecated */
uint32_t obt_phy_mem_desc_addr; /* deprecated */
uint32_t obt_debugger_flag_addr;
uint32_t obt_eclock;
uint32_t obt_deprecated10;
uint32_t obt_deprecated9;
uint16_t obt_deprecated8;
uint8_t obt_deprecated7;
uint8_t obt_deprecated6;
uint16_t obt_deprecated5;
uint8_t obt_deprecated4;
uint8_t obt_deprecated3;
uint8_t obt_deprecated2[OCTEON_BTDESC_SERIAL_LEN];
uint8_t obt_deprecated1[OCTEON_BTDESC_DEP2_LEN];
uint8_t obt_deprecated0;
uint64_t obt_boot_info_addr;
};
struct octeon_btinfo {
uint32_t obt_major_version;
uint32_t obt_minor_version;
uint64_t obt_stack_top;
uint64_t obt_heap_base;
uint64_t obt_heap_end;
uint64_t obt_desc_vaddr;
uint32_t obt_ebase_addr;
uint32_t obt_stack_size;
uint32_t obt_flags;
uint32_t obt_core_mask; /* deprecated in v4 */
uint32_t obt_dram_size; /* in MB */
uint32_t obt_phy_mem_desc_addr;
uint32_t obt_dbg_flags_base_addr;
uint32_t obt_eclock_hz; /* CPU clock speed */
uint32_t obt_dclock_hz; /* DRAM clock speed */
uint32_t obt_reserved0;
uint16_t obt_board_type;
uint8_t obt_board_rev_major;
uint8_t obt_board_rev_minor;
uint16_t obt_reserved1;
uint8_t obt_reserved2;
uint8_t obt_reserved3;
char obt_board_serial_number[OCTEON_BTINFO_SERIAL_LEN];
uint8_t obt_mac_addr_base[6];
uint8_t obt_mac_addr_count;
/* version minor 1 or newer */
uint64_t obt_cf_common_base_addr; /* paddr */
uint64_t obt_cf_attr_base_addr; /* paddr */
uint64_t obt_led_display_base_addr; /* deprecated */
/* version minor 2 or newer */
uint32_t obt_dfa_ref_clock_hz; /* DFA ref clock */
uint32_t obt_config_flags;
/* version minor 3 or newer */
uint64_t obt_fdt_addr; /* FDT structure */
/* version minor 4 or newer */
uint64_t obt_ext_core_mask; /* 64-bit core mask */
};
extern struct octeon_btdesc octeon_btdesc;
extern struct octeon_btinfo octeon_btinfo;
#define OCTEON_SUPPORTED_DESCRIPTOR_VERSION 7
/* obt_board_type */
#define BOARD_TYPE_UBIQUITI_E100 20002
#define BOARD_TYPE_UBIQUITI_E120 20004
#define BOARD_TYPE_UBIQUITI_E200 20003
#define BOARD_TYPE_UBIQUITI_E220 20005
#define BOARD_TYPE_UBIQUITI_E220 20005
#define BOARD_TYPE_UBIQUITI_E1000 20010
#define BOARD_TYPE_UBIQUITI_E300 20300
/* obt_config_flags */
#define CONFIG_FLAGS_PCI_HOST __BIT(0)
#define CONFIG_FLAGS_PCI_TARGET __BIT(1)
#define CONFIG_FLAGS_DEBUG __BIT(2)
#define CONFIG_FLAGS_NO_MAGIC __BIT(3)
#define CONFIG_FLAGS_OVERSIZE_TLB_MAPPING __BIT(4)
#define CONFIG_FLAGS_BREAK __BIT(5)
struct octeon_bootmem_desc {
#if BYTE_ORDER == BIG_ENDIAN
uint32_t bmd_lock;
uint32_t bmd_flags;
uint64_t bmd_head_addr;
uint32_t bmd_major_version;
uint32_t bmd_minor_version;
uint64_t bmd_app_data_addr;
uint64_t bmd_app_data_size;
uint32_t bmd_named_block_num_blocks;
uint32_t bmd_named_block_name_len;
uint64_t bmd_named_block_array_addr;
#endif
#if BYTE_ORDER == LITTLE_ENDIAN
uint32_t bmd_flags;
uint32_t bmd_lock;
uint64_t bmd_head_addr;
uint32_t bmd_minor_version;
uint32_t bmd_major_version;
uint64_t bmd_app_data_addr;
uint64_t bmd_app_data_size;
uint32_t bmd_named_block_name_len;
uint32_t bmd_named_block_num_blocks;
uint64_t bmd_named_block_array_addr;
#endif
};
struct octeon_bootmem_block_header {
uint64_t bbh_next_block_addr;
uint64_t bbh_size;
};
#endif /* _EVBMIPS_OCTEON_UBOOT_H_ */