gosha-z 3 18 марта, 2019 Опубликовано 18 марта, 2019 · Жалоба 25 minutes ago, doom13 said: Это я сделал. У меня SDK 18.3 генерит PMUFW 1.1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 18 марта, 2019 Опубликовано 18 марта, 2019 · Жалоба Предлагаете обновить Vivado и SDK? На данный момент пользуюсь 2018.2 По моему *.hdf можете ведь попробовать сгенерить pmufw для моей системы? Хотя может на версию SDK ругнётся. xczu9eg.hdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 3 18 марта, 2019 Опубликовано 18 марта, 2019 · Жалоба Лихо. Отправил файло в личку Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fguy 5 18 марта, 2019 Опубликовано 18 марта, 2019 (изменено) · Жалоба https://www.xilinx.com/support/answers/66846.html https://www.xilinx.com/support/answers/67157.html https://www.xilinx.com/support/answers/71709.html поискать еще самим по emmc на https://www.xilinx.com/support/answer-navigation.html Изменено 18 марта, 2019 пользователем fguy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 18 марта, 2019 Опубликовано 18 марта, 2019 · Жалоба Спасибо, сейчас гляну, но я уже столько обыскал, а "воз и ныне там" 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 3 18 марта, 2019 Опубликовано 18 марта, 2019 · Жалоба Вы таки сделали свой device tree? Ибо в ZCU102 eMMC нет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 18 марта, 2019 Опубликовано 18 марта, 2019 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 3 18 марта, 2019 Опубликовано 18 марта, 2019 · Жалоба Just now, doom13 said: Эт в конце программы FSBL переключает режим загрузки в EMMC_BOOT Чегооо???? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 18 марта, 2019 Опубликовано 18 марта, 2019 · Жалоба 2 hours ago, gosha-z said: Чегооо???? Считал, что u-boot не пользует eMMC в нужном режиме, т.к. в дефолтном состоянии выбран QSPI_BOOT режим, и он криво инициализирует eMMC (но ему фиолетово в какой режим загрузки выбран, изменение никак не повлияло на eMMC bus_width). Поэтому попробовал при завершении FSBL перекинуть режим загрузки в EMMC_BOOT: Xil_Out32(0xff5e0200, 0x6100); Переключение режима загрузки расписано тут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 18 марта, 2019 Опубликовано 18 марта, 2019 · Жалоба 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> Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 18 марта, 2019 Опубликовано 18 марта, 2019 · Жалоба 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, не повлияло никак Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 20 марта, 2019 Опубликовано 20 марта, 2019 · Жалоба Нашёл следующее: 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); } Вопрос - что это, кривой драйвер? Или я ещё что-то должен включить в файле конфига? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 3 20 марта, 2019 Опубликовано 20 марта, 2019 · Жалоба А sdhci_setup_cfg этого не делает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 20 марта, 2019 Опубликовано 20 марта, 2019 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 20 марта, 2019 Опубликовано 20 марта, 2019 · Жалоба Исходники для dev_get_platdata найти не могу, поэтому пока не понимаю, могла ли она помочь достать поддержку для 8 бит из device-tree Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться