From: armlinux@emagii.com (ARM Linux)
To: linux-arm-kernel@lists.infradead.org
Subject: AT91: How copy kernel code to SRAM and execute?
Date: Sun, 26 Feb 2012 18:37:25 +0100 [thread overview]
Message-ID: <4F4A6DD5.5040606@emagii.com> (raw)
I am looking for some examples on how to copy a small piece of kernel code
to internal SRAM and then execute it.
Why?
If you want to restart, you execute the "/sbin/reboot" command
which will eventually call the "arch_reset" function, which in the AT91
case will write to a "user reset" register.
The problem is that the chip may reset in the middle of an SDRAM read
transfer.
The SDRAM will see it's clock stopped and will continue to drive the bus.
When the ROM bootloader tries to access any boot memory (Parallel flash
or NAND flash)
on the parallel bus, there will be a bus conflict between the boot
memory and the SDRAM,
and the bootROM will not properly detect the boot program, and will enter
an In System Programming mode.
This is described in the SAM9G20 datasheet, but is probably valid
for all older generation AT91 devices as well.
The workaround seems to be to turn off the SDRAM and then do the reset.
Obviously you cannot read instructions from SDRAM after it has been
turned off.
One possible workaround is to copy the code to SRAM and then execute.
Looking for some hints on how first copy the code to the internal SRAM
located at 0x300000,
and then jump and execute the code at this address.
Note that when arch_reset is called, the CPU is no longer executing
in its normal state.
It is called from arm_machine_restart in "arch/arm/kernel/process.c"
which has turned off the caches and setup some direct mapping at lower
addresses
--
Best Regards
Ulf Samuelsson
ulf at emagii.com
+46 722 427437
next reply other threads:[~2012-02-26 17:37 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-26 17:37 ARM Linux [this message]
2012-02-26 17:50 ` AT91: How copy kernel code to SRAM and execute? Russell King - ARM Linux
2012-02-26 20:48 ` Ulf Samuelsson
2012-02-26 21:05 ` Russell King - ARM Linux
2012-02-27 3:42 ` Jean-Christophe PLAGNIOL-VILLARD
2012-02-26 18:44 ` Jean-Christophe PLAGNIOL-VILLARD
2012-02-26 20:52 ` ARM Linux
2012-02-27 3:40 ` Jean-Christophe PLAGNIOL-VILLARD
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=4F4A6DD5.5040606@emagii.com \
--to=armlinux@emagii.com \
--cc=linux-arm-kernel@lists.infradead.org \
/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.