Loading drivers/net/sfc/mtd.c +14 −9 Original line number Original line Diff line number Diff line Loading @@ -15,7 +15,6 @@ #include <linux/slab.h> #include <linux/slab.h> #include <linux/rtnetlink.h> #include <linux/rtnetlink.h> #define EFX_DRIVER_NAME "sfc_mtd" #include "net_driver.h" #include "net_driver.h" #include "spi.h" #include "spi.h" #include "efx.h" #include "efx.h" Loading Loading @@ -71,8 +70,10 @@ static int siena_mtd_probe(struct efx_nic *efx); /* SPI utilities */ /* SPI utilities */ static int efx_spi_slow_wait(struct efx_mtd *efx_mtd, bool uninterruptible) static int efx_spi_slow_wait(struct efx_mtd_partition *part, bool uninterruptible) { { struct efx_mtd *efx_mtd = part->mtd.priv; const struct efx_spi_device *spi = efx_mtd->spi; const struct efx_spi_device *spi = efx_mtd->spi; struct efx_nic *efx = efx_mtd->efx; struct efx_nic *efx = efx_mtd->efx; u8 status; u8 status; Loading @@ -92,7 +93,7 @@ static int efx_spi_slow_wait(struct efx_mtd *efx_mtd, bool uninterruptible) if (signal_pending(current)) if (signal_pending(current)) return -EINTR; return -EINTR; } } EFX_ERR(efx, "timed out waiting for %s\n", efx_mtd->name); pr_err("%s: timed out waiting for %s\n", part->name, efx_mtd->name); return -ETIMEDOUT; return -ETIMEDOUT; } } Loading Loading @@ -131,8 +132,10 @@ efx_spi_unlock(struct efx_nic *efx, const struct efx_spi_device *spi) return 0; return 0; } } static int efx_spi_erase(struct efx_mtd *efx_mtd, loff_t start, size_t len) static int efx_spi_erase(struct efx_mtd_partition *part, loff_t start, size_t len) { { struct efx_mtd *efx_mtd = part->mtd.priv; const struct efx_spi_device *spi = efx_mtd->spi; const struct efx_spi_device *spi = efx_mtd->spi; struct efx_nic *efx = efx_mtd->efx; struct efx_nic *efx = efx_mtd->efx; unsigned pos, block_len; unsigned pos, block_len; Loading @@ -156,7 +159,7 @@ static int efx_spi_erase(struct efx_mtd *efx_mtd, loff_t start, size_t len) NULL, 0); NULL, 0); if (rc) if (rc) return rc; return rc; rc = efx_spi_slow_wait(efx_mtd, false); rc = efx_spi_slow_wait(part, false); /* Verify the entire region has been wiped */ /* Verify the entire region has been wiped */ memset(empty, 0xff, sizeof(empty)); memset(empty, 0xff, sizeof(empty)); Loading Loading @@ -198,13 +201,14 @@ static int efx_mtd_erase(struct mtd_info *mtd, struct erase_info *erase) static void efx_mtd_sync(struct mtd_info *mtd) static void efx_mtd_sync(struct mtd_info *mtd) { { struct efx_mtd_partition *part = to_efx_mtd_partition(mtd); struct efx_mtd *efx_mtd = mtd->priv; struct efx_mtd *efx_mtd = mtd->priv; struct efx_nic *efx = efx_mtd->efx; int rc; int rc; rc = efx_mtd->ops->sync(mtd); rc = efx_mtd->ops->sync(mtd); if (rc) if (rc) EFX_ERR(efx, "%s sync failed (%d)\n", efx_mtd->name, rc); pr_err("%s: %s sync failed (%d)\n", part->name, efx_mtd->name, rc); } } static void efx_mtd_remove_partition(struct efx_mtd_partition *part) static void efx_mtd_remove_partition(struct efx_mtd_partition *part) Loading Loading @@ -338,7 +342,7 @@ static int falcon_mtd_erase(struct mtd_info *mtd, loff_t start, size_t len) rc = mutex_lock_interruptible(&efx->spi_lock); rc = mutex_lock_interruptible(&efx->spi_lock); if (rc) if (rc) return rc; return rc; rc = efx_spi_erase(efx_mtd, part->offset + start, len); rc = efx_spi_erase(part, part->offset + start, len); mutex_unlock(&efx->spi_lock); mutex_unlock(&efx->spi_lock); return rc; return rc; } } Loading @@ -363,12 +367,13 @@ static int falcon_mtd_write(struct mtd_info *mtd, loff_t start, static int falcon_mtd_sync(struct mtd_info *mtd) static int falcon_mtd_sync(struct mtd_info *mtd) { { struct efx_mtd_partition *part = to_efx_mtd_partition(mtd); struct efx_mtd *efx_mtd = mtd->priv; struct efx_mtd *efx_mtd = mtd->priv; struct efx_nic *efx = efx_mtd->efx; struct efx_nic *efx = efx_mtd->efx; int rc; int rc; mutex_lock(&efx->spi_lock); mutex_lock(&efx->spi_lock); rc = efx_spi_slow_wait(efx_mtd, true); rc = efx_spi_slow_wait(part, true); mutex_unlock(&efx->spi_lock); mutex_unlock(&efx->spi_lock); return rc; return rc; } } Loading Loading
drivers/net/sfc/mtd.c +14 −9 Original line number Original line Diff line number Diff line Loading @@ -15,7 +15,6 @@ #include <linux/slab.h> #include <linux/slab.h> #include <linux/rtnetlink.h> #include <linux/rtnetlink.h> #define EFX_DRIVER_NAME "sfc_mtd" #include "net_driver.h" #include "net_driver.h" #include "spi.h" #include "spi.h" #include "efx.h" #include "efx.h" Loading Loading @@ -71,8 +70,10 @@ static int siena_mtd_probe(struct efx_nic *efx); /* SPI utilities */ /* SPI utilities */ static int efx_spi_slow_wait(struct efx_mtd *efx_mtd, bool uninterruptible) static int efx_spi_slow_wait(struct efx_mtd_partition *part, bool uninterruptible) { { struct efx_mtd *efx_mtd = part->mtd.priv; const struct efx_spi_device *spi = efx_mtd->spi; const struct efx_spi_device *spi = efx_mtd->spi; struct efx_nic *efx = efx_mtd->efx; struct efx_nic *efx = efx_mtd->efx; u8 status; u8 status; Loading @@ -92,7 +93,7 @@ static int efx_spi_slow_wait(struct efx_mtd *efx_mtd, bool uninterruptible) if (signal_pending(current)) if (signal_pending(current)) return -EINTR; return -EINTR; } } EFX_ERR(efx, "timed out waiting for %s\n", efx_mtd->name); pr_err("%s: timed out waiting for %s\n", part->name, efx_mtd->name); return -ETIMEDOUT; return -ETIMEDOUT; } } Loading Loading @@ -131,8 +132,10 @@ efx_spi_unlock(struct efx_nic *efx, const struct efx_spi_device *spi) return 0; return 0; } } static int efx_spi_erase(struct efx_mtd *efx_mtd, loff_t start, size_t len) static int efx_spi_erase(struct efx_mtd_partition *part, loff_t start, size_t len) { { struct efx_mtd *efx_mtd = part->mtd.priv; const struct efx_spi_device *spi = efx_mtd->spi; const struct efx_spi_device *spi = efx_mtd->spi; struct efx_nic *efx = efx_mtd->efx; struct efx_nic *efx = efx_mtd->efx; unsigned pos, block_len; unsigned pos, block_len; Loading @@ -156,7 +159,7 @@ static int efx_spi_erase(struct efx_mtd *efx_mtd, loff_t start, size_t len) NULL, 0); NULL, 0); if (rc) if (rc) return rc; return rc; rc = efx_spi_slow_wait(efx_mtd, false); rc = efx_spi_slow_wait(part, false); /* Verify the entire region has been wiped */ /* Verify the entire region has been wiped */ memset(empty, 0xff, sizeof(empty)); memset(empty, 0xff, sizeof(empty)); Loading Loading @@ -198,13 +201,14 @@ static int efx_mtd_erase(struct mtd_info *mtd, struct erase_info *erase) static void efx_mtd_sync(struct mtd_info *mtd) static void efx_mtd_sync(struct mtd_info *mtd) { { struct efx_mtd_partition *part = to_efx_mtd_partition(mtd); struct efx_mtd *efx_mtd = mtd->priv; struct efx_mtd *efx_mtd = mtd->priv; struct efx_nic *efx = efx_mtd->efx; int rc; int rc; rc = efx_mtd->ops->sync(mtd); rc = efx_mtd->ops->sync(mtd); if (rc) if (rc) EFX_ERR(efx, "%s sync failed (%d)\n", efx_mtd->name, rc); pr_err("%s: %s sync failed (%d)\n", part->name, efx_mtd->name, rc); } } static void efx_mtd_remove_partition(struct efx_mtd_partition *part) static void efx_mtd_remove_partition(struct efx_mtd_partition *part) Loading Loading @@ -338,7 +342,7 @@ static int falcon_mtd_erase(struct mtd_info *mtd, loff_t start, size_t len) rc = mutex_lock_interruptible(&efx->spi_lock); rc = mutex_lock_interruptible(&efx->spi_lock); if (rc) if (rc) return rc; return rc; rc = efx_spi_erase(efx_mtd, part->offset + start, len); rc = efx_spi_erase(part, part->offset + start, len); mutex_unlock(&efx->spi_lock); mutex_unlock(&efx->spi_lock); return rc; return rc; } } Loading @@ -363,12 +367,13 @@ static int falcon_mtd_write(struct mtd_info *mtd, loff_t start, static int falcon_mtd_sync(struct mtd_info *mtd) static int falcon_mtd_sync(struct mtd_info *mtd) { { struct efx_mtd_partition *part = to_efx_mtd_partition(mtd); struct efx_mtd *efx_mtd = mtd->priv; struct efx_mtd *efx_mtd = mtd->priv; struct efx_nic *efx = efx_mtd->efx; struct efx_nic *efx = efx_mtd->efx; int rc; int rc; mutex_lock(&efx->spi_lock); mutex_lock(&efx->spi_lock); rc = efx_spi_slow_wait(efx_mtd, true); rc = efx_spi_slow_wait(part, true); mutex_unlock(&efx->spi_lock); mutex_unlock(&efx->spi_lock); return rc; return rc; } } Loading