blob: 5774ce6d014e80ca9c2806ba788a3a2f2a33d190 [file] [log] [blame]
/*
* This file is part of the coreboot project.
*
* Copyright (C) 2018, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef _SOC_QUALCOMM_QCLIB_COMMON_H__
#define _SOC_QUALCOMM_QCLIB_COMMON_H__
/* coreboot & QCLib I/F definitions */
/* string field lengths */
#define QCLIB_MAGIC_NUMBER_LENGTH 8
#define QCLIB_FMAP_NAME_LENGTH 24
#define QCLIB_TE_NAME_LENGTH 24
/* FMAP_REGION names */
#define QCLIB_FR_DDR_TRAINING_DATA "RW_DDR_TRAINING"
#define QCLIB_FR_LIMITS_CFG_DATA "RO_LIMITS_CFG"
/* TE_NAME (table entry name) */
#define QCLIB_TE_DDR_INFORMATION "ddr_information"
#define QCLIB_TE_QCLIB_LOG_BUFFER "qclib_log_buffer"
#define QCLIB_TE_DCB_SETTINGS "dcb_settings"
#define QCLIB_TE_CDT_SETTINGS "cdt_settings"
#define QCLIB_TE_PMIC_SETTINGS "pmic_settings"
#define QCLIB_TE_DDR_TRAINING_DATA "ddr_training_data"
#define QCLIB_TE_LIMITS_CFG_DATA "limits_cfg_data"
#define QCLIB_TE_QCSDI "qcsdi"
#define QCLIB_TE_BOARD_CONFIG "board_config"
/* BA_BMASK_VALUES (blob_attributes bit mask values) */
#define QCLIB_BA_SAVE_TO_STORAGE 0x00000001
struct qclib_cb_if_table_entry {
char name[QCLIB_TE_NAME_LENGTH]; /* 0x00 TE_NAME */
uint64_t blob_address; /* 0x18 blob addr in SRAM */
uint32_t size; /* 0x20 blob size in SRAM */
uint32_t blob_attributes; /* 0x24 BA_BMASK_VALUES */
};
/* GA_BMASK_VALUES (global_attributes bit mask values) */
#define QCLIB_GA_ENABLE_UART_LOGGING 0x00000001
#define QCLIB_INTERFACE_VERSION 0x00000001
#define QCLIB_MAX_NUMBER_OF_ENTRIES 16
#define QCLIB_MAGIC_NUMBER "QCLIB_CB"
struct qclib_cb_if_table {
char magic[8]; /* 0x00 */
uint32_t version; /* 0x08 */
uint32_t num_entries; /* 0x0C */
uint32_t max_entries; /* 0x10 */
uint32_t global_attributes; /* 0x14 */
uint64_t reserved; /* 0x18 */
struct qclib_cb_if_table_entry
te[QCLIB_MAX_NUMBER_OF_ENTRIES]; /* 0x20 */
};
extern struct qclib_cb_if_table qclib_cb_if_table;
void qclib_add_if_table_entry(const char *name, void *base,
uint32_t size, uint32_t attrs);
void qclib_load_and_run(void);
int qclib_soc_blob_load(void);
void qclib_set_buck_type(void);
#endif // _SOC_QUALCOMM_QCLIB_COMMON_H_