SFI: add support for v0.81 spec
Feng Tang [Tue, 25 May 2010 08:40:47 +0000 (16:40 +0800)]
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>

drivers/sfi/sfi_core.c
include/linux/sfi.h

index b204a09..aba6a46 100644 (file)
@@ -390,7 +390,7 @@ void __init sfi_init(void)
        if (sfi_disabled)
                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())
                disable_sfi();
index 9a6f760..0299b4c 100644 (file)
@@ -73,6 +73,8 @@
 #define SFI_SIG_SPIB           "SPIB"
 #define SFI_SIG_I2CB           "I2CB"
 #define SFI_SIG_GPEM           "GPEM"
+#define SFI_SIG_DEVS           "DEVS"
+#define SFI_SIG_GPIO           "GPIO"
 
 #define SFI_SIGNATURE_SIZE     4
 #define SFI_OEM_ID_SIZE                6
@@ -145,6 +147,27 @@ struct sfi_rtc_table_entry {
        u32     irq;
 } __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 {
        u16     host_num;       /* attached to host 0, 1...*/
        u16     cs;             /* chip select */
@@ -166,7 +189,6 @@ struct sfi_gpe_table_entry {
        u16     phys_id;        /* physical GPE id */
 } __packed;
 
-
 typedef int (*sfi_table_handler) (struct sfi_table_header *table);
 
 #ifdef CONFIG_SFI