1
1

*: поддержка SD/MMC контроллера

This commit is contained in:
parent d2f38fbc86
commit febcb59c13
14 changed files with 110 additions and 29 deletions

View File

@ -12,8 +12,8 @@
## Руководство пользователя и бинарная сборка
- [Бинарный релиз](https://git.kpda.ru/BSP/kpda-bsp-allwinner-h3-orangepipc/releases/tag/release-2021)
- [Руководство пользователя](https://git.kpda.ru/BSP/kpda-bsp-allwinner-h3-orangepipc/releases/download/release-2021/UserManual.pdf)
- [Бинарный релиз](https://git.kpda.ru/BSP/kpda-bsp-allwinner-h3-orangepipc/releases/tag/release-2021-v2)
- [Руководство пользователя](https://git.kpda.ru/BSP/kpda-bsp-allwinner-h3-orangepipc/releases/download/release-2021-v2/UserManual.pdf)
## Поддерживаемые редакции Нейтрино
@ -94,3 +94,5 @@ echo "tftpboot 0x41000000 $image; go 0x41000000" > $TFTP_SERIAL
| UART | + | + | |
| USB | + | + | |
| NET | + | + | |
| SD | + | + | Версия исходного кода драйвера - 57d005663e |
| MMC | + | + | Версия исходного кода драйвера - 57d005663e |

View File

@ -7,7 +7,8 @@
@hide @arch{armv7} @endhide
Поддерживаемые устройства:
- Одноплатный компьютер @link{http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-PC.html}OrangePi-PC@endlink
- Одноплатный компьютер @link{http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-PC.html}OrangePi-PC(v1.3)@endlink
- Одноплатный компьютер @link{http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-PC-Plus.html}OrangePi-PC-Plus(v1.1)@endlink
Документ включает следующие разделы:
@ul

View File

@ -20,6 +20,7 @@
@item UART
@item USB (EHCI/OHCI)
@item Ethernet
@item SD/eMMC
@endul
@prev{./00-UserGuide.html|table_of_articles||2}

View File

@ -106,6 +106,8 @@ coproc_attach(11): attach fe099c78 (fe09b750)
Welcome to KPDA Neutrino on the OrangePi PC Allwinner H3 (ARMv7 Cortex-A7 QuadCore) - Board
Starting common servers...
Starting UART serial driver...
Starting USB host driver...
Starting SD/eMMC driver...
Starting Network driver...
#
@endoutput

View File

@ -22,6 +22,7 @@
@tr @center @l{devc-ser8250} @endcenter @| Менеджер последовательных 8250-совместимых каналов связи
@tr @center @l{devu-ehci.so} @endcenter @| Драйвер для USB-контроллеров с усовершенствованным интерфейсом хост-контроллера (EHCI)
@tr @center @l{devu-ohci.so} @endcenter @| Драйвер для USB-контроллеров с открытым интерфейсом хост-контроллера (Open Host Controller Interface, OHCI)
@tr @center @l{devb-sdmmc} @endcenter @| Драйвер для SD/eMMC контроллеров
@endtable
@hint

View File

@ -16,6 +16,7 @@
@@@item Проверка драйвера контроллера UART
@@@item Проверка драйвера контроллера Gigabit Ethernet
@@@item Проверка драйвера контроллера USB
@@@item Проверка драйвера контроллера SD/MMC
@ -344,4 +345,55 @@ USB 4 (EHCI) v1.10, v1.01 DDK, v1.01 HCD
USB 5 (OHCI) v1.10, v1.01 DDK, v1.01 HCD
@endoutput
@group bsp_sdmmc
Для работы с контроллером SD/MMC используется драйвер @l{devb-sdmmc}. В составе загрузочного образа драйвер запускается автоматически. В случае успешного запуска драйвера в директории `/dev/` будет создано устройство `sd0`, соответствующее SD-карте, а также устройства, соответствующие разделам. Для управления устройствами могут быть использованы стандартные утилиты для управления и чтения/записи блочных устройств. Проверка считается выполненной успешно, если при выполнении команды @l{ls|ls /dev/sd0*} отображаются устройства, соответствующие SD-карте и разделам, например:
@output{shell}
# ls /dev/sd0*
/dev/sd0 /dev/sd0t131 /dev/sd0t177
@endoutput
В выводе утилиты @l{mount} увидеть точку монтирования одного из разделов SD-карты, например:
@output{shell}
# mount
/dev/sd0t177 on /fs/qnx6 type qnx6
@endoutput
Для измерения производительности операции записи и чтения необходимо создать файл и заполнить его случайными значениями с помощью утилиты @l{dd}, при этом измеряя время данной операции через @l{time}:
@output{shell}
# dd if=/dev/urandom of=/dev/shmem/test_file bs=1000 count=256
# time dd if=/dev/shmem/test_file of=<точка монтирования>/test_file \
bs=1000 count=256
@endoutput
Выводом данной команды будет является время и скорость записи:
@output{shell}
256+0 records in
256+0 records out
256000 bytes transferred in 0.038 secs (6736842 bytes/sec)
0m00.04s real 0m00.00s user 0m00.00s system
@endoutput
Для измерения скорости чтения необходимо скопировать созданный тестовый файл в `/dev/null` с помощью утилиты @l{dd}:
@output{shell}
# time dd if=<точка монтирования>/test_file of=/dev/null bs=1000 count=256
@endoutput
Выводом данной команды будет является время и скорость чтения:
@output{shell}
256+0 records in
256+0 records out
256000 bytes transferred in 0.010 secs (25600000 bytes/sec)
0m00.01s real 0m00.00s user 0m00.00s system
@endoutput
@prev{./00-UserGuide.html|table_of_articles||11}

View File

@ -8,6 +8,8 @@
##
## UART_SERIAL: devc-ser8250
## NETWORK: devnp-sun8i
## SD/eMMC: devb-sdmmc
## USB: devu-ehci/devu-ohci
##
###########################################################################
##
@ -57,6 +59,15 @@
waitfor /dev/io-usb/devu-ehci.so 4
waitfor /dev/io-usb/devu-ohci.so 4
#######################################################################
## SD/eMMC driver
#######################################################################
display_msg Starting SD/eMMC driver...
devb-sdmmc mem name=/below4G blk memory=/below4G,cache=8m sdio hc=sunxi,addr=0x01C0F000,irq=92 disk name=sd cam pnp,quiet
waitfor /dev/sd0
devb-sdmmc mem name=/below4G blk memory=/below4G,cache=8m sdio hc=sunxi,addr=0x01C11000,irq=94,emmc disk name=emmc cam pnp,quiet
waitfor /dev/emmc0
#######################################################################
## These env variables are inherited by all the programs which follow
#######################################################################
@ -142,6 +153,12 @@ devc-ser8250
/bin/stty=stty
###########################################################################
## Драйверы SD/eMMC
###########################################################################
devb-sdmmc
#######################################################################
## Драйверы ввода
#######################################################################
@ -189,6 +206,7 @@ waitfor
sloginfo
sleep
date
df
###########################################################################

BIN
prebuilt/armle-v7/bin/devb-sdmmc Executable file

Binary file not shown.

View File

@ -141,6 +141,7 @@ void (*smp_hook_rtn)(void) = hook_dummy;
void (*mdriver_check)(void) = hook_dummy;
void (*mdriver_hook)(void) = hook_dummy;
void (*reboot_func)(void) = hook_dummy;
// Replacement for some C library stuff to minimize startup size
int errno;

View File

@ -29,7 +29,6 @@
#include "startup.h"
int in_hvc;
static char *debug_opt[2];
static void
@ -107,8 +106,10 @@ handle_common_option(int opt) {
case 'v':
debug_flag++;
break;
case 'F':
case 'A':
// Reboot on startup crash instead of waiting forever
misc_flags |= MISC_FLAG_REBOOT_ON_CRASH_REBOOT;
case 'F':
case 'M':
case 'r':
case 'j':
@ -158,9 +159,6 @@ handle_common_option(int opt) {
hwi_add_nanospin(hundred_loop_time, overhead);
}
break;
case 'H':
in_hvc = 1;
break;
}
}
}

View File

@ -32,6 +32,10 @@
void
crash_done(void)
{
// Reboot instead of waiting forever
if (misc_flags & MISC_FLAG_REBOOT_ON_CRASH_REBOOT)
reboot_func();
/* hang forever */
for( ;; ) {}
}

View File

@ -1,5 +1,5 @@
/*
* (c) 2010-2014, SWD Embedded Systems Limited, http://www.kpda.ru
* (c) 2010-2023, SWD Embedded Systems Limited, http://www.kpda.ru
*/
/*
@ -23,17 +23,13 @@
* $
*/
char *optarg;
int optind = 0;
int getopt (int argc, char **argv, char *opts) {
static char *cp;
static int last_optind;
int opt;
static char *cp;
static int last_optind;
int opt;
if (optind == 0) {
optind = 1;
@ -45,6 +41,11 @@ int getopt (int argc, char **argv, char *opts) {
if (last_optind != optind) {
cp = argv [optind];
last_optind = optind;
if (*cp != '-' && *cp != 0) {
++optind;
/* Mark non-optional parameter as undefined optional parameter */
return '?';
}
if (*cp++ != '-' || *cp == 0) {
return -1;
}
@ -82,5 +83,3 @@ int getopt (int argc, char **argv, char *opts) {
}
return opt;
}
#include <sys/platform.h>

View File

@ -189,7 +189,7 @@
#define AW_H3_SD0_BASE 0x01C0F000
#define AW_H3_SD1_BASE 0x01C10000
#define AW_H3_SD2_BASE 0x01C11000
#define AW_H3_SD_SIZE 0x1000
#define SD_GCTL 0x00 // Control register
#define SD_CKCR 0x04 // Clock Control register
#define SD_TMOR 0x08 // Time out register
@ -344,6 +344,7 @@
* CCU
*/
#define AW_H3_CCU_BASE 0x01C20000
#define AW_H3_CCU_SIZE 0x400
#define PLL_CPUX_CTRL_REG 0x0000 // PLL_CPUX Control Register
#define PLL_AUDIO_CTRL_REG 0x0008 // PLL_AUDIO Control Register
@ -1059,4 +1060,4 @@
#endif
#endif

View File

@ -73,6 +73,13 @@ struct callout_rtn {
unsigned rtn_size;
uint8_t rtn_code[1];
};
#elif defined(__E2K__)
struct callout_rtn {
unsigned long *rw_size;
void (*patcher)(paddr32_t paddr, uintptr_t vaddr, unsigned rtn_offset, unsigned rw_offset, void *data, const struct callout_rtn *src);
unsigned long rtn_size;
uint8_t rtn_code[1];
};
#endif
struct callout_slot {
@ -465,6 +472,7 @@ ptrdiff_t cpu_mdriver_map(void);
void *cpu_mdriver_prepare(struct mdriver_entry *md);
int mini_data(int state, void *data);
extern void (*reboot_func)(void);
//#define SUPPORT_CMP_ZLIB
//#define SUPPORT_CMP_LZO
@ -516,7 +524,8 @@ void *callout_memory_map64(unsigned size, paddr64_t phys, unsigned prot_flags);
uintptr_t callout_io_map_indirect(unsigned size, paddr_t *phys);
void *callout_memory_map_indirect(unsigned size, paddr_t *phys, unsigned prot_flags);
#define MISC_FLAG_SUPPRESS_BOOTTIME 0x0001
#define MISC_FLAG_SUPPRESS_BOOTTIME (1<<0)
#define MISC_FLAG_REBOOT_ON_CRASH_REBOOT (1<<1)
void fdt_init(paddr_t);
void fdt_update(void);
@ -524,14 +533,6 @@ void fdt_raminfo(void);
int fdt_qtime(struct qtime_entry *);
/*
* ------------------------------------------------------------------
* QVM Hypervisor Support
* ------------------------------------------------------------------
*/
extern int in_hvc;
void qvm_init(void);
void qvm_update(void);
//
// Variable prototypes
//