Commit 5487ab4a5a71e955fef7094a0624df0542da91ef

Authored by Feng Tang
Committed by Len Brown
1 parent e40152ee1e

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: Feng Tang <feng.tang@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>

Showing 2 changed files with 24 additions and 2 deletions Side-by-side Diff

drivers/sfi/sfi_core.c
... ... @@ -390,7 +390,7 @@
390 390 if (sfi_disabled)
391 391 return;
392 392  
393   - pr_info("Simple Firmware Interface v0.7 http://simplefirmware.org\n");
  393 + pr_info("Simple Firmware Interface v0.81 http://simplefirmware.org\n");
394 394  
395 395 if (sfi_find_syst() || sfi_parse_syst() || sfi_platform_init())
396 396 disable_sfi();
... ... @@ -73,6 +73,8 @@
73 73 #define SFI_SIG_SPIB "SPIB"
74 74 #define SFI_SIG_I2CB "I2CB"
75 75 #define SFI_SIG_GPEM "GPEM"
  76 +#define SFI_SIG_DEVS "DEVS"
  77 +#define SFI_SIG_GPIO "GPIO"
76 78  
77 79 #define SFI_SIGNATURE_SIZE 4
78 80 #define SFI_OEM_ID_SIZE 6
... ... @@ -145,6 +147,27 @@
145 147 u32 irq;
146 148 } __packed;
147 149  
  150 +struct sfi_device_table_entry {
  151 + u8 type; /* bus type, I2C, SPI or ...*/
  152 +#define SFI_DEV_TYPE_SPI 0
  153 +#define SFI_DEV_TYPE_I2C 1
  154 +#define SFI_DEV_TYPE_UART 2
  155 +#define SFI_DEV_TYPE_HSI 3
  156 +#define SFI_DEV_TYPE_IPC 4
  157 +
  158 + u8 host_num; /* attached to host 0, 1...*/
  159 + u16 addr;
  160 + u8 irq;
  161 + u32 max_freq;
  162 + char name[16];
  163 +} __packed;
  164 +
  165 +struct sfi_gpio_table_entry {
  166 + char controller_name[16];
  167 + u16 pin_no;
  168 + char pin_name[16];
  169 +} __packed;
  170 +
148 171 struct sfi_spi_table_entry {
149 172 u16 host_num; /* attached to host 0, 1...*/
150 173 u16 cs; /* chip select */
... ... @@ -165,7 +188,6 @@
165 188 u16 logical_id; /* logical id */
166 189 u16 phys_id; /* physical GPE id */
167 190 } __packed;
168   -
169 191  
170 192 typedef int (*sfi_table_handler) (struct sfi_table_header *table);
171 193