From: Simon Horman <horms@verge.net.au>
To: Magnus Damm <magnus.damm@gmail.com>
Cc: linux-mmc@vger.kernel.org, linux-sh@vger.kernel.org,
Yusuke Goda <yusuke.goda.sx@renesas.com>,
Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>,
Chris Ball <cjb@laptop.org>, Paul Mundt <lethal@linux-sh.org>
Subject: Re: [PATCH 1/2] [rfc] mmc, sh: Read MMCIF during zboot
Date: Tue, 30 Nov 2010 16:18:20 +0900 [thread overview]
Message-ID: <20101130071818.GD1529@verge.net.au> (raw)
In-Reply-To: <AANLkTi=f-o6Bskb_ZAgco2+Hwm-ra+A_oOvtkogycQup@mail.gmail.com>
On Tue, Nov 30, 2010 at 02:11:43PM +0900, Magnus Damm wrote:
> Hi Simon,
>
> Thanks for your work on this! It's nice to see that you can actually
> load some data early on.
>
> On Sat, Nov 27, 2010 at 8:05 AM, Simon Horman <horms@verge.net.au> wrote:
> > This is a prototype of code to read the MMCIF during
> > zboot initialisation. The intention is that it will form
> > part of enabling booting from MMC. Very roughly the plan is
> >
> > 1) The Mask Rom will load a small boot program from MMC.
> > Essentially this will be the first portion of
> > the kernel to be booted.
> > 2) That program will load the remainder of the kernel
> > from MMC and boot from it.
> >
> > This patch demonstrates code to perform the read portion of 2).
> > It uses a dummy buffer and only reads in one 512 byte sector.
> > A full implementation of 2) would of course read much more.
> >
> > The patch currently hooks into head-shmobile.S as it
> > depends on initialisation that occurs in that file.
> > However, it is likely that the final implementation
> > will need to be located in head.S where relocation is
> > currently handled.
> >
> > I used a multi-voltage MMC mobile card to test this code.
> > I observed that a single-voltage MMC and MMCplus card caused
> > the code to time-out in sh_mmcif_boot_init() which causes
> > the boot to stop.
> >
> > This patch depends on "ARM: mach-shmobile: Add zboot support for SuperH
> > Mobile ARM" and "mmc, sh: Correct value for reset".
> >
> > Signed-off-by: Simon Horman <horms@verge.net.au>
> > ---
> > arch/arm/boot/compressed/Makefile | 4 +
> > arch/arm/boot/compressed/head-shmobile.S | 16 +++++
> > arch/arm/boot/compressed/mmcif-sh7372.c | 100 ++++++++++++++++++++++++++++++
> > 3 files changed, 120 insertions(+), 0 deletions(-)
> > create mode 100644 arch/arm/boot/compressed/mmcif-sh7372.c
> >
> > diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
> > index 0a8f748..f730c10 100644
> > --- a/arch/arm/boot/compressed/Makefile
> > +++ b/arch/arm/boot/compressed/Makefile
> > @@ -49,6 +49,10 @@ ifeq ($(CONFIG_ARCH_SHMOBILE),y)
> > OBJS += head-shmobile.o
> > endif
> >
> > +ifeq ($(CONFIG_ARCH_SH7372),y)
> > +OBJS += mmcif-sh7372.o
> > +endif
> > +
> > #
> > # We now have a PIC decompressor implementation. Decompressors running
> > # from RAM should not define ZTEXTADDR. Decompressors running directly
> > diff --git a/arch/arm/boot/compressed/head-shmobile.S b/arch/arm/boot/compressed/head-shmobile.S
> > index 30973b7..700d622 100644
> > --- a/arch/arm/boot/compressed/head-shmobile.S
> > +++ b/arch/arm/boot/compressed/head-shmobile.S
> > @@ -26,6 +26,22 @@
> > #include <mach/zboot.h>
> >
> > b 1f
> > + .align
> > +__tmp_stack:
> > + .space 128
> > +__dummy_buf:
> > + .space 512
> > +__dummy_buf_size:
> > + .long 512
> > +1:
> > + adr sp, __tmp_stack
> > + add sp, sp, #128
> > + adr r0, __dummy_buf
> > + ldr r1, __dummy_buf_size
>
> Regarding the destination address, look into using CONFIG_MEMORY_START
> or perhaps something more advanced like the actual destination address
> for the kernel - see arch/arm/boot/compressed/head.S and TEXT_OFFSET
> or zreladdr.
Thanks, I'll take a look at that
> As for the number of bytes to load, please have a look at the sh7724
> implementation.
Thanks, will do.
>
> > + mov lr, pc
> > + b mmcif_loader
> > +
> > + b 1f
> > __atags:@ tag #1
> > .long 12 @ tag->hdr.size = tag_size(tag_core);
> > .long 0x54410001 @ tag->hdr.tag = ATAG_CORE;
> > diff --git a/arch/arm/boot/compressed/mmcif-sh7372.c b/arch/arm/boot/compressed/mmcif-sh7372.c
> > new file mode 100644
> > index 0000000..7ffaf27
> > --- /dev/null
> > +++ b/arch/arm/boot/compressed/mmcif-sh7372.c
> > @@ -0,0 +1,100 @@
> > +/*
> > + * sh7372 MMCIF loader
> > + *
> > + * Copyright (C) 2010 Magnus Damm
> > + * Copyright (C) 2010 Simon Horman
> > + *
> > + * This file is subject to the terms and conditions of the GNU General Public
> > + * License. See the file "COPYING" in the main directory of this archive
> > + * for more details.
> > + */
> > +
> > +#include <linux/mmc/sh_mmcif.h>
> > +
> > +#define MMCIF_BASE (void __iomem *)0xe6bd0000
> > +
> > +#define PORT84CR 0xe6050054
> > +#define PORT85CR 0xe6050055
> > +#define PORT86CR 0xe6050056
> > +#define PORT87CR 0xe6050057
> > +#define PORT88CR 0xe6050058
> > +#define PORT89CR 0xe6050059
> > +#define PORT90CR 0xe605005a
> > +#define PORT91CR 0xe605005b
> > +#define PORT92CR 0xe605005c
> > +#define PORT99CR 0xe6050063
> > +#define PORT185CR 0xe60520b9
> > +#define PORT186CR 0xe60520ba
> > +#define PORT187CR 0xe60520bb
> > +#define PORT188CR 0xe60520bc
> > +#define PORTR191_160DR 0xe6056014
> > +
> > +#define SMSTPCR3 0xe615013c
> > +
> > +enum { MMCIF_PROGRESS_ENTER, MMCIF_PROGRESS_INIT,
> > + MMCIF_PROGRESS_LOAD, MMCIF_PROGRESS_DONE };
> > +
> > +static void mmcif_update_progress(int n)
> > +{
> > + __raw_writel((__raw_readl(PORTR191_160DR) & ~(0xf << 25)) |
> > + (1 << (25 + n)), PORTR191_160DR);
> > +}
>
> This seems like a board specific property to me. So please break it
> out in to a per-board header or similar.
Sure.
> I guess next step is to extend the prototype code so it loads the
> entire kernel from MMC and then jumps to it. =)
Yes :-)
next prev parent reply other threads:[~2010-11-30 7:18 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-26 23:05 [PATCH 0/2] [rfc] mmc, sh: Read MMCIF during zboot Simon Horman
2010-11-26 23:05 ` [PATCH 1/2] " Simon Horman
2010-11-30 5:11 ` Magnus Damm
2010-11-30 7:18 ` Simon Horman [this message]
2010-11-26 23:05 ` [PATCH 2/2] [hack] sh: disable initialisation of SDRAM Simon Horman
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=20101130071818.GD1529@verge.net.au \
--to=horms@verge.net.au \
--cc=cjb@laptop.org \
--cc=kuninori.morimoto.gx@renesas.com \
--cc=lethal@linux-sh.org \
--cc=linux-mmc@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
--cc=magnus.damm@gmail.com \
--cc=yusuke.goda.sx@renesas.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox