You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by je...@apache.org on 2018/12/12 13:22:53 UTC

[mynewt-core] branch kasjer/flashspi-bus-support created (now f7597d4)

This is an automated email from the ASF dual-hosted git repository.

jerzy pushed a change to branch kasjer/flashspi-bus-support
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git.


      at f7597d4  hw/drivers: Add bus driver support ot spiflash

This branch includes the following new commits:

     new f7597d4  hw/drivers: Add bus driver support ot spiflash

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[mynewt-core] 01/01: hw/drivers: Add bus driver support ot spiflash

Posted by je...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jerzy pushed a commit to branch kasjer/flashspi-bus-support
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit f7597d4a0611579f86cc0f3d979dcbfec64647f7
Author: Jerzy Kasenberg <je...@codecoup.pl>
AuthorDate: Wed Dec 5 14:39:19 2018 +0100

    hw/drivers: Add bus driver support ot spiflash
---
 .../flash/spiflash/include/spiflash/spiflash.h     |  7 +++
 hw/drivers/flash/spiflash/src/spiflash.c           | 73 +++++++++++++++++++---
 2 files changed, 73 insertions(+), 7 deletions(-)

diff --git a/hw/drivers/flash/spiflash/include/spiflash/spiflash.h b/hw/drivers/flash/spiflash/include/spiflash/spiflash.h
index 216b1c2..f3cf919 100644
--- a/hw/drivers/flash/spiflash/include/spiflash/spiflash.h
+++ b/hw/drivers/flash/spiflash/include/spiflash/spiflash.h
@@ -25,6 +25,9 @@
 #endif
 #include <hal/hal_flash_int.h>
 #include <hal/hal_spi.h>
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+#include <bus/spi.h>
+#endif
 
 #ifdef __cplusplus
 extern "C" {
@@ -32,10 +35,14 @@ extern "C" {
 
 struct spiflash_dev {
     struct hal_flash hal;
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+    struct bus_spi_node dev;
+#else
     struct hal_spi_settings spi_settings;
     int spi_num;
     void *spi_cfg;                  /** Low-level MCU SPI config */
     int ss_pin;
+#endif
     uint16_t sector_size;
     uint16_t page_size;
     /* Array of supported flash chips */
diff --git a/hw/drivers/flash/spiflash/src/spiflash.c b/hw/drivers/flash/spiflash/src/spiflash.c
index 7fbf191..691c61e 100644
--- a/hw/drivers/flash/spiflash/src/spiflash.c
+++ b/hw/drivers/flash/spiflash/src/spiflash.c
@@ -25,6 +25,10 @@
 #include <hal/hal_flash.h>
 #include <hal/hal_flash_int.h>
 #include <spiflash/spiflash.h>
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+#include <bus/bus.h>
+#include <bus/spi.h>
+#endif
 
 #if MYNEWT_VAL(SPIFLASH)
 
@@ -581,6 +585,9 @@ static const struct hal_flash_funcs spiflash_flash_funcs = {
     .hff_init         = spiflash_init,
 };
 
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+#endif
+
 struct spiflash_dev spiflash_dev = {
     /* struct hal_flash for compatibility */
     .hal = {
@@ -593,6 +600,7 @@ struct spiflash_dev spiflash_dev = {
         .hf_erased_val = 0xff,
     },
 
+#if !MYNEWT_VAL(BUS_DRIVER_PRESENT)
     /* SPI settings */
     .spi_settings = {
         .data_order = HAL_SPI_MSB_FIRST,
@@ -600,12 +608,12 @@ struct spiflash_dev spiflash_dev = {
         .baudrate   = MYNEWT_VAL(SPIFLASH_BAUDRATE),
         .word_size  = HAL_SPI_WORD_SIZE_8BIT,
     },
-
-    .sector_size        = MYNEWT_VAL(SPIFLASH_SECTOR_SIZE),
-    .page_size          = MYNEWT_VAL(SPIFLASH_PAGE_SIZE),
     .spi_num            = MYNEWT_VAL(SPIFLASH_SPI_NUM),
     .spi_cfg            = NULL,
     .ss_pin             = MYNEWT_VAL(SPIFLASH_SPI_CS_PIN),
+#endif
+    .sector_size        = MYNEWT_VAL(SPIFLASH_SECTOR_SIZE),
+    .page_size          = MYNEWT_VAL(SPIFLASH_PAGE_SIZE),
 
     .supported_chips = supported_chips,
     .flash_chip = NULL,
@@ -628,13 +636,23 @@ static inline void spiflash_unlock(struct spiflash_dev *dev)
 static inline void
 spiflash_cs_activate(struct spiflash_dev *dev)
 {
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+    struct bus_spi_node *node = (struct bus_spi_node *)&dev->dev;
+    hal_gpio_write(node->pin_cs, 0);
+#else
     hal_gpio_write(dev->ss_pin, 0);
+#endif
 }
 
 static inline void
 spiflash_cs_deactivate(struct spiflash_dev *dev)
 {
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+    struct bus_spi_node *node = &dev->dev;
+    hal_gpio_write(node->pin_cs, 1);
+#else
     hal_gpio_write(dev->ss_pin, 1);
+#endif
 }
 
 void
@@ -644,11 +662,15 @@ spiflash_power_down(struct spiflash_dev *dev)
 
     spiflash_lock(dev);
 
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+    bus_node_simple_write(&dev->dev.bnode.odev, cmd, sizeof(cmd));
+#else
     spiflash_cs_activate(dev);
 
     hal_spi_txrx(dev->spi_num, cmd, cmd, sizeof cmd);
 
     spiflash_cs_deactivate(dev);
+#endif
 
     spiflash_unlock(dev);
 }
@@ -678,11 +700,15 @@ spiflash_release_power_down(struct spiflash_dev *dev)
 
     spiflash_lock(dev);
 
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+    bus_node_simple_write(&dev->dev.bnode.odev, cmd, sizeof(cmd));
+#else
     spiflash_cs_activate(dev);
 
     hal_spi_txrx(dev->spi_num, cmd, cmd, sizeof cmd);
 
     spiflash_cs_deactivate(dev);
+#endif
 
     spiflash_unlock(dev);
 }
@@ -695,11 +721,16 @@ spiflash_read_jedec_id(struct spiflash_dev *dev,
 
     spiflash_lock(dev);
 
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+    bus_node_simple_write_read_transact(&dev->dev.bnode.odev,
+        cmd, 1, cmd + 1, 3);
+#else
     spiflash_cs_activate(dev);
 
     hal_spi_txrx(dev->spi_num, cmd, cmd, sizeof cmd);
 
     spiflash_cs_deactivate(dev);
+#endif
 
     if (manufacturer) {
         *manufacturer = cmd[1];
@@ -722,15 +753,21 @@ uint8_t
 spiflash_read_status(struct spiflash_dev *dev)
 {
     uint8_t val;
+    const uint8_t cmd = SPIFLASH_READ_STATUS_REGISTER;
 
     spiflash_lock(dev);
 
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+    bus_node_simple_write_read_transact(&dev->dev.bnode.odev,
+        &cmd, 1, &val, 1);
+#else
     spiflash_cs_activate(dev);
 
-    hal_spi_tx_val(dev->spi_num, SPIFLASH_READ_STATUS_REGISTER);
+    hal_spi_tx_val(dev->spi_num, cmd);
     val = hal_spi_tx_val(dev->spi_num, 0xFF);
 
     spiflash_cs_deactivate(dev);
+#endif
 
     spiflash_unlock(dev);
 
@@ -770,13 +807,18 @@ err:
 int
 spiflash_write_enable(struct spiflash_dev *dev)
 {
+    uint8_t cmd = SPIFLASH_WRITE_ENABLE;
     spiflash_lock(dev);
 
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+    bus_node_simple_write(&dev->dev.bnode.odev, &cmd, 1);
+#else
     spiflash_cs_activate(dev);
 
-    hal_spi_tx_val(dev->spi_num, SPIFLASH_WRITE_ENABLE);
+    hal_spi_tx_val(dev->spi_num, cmd);
 
     spiflash_cs_deactivate(dev);
+#endif
 
     spiflash_unlock(dev);
 
@@ -800,6 +842,10 @@ spiflash_read(const struct hal_flash *hal_flash_dev, uint32_t addr, void *buf,
     if (!err) {
         spiflash_cs_activate(dev);
 
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+        bus_node_simple_write_read_transact(&dev->dev.bnode.odev,
+            &cmd, 4, buf, len);
+#else
         /* Send command + address */
         hal_spi_txrx(dev->spi_num, cmd, NULL, sizeof cmd);
         /* For security mostly, do not output random data, fill it with FF */
@@ -808,6 +854,7 @@ spiflash_read(const struct hal_flash *hal_flash_dev, uint32_t addr, void *buf,
         hal_spi_txrx(dev->spi_num, buf, buf, len);
 
         spiflash_cs_deactivate(dev);
+#endif
     }
 
     spiflash_unlock(dev);
@@ -845,11 +892,18 @@ spiflash_write(const struct hal_flash *hal_flash_dev, uint32_t addr,
         page_limit = (addr & ~(dev->page_size - 1)) + dev->page_size;
         to_write = page_limit - addr > len ? len :  page_limit - addr;
 
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+        bus_node_lock(&dev->dev.bnode.odev, BUS_NODE_LOCK_DEFAULT_TIMEOUT);
+        bus_node_write(&dev->dev.bnode.odev,
+            cmd, 4, BUS_NODE_LOCK_DEFAULT_TIMEOUT, BUS_F_NOSTOP);
+        bus_node_simple_write(&dev->dev.bnode.odev, u8buf, to_write);
+        bus_node_unlock(&dev->dev.bnode.odev);
+#else
         spiflash_cs_activate(dev);
         hal_spi_txrx(dev->spi_num, cmd, NULL, sizeof cmd);
         hal_spi_txrx(dev->spi_num, (void *)u8buf, NULL, to_write);
         spiflash_cs_deactivate(dev);
-
+#endif
         addr += to_write;
         u8buf += to_write;
         len -= to_write;
@@ -884,11 +938,15 @@ spiflash_erase_sector(const struct hal_flash *hal_flash_dev,
 
     spiflash_read_status(dev);
 
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+    bus_node_simple_write(&dev->dev.bnode.odev, cmd, sizeof(cmd));
+#else
     spiflash_cs_activate(dev);
 
     hal_spi_txrx(dev->spi_num, cmd, NULL, sizeof cmd);
 
     spiflash_cs_deactivate(dev);
+#endif
 
     spiflash_wait_ready(dev, 100);
 err:
@@ -1009,6 +1067,7 @@ spiflash_init(const struct hal_flash *hal_flash_dev)
     os_mutex_init(&dev->lock);
 #endif
 
+#if !MYNEWT_VAL(BUS_DRIVER_PRESENT)
     hal_gpio_init_out(dev->ss_pin, 1);
 
     (void)hal_spi_disable(dev->spi_num);
@@ -1020,7 +1079,7 @@ spiflash_init(const struct hal_flash *hal_flash_dev)
 
     hal_spi_set_txrx_cb(dev->spi_num, NULL, NULL);
     hal_spi_enable(dev->spi_num);
-
+#endif
     rc = spiflash_identify(dev);
 
     return rc;