can: flexcan: rename RX modes
Most flexcan IP cores support 2 RX modes: - FIFO - mailbox The names for these modes were chosen to reflect the name of the rx-offload mode they are using. The name of the RX modes should better reflect their difference with regards the flexcan IP core. So this patch renames the various occurrences of OFF_FIFO to RX_FIFO and OFF_TIMESTAMP to RX_MAILBOX: | FLEXCAN_TX_MB_RESERVED_OFF_FIFO -> FLEXCAN_TX_MB_RESERVED_RX_FIFO | FLEXCAN_TX_MB_RESERVED_OFF_TIMESTAMP -> FLEXCAN_TX_MB_RESERVED_RX_MAILBOX | FLEXCAN_QUIRK_USE_OFF_TIMESTAMP -> FLEXCAN_QUIRK_USE_RX_MAILBOX Link: https://lore.kernel.org/all/20220107193105.1699523-4-mkl@pengutronix.de Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
parent
01bb4dccd9
commit
34ea4e1c99
|
@ -173,9 +173,9 @@
|
|||
|
||||
/* FLEXCAN interrupt flag register (IFLAG) bits */
|
||||
/* Errata ERR005829 step7: Reserve first valid MB */
|
||||
#define FLEXCAN_TX_MB_RESERVED_OFF_FIFO 8
|
||||
#define FLEXCAN_TX_MB_RESERVED_OFF_TIMESTAMP 0
|
||||
#define FLEXCAN_RX_MB_OFF_TIMESTAMP_FIRST (FLEXCAN_TX_MB_RESERVED_OFF_TIMESTAMP + 1)
|
||||
#define FLEXCAN_TX_MB_RESERVED_RX_FIFO 8
|
||||
#define FLEXCAN_TX_MB_RESERVED_RX_MAILBOX 0
|
||||
#define FLEXCAN_RX_MB_RX_MAILBOX_FIRST (FLEXCAN_TX_MB_RESERVED_RX_MAILBOX + 1)
|
||||
#define FLEXCAN_IFLAG_MB(x) BIT_ULL(x)
|
||||
#define FLEXCAN_IFLAG_RX_FIFO_OVERFLOW BIT(7)
|
||||
#define FLEXCAN_IFLAG_RX_FIFO_WARN BIT(6)
|
||||
|
@ -234,8 +234,8 @@
|
|||
#define FLEXCAN_QUIRK_ENABLE_EACEN_RRS BIT(3)
|
||||
/* Disable non-correctable errors interrupt and freeze mode */
|
||||
#define FLEXCAN_QUIRK_DISABLE_MECR BIT(4)
|
||||
/* Use timestamp based offloading */
|
||||
#define FLEXCAN_QUIRK_USE_OFF_TIMESTAMP BIT(5)
|
||||
/* Use mailboxes (not FIFO) for RX path */
|
||||
#define FLEXCAN_QUIRK_USE_RX_MAILBOX BIT(5)
|
||||
/* No interrupt for error passive */
|
||||
#define FLEXCAN_QUIRK_BROKEN_PERR_STATE BIT(6)
|
||||
/* default to BE register access */
|
||||
|
@ -406,38 +406,38 @@ static const struct flexcan_devtype_data fsl_imx28_devtype_data = {
|
|||
|
||||
static const struct flexcan_devtype_data fsl_imx6q_devtype_data = {
|
||||
.quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS |
|
||||
FLEXCAN_QUIRK_USE_OFF_TIMESTAMP | FLEXCAN_QUIRK_BROKEN_PERR_STATE |
|
||||
FLEXCAN_QUIRK_USE_RX_MAILBOX | FLEXCAN_QUIRK_BROKEN_PERR_STATE |
|
||||
FLEXCAN_QUIRK_SETUP_STOP_MODE_GPR,
|
||||
};
|
||||
|
||||
static const struct flexcan_devtype_data fsl_imx8qm_devtype_data = {
|
||||
.quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS |
|
||||
FLEXCAN_QUIRK_USE_OFF_TIMESTAMP | FLEXCAN_QUIRK_BROKEN_PERR_STATE |
|
||||
FLEXCAN_QUIRK_USE_RX_MAILBOX | FLEXCAN_QUIRK_BROKEN_PERR_STATE |
|
||||
FLEXCAN_QUIRK_SUPPORT_FD | FLEXCAN_QUIRK_SETUP_STOP_MODE_SCFW,
|
||||
};
|
||||
|
||||
static struct flexcan_devtype_data fsl_imx8mp_devtype_data = {
|
||||
.quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS |
|
||||
FLEXCAN_QUIRK_DISABLE_MECR | FLEXCAN_QUIRK_USE_OFF_TIMESTAMP |
|
||||
FLEXCAN_QUIRK_DISABLE_MECR | FLEXCAN_QUIRK_USE_RX_MAILBOX |
|
||||
FLEXCAN_QUIRK_BROKEN_PERR_STATE | FLEXCAN_QUIRK_SETUP_STOP_MODE_GPR |
|
||||
FLEXCAN_QUIRK_SUPPORT_FD | FLEXCAN_QUIRK_SUPPORT_ECC,
|
||||
};
|
||||
|
||||
static const struct flexcan_devtype_data fsl_vf610_devtype_data = {
|
||||
.quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS |
|
||||
FLEXCAN_QUIRK_DISABLE_MECR | FLEXCAN_QUIRK_USE_OFF_TIMESTAMP |
|
||||
FLEXCAN_QUIRK_DISABLE_MECR | FLEXCAN_QUIRK_USE_RX_MAILBOX |
|
||||
FLEXCAN_QUIRK_BROKEN_PERR_STATE | FLEXCAN_QUIRK_SUPPORT_ECC,
|
||||
};
|
||||
|
||||
static const struct flexcan_devtype_data fsl_ls1021a_r2_devtype_data = {
|
||||
.quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS |
|
||||
FLEXCAN_QUIRK_BROKEN_PERR_STATE | FLEXCAN_QUIRK_USE_OFF_TIMESTAMP,
|
||||
FLEXCAN_QUIRK_BROKEN_PERR_STATE | FLEXCAN_QUIRK_USE_RX_MAILBOX,
|
||||
};
|
||||
|
||||
static const struct flexcan_devtype_data fsl_lx2160a_r1_devtype_data = {
|
||||
.quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS |
|
||||
FLEXCAN_QUIRK_DISABLE_MECR | FLEXCAN_QUIRK_BROKEN_PERR_STATE |
|
||||
FLEXCAN_QUIRK_USE_OFF_TIMESTAMP | FLEXCAN_QUIRK_SUPPORT_FD |
|
||||
FLEXCAN_QUIRK_USE_RX_MAILBOX | FLEXCAN_QUIRK_SUPPORT_FD |
|
||||
FLEXCAN_QUIRK_SUPPORT_ECC,
|
||||
};
|
||||
|
||||
|
@ -1022,7 +1022,7 @@ static struct sk_buff *flexcan_mailbox_read(struct can_rx_offload *offload,
|
|||
|
||||
mb = flexcan_get_mb(priv, n);
|
||||
|
||||
if (priv->devtype_data.quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) {
|
||||
if (priv->devtype_data.quirks & FLEXCAN_QUIRK_USE_RX_MAILBOX) {
|
||||
u32 code;
|
||||
|
||||
do {
|
||||
|
@ -1087,7 +1087,7 @@ static struct sk_buff *flexcan_mailbox_read(struct can_rx_offload *offload,
|
|||
}
|
||||
|
||||
mark_as_read:
|
||||
if (priv->devtype_data.quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP)
|
||||
if (priv->devtype_data.quirks & FLEXCAN_QUIRK_USE_RX_MAILBOX)
|
||||
flexcan_write64(priv, FLEXCAN_IFLAG_MB(n), ®s->iflag1);
|
||||
else
|
||||
priv->write(FLEXCAN_IFLAG_RX_FIFO_AVAILABLE, ®s->iflag1);
|
||||
|
@ -1113,7 +1113,7 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id)
|
|||
enum can_state last_state = priv->can.state;
|
||||
|
||||
/* reception interrupt */
|
||||
if (priv->devtype_data.quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) {
|
||||
if (priv->devtype_data.quirks & FLEXCAN_QUIRK_USE_RX_MAILBOX) {
|
||||
u64 reg_iflag_rx;
|
||||
int ret;
|
||||
|
||||
|
@ -1429,20 +1429,20 @@ static int flexcan_rx_offload_setup(struct net_device *dev)
|
|||
priv->mb_count = (sizeof(priv->regs->mb[0]) / priv->mb_size) +
|
||||
(sizeof(priv->regs->mb[1]) / priv->mb_size);
|
||||
|
||||
if (priv->devtype_data.quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP)
|
||||
if (priv->devtype_data.quirks & FLEXCAN_QUIRK_USE_RX_MAILBOX)
|
||||
priv->tx_mb_reserved =
|
||||
flexcan_get_mb(priv, FLEXCAN_TX_MB_RESERVED_OFF_TIMESTAMP);
|
||||
flexcan_get_mb(priv, FLEXCAN_TX_MB_RESERVED_RX_MAILBOX);
|
||||
else
|
||||
priv->tx_mb_reserved =
|
||||
flexcan_get_mb(priv, FLEXCAN_TX_MB_RESERVED_OFF_FIFO);
|
||||
flexcan_get_mb(priv, FLEXCAN_TX_MB_RESERVED_RX_FIFO);
|
||||
priv->tx_mb_idx = priv->mb_count - 1;
|
||||
priv->tx_mb = flexcan_get_mb(priv, priv->tx_mb_idx);
|
||||
priv->tx_mask = FLEXCAN_IFLAG_MB(priv->tx_mb_idx);
|
||||
|
||||
priv->offload.mailbox_read = flexcan_mailbox_read;
|
||||
|
||||
if (priv->devtype_data.quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) {
|
||||
priv->offload.mb_first = FLEXCAN_RX_MB_OFF_TIMESTAMP_FIRST;
|
||||
if (priv->devtype_data.quirks & FLEXCAN_QUIRK_USE_RX_MAILBOX) {
|
||||
priv->offload.mb_first = FLEXCAN_RX_MB_RX_MAILBOX_FIRST;
|
||||
priv->offload.mb_last = priv->mb_count - 2;
|
||||
|
||||
priv->rx_mask = GENMASK_ULL(priv->offload.mb_last,
|
||||
|
@ -1532,10 +1532,10 @@ static int flexcan_chip_start(struct net_device *dev)
|
|||
/* MCR
|
||||
*
|
||||
* FIFO:
|
||||
* - disable for timestamp mode
|
||||
* - disable for mailbox mode
|
||||
* - enable for FIFO mode
|
||||
*/
|
||||
if (priv->devtype_data.quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP)
|
||||
if (priv->devtype_data.quirks & FLEXCAN_QUIRK_USE_RX_MAILBOX)
|
||||
reg_mcr &= ~FLEXCAN_MCR_FEN;
|
||||
else
|
||||
reg_mcr |= FLEXCAN_MCR_FEN;
|
||||
|
@ -1631,7 +1631,7 @@ static int flexcan_chip_start(struct net_device *dev)
|
|||
priv->write(reg_fdctrl, ®s->fdctrl);
|
||||
}
|
||||
|
||||
if (priv->devtype_data.quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) {
|
||||
if (priv->devtype_data.quirks & FLEXCAN_QUIRK_USE_RX_MAILBOX) {
|
||||
for (i = priv->offload.mb_first; i <= priv->offload.mb_last; i++) {
|
||||
mb = flexcan_get_mb(priv, i);
|
||||
priv->write(FLEXCAN_MB_CODE_RX_EMPTY,
|
||||
|
@ -1639,7 +1639,7 @@ static int flexcan_chip_start(struct net_device *dev)
|
|||
}
|
||||
} else {
|
||||
/* clear and invalidate unused mailboxes first */
|
||||
for (i = FLEXCAN_TX_MB_RESERVED_OFF_FIFO; i < priv->mb_count; i++) {
|
||||
for (i = FLEXCAN_TX_MB_RESERVED_RX_FIFO; i < priv->mb_count; i++) {
|
||||
mb = flexcan_get_mb(priv, i);
|
||||
priv->write(FLEXCAN_MB_CODE_RX_INACTIVE,
|
||||
&mb->can_ctrl);
|
||||
|
@ -2164,7 +2164,7 @@ static int flexcan_probe(struct platform_device *pdev)
|
|||
return -ENODEV;
|
||||
|
||||
if ((devtype_data->quirks & FLEXCAN_QUIRK_SUPPORT_FD) &&
|
||||
!(devtype_data->quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP)) {
|
||||
!(devtype_data->quirks & FLEXCAN_QUIRK_USE_RX_MAILBOX)) {
|
||||
dev_err(&pdev->dev, "CAN-FD mode doesn't work with FIFO mode!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue