M module-bsp/board/linux/eeprom/eeprom.cpp => module-bsp/board/linux/eeprom/eeprom.cpp +2 -3
@@ 6,9 6,8 @@
namespace bsp::eeprom
{
- int init()
+ void init()
{
- return true;
}
bool isPresent(int busid)
@@ 36,4 35,4 @@ namespace bsp::eeprom
return 0;
}
-} // namespace bsp::eeprom>
\ No newline at end of file
+} // namespace bsp::eeprom
M module-bsp/board/rt1051/bsp/eeprom/eeprom.cpp => module-bsp/board/rt1051/bsp/eeprom/eeprom.cpp +5 -4
@@ 22,12 22,11 @@ namespace bsp::eeprom
} // namespace
- int init()
+ void init()
{
drivers::DriverI2CParams i2cParams;
i2cParams.baudrate = static_cast<std::uint32_t>(BoardDefinitions::EEPROM_I2C_BAUDRATE);
i2c = drivers::DriverI2C::Create(static_cast<drivers::I2CInstances>(BoardDefinitions::EEPROM_I2C), i2cParams);
- return 0;
}
bool isPresent(int busid)
@@ 58,7 57,8 @@ namespace bsp::eeprom
written += i2c->Write(addr, reinterpret_cast<std::uint8_t *>(ptr), static_cast<size_t>(bl_len));
vTaskDelay(pdMS_TO_TICKS(10));
ptr += bl_len;
- addr.subAddress += bl_len;
+ mem_addr += bl_len;
+ addr.subAddress = __builtin_bswap16(mem_addr);
}
}
// reminder
@@ 90,7 90,8 @@ namespace bsp::eeprom
LOG_DEBUG("[EEPROM - R] reading chunk %d of %d", i, chunks);
read += i2c->Read(addr, reinterpret_cast<std::uint8_t *>(ptr), static_cast<size_t>(bl_len));
ptr += bl_len;
- addr.subAddress += bl_len;
+ mem_addr += bl_len;
+ addr.subAddress = __builtin_bswap16(mem_addr);
}
}
// reminder
M module-bsp/bsp/eeprom/eeprom.hpp => module-bsp/bsp/eeprom/eeprom.hpp +2 -2
@@ 12,9 12,9 @@ extern "C"
namespace bsp::eeprom
{
- typedef std::uint32_t addr_t;
+ typedef std::uint16_t addr_t;
- int init();
+ void init();
bool isPresent(int busid);
M module-vfs/board/rt1051/purefs/include/purefs/blkdev/disk_emmc.hpp => module-vfs/board/rt1051/purefs/include/purefs/blkdev/disk_emmc.hpp +0 -1
@@ 33,7 33,6 @@ namespace purefs::blkdev
auto sync() -> int override;
auto status() const -> media_status override;
auto get_info(info_type what, hwpart_t hwpart) const -> scount_t override;
- auto erase(sector_t lba, std::size_t count, hwpart_t hwpart) -> int override;
auto pm_control(pm_state target_state) -> int override;
auto pm_read(pm_state ¤t_state) -> int override;
M module-vfs/board/rt1051/purefs/src/blkdev/disk_eeprom.cpp => module-vfs/board/rt1051/purefs/src/blkdev/disk_eeprom.cpp +8 -11
@@ 10,10 10,7 @@ namespace purefs::blkdev
auto disk_eeprom::probe(unsigned flags) -> int
{
cpp_freertos::LockGuard lock(mutex);
- const auto error = bsp::eeprom::init();
- if (error) {
- return -EIO;
- }
+ bsp::eeprom::init();
if (!bsp::eeprom::isPresent(bus_id)) {
return -ENXIO;
}
@@ 27,10 24,10 @@ namespace purefs::blkdev
auto disk_eeprom::get_info(info_type what, hwpart_t hwpart) const -> scount_t
{
- cpp_freertos::LockGuard lock(mutex);
if (hwpart > 0) {
return -ERANGE;
}
+ cpp_freertos::LockGuard lock(mutex);
switch (what) {
case info_type::sector_size:
return bsp::eeprom::eeprom_block_size(bus_id);
@@ 45,10 42,10 @@ namespace purefs::blkdev
auto disk_eeprom::write(const void *buf, sector_t lba, std::size_t count, hwpart_t hwpart) -> int
{
- cpp_freertos::LockGuard lock(mutex);
if (hwpart > 0) {
return -ERANGE;
}
+ cpp_freertos::LockGuard lock(mutex);
const size_t block_siz = bsp::eeprom::eeprom_block_size(bus_id);
const size_t total_siz = bsp::eeprom::eeprom_total_size(bus_id);
const auto addr = lba * block_siz;
@@ 56,16 53,16 @@ namespace purefs::blkdev
if (addr + len > total_siz) {
return -ERANGE;
}
- const auto nwr = bsp::eeprom::eeprom_write(bus_id, addr, reinterpret_cast<const char *>(buf), len);
- return (nwr != int(len)) ? (-ENXIO) : (0);
+ const auto bytes_written = bsp::eeprom::eeprom_write(bus_id, addr, reinterpret_cast<const char *>(buf), len);
+ return (bytes_written != int(len)) ? (-ENXIO) : (0);
}
auto disk_eeprom::read(void *buf, sector_t lba, std::size_t count, hwpart_t hwpart) -> int
{
- cpp_freertos::LockGuard lock(mutex);
if (hwpart > 0) {
return -ERANGE;
}
+ cpp_freertos::LockGuard lock(mutex);
const size_t block_siz = bsp::eeprom::eeprom_block_size(bus_id);
const size_t total_siz = bsp::eeprom::eeprom_total_size(bus_id);
const auto addr = lba * block_siz;
@@ 73,7 70,7 @@ namespace purefs::blkdev
if (addr + len > total_siz) {
return -ERANGE;
}
- const auto nwr = bsp::eeprom::eeprom_read(bus_id, addr, reinterpret_cast<char *>(buf), len);
- return (nwr != int(len)) ? (-ENXIO) : (0);
+ const auto bytes_read = bsp::eeprom::eeprom_read(bus_id, addr, reinterpret_cast<char *>(buf), len);
+ return (bytes_read != int(len)) ? (-ENXIO) : (0);
}
} // namespace purefs::blkdev
M module-vfs/board/rt1051/purefs/src/blkdev/disk_emmc.cpp => module-vfs/board/rt1051/purefs/src/blkdev/disk_emmc.cpp +0 -6
@@ 75,12 75,6 @@ namespace purefs::blkdev
return statusBlkDevSuccess;
}
- auto disk_emmc::erase(sector_t lba, std::size_t count, hwpart_t hwpart) -> int
- {
- // erase group size is 512kB so it has been deliberately disallowed
- // group of this size would make the solution inefficient in this case
- return statusBlkDevSuccess;
- }
auto disk_emmc::read(void *buf, sector_t lba, std::size_t count, hwpart_t hwpart) -> int
{
cpp_freertos::LockGuard lock(mutex);
M module-vfs/board/rt1051/purefs/src/vfs_subsystem_internal.cpp => module-vfs/board/rt1051/purefs/src/vfs_subsystem_internal.cpp +2 -5
@@ 5,13 5,10 @@
#include <purefs/blkdev/disk_manager.hpp>
#include <purefs/blkdev/disk_emmc.hpp>
#include <purefs/blkdev/disk_eeprom.hpp>
+#include "board/rt1051/bsp/eeprom/M24256.hpp"
namespace purefs::subsystem::internal
{
- namespace
- {
- constexpr auto eeprom_bus_address = 0xA0 >> 1;
- }
auto create_default_block_device() -> std::shared_ptr<blkdev::disk>
{
return std::make_shared<purefs::blkdev::disk_emmc>();
@@ 19,6 16,6 @@ namespace purefs::subsystem::internal
auto create_default_nvm_device() -> std::shared_ptr<blkdev::disk>
{
- return std::make_shared<purefs::blkdev::disk_eeprom>(eeprom_bus_address);
+ return std::make_shared<purefs::blkdev::disk_eeprom>(bsp::eeprom::M24256_MEM_DEVICE_ADDR);
}
} // namespace purefs::subsystem::internal
M module-vfs/drivers/src/thirdparty/littlefs/lfs_glue.cpp => module-vfs/drivers/src/thirdparty/littlefs/lfs_glue.cpp +16 -3
@@ 20,12 20,16 @@ namespace purefs::fs::drivers::littlefs::internal
class io_context
{
public:
- io_context(std::shared_ptr<blkdev::disk_manager> diskmm, blkdev::disk_fd diskh, size_t _sector_size)
- : disk(diskmm), disk_h(diskh), sector_size(_sector_size)
+ io_context(std::shared_ptr<blkdev::disk_manager> diskmm,
+ blkdev::disk_fd diskh,
+ size_t _sector_size,
+ size_t _erase_block)
+ : disk(diskmm), disk_h(diskh), sector_size(_sector_size), erase_block(_erase_block)
{}
const std::weak_ptr<blkdev::disk_manager> disk;
const blkdev::disk_fd disk_h;
const size_t sector_size;
+ const size_t erase_block;
mutable cpp_freertos::MutexRecursive mutex;
};
@@ 121,6 125,10 @@ namespace purefs::fs::drivers::littlefs::internal
if (!ctx) {
return LFS_ERR_IO;
}
+ if (ctx->erase_block == 0) {
+ // Erase not supported
+ return LFS_ERR_OK;
+ }
auto diskmm = ctx->disk.lock();
if (!diskmm) {
return LFS_ERR_IO;
@@ 173,7 181,12 @@ namespace purefs::fs::drivers::littlefs::internal
LOG_ERROR("Unable to get sector size %li", long(sect_size));
return sect_size;
}
- auto ctx = new lfs_io::io_context(diskmm, diskh, sect_size);
+ const auto erase_size = diskmm->get_info(diskh, blkdev::info_type::erase_block);
+ if (erase_size < 0) {
+ LOG_ERROR("Unable to get erase block size %li", long(erase_size));
+ return erase_size;
+ }
+ auto ctx = new lfs_io::io_context(diskmm, diskh, sect_size, erase_size);
lfsc->context = ctx;
lfsc->read = lfs_io::read;
lfsc->prog = lfs_io::prog;
M module-vfs/include/user/purefs/blkdev/disk.hpp => module-vfs/include/user/purefs/blkdev/disk.hpp +2 -2
@@ 25,7 25,7 @@ namespace purefs::blkdev
/** Disk cleanup just before unregistering
* @return zero on success otherwise error
*/
- virtual auto cleanup() -> int = 0;
+ virtual auto cleanup() -> int;
/** Write a data onto block device or partition
* @param[in] buf Data buffer to write
@@ 56,7 56,7 @@ namespace purefs::blkdev
/** Flush buffers and write all data into the physical device
* @return zero or success otherwise error
*/
- virtual auto sync() -> int = 0;
+ virtual auto sync() -> int;
/** Set block device power state
* @param[in] target_state Set the target power state
M module-vfs/src/purefs/blkdev/disk.cpp => module-vfs/src/purefs/blkdev/disk.cpp +12 -2
@@ 12,10 12,20 @@ namespace purefs::blkdev
}
auto disk::pm_control(pm_state target_state) -> int
{
- return -ENOTSUP;
+ return 0;
}
auto disk::pm_read(pm_state ¤t_state) -> int
{
- return -ENOTSUP;
+ current_state = pm_state::active;
+ return 0;
+ }
+ auto disk::sync() -> int
+ {
+ return 0;
}
+ auto disk::cleanup() -> int
+ {
+ return 0;
+ }
+
} // namespace purefs::blkdev