diff options
author | Tom Rini | 2017-10-27 08:50:16 -0400 |
---|---|---|
committer | Tom Rini | 2017-10-27 08:50:16 -0400 |
commit | ae6ac0a06e5e6c58cf133c6b50d80b62501af465 (patch) | |
tree | 61864a201560d3e5652600c0d79ab219f1b98450 /drivers | |
parent | ddeaaefde3161bf655d48d733f3b1915e8222361 (diff) | |
parent | 411898dc87c09d0cd103a4243c8cb4a72b115c51 (diff) |
Merge git://git.denx.de/u-boot-x86
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/spi/ich.c | 22 | ||||
-rw-r--r-- | drivers/spi/ich.h | 1 |
2 files changed, 23 insertions, 0 deletions
diff --git a/drivers/spi/ich.c b/drivers/spi/ich.c index 22fc83dd725..927bbd708f1 100644 --- a/drivers/spi/ich.c +++ b/drivers/spi/ich.c @@ -184,6 +184,19 @@ static inline void spi_use_in(struct spi_trans *trans, unsigned bytes) trans->bytesin -= bytes; } +static void spi_lock_down(struct ich_spi_platdata *plat, void *sbase) +{ + if (plat->ich_version == ICHV_7) { + struct ich7_spi_regs *ich7_spi = sbase; + + setbits_le16(&ich7_spi->spis, SPIS_LOCK); + } else if (plat->ich_version == ICHV_9) { + struct ich9_spi_regs *ich9_spi = sbase; + + setbits_le16(&ich9_spi->hsfs, HSFS_FLOCKDN); + } +} + static bool spi_lock_status(struct ich_spi_platdata *plat, void *sbase) { int lock = 0; @@ -592,6 +605,12 @@ static int ich_spi_probe(struct udevice *dev) return ret; } + /* Lock down SPI controller settings if required */ + if (plat->lockdown) { + ich_spi_config_opcode(dev); + spi_lock_down(plat, priv->base); + } + priv->cur_speed = priv->max_speed; return 0; @@ -662,6 +681,9 @@ static int ich_spi_ofdata_to_platdata(struct udevice *dev) plat->ich_version = ICHV_9; } + plat->lockdown = fdtdec_get_bool(gd->fdt_blob, node, + "intel,spi-lock-down"); + return ret; } diff --git a/drivers/spi/ich.h b/drivers/spi/ich.h index c867c57be9f..06b7fb9e014 100644 --- a/drivers/spi/ich.h +++ b/drivers/spi/ich.h @@ -174,6 +174,7 @@ enum ich_version { struct ich_spi_platdata { enum ich_version ich_version; /* Controller version, 7 or 9 */ + bool lockdown; /* lock down controller settings? */ }; struct ich_spi_priv { |