[PATCH] mci: atmel_mci: Merge at91_mci_bio_set_highcapacity() with at91_mci_bio_init()

Alexander Shiyan eagle.alexander923 at gmail.com
Sun Apr 13 22:20:36 PDT 2025


Hello.

Unfortunately I don't have such hardware to test.
The CPU I have (SAMA5D2) uses a different MCI driver.

Thanks!

чт, 27 мар. 2025 г. в 09:41, Ahmad Fatoum <a.fatoum at pengutronix.de>:
>
> Hello Alexander,
>
> On 27.03.25 06:38, Alexander Shiyan wrote:
> > The high-capacity parameter is always set to one of the possible values
> > at initialization, so there is no need to have a separate function to
> > configure it.
>
> here's an idea from IRC by the way to get rid of the parameter:
>
> ye, that [checking CSD] is what is used normally, but the problem is doing it
> while in transmission state.
>
>   I looked into Part1_Physical_Layer_Simplified_Specification_Ver9.00.pdf
>   again and for the first time I see
>   "Figure 4-13 : SD Memory Card State Diagram (data transfer mode)"
>
>   Apparently, you don't necessarily need CMD0 (Go idle) to be able to get to a
>   state where you can execute CMD9 (SEND CSD), but one could also execute CMD7
>   (SELECT CARD) to deselect card and then run CMD9 and get back to transmission mode
>
>   One would need to issue a CMD3 (SEND_RELATIVE_ADDR) to get the RCA to communicate
>   with the correct SD (it's argument to CMD9), but this might work.
>
> Perhaps you're interested in trying this out :D
>
> Cheers,
> Ahmad
>
> >
> > Signed-off-by: Alexander Shiyan <eagle.alexander923 at gmail.com>
> > ---
> >  arch/arm/mach-at91/at91sam9_xload_mmc.c |  5 +----
> >  arch/arm/mach-at91/xload.c              |  2 +-
> >  drivers/mci/atmel_mci_pbl.c             | 10 +++-------
> >  include/mach/at91/xload.h               |  4 ++--
> >  4 files changed, 7 insertions(+), 14 deletions(-)
> >
> > diff --git a/arch/arm/mach-at91/at91sam9_xload_mmc.c b/arch/arm/mach-at91/at91sam9_xload_mmc.c
> > index 26f268ae91..e8cd72bd56 100644
> > --- a/arch/arm/mach-at91/at91sam9_xload_mmc.c
> > +++ b/arch/arm/mach-at91/at91sam9_xload_mmc.c
> > @@ -94,15 +94,12 @@ void __noreturn sam9263_atmci_start_image(u32 mmc_id, unsigned int clock,
> >               at91_pmc_enable_periph_clock(IOMEM(AT91SAM926X_BASE_PMC),  AT91SAM9263_ID_MCI1);
> >       }
> >
> > -     ret = at91_mci_bio_init(&bio, base, clock, (int)slot_b);
> > +     ret = at91_mci_bio_init(&bio, base, clock, (int)slot_b, false);
> >       if (ret) {
> >               pr_err("atmci_start_image: bio init faild: %d\n", ret);
> >               goto out_panic;
> >       }
> >
> > -     /* at91sam9x do not support high capacity */
> > -     at91_mci_bio_set_highcapacity(false);
> > -
> >       ret = pbl_fat_load(&bio, "barebox.bin", buf, SZ_16M);
> >       if (ret < 0) {
> >               pr_err("pbl_fat_load: error %d\n", ret);
> > diff --git a/arch/arm/mach-at91/xload.c b/arch/arm/mach-at91/xload.c
> > index 5d8105f07f..effe8802ee 100644
> > --- a/arch/arm/mach-at91/xload.c
> > +++ b/arch/arm/mach-at91/xload.c
> > @@ -228,7 +228,7 @@ void __noreturn sama5d3_atmci_start_image(u32 r4, unsigned int clock,
> >
> >       sama5d3_pmc_enable_periph_clock(instance->id);
> >
> > -     ret = at91_mci_bio_init(&bio, instance->base, clock, slot);
> > +     ret = at91_mci_bio_init(&bio, instance->base, clock, slot, true);
> >       if (ret)
> >               goto out_panic;
> >
> > diff --git a/drivers/mci/atmel_mci_pbl.c b/drivers/mci/atmel_mci_pbl.c
> > index bd4faa4de5..c94a4240db 100644
> > --- a/drivers/mci/atmel_mci_pbl.c
> > +++ b/drivers/mci/atmel_mci_pbl.c
> > @@ -83,7 +83,8 @@ static int at91_mci_bio_read(struct pbl_bio *bio, off_t start,
> >  }
> >
> >  int at91_mci_bio_init(struct pbl_bio *bio, void __iomem *base,
> > -                   unsigned int clock, unsigned int slot)
> > +                   unsigned int clock, unsigned int slot,
> > +                   bool highcapacity_card)
> >  {
> >       struct atmel_mci_priv *priv = &atmci_sdcard;
> >       struct atmel_mci *host = &priv->host;
> > @@ -111,12 +112,7 @@ int at91_mci_bio_init(struct pbl_bio *bio, void __iomem *base,
> >
> >       atmci_common_set_ios(host, &ios);
> >
> > -     priv->highcapacity_card = 1;
> > +     priv->highcapacity_card = highcapacity_card;
> >
> >       return 0;
> >  }
> > -
> > -void at91_mci_bio_set_highcapacity(bool highcapacity_card)
> > -{
> > -     atmci_sdcard.highcapacity_card = highcapacity_card;
> > -}
> > diff --git a/include/mach/at91/xload.h b/include/mach/at91/xload.h
> > index d5fc7596fd..329ccc98eb 100644
> > --- a/include/mach/at91/xload.h
> > +++ b/include/mach/at91/xload.h
> > @@ -12,8 +12,8 @@ void __noreturn sama5d3_atmci_start_image(u32 r4, unsigned int clock,
> >
> >  int at91_sdhci_bio_init(struct pbl_bio *bio, void __iomem *base);
> >  int at91_mci_bio_init(struct pbl_bio *bio, void __iomem *base,
> > -                   unsigned int clock, unsigned int slot);
> > -void at91_mci_bio_set_highcapacity(bool highcapacity_card);
> > +                   unsigned int clock, unsigned int slot,
> > +                   bool highcapacity_card);
> >
> >  void __noreturn sam9263_atmci_start_image(u32 mmc_id, unsigned int clock,
> >                                         bool slot_b);
>
>
> --
> Pengutronix e.K.                           |                             |
> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the barebox mailing list