Commit 5a62f3c6 authored by Alexandre Macabies's avatar Alexandre Macabies Committed by Marcel Holtmann

mrf24j40: fix security-enabled processing on inbound frames

When receiving a security-enabled IEEE 802.15.4 frame, the MRF24J40
triggers a SECIF interrupt that needs to be handled for RX processing
to keep functioning properly.

This patch enables the SECIF interrupt and makes the MRF ignores all
hardware processing of security-enabled frames, that is handled by the
ieee802154 stack instead.
Signed-off-by: default avatarAlexander Aring <aar@pengutronix.de>
Signed-off-by: default avatarAlexandre Macabies <web+oss@zopieux.com>
Reviewed-by: default avatarStefan Schmidt <stefan@osg.samsung.com>
Acked-by: default avatarAlan Ott <alan@signal11.us>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent bc405cd6
...@@ -85,10 +85,13 @@ ...@@ -85,10 +85,13 @@
#define REG_INTSTAT 0x31 /* Interrupt Status */ #define REG_INTSTAT 0x31 /* Interrupt Status */
#define BIT_TXNIF BIT(0) #define BIT_TXNIF BIT(0)
#define BIT_RXIF BIT(3) #define BIT_RXIF BIT(3)
#define BIT_SECIF BIT(4)
#define BIT_SECIGNORE BIT(7)
#define REG_INTCON 0x32 /* Interrupt Control */ #define REG_INTCON 0x32 /* Interrupt Control */
#define BIT_TXNIE BIT(0) #define BIT_TXNIE BIT(0)
#define BIT_RXIE BIT(3) #define BIT_RXIE BIT(3)
#define BIT_SECIE BIT(4)
#define REG_GPIO 0x33 /* GPIO */ #define REG_GPIO 0x33 /* GPIO */
#define REG_TRISGPIO 0x34 /* GPIO direction */ #define REG_TRISGPIO 0x34 /* GPIO direction */
...@@ -616,7 +619,7 @@ static int mrf24j40_start(struct ieee802154_hw *hw) ...@@ -616,7 +619,7 @@ static int mrf24j40_start(struct ieee802154_hw *hw)
/* Clear TXNIE and RXIE. Enable interrupts */ /* Clear TXNIE and RXIE. Enable interrupts */
return regmap_update_bits(devrec->regmap_short, REG_INTCON, return regmap_update_bits(devrec->regmap_short, REG_INTCON,
BIT_TXNIE | BIT_RXIE, 0); BIT_TXNIE | BIT_RXIE | BIT_SECIE, 0);
} }
static void mrf24j40_stop(struct ieee802154_hw *hw) static void mrf24j40_stop(struct ieee802154_hw *hw)
...@@ -1025,6 +1028,11 @@ static void mrf24j40_intstat_complete(void *context) ...@@ -1025,6 +1028,11 @@ static void mrf24j40_intstat_complete(void *context)
enable_irq(devrec->spi->irq); enable_irq(devrec->spi->irq);
/* Ignore Rx security decryption */
if (intstat & BIT_SECIF)
regmap_write_async(devrec->regmap_short, REG_SECCON0,
BIT_SECIGNORE);
/* Check for TX complete */ /* Check for TX complete */
if (intstat & BIT_TXNIF) if (intstat & BIT_TXNIF)
ieee802154_xmit_complete(devrec->hw, devrec->tx_skb, false); ieee802154_xmit_complete(devrec->hw, devrec->tx_skb, false);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment