From: Andre Przywara <andre.przywara@arm.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 23/23] sunxi: A64: add 32-bit SPL support
Date: Mon, 12 Dec 2016 16:04:23 +0000 [thread overview]
Message-ID: <a2e6a7f1-5cf2-e717-7698-354eb7c18c9b@arm.com> (raw)
In-Reply-To: <20161212151343.dyja6nqm4sefdkkq@lukather>
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).
And I don't care about NAND, really ;-)
Is anyone aware of an A64 board using this?
>> 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.
> And that would prevent us from doing any kind of DRAM settings
> enhancements in the future, every one using the best common
> denominator, which seems inefficient.
Yeah, I think this is a much better point. I was a lot in DRAM land in
the past few days, and I think we _have_ different DRAMs already:
1) The Pine64 uses DDR3-1333 DRAM chips @ 672 MHz
2) The SoPine and the Pinebook use LPDDR3 DRAM, which requires a
slightly different setup, also the stock frequency in that one boot0.bin
floating around is much lower (524 MHz, IIRC).
3) The BananaPi M64 and Theobroma's board use SKhynix DDR3 DRAM chips
which are from a DDR3-1600 bin. I think Philipp reported to have it
running at 800 MHz with some sane JEDEC based timing happily, so it's
worth to enable this there.
Which brings us to the following complications:
a) We have similar, but still different DRAM _controllers_ (H3, A64,
H5). Those have a slightly different register set, though it seems to be
mostly missing/added features, so nothing really conflicting.
b) We have different DRAM _chips_ being used on top of possibly any of
those controllers.
So this brings us from "one type of DRAM chip on top of one DRAM
controller" today for the H3 driver to "multiple DRAM chips on top of
slightly different controllers", which is a totally different story.
I was looking into significantly reworking the DRAM driver to address
that, but was hoping to defer this to a later stage.
While the DRAM controller part can probably be solved by #ifdef'ing or
static parameters, I wonder if we should really explore how to address
different DRAM chips properly:
I) We create a DT binding loosely based on the "jedec,lpddr2-timings"
one in the kernel and use of-platdata as Simon suggested.
II) We create some fixed tables of standard (JEDEC) timings in the
driver and let one of those tables be selected at runtime based on some
parameters, for instance in the SPL header. This could as easy as
"DDR3-1333" vs. "LPDDR3-1066". This would allow us to adopt an existing
SPL to multiple chips/boards without needing to rebuild it, possibly
even open the door to auto-detection. For instance I found the LPDDR3
boot0 bailing out on the Pine64, so we might at least detect the
difference there.
III) Something in between.
It's just a pity that this could hold off upstreaming the Pine64 SPL
support.
Cheers,
Andre.
>> Actually I had the idea of eventually going the other way around:
>> Providing one U-Boot proper A64 defconfig and let the DT (provided by
>> the SPL) sort out the differences. Then we might be able to live with
>> separate SPL defconfigs. But that's another patchset and probably quite
>> some work.
>
> That would work for MMC and UART (in u-boot, not in the SPL), but not
> for the RAM setup.
next prev parent reply other threads:[~2016-12-12 16:04 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 [this message]
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
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=a2e6a7f1-5cf2-e717-7698-354eb7c18c9b@arm.com \
--to=andre.przywara@arm.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 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.