xiaoxiang781216 commented on code in PR #17376:
URL: https://github.com/apache/nuttx/pull/17376#discussion_r2560299645
##########
drivers/eeprom/i2c_xx24xx.c:
##########
@@ -327,6 +327,149 @@ static int ee24xx_writepage(FAR struct ee24xx_dev_s
*eedev, uint32_t memaddr,
return I2C_TRANSFER(eedev->i2c, msgs, 2);
}
+/****************************************************************************
+ * Name: ee24xx_eraseall
+ *
+ * Description:
+ * Erase all data on the device
+ *
+ * Input Parameters:
+ * eedev - Device structure
+ *
+ ****************************************************************************/
+
+static int ee24xx_eraseall(FAR struct ee24xx_dev_s *eedev)
+{
+ FAR uint8_t *buf;
+ off_t offset;
+ int ret;
+
+ DEBUGASSERT(eedev);
+
+ if (eedev->readonly)
+ {
+ return -EACCES;
+ }
+
+ buf = kmm_malloc(eedev->pgsize);
+ if (buf == NULL)
+ {
+ ferr("ERROR: Failed to allocate memory for ee24xx eraseall\n");
+ return -ENOMEM;
+ }
+
+ memset(buf, 0xff, eedev->pgsize);
+
+ ret = nxmutex_lock(&eedev->lock);
+ if (ret < 0)
+ {
+ goto free_buffer;
+ }
+
+ for (offset = 0; offset < eedev->size; offset += eedev->pgsize)
+ {
+ ret = ee24xx_writepage(eedev, offset, (char *)buf, eedev->pgsize);
+ if (ret < 0)
+ {
+ ferr("ERROR: Failed to write page at offset %" PRIdOFF \
Review Comment:
remove \
##########
drivers/eeprom/i2c_xx24xx.c:
##########
@@ -327,6 +327,149 @@ static int ee24xx_writepage(FAR struct ee24xx_dev_s
*eedev, uint32_t memaddr,
return I2C_TRANSFER(eedev->i2c, msgs, 2);
}
+/****************************************************************************
+ * Name: ee24xx_eraseall
+ *
+ * Description:
+ * Erase all data on the device
+ *
+ * Input Parameters:
+ * eedev - Device structure
+ *
+ ****************************************************************************/
+
+static int ee24xx_eraseall(FAR struct ee24xx_dev_s *eedev)
+{
+ FAR uint8_t *buf;
+ off_t offset;
+ int ret;
+
+ DEBUGASSERT(eedev);
+
+ if (eedev->readonly)
+ {
+ return -EACCES;
+ }
+
+ buf = kmm_malloc(eedev->pgsize);
+ if (buf == NULL)
+ {
+ ferr("ERROR: Failed to allocate memory for ee24xx eraseall\n");
+ return -ENOMEM;
+ }
+
+ memset(buf, 0xff, eedev->pgsize);
+
+ ret = nxmutex_lock(&eedev->lock);
+ if (ret < 0)
+ {
+ goto free_buffer;
+ }
+
+ for (offset = 0; offset < eedev->size; offset += eedev->pgsize)
+ {
+ ret = ee24xx_writepage(eedev, offset, (char *)buf, eedev->pgsize);
+ if (ret < 0)
+ {
+ ferr("ERROR: Failed to write page at offset %" PRIdOFF \
+ " (ret = %d)",
+ offset, ret);
+ goto release_semaphore;
+ }
+
+ ret = ee24xx_waitwritecomplete(eedev, offset);
+ if (ret < 0)
+ {
+ ferr("ERROR while waiting for write at offset %" PRIdOFF \
Review Comment:
ditto
##########
drivers/eeprom/i2c_xx24xx.c:
##########
@@ -327,6 +327,149 @@ static int ee24xx_writepage(FAR struct ee24xx_dev_s
*eedev, uint32_t memaddr,
return I2C_TRANSFER(eedev->i2c, msgs, 2);
}
+/****************************************************************************
+ * Name: ee24xx_eraseall
+ *
+ * Description:
+ * Erase all data on the device
+ *
+ * Input Parameters:
+ * eedev - Device structure
+ *
+ ****************************************************************************/
+
+static int ee24xx_eraseall(FAR struct ee24xx_dev_s *eedev)
+{
+ FAR uint8_t *buf;
+ off_t offset;
+ int ret;
+
+ DEBUGASSERT(eedev);
+
+ if (eedev->readonly)
+ {
+ return -EACCES;
+ }
+
+ buf = kmm_malloc(eedev->pgsize);
+ if (buf == NULL)
+ {
+ ferr("ERROR: Failed to allocate memory for ee24xx eraseall\n");
+ return -ENOMEM;
+ }
+
+ memset(buf, 0xff, eedev->pgsize);
+
+ ret = nxmutex_lock(&eedev->lock);
+ if (ret < 0)
+ {
+ goto free_buffer;
+ }
+
+ for (offset = 0; offset < eedev->size; offset += eedev->pgsize)
+ {
+ ret = ee24xx_writepage(eedev, offset, (char *)buf, eedev->pgsize);
Review Comment:
why not change buf to char * to avoid the cast
##########
drivers/eeprom/i2c_xx24xx.c:
##########
@@ -327,6 +327,149 @@ static int ee24xx_writepage(FAR struct ee24xx_dev_s
*eedev, uint32_t memaddr,
return I2C_TRANSFER(eedev->i2c, msgs, 2);
}
+/****************************************************************************
+ * Name: ee24xx_eraseall
+ *
+ * Description:
+ * Erase all data on the device
+ *
+ * Input Parameters:
+ * eedev - Device structure
+ *
+ ****************************************************************************/
+
+static int ee24xx_eraseall(FAR struct ee24xx_dev_s *eedev)
+{
+ FAR uint8_t *buf;
+ off_t offset;
+ int ret;
+
+ DEBUGASSERT(eedev);
+
+ if (eedev->readonly)
+ {
+ return -EACCES;
+ }
+
+ buf = kmm_malloc(eedev->pgsize);
+ if (buf == NULL)
+ {
+ ferr("ERROR: Failed to allocate memory for ee24xx eraseall\n");
+ return -ENOMEM;
+ }
+
+ memset(buf, 0xff, eedev->pgsize);
+
+ ret = nxmutex_lock(&eedev->lock);
+ if (ret < 0)
+ {
+ goto free_buffer;
+ }
+
+ for (offset = 0; offset < eedev->size; offset += eedev->pgsize)
+ {
+ ret = ee24xx_writepage(eedev, offset, (char *)buf, eedev->pgsize);
+ if (ret < 0)
+ {
+ ferr("ERROR: Failed to write page at offset %" PRIdOFF \
+ " (ret = %d)",
+ offset, ret);
+ goto release_semaphore;
+ }
+
+ ret = ee24xx_waitwritecomplete(eedev, offset);
+ if (ret < 0)
+ {
+ ferr("ERROR while waiting for write at offset %" PRIdOFF \
+ " to complete (ret = %d)",
+ offset, ret);
+ goto release_semaphore;
+ }
+ }
+
+release_semaphore:
+ nxmutex_unlock(&eedev->lock);
+
+free_buffer:
+ kmm_free(buf);
+
+ return ret;
+}
+
+/****************************************************************************
+ * Name: ee24xx_erasepage
+ *
+ * Description:
+ * Erase 1 page of data
+ *
+ * Input Parameters:
+ * eedev - Device structure
+ * index - Index of the page to erase
+ *
+ * Returned Value:
+ * Zero (OK) on success; a negated errno value on failure.
+ *
+ ****************************************************************************/
+
+static int ee24xx_erasepage(FAR struct ee24xx_dev_s *eedev,
+ unsigned long index)
+{
+ FAR uint8_t *buf;
+ int ret;
+ off_t offset;
+
+ DEBUGASSERT(eedev);
+ DEBUGASSERT(eedev->pgsize > 0);
+
+ if (eedev->readonly)
+ {
+ return -EACCES;
+ }
+
+ if (index >= (eedev->size / eedev->pgsize))
+ {
+ return -EFBIG;
+ }
+
+ buf = kmm_malloc(eedev->pgsize);
+
+ if (buf == NULL)
+ {
+ ferr("ERROR: Failed to allocate memory for ee24xx_erasepage\n");
+ return -ENOMEM;
+ }
+
+ memset(buf, 0xff, eedev->pgsize);
+
+ ret = nxmutex_lock(&eedev->lock);
+ if (ret < 0)
+ {
+ goto free_buffer;
+ }
+
+ offset = index * eedev->pgsize;
+ ret = ee24xx_writepage(eedev, offset, (char *)buf, eedev->pgsize);
Review Comment:
let's try to remove the cast too
##########
drivers/eeprom/spi_xx25xx.c:
##########
@@ -481,6 +484,254 @@ static void ee25xx_writepage(FAR struct ee25xx_dev_s
*eedev,
ee25xx_unlock(eedev);
}
+/****************************************************************************
+ * Name: ee25xx_eraseall
+ *
+ * Description:
+ * Erase all data on the device
+ *
+ * Input Parameters:
+ * eedev - Device structure
+ *
+ ****************************************************************************/
+
+static int ee25xx_eraseall(FAR struct ee25xx_dev_s *eedev)
+{
+ DEBUGASSERT(eedev);
+ DEBUGASSERT(eedev->pgsize > 0);
+
+ int ret = OK;
Review Comment:
move before DEBUGASSERT
##########
drivers/eeprom/i2c_xx24xx.c:
##########
@@ -327,6 +327,149 @@ static int ee24xx_writepage(FAR struct ee24xx_dev_s
*eedev, uint32_t memaddr,
return I2C_TRANSFER(eedev->i2c, msgs, 2);
}
+/****************************************************************************
+ * Name: ee24xx_eraseall
+ *
+ * Description:
+ * Erase all data on the device
+ *
+ * Input Parameters:
+ * eedev - Device structure
+ *
+ ****************************************************************************/
+
+static int ee24xx_eraseall(FAR struct ee24xx_dev_s *eedev)
+{
+ FAR uint8_t *buf;
+ off_t offset;
+ int ret;
+
+ DEBUGASSERT(eedev);
+
+ if (eedev->readonly)
+ {
+ return -EACCES;
+ }
+
+ buf = kmm_malloc(eedev->pgsize);
+ if (buf == NULL)
+ {
+ ferr("ERROR: Failed to allocate memory for ee24xx eraseall\n");
+ return -ENOMEM;
+ }
+
+ memset(buf, 0xff, eedev->pgsize);
+
+ ret = nxmutex_lock(&eedev->lock);
+ if (ret < 0)
+ {
+ goto free_buffer;
+ }
+
+ for (offset = 0; offset < eedev->size; offset += eedev->pgsize)
+ {
+ ret = ee24xx_writepage(eedev, offset, (char *)buf, eedev->pgsize);
+ if (ret < 0)
+ {
+ ferr("ERROR: Failed to write page at offset %" PRIdOFF \
+ " (ret = %d)",
+ offset, ret);
+ goto release_semaphore;
+ }
+
+ ret = ee24xx_waitwritecomplete(eedev, offset);
+ if (ret < 0)
+ {
+ ferr("ERROR while waiting for write at offset %" PRIdOFF \
+ " to complete (ret = %d)",
+ offset, ret);
+ goto release_semaphore;
+ }
+ }
+
+release_semaphore:
+ nxmutex_unlock(&eedev->lock);
+
+free_buffer:
+ kmm_free(buf);
+
+ return ret;
+}
+
+/****************************************************************************
+ * Name: ee24xx_erasepage
+ *
+ * Description:
+ * Erase 1 page of data
+ *
+ * Input Parameters:
+ * eedev - Device structure
+ * index - Index of the page to erase
+ *
+ * Returned Value:
+ * Zero (OK) on success; a negated errno value on failure.
+ *
+ ****************************************************************************/
+
+static int ee24xx_erasepage(FAR struct ee24xx_dev_s *eedev,
+ unsigned long index)
+{
+ FAR uint8_t *buf;
+ int ret;
+ off_t offset;
+
+ DEBUGASSERT(eedev);
+ DEBUGASSERT(eedev->pgsize > 0);
+
+ if (eedev->readonly)
+ {
+ return -EACCES;
+ }
+
+ if (index >= (eedev->size / eedev->pgsize))
+ {
+ return -EFBIG;
+ }
+
+ buf = kmm_malloc(eedev->pgsize);
+
+ if (buf == NULL)
+ {
+ ferr("ERROR: Failed to allocate memory for ee24xx_erasepage\n");
+ return -ENOMEM;
+ }
+
+ memset(buf, 0xff, eedev->pgsize);
+
+ ret = nxmutex_lock(&eedev->lock);
+ if (ret < 0)
+ {
+ goto free_buffer;
+ }
+
+ offset = index * eedev->pgsize;
+ ret = ee24xx_writepage(eedev, offset, (char *)buf, eedev->pgsize);
+ if (ret < 0)
+ {
+ ferr("ERROR: Failed to write page (ret = %d)", ret);
+ goto release_semaphore;
+ }
+
+ ret = ee24xx_waitwritecomplete(eedev, offset);
+ if (ret < 0)
+ {
+ ferr("ERROR while waiting for write to complete (ret = %d)", ret);
+ }
+
+release_semaphore:
+ nxmutex_unlock(&eedev->lock);
+
+free_buffer:
+ kmm_free(buf);
+
Review Comment:
remove blank line
##########
drivers/eeprom/i2c_xx24xx.c:
##########
@@ -327,6 +327,149 @@ static int ee24xx_writepage(FAR struct ee24xx_dev_s
*eedev, uint32_t memaddr,
return I2C_TRANSFER(eedev->i2c, msgs, 2);
}
+/****************************************************************************
+ * Name: ee24xx_eraseall
+ *
+ * Description:
+ * Erase all data on the device
+ *
+ * Input Parameters:
+ * eedev - Device structure
+ *
+ ****************************************************************************/
+
+static int ee24xx_eraseall(FAR struct ee24xx_dev_s *eedev)
+{
+ FAR uint8_t *buf;
+ off_t offset;
+ int ret;
+
+ DEBUGASSERT(eedev);
+
+ if (eedev->readonly)
+ {
+ return -EACCES;
+ }
+
+ buf = kmm_malloc(eedev->pgsize);
+ if (buf == NULL)
+ {
+ ferr("ERROR: Failed to allocate memory for ee24xx eraseall\n");
+ return -ENOMEM;
+ }
+
+ memset(buf, 0xff, eedev->pgsize);
+
+ ret = nxmutex_lock(&eedev->lock);
+ if (ret < 0)
+ {
+ goto free_buffer;
+ }
+
+ for (offset = 0; offset < eedev->size; offset += eedev->pgsize)
+ {
+ ret = ee24xx_writepage(eedev, offset, (char *)buf, eedev->pgsize);
+ if (ret < 0)
+ {
+ ferr("ERROR: Failed to write page at offset %" PRIdOFF \
+ " (ret = %d)",
+ offset, ret);
+ goto release_semaphore;
+ }
+
+ ret = ee24xx_waitwritecomplete(eedev, offset);
+ if (ret < 0)
+ {
+ ferr("ERROR while waiting for write at offset %" PRIdOFF \
+ " to complete (ret = %d)",
+ offset, ret);
+ goto release_semaphore;
+ }
+ }
+
+release_semaphore:
+ nxmutex_unlock(&eedev->lock);
+
+free_buffer:
+ kmm_free(buf);
+
Review Comment:
remove blank line
##########
drivers/eeprom/spi_xx25xx.c:
##########
@@ -481,6 +484,254 @@ static void ee25xx_writepage(FAR struct ee25xx_dev_s
*eedev,
ee25xx_unlock(eedev);
}
+/****************************************************************************
+ * Name: ee25xx_eraseall
+ *
+ * Description:
+ * Erase all data on the device
+ *
+ * Input Parameters:
+ * eedev - Device structure
+ *
+ ****************************************************************************/
+
+static int ee25xx_eraseall(FAR struct ee25xx_dev_s *eedev)
+{
+ DEBUGASSERT(eedev);
+ DEBUGASSERT(eedev->pgsize > 0);
+
+ int ret = OK;
+ off_t offset;
+ FAR uint8_t *buf;
+
+ if (eedev->readonly)
+ {
+ return -EACCES;
+ }
+
+ /* Devices with different page and sector sizes support a dedicated command
+ * for chip erasure
+ */
+
+ if (eedev->pgsize != eedev->secsize)
+ {
+ ret = nxmutex_lock(&eedev->lock);
+ if (ret < 0)
+ {
+ return ret;
+ }
+
+ ee25xx_writeenable(eedev, true);
+
+ ee25xx_lock(eedev);
+ SPI_SELECT(eedev->spi, SPIDEV_EEPROM(eedev->devid), true);
+
+ SPI_SEND(eedev->spi, EEP25XX_CMD_CE);
+
+ SPI_SELECT(eedev->spi, SPIDEV_EEPROM(eedev->devid), false);
+ ee25xx_unlock(eedev);
+
+ ee25xx_waitwritecomplete(eedev);
+
+ nxmutex_unlock(&eedev->lock);
+ }
+
+ /* If there is no dedicated command for erasure, write the entire memory to
+ * its default state
+ */
+
+ else
+ {
+ buf = kmm_malloc(eedev->pgsize);
+ if (buf == NULL)
+ {
+ ferr("ERROR: Failed to allocate memory for ee25xx eraseall\n");
+ return -ENOMEM;
+ }
+
+ memset(buf, EE25XX_DUMMY, eedev->pgsize);
+
+ ret = nxmutex_lock(&eedev->lock);
+ if (ret < 0)
+ {
+ goto free_buffer;
+ }
+
+ for (offset = 0; offset < eedev->size; offset += eedev->pgsize)
+ {
+ ee25xx_writeenable(eedev, true);
+ ee25xx_writepage(eedev, offset, (char *)buf, eedev->pgsize);
Review Comment:
remove the cast too
##########
drivers/eeprom/spi_xx25xx.c:
##########
@@ -481,6 +484,254 @@ static void ee25xx_writepage(FAR struct ee25xx_dev_s
*eedev,
ee25xx_unlock(eedev);
}
+/****************************************************************************
+ * Name: ee25xx_eraseall
+ *
+ * Description:
+ * Erase all data on the device
+ *
+ * Input Parameters:
+ * eedev - Device structure
+ *
+ ****************************************************************************/
+
+static int ee25xx_eraseall(FAR struct ee25xx_dev_s *eedev)
+{
+ DEBUGASSERT(eedev);
+ DEBUGASSERT(eedev->pgsize > 0);
+
+ int ret = OK;
+ off_t offset;
+ FAR uint8_t *buf;
+
+ if (eedev->readonly)
+ {
+ return -EACCES;
+ }
+
+ /* Devices with different page and sector sizes support a dedicated command
+ * for chip erasure
+ */
+
+ if (eedev->pgsize != eedev->secsize)
+ {
+ ret = nxmutex_lock(&eedev->lock);
+ if (ret < 0)
+ {
+ return ret;
+ }
+
+ ee25xx_writeenable(eedev, true);
+
+ ee25xx_lock(eedev);
+ SPI_SELECT(eedev->spi, SPIDEV_EEPROM(eedev->devid), true);
+
+ SPI_SEND(eedev->spi, EEP25XX_CMD_CE);
+
+ SPI_SELECT(eedev->spi, SPIDEV_EEPROM(eedev->devid), false);
+ ee25xx_unlock(eedev);
+
+ ee25xx_waitwritecomplete(eedev);
+
+ nxmutex_unlock(&eedev->lock);
+ }
+
+ /* If there is no dedicated command for erasure, write the entire memory to
+ * its default state
+ */
+
+ else
+ {
+ buf = kmm_malloc(eedev->pgsize);
+ if (buf == NULL)
+ {
+ ferr("ERROR: Failed to allocate memory for ee25xx eraseall\n");
+ return -ENOMEM;
+ }
+
+ memset(buf, EE25XX_DUMMY, eedev->pgsize);
+
+ ret = nxmutex_lock(&eedev->lock);
+ if (ret < 0)
+ {
+ goto free_buffer;
+ }
+
+ for (offset = 0; offset < eedev->size; offset += eedev->pgsize)
+ {
+ ee25xx_writeenable(eedev, true);
+ ee25xx_writepage(eedev, offset, (char *)buf, eedev->pgsize);
+ ee25xx_waitwritecomplete(eedev);
+ }
+
+ nxmutex_unlock(&eedev->lock);
+
+free_buffer:
+ kmm_free(buf);
+ }
+
+ return ret;
+}
+
+/****************************************************************************
+ * Name: ee25xx_erasepage
+ *
+ * Description:
+ * Erase 1 page of data
+ *
+ * Input Parameters:
+ * eedev - Device structure
+ * index - Index of the page to erase
+ *
+ * Returned Value:
+ * Zero (OK) on success; a negated errno value on failure.
+ *
+ ****************************************************************************/
+
+static int ee25xx_erasepage(FAR struct ee25xx_dev_s *eedev,
+ unsigned long index)
+{
+ int ret = OK;
+ FAR uint8_t *buf;
+
+ DEBUGASSERT(eedev);
+ DEBUGASSERT(eedev->pgsize > 0);
+
+ if (eedev->readonly)
+ {
+ return -EACCES;
+ }
+
+ if (index >= (eedev->size / eedev->pgsize))
+ {
+ return -EFBIG;
+ }
+
+ /* Devices with different page and sector sizes support a dedicated command
+ * for page erasure
+ */
+
+ if (eedev->pgsize != eedev->secsize)
+ {
+ ret = nxmutex_lock(&eedev->lock);
+ if (ret < 0)
+ {
+ return ret;
+ }
+
+ ee25xx_writeenable(eedev, true);
+
+ ee25xx_lock(eedev);
+ SPI_SELECT(eedev->spi, SPIDEV_EEPROM(eedev->devid), true);
+
+ ee25xx_sendcmd(eedev->spi, EEP25XX_CMD_PE, eedev->addrlen,
+ index * eedev->pgsize);
+
+ SPI_SELECT(eedev->spi, SPIDEV_EEPROM(eedev->devid), false);
+ ee25xx_unlock(eedev);
+
+ ee25xx_waitwritecomplete(eedev);
+
+ nxmutex_unlock(&eedev->lock);
+ }
+
+ /* If there is no dedicated command for erasure, write the page to its
+ * default state
+ */
+
+ else
+ {
+ buf = kmm_malloc(eedev->pgsize);
+ if (buf == NULL)
+ {
+ ferr("ERROR: Failed to allocate memory for ee25xx_erasepage\n");
+ return -ENOMEM;
+ }
+
+ memset(buf, EE25XX_DUMMY, eedev->pgsize);
+
+ ret = nxmutex_lock(&eedev->lock);
+ if (ret < 0)
+ {
+ goto free_buffer;
+ }
+
+ ee25xx_writeenable(eedev, true);
+ ee25xx_writepage(eedev, index * eedev->pgsize, (char *)buf,
Review Comment:
remove the cast too
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]