mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-11-03 21:48:15 +00:00 
			
		
		
		
	Add support for the Variscite VAR-SOM-IMX93 evaluation kit. The SoM consists of an NXP iMX93 dual A55 CPU. The SoM is mounted on a Variscite Symphony SBC. Signed-off-by: Mathieu Othacehe <m.othacehe@gmail.com>
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0+ */
 | 
						|
/*
 | 
						|
 * Copyright (C) 2023 Variscite Ltd.
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef _MX9_VAR_EEPROM_H_
 | 
						|
#define _MX9_VAR_EEPROM_H_
 | 
						|
 | 
						|
#ifdef CONFIG_ARCH_IMX9
 | 
						|
#include <asm/arch-imx9/ddr.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#define VAR_SOM_EEPROM_MAGIC	0x4D58 /* == HEX("MX") */
 | 
						|
 | 
						|
#define VAR_SOM_EEPROM_I2C_ADDR	0x52
 | 
						|
 | 
						|
/* Optional SOM features */
 | 
						|
#define VAR_EEPROM_F_WIFI		BIT(0)
 | 
						|
#define VAR_EEPROM_F_ETH		BIT(1)
 | 
						|
#define VAR_EEPROM_F_AUDIO		BIT(2)
 | 
						|
 | 
						|
/* SOM storage types */
 | 
						|
enum som_storage {
 | 
						|
	SOM_STORAGE_EMMC,
 | 
						|
	SOM_STORAGE_NAND,
 | 
						|
	SOM_STORAGE_UNDEFINED,
 | 
						|
};
 | 
						|
 | 
						|
/* Number of DRAM adjustment tables */
 | 
						|
#define DRAM_TABLE_NUM 7
 | 
						|
 | 
						|
struct __packed var_eeprom
 | 
						|
{
 | 
						|
	u16 magic;			/* 00-0x00 - magic number       */
 | 
						|
	u8 partnum[8];			/* 02-0x02 - part number        */
 | 
						|
	u8 assembly[10];		/* 10-0x0a - assembly number    */
 | 
						|
	u8 date[9];			/* 20-0x14 - build date         */
 | 
						|
	u8 mac[6];			/* 29-0x1d - MAC address        */
 | 
						|
	u8 somrev;			/* 35-0x23 - SOM revision       */
 | 
						|
	u8 version;			/* 36-0x24 - EEPROM version     */
 | 
						|
	u8 features;			/* 37-0x25 - SOM features       */
 | 
						|
	u8 dramsize;			/* 38-0x26 - DRAM size          */
 | 
						|
	u8 reserved[5];			/* 39 0x27 - reserved           */
 | 
						|
	u32 ddr_crc32;			/* 44-0x2c - CRC32 of DDR DATAi */
 | 
						|
	u16 ddr_vic;			/* 48-0x30 - DDR VIC PN         */
 | 
						|
	u16 off[DRAM_TABLE_NUM + 1];	/* 50-0x32 - DRAM table offsets */
 | 
						|
};
 | 
						|
 | 
						|
#define VAR_EEPROM_DATA ((struct var_eeprom *)VAR_EEPROM_DRAM_START)
 | 
						|
 | 
						|
#define VAR_CARRIER_EEPROM_MAGIC	0x5643 /* == HEX("VC") */
 | 
						|
 | 
						|
#define CARRIER_REV_LEN 16
 | 
						|
struct __packed var_carrier_eeprom
 | 
						|
{
 | 
						|
	u16 magic;                          /* 00-0x00 - magic number		*/
 | 
						|
	u8 struct_ver;                      /* 01-0x01 - EEPROM structure version	*/
 | 
						|
	u8 carrier_rev[CARRIER_REV_LEN];    /* 02-0x02 - carrier board revision	*/
 | 
						|
	u32 crc;                            /* 10-0x0a - checksum			*/
 | 
						|
};
 | 
						|
 | 
						|
static inline int var_eeprom_is_valid(struct var_eeprom *ep)
 | 
						|
{
 | 
						|
	if (htons(ep->magic) != VAR_SOM_EEPROM_MAGIC) {
 | 
						|
		debug("Invalid EEPROM magic 0x%x, expected 0x%x\n",
 | 
						|
		      htons(ep->magic), VAR_SOM_EEPROM_MAGIC);
 | 
						|
		return 0;
 | 
						|
	}
 | 
						|
 | 
						|
	return 1;
 | 
						|
}
 | 
						|
 | 
						|
int var_eeprom_read_header(struct var_eeprom *e);
 | 
						|
int var_eeprom_get_dram_size(struct var_eeprom *e, phys_size_t *size);
 | 
						|
int var_eeprom_get_mac(struct var_eeprom *e, u8 *mac);
 | 
						|
void var_eeprom_print_prod_info(struct var_eeprom *e);
 | 
						|
 | 
						|
int var_carrier_eeprom_read(const char *bus_name, int addr, struct var_carrier_eeprom *ep);
 | 
						|
int var_carrier_eeprom_is_valid(struct var_carrier_eeprom *ep);
 | 
						|
void var_carrier_eeprom_get_revision(struct var_carrier_eeprom *ep, char *rev, size_t size);
 | 
						|
 | 
						|
#endif /* _MX9_VAR_EEPROM_H_ */
 |