Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5487ab4a authored by Feng Tang's avatar Feng Tang Committed by Len Brown
Browse files

SFI: add support for v0.81 spec



There are 2 major changes from v0.81 to v0.7:
1. Consolidating the SPIB/I2CB tables into a new DEVS table,
   which is more expandable and can support other bus types
   than spi/i2c.
2. Creating a new GPIO table, which list all the GPIO pins
   used in the platform.

However, to avoid breaking current platforms who use SFI v0.7
version firmware, the definitions for SPIB/I2CB will still
be kept for a while

Signed-off-by: default avatarFeng Tang <feng.tang@intel.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent e40152ee
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -390,7 +390,7 @@ void __init sfi_init(void)
	if (sfi_disabled)
	if (sfi_disabled)
		return;
		return;


	pr_info("Simple Firmware Interface v0.7 http://simplefirmware.org\n");
	pr_info("Simple Firmware Interface v0.81 http://simplefirmware.org\n");


	if (sfi_find_syst() || sfi_parse_syst() || sfi_platform_init())
	if (sfi_find_syst() || sfi_parse_syst() || sfi_platform_init())
		disable_sfi();
		disable_sfi();
+23 −1
Original line number Original line Diff line number Diff line
@@ -73,6 +73,8 @@
#define SFI_SIG_SPIB		"SPIB"
#define SFI_SIG_SPIB		"SPIB"
#define SFI_SIG_I2CB		"I2CB"
#define SFI_SIG_I2CB		"I2CB"
#define SFI_SIG_GPEM		"GPEM"
#define SFI_SIG_GPEM		"GPEM"
#define SFI_SIG_DEVS		"DEVS"
#define SFI_SIG_GPIO		"GPIO"


#define SFI_SIGNATURE_SIZE	4
#define SFI_SIGNATURE_SIZE	4
#define SFI_OEM_ID_SIZE		6
#define SFI_OEM_ID_SIZE		6
@@ -145,6 +147,27 @@ struct sfi_rtc_table_entry {
	u32	irq;
	u32	irq;
} __packed;
} __packed;


struct sfi_device_table_entry {
	u8	type;		/* bus type, I2C, SPI or ...*/
#define SFI_DEV_TYPE_SPI	0
#define SFI_DEV_TYPE_I2C	1
#define SFI_DEV_TYPE_UART	2
#define SFI_DEV_TYPE_HSI	3
#define SFI_DEV_TYPE_IPC	4

	u8	host_num;	/* attached to host 0, 1...*/
	u16	addr;
	u8	irq;
	u32	max_freq;
	char	name[16];
} __packed;

struct sfi_gpio_table_entry {
	char	controller_name[16];
	u16	pin_no;
	char	pin_name[16];
} __packed;

struct sfi_spi_table_entry {
struct sfi_spi_table_entry {
	u16	host_num;	/* attached to host 0, 1...*/
	u16	host_num;	/* attached to host 0, 1...*/
	u16	cs;		/* chip select */
	u16	cs;		/* chip select */
@@ -166,7 +189,6 @@ struct sfi_gpe_table_entry {
	u16	phys_id;	/* physical GPE id */
	u16	phys_id;	/* physical GPE id */
} __packed;
} __packed;



typedef int (*sfi_table_handler) (struct sfi_table_header *table);
typedef int (*sfi_table_handler) (struct sfi_table_header *table);


#ifdef CONFIG_SFI
#ifdef CONFIG_SFI