Message ID | 20230225014220.13166-2-martin.p.rowe@gmail.com |
---|---|
State | Superseded |
Delegated to: | Stefan Roese |
Headers | show |
Series | arm: mvebu: clearfog: defconfig updates | expand |
On Saturday 25 February 2023 11:42:19 Martin Rowe wrote: > A388 Clearfog MMC is either SD Card or eMMC with different behaviour for > both. Setting MMC_BROKEN_CD allows both to correctly detect MMC. > > Signed-off-by: Martin Rowe <martin.p.rowe@gmail.com> It looks like a hack but I think we do not have a better option for now. If I understand the issue correctly then card-detect pin is unconnected for eMMC variant and used for checking if SD card is present for SD variant. Unconnected pin seems to have some internal pull-up/down which reports not-present state for eMMC variant. eMMC does not have any presence signal, so card-detect pin must be ignored for eMMC. This looks like a chicken and egg problem and the only option to support both variants is to ignore card-detect pin and always try to initialize device connected to mmc controller (which may be eMMC or SD). I do not know if there is a better option for ignoring card-detect pin in u-boot, so: Acked-by: Pali Rohár <pali@kernel.org> > --- > configs/clearfog_defconfig | 3 +-- > configs/clearfog_sata_defconfig | 8 ++++---- > 2 files changed, 5 insertions(+), 6 deletions(-) > > diff --git a/configs/clearfog_defconfig b/configs/clearfog_defconfig > index 8cd35f9f1a..24e7c16ac7 100644 > --- a/configs/clearfog_defconfig > +++ b/configs/clearfog_defconfig > @@ -46,7 +46,6 @@ CONFIG_CMD_USB=y > CONFIG_CMD_TFTPPUT=y > CONFIG_CMD_CACHE=y > CONFIG_CMD_TIME=y > -CONFIG_CMD_MVEBU_BUBT=y > CONFIG_ENV_OVERWRITE=y > CONFIG_ENV_MIN_ENTRIES=128 > CONFIG_ARP_TIMEOUT=200 > @@ -59,7 +58,7 @@ CONFIG_DM_I2C=y > CONFIG_SYS_I2C_MVTWSI=y > CONFIG_I2C_EEPROM=y > CONFIG_SPL_I2C_EEPROM=y > -CONFIG_SUPPORT_EMMC_BOOT=y > +CONFIG_MMC_BROKEN_CD=y > CONFIG_MMC_SDHCI=y > CONFIG_MMC_SDHCI_SDMA=y > CONFIG_MMC_SDHCI_MV=y > diff --git a/configs/clearfog_sata_defconfig b/configs/clearfog_sata_defconfig > index e9b36150ea..84f900bf50 100644 > --- a/configs/clearfog_sata_defconfig > +++ b/configs/clearfog_sata_defconfig > @@ -6,11 +6,14 @@ CONFIG_TEXT_BASE=0x00800000 > CONFIG_SPL_LIBCOMMON_SUPPORT=y > CONFIG_SPL_LIBGENERIC_SUPPORT=y > CONFIG_NR_DRAM_BANKS=2 > +CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y > +CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0xff0000 > CONFIG_TARGET_CLEARFOG=y > CONFIG_MVEBU_SPL_BOOT_DEVICE_SATA=y > CONFIG_DEFAULT_DEVICE_TREE="armada-388-clearfog" > CONFIG_SPL_TEXT_BASE=0x40000030 > CONFIG_SPL_SERIAL=y > +CONFIG_SPL_STACK=0x4002c000 > CONFIG_SPL=y > CONFIG_DEBUG_UART_BASE=0xf1012000 > CONFIG_DEBUG_UART_CLOCK=250000000 > @@ -18,8 +21,6 @@ CONFIG_SYS_LOAD_ADDR=0x800000 > CONFIG_DEBUG_UART=y > CONFIG_AHCI=y > CONFIG_DISTRO_DEFAULTS=y > -CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y > -CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0xff0000 > CONFIG_BOOTDELAY=3 > CONFIG_USE_PREBOOT=y > CONFIG_SYS_CONSOLE_INFO_QUIET=y > @@ -31,7 +32,6 @@ CONFIG_SPL_BSS_START_ADDR=0x40023000 > CONFIG_SPL_BSS_MAX_SIZE=0x4000 > CONFIG_SPL_SYS_MALLOC_SIMPLE=y > # CONFIG_SPL_SHARES_INIT_SP_ADDR is not set > -CONFIG_SPL_STACK=0x4002c000 > CONFIG_SPL_I2C=y > CONFIG_SYS_MAXARGS=32 > CONFIG_CMD_TLV_EEPROM=y > @@ -46,7 +46,6 @@ CONFIG_CMD_USB=y > CONFIG_CMD_TFTPPUT=y > CONFIG_CMD_CACHE=y > CONFIG_CMD_TIME=y > -CONFIG_CMD_MVEBU_BUBT=y > CONFIG_ENV_OVERWRITE=y > CONFIG_ENV_MIN_ENTRIES=128 > CONFIG_ARP_TIMEOUT=200 > @@ -59,6 +58,7 @@ CONFIG_DM_I2C=y > CONFIG_SYS_I2C_MVTWSI=y > CONFIG_I2C_EEPROM=y > CONFIG_SPL_I2C_EEPROM=y > +CONFIG_MMC_BROKEN_CD=y > CONFIG_SUPPORT_EMMC_BOOT=y > CONFIG_MMC_SDHCI=y > CONFIG_MMC_SDHCI_SDMA=y > -- > 2.39.2 >
On Saturday 25 February 2023 22:49:56 Pali Rohár wrote: > On Saturday 25 February 2023 11:42:19 Martin Rowe wrote: > > A388 Clearfog MMC is either SD Card or eMMC with different behaviour for > > both. Setting MMC_BROKEN_CD allows both to correctly detect MMC. > > > > Signed-off-by: Martin Rowe <martin.p.rowe@gmail.com> > > It looks like a hack but I think we do not have a better option for now. > > If I understand the issue correctly then card-detect pin is unconnected > for eMMC variant and used for checking if SD card is present for SD > variant. Unconnected pin seems to have some internal pull-up/down which > reports not-present state for eMMC variant. eMMC does not have any > presence signal, so card-detect pin must be ignored for eMMC. > > This looks like a chicken and egg problem and the only option to support > both variants is to ignore card-detect pin and always try to initialize > device connected to mmc controller (which may be eMMC or SD). Hm... maybe better way could be to edit armada-388-clearfog-u-boot.dtsi file and add there this? /delete-property/ cd-gpios; > I do not know if there is a better option for ignoring card-detect pin > in u-boot, so: > > Acked-by: Pali Rohár <pali@kernel.org> > > > --- > > configs/clearfog_defconfig | 3 +-- > > configs/clearfog_sata_defconfig | 8 ++++---- > > 2 files changed, 5 insertions(+), 6 deletions(-) > > > > diff --git a/configs/clearfog_defconfig b/configs/clearfog_defconfig > > index 8cd35f9f1a..24e7c16ac7 100644 > > --- a/configs/clearfog_defconfig > > +++ b/configs/clearfog_defconfig > > @@ -46,7 +46,6 @@ CONFIG_CMD_USB=y > > CONFIG_CMD_TFTPPUT=y > > CONFIG_CMD_CACHE=y > > CONFIG_CMD_TIME=y > > -CONFIG_CMD_MVEBU_BUBT=y > > CONFIG_ENV_OVERWRITE=y > > CONFIG_ENV_MIN_ENTRIES=128 > > CONFIG_ARP_TIMEOUT=200 > > @@ -59,7 +58,7 @@ CONFIG_DM_I2C=y > > CONFIG_SYS_I2C_MVTWSI=y > > CONFIG_I2C_EEPROM=y > > CONFIG_SPL_I2C_EEPROM=y > > -CONFIG_SUPPORT_EMMC_BOOT=y > > +CONFIG_MMC_BROKEN_CD=y > > CONFIG_MMC_SDHCI=y > > CONFIG_MMC_SDHCI_SDMA=y > > CONFIG_MMC_SDHCI_MV=y > > diff --git a/configs/clearfog_sata_defconfig b/configs/clearfog_sata_defconfig > > index e9b36150ea..84f900bf50 100644 > > --- a/configs/clearfog_sata_defconfig > > +++ b/configs/clearfog_sata_defconfig > > @@ -6,11 +6,14 @@ CONFIG_TEXT_BASE=0x00800000 > > CONFIG_SPL_LIBCOMMON_SUPPORT=y > > CONFIG_SPL_LIBGENERIC_SUPPORT=y > > CONFIG_NR_DRAM_BANKS=2 > > +CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y > > +CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0xff0000 > > CONFIG_TARGET_CLEARFOG=y > > CONFIG_MVEBU_SPL_BOOT_DEVICE_SATA=y > > CONFIG_DEFAULT_DEVICE_TREE="armada-388-clearfog" > > CONFIG_SPL_TEXT_BASE=0x40000030 > > CONFIG_SPL_SERIAL=y > > +CONFIG_SPL_STACK=0x4002c000 > > CONFIG_SPL=y > > CONFIG_DEBUG_UART_BASE=0xf1012000 > > CONFIG_DEBUG_UART_CLOCK=250000000 > > @@ -18,8 +21,6 @@ CONFIG_SYS_LOAD_ADDR=0x800000 > > CONFIG_DEBUG_UART=y > > CONFIG_AHCI=y > > CONFIG_DISTRO_DEFAULTS=y > > -CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y > > -CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0xff0000 > > CONFIG_BOOTDELAY=3 > > CONFIG_USE_PREBOOT=y > > CONFIG_SYS_CONSOLE_INFO_QUIET=y > > @@ -31,7 +32,6 @@ CONFIG_SPL_BSS_START_ADDR=0x40023000 > > CONFIG_SPL_BSS_MAX_SIZE=0x4000 > > CONFIG_SPL_SYS_MALLOC_SIMPLE=y > > # CONFIG_SPL_SHARES_INIT_SP_ADDR is not set > > -CONFIG_SPL_STACK=0x4002c000 > > CONFIG_SPL_I2C=y > > CONFIG_SYS_MAXARGS=32 > > CONFIG_CMD_TLV_EEPROM=y > > @@ -46,7 +46,6 @@ CONFIG_CMD_USB=y > > CONFIG_CMD_TFTPPUT=y > > CONFIG_CMD_CACHE=y > > CONFIG_CMD_TIME=y > > -CONFIG_CMD_MVEBU_BUBT=y > > CONFIG_ENV_OVERWRITE=y > > CONFIG_ENV_MIN_ENTRIES=128 > > CONFIG_ARP_TIMEOUT=200 > > @@ -59,6 +58,7 @@ CONFIG_DM_I2C=y > > CONFIG_SYS_I2C_MVTWSI=y > > CONFIG_I2C_EEPROM=y > > CONFIG_SPL_I2C_EEPROM=y > > +CONFIG_MMC_BROKEN_CD=y > > CONFIG_SUPPORT_EMMC_BOOT=y > > CONFIG_MMC_SDHCI=y > > CONFIG_MMC_SDHCI_SDMA=y > > -- > > 2.39.2 > >
On Sat, 25 Feb 2023 at 22:14, Pali Rohár <pali@kernel.org> wrote: > On Saturday 25 February 2023 22:49:56 Pali Rohár wrote: > > On Saturday 25 February 2023 11:42:19 Martin Rowe wrote: > > > A388 Clearfog MMC is either SD Card or eMMC with different behaviour for > > > both. Setting MMC_BROKEN_CD allows both to correctly detect MMC. > > > > > > Signed-off-by: Martin Rowe <martin.p.rowe@gmail.com> > > > > It looks like a hack but I think we do not have a better option for now. > > > > If I understand the issue correctly then card-detect pin is unconnected > > for eMMC variant and used for checking if SD card is present for SD > > variant. Unconnected pin seems to have some internal pull-up/down which > > reports not-present state for eMMC variant. eMMC does not have any > > presence signal, so card-detect pin must be ignored for eMMC. > > > > This looks like a chicken and egg problem and the only option to support > > both variants is to ignore card-detect pin and always try to initialize > > device connected to mmc controller (which may be eMMC or SD). > > Hm... maybe better way could be to edit armada-388-clearfog-u-boot.dtsi > file and add there this? /delete-property/ cd-gpios; I just tried this and the device is not detected again; adding "non-removable" seems to be required if changing the dts. > > I do not know if there is a better option for ignoring card-detect pin > > in u-boot, so: I should point out that I did investigate runtime detection. Patching the fdt alone didn't seem to work using the hooks that were available, so I started looking into how MMC was being initialised to figure out if there was something changing the state of the device before it was returned to BootROM. I ended up in drivers/mmc/mmc.c mmc_start_init trying to figure out how we always end up with the "MMC: no card present" message in the eMMC case. I was going to write some extra logic around the mmc_getcd call, but realised there was already an ifndef with a config that seemed like this exact use-case. Given that config solved the problem it seemed like the cleanest solution. > > Acked-by: Pali Rohár <pali@kernel.org> > > > > > --- > > > configs/clearfog_defconfig | 3 +-- > > > configs/clearfog_sata_defconfig | 8 ++++---- > > > 2 files changed, 5 insertions(+), 6 deletions(-) > > > > > > diff --git a/configs/clearfog_defconfig b/configs/clearfog_defconfig > > > index 8cd35f9f1a..24e7c16ac7 100644 > > > --- a/configs/clearfog_defconfig > > > +++ b/configs/clearfog_defconfig > > > @@ -46,7 +46,6 @@ CONFIG_CMD_USB=y > > > CONFIG_CMD_TFTPPUT=y > > > CONFIG_CMD_CACHE=y > > > CONFIG_CMD_TIME=y > > > -CONFIG_CMD_MVEBU_BUBT=y > > > CONFIG_ENV_OVERWRITE=y > > > CONFIG_ENV_MIN_ENTRIES=128 > > > CONFIG_ARP_TIMEOUT=200 > > > @@ -59,7 +58,7 @@ CONFIG_DM_I2C=y > > > CONFIG_SYS_I2C_MVTWSI=y > > > CONFIG_I2C_EEPROM=y > > > CONFIG_SPL_I2C_EEPROM=y > > > -CONFIG_SUPPORT_EMMC_BOOT=y > > > +CONFIG_MMC_BROKEN_CD=y > > > CONFIG_MMC_SDHCI=y > > > CONFIG_MMC_SDHCI_SDMA=y > > > CONFIG_MMC_SDHCI_MV=y > > > diff --git a/configs/clearfog_sata_defconfig b/configs/clearfog_sata_defconfig > > > index e9b36150ea..84f900bf50 100644 > > > --- a/configs/clearfog_sata_defconfig > > > +++ b/configs/clearfog_sata_defconfig > > > @@ -6,11 +6,14 @@ CONFIG_TEXT_BASE=0x00800000 > > > CONFIG_SPL_LIBCOMMON_SUPPORT=y > > > CONFIG_SPL_LIBGENERIC_SUPPORT=y > > > CONFIG_NR_DRAM_BANKS=2 > > > +CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y > > > +CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0xff0000 > > > CONFIG_TARGET_CLEARFOG=y > > > CONFIG_MVEBU_SPL_BOOT_DEVICE_SATA=y > > > CONFIG_DEFAULT_DEVICE_TREE="armada-388-clearfog" > > > CONFIG_SPL_TEXT_BASE=0x40000030 > > > CONFIG_SPL_SERIAL=y > > > +CONFIG_SPL_STACK=0x4002c000 > > > CONFIG_SPL=y > > > CONFIG_DEBUG_UART_BASE=0xf1012000 > > > CONFIG_DEBUG_UART_CLOCK=250000000 > > > @@ -18,8 +21,6 @@ CONFIG_SYS_LOAD_ADDR=0x800000 > > > CONFIG_DEBUG_UART=y > > > CONFIG_AHCI=y > > > CONFIG_DISTRO_DEFAULTS=y > > > -CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y > > > -CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0xff0000 > > > CONFIG_BOOTDELAY=3 > > > CONFIG_USE_PREBOOT=y > > > CONFIG_SYS_CONSOLE_INFO_QUIET=y > > > @@ -31,7 +32,6 @@ CONFIG_SPL_BSS_START_ADDR=0x40023000 > > > CONFIG_SPL_BSS_MAX_SIZE=0x4000 > > > CONFIG_SPL_SYS_MALLOC_SIMPLE=y > > > # CONFIG_SPL_SHARES_INIT_SP_ADDR is not set > > > -CONFIG_SPL_STACK=0x4002c000 > > > CONFIG_SPL_I2C=y > > > CONFIG_SYS_MAXARGS=32 > > > CONFIG_CMD_TLV_EEPROM=y > > > @@ -46,7 +46,6 @@ CONFIG_CMD_USB=y > > > CONFIG_CMD_TFTPPUT=y > > > CONFIG_CMD_CACHE=y > > > CONFIG_CMD_TIME=y > > > -CONFIG_CMD_MVEBU_BUBT=y > > > CONFIG_ENV_OVERWRITE=y > > > CONFIG_ENV_MIN_ENTRIES=128 > > > CONFIG_ARP_TIMEOUT=200 > > > @@ -59,6 +58,7 @@ CONFIG_DM_I2C=y > > > CONFIG_SYS_I2C_MVTWSI=y > > > CONFIG_I2C_EEPROM=y > > > CONFIG_SPL_I2C_EEPROM=y > > > +CONFIG_MMC_BROKEN_CD=y > > > CONFIG_SUPPORT_EMMC_BOOT=y > > > CONFIG_MMC_SDHCI=y > > > CONFIG_MMC_SDHCI_SDMA=y > > > -- > > > 2.39.2 > > >
On Sunday 26 February 2023 01:45:16 Martin Rowe wrote: > On Sat, 25 Feb 2023 at 22:14, Pali Rohár <pali@kernel.org> wrote: > > On Saturday 25 February 2023 22:49:56 Pali Rohár wrote: > > > On Saturday 25 February 2023 11:42:19 Martin Rowe wrote: > > > > A388 Clearfog MMC is either SD Card or eMMC with different behaviour for > > > > both. Setting MMC_BROKEN_CD allows both to correctly detect MMC. > > > > > > > > Signed-off-by: Martin Rowe <martin.p.rowe@gmail.com> > > > > > > It looks like a hack but I think we do not have a better option for now. > > > > > > If I understand the issue correctly then card-detect pin is unconnected > > > for eMMC variant and used for checking if SD card is present for SD > > > variant. Unconnected pin seems to have some internal pull-up/down which > > > reports not-present state for eMMC variant. eMMC does not have any > > > presence signal, so card-detect pin must be ignored for eMMC. > > > > > > This looks like a chicken and egg problem and the only option to support > > > both variants is to ignore card-detect pin and always try to initialize > > > device connected to mmc controller (which may be eMMC or SD). > > > > Hm... maybe better way could be to edit armada-388-clearfog-u-boot.dtsi > > file and add there this? /delete-property/ cd-gpios; > > I just tried this and the device is not detected again; adding > "non-removable" seems to be required if changing the dts. > > > > I do not know if there is a better option for ignoring card-detect pin > > > in u-boot, so: > > I should point out that I did investigate runtime detection. But how you want to do that runtime detection? As I pointed above I think it is impossible do runtime detection because it is chicken and egg problem. You can patch fdt only after u-boot initialize mmc, so this can be used just for patching kernel fdt. > Patching > the fdt alone didn't seem to work using the hooks that were available, > so I started looking into how MMC was being initialised to figure out > if there was something changing the state of the device before it was > returned to BootROM. I ended up in drivers/mmc/mmc.c mmc_start_init > trying to figure out how we always end up with the "MMC: no card > present" message in the eMMC case. I was going to write some extra > logic around the mmc_getcd call, but realised there was already an > ifndef with a config that seemed like this exact use-case. Given that > config solved the problem it seemed like the cleanest solution. > > > > Acked-by: Pali Rohár <pali@kernel.org> > > > > > > > --- > > > > configs/clearfog_defconfig | 3 +-- > > > > configs/clearfog_sata_defconfig | 8 ++++---- > > > > 2 files changed, 5 insertions(+), 6 deletions(-) > > > > > > > > diff --git a/configs/clearfog_defconfig b/configs/clearfog_defconfig > > > > index 8cd35f9f1a..24e7c16ac7 100644 > > > > --- a/configs/clearfog_defconfig > > > > +++ b/configs/clearfog_defconfig > > > > @@ -46,7 +46,6 @@ CONFIG_CMD_USB=y > > > > CONFIG_CMD_TFTPPUT=y > > > > CONFIG_CMD_CACHE=y > > > > CONFIG_CMD_TIME=y > > > > -CONFIG_CMD_MVEBU_BUBT=y > > > > CONFIG_ENV_OVERWRITE=y > > > > CONFIG_ENV_MIN_ENTRIES=128 > > > > CONFIG_ARP_TIMEOUT=200 > > > > @@ -59,7 +58,7 @@ CONFIG_DM_I2C=y > > > > CONFIG_SYS_I2C_MVTWSI=y > > > > CONFIG_I2C_EEPROM=y > > > > CONFIG_SPL_I2C_EEPROM=y > > > > -CONFIG_SUPPORT_EMMC_BOOT=y > > > > +CONFIG_MMC_BROKEN_CD=y > > > > CONFIG_MMC_SDHCI=y > > > > CONFIG_MMC_SDHCI_SDMA=y > > > > CONFIG_MMC_SDHCI_MV=y > > > > diff --git a/configs/clearfog_sata_defconfig b/configs/clearfog_sata_defconfig > > > > index e9b36150ea..84f900bf50 100644 > > > > --- a/configs/clearfog_sata_defconfig > > > > +++ b/configs/clearfog_sata_defconfig > > > > @@ -6,11 +6,14 @@ CONFIG_TEXT_BASE=0x00800000 > > > > CONFIG_SPL_LIBCOMMON_SUPPORT=y > > > > CONFIG_SPL_LIBGENERIC_SUPPORT=y > > > > CONFIG_NR_DRAM_BANKS=2 > > > > +CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y > > > > +CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0xff0000 > > > > CONFIG_TARGET_CLEARFOG=y > > > > CONFIG_MVEBU_SPL_BOOT_DEVICE_SATA=y > > > > CONFIG_DEFAULT_DEVICE_TREE="armada-388-clearfog" > > > > CONFIG_SPL_TEXT_BASE=0x40000030 > > > > CONFIG_SPL_SERIAL=y > > > > +CONFIG_SPL_STACK=0x4002c000 > > > > CONFIG_SPL=y > > > > CONFIG_DEBUG_UART_BASE=0xf1012000 > > > > CONFIG_DEBUG_UART_CLOCK=250000000 > > > > @@ -18,8 +21,6 @@ CONFIG_SYS_LOAD_ADDR=0x800000 > > > > CONFIG_DEBUG_UART=y > > > > CONFIG_AHCI=y > > > > CONFIG_DISTRO_DEFAULTS=y > > > > -CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y > > > > -CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0xff0000 > > > > CONFIG_BOOTDELAY=3 > > > > CONFIG_USE_PREBOOT=y > > > > CONFIG_SYS_CONSOLE_INFO_QUIET=y > > > > @@ -31,7 +32,6 @@ CONFIG_SPL_BSS_START_ADDR=0x40023000 > > > > CONFIG_SPL_BSS_MAX_SIZE=0x4000 > > > > CONFIG_SPL_SYS_MALLOC_SIMPLE=y > > > > # CONFIG_SPL_SHARES_INIT_SP_ADDR is not set > > > > -CONFIG_SPL_STACK=0x4002c000 > > > > CONFIG_SPL_I2C=y > > > > CONFIG_SYS_MAXARGS=32 > > > > CONFIG_CMD_TLV_EEPROM=y > > > > @@ -46,7 +46,6 @@ CONFIG_CMD_USB=y > > > > CONFIG_CMD_TFTPPUT=y > > > > CONFIG_CMD_CACHE=y > > > > CONFIG_CMD_TIME=y > > > > -CONFIG_CMD_MVEBU_BUBT=y > > > > CONFIG_ENV_OVERWRITE=y > > > > CONFIG_ENV_MIN_ENTRIES=128 > > > > CONFIG_ARP_TIMEOUT=200 > > > > @@ -59,6 +58,7 @@ CONFIG_DM_I2C=y > > > > CONFIG_SYS_I2C_MVTWSI=y > > > > CONFIG_I2C_EEPROM=y > > > > CONFIG_SPL_I2C_EEPROM=y > > > > +CONFIG_MMC_BROKEN_CD=y > > > > CONFIG_SUPPORT_EMMC_BOOT=y > > > > CONFIG_MMC_SDHCI=y > > > > CONFIG_MMC_SDHCI_SDMA=y > > > > -- > > > > 2.39.2 > > > >
On Sun, 26 Feb 2023 at 11:18, Pali Rohár <pali@kernel.org> wrote: > On Sunday 26 February 2023 01:45:16 Martin Rowe wrote: > > On Sat, 25 Feb 2023 at 22:14, Pali Rohár <pali@kernel.org> wrote: > > > On Saturday 25 February 2023 22:49:56 Pali Rohár wrote: > > > > On Saturday 25 February 2023 11:42:19 Martin Rowe wrote: > > > > > A388 Clearfog MMC is either SD Card or eMMC with different > behaviour for > > > > > both. Setting MMC_BROKEN_CD allows both to correctly detect MMC. > > > > > > > > > > Signed-off-by: Martin Rowe <martin.p.rowe@gmail.com> > > > > > > > > It looks like a hack but I think we do not have a better option for > now. > > > > > > > > If I understand the issue correctly then card-detect pin is > unconnected > > > > for eMMC variant and used for checking if SD card is present for SD > > > > variant. Unconnected pin seems to have some internal pull-up/down > which > > > > reports not-present state for eMMC variant. eMMC does not have any > > > > presence signal, so card-detect pin must be ignored for eMMC. > > > > > > > > This looks like a chicken and egg problem and the only option to > support > > > > both variants is to ignore card-detect pin and always try to > initialize > > > > device connected to mmc controller (which may be eMMC or SD). > > > > > > Hm... maybe better way could be to edit armada-388-clearfog-u-boot.dtsi > > > file and add there this? /delete-property/ cd-gpios; > > > > I just tried this and the device is not detected again; adding > > "non-removable" seems to be required if changing the dts. > > > > > > I do not know if there is a better option for ignoring card-detect > pin > > > > in u-boot, so: > > > > I should point out that I did investigate runtime detection. > > But how you want to do that runtime detection? As I pointed above I > think it is impossible do runtime detection because it is chicken and > egg problem. > > You can patch fdt only after u-boot initialize mmc, so this can be used > just for patching kernel fdt. > I was just trying to address your concerns about the solution looking like a "hack". I did investigate it, and that work confirmed the issues you expected, so that's confirmation that there isn't a better option. I think we're saying the same thing :) I'll look at runtime patching the kernel fdt, but it might not be as quick a turn around as the defconfig work. If anyone looks at it before me, the fdt memory allocation needs to be increased by 2 to fit "non-removable" in the space left by removing the "cd-gpios". > Patching > > the fdt alone didn't seem to work using the hooks that were available, > > so I started looking into how MMC was being initialised to figure out > > if there was something changing the state of the device before it was > > returned to BootROM. I ended up in drivers/mmc/mmc.c mmc_start_init > > trying to figure out how we always end up with the "MMC: no card > > present" message in the eMMC case. I was going to write some extra > > logic around the mmc_getcd call, but realised there was already an > > ifndef with a config that seemed like this exact use-case. Given that > > config solved the problem it seemed like the cleanest solution. > > > > > > Acked-by: Pali Rohár <pali@kernel.org> > > > > > > > > > --- > > > > > configs/clearfog_defconfig | 3 +-- > > > > > configs/clearfog_sata_defconfig | 8 ++++---- > > > > > 2 files changed, 5 insertions(+), 6 deletions(-) > > > > > > > > > > diff --git a/configs/clearfog_defconfig > b/configs/clearfog_defconfig > > > > > index 8cd35f9f1a..24e7c16ac7 100644 > > > > > --- a/configs/clearfog_defconfig > > > > > +++ b/configs/clearfog_defconfig > > > > > @@ -46,7 +46,6 @@ CONFIG_CMD_USB=y > > > > > CONFIG_CMD_TFTPPUT=y > > > > > CONFIG_CMD_CACHE=y > > > > > CONFIG_CMD_TIME=y > > > > > -CONFIG_CMD_MVEBU_BUBT=y > > > > > CONFIG_ENV_OVERWRITE=y > > > > > CONFIG_ENV_MIN_ENTRIES=128 > > > > > CONFIG_ARP_TIMEOUT=200 > > > > > @@ -59,7 +58,7 @@ CONFIG_DM_I2C=y > > > > > CONFIG_SYS_I2C_MVTWSI=y > > > > > CONFIG_I2C_EEPROM=y > > > > > CONFIG_SPL_I2C_EEPROM=y > > > > > -CONFIG_SUPPORT_EMMC_BOOT=y > > > > > +CONFIG_MMC_BROKEN_CD=y > > > > > CONFIG_MMC_SDHCI=y > > > > > CONFIG_MMC_SDHCI_SDMA=y > > > > > CONFIG_MMC_SDHCI_MV=y > > > > > diff --git a/configs/clearfog_sata_defconfig > b/configs/clearfog_sata_defconfig > > > > > index e9b36150ea..84f900bf50 100644 > > > > > --- a/configs/clearfog_sata_defconfig > > > > > +++ b/configs/clearfog_sata_defconfig > > > > > @@ -6,11 +6,14 @@ CONFIG_TEXT_BASE=0x00800000 > > > > > CONFIG_SPL_LIBCOMMON_SUPPORT=y > > > > > CONFIG_SPL_LIBGENERIC_SUPPORT=y > > > > > CONFIG_NR_DRAM_BANKS=2 > > > > > +CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y > > > > > +CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0xff0000 > > > > > CONFIG_TARGET_CLEARFOG=y > > > > > CONFIG_MVEBU_SPL_BOOT_DEVICE_SATA=y > > > > > CONFIG_DEFAULT_DEVICE_TREE="armada-388-clearfog" > > > > > CONFIG_SPL_TEXT_BASE=0x40000030 > > > > > CONFIG_SPL_SERIAL=y > > > > > +CONFIG_SPL_STACK=0x4002c000 > > > > > CONFIG_SPL=y > > > > > CONFIG_DEBUG_UART_BASE=0xf1012000 > > > > > CONFIG_DEBUG_UART_CLOCK=250000000 > > > > > @@ -18,8 +21,6 @@ CONFIG_SYS_LOAD_ADDR=0x800000 > > > > > CONFIG_DEBUG_UART=y > > > > > CONFIG_AHCI=y > > > > > CONFIG_DISTRO_DEFAULTS=y > > > > > -CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y > > > > > -CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0xff0000 > > > > > CONFIG_BOOTDELAY=3 > > > > > CONFIG_USE_PREBOOT=y > > > > > CONFIG_SYS_CONSOLE_INFO_QUIET=y > > > > > @@ -31,7 +32,6 @@ CONFIG_SPL_BSS_START_ADDR=0x40023000 > > > > > CONFIG_SPL_BSS_MAX_SIZE=0x4000 > > > > > CONFIG_SPL_SYS_MALLOC_SIMPLE=y > > > > > # CONFIG_SPL_SHARES_INIT_SP_ADDR is not set > > > > > -CONFIG_SPL_STACK=0x4002c000 > > > > > CONFIG_SPL_I2C=y > > > > > CONFIG_SYS_MAXARGS=32 > > > > > CONFIG_CMD_TLV_EEPROM=y > > > > > @@ -46,7 +46,6 @@ CONFIG_CMD_USB=y > > > > > CONFIG_CMD_TFTPPUT=y > > > > > CONFIG_CMD_CACHE=y > > > > > CONFIG_CMD_TIME=y > > > > > -CONFIG_CMD_MVEBU_BUBT=y > > > > > CONFIG_ENV_OVERWRITE=y > > > > > CONFIG_ENV_MIN_ENTRIES=128 > > > > > CONFIG_ARP_TIMEOUT=200 > > > > > @@ -59,6 +58,7 @@ CONFIG_DM_I2C=y > > > > > CONFIG_SYS_I2C_MVTWSI=y > > > > > CONFIG_I2C_EEPROM=y > > > > > CONFIG_SPL_I2C_EEPROM=y > > > > > +CONFIG_MMC_BROKEN_CD=y > > > > > CONFIG_SUPPORT_EMMC_BOOT=y > > > > > CONFIG_MMC_SDHCI=y > > > > > CONFIG_MMC_SDHCI_SDMA=y > > > > > -- > > > > > 2.39.2 > > > > > >
diff --git a/configs/clearfog_defconfig b/configs/clearfog_defconfig index 8cd35f9f1a..24e7c16ac7 100644 --- a/configs/clearfog_defconfig +++ b/configs/clearfog_defconfig @@ -46,7 +46,6 @@ CONFIG_CMD_USB=y CONFIG_CMD_TFTPPUT=y CONFIG_CMD_CACHE=y CONFIG_CMD_TIME=y -CONFIG_CMD_MVEBU_BUBT=y CONFIG_ENV_OVERWRITE=y CONFIG_ENV_MIN_ENTRIES=128 CONFIG_ARP_TIMEOUT=200 @@ -59,7 +58,7 @@ CONFIG_DM_I2C=y CONFIG_SYS_I2C_MVTWSI=y CONFIG_I2C_EEPROM=y CONFIG_SPL_I2C_EEPROM=y -CONFIG_SUPPORT_EMMC_BOOT=y +CONFIG_MMC_BROKEN_CD=y CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI_SDMA=y CONFIG_MMC_SDHCI_MV=y diff --git a/configs/clearfog_sata_defconfig b/configs/clearfog_sata_defconfig index e9b36150ea..84f900bf50 100644 --- a/configs/clearfog_sata_defconfig +++ b/configs/clearfog_sata_defconfig @@ -6,11 +6,14 @@ CONFIG_TEXT_BASE=0x00800000 CONFIG_SPL_LIBCOMMON_SUPPORT=y CONFIG_SPL_LIBGENERIC_SUPPORT=y CONFIG_NR_DRAM_BANKS=2 +CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y +CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0xff0000 CONFIG_TARGET_CLEARFOG=y CONFIG_MVEBU_SPL_BOOT_DEVICE_SATA=y CONFIG_DEFAULT_DEVICE_TREE="armada-388-clearfog" CONFIG_SPL_TEXT_BASE=0x40000030 CONFIG_SPL_SERIAL=y +CONFIG_SPL_STACK=0x4002c000 CONFIG_SPL=y CONFIG_DEBUG_UART_BASE=0xf1012000 CONFIG_DEBUG_UART_CLOCK=250000000 @@ -18,8 +21,6 @@ CONFIG_SYS_LOAD_ADDR=0x800000 CONFIG_DEBUG_UART=y CONFIG_AHCI=y CONFIG_DISTRO_DEFAULTS=y -CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y -CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0xff0000 CONFIG_BOOTDELAY=3 CONFIG_USE_PREBOOT=y CONFIG_SYS_CONSOLE_INFO_QUIET=y @@ -31,7 +32,6 @@ CONFIG_SPL_BSS_START_ADDR=0x40023000 CONFIG_SPL_BSS_MAX_SIZE=0x4000 CONFIG_SPL_SYS_MALLOC_SIMPLE=y # CONFIG_SPL_SHARES_INIT_SP_ADDR is not set -CONFIG_SPL_STACK=0x4002c000 CONFIG_SPL_I2C=y CONFIG_SYS_MAXARGS=32 CONFIG_CMD_TLV_EEPROM=y @@ -46,7 +46,6 @@ CONFIG_CMD_USB=y CONFIG_CMD_TFTPPUT=y CONFIG_CMD_CACHE=y CONFIG_CMD_TIME=y -CONFIG_CMD_MVEBU_BUBT=y CONFIG_ENV_OVERWRITE=y CONFIG_ENV_MIN_ENTRIES=128 CONFIG_ARP_TIMEOUT=200 @@ -59,6 +58,7 @@ CONFIG_DM_I2C=y CONFIG_SYS_I2C_MVTWSI=y CONFIG_I2C_EEPROM=y CONFIG_SPL_I2C_EEPROM=y +CONFIG_MMC_BROKEN_CD=y CONFIG_SUPPORT_EMMC_BOOT=y CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI_SDMA=y
A388 Clearfog MMC is either SD Card or eMMC with different behaviour for both. Setting MMC_BROKEN_CD allows both to correctly detect MMC. Signed-off-by: Martin Rowe <martin.p.rowe@gmail.com> --- configs/clearfog_defconfig | 3 +-- configs/clearfog_sata_defconfig | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-)