From aa1c44ba806379fbd2cd67d18147bbdb2f1971ff Mon Sep 17 00:00:00 2001 From: Miroslav Ondra Date: Wed, 6 Feb 2019 23:51:00 +0100 Subject: [PATCH] fixed frequency detection --- debian/changelog | 6 ++++++ debian/neuron-kernel.changelog | 20 +++++++++++++++++++- modules/unipi/src/unipi_common.h | 2 +- modules/unipi/src/unipi_spi.c | 7 ++++--- modules/unipi/src/unipi_spi.h | 21 ++++++++++++++++++++- 5 files changed, 50 insertions(+), 6 deletions(-) diff --git a/debian/changelog b/debian/changelog index 5c73809..7345f54 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +unipi-kernel-modules (1.19) unstable; urgency=medium + + * fixed frequency detection + + -- Miroslav Ondra Thu, 17 Jan 2019 11:17:54 +0100 + unipi-kernel-modules (1.18) unstable; urgency=medium * disabled long spi tranfer diff --git a/debian/neuron-kernel.changelog b/debian/neuron-kernel.changelog index 29df870..84ace88 100644 --- a/debian/neuron-kernel.changelog +++ b/debian/neuron-kernel.changelog @@ -1,8 +1,26 @@ +unipi-kernel-modules (1.19.1.20181112-1) unstable; urgency=medium + + * Compiled for raspberrypi-kernel 1.20181112-1 + + -- Miroslav Ondra Thu, 17 Jan 2019 11:18:36 +0100 + +unipi-kernel-modules (1.19) unstable; urgency=medium + + * fixed frequency detection + + -- Miroslav Ondra 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 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 Fri, 19 Oct 2018 10:09:57 +0200 + -- Miroslav Ondra Thu, 08 Nov 2018 09:16:26 +0100 unipi-kernel-modules (1.18) unstable; urgency=medium diff --git a/modules/unipi/src/unipi_common.h b/modules/unipi/src/unipi_common.h index 7628fb8..edd95c4 100644 --- a/modules/unipi/src/unipi_common.h +++ b/modules/unipi/src/unipi_common.h @@ -51,7 +51,7 @@ #if NEURONSPI_SCHED_REQUIRED > 0 #include #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 diff --git a/modules/unipi/src/unipi_spi.c b/modules/unipi/src/unipi_spi.c index 3aacf9b..2f6f811 100644 --- a/modules/unipi/src/unipi_spi.c +++ b/modules/unipi/src/unipi_spi.c @@ -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)); diff --git a/modules/unipi/src/unipi_spi.h b/modules/unipi/src/unipi_spi.h index d176803..68d2286 100644 --- a/modules/unipi/src/unipi_spi.h +++ b/modules/unipi/src/unipi_spi.h @@ -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) -- 2.34.1