[raspi-internals] Re: ARM init code is now on my Github.

  • From: Gordon Hollingworth <gordon.hollingworth@xxxxxxxxx>
  • To: raspi-internals@xxxxxxxxxxxxx
  • Date: Sun, 22 May 2016 11:00:42 +0100

No, there is a bus with no access from the arm at all.  Also the arm's
aprot doesn't make it across into the GPU subsystem so secure access from
the arm is not the same as secure access from the vpu

Gordon
On 22 May 2016 10:31 a.m., "Kristina Brooks" <tinab@xxxxxxx> wrote:

You mean an actual physical bus (same bus as core interconnect I'd guess?)
or are you referring to the secure signal on the AXI bus? I think APROT
only controls supervisor/user versus secure/insecure.

On 5/18/2016 at 3:55 PM, "Gordon Hollingworth" <gordon@xxxxxxxxxxxxxx>
wrote:

There is no physical access between the ARM and the SDRAM controller,
the VPU uses a special (VPU only) bus to communicate with those
registers. You'd have to implement a mailbox type interface to pass
across requests for those blocks

Gordon

On 18 May 2016 at 15:32, <rpiinternal@xxxxxxxxxxxxxxxx> wrote:

On 16.05.2016, at 12:24, Kristina Brooks <tinab@xxxxxxx> wrote:

I would think so, it's configured as an AXI supervisor at the moment. If
not, you should try setting APROTPASS instead of APROTSYST in C0 and try
accessing the registers in ARM secure supervisor mode.


Even with APROTPASS I am unable to dump SD, L1, L2, APHY, DPHY AXI_PERF1
or DMA15 - all are all reading 0.

Seems as if there is some extra protection for 0x7ee00000 to 0x7efffffff
(and some others - see below).

I have patched up the arm and vc4 side to do a bit of ping-pong dumping
register ranges from arm and vc4 side over the shared UART.
This is what I get:

=========================================================
::
:: kFW for bcm2708, Copyright 2016, Kristina Brooks.
::
:: BUILDATE : May 18 2016 09:48:56
:: BUILDSTYLE: OPENSOURCE
::
=========================================================
CPUID = 0x4000104
LoadAddr = 0x80000200
sdram_init: (0) SD_CS = 0x794200
sdram_set_clock_source: source set to 1, div to 1, waiting for BUSY set
(4011) ...
sdram_set_clock_source: BUSY set! (4091)
sdram_reset_phy: resetting SDRAM PHY ...
sdram_reset_phy: resetting DPHY CTRL ...
sdram_reset_phy_lines: resetting APHY/DPHY lines ...
sdram_reset_phy_lines: waiting for DPHY master PLL to lock ...
sdram_reset_phy_lines: DPHY master PLL locked!
sdram_init: waiting for SDUP (210242) ...
sdram_init: SDRAM controller has arrived! (218E42)
sdram_calibrate: DPHY_CSR_DQ_PAD_DRV_SLEW_CTRL = 0x333
sdram_calibrate: waiting for address PVT calibration ...
sdram_calibrate: waiting for data PVT calibration ...
sdram_calibrate: waiting for SDRAM calibration command ...
SDRAM Type: Samsung 256MB LPDDR2 (BC=0x18)
sdram_init_late: waiting for SDRAM controller to go down (218E4A) ...
sdram_init_late: SDRAM controller down!
sdram_init_late: SDRAM clock disabled!
sdram_init_late: waiting for APHY DDR PLL to lock ...
sdram_init_late: APHY DDR PLL locked!
sdram_init_late: CM_SDCCTL = 0x4001
sdram_reset_phy_lines: resetting APHY/DPHY lines ...
sdram_reset_phy_lines: waiting for DPHY master PLL to lock ...
sdram_reset_phy_lines: DPHY master PLL locked!
sdram_init_late: waiting for APHY global PLL to lock ...
sdram_init_late: APHY global PLL locked!
Testing SDRAM ...
SDRAM test successful!
SDRAM initialization completed successfully!
ARM LOADER: build date May 18 2016 09:48:56
arm_init: starting ARM initialization!
arm_load_code: copied 3696 bytes to 0xC0000000!
arm_init: original memstart: 0xE320F000
Translation: [0x0 => 0x600] 0xC0000000 => 0x0
Translation: [0x4 => 0x608] 0xC1000000 => 0x1000000
Translation: [0x8 => 0x610] 0xC2000000 => 0x2000000
Translation: [0xC => 0x618] 0xC3000000 => 0x3000000
Translation: [0x10 => 0x620] 0xC4000000 => 0x4000000
Translation: [0x14 => 0x628] 0xC5000000 => 0x5000000
Translation: [0x80 => 0x3F0] 0x7E000000 => 0x20000000
arm_init: ARM ID: 0x364D5241 C0: 0x0
arm_init: using C0: 0xA043
arm_enable_clock: initializing PLLB ...
KAIP = 0x228
MULTI = 0x613277
arm_enable_clock: ARM clock succesfully initialized!
arm_enable_power: INIT PM_PROC: 0x1000
arm_enable_power: requesting power up ...
arm_enable_power: POWUP PM_PROC: 0x1001
arm_enable_power: waiting for power up ...
arm_enable_power: timed out, trying different CFG: 0x5A011001
arm_enable_power: waiting for MRDONE ...
arm_enable_power: setting ISFUNC ...
arm_enable_power: ARM power domain initialized succesfully, state of
PM_PROC
is: 0x1103F!
arm_setup_bridge: setting up async bridge ...
arm_assert_global_reset: RSTN ...
Cycling AXI bits ...


0x10,0x14,0x10,0x14,0x10,0x14,0x10,0x14,0x10,0x1C,0x18,0x1C,0x18,0x0,0x10,

0x14,0x10,0x1C,0x10,0x14,0x10,0x14,0x10,0x14,0x10,0x14,0x10,0x0,0x10,

0x14,0x10,0x1C,0x18,0x1C,0x10,0x14,0x18,0x1C,0x10,0x14,0x10,0x0,0x10,

0x14,0x18,0x14,0x10,0x14,0x10,0x14,0x10,0x14,0x10,0x14,0x10,0x0,0x10,
0x14,0x18,0x14,0x18,0x14,0x10,0x14,0x10,0x14,0x10,0x14,0x18,0x0,
arm_assert_global_reset: RSTN ...
arm_setup_bridge: bridge init done, PM_PROC is now: 0x1107F!
arm_init: polling ARM state ...
main: arm_chainloader started on ARM, continuing boot from here ...
Dumping dma0
dma0 + 0x00 = ARM@0x20007000 = 0x00000008 = VPU@0x7e007000 =
0x00000008
dma0 + 0x04 = ARM@0x20007004 = 0x00000000 = VPU@0x7e007004 =
0x00000000
dma0 + 0x08 = ARM@0x20007008 = 0x00000000 = VPU@0x7e007008 =
0x00000000
dma0 + 0x0c = ARM@0x2000700c = 0x00000000 = VPU@0x7e00700c =
0x00000000
dma0 + 0x10 = ARM@0x20007010 = 0x00000000 = VPU@0x7e007010 =
0x00000000
dma0 + 0x14 = ARM@0x20007014 = 0x00000000 = VPU@0x7e007014 =
0x00000000
dma0 + 0x18 = ARM@0x20007018 = 0x00000000 = VPU@0x7e007018 =
0x00000000
dma0 + 0x1c = ARM@0x2000701c = 0x00000000 = VPU@0x7e00701c =
0x00000000
dma0 + 0x20 = ARM@0x20007020 = 0x04018000 = VPU@0x7e007020 =
0x04018000
Dumping dma1
dma1 + 0x00 = ARM@0x20007100 = 0x00000008 = VPU@0x7e007100 =
0x00000008
dma1 + 0x04 = ARM@0x20007104 = 0x00000000 = VPU@0x7e007104 =
0x00000000
dma1 + 0x08 = ARM@0x20007108 = 0x00000000 = VPU@0x7e007108 =
0x00000000
dma1 + 0x0c = ARM@0x2000710c = 0x00000000 = VPU@0x7e00710c =
0x00000000
dma1 + 0x10 = ARM@0x20007110 = 0x00000000 = VPU@0x7e007110 =
0x00000000
dma1 + 0x14 = ARM@0x20007114 = 0x00000000 = VPU@0x7e007114 =
0x00000000
dma1 + 0x18 = ARM@0x20007118 = 0x00000000 = VPU@0x7e007118 =
0x00000000
dma1 + 0x1c = ARM@0x2000711c = 0x00000000 = VPU@0x7e00711c =
0x00000000
dma1 + 0x20 = ARM@0x20007120 = 0x04018100 = VPU@0x7e007120 =
0x04018100
Dumping axi_perf0
axi_perf0 + 0x00 = ARM@0x20009800 = 0x00000000 = VPU@0x7e009800 =
0x00000000
axi_perf0 + 0x04 = ARM@0x20009804 = 0x41584950 = VPU@0x7e009804 =
0x41584950
axi_perf0 + 0x08 = ARM@0x20009808 = 0x41584950 = VPU@0x7e009808 =
0x41584950
axi_perf0 + 0x0c = ARM@0x2000980c = 0x41584950 = VPU@0x7e00980c =
0x41584950
axi_perf0 + 0x10 = ARM@0x20009810 = 0x41584950 = VPU@0x7e009810 =
0x41584950
axi_perf0 + 0x14 = ARM@0x20009814 = 0x41584950 = VPU@0x7e009814 =
0x41584950
axi_perf0 + 0x18 = ARM@0x20009818 = 0x41584950 = VPU@0x7e009818 =
0x41584950
axi_perf0 + 0x1c = ARM@0x2000981c = 0x41584950 = VPU@0x7e00981c =
0x41584950
Dumping sdram
sdram + 0x00 = ARM@0x20e00000 = 0x00000000 = VPU@0x7ee00000 =
0x00218e43
sdram + 0x04 = ARM@0x20e00004 = 0x00000000 = VPU@0x7ee00004 =
0x0c293395
sdram + 0x08 = ARM@0x20e00008 = 0x00000000 = VPU@0x7ee00008 =
0x000000f9
sdram + 0x0c = ARM@0x20e0000c = 0x00000000 = VPU@0x7ee0000c =
0x32200743
sdram + 0x10 = ARM@0x20e00010 = 0x00000000 = VPU@0x7ee00010 =
0x00000f96
sdram + 0x14 = ARM@0x20e00014 = 0x00000000 = VPU@0x7ee00014 =
0x0137b828
sdram + 0x18 = ARM@0x20e00018 = 0x00000000 = VPU@0x7ee00018 =
0x0ba547b0
sdram + 0x1c = ARM@0x20e0001c = 0x00000000 = VPU@0x7ee0001c =
0x004bc1e1
sdram + 0x20 = ARM@0x20e00020 = 0x00000000 = VPU@0x7ee00020 =
0x001245cd
sdram + 0x24 = ARM@0x20e00024 = 0x00000000 = VPU@0x7ee00024 =
0x033c9cd1
sdram + 0x28 = ARM@0x20e00028 = 0x00000000 = VPU@0x7ee00028 =
0x0048e163
sdram + 0x2c = ARM@0x20e0002c = 0x00000000 = VPU@0x7ee0002c =
0x0001959b
sdram + 0x30 = ARM@0x20e00030 = 0x00000000 = VPU@0x7ee00030 =
0x0fffffff
sdram + 0x34 = ARM@0x20e00034 = 0x00000000 = VPU@0x7ee00034 =
0x005f9d49
sdram + 0x38 = ARM@0x20e00038 = 0x00000000 = VPU@0x7ee00038 =
0x00bc0f5c
sdram + 0x3c = ARM@0x20e0003c = 0x00000000 = VPU@0x7ee0003c =
0x00000000
Dumping l2
l2 + 0x00 = ARM@0x20e01000 = 0x00000000 = VPU@0x7ee01000 =
0x00000000
l2 + 0x04 = ARM@0x20e01004 = 0x00000000 = VPU@0x7ee01004 =
0x00000000
l2 + 0x08 = ARM@0x20e01008 = 0x00000000 = VPU@0x7ee01008 =
0x3fffffff
l2 + 0x0c = ARM@0x20e0100c = 0x00000000 = VPU@0x7ee0100c =
0x6c326363
l2 + 0x10 = ARM@0x20e01010 = 0x00000000 = VPU@0x7ee01010 =
0x6c326363
l2 + 0x14 = ARM@0x20e01014 = 0x00000000 = VPU@0x7ee01014 =
0x6c326363
l2 + 0x18 = ARM@0x20e01018 = 0x00000000 = VPU@0x7ee01018 =
0x6c326363
l2 + 0x1c = ARM@0x20e0101c = 0x00000000 = VPU@0x7ee0101c =
0x6c326363
l2 + 0x20 = ARM@0x20e01020 = 0x00000000 = VPU@0x7ee01020 =
0x6c326363
l2 + 0x24 = ARM@0x20e01024 = 0x00000000 = VPU@0x7ee01024 =
0x6c326363
l2 + 0x28 = ARM@0x20e01028 = 0x00000000 = VPU@0x7ee01028 =
0x6c326363
l2 + 0x2c = ARM@0x20e0102c = 0x00000000 = VPU@0x7ee0102c =
0x6c326363
l2 + 0x30 = ARM@0x20e01030 = 0x00000000 = VPU@0x7ee01030 =
0x6c326363
l2 + 0x34 = ARM@0x20e01034 = 0x00000000 = VPU@0x7ee01034 =
0x6c326363
l2 + 0x38 = ARM@0x20e01038 = 0x00000000 = VPU@0x7ee01038 =
0x6c326363
l2 + 0x3c = ARM@0x20e0103c = 0x00000000 = VPU@0x7ee0103c =
0x6c326363
Dumping l1
l1 + 0x00 = ARM@0x20e02000 = 0x00000000 = VPU@0x7ee02000 =
0x00000000
l1 + 0x04 = ARM@0x20e02004 = 0x00000000 = VPU@0x7ee02004 =
0x000034af
l1 + 0x08 = ARM@0x20e02008 = 0x00000000 = VPU@0x7ee02008 =
0x00000000
l1 + 0x0c = ARM@0x20e0200c = 0x00000000 = VPU@0x7ee0200c =
0xffffffff
l1 + 0x10 = ARM@0x20e02010 = 0x00000000 = VPU@0x7ee02010 =
0x00000243
l1 + 0x14 = ARM@0x20e02014 = 0x00000000 = VPU@0x7ee02014 =
0x6c316363
l1 + 0x18 = ARM@0x20e02018 = 0x00000000 = VPU@0x7ee02018 =
0x6c316363
l1 + 0x1c = ARM@0x20e0201c = 0x00000000 = VPU@0x7ee0201c =
0x6c316363
l1 + 0x20 = ARM@0x20e02020 = 0x00000000 = VPU@0x7ee02020 =
0x6c316363
l1 + 0x24 = ARM@0x20e02024 = 0x00000000 = VPU@0x7ee02024 =
0x6c316363
l1 + 0x28 = ARM@0x20e02028 = 0x00000000 = VPU@0x7ee02028 =
0x6c316363
l1 + 0x2c = ARM@0x20e0202c = 0x00000000 = VPU@0x7ee0202c =
0x6c316363
l1 + 0x30 = ARM@0x20e02030 = 0x00000000 = VPU@0x7ee02030 =
0x6c316363
l1 + 0x34 = ARM@0x20e02034 = 0x00000000 = VPU@0x7ee02034 =
0x6c316363
l1 + 0x38 = ARM@0x20e02038 = 0x00000000 = VPU@0x7ee02038 =
0x6c316363
l1 + 0x3c = ARM@0x20e0203c = 0x00000000 = VPU@0x7ee0203c =
0x6c316363
Dumping vpu_arb_ctrl
vpu_arb_ctrl + 0x00 = ARM@0x20e04000 = 0x00000000 = VPU@0x7ee04000 =
0x00000000
vpu_arb_ctrl + 0x04 = ARM@0x20e04004 = 0x00000000 = VPU@0x7ee04004 =
0x00000000
vpu_arb_ctrl + 0x08 = ARM@0x20e04008 = 0x00000000 = VPU@0x7ee04008 =
0x61726272
vpu_arb_ctrl + 0x0c = ARM@0x20e0400c = 0x00000000 = VPU@0x7ee0400c =
0x61726272
vpu_arb_ctrl + 0x10 = ARM@0x20e04010 = 0x00000000 = VPU@0x7ee04010 =
0x61726272
vpu_arb_ctrl + 0x14 = ARM@0x20e04014 = 0x00000000 = VPU@0x7ee04014 =
0x61726272
vpu_arb_ctrl + 0x18 = ARM@0x20e04018 = 0x00000000 = VPU@0x7ee04018 =
0x61726272
vpu_arb_ctrl + 0x1c = ARM@0x20e0401c = 0x00000000 = VPU@0x7ee0401c =
0x61726272
vpu_arb_ctrl + 0x20 = ARM@0x20e04020 = 0x00000000 = VPU@0x7ee04020 =
0x61726272
vpu_arb_ctrl + 0x24 = ARM@0x20e04024 = 0x00000000 = VPU@0x7ee04024 =
0x61726272
vpu_arb_ctrl + 0x28 = ARM@0x20e04028 = 0x00000000 = VPU@0x7ee04028 =
0x61726272
vpu_arb_ctrl + 0x2c = ARM@0x20e0402c = 0x00000000 = VPU@0x7ee0402c =
0x61726272
vpu_arb_ctrl + 0x30 = ARM@0x20e04030 = 0x00000000 = VPU@0x7ee04030 =
0x61726272
vpu_arb_ctrl + 0x34 = ARM@0x20e04034 = 0x00000000 = VPU@0x7ee04034 =
0x61726272
vpu_arb_ctrl + 0x38 = ARM@0x20e04038 = 0x00000000 = VPU@0x7ee04038 =
0x61726272
vpu_arb_ctrl + 0x3c = ARM@0x20e0403c = 0x00000000 = VPU@0x7ee0403c =
0x61726272
Dumping dma15
dma15 + 0x00 = ARM@0x20e05000 = 0x00000000 = VPU@0x7ee05000 =
0x00000008
dma15 + 0x04 = ARM@0x20e05004 = 0x00000000 = VPU@0x7ee05004 =
0x00000000
dma15 + 0x08 = ARM@0x20e05008 = 0x00000000 = VPU@0x7ee05008 =
0x00000000
dma15 + 0x0c = ARM@0x20e0500c = 0x00000000 = VPU@0x7ee0500c =
0x00000000
dma15 + 0x10 = ARM@0x20e05010 = 0x00000000 = VPU@0x7ee05010 =
0x00000000
dma15 + 0x14 = ARM@0x20e05014 = 0x00000000 = VPU@0x7ee05014 =
0x00000000
dma15 + 0x18 = ARM@0x20e05018 = 0x00000000 = VPU@0x7ee05018 =
0x00000000
dma15 + 0x1c = ARM@0x20e0501c = 0x00000000 = VPU@0x7ee0501c =
0x00000000
dma15 + 0x20 = ARM@0x20e05020 = 0x00000000 = VPU@0x7ee05020 =
0x04019000
Dumping aphy_csr
aphy_csr + 0x00 = ARM@0x20e06000 = 0x00000000 = VPU@0x7ee06000 =
0x00000100
aphy_csr + 0x04 = ARM@0x20e06004 = 0x00000000 = VPU@0x7ee06004 =
0x00000000
aphy_csr + 0x08 = ARM@0x20e06008 = 0x00000000 = VPU@0x7ee06008 =
0x00000000
aphy_csr + 0x0c = ARM@0x20e0600c = 0x00000000 = VPU@0x7ee0600c =
0x00000100
aphy_csr + 0x10 = ARM@0x20e06010 = 0x00000000 = VPU@0x7ee06010 =
0x00000000
aphy_csr + 0x14 = ARM@0x20e06014 = 0x00000000 = VPU@0x7ee06014 =
0x00001213
aphy_csr + 0x18 = ARM@0x20e06018 = 0x00000000 = VPU@0x7ee06018 =
0x00000000
aphy_csr + 0x1c = ARM@0x20e0601c = 0x00000000 = VPU@0x7ee0601c =
0x00000000
aphy_csr + 0x20 = ARM@0x20e06020 = 0x00000000 = VPU@0x7ee06020 =
0x00000003
aphy_csr + 0x24 = ARM@0x20e06024 = 0x00000000 = VPU@0x7ee06024 =
0x00000001
aphy_csr + 0x28 = ARM@0x20e06028 = 0x00000000 = VPU@0x7ee06028 =
0x00000001
aphy_csr + 0x2c = ARM@0x20e0602c = 0x00000000 = VPU@0x7ee0602c =
0x00010053
aphy_csr + 0x30 = ARM@0x20e06030 = 0x00000000 = VPU@0x7ee06030 =
0x00000000
aphy_csr + 0x34 = ARM@0x20e06034 = 0x00000000 = VPU@0x7ee06034 =
0x00000000
aphy_csr + 0x38 = ARM@0x20e06038 = 0x00000000 = VPU@0x7ee06038 =
0x00000000
aphy_csr + 0x3c = ARM@0x20e0603c = 0x00000000 = VPU@0x7ee0603c =
0x00000a33
Dumping dphy_csr
dphy_csr + 0x00 = ARM@0x20e07000 = 0x00000000 = VPU@0x7ee07000 =
0x00000100
dphy_csr + 0x04 = ARM@0x20e07004 = 0x00000000 = VPU@0x7ee07004 =
0x00000000
dphy_csr + 0x08 = ARM@0x20e07008 = 0x00000000 = VPU@0x7ee07008 =
0x00000000
dphy_csr + 0x0c = ARM@0x20e0700c = 0x00000000 = VPU@0x7ee0700c =
0x00000100
dphy_csr + 0x10 = ARM@0x20e07010 = 0x00000000 = VPU@0x7ee07010 =
0x00000000
dphy_csr + 0x14 = ARM@0x20e07014 = 0x00000000 = VPU@0x7ee07014 =
0x00000000
dphy_csr + 0x18 = ARM@0x20e07018 = 0x00000000 = VPU@0x7ee07018 =
0x0000ffff
dphy_csr + 0x1c = ARM@0x20e0701c = 0x00000000 = VPU@0x7ee0701c =
0x00000000
dphy_csr + 0x20 = ARM@0x20e07020 = 0x00000000 = VPU@0x7ee07020 =
0x00000000
dphy_csr + 0x24 = ARM@0x20e07024 = 0x00000000 = VPU@0x7ee07024 =
0x00000000
dphy_csr + 0x28 = ARM@0x20e07028 = 0x00000000 = VPU@0x7ee07028 =
0x00000000
dphy_csr + 0x2c = ARM@0x20e0702c = 0x00000000 = VPU@0x7ee0702c =
0x11111112
dphy_csr + 0x30 = ARM@0x20e07030 = 0x00000000 = VPU@0x7ee07030 =
0x11111112
dphy_csr + 0x34 = ARM@0x20e07034 = 0x00000000 = VPU@0x7ee07034 =
0x11121112
dphy_csr + 0x38 = ARM@0x20e07038 = 0x00000000 = VPU@0x7ee07038 =
0x11121112
dphy_csr + 0x3c = ARM@0x20e0703c = 0x00000000 = VPU@0x7ee0703c =
0xa5555050
Dumping cm
cm + 0x00 = ARM@0x20101000 = 0x0000636d = VPU@0x7e101000 =
0x0000636d
cm + 0x04 = ARM@0x20101004 = 0x0000636d = VPU@0x7e101004 =
0x0000636d
cm + 0x08 = ARM@0x20101008 = 0x00000245 = VPU@0x7e101008 =
0x00000245
cm + 0x0c = ARM@0x2010100c = 0x00004000 = VPU@0x7e10100c =
0x00004000
cm + 0x10 = ARM@0x20101010 = 0x00000040 = VPU@0x7e101010 =
0x00000040
cm + 0x14 = ARM@0x20101014 = 0x00000000 = VPU@0x7e101014 =
0x00000000
cm + 0x18 = ARM@0x20101018 = 0x00000040 = VPU@0x7e101018 =
0x00000040
cm + 0x1c = ARM@0x2010101c = 0x00000000 = VPU@0x7e10101c =
0x00000000
cm + 0x20 = ARM@0x20101020 = 0x00000000 = VPU@0x7e101020 =
0x00000000
cm + 0x24 = ARM@0x20101024 = 0x00000000 = VPU@0x7e101024 =
0x00000000
cm + 0x28 = ARM@0x20101028 = 0x00000040 = VPU@0x7e101028 =
0x00000040
cm + 0x2c = ARM@0x2010102c = 0x00000000 = VPU@0x7e10102c =
0x00000000
cm + 0x30 = ARM@0x20101030 = 0x00000040 = VPU@0x7e101030 =
0x00000040
cm + 0x34 = ARM@0x20101034 = 0x00000000 = VPU@0x7e101034 =
0x00000000
cm + 0x38 = ARM@0x20101038 = 0x00000040 = VPU@0x7e101038 =
0x00000040
cm + 0x3c = ARM@0x2010103c = 0x00000000 = VPU@0x7e10103c =
0x00000000
Dumping a2w
a2w + 0x00 = ARM@0x20102000 = 0x00000000 = VPU@0x7e102000 =
0x00000000
a2w + 0x04 = ARM@0x20102004 = 0x00004000 = VPU@0x7e102004 =
0x00004000
a2w + 0x08 = ARM@0x20102008 = 0x00100401 = VPU@0x7e102008 =
0x00100401
a2w + 0x0c = ARM@0x2010200c = 0x00000004 = VPU@0x7e10200c =
0x00000004
a2w + 0x10 = ARM@0x20102010 = 0x00000000 = VPU@0x7e102010 =
0x00000000
a2w + 0x14 = ARM@0x20102014 = 0x001d0000 = VPU@0x7e102014 =
0x001d0000
a2w + 0x18 = ARM@0x20102018 = 0x00000000 = VPU@0x7e102018 =
0x00000000
a2w + 0x1c = ARM@0x2010201c = 0x00000180 = VPU@0x7e10201c =
0x00000180
a2w + 0x20 = ARM@0x20102020 = 0x00555034 = VPU@0x7e102020 =
0x00555034
a2w + 0x24 = ARM@0x20102024 = 0x00000085 = VPU@0x7e102024 =
0x00000085
a2w + 0x28 = ARM@0x20102028 = 0x00500401 = VPU@0x7e102028 =
0x00500401
a2w + 0x2c = ARM@0x2010202c = 0x00000002 = VPU@0x7e10202c =
0x00000002
a2w + 0x30 = ARM@0x20102030 = 0x00000000 = VPU@0x7e102030 =
0x00000000
a2w + 0x34 = ARM@0x20102034 = 0x00144000 = VPU@0x7e102034 =
0x00144000
a2w + 0x38 = ARM@0x20102038 = 0x00000000 = VPU@0x7e102038 =
0x00000000
a2w + 0x3c = ARM@0x2010203c = 0x00000100 = VPU@0x7e10203c =
0x00000100
Dumping uart
uart + 0x00 = ARM@0x20201000 = 0x00000000 = VPU@0x7e201000 =
0x00000000
uart + 0x04 = ARM@0x20201004 = 0x00000000 = VPU@0x7e201004 =
0x00000000
uart + 0x08 = ARM@0x20201008 = 0x00000000 = VPU@0x7e201008 =
0x00000000
uart + 0x0c = ARM@0x2020100c = 0x00000000 = VPU@0x7e20100c =
0x00000000
uart + 0x10 = ARM@0x20201010 = 0x00000000 = VPU@0x7e201010 =
0x00000000
uart + 0x14 = ARM@0x20201014 = 0x00000000 = VPU@0x7e201014 =
0x00000000
uart + 0x18 = ARM@0x20201018 = 0x00000091 = VPU@0x7e201018 =
0x00000091
uart + 0x1c = ARM@0x2020101c = 0x00000000 = VPU@0x7e20101c =
0x00000000
uart + 0x20 = ARM@0x20201020 = 0x00000000 = VPU@0x7e201020 =
0x00000000
uart + 0x24 = ARM@0x20201024 = 0x00000000 = VPU@0x7e201024 =
0x00000000
uart + 0x28 = ARM@0x20201028 = 0x00000000 = VPU@0x7e201028 =
0x00000000
uart + 0x2c = ARM@0x2020102c = 0x00000000 = VPU@0x7e20102c =
0x00000000
uart + 0x30 = ARM@0x20201030 = 0x00000300 = VPU@0x7e201030 =
0x00000300
uart + 0x34 = ARM@0x20201034 = 0x00000492 = VPU@0x7e201034 =
0x00000492
uart + 0x38 = ARM@0x20201038 = 0x00000000 = VPU@0x7e201038 =
0x00000000
uart + 0x3c = ARM@0x2020103c = 0x00000000 = VPU@0x7e20103c =
0x00000000
panic(): "ARM requested VPU halt, gooodbye VPU ..."@arm_loader.c:274

So there may be some:
a) HW blocking arm from accessing the range
b) some protections set up by the boot-loader

similarly if I try to access the ARM translation layer it does also only
read zero:
Dumping ARMT
ARMT + 0x00 = VPU@0x7e00b100 = 0x00000600 = ARM@0x2000b100 =
0x00000000
ARMT + 0x04 = VPU@0x7e00b104 = 0x00000608 = ARM@0x2000b104 =
0x00000000
ARMT + 0x08 = VPU@0x7e00b108 = 0x00000610 = ARM@0x2000b108 =
0x00000000
ARMT + 0x0c = VPU@0x7e00b10c = 0x00000618 = ARM@0x2000b10c =
0x00000000
ARMT + 0x10 = VPU@0x7e00b110 = 0x00000620 = ARM@0x2000b110 =
0x00000000
ARMT + 0x14 = VPU@0x7e00b114 = 0x00000628 = ARM@0x2000b114 =
0x00000000
ARMT + 0x18 = VPU@0x7e00b118 = 0x0000060e = ARM@0x2000b118 =
0x00000000


So there seems to be some protection around some of the register ranges,
so
that they are only accessible via the vc4 core and not by arm…

Also note that I have tried the following as well:
arm_pmap_enter(0x7ee00000, 0x30000000);
which translates to:
Translation: [0xDC => 0x3F7] 0x7EE00000 => 0x30000000
which gives distinct non 0 values for some.

But looking at all the variations of that register gives only the same
0x7e000000 addresses,
so the lowest 3 bits of these ARM mapping-register (0x7E00B1XX) are not
used
and do not serve
any obvious purpose (I have only tried reading all the variations - not
writing!)

So in summary: there are registers that are only accessible from the VC4
side
but they are not accessible by the ARM side and map to 0 there...

At least that is my interpretation - maybe someone else wants to confirm
this independently?

Martin


Other related posts: