U-Boot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Maxime Ripard <maxime.ripard@free-electrons.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 23/23] sunxi: A64: add 32-bit SPL support
Date: Mon, 19 Dec 2016 09:17:41 +0100	[thread overview]
Message-ID: <20161219081741.z7ylutt6wyc2ib7y@lukather> (raw)
In-Reply-To: <c8c59418-e74d-6c9f-0d64-17027f9d76a7@arm.com>

On Fri, Dec 16, 2016 at 03:39:06PM +0000, Andre Przywara wrote:
> On 16/12/16 14:52, Maxime Ripard wrote:
> > On Mon, Dec 12, 2016 at 04:04:23PM +0000, Andre Przywara wrote:
> >> Hi,
> >>
> >> On 12/12/16 15:13, Maxime Ripard wrote:
> >>> On Tue, Dec 06, 2016 at 12:22:59PM +0000, Andre Przywara wrote:
> >>>> Hi,
> >>>>
> >>>> On 06/12/16 11:28, Maxime Ripard wrote:
> >>>>> On Mon, Dec 05, 2016 at 01:52:30AM +0000, Andre Przywara wrote:
> >>>>>> When compiling the SPL for the Allwinner A64 in AArch64 mode, we can't
> >>>>>> use the more compact Thumb2 encoding, which only exists for AArch32
> >>>>>> code. This makes the SPL rather big, up to a point where any code
> >>>>>> additions or even a different compiler may easily exceed the 32KB limit
> >>>>>> that the Allwinner BROM imposes.
> >>>>>> Introduce a separate, mostly generic sun50i-a64 configuration, which
> >>>>>> defines the CPU_V7 symbol and thus will create a 32-bit binary using
> >>>>>> the memory-saving Thumb2 encoding.
> >>>>>
> >>>>> "mostly generic". Where do you draw the line? How do you deal with a
> >>>>> board that would use a different UART? a different MMC? different
> >>>>> memory configuration.?
> >>>>
> >>>> My impression was that it's rather pointless to provide another set of
> >>>> 32-bit SPL defconfigs for each board again, especially given that for
> >>>> the SPL's needs the boards so far seem to be very similar.
> >>>> For the loading part we will probably go with what the BROM already
> >>>> started: load more data from one of the BROM boot sources, which is
> >>>> fixed in the SoC and can't be really changed by a board vendor anyway.
> >>>> Which really leaves the DRAM setup and the UART.
> >>>
> >>> So you plan on enabling all BROM boot sources as well (NAND, SPI) ?
> >>
> >> In fact SPI works already (with little to no changes).
> > 
> > It's the little changes that I'm interested in to be honest :)
> 
> Well, thinking about it again I think normal SPI boot (legacy U-Boot
> image as the payload) requires no changes: just enable it in the
> defconfig. The patches I was talking about were about enabling FIT
> support on top of it.
> 
> The reason why it works is due to Siarhei's SPL SPI code and due to the
> fact it is kind of "supported" on these boards, which is not true for
> NAND on most boards, AFAIK.
> But if we get support for that, it would just work the same way, due to
> the boot source detection. So I think handling multiple boot sources
> within one SPL binary is a general sunxi SPL feature already implemented
> today. I definitely use the same thing for FEL, SPI and SD and eMMC.

At what offset for the SPL? U-Boot binary? with or without redundacy
for U-Boot? for the environment? with an environment in the first
place?

All those things are user configurable, and will also depend on some
board features (staring with the size of the EEPROM embedded on that
board). We should treat them as user configurable, and not just as
"meh, don't care, works for my setup".

> >> And I don't care about NAND, really ;-)
> >> Is anyone aware of an A64 board using this?
> > 
> > Well, it's one of the possible boot source, so we have to consider it
> > and not ignore it entirely hoping that no one will use it, ever.
> 
> But there isn't any support for it so far, is there? Even if we wanted
> to compile an SPL just for NAND.

The thing is once you started telling people to use something,
removing that something somewhere down the road is *not* nice. So I'd
really like to have it taken into account.

> > SPI booting was not used for 5-6 years, until someone started that
> > trend and now we have a significant number of boards implementing it.
> > 
> >>>> I can't predict the future, but so far those A64 boards look fairly
> >>>> similar in this respect. So I just avoid having another SPL defconfig
> >>>> for the BananaPi M64, for instance. I just added MMC_SUNXI_SLOT_EXTRA
> >>>> because this doesn't hurt on the Pine64, so less churn here.
> >>>>
> >>>> So if you know of any board which breaks this assumption, I am happy to
> >>>> hear about it and see if it can be integrated.
> >>>
> >>> I know at least of one board that uses the UART3 on A33, instead of
> >>> UART0. The trend is very clear on the A64 and the previous SoCs, but
> >>> we also had some variations, so we need to take that into
> >>> account. Which brings me back to my original question, where do you
> >>> draw the line ? :)
> >>
> >> I don't know, and to make this clear: I see the point in having separate
> >> configs for the SPL, but due to the 32-bit/64-bit split we probably need
> >> _two_ sets of defconfigs, which gets pretty messy very quickly.
> >> Especially given that they are very similar.
> >>
> >> So how do we avoid this? Can we somehow share a defconfig between armv8
> >> and armv7? In the moment "CONFIG_CPU_V7" and "CONFIG_ARM64" conflict in
> >> the same file.
> > 
> > I guess the easiest and most robust solution to do this would be to
> > just generate it from the defconfig. It really feels from your patches
> > that it's just a matter of sed -i 's/CONFIG_MACH_SUN50I/CONFIG_MACH_SUN50I_32'
> > on the "real" defconfig.
> 
> Yes, the difference between the defconfigs is really minimal. They look
> more different at the moment because we don't need Ethernet and USB in
> the SPL, for instance, and the SPI support is SPL only atm.
> But yeah, we could unify them, no question.
> 
> BUT: What do you mean exactly with: "just generate it from the defconfig"?
> Some Makefile hack? Like detecting 32 vs 64 with the help of the ARCH
> environment variable or ${CROSS_COMPILE}gcc -dumpmachine output?

Plugging into a makefile target seems for reasonable.

In particular, I guess that would imply:
  - Generating an spl/include/generated/autoconf.h
  - Since that file is included through include/linux/kconfig.h,
    create / copy that one over
  - Change UBOOTINCLUDE to have a different one for the SPL that would
    automatically pick the right kconfig.h

I guess some of that can also be eased through the include order in
the C flags.

Once that is done, you can easily mangle your configuration in the
Makefile rule only for the SPL.

Maxime

-- 
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20161219/5e1dfde6/attachment.sig>

      reply	other threads:[~2016-12-19  8:17 UTC|newest]

Thread overview: 95+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-12-05  1:52 [U-Boot] [PATCH v2 00/23] sunxi: Allwinner A64: SPL support Andre Przywara
2016-12-05  1:52 ` [U-Boot] [PATCH v2 01/23] sun6i: Restrict some register initialization to Allwinner A31 SoC Andre Przywara
2016-12-05  6:25   ` Simon Glass
2016-12-05  7:17   ` Maxime Ripard
2016-12-05  1:52 ` [U-Boot] [PATCH v2 02/23] armv8: prevent using THUMB Andre Przywara
2016-12-05  6:25   ` Simon Glass
2016-12-05  7:30   ` Maxime Ripard
2016-12-05 21:57   ` Tom Rini
2016-12-05  1:52 ` [U-Boot] [PATCH v2 03/23] armv8: add lowlevel_init.S Andre Przywara
2016-12-05  6:26   ` Simon Glass
2016-12-17  2:55     ` André Przywara
2016-12-17 22:46       ` Simon Glass
2016-12-05 21:56   ` Tom Rini
2016-12-06  8:04     ` André Przywara
2016-12-06 12:18       ` Tom Rini
2016-12-05  1:52 ` [U-Boot] [PATCH v2 04/23] SPL: tiny-printf: add "l" modifier Andre Przywara
2016-12-05  6:25   ` Simon Glass
2016-12-05  8:01   ` Siarhei Siamashka
2016-12-05  1:52 ` [U-Boot] [PATCH v2 05/23] move UL() macro from armv8/mmu.h into common.h Andre Przywara
2016-12-05  6:25   ` Simon Glass
2016-12-05  1:52 ` [U-Boot] [PATCH v2 06/23] SPL: make struct spl_image 64-bit safe Andre Przywara
2016-12-05  6:25   ` Simon Glass
2016-12-05 22:04   ` Tom Rini
2016-12-06 10:49   ` Maxime Ripard
2016-12-05  1:52 ` [U-Boot] [PATCH v2 07/23] armv8: add simple sdelay implementation Andre Przywara
2016-12-05  6:25   ` Simon Glass
2016-12-05  1:52 ` [U-Boot] [PATCH v2 08/23] armv8: move reset branch into boot hook Andre Przywara
2016-12-05  6:25   ` Simon Glass
2016-12-05 13:43     ` Andre Przywara
2016-12-08 22:21       ` Simon Glass
2016-12-05  1:52 ` [U-Boot] [PATCH v2 09/23] ARM: boot0 hook: remove macro, include whole header file Andre Przywara
2016-12-05  6:25   ` Simon Glass
2016-12-30 20:13   ` Steve Rae
2016-12-05  1:52 ` [U-Boot] [PATCH v2 10/23] sunxi: introduce extra config option for boot0 header Andre Przywara
2016-12-05  6:25   ` Simon Glass
2016-12-05 15:49     ` Andre Przywara
2016-12-06 10:52   ` Maxime Ripard
2016-12-05  1:52 ` [U-Boot] [PATCH v2 11/23] sunxi: A64: do an RMR switch if started in AArch32 mode Andre Przywara
2016-12-05  6:25   ` Simon Glass
2016-12-05 10:41     ` Andre Przywara
2016-12-06 10:56       ` Maxime Ripard
2016-12-05  1:52 ` [U-Boot] [PATCH v2 12/23] sunxi: provide default DRAM config for sun50i in Kconfig Andre Przywara
2016-12-05  6:25   ` Simon Glass
2016-12-06 10:56   ` Maxime Ripard
2016-12-06 11:21     ` Andre Przywara
2016-12-12 12:33       ` Maxime Ripard
2016-12-05  1:52 ` [U-Boot] [PATCH v2 13/23] sunxi: H3: add and rename some DRAM contoller registers Andre Przywara
2016-12-05  6:26   ` Simon Glass
2016-12-17  2:30     ` André Przywara
2016-12-06 10:58   ` Maxime Ripard
2016-12-05  1:52 ` [U-Boot] [PATCH v2 14/23] sunxi: H3: add DRAM controller single bit delay support Andre Przywara
2016-12-05  6:26   ` Simon Glass
2016-12-05  7:58     ` Chen-Yu Tsai
2016-12-05 11:28       ` Andre Przywara
2016-12-07  3:48         ` Simon Glass
2016-12-17  2:33           ` André Przywara
2016-12-06 11:02   ` Maxime Ripard
2016-12-05  1:52 ` [U-Boot] [PATCH v2 15/23] sunxi: A64: use H3 DRAM initialization code for A64 Andre Przywara
2016-12-05  6:26   ` Simon Glass
2016-12-16 17:30     ` Andre Przywara
2016-12-17 22:48       ` Simon Glass
2016-12-06 11:20   ` Maxime Ripard
2016-12-06 14:15     ` Andre Przywara
2016-12-12 12:29       ` Maxime Ripard
2016-12-12 16:06         ` Andre Przywara
2016-12-05  1:52 ` [U-Boot] [PATCH v2 16/23] sunxi: H3/A64: fix non-ODT setting Andre Przywara
2016-12-05  6:26   ` Simon Glass
2016-12-05  1:52 ` [U-Boot] [PATCH v2 17/23] sunxi: DRAM: fix H3 DRAM size display on aarch64 Andre Przywara
2016-12-05  6:26   ` Simon Glass
2016-12-05  1:52 ` [U-Boot] [PATCH v2 18/23] sunxi: A64: enable SPL Andre Przywara
2016-12-05  6:26   ` Simon Glass
2016-12-16 17:40     ` Andre Przywara
2016-12-17 22:48       ` Simon Glass
2016-12-05  1:52 ` [U-Boot] [PATCH v2 19/23] SPL: read and store arch property from U-Boot image Andre Przywara
2016-12-05 22:56   ` Tom Rini
2016-12-05  1:52 ` [U-Boot] [PATCH v2 20/23] Makefile: use "arm64" architecture for U-Boot image files Andre Przywara
2016-12-05 23:11   ` Tom Rini
2016-12-05  1:52 ` [U-Boot] [PATCH v2 21/23] ARM: SPL/FIT: differentiate between arm and arm64 arch properties Andre Przywara
2016-12-06  0:27   ` Tom Rini
2016-12-05  1:52 ` [U-Boot] [PATCH v2 22/23] sunxi: introduce RMR switch to enter payloads in 64-bit mode Andre Przywara
2016-12-05  6:26   ` Simon Glass
2016-12-05  1:52 ` [U-Boot] [PATCH v2 23/23] sunxi: A64: add 32-bit SPL support Andre Przywara
2016-12-05  6:26   ` Simon Glass
2016-12-17 14:44     ` André Przywara
2016-12-19  8:20       ` Maxime Ripard
2016-12-19 10:26         ` Andre Przywara
2016-12-06 11:28   ` Maxime Ripard
2016-12-06 12:22     ` Andre Przywara
2016-12-12 15:13       ` Maxime Ripard
2016-12-12 16:04         ` Andre Przywara
2016-12-12 16:18           ` Chen-Yu Tsai
2016-12-12 16:32             ` Andre Przywara
2016-12-16 14:52           ` Maxime Ripard
2016-12-16 15:39             ` Andre Przywara
2016-12-19  8:17               ` Maxime Ripard [this message]

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=20161219081741.z7ylutt6wyc2ib7y@lukather \
    --to=maxime.ripard@free-electrons.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox