Bug 43246 - Включить поддержку SPI Flash
Summary: Включить поддержку SPI Flash
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: u-boot-sunxi (show other bugs)
Version: unstable
Hardware: aarch64 Linux
: P5 normal
Assignee: Sergey Bolshakov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-07-15 06:54 MSK by Антон Мидюков
Modified: 2022-10-04 18:39 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Антон Мидюков 2022-07-15 06:54:03 MSK
В u-boot для Orange Pi Prime нет подержки SPI Flash, поэтому после записи в набортную микросхему платы при помощи sunxi-fel SPL сообщает, что не нашёл U-boot  на поддерживаемых накопителях. Помогло включение опций в orangepi_prime_defconfig:
CONFIG_SPI=y
CONFIG_SPL_SPI_SUNXI=y
CONFIG_SPI_FLASH_WINBOND=y

Возможно ли включить поддержку SPI и для других плат с sunxi? Или далеко не все имеют микросхему SPI на борту и нужно к платам подходить индивидуально?
Я так понимаю, что вместо CONFIG_SPI_FLASH_WINBOND=y может быть нужно указать другой параметр.
Comment 1 Sergey Bolshakov 2022-07-15 11:48:17 MSK
(In reply to Антон Мидюков from comment #0)
> В u-boot для Orange Pi Prime нет подержки SPI Flash, поэтому после записи в
> набортную микросхему платы при помощи sunxi-fel SPL сообщает, что не нашёл
> U-boot  на поддерживаемых накопителях. Помогло включение опций в
> orangepi_prime_defconfig:
> CONFIG_SPI=y
> CONFIG_SPL_SPI_SUNXI=y
> CONFIG_SPI_FLASH_WINBOND=y
> 
> Возможно ли включить поддержку SPI и для других плат с sunxi? Или далеко не
> все имеют микросхему SPI на борту и нужно к платам подходить индивидуально?
> Я так понимаю, что вместо CONFIG_SPI_FLASH_WINBOND=y может быть нужно
> указать другой параметр.

В апстриме SPI включают на тех платах, где действительно есть микросхема.
Я для себя включил и на nanopi duo2.
Логика тут, мне кажется, такая: поскольку SPI при этом нужен рано, ещё в SPL (где есть ограничение по размеру кода), нужно знать, какой именно SPI_FLASH там стоит -- навскидку, кроме winbond, там может оказаться и macronix, и stmicro, и чёрт в ступе. Так что да, для всех сразу и чтоб никто не ушёл обиженным, не получится.
prime у меня нет, что там стоит и стоит ли вообще, я не знаю -- но готов
поверить на слово в следующем релизе.
Comment 2 Антон Мидюков 2022-07-15 13:21:40 MSK
На схеме электрической SPI NOR Flash есть:
https://linux-sunxi.org/images/a/ae/ORANGEPI-Prime_V1_0.pdf

Может быть распаяна, а может и нет. У меня распаяна на обратной стороне платы. Не смог прочитать, что написано на микросхеме. Поэтому провёл эксперимент и убрал CONFIG_SPI_FLASH_WINBOND=y. Прошил, и тоже грузится. Конфиг получился такой:

$ cat u-boot.cfg.configs |grep -i spi
CONFIG_DM_SPI
CONFIG_DM_SPI_FLASH
CONFIG_ENV_IS_IN_SPI_FLASH
CONFIG_ENV_SPI_BUS
CONFIG_ENV_SPI_CS
CONFIG_ENV_SPI_MAX_HZ
CONFIG_ENV_SPI_MODE
CONFIG_SPI
CONFIG_SPI_FLASH
CONFIG_SPI_FLASH_SMART_HWCAPS
CONFIG_SPI_FLASH_UNLOCK_ALL
CONFIG_SPI_FLASH_USE_4K_SECTORS
CONFIG_SPI_MEM
CONFIG_SPI_SUNXI
CONFIG_SPL_SPI_SUNXI
CONFIG_SYS_SPI_U_BOOT_OFFS

Итого нужно только 
CONFIG_SPI=y
CONFIG_SPL_SPI_SUNXI=y

=> saveenv                
Saving Environment to SPIFlash... Invalid bus 0 (err=-19)
*** Warning - spi_flash_probe_bus_cs() failed, using default environment

Failed (-19)

Видимо, для записи u-boot'ом требуется собрать с правильным CONFIG_SPI_FLASH_<???>
Comment 3 Sergey Bolshakov 2022-07-15 15:24:40 MSK
Поправка: для загрузки самого u-boot не нужно вообще ничего, кроме CONFIG_SPL_SPI_SUNXI, а дальше всё загрузится как обычно, с mmc, usb или сети.
Вот если хотеть хранить в spi flash env или тем паче ядро, нужно что-то ещё.
Comment 4 Sergey Bolshakov 2022-07-15 15:28:25 MSK
на orangepi_pc2, железке, похожей на prime у меня работает:
=> env default -a -f
## Resetting to default environment
=> env save
Saving Environment to SPIFlash... Erasing SPI flash...Writing to SPI flash...done
OK
=>
Comment 5 Антон Мидюков 2022-07-15 15:33:04 MSK
(Ответ для Sergey Bolshakov на комментарий #4)
> на orangepi_pc2, железке, похожей на prime у меня работает:
> => env default -a -f
> ## Resetting to default environment
> => env save
> Saving Environment to SPIFlash... Erasing SPI flash...Writing to SPI
> flash...done
> OK
> =>

попробую собрать с CONFIG_SPI_FLASH_MACRONIX=y
Comment 6 Sergey Bolshakov 2022-07-15 15:34:09 MSK
(In reply to Антон Мидюков from comment #2)
> На схеме электрической SPI NOR Flash есть:
> https://linux-sunxi.org/images/a/ae/ORANGEPI-Prime_V1_0.pdf
> 
> Может быть распаяна, а может и нет. У меня распаяна на обратной стороне
> платы. Не смог прочитать, что написано на микросхеме. Поэтому провёл
> эксперимент и убрал CONFIG_SPI_FLASH_WINBOND=y. Прошил, и тоже грузится.
> Конфиг получился такой:
> 
> $ cat u-boot.cfg.configs |grep -i spi
> CONFIG_DM_SPI
> CONFIG_DM_SPI_FLASH
> CONFIG_ENV_IS_IN_SPI_FLASH
> CONFIG_ENV_SPI_BUS
> CONFIG_ENV_SPI_CS
> CONFIG_ENV_SPI_MAX_HZ
> CONFIG_ENV_SPI_MODE
> CONFIG_SPI
> CONFIG_SPI_FLASH
> CONFIG_SPI_FLASH_SMART_HWCAPS
> CONFIG_SPI_FLASH_UNLOCK_ALL
> CONFIG_SPI_FLASH_USE_4K_SECTORS
> CONFIG_SPI_MEM
> CONFIG_SPI_SUNXI
> CONFIG_SPL_SPI_SUNXI
> CONFIG_SYS_SPI_U_BOOT_OFFS
> 
> Итого нужно только 
> CONFIG_SPI=y
> CONFIG_SPL_SPI_SUNXI=y
> 
> => saveenv                
> Saving Environment to SPIFlash... Invalid bus 0 (err=-19)
> *** Warning - spi_flash_probe_bus_cs() failed, using default environment
> 
> Failed (-19)
> 
> Видимо, для записи u-boot'ом требуется собрать с правильным
> CONFIG_SPI_FLASH_<???>

ну как минимум нужен CONFIG_SPI_SUNXI, поскольку CONFIG_SPL_SPI_SUNXI вещь в себе и в собственно u-boot поддержку SPL не добавит.
Comment 7 Sergey Bolshakov 2022-07-15 15:37:08 MSK
(In reply to Антон Мидюков from comment #5)
> (Ответ для Sergey Bolshakov на комментарий #4)
> > на orangepi_pc2, железке, похожей на prime у меня работает:
> > => env default -a -f
> > ## Resetting to default environment
> > => env save
> > Saving Environment to SPIFlash... Erasing SPI flash...Writing to SPI
> > flash...done
> > OK
> > =>
> 
> попробую собрать с CONFIG_SPI_FLASH_MACRONIX=y

ну гадать-то зачем -- снять крупно на телефон микросхему не получится ?
Comment 8 Антон Мидюков 2022-07-15 16:47:34 MSK
(Ответ для Sergey Bolshakov на комментарий #7)
> (In reply to Антон Мидюков from comment #5)
> > (Ответ для Sergey Bolshakov на комментарий #4)
> > > на orangepi_pc2, железке, похожей на prime у меня работает:
> > > => env default -a -f
> > > ## Resetting to default environment
> > > => env save
> > > Saving Environment to SPIFlash... Erasing SPI flash...Writing to SPI
> > > flash...done
> > > OK
> > > =>
> > 
> > попробую собрать с CONFIG_SPI_FLASH_MACRONIX=y
> 
> ну гадать-то зачем -- снять крупно на телефон микросхему не получится ?

После применения лайф-хака с термопастой (надпись выгравирована) смог прочитать невооружённым глазом: MXIC MX 25L1606EM2I-12G. Это всё-таки Macronix.
Comment 9 Антон Мидюков 2022-07-15 18:00:22 MSK
(Ответ для Антон Мидюков на комментарий #8)
> (Ответ для Sergey Bolshakov на комментарий #7)
> > (In reply to Антон Мидюков from comment #5)
> > > попробую собрать с CONFIG_SPI_FLASH_MACRONIX=y
> > 
> > ну гадать-то зачем -- снять крупно на телефон микросхему не получится ?
> 
> После применения лайф-хака с термопастой (надпись выгравирована) смог
> прочитать невооружённым глазом: MXIC MX 25L1606EM2I-12G. Это всё-таки
> Macronix.

Собрал с
CONFIG_SPI=y
CONFIG_SPI_SUNXI=y
CONFIG_SPL_SPI_SUNXI=y
CONFIG_SPI_FLASH_MACRONIX=y

И всё равно не работает.
Comment 10 Sergey Bolshakov 2022-07-15 18:17:04 MSK
(In reply to Антон Мидюков from comment #9)
> (Ответ для Антон Мидюков на комментарий #8)
> > (Ответ для Sergey Bolshakov на комментарий #7)
> > > (In reply to Антон Мидюков from comment #5)
> > > > попробую собрать с CONFIG_SPI_FLASH_MACRONIX=y
> > > 
> > > ну гадать-то зачем -- снять крупно на телефон микросхему не получится ?
> > 
> > После применения лайф-хака с термопастой (надпись выгравирована) смог
> > прочитать невооружённым глазом: MXIC MX 25L1606EM2I-12G. Это всё-таки
> > Macronix.
> 
> Собрал с
> CONFIG_SPI=y
> CONFIG_SPI_SUNXI=y
> CONFIG_SPL_SPI_SUNXI=y
> CONFIG_SPI_FLASH_MACRONIX=y
> 
> И всё равно не работает.

В devicetree для prime spi flash нет, ни в u-boot, ни в kernel.
Можно скопировать как есть ноду &spi0 из рядом лежащего sun50i-h5-orangepi-pc2.dts
Comment 11 Антон Мидюков 2022-07-18 05:49:18 MSK
(Ответ для Sergey Bolshakov на комментарий #10)
> (In reply to Антон Мидюков from comment #9)
> > (Ответ для Антон Мидюков на комментарий #8)
> > > (Ответ для Sergey Bolshakov на комментарий #7)
> > > > (In reply to Антон Мидюков from comment #5)
> > > > > попробую собрать с CONFIG_SPI_FLASH_MACRONIX=y
> > > > 
> > > > ну гадать-то зачем -- снять крупно на телефон микросхему не получится ?
> > > 
> > > После применения лайф-хака с термопастой (надпись выгравирована) смог
> > > прочитать невооружённым глазом: MXIC MX 25L1606EM2I-12G. Это всё-таки
> > > Macronix.
> > 
> > Собрал с
> > CONFIG_SPI=y
> > CONFIG_SPI_SUNXI=y
> > CONFIG_SPL_SPI_SUNXI=y
> > CONFIG_SPI_FLASH_MACRONIX=y
> > 
> > И всё равно не работает.
> 
> В devicetree для prime spi flash нет, ни в u-boot, ни в kernel.
> Можно скопировать как есть ноду &spi0 из рядом лежащего
> sun50i-h5-orangepi-pc2.dts

Скопировал, собрал и заработало. Спасибо!
Comment 12 Sergey Bolshakov 2022-10-04 18:39:02 MSK
включено в 2022.10-alt1