From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: Giorgio <giorgio.nicole@arcor.de>
Cc: barebox@lists.infradead.org
Subject: Re: imx7d dual core boot
Date: Tue, 7 Apr 2020 10:23:27 +0200 [thread overview]
Message-ID: <621b0466-1176-b067-5bb1-9606bd695c8d@pengutronix.de> (raw)
In-Reply-To: <facff2a6-0014-2858-25bd-de8190b5df0d@arcor.de>
Hello Giorgio,
On 4/7/20 9:46 AM, Giorgio wrote:
> Hi,
>
> OK, my current fix follows also the same logic as for the values
> of 'vbar' and 'ttb' in armv7_secure_monitor_install(). I've also
> found the 'set_domain(v)' in mmu.h, don't need to write a new one.
>
> I'll send a patch for this.
Great. Even better than hardcoding the CLIENT_DOMAIN.
> What do you mean with the 'other i.MX7 patches' ?
Didn't you add support for some i.MX7 spi flash image format?
> I've also noticed that some asm() statements in sm.c lack the 'volatile'
> attribute.
Are they strictly necessary? My understanding is that we need
asm volatile on no output operands, but side effects.
All asm statements in the file either lack side effects
(the reads) or have no output operands (the writes).
That said, I don't mind making them all volatile just
to be a little extra sure..
Cheers,
Ahmad
>
> giorgio
>
> On 4/6/20 8:44 PM, Ahmad Fatoum wrote:
>> Hello Giorgio,
>>
>> On 4/6/20 5:15 PM, Giorgio wrote:
>>> Searching in the Armv7-A ref. man. here:
>>>
>>> https://static.docs.arm.com/ddi0406/cd/DDI0406C_d_armv7ar_arm.pdf
>>>
>>> at B4.1.43 (page B4 - 1554) I found that the reset value of this cp15 reg.
>>> is UNKNOWN and I can also verify this. Moreover the reg. must also be
>>> banked: there is a copy in secure mode and one in nonsecure mode.
>>> My test consists in reading the register just before and just after
>>> the call to arm_smccc_smc(0, 0, 0, 0, 0, 0, 0, 0, &res):
>>>
>>> static u32 read_dacr(void)
>>> {
>>> unsigned int reg;
>>>
>>> asm volatile ("mrc p15, 0, %0, c3, c0, 0\n" : "=r"(reg));
>>> return reg;
>>> }
>>>
>>> ...
>>>
>>> int __armv7_secure_monitor_install(void)
>>> {
>>> ...
>>> printf("%s: 1) dacr: 0x%08x\n",__func__,read_dacr());
>>>
>>> /* Initialize the secure monitor */
>>> arm_smccc_smc(0, 0, 0, 0, 0, 0, 0, 0, &res);
>>>
>>> /* We're in nonsecure mode now */
>>>
>>> printf("%s: 2) dacr: 0x%08x\n",__func__,read_dacr());
>>>
>>> return 0;
>>> }
>>>
>>> and here is what I get:
>>>
>>> samx7: / smc -n
>>> __armv7_secure_monitor_install: 1) dacr: 0x00000001
>>> __armv7_secure_monitor_install: 2) dacr: 0xdbf7afaa
>>>
>>> If I write a 0x1 or a 0x3 to DACR just before enabling the MMU in
>>> nonsecure mode then barebox does not hang.
>>
>> Oh! seems i have been lucky so far:
>>
>> __armv7_secure_monitor_install: 1) dacr: 0x00000001
>> __armv7_secure_monitor_install: 2) dacr: 0xa133ad17
>>
>> Yes, we will want to call set_domain(DOMAIN_CLIENT)
>> somewhere, maybe just before set_ttbr?
>>
>> Do you want to send a patch?
>> (Your other i.MX7 patches are welcome as well :-)
>>
>> Cheers and thanks for debugging this
>> Ahmad
>>
>>>
>>> giorgio
>>>
>>> On 2020-04-06 08:16, Ahmad Fatoum wrote:
>>>> Hello Giorgio,
>>>>
>>>> On 4/3/20 3:47 PM, Giorgio wrote:
>>>>> Hi Ahmad,
>>>>>
>>>>> thank you for the detailed explanations, I'll have a look
>>>>> at the armv7 ref. manual for more background.
>>>>>
>>>>> I wanted just to note, the problem is specifically linked
>>>>> to enabling the MMU:
>>>>>
>>>>> in arch/arm/cpu/cache-armv7.S:
>>>>>
>>>>>
>>>>> orrne r0, r0, #1 @ MMU enabled
>>>>> ...
>>>>> mcr p15, 0, r0, c1, c0, 0 @ load control register
>>>>>
>>>>> without the 'orrne ...' the imx7 does not hang.
>>>>
>>>> I can't reproduce this exact problem. My setup:
>>>>
>>>> - i.MX7D sabresd board,
>>>> - imx_v7_defconfig
>>>> - check out of upstream/next, commit 5931fe40 ("Merge branch 'for-next/zii' into next")
>>>> - revert of commit 8b2104d ("driver: Call of_clk_set_defaults for each probed device")
>>>> - nv bootm.secure_state=nonsecure
>>>>
>>>> With this, I didn't observe any barebox hangs[1] while preparing a Linux net boot.
>>>> What's your setup?
>>>>
>>>> [1]: Linux still hangs due to what I assume to be a psci issue, kernel log says
>>>> "unsupported enable-method property: psci" before getting stuck durcing SDHCI probe
>>>>
>>>
>>
>
--
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 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2020-04-07 8:23 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-26 10:21 Giorgio
2020-03-27 5:56 ` Ahmad Fatoum
2020-03-27 8:27 ` Giorgio
2020-03-27 10:01 ` Ahmad Fatoum
2020-03-30 14:33 ` Giorgio
2020-04-03 13:01 ` Ahmad Fatoum
2020-04-03 13:47 ` Giorgio
2020-04-06 6:16 ` Ahmad Fatoum
2020-04-06 6:29 ` Ahmad Fatoum
2020-04-06 15:15 ` Giorgio
2020-04-06 18:44 ` Ahmad Fatoum
2020-04-07 7:46 ` Giorgio
2020-04-07 8:23 ` Ahmad Fatoum [this message]
2020-04-07 12:28 ` Giorgio
2020-04-07 13:43 ` Ahmad Fatoum
2020-04-13 22:30 ` Giorgio
2020-04-14 7:59 ` Sascha Hauer
2020-04-14 13:05 ` Giorgio
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=621b0466-1176-b067-5bb1-9606bd695c8d@pengutronix.de \
--to=a.fatoum@pengutronix.de \
--cc=barebox@lists.infradead.org \
--cc=giorgio.nicole@arcor.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