From: Marek Vasut <marex@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 3/4] mmc: atmel: Implement proper private data
Date: Sat, 24 Oct 2015 01:29:00 +0200 [thread overview]
Message-ID: <201510240129.00916.marex@denx.de> (raw)
In-Reply-To: <562ABBC2.6090105@googlemail.com>
On Saturday, October 24, 2015 at 12:59:14 AM, Andreas Bie?mann wrote:
> On 23.10.15 20:46, Marek Vasut wrote:
> > Instead of passing just the register area as a private data, introduce
> > a proper struct atmel_mci_priv structure instead. This will become useful
> > in the subsequent patch, where we eliminate the global variable from this
> > driver.
> >
> > Signed-off-by: Marek Vasut <marex@denx.de>
>
> Reveiwed-by: Andreas Bie?mann <andreas.devel@googlemail.com>
>
> > ---
> >
> > drivers/mmc/gen_atmel_mci.c | 34 ++++++++++++++++++++++------------
> > 1 file changed, 22 insertions(+), 12 deletions(-)
> >
> > diff --git a/drivers/mmc/gen_atmel_mci.c b/drivers/mmc/gen_atmel_mci.c
> > index 8b05fcd..abc77cc 100644
> > --- a/drivers/mmc/gen_atmel_mci.c
> > +++ b/drivers/mmc/gen_atmel_mci.c
> > @@ -32,6 +32,11 @@
> >
> > # define MCI_BUS 0
> > #endif
> >
> > +struct atmel_mci_priv {
> > + struct mmc_config cfg;
> > + struct atmel_mci *mci;
> > +};
> > +
> >
> > static int initialized = 0;
> >
> > /* Read Atmel MCI IP version */
> >
> > @@ -55,7 +60,8 @@ static void dump_cmd(u32 cmdr, u32 arg, u32 status,
> > const char* msg)
> >
> > /* Setup for MCI Clock and Block Size */
> > static void mci_set_mode(struct mmc *mmc, u32 hz, u32 blklen)
> > {
> >
> > - atmel_mci_t *mci = mmc->priv;
> > + struct atmel_mci_priv *priv = mmc->priv;
> > + atmel_mci_t *mci = priv->mci;
> >
> > u32 bus_hz = get_mci_clk_rate();
> > u32 clkdiv = 255;
> > unsigned int version = atmel_mci_get_version(mci);
> >
> > @@ -198,7 +204,8 @@ io_fail:
> > static int
> > mci_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data
> > *data) {
> >
> > - atmel_mci_t *mci = mmc->priv;
> > + struct atmel_mci_priv *priv = mmc->priv;
> > + atmel_mci_t *mci = priv->mci;
> >
> > u32 cmdr;
> > u32 error_flags = 0;
> > u32 status;
> >
> > @@ -323,7 +330,8 @@ mci_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
> > struct mmc_data *data)
> >
> > /* Entered into mmc structure during driver init */
> > static void mci_set_ios(struct mmc *mmc)
> > {
> >
> > - atmel_mci_t *mci = mmc->priv;
> > + struct atmel_mci_priv *priv = mmc->priv;
> > + atmel_mci_t *mci = priv->mci;
> >
> > int bus_width = mmc->bus_width;
> > unsigned int version = atmel_mci_get_version(mci);
> > int busw;
> >
> > @@ -359,7 +367,8 @@ static void mci_set_ios(struct mmc *mmc)
> >
> > /* Entered into mmc structure during driver init */
> > static int mci_init(struct mmc *mmc)
> > {
> >
> > - atmel_mci_t *mci = mmc->priv;
> > + struct atmel_mci_priv *priv = mmc->priv;
> > + atmel_mci_t *mci = priv->mci;
> >
> > /* Initialize controller */
> > writel(MMCI_BIT(SWRST), &mci->cr); /* soft reset */
> >
> > @@ -393,22 +402,23 @@ int atmel_mci_init(void *regs)
> >
> > {
> >
> > struct mmc *mmc;
> > struct mmc_config *cfg;
> >
> > - struct atmel_mci *mci;
> > + struct atmel_mci_priv *priv;
> >
> > unsigned int version;
> >
> > - cfg = malloc(sizeof(*cfg));
> > - if (cfg == NULL)
> > - return -1;
> > - memset(cfg, 0, sizeof(*cfg));
> > + priv = calloc(1, sizeof(*priv));
> > + if (!priv)
> > + return -ENOMEM;
> >
> > - mci = (struct atmel_mci *)regs;
> > + cfg = &priv->cfg;
> >
> > cfg->name = "mci";
> > cfg->ops = &atmel_mci_ops;
> >
> > + priv->mci = (struct atmel_mci *)regs;
> > +
> >
> > /* need to be able to pass these in on a board by board basis */
> > cfg->voltages = MMC_VDD_32_33 | MMC_VDD_33_34;
> >
> > - version = atmel_mci_get_version(mci);
> > + version = atmel_mci_get_version(priv->mci);
> >
> > if ((version & 0xf00) >= 0x300) {
> >
> > cfg->host_caps = MMC_MODE_8BIT;
> > cfg->host_caps |= MMC_MODE_HS | MMC_MODE_HS_52MHz;
> >
> > @@ -425,7 +435,7 @@ int atmel_mci_init(void *regs)
> >
> > cfg->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
> >
> > - mmc = mmc_create(cfg, regs);
> > + mmc = mmc_create(cfg, priv);
> >
> > if (mmc == NULL) {
> >
> > free(cfg);
>
> We shouldn't free cfg here but priv, the rest looks sane to me. Eventual
> return -ENODEV on !mmc and adopt the following comment, we may leak priv
> now as there is no de-init.
Uh right, can you fix that while applying the patchset or do you want me to
repost ?
next prev parent reply other threads:[~2015-10-23 23:29 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-23 18:46 [U-Boot] [PATCH 1/4] mmc: atmel: Silence debug output Marek Vasut
2015-10-23 18:46 ` [U-Boot] [PATCH 2/4] mmc: atmel: Fix clock configuration Marek Vasut
2015-10-23 22:49 ` Andreas Bießmann
2015-11-01 21:02 ` [U-Boot] [U-Boot,2/4] " Andreas Bießmann
2015-10-23 18:46 ` [U-Boot] [PATCH 3/4] mmc: atmel: Implement proper private data Marek Vasut
2015-10-23 22:59 ` Andreas Bießmann
2015-10-23 23:29 ` Marek Vasut [this message]
2015-10-24 8:35 ` Andreas Bießmann
2015-10-24 12:52 ` Marek Vasut
2015-11-01 21:03 ` [U-Boot] [U-Boot, " Andreas Bießmann
2015-10-23 18:46 ` [U-Boot] [PATCH 4/4] mmc: atmel: Zap global 'initialized' variable Marek Vasut
2015-10-23 23:00 ` Andreas Bießmann
2015-11-01 21:03 ` [U-Boot] [U-Boot, " Andreas Bießmann
2015-10-23 22:48 ` [U-Boot] [PATCH 1/4] mmc: atmel: Silence debug output Andreas Bießmann
2015-11-01 21:02 ` [U-Boot] [U-Boot,1/4] " Andreas Bießmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201510240129.00916.marex@denx.de \
--to=marex@denx.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.