Add support for Panther Point to SPI driver

Change-Id: I98b05d9e639eda880b6e8dc6398413d1f4f5e9c3
Signed-off-by: Stefan Reinauer <reinauer@google.com>
Reviewed-on: http://review.coreboot.org/1048
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
Stefan Reinauer 2012-05-23 11:18:35 -07:00 committed by Stefan Reinauer
parent 68b5da0e68
commit 691c9f0dab
2 changed files with 22 additions and 9 deletions

View File

@ -2504,6 +2504,8 @@
#define PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MIN 0x1c41 #define PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MIN 0x1c41
#define PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MAX 0x1c5f #define PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MAX 0x1c5f
#define PCI_DEVICE_ID_INTEL_PANTHERPOINT_LPC_MIN 0x1e41
#define PCI_DEVICE_ID_INTEL_PANTHERPOINT_LPC_MAX 0x1e5d
#define PCI_DEVICE_ID_INTEL_TGP_LPC 0x27bc #define PCI_DEVICE_ID_INTEL_TGP_LPC 0x27bc
/* Intel 82801E (C-ICH) */ /* Intel 82801E (C-ICH) */

View File

@ -286,11 +286,24 @@ void spi_free_slave(struct spi_slave *_slave)
free(slave); free(slave);
} }
static inline int spi_is_cougarpoint_lpc(uint16_t device_id) /*
* Check if this device ID matches one of supported Intel PCH devices.
*
* Return the ICH version if there is a match, or zero otherwise.
*/
static inline int get_ich_version(uint16_t device_id)
{ {
return device_id >= PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MIN && if (device_id == PCI_DEVICE_ID_INTEL_TGP_LPC)
device_id <= PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MAX; return 7;
};
if ((device_id >= PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MIN &&
device_id <= PCI_DEVICE_ID_INTEL_COUGARPOINT_LPC_MAX) ||
(device_id >= PCI_DEVICE_ID_INTEL_PANTHERPOINT_LPC_MIN &&
device_id <= PCI_DEVICE_ID_INTEL_PANTHERPOINT_LPC_MAX))
return 9;
return 0;
}
void spi_init(void) void spi_init(void)
{ {
@ -313,11 +326,9 @@ void spi_init(void)
return; return;
} }
if (device_id == PCI_DEVICE_ID_INTEL_TGP_LPC) { ich_version = get_ich_version(device_id);
ich_version = 7;
} else if (spi_is_cougarpoint_lpc(device_id)) { if (!ich_version) {
ich_version = 9;
} else {
printk(BIOS_DEBUG, "ICH SPI: No known ICH found.\n"); printk(BIOS_DEBUG, "ICH SPI: No known ICH found.\n");
return; return;
} }