aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorSean Anderson <seanga2@gmail.com>2022-03-01 10:35:43 +0000
committerLeo Yu-Chi Liang <ycliang@andestech.com>2022-03-15 17:43:11 +0800
commitbae4d9fbd97623ccb96ad634128d1aa98faa30f2 (patch)
tree1c9c9f4b836f83aadde57cc699248eb75143592c /drivers
parent40b6435a62befe3e487b6ea0ff69a0206a907b0b (diff)
downloadu-boot-bae4d9fbd97623ccb96ad634128d1aa98faa30f2.zip
u-boot-bae4d9fbd97623ccb96ad634128d1aa98faa30f2.tar.gz
u-boot-bae4d9fbd97623ccb96ad634128d1aa98faa30f2.tar.bz2
spi: dw: Actually mask interrupts
The designware spi driver unconditionally uses polling. The comment to spi_hw_init() also states that the function should disable interrupts. According to the DesignWare DW_apb_ssi Databook, value 0xff in IMR enables all interrupts. Since we want to mask all interrupts write 0x0 instead. On the canaan k210 board, pressing the reset button twice to reset the board will run u-boot. If u-boot boots Linux without having SPI interrupts masked, Linux will hang as soon as interrupts are enabled, because of an interrupt storm. Properly masking the SPI interrupts in u-boot allows us to successfully boot Linux, even after resetting the board. Fixes: 5bef6fd79f94 ("spi: Add designware master SPI DM driver used on SoCFPGA") Signed-off-by: Sean Anderson <seanga2@gmail.com> [Niklas: rewrite commit message] Signed-off-by: Niklas Cassel <niklas.cassel@wdc.com> Reviewed-by: Sean Anderson <seanga2@gmail.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/spi/designware_spi.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/spi/designware_spi.c b/drivers/spi/designware_spi.c
index f9b19a5..47bea0b 100644
--- a/drivers/spi/designware_spi.c
+++ b/drivers/spi/designware_spi.c
@@ -266,7 +266,7 @@ static int dw_spi_of_to_plat(struct udevice *bus)
static void spi_hw_init(struct udevice *bus, struct dw_spi_priv *priv)
{
dw_write(priv, DW_SPI_SSIENR, 0);
- dw_write(priv, DW_SPI_IMR, 0xff);
+ dw_write(priv, DW_SPI_IMR, 0);
dw_write(priv, DW_SPI_SSIENR, 1);
/*