Skip to content

Commit 50a8ec6

Browse files
RadekPesinadavids5
authored andcommitted
Add eMMC driver support
- Fix DMA addressing issues within litex_sendsetup/litex_recvsetup - Extend with handling specific to eMMC commands during init & use. - Cleanup of 4-bit BUS handling for SD and eMMC - For eMMC, Send CMD0 during init as per JEDEC v4.41 for pre-idle
1 parent eb0e05b commit 50a8ec6

File tree

5 files changed

+316
-31
lines changed

5 files changed

+316
-31
lines changed

arch/risc-v/src/litex/litex_sdio.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -860,10 +860,12 @@ static int litex_recvsetup(struct sdio_dev_s *dev, uint8_t *buffer,
860860

861861
/* flush CPU d-cache */
862862

863+
#ifndef CONFIG_LITEX_COHERENT_DMA
863864
up_invalidate_dcache_all();
865+
#endif
864866

865867
putreg32(0, LITEX_SDBLOCK2MEM_DMA_ENABLE);
866-
putreg32((uintptr_t)buffer >> 32, LITEX_SDBLOCK2MEM_DMA_BASE);
868+
putreg32((uintptr_t)(&buffer[4]), LITEX_SDBLOCK2MEM_DMA_BASE);
867869
putreg32((uintptr_t)buffer, LITEX_SDBLOCK2MEM_DMA_BASE + 0x04);
868870
putreg32(nbytes, LITEX_SDBLOCK2MEM_DMA_LENGTH);
869871
putreg32(1, LITEX_SDBLOCK2MEM_DMA_ENABLE);
@@ -903,10 +905,12 @@ static int litex_sendsetup(struct sdio_dev_s *dev,
903905

904906
/* flush CPU d-cache */
905907

908+
#ifndef CONFIG_LITEX_COHERENT_DMA
906909
up_invalidate_dcache_all();
910+
#endif
907911

908912
putreg32(0, LITEX_SDMEM2BLOCK_DMA_ENABLE);
909-
putreg32((uintptr_t)buffer >> 32, LITEX_SDMEM2BLOCK_DMA_BASE);
913+
putreg32((uintptr_t)(&buffer[4]), LITEX_SDMEM2BLOCK_DMA_BASE);
910914
putreg32((uintptr_t)buffer, LITEX_SDMEM2BLOCK_DMA_BASE + 0x04);
911915
putreg32(nbytes, LITEX_SDMEM2BLOCK_DMA_LENGTH);
912916
putreg32(1, LITEX_SDMEM2BLOCK_DMA_ENABLE);

boards/risc-v/litex/arty_a7/Kconfig

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,44 @@
55

66
if ARCH_BOARD_ARTY_A7
77

8+
9+
config LITEX_SDIO
10+
bool "SDIO"
11+
default n
12+
select SCHED_HPWORK
13+
select MMCSD
14+
select MMCSD_SDIO
15+
select SDIO_BLOCKSETUP
16+
select ARCH_HAVE_SDIO
17+
select SDIO_DMA
18+
19+
config LITEX_SDIO1
20+
bool "Enable SDIO1"
21+
default y if LITEX_SDIO
22+
select LITEX_SDIO_DMA
23+
depends on LITEX_SDIO
24+
25+
config LITEX_IDMODE_FREQ
26+
int "ID mode frequency"
27+
default 400000
28+
depends on LITEX_SDIO
29+
---help---
30+
Initial, ID mode SD frequency
31+
32+
config LITEX_MMCXFR_FREQ
33+
int "MMC transfer frequency"
34+
default 25000000
35+
depends on LITEX_SDIO
36+
---help---
37+
Frequency to use for transferring data to/from an MMC card
38+
39+
config LITEX_SD4BIT_FREQ
40+
int "SD 4-bit transfer frequency"
41+
default 50000000
42+
depends on LITEX_SDIO
43+
---help---
44+
Frequency to use for transferring data to/from an SD card using all four data lines.
45+
846
config LITEX_SDIO_MOUNT
947
bool "Mount SDIO at startup"
1048
default n
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
#
2+
# This file is autogenerated: PLEASE DO NOT EDIT IT.
3+
#
4+
# You can use "make menuconfig" to make any modifications to the installed .config file.
5+
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
6+
# modifications.
7+
#
8+
# CONFIG_DISABLE_PTHREAD is not set
9+
# CONFIG_FS_PROCFS_EXCLUDE_BLOCKS is not set
10+
# CONFIG_FS_PROCFS_EXCLUDE_ENVIRON is not set
11+
# CONFIG_FS_PROCFS_EXCLUDE_MEMDUMP is not set
12+
# CONFIG_FS_PROCFS_EXCLUDE_MEMINFO is not set
13+
# CONFIG_FS_PROCFS_EXCLUDE_MOUNT is not set
14+
# CONFIG_FS_PROCFS_EXCLUDE_MOUNTS is not set
15+
# CONFIG_FS_PROCFS_EXCLUDE_PROCESS is not set
16+
# CONFIG_FS_PROCFS_EXCLUDE_UPTIME is not set
17+
# CONFIG_FS_PROCFS_EXCLUDE_USAGE is not set
18+
# CONFIG_FS_PROCFS_EXCLUDE_VERSION is not set
19+
# CONFIG_NSH_DISABLEBG is not set
20+
# CONFIG_NSH_DISABLE_LOSMART is not set
21+
# CONFIG_NSH_DISABLE_UNAME is not set
22+
# CONFIG_STANDARD_SERIAL is not set
23+
CONFIG_ARCH="risc-v"
24+
CONFIG_ARCH_BOARD="arty_a7"
25+
CONFIG_ARCH_BOARD_ARTY_A7=y
26+
CONFIG_ARCH_CHIP="litex"
27+
CONFIG_ARCH_CHIP_LITEX=y
28+
CONFIG_ARCH_INTERRUPTSTACK=8192
29+
CONFIG_ARCH_RISCV=y
30+
CONFIG_ARCH_STACKDUMP=y
31+
CONFIG_BINFMT_DISABLE=y
32+
CONFIG_BOARD_LOOPSPERMSEC=10000
33+
CONFIG_BUILTIN=y
34+
CONFIG_DEBUG_FULLOPT=y
35+
CONFIG_DEBUG_SYMBOLS=y
36+
CONFIG_DEFAULT_SMALL=y
37+
CONFIG_DEV_ZERO=y
38+
CONFIG_EXAMPLES_HELLO=y
39+
CONFIG_EXAMPLES_HELLO_STACKSIZE=8192
40+
CONFIG_FAT_DMAMEMORY=y
41+
CONFIG_FAT_FORCE_INDIRECT=y
42+
CONFIG_FAT_LFN=y
43+
CONFIG_FS_FAT=y
44+
CONFIG_FS_FATTIME=y
45+
CONFIG_FS_PROCFS=y
46+
CONFIG_GRAN=y
47+
CONFIG_IDLETHREAD_STACKSIZE=8192
48+
CONFIG_INIT_ENTRYPOINT="nsh_main"
49+
CONFIG_INIT_STACKSIZE=8192
50+
CONFIG_INTELHEX_BINARY=y
51+
CONFIG_LIBC_PERROR_STDOUT=y
52+
CONFIG_LIBC_STRERROR=y
53+
CONFIG_LITEX_SDIO=y
54+
CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6
55+
CONFIG_NSH_ARCHINIT=y
56+
CONFIG_NSH_BUILTIN_APPS=y
57+
CONFIG_NSH_FILEIOSIZE=64
58+
CONFIG_NSH_STRERROR=y
59+
CONFIG_POSIX_SPAWN_DEFAULT_STACKSIZE=8192
60+
CONFIG_PTHREAD_STACK_DEFAULT=8192
61+
CONFIG_RAM_SIZE=268435456
62+
CONFIG_RAM_START=0x40000000
63+
CONFIG_RAW_BINARY=y
64+
CONFIG_RR_INTERVAL=200
65+
CONFIG_SCHED_WAITPID=y
66+
CONFIG_STACK_COLORATION=y
67+
CONFIG_START_DAY=20
68+
CONFIG_START_MONTH=3
69+
CONFIG_START_YEAR=2020
70+
CONFIG_SYSTEM_NSH=y
71+
CONFIG_TASK_NAME_SIZE=12
72+
CONFIG_TESTING_GETPRIME=y
73+
CONFIG_UART0_RXBUFSIZE=128
74+
CONFIG_UART0_SERIAL_CONSOLE=y
75+
CONFIG_UART0_TXBUFSIZE=128

0 commit comments

Comments
 (0)