Skip to content

Commit b28a55d

Browse files
committed
Miscellaneous fixes and clean-ups
Merge series from Santhosh Kumar K <[email protected]>: This series introduces some small but important fixes and cleanups in the Cadence QSPI Controller. Tested on TI's AM62A SK and AM62P SK: Logs: https://gist.github.com/santhosh21/0d25767b58d9a1d9624f2c502dd8f36b
2 parents 18dda9e + d9e33b3 commit b28a55d

1 file changed

Lines changed: 21 additions & 13 deletions

File tree

drivers/spi/spi-cadence-quadspi.c

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ static bool cqspi_is_idle(struct cqspi_st *cqspi)
335335
{
336336
u32 reg = readl(cqspi->iobase + CQSPI_REG_CONFIG);
337337

338-
return reg & (1UL << CQSPI_REG_CONFIG_IDLE_LSB);
338+
return reg & BIT(CQSPI_REG_CONFIG_IDLE_LSB);
339339
}
340340

341341
static u32 cqspi_get_rd_sram_level(struct cqspi_st *cqspi)
@@ -571,15 +571,15 @@ static int cqspi_command_read(struct cqspi_flash_pdata *f_pdata,
571571
reg |= (dummy_clk & CQSPI_REG_CMDCTRL_DUMMY_MASK)
572572
<< CQSPI_REG_CMDCTRL_DUMMY_LSB;
573573

574-
reg |= (0x1 << CQSPI_REG_CMDCTRL_RD_EN_LSB);
574+
reg |= BIT(CQSPI_REG_CMDCTRL_RD_EN_LSB);
575575

576576
/* 0 means 1 byte. */
577577
reg |= (((n_rx - 1) & CQSPI_REG_CMDCTRL_RD_BYTES_MASK)
578578
<< CQSPI_REG_CMDCTRL_RD_BYTES_LSB);
579579

580580
/* setup ADDR BIT field */
581581
if (op->addr.nbytes) {
582-
reg |= (0x1 << CQSPI_REG_CMDCTRL_ADDR_EN_LSB);
582+
reg |= BIT(CQSPI_REG_CMDCTRL_ADDR_EN_LSB);
583583
reg |= ((op->addr.nbytes - 1) &
584584
CQSPI_REG_CMDCTRL_ADD_BYTES_MASK)
585585
<< CQSPI_REG_CMDCTRL_ADD_BYTES_LSB;
@@ -646,7 +646,7 @@ static int cqspi_command_write(struct cqspi_flash_pdata *f_pdata,
646646
reg = opcode << CQSPI_REG_CMDCTRL_OPCODE_LSB;
647647

648648
if (op->addr.nbytes) {
649-
reg |= (0x1 << CQSPI_REG_CMDCTRL_ADDR_EN_LSB);
649+
reg |= BIT(CQSPI_REG_CMDCTRL_ADDR_EN_LSB);
650650
reg |= ((op->addr.nbytes - 1) &
651651
CQSPI_REG_CMDCTRL_ADD_BYTES_MASK)
652652
<< CQSPI_REG_CMDCTRL_ADD_BYTES_LSB;
@@ -655,7 +655,7 @@ static int cqspi_command_write(struct cqspi_flash_pdata *f_pdata,
655655
}
656656

657657
if (n_tx) {
658-
reg |= (0x1 << CQSPI_REG_CMDCTRL_WR_EN_LSB);
658+
reg |= BIT(CQSPI_REG_CMDCTRL_WR_EN_LSB);
659659
reg |= ((n_tx - 1) & CQSPI_REG_CMDCTRL_WR_BYTES_MASK)
660660
<< CQSPI_REG_CMDCTRL_WR_BYTES_LSB;
661661
data = 0;
@@ -719,6 +719,7 @@ static int cqspi_read_setup(struct cqspi_flash_pdata *f_pdata,
719719
reg &= ~CQSPI_REG_SIZE_ADDRESS_MASK;
720720
reg |= (op->addr.nbytes - 1);
721721
writel(reg, reg_base + CQSPI_REG_SIZE);
722+
readl(reg_base + CQSPI_REG_SIZE); /* Flush posted write. */
722723
return 0;
723724
}
724725

@@ -764,6 +765,7 @@ static int cqspi_indirect_read_execute(struct cqspi_flash_pdata *f_pdata,
764765
reinit_completion(&cqspi->transfer_complete);
765766
writel(CQSPI_REG_INDIRECTRD_START_MASK,
766767
reg_base + CQSPI_REG_INDIRECTRD);
768+
readl(reg_base + CQSPI_REG_INDIRECTRD); /* Flush posted write. */
767769

768770
while (remaining > 0) {
769771
if (use_irq &&
@@ -1062,6 +1064,7 @@ static int cqspi_write_setup(struct cqspi_flash_pdata *f_pdata,
10621064
reg &= ~CQSPI_REG_SIZE_ADDRESS_MASK;
10631065
reg |= (op->addr.nbytes - 1);
10641066
writel(reg, reg_base + CQSPI_REG_SIZE);
1067+
readl(reg_base + CQSPI_REG_SIZE); /* Flush posted write. */
10651068
return 0;
10661069
}
10671070

@@ -1090,6 +1093,8 @@ static int cqspi_indirect_write_execute(struct cqspi_flash_pdata *f_pdata,
10901093
reinit_completion(&cqspi->transfer_complete);
10911094
writel(CQSPI_REG_INDIRECTWR_START_MASK,
10921095
reg_base + CQSPI_REG_INDIRECTWR);
1096+
readl(reg_base + CQSPI_REG_INDIRECTWR); /* Flush posted write. */
1097+
10931098
/*
10941099
* As per 66AK2G02 TRM SPRUHY8F section 11.15.5.3 Indirect Access
10951100
* Controller programming sequence, couple of cycles of
@@ -1186,7 +1191,7 @@ static void cqspi_chipselect(struct cqspi_flash_pdata *f_pdata)
11861191
* CS2 to 4b'1011
11871192
* CS3 to 4b'0111
11881193
*/
1189-
chip_select = 0xF & ~(1 << chip_select);
1194+
chip_select = 0xF & ~BIT(chip_select);
11901195
}
11911196

11921197
reg &= ~(CQSPI_REG_CONFIG_CHIPSELECT_MASK
@@ -1272,9 +1277,9 @@ static void cqspi_readdata_capture(struct cqspi_st *cqspi,
12721277
reg = readl(reg_base + CQSPI_REG_READCAPTURE);
12731278

12741279
if (bypass)
1275-
reg |= (1 << CQSPI_REG_READCAPTURE_BYPASS_LSB);
1280+
reg |= BIT(CQSPI_REG_READCAPTURE_BYPASS_LSB);
12761281
else
1277-
reg &= ~(1 << CQSPI_REG_READCAPTURE_BYPASS_LSB);
1282+
reg &= ~BIT(CQSPI_REG_READCAPTURE_BYPASS_LSB);
12781283

12791284
reg &= ~(CQSPI_REG_READCAPTURE_DELAY_MASK
12801285
<< CQSPI_REG_READCAPTURE_DELAY_LSB);
@@ -1717,12 +1722,10 @@ static const struct spi_controller_mem_caps cqspi_mem_caps = {
17171722

17181723
static int cqspi_setup_flash(struct cqspi_st *cqspi)
17191724
{
1720-
unsigned int max_cs = cqspi->num_chipselect - 1;
17211725
struct platform_device *pdev = cqspi->pdev;
17221726
struct device *dev = &pdev->dev;
17231727
struct cqspi_flash_pdata *f_pdata;
1724-
unsigned int cs;
1725-
int ret;
1728+
int ret, cs, max_cs = -1;
17261729

17271730
/* Get flash device data */
17281731
for_each_available_child_of_node_scoped(dev->of_node, np) {
@@ -1735,10 +1738,10 @@ static int cqspi_setup_flash(struct cqspi_st *cqspi)
17351738
if (cs >= cqspi->num_chipselect) {
17361739
dev_err(dev, "Chip select %d out of range.\n", cs);
17371740
return -EINVAL;
1738-
} else if (cs < max_cs) {
1739-
max_cs = cs;
17401741
}
17411742

1743+
max_cs = max_t(int, cs, max_cs);
1744+
17421745
f_pdata = &cqspi->f_pdata[cs];
17431746
f_pdata->cqspi = cqspi;
17441747
f_pdata->cs = cs;
@@ -1748,6 +1751,11 @@ static int cqspi_setup_flash(struct cqspi_st *cqspi)
17481751
return ret;
17491752
}
17501753

1754+
if (max_cs < 0) {
1755+
dev_err(dev, "No flash device declared\n");
1756+
return -ENODEV;
1757+
}
1758+
17511759
cqspi->num_chipselect = max_cs + 1;
17521760
return 0;
17531761
}

0 commit comments

Comments
 (0)