Перейти к содержанию
    

Предлагаете обновить Vivado и SDK? На данный момент пользуюсь 2018.2

По моему *.hdf можете ведь попробовать сгенерить pmufw для моей системы? Хотя может на версию SDK ругнётся.

xczu9eg.hdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, сейчас гляну, но я уже столько обыскал, а "воз и ныне там"

1 hour ago, gosha-z said:

Отправил файло в личку

3 hours ago, gosha-z said:

У меня SDK 18.3 генерит PMUFW 1.1

Quote

NOTICE:  ATF running on XCZU9EG/silicon v3/RTL5.1 at 0xfffea000
NOTICE:  BL31: Secure code at 0x0
NOTICE:  BL31: Non secure code at 0x8000000
NOTICE:  BL31: v1.4(release):xilinx-v2018.1-4-g93a69a5a
NOTICE:  BL31: Built : 13:47:06, Mar 14 2019
PMUFW:    v1.1
 
 
U-Boot 2019.01-06990-g6fb02bb-dirty (Mar 18 2019 - 11:00:12 +0300)
 
Board: Xilinx ZynqMP
DRAM:  2 GiB
EL Level:    EL2
Chip ID:    zu9eg
MMC:   sdhci@ff160000: 0
Loading Environment from SPI Flash... SF: Detected n25q1024a with page size 512 Bytes, erase size 128 KiB, total 256 MiB
*** Warning - bad CRC, using default environment
 
In:    serial@ff000000
Out:   serial@ff000000
Err:   serial@ff000000
Bootmode: EMMC_MODE
Reset reason:    EXTERNAL  
Net:   ZYNQ GEM: ff0e0000, phyaddr ffffffff, interface rgmii-id
 
Warning: ethernet@ff0e0000 (eth0) using random MAC address - da:15:dd:62:14:b8
eth0: ethernet@ff0e0000
Hit any key to stop autoboot:  1 0  
!!!
!!! Booting cmd is deprecated (will be removed in 2020).
!!! Please move to distro bootcmd.
!!!
clock is disabled (0Hz)
clock is enabled (97751Hz)
CMD_SEND:0
        ARG             0x00000000
        MMC_RSP_NONE
CMD_SEND:8
        ARG             0x000001AA
        RET             -110
CMD_SEND:55
        ARG             0x00000000
        RET             -110
clock is disabled (0Hz)
clock is enabled (97751Hz)
CMD_SEND:0
        ARG             0x00000000
        MMC_RSP_NONE
CMD_SEND:8
        ARG             0x000001AA
        RET             -110
CMD_SEND:55
        ARG             0x00000000
        RET             -110
CMD_SEND:0
        ARG             0x00000000
        MMC_RSP_NONE
CMD_SEND:1
        ARG             0x00000000
        MMC_RSP_R3,4         0x00FF8080  
CMD_SEND:1
        ARG             0x40300080
        MMC_RSP_R3,4         0xC0FF8080  
CMD_SEND:2
        ARG             0x00000000
        MMC_RSP_R2         0x13014E51  
                           0x324A3535  
                           0x4C100D24  
                           0x22ABA500  
 
                    DUMPING DATA
                    000 - 13 01 4E 51  
                    004 - 32 4A 35 35  
                    008 - 4C 10 0D 24  
                    012 - 22 AB A5 00  
CMD_SEND:3
        ARG             0x00010000
        MMC_RSP_R1,5,6,7      0x00000500  
CMD_SEND:9
        ARG             0x00010000
        MMC_RSP_R2         0xD02F0132  
                           0x0F5913FF  
                           0xFFFFFFEF  
                           0x8E400000  
 
                    DUMPING DATA
                    000 - D0 2F 01 32  
                    004 - 0F 59 13 FF  
                    008 - FF FF FF EF  
                    012 - 8E 40 00 00  
CMD_SEND:7
        ARG             0x00010000
        MMC_RSP_R1,5,6,7      0x00000700  
CMD_SEND:8
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
mmc_select_mode_and_width() is running...
clock is enabled (25000000Hz)
trying mode HS200 (200MHz) width 4 (at 200 MHz)
ecbw->ext_csd_bits = 1
CMD_SEND:6
        ARG             0x03B70100
        MMC_RSP_R1b         0x00000800  
CMD_SEND:13
        ARG             0x00010000
        MMC_RSP_R1,5,6,7      0x00000900  
CURR STATE:4
ecbw->cap = 536870912
bus_width(ecbw->cap) = 4
CMD_SEND:6
        ARG             0x03B90200
        MMC_RSP_R1b         0x00000800  
CMD_SEND:13
        ARG             0x00010000
        MMC_RSP_R1,5,6,7      0x00000900  
CURR STATE:4
clock is enabled (200000000Hz)
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000000  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:21
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:8
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:16
        ARG             0x00000200
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:17
        ARG             0x00000000
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:16
        ARG             0x00000200
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:18
        ARG             0x00000040
        MMC_RSP_R1,5,6,7      0x00000900  
CMD_SEND:12
        ARG             0x00000000
        MMC_RSP_R1b         0x00000B00  
switch to partitions #0, OK
mmc0(part 0) is current device
Device: sdhci@ff160000
Manufacturer ID: 13
OEM: 14e
Name: Q2J55  
Bus Speed: 200000000
Mode : HS200 (200MHz)
Rd Block Len: 512
MMC version 5.0
High Capacity: Yes
Capacity: 7.1 GiB
Bus Width: 4-bit
Erase Group Size: 512 KiB
HC WP Group Size: 8 MiB
User Capacity: 7.1 GiB WRREL
Boot Capacity: 16 MiB ENH
RPMB Capacity: 4 MiB ENH

:dash2::dash1::dash3:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, gosha-z said:

А если, на пробу, переставить в SD boot mode?

 

47 minutes ago, doom13 said:

In:    serial@ff000000
Out:   serial@ff000000
Err:   serial@ff000000
Bootmode: EMMC_MODE
Reset reason:    EXTERNAL  

Это? Можно попробовать. Эт в конце программы FSBL переключает режим загрузки в EMMC_BOOT, резисторами вообще выбран режим QSPI_BOOT.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, gosha-z said:

Чегооо????

Считал, что u-boot не пользует eMMC в нужном режиме, т.к. в дефолтном состоянии выбран QSPI_BOOT режим, и он криво инициализирует eMMC (но ему фиолетово в какой режим загрузки выбран, изменение никак не повлияло на eMMC bus_width).

Поэтому попробовал при завершении FSBL перекинуть режим загрузки в EMMC_BOOT:

Xil_Out32(0xff5e0200, 0x6100);

Переключение режима загрузки расписано тут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 minutes ago, gosha-z said:

Вы таки сделали свой device tree? Ибо в ZCU102 eMMC нет

Да, в дефолтном ничего не сказано про bus_width:

Quote

u-boot> bdi
arch_number = 0x0000000000000000
boot_params = 0x0000000000000000
DRAM bank   = 0x0000000000000000
-> start    = 0x0000000000000000
-> size     = 0x000000007ff00000
baudrate    = 115200 bps
TLB addr    = 0x000000007fee0000
relocaddr   = 0x000000007fdd8000
reloc off   = 0x0000000077dd8000
irq_sp      = 0x000000007ddc7db0
sp start    = 0x000000007ddc7db0
ARM frequency = 50 MHz
DSP frequency = 0 MHz
DDR frequency = 0 MHz
Early malloc usage: c00 / 8000
fdt_blob    = 0x000000007fe8c7b0
u-boot> fdt addr 7fe8c7b0
u-boot>  
u-boot>  
u-boot>  
u-boot> fdt print /amba/sdhci@ff160000
sdhci@ff160000 {
    u-boot,dm-pre-reloc;
    compatible = "xlnx,zynqmp-8.9a", "arasan,sdhci-8.9a";
    status = "okay";
    interrupt-parent = <0x00000004>;
    interrupts = <0x00000000 0x00000030 0x00000004>;
    reg = <0x00000000 0xff160000 0x00000000 0x00001000>;
    clock-names = "clk_xin", "clk_ahb";
    xlnx,device_id = <0x00000000>;
    #stream-id-cells = <0x00000001>;
    iommus = <0x00000009 0x00000870>;
    power-domains = <0x0000001c>;
    clocks = <0x00000003 0x00000036 0x00000003 0x0000001f>;
    clock-frequency = " \EB\C2";
    xlnx,mio_bank = <0x00000000>;
    max-frequency = " \EB\C2";
    bus-width = <0x00000008>;
};
u-boot>  
u-boot>

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Quote

Bootmode: SD_MODE
Reset reason:    EXTERNAL  
Net:   ZYNQ GEM: ff0e0000, phyaddr ffffffff, interface rgmii-id
 
Warning: ethernet@ff0e0000 (eth0) using random MAC address - 9a:17:5f:64:0e:9b
eth0: ethernet@ff0e0000
Hit any key to stop autoboot:  1 0  
!!!
!!! Booting cmd is deprecated (will be removed in 2020).
!!! Please move to distro bootcmd.
!!!Device: sdhci@ff160000
Manufacturer ID: 13
OEM: 14e
Name: Q2J55  
Bus Speed: 200000000
Mode : HS200 (200MHz)
Rd Block Len: 512
MMC version 5.0
High Capacity: Yes
Capacity: 7.1 GiB
Bus Width: 4-bit
Erase Group Size: 512 KiB
HC WP Group Size: 8 MiB
User Capacity: 7.1 GiB WRREL
Boot Capacity: 16 MiB ENH
RPMB Capacity: 4 MiB ENH

Попробовал SD_MODE, не повлияло никак

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашёл следующее:

1. параметер bus_width достаётся из device-tree функцией

Quote

val = dev_read_u32_default(dev, "bus-width", 1);

2. В драйвере zynq_sdhci.c она не вызывается вообще

3. В файле mmc-uclass.c есть функция

int mmc_of_parse(struct udevice *dev, struct mmc_config *cfg)
{
	int val;

#ifdef __DOOM13_DEBUG
		printf("------------------------------------------------------------------\n");
		printf("RUN: int mmc_of_parse(struct udevice *dev, struct mmc_config *cfg)\n");
		printf("\n");
#endif

	val = dev_read_u32_default(dev, "bus-width", 1);

	switch (val) {
	case 0x8:
		cfg->host_caps |= MMC_MODE_8BIT;
		/* fall through */
	case 0x4:
		cfg->host_caps |= MMC_MODE_4BIT;
		/* fall through */
	case 0x1:
		cfg->host_caps |= MMC_MODE_1BIT;
		break;
	default:
		dev_err(dev, "Invalid \"bus-width\" value %u!\n", val);
		return -EINVAL;
	}

	/* f_max is obtained from the optional "max-frequency" property */
	dev_read_u32(dev, "max-frequency", &cfg->f_max);

	if (dev_read_bool(dev, "cap-sd-highspeed"))
		cfg->host_caps |= MMC_CAP(SD_HS);
	if (dev_read_bool(dev, "cap-mmc-highspeed"))
		cfg->host_caps |= MMC_CAP(MMC_HS);
	if (dev_read_bool(dev, "sd-uhs-sdr12"))
		cfg->host_caps |= MMC_CAP(UHS_SDR12);
	if (dev_read_bool(dev, "sd-uhs-sdr25"))
		cfg->host_caps |= MMC_CAP(UHS_SDR25);
	if (dev_read_bool(dev, "sd-uhs-sdr50"))
		cfg->host_caps |= MMC_CAP(UHS_SDR50);
	if (dev_read_bool(dev, "sd-uhs-sdr104"))
		cfg->host_caps |= MMC_CAP(UHS_SDR104);
	if (dev_read_bool(dev, "sd-uhs-ddr50"))
		cfg->host_caps |= MMC_CAP(UHS_DDR50);
	if (dev_read_bool(dev, "mmc-ddr-1_8v"))
		cfg->host_caps |= MMC_CAP(MMC_DDR_52);
	if (dev_read_bool(dev, "mmc-ddr-1_2v"))
		cfg->host_caps |= MMC_CAP(MMC_DDR_52);
	if (dev_read_bool(dev, "mmc-hs200-1_8v"))
		cfg->host_caps |= MMC_CAP(MMC_HS_200);
	if (dev_read_bool(dev, "mmc-hs200-1_2v"))
		cfg->host_caps |= MMC_CAP(MMC_HS_200);
	if (dev_read_bool(dev, "mmc-hs400-1_8v"))
		cfg->host_caps |= MMC_CAP(MMC_HS_400);
	if (dev_read_bool(dev, "mmc-hs400-1_2v"))
		cfg->host_caps |= MMC_CAP(MMC_HS_400);

	return 0;
}

, но она тож нигде по коду не вызывается, получаю, что мои правки в device-tree

/include/ "system-conf.dtsi"
/ {
};

/* SD0 eMMC, 8-bit wide data bus */
/* non-removable; */
/* broken-mmc-highspeed; */

&sdhci0 {
	max-frequency = <200000000>;
        bus-width = <8>;
};

не применяются. Получаю, что если подправить функцию static int arasan_sdhci_probe(struct udevice *dev), то контроллер SD переключит шину и eMMC память в режим 8-бит.

static int arasan_sdhci_probe(struct udevice *dev)
{
	struct arasan_sdhci_plat *plat = dev_get_platdata(dev);
	struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
	struct arasan_sdhci_priv *priv = dev_get_priv(dev);
	struct sdhci_host *host;
	struct clk clk;
	unsigned long clock;
	int ret;

#ifdef __DOOM13_DEBUG
		printf("-----------------------------------\n");
		printf("RUN: static int arasan_sdhci_probe(struct udevice *dev)\n");
		printf("1. plat->mmc.cfg->host_caps = %x\n", plat->mmc.cfg->host_caps); // printf --> 0
		printf("\n");
#endif

	host = priv->host;

	ret = clk_get_by_index(dev, 0, &clk);
	if (ret < 0) {
		dev_err(dev, "failed to get clock\n");
		return ret;
	}

	clock = clk_get_rate(&clk);
	if (IS_ERR_VALUE(clock)) {
		dev_err(dev, "failed to get rate\n");
		return clock;
	}

	debug("%s: CLK %ld\n", __func__, clock);

	ret = clk_enable(&clk);
	if (ret && ret != -ENOSYS) {
		dev_err(dev, "failed to enable clock\n");
		return ret;
	}

	host->quirks = SDHCI_QUIRK_WAIT_SEND_CMD |
		       SDHCI_QUIRK_BROKEN_R1B;

#ifdef CONFIG_ZYNQ_HISPD_BROKEN
	host->quirks |= SDHCI_QUIRK_BROKEN_HISPD_MODE;
#endif

	if (priv->no_1p8)
		host->quirks |= SDHCI_QUIRK_NO_1_8_V;

	host->max_clk = clock;

#ifdef __DOOM13_DEBUG

		printf("1.2. plat->mmc.cfg->host_caps = %x\n", plat->mmc.cfg->host_caps); // printf --> 0

		mmc_of_parse(dev, &plat->cfg);// ТУТ ДОБАВИТ ПОДДЕРЖКУ 8-бит

		printf("2. plat->mmc.cfg->host_caps = %x\n", plat->mmc.cfg->host_caps); // printf --> 70000000
		printf("\n");
#endif

	ret = sdhci_setup_cfg(&plat->cfg, host, plat->f_max,
			      CONFIG_ZYNQ_SDHCI_MIN_FREQ);

#ifdef __DOOM13_DEBUG
		printf("3. plat->mmc.cfg->host_caps = %x\n", plat->mmc.cfg->host_caps);
		printf("\n");
#endif

	host->mmc = &plat->mmc;
	if (ret)
		return ret;
	host->mmc->priv = host;
	host->mmc->dev = dev;
	upriv->mmc = host->mmc;

#ifdef __DOOM13_DEBUG
		printf("upriv->mmc->cfg->host_caps = %x\n", upriv->mmc->cfg->host_caps);
		printf("\n");
#endif

	return sdhci_probe(dev);
}

Вопрос - что это, кривой драйвер? Или я ещё что-то должен включить в файле конфига?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, gosha-z said:

А sdhci_setup_cfg этого не делает?

Нет, если перед ней не ставлю

mmc_of_parse(dev, &plat->cfg);// ТУТ ДОБАВИТ ПОДДЕРЖКУ 8-бит

, то поддержку 8ми бит не получу

int sdhci_setup_cfg(struct mmc_config *cfg, struct sdhci_host *host,
		u32 f_max, u32 f_min)
{
	u32 caps, caps_1 = 0;

#ifdef __DOOM13_DEBUG
		printf("-----------------------------------\n");
		printf("RUN: int sdhci_setup_cfg(struct mmc_config *cfg, struct sdhci_host *host, u32 f_max, u32 f_min)\n");
		printf("cfg->host_caps = %x\n", cfg->host_caps);
		printf("\n");
#endif

	caps = sdhci_readl(host, SDHCI_CAPABILITIES);

#ifdef CONFIG_MMC_SDHCI_SDMA
	if (!(caps & SDHCI_CAN_DO_SDMA)) {
		printf("%s: Your controller doesn't support SDMA!!\n",
		       __func__);
		return -EINVAL;
	}
#endif
	if (host->quirks & SDHCI_QUIRK_REG32_RW)
		host->version =
			sdhci_readl(host, SDHCI_HOST_VERSION - 2) >> 16;
	else
		host->version = sdhci_readw(host, SDHCI_HOST_VERSION);

	cfg->name = host->name;
#ifndef CONFIG_DM_MMC
	cfg->ops = &sdhci_ops;
#endif

	/* Check whether the clock multiplier is supported or not */
	if (SDHCI_GET_VERSION(host) >= SDHCI_SPEC_300) {
		caps_1 = sdhci_readl(host, SDHCI_CAPABILITIES_1);
		host->clk_mul = (caps_1 & SDHCI_CLOCK_MUL_MASK) >>
				SDHCI_CLOCK_MUL_SHIFT;
	}

	if (host->max_clk == 0) {
		if (SDHCI_GET_VERSION(host) >= SDHCI_SPEC_300)
			host->max_clk = (caps & SDHCI_CLOCK_V3_BASE_MASK) >>
				SDHCI_CLOCK_BASE_SHIFT;
		else
			host->max_clk = (caps & SDHCI_CLOCK_BASE_MASK) >>
				SDHCI_CLOCK_BASE_SHIFT;
		host->max_clk *= 1000000;
		if (host->clk_mul)
			host->max_clk *= host->clk_mul;
	}
	if (host->max_clk == 0) {
		printf("%s: Hardware doesn't specify base clock frequency\n",
		       __func__);
		return -EINVAL;
	}
	if (f_max && (f_max < host->max_clk))
		cfg->f_max = f_max;
	else
		cfg->f_max = host->max_clk;
	if (f_min)
		cfg->f_min = f_min;
	else {
		if (SDHCI_GET_VERSION(host) >= SDHCI_SPEC_300)
			cfg->f_min = cfg->f_max / SDHCI_MAX_DIV_SPEC_300;
		else
			cfg->f_min = cfg->f_max / SDHCI_MAX_DIV_SPEC_200;
	}
	cfg->voltages = 0;
	if (caps & SDHCI_CAN_VDD_330)
		cfg->voltages |= MMC_VDD_32_33 | MMC_VDD_33_34;
	if (caps & SDHCI_CAN_VDD_300)
		cfg->voltages |= MMC_VDD_29_30 | MMC_VDD_30_31;
	if (caps & SDHCI_CAN_VDD_180)
		cfg->voltages |= MMC_VDD_165_195;

	if (host->quirks & SDHCI_QUIRK_BROKEN_VOLTAGE)
		cfg->voltages |= host->voltages;

#ifdef __DOOM13_DEBUG
		printf("cfg->host_caps = %x\n", cfg->host_caps);
		printf("\n");
#endif

	cfg->host_caps |= MMC_MODE_HS | MMC_MODE_HS_52MHz | MMC_MODE_4BIT;

#ifdef __DOOM13_DEBUG
		printf("cfg->host_caps = %x\n", cfg->host_caps);
		printf("\n");
#endif

	/* Since Host Controller Version3.0 */
	if (SDHCI_GET_VERSION(host) >= SDHCI_SPEC_300) {
		if (!(caps & SDHCI_CAN_DO_8BIT))
			cfg->host_caps &= ~MMC_MODE_8BIT;
	}

	if (host->quirks & SDHCI_QUIRK_BROKEN_HISPD_MODE) {
		cfg->host_caps &= ~MMC_MODE_HS;
		cfg->host_caps &= ~MMC_MODE_HS_52MHz;
	}

	if (SDHCI_GET_VERSION(host) >= SDHCI_SPEC_300)
		caps_1 = sdhci_readl(host, SDHCI_CAPABILITIES_1);

	if (!(cfg->voltages & MMC_VDD_165_195) ||
	    (host->quirks & SDHCI_QUIRK_NO_1_8_V))
		caps_1 &= ~(SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_SDR50 |
			    SDHCI_SUPPORT_DDR50);

	if (caps_1 & (SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_SDR50 |
		      SDHCI_SUPPORT_DDR50))
		cfg->host_caps |= MMC_CAP(UHS_SDR12) | MMC_CAP(UHS_SDR25);

	if (caps_1 & SDHCI_SUPPORT_SDR104) {
		cfg->host_caps |= MMC_CAP(UHS_SDR104) | MMC_CAP(UHS_SDR50);
		/*
		 * SD3.0: SDR104 is supported so (for eMMC) the caps2
		 * field can be promoted to support HS200.
		 */
		cfg->host_caps |= MMC_CAP(MMC_HS_200);
	} else if (caps_1 & SDHCI_SUPPORT_SDR50) {
		cfg->host_caps |= MMC_CAP(UHS_SDR50);
	}

	if (caps_1 & SDHCI_SUPPORT_DDR50)
		cfg->host_caps |= MMC_CAP(UHS_DDR50);

	if (host->host_caps)
		cfg->host_caps |= host->host_caps;

	cfg->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;

	return 0;
}

 

Получается, что в

static int arasan_sdhci_probe(struct udevice *dev)
{

конфиг 8бит из device-tree могла достать только

struct arasan_sdhci_plat *plat = dev_get_platdata(dev);

но она этого не сделала (может ещё какой-то конфиг не установлен), а больше некому, только если править драйвер, добавляя парсер для device-tree

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Исходники для dev_get_platdata найти не могу, поэтому пока не понимаю, могла ли она помочь достать поддержку для 8 бит из device-tree

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...