fixed frequency detection
authorMiroslav Ondra <ondra@faster.cz>
Wed, 6 Feb 2019 22:51:00 +0000 (23:51 +0100)
committerMiroslav Ondra <ondra@faster.cz>
Wed, 6 Feb 2019 22:51:00 +0000 (23:51 +0100)
debian/changelog
debian/neuron-kernel.changelog
modules/unipi/src/unipi_common.h
modules/unipi/src/unipi_spi.c
modules/unipi/src/unipi_spi.h

index 5c73809789d31144277ecfa5284d3b2c7d9e22c6..7345f54b64cc36007224576a229b37edac56592d 100644 (file)
@@ -1,3 +1,9 @@
+unipi-kernel-modules (1.19) unstable; urgency=medium
+
+  * fixed frequency detection
+
+ -- Miroslav Ondra <bokula@bokula.faster.cz>  Thu, 17 Jan 2019 11:17:54 +0100
+
 unipi-kernel-modules (1.18) unstable; urgency=medium
 
   * disabled long spi tranfer
index 29df870634c3473c18738f52d2a3915ba3633fd1..84ace888117bab8348d8fb015869afa525895eb4 100644 (file)
@@ -1,8 +1,26 @@
+unipi-kernel-modules (1.19.1.20181112-1) unstable; urgency=medium
+
+  * Compiled for raspberrypi-kernel 1.20181112-1
+
+ -- Miroslav Ondra <bokula@bokula.faster.cz>  Thu, 17 Jan 2019 11:18:36 +0100
+
+unipi-kernel-modules (1.19) unstable; urgency=medium
+
+  * fixed frequency detection
+
+ -- Miroslav Ondra <bokula@bokula.faster.cz>  Thu, 17 Jan 2019 11:17:54 +0100
+
+unipi-kernel-modules (1.18.1.20181112-1) unstable; urgency=medium
+
+  * Compiled for raspberrypi-kernel 1.20181112-1
+
+ -- Miroslav Ondra <bokula@bokula.faster.cz>  Wed, 28 Nov 2018 09:11:02 +0100
+
 unipi-kernel-modules (1.18.1.20180924-1) unstable; urgency=medium
 
   * Compiled for raspberrypi-kernel 1.20180924-1
 
- -- Miroslav Ondra <bokula@bokula.faster.cz>  Fri, 19 Oct 2018 10:09:57 +0200
+ -- Miroslav Ondra <bokula@bokula.faster.cz>  Thu, 08 Nov 2018 09:16:26 +0100
 
 unipi-kernel-modules (1.18) unstable; urgency=medium
 
index 7628fb82548a7101a83e55c3273d967efe62c861..edd95c47812c4139a2664038a5d224a205c01b3e 100644 (file)
@@ -51,7 +51,7 @@
 #if NEURONSPI_SCHED_REQUIRED > 0
        #include <uapi/linux/sched/types.h>
 #endif
-#define NEURONSPI_MAJOR_VERSIONSTRING "Version 1.18:2018:10:31"
+#define NEURONSPI_MAJOR_VERSIONSTRING "Version 1.19:2019:01:17"
 
 #define NEURONSPI_MAX_DEVS                             3
 #define NEURONSPI_MAX_UART                             16
index 3aacf9b14902b570ba901f213c4291bae128d646..2f6f81150b57174090a4c7e1bd07f8e55bc75196 100644 (file)
@@ -909,11 +909,12 @@ s32 neuronspi_spi_probe(struct spi_device *spi)
                 break;
                        }
                }
-        n_spi->ideal_frequency = neuronspi_is_slower_model(lower_board) ? NEURONSPI_SLOWER_FREQ : NEURONSPI_COMMON_FREQ; 
+        //n_spi->ideal_frequency = neuronspi_is_slower_model(lower_board) ? NEURONSPI_SLOWER_FREQ : NEURONSPI_COMMON_FREQ; 
+        n_spi->ideal_frequency = neuronspi_frequency_by_model(lower_board);
         no_irq = neuronspi_is_noirq_model(lower_board);
 
-        printk(KERN_INFO "UNIPISPI: UniPi Board %s (L:%x U:%x C:%x) at CS%d (nspi%d) detected.\n\t\t\tFw: v%d.%d Uarts:%d, reg1001-4: %04x %04x %04x %04x\n",
-                               board_name, hi(lower_board), upper_board, hardware_model, spi->chip_select, n_spi->neuron_index,
+        printk(KERN_INFO "UNIPISPI: UniPi Board %s (L:%x U:%x C:%x) at CS%d (nspi%d %dkHz) detected.\n\t\t\tFw: v%d.%d Uarts:%d, reg1001-4: %04x %04x %04x %04x\n",
+                               board_name, hi(lower_board), upper_board, hardware_model, spi->chip_select, n_spi->neuron_index, n_spi->ideal_frequency/1000,
                 hi(n_spi->firmware_version), lo(n_spi->firmware_version), uart_count, 
                 REG1000(first_probe,1001), REG1000(first_probe,1002), REG1000(first_probe,1003), REG1000(first_probe,1004));
 
index d17680341757d38d3cf0beee4bbb0aea574f608e..68d2286374fcb872ab0a47a3e7dac97305d4c115 100644 (file)
@@ -33,6 +33,18 @@ static const u16 NEURONSPI_SLOWER_MODELS[NEURONSPI_SLOWER_MODELS_LEN] = {
                0xb10, 0xc10, 0xf10
 };
 
+struct neuronspi_frequecy_map
+{
+    u16  model;
+    u16  mask;
+    int  frequency;
+};
+
+#define NEURONSPI_FREQUENCY_LEN      2
+static const struct neuronspi_frequecy_map NEURONSPI_FREQUENCY_MAP[NEURONSPI_FREQUENCY_LEN] = {
+       {model:0x0b00, mask:0xff00, frequency:NEURONSPI_SLOWER_FREQ },
+       {model:0x0000, mask:0x0000, frequency:NEURONSPI_COMMON_FREQ}
+};
 
 #define UNIPISPI_PROBE_MESSAGE_LEN                                             16
 static u8 _probe_message_second[UNIPISPI_PROBE_MESSAGE_LEN] = 
@@ -187,13 +199,20 @@ static __always_inline u16 neuronspi_spi_crc(u8* inputstring, s32 length, u16 in
     return result;
 }
 
-static __always_inline int neuronspi_is_slower_model(u16 model)
+static __always_inline int neuronspi_frequency_by_model(u16 model)
 {
     int i;
+    for (i = 0; i < NEURONSPI_FREQUENCY_LEN; i++) {
+        if ((NEURONSPI_FREQUENCY_MAP[i].mask & model) == NEURONSPI_FREQUENCY_MAP[i].model) 
+                       return NEURONSPI_FREQUENCY_MAP[i].frequency;
+    }
+       return NEURONSPI_COMMON_FREQ;
+/*
     for (i = 0; i < NEURONSPI_SLOWER_MODELS_LEN; i++) {
         if (NEURONSPI_SLOWER_MODELS[i] == model) return 1;
     }
     return 0;
+*/
 }
 
 static __always_inline int neuronspi_is_noirq_model(u16 model)