Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions arch/arm/src/imxrt/imxrt_allocateheap.c
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,7 @@ void up_allocate_kheap(void **heap_start, size_t *heap_size)
CONFIG_MM_KERNEL_HEAPSIZE;
size_t usize = PRIMARY_RAM_END - ubase;
int log2;

DEBUGASSERT(ubase < (uintptr_t)PRIMARY_RAM_END);

/* Adjust that size to account for MPU alignment requirements.
Expand Down
28 changes: 14 additions & 14 deletions arch/arm/src/imxrt/imxrt_irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -294,55 +294,55 @@ static int imxrt_irqinfo(int irq, uintptr_t *regaddr, uint32_t *bit,
{
if (extint < 32)
{
*regaddr = (NVIC_IRQ0_31_ENABLE + offset);
*bit = 1 << extint;
*regaddr = (NVIC_IRQ0_31_ENABLE + offset);
*bit = 1 << extint;
}
else
#if IMXRT_IRQ_NEXTINT > 32
if (extint < 64)
{
*regaddr = (NVIC_IRQ32_63_ENABLE + offset);
*bit = 1 << (extint - 32);
*regaddr = (NVIC_IRQ32_63_ENABLE + offset);
*bit = 1 << (extint - 32);
}
else
#endif
#if IMXRT_IRQ_NEXTINT > 64
if (extint < 96)
{
*regaddr = (NVIC_IRQ64_95_ENABLE + offset);
*bit = 1 << (extint - 64);
*regaddr = (NVIC_IRQ64_95_ENABLE + offset);
*bit = 1 << (extint - 64);
}
else
#endif
#if IMXRT_IRQ_NEXTINT > 96
if (extint < 128)
{
*regaddr = (NVIC_IRQ96_127_ENABLE + offset);
*bit = 1 << (extint - 96);
*regaddr = (NVIC_IRQ96_127_ENABLE + offset);
*bit = 1 << (extint - 96);
}
else
#endif
#if IMXRT_IRQ_NEXTINT > 128
if (extint < 160)
{
*regaddr = (NVIC_IRQ128_159_ENABLE + offset);
*bit = 1 << (extint - 128);
*regaddr = (NVIC_IRQ128_159_ENABLE + offset);
*bit = 1 << (extint - 128);
}
else
#endif
#if IMXRT_IRQ_NEXTINT > 160
if (extint < 192)
{
*regaddr = (NVIC_IRQ160_191_ENABLE + offset);
*bit = 1 << (extint - 160);
*regaddr = (NVIC_IRQ160_191_ENABLE + offset);
*bit = 1 << (extint - 160);
}
else
#endif
#if IMXRT_IRQ_NEXTINT > 192
if (extint < 219)
{
*regaddr = (NVIC_IRQ192_223_ENABLE + offset);
*bit = 1 << (extint - 192);
*regaddr = (NVIC_IRQ192_223_ENABLE + offset);
*bit = 1 << (extint - 192);
}
else
#endif
Expand Down
68 changes: 46 additions & 22 deletions arch/arm/src/imxrt/imxrt_lpi2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -1653,6 +1653,7 @@ static int imxrt_lpi2c_isr(int irq, void *context, void *arg)

DEBUGASSERT(priv != NULL);
int rv = imxrt_lpi2c_isr_process(priv);

return rv;
}
#endif
Expand Down Expand Up @@ -1862,6 +1863,7 @@ static int imxrt_lpi2c_deinit(struct imxrt_lpi2c_priv_s *priv)
static int imxrt_lpi2c_dma_configure_mder(struct imxrt_lpi2c_priv_s *priv)
{
struct imxrt_edma_xfrconfig_s config;

memset(&config, 0, sizeof(config));

config.saddr = (uint32_t) &g_lpi2c_mder_rdde;
Expand Down Expand Up @@ -1894,6 +1896,7 @@ static int imxrt_lpi2c_dma_command_configure(struct imxrt_lpi2c_priv_s *priv,
uint16_t *ccmd, uint32_t ncmd)
{
struct imxrt_edma_xfrconfig_s config;

memset(&config, 0, sizeof(config));

config.saddr = (uint32_t) ccmd;
Expand Down Expand Up @@ -1926,6 +1929,7 @@ static int imxrt_lpi2c_dma_data_configure(struct imxrt_lpi2c_priv_s *priv,
struct i2c_msg_s *msg)
{
struct imxrt_edma_xfrconfig_s config;

memset(&config, 0, sizeof(config));

config.iter = msg->length;
Expand Down Expand Up @@ -2250,8 +2254,8 @@ static int imxrt_lpi2c_transfer(struct i2c_master_s *dev,
{
if (msgs[m].flags & I2C_M_READ)
{
up_invalidate_dcache((uintptr_t)msgs[m].buffer,
(uintptr_t)msgs[m].buffer + msgs[m].length);
up_invalidate_dcache((uintptr_t)msgs[m].buffer,
(uintptr_t)msgs[m].buffer + msgs[m].length);
}
}
}
Expand Down Expand Up @@ -2419,37 +2423,57 @@ struct i2c_master_s *imxrt_i2cbus_initialize(int port)
switch (port)
{
#ifdef CONFIG_IMXRT_LPI2C1
case 1:
priv = (struct imxrt_lpi2c_priv_s *)&imxrt_lpi2c1_priv;
break;
case 1:
{
priv = (struct imxrt_lpi2c_priv_s *)&imxrt_lpi2c1_priv;
break;
}

#endif
#ifdef CONFIG_IMXRT_LPI2C2
case 2:
priv = (struct imxrt_lpi2c_priv_s *)&imxrt_lpi2c2_priv;
break;
case 2:
{
priv = (struct imxrt_lpi2c_priv_s *)&imxrt_lpi2c2_priv;
break;
}

#endif
#ifdef CONFIG_IMXRT_LPI2C3
case 3:
priv = (struct imxrt_lpi2c_priv_s *)&imxrt_lpi2c3_priv;
break;
case 3:
{
priv = (struct imxrt_lpi2c_priv_s *)&imxrt_lpi2c3_priv;
break;
}

#endif
#ifdef CONFIG_IMXRT_LPI2C4
case 4:
priv = (struct imxrt_lpi2c_priv_s *)&imxrt_lpi2c4_priv;
break;
case 4:
{
priv = (struct imxrt_lpi2c_priv_s *)&imxrt_lpi2c4_priv;
break;
}

#endif
#ifdef CONFIG_IMXRT_LPI2C5
case 5:
priv = (struct imxrt_lpi2c_priv_s *)&imxrt_lpi2c5_priv;
break;
case 5:
{
priv = (struct imxrt_lpi2c_priv_s *)&imxrt_lpi2c5_priv;
break;
}

#endif
#ifdef CONFIG_IMXRT_LPI2C6
case 6:
priv = (struct imxrt_lpi2c_priv_s *)&imxrt_lpi2c6_priv;
break;
case 6:
{
priv = (struct imxrt_lpi2c_priv_s *)&imxrt_lpi2c6_priv;
break;
}

#endif
default:
return NULL;
default:
{
return NULL;
}
}

/* Initialize private data for the first time, increment reference count,
Expand Down
93 changes: 55 additions & 38 deletions arch/arm/src/imxrt/imxrt_lpspi.c
Original file line number Diff line number Diff line change
Expand Up @@ -681,26 +681,32 @@ static inline void imxrt_lpspi_master_set_delay_scaler(
{
switch (type)
{
case LPSPI_PCS_TO_SCK:
imxrt_lpspi_modifyreg32(priv, IMXRT_LPSPI_CCR_OFFSET,
LPSPI_CCR_PCSSCK_MASK, 0);
imxrt_lpspi_modifyreg32(priv, IMXRT_LPSPI_CCR_OFFSET, 0,
LPSPI_CCR_PCSSCK(scaler));
break;
case LPSPI_PCS_TO_SCK:
{
imxrt_lpspi_modifyreg32(priv, IMXRT_LPSPI_CCR_OFFSET,
LPSPI_CCR_PCSSCK_MASK, 0);
imxrt_lpspi_modifyreg32(priv, IMXRT_LPSPI_CCR_OFFSET, 0,
LPSPI_CCR_PCSSCK(scaler));
break;
}

case LPSPI_LAST_SCK_TO_PCS:
imxrt_lpspi_modifyreg32(priv, IMXRT_LPSPI_CCR_OFFSET,
LPSPI_CCR_SCKPCS_MASK, 0);
imxrt_lpspi_modifyreg32(priv, IMXRT_LPSPI_CCR_OFFSET, 0,
LPSPI_CCR_SCKPCS(scaler));
break;
case LPSPI_LAST_SCK_TO_PCS:
{
imxrt_lpspi_modifyreg32(priv, IMXRT_LPSPI_CCR_OFFSET,
LPSPI_CCR_SCKPCS_MASK, 0);
imxrt_lpspi_modifyreg32(priv, IMXRT_LPSPI_CCR_OFFSET, 0,
LPSPI_CCR_SCKPCS(scaler));
break;
}

case LPSPI_BETWEEN_TRANSFER:
imxrt_lpspi_modifyreg32(priv, IMXRT_LPSPI_CCR_OFFSET,
LPSPI_CCR_DBT_MASK, 0);
imxrt_lpspi_modifyreg32(priv, IMXRT_LPSPI_CCR_OFFSET, 0,
LPSPI_CCR_DBT(scaler));
break;
case LPSPI_BETWEEN_TRANSFER:
{
imxrt_lpspi_modifyreg32(priv, IMXRT_LPSPI_CCR_OFFSET,
LPSPI_CCR_DBT_MASK, 0);
imxrt_lpspi_modifyreg32(priv, IMXRT_LPSPI_CCR_OFFSET, 0,
LPSPI_CCR_DBT(scaler));
break;
}
}
}

Expand Down Expand Up @@ -1123,28 +1129,38 @@ static void imxrt_lpspi_setmode(struct spi_dev_s *dev,

switch (mode)
{
case SPIDEV_MODE0: /* CPOL=0; CPHA=0 */
setbits = 0;
clrbits = LPSPI_TCR_CPOL | LPSPI_TCR_CPHA;
break;
case SPIDEV_MODE0: /* CPOL=0; CPHA=0 */
{
setbits = 0;
clrbits = LPSPI_TCR_CPOL | LPSPI_TCR_CPHA;
break;
}

case SPIDEV_MODE1: /* CPOL=0; CPHA=1 */
setbits = LPSPI_TCR_CPHA;
clrbits = LPSPI_TCR_CPOL;
break;
case SPIDEV_MODE1: /* CPOL=0; CPHA=1 */
{
setbits = LPSPI_TCR_CPHA;
clrbits = LPSPI_TCR_CPOL;
break;
}

case SPIDEV_MODE2: /* CPOL=1; CPHA=0 */
setbits = LPSPI_TCR_CPOL;
clrbits = LPSPI_TCR_CPHA;
break;
case SPIDEV_MODE2: /* CPOL=1; CPHA=0 */
{
setbits = LPSPI_TCR_CPOL;
clrbits = LPSPI_TCR_CPHA;
break;
}

case SPIDEV_MODE3: /* CPOL=1; CPHA=1 */
setbits = LPSPI_TCR_CPOL | LPSPI_TCR_CPHA;
clrbits = 0;
break;
case SPIDEV_MODE3: /* CPOL=1; CPHA=1 */
{
setbits = LPSPI_TCR_CPOL | LPSPI_TCR_CPHA;
clrbits = 0;
break;
}

default:
return;
default:
{
return;
}
}

imxrt_lpspi_modifyreg32(priv, IMXRT_LPSPI_TCR_OFFSET,
Expand Down Expand Up @@ -1361,6 +1377,7 @@ static void imxrt_lpspi_exchange_nodma(struct spi_dev_s *dev,
#endif
{
struct imxrt_lpspidev_s *priv = (struct imxrt_lpspidev_s *)dev;

DEBUGASSERT(priv && priv->spibase);

spiinfo("txbuffer=%p rxbuffer=%p nwords=%d\n", txbuffer, rxbuffer, nwords);
Expand Down Expand Up @@ -1581,8 +1598,8 @@ static void imxrt_lpspi_exchange(struct spi_dev_s *dev,

if (rxbuffer)
{
up_invalidate_dcache((uintptr_t)rxbuffer,
(uintptr_t)rxbuffer + nbytes);
up_invalidate_dcache((uintptr_t)rxbuffer,
(uintptr_t)rxbuffer + nbytes);
}
}

Expand Down
1 change: 1 addition & 0 deletions arch/arm/src/imxrt/imxrt_ocotp.c
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,7 @@ int imxrt_ocotp_read(uint32_t otp_index, uint32_t *data)
int imxrt_ocotp_write(uint32_t otp_index, uint32_t data)
{
int ret;

ret = imxrt_ocotp_wait_for_completion(OCOTP_OPT_TIMEOUT_MS);
if (ret == OK)
{
Expand Down
Loading
Loading