Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
92f1e2d100 |
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -49,8 +49,6 @@ X.X.X</br>
|
|||||||
- [ Ex: Kosmos' distribution of Atmosphère ]
|
- [ Ex: Kosmos' distribution of Atmosphère ]
|
||||||
- Do you have additional kips or sysmodules you're loading:
|
- Do you have additional kips or sysmodules you're loading:
|
||||||
- Homebrew software installed: [ * ]
|
- Homebrew software installed: [ * ]
|
||||||
- EmuMMC or SysNAND:
|
|
||||||
- [ If using an EmuMMC, include whether it's partition-based or file-based. ]
|
|
||||||
|
|
||||||
### Additional context?
|
### Additional context?
|
||||||
|
|
||||||
|
|||||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -79,8 +79,9 @@ dkms.conf
|
|||||||
*.nam
|
*.nam
|
||||||
*.til
|
*.til
|
||||||
|
|
||||||
# Compiled python files.
|
# KEYS file for sept-secondary.
|
||||||
*.pyc
|
*.pyc
|
||||||
|
sept/sept-secondary/KEYS.py
|
||||||
|
|
||||||
.**/
|
.**/
|
||||||
|
|
||||||
@@ -94,5 +95,3 @@ dkms.conf
|
|||||||
**/build_nintendo_nx_arm
|
**/build_nintendo_nx_arm
|
||||||
**/build_nintendo_nx_x64
|
**/build_nintendo_nx_x64
|
||||||
**/build_nintendo_nx_x86
|
**/build_nintendo_nx_x86
|
||||||
|
|
||||||
stratosphere/test/
|
|
||||||
|
|||||||
80
Makefile
80
Makefile
@@ -1,9 +1,3 @@
|
|||||||
ifeq ($(strip $(DEVKITPRO)),)
|
|
||||||
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro)
|
|
||||||
endif
|
|
||||||
|
|
||||||
include $(DEVKITPRO)/devkitA64/base_tools
|
|
||||||
|
|
||||||
TOPTARGETS := all clean dist-no-debug dist
|
TOPTARGETS := all clean dist-no-debug dist
|
||||||
AMSBRANCH := $(shell git symbolic-ref --short HEAD)
|
AMSBRANCH := $(shell git symbolic-ref --short HEAD)
|
||||||
AMSHASH := $(shell git rev-parse --short HEAD)
|
AMSHASH := $(shell git rev-parse --short HEAD)
|
||||||
@@ -32,7 +26,10 @@ mesosphere: exosphere libraries
|
|||||||
troposphere: stratosphere
|
troposphere: stratosphere
|
||||||
$(MAKE) -C troposphere all
|
$(MAKE) -C troposphere all
|
||||||
|
|
||||||
fusee: exosphere mesosphere stratosphere
|
sept: exosphere
|
||||||
|
$(MAKE) -C sept all
|
||||||
|
|
||||||
|
fusee: exosphere mesosphere stratosphere sept
|
||||||
$(MAKE) -C $@ all
|
$(MAKE) -C $@ all
|
||||||
|
|
||||||
libraries:
|
libraries:
|
||||||
@@ -40,7 +37,6 @@ libraries:
|
|||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(MAKE) -C fusee clean
|
$(MAKE) -C fusee clean
|
||||||
$(MAKE) -C emummc clean
|
|
||||||
rm -rf out
|
rm -rf out
|
||||||
|
|
||||||
dist-no-debug: all
|
dist-no-debug: all
|
||||||
@@ -58,50 +54,59 @@ dist-no-debug: all
|
|||||||
rm -rf out
|
rm -rf out
|
||||||
mkdir atmosphere-$(AMSVER)
|
mkdir atmosphere-$(AMSVER)
|
||||||
mkdir atmosphere-$(AMSVER)/atmosphere
|
mkdir atmosphere-$(AMSVER)/atmosphere
|
||||||
|
mkdir atmosphere-$(AMSVER)/sept
|
||||||
mkdir atmosphere-$(AMSVER)/switch
|
mkdir atmosphere-$(AMSVER)/switch
|
||||||
|
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/0100000000000008
|
||||||
|
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/010000000000000D
|
||||||
|
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/010000000000002B
|
||||||
|
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/0100000000000032
|
||||||
|
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/0100000000000034
|
||||||
|
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/0100000000000036
|
||||||
|
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/0100000000000037
|
||||||
|
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/010000000000003C
|
||||||
|
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/0100000000000042
|
||||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/fatal_errors
|
mkdir -p atmosphere-$(AMSVER)/atmosphere/fatal_errors
|
||||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/config_templates
|
mkdir -p atmosphere-$(AMSVER)/atmosphere/config_templates
|
||||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/config
|
mkdir -p atmosphere-$(AMSVER)/atmosphere/config
|
||||||
mkdir -p atmosphere-$(AMSVER)/atmosphere/flags
|
|
||||||
touch atmosphere-$(AMSVER)/atmosphere/flags/clean_stratosphere_for_0.19.0.flag
|
|
||||||
cp fusee/fusee-primary/fusee-primary.bin atmosphere-$(AMSVER)/atmosphere/reboot_payload.bin
|
cp fusee/fusee-primary/fusee-primary.bin atmosphere-$(AMSVER)/atmosphere/reboot_payload.bin
|
||||||
|
cp fusee/fusee-mtc/fusee-mtc.bin atmosphere-$(AMSVER)/atmosphere/fusee-mtc.bin
|
||||||
cp fusee/fusee-secondary/fusee-secondary-experimental.bin atmosphere-$(AMSVER)/atmosphere/fusee-secondary.bin
|
cp fusee/fusee-secondary/fusee-secondary-experimental.bin atmosphere-$(AMSVER)/atmosphere/fusee-secondary.bin
|
||||||
cp config_templates/BCT.ini atmosphere-$(AMSVER)/atmosphere/config_templates/BCT.ini
|
cp fusee/fusee-secondary/fusee-secondary-experimental.bin atmosphere-$(AMSVER)/sept/payload.bin
|
||||||
|
cp sept/sept-primary/sept-primary.bin atmosphere-$(AMSVER)/sept/sept-primary.bin
|
||||||
|
cp sept/sept-secondary/sept-secondary.bin atmosphere-$(AMSVER)/sept/sept-secondary.bin
|
||||||
|
cp sept/sept-secondary/sept-secondary_00.enc atmosphere-$(AMSVER)/sept/sept-secondary_00.enc
|
||||||
|
cp sept/sept-secondary/sept-secondary_01.enc atmosphere-$(AMSVER)/sept/sept-secondary_01.enc
|
||||||
|
cp sept/sept-secondary/sept-secondary_dev_00.enc atmosphere-$(AMSVER)/sept/sept-secondary_dev_00.enc
|
||||||
|
cp sept/sept-secondary/sept-secondary_dev_01.enc atmosphere-$(AMSVER)/sept/sept-secondary_dev_01.enc
|
||||||
|
cp config_templates/BCT.ini atmosphere-$(AMSVER)/atmosphere/config/BCT.ini
|
||||||
cp config_templates/override_config.ini atmosphere-$(AMSVER)/atmosphere/config_templates/override_config.ini
|
cp config_templates/override_config.ini atmosphere-$(AMSVER)/atmosphere/config_templates/override_config.ini
|
||||||
cp config_templates/system_settings.ini atmosphere-$(AMSVER)/atmosphere/config_templates/system_settings.ini
|
cp config_templates/system_settings.ini atmosphere-$(AMSVER)/atmosphere/config_templates/system_settings.ini
|
||||||
cp config_templates/exosphere.ini atmosphere-$(AMSVER)/atmosphere/config_templates/exosphere.ini
|
cp config_templates/exosphere.ini atmosphere-$(AMSVER)/atmosphere/config_templates/exosphere.ini
|
||||||
cp -r config_templates/kip_patches atmosphere-$(AMSVER)/atmosphere/kip_patches
|
cp -r config_templates/kip_patches atmosphere-$(AMSVER)/atmosphere/kip_patches
|
||||||
cp -r config_templates/hbl_html atmosphere-$(AMSVER)/atmosphere/hbl_html
|
cp -r config_templates/hbl_html atmosphere-$(AMSVER)/atmosphere/hbl_html
|
||||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000008
|
cp stratosphere/boot2/boot2.nsp atmosphere-$(AMSVER)/atmosphere/contents/0100000000000008/exefs.nsp
|
||||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000008
|
cp stratosphere/dmnt/dmnt.nsp atmosphere-$(AMSVER)/atmosphere/contents/010000000000000D/exefs.nsp
|
||||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000000D
|
cp stratosphere/erpt/erpt.nsp atmosphere-$(AMSVER)/atmosphere/contents/010000000000002B/exefs.nsp
|
||||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000002B
|
cp stratosphere/eclct.stub/eclct.stub.nsp atmosphere-$(AMSVER)/atmosphere/contents/0100000000000032/exefs.nsp
|
||||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000032
|
cp stratosphere/fatal/fatal.nsp atmosphere-$(AMSVER)/atmosphere/contents/0100000000000034/exefs.nsp
|
||||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000034
|
cp stratosphere/creport/creport.nsp atmosphere-$(AMSVER)/atmosphere/contents/0100000000000036/exefs.nsp
|
||||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000036
|
cp stratosphere/ro/ro.nsp atmosphere-$(AMSVER)/atmosphere/contents/0100000000000037/exefs.nsp
|
||||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000037
|
cp stratosphere/jpegdec/jpegdec.nsp atmosphere-$(AMSVER)/atmosphere/contents/010000000000003C/exefs.nsp
|
||||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000003C
|
cp stratosphere/pgl/pgl.nsp atmosphere-$(AMSVER)/atmosphere/contents/0100000000000042/exefs.nsp
|
||||||
mkdir -p atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000042
|
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/0100000000000032/flags
|
||||||
cp stratosphere/boot2/boot2.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000008/exefs.nsp
|
touch atmosphere-$(AMSVER)/atmosphere/contents/0100000000000032/flags/boot2.flag
|
||||||
cp stratosphere/dmnt/dmnt.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000000D/exefs.nsp
|
mkdir -p atmosphere-$(AMSVER)/atmosphere/contents/0100000000000037/flags
|
||||||
cp stratosphere/erpt/erpt.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000002B/exefs.nsp
|
touch atmosphere-$(AMSVER)/atmosphere/contents/0100000000000037/flags/boot2.flag
|
||||||
cp stratosphere/eclct.stub/eclct.stub.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000032/exefs.nsp
|
|
||||||
cp stratosphere/fatal/fatal.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000034/exefs.nsp
|
|
||||||
cp stratosphere/creport/creport.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000036/exefs.nsp
|
|
||||||
cp stratosphere/ro/ro.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000037/exefs.nsp
|
|
||||||
cp stratosphere/jpegdec/jpegdec.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/010000000000003C/exefs.nsp
|
|
||||||
cp stratosphere/pgl/pgl.nsp atmosphere-$(AMSVER)/stratosphere_romfs/atmosphere/contents/0100000000000042/exefs.nsp
|
|
||||||
@build_romfs atmosphere-$(AMSVER)/stratosphere_romfs atmosphere-$(AMSVER)/atmosphere/stratosphere.romfs
|
|
||||||
rm -r atmosphere-$(AMSVER)/stratosphere_romfs
|
|
||||||
cp troposphere/reboot_to_payload/reboot_to_payload.nro atmosphere-$(AMSVER)/switch/reboot_to_payload.nro
|
cp troposphere/reboot_to_payload/reboot_to_payload.nro atmosphere-$(AMSVER)/switch/reboot_to_payload.nro
|
||||||
cp troposphere/daybreak/daybreak.nro atmosphere-$(AMSVER)/switch/daybreak.nro
|
cp troposphere/daybreak/daybreak.nro atmosphere-$(AMSVER)/switch/daybreak.nro
|
||||||
cd atmosphere-$(AMSVER); zip -r ../atmosphere-$(AMSVER).zip ./*; cd ../;
|
cd atmosphere-$(AMSVER); zip -r ../atmosphere-EXPERIMENTAL-$(AMSVER).zip ./*; cd ../;
|
||||||
cp fusee/fusee-secondary/fusee-secondary.bin atmosphere-$(AMSVER)/atmosphere/fusee-secondary.bin
|
cp fusee/fusee-secondary/fusee-secondary.bin atmosphere-$(AMSVER)/atmosphere/fusee-secondary.bin
|
||||||
cd atmosphere-$(AMSVER); zip -r ../atmosphere-$(AMSVER)-WITHOUT_MESOSPHERE.zip ./*; cd ../;
|
cp fusee/fusee-secondary/fusee-secondary.bin atmosphere-$(AMSVER)/sept/payload.bin
|
||||||
|
cd atmosphere-$(AMSVER); zip -r ../atmosphere-$(AMSVER).zip ./*; cd ../;
|
||||||
rm -r atmosphere-$(AMSVER)
|
rm -r atmosphere-$(AMSVER)
|
||||||
mkdir out
|
mkdir out
|
||||||
|
mv atmosphere-EXPERIMENTAL-$(AMSVER).zip out/atmosphere-EXPERIMENTAL-$(AMSVER).zip
|
||||||
mv atmosphere-$(AMSVER).zip out/atmosphere-$(AMSVER).zip
|
mv atmosphere-$(AMSVER).zip out/atmosphere-$(AMSVER).zip
|
||||||
mv atmosphere-$(AMSVER)-WITHOUT_MESOSPHERE.zip out/atmosphere-$(AMSVER)-WITHOUT_MESOSPHERE.zip
|
|
||||||
cp fusee/fusee-primary/fusee-primary.bin out/fusee-primary.bin
|
cp fusee/fusee-primary/fusee-primary.bin out/fusee-primary.bin
|
||||||
|
|
||||||
dist: dist-no-debug
|
dist: dist-no-debug
|
||||||
@@ -118,7 +123,11 @@ dist: dist-no-debug
|
|||||||
rm -rf atmosphere-$(AMSVER)-debug
|
rm -rf atmosphere-$(AMSVER)-debug
|
||||||
mkdir atmosphere-$(AMSVER)-debug
|
mkdir atmosphere-$(AMSVER)-debug
|
||||||
cp fusee/fusee-primary/fusee-primary.elf atmosphere-$(AMSVER)-debug/fusee-primary.elf
|
cp fusee/fusee-primary/fusee-primary.elf atmosphere-$(AMSVER)-debug/fusee-primary.elf
|
||||||
|
cp fusee/fusee-mtc/fusee-mtc.elf atmosphere-$(AMSVER)-debug/fusee-mtc.elf
|
||||||
cp fusee/fusee-secondary/fusee-secondary-experimental.elf atmosphere-$(AMSVER)-debug/fusee-secondary.elf
|
cp fusee/fusee-secondary/fusee-secondary-experimental.elf atmosphere-$(AMSVER)-debug/fusee-secondary.elf
|
||||||
|
cp sept/sept-primary/sept-primary.elf atmosphere-$(AMSVER)-debug/sept-primary.elf
|
||||||
|
cp sept/sept-secondary/sept-secondary.elf atmosphere-$(AMSVER)-debug/sept-secondary.elf
|
||||||
|
cp sept/sept-secondary/key_derivation/key_derivation.elf atmosphere-$(AMSVER)-debug/sept-secondary-key-derivation.elf
|
||||||
cp exosphere/loader_stub/loader_stub.elf atmosphere-$(AMSVER)-debug/exosphere-loader-stub.elf
|
cp exosphere/loader_stub/loader_stub.elf atmosphere-$(AMSVER)-debug/exosphere-loader-stub.elf
|
||||||
cp exosphere/program/program.elf atmosphere-$(AMSVER)-debug/exosphere-program.elf
|
cp exosphere/program/program.elf atmosphere-$(AMSVER)-debug/exosphere-program.elf
|
||||||
cp exosphere/warmboot/warmboot.elf atmosphere-$(AMSVER)-debug/exosphere-warmboot.elf
|
cp exosphere/warmboot/warmboot.elf atmosphere-$(AMSVER)-debug/exosphere-warmboot.elf
|
||||||
@@ -126,7 +135,6 @@ dist: dist-no-debug
|
|||||||
cp exosphere/program/sc7fw/sc7fw.elf atmosphere-$(AMSVER)-debug/exosphere-sc7fw.elf
|
cp exosphere/program/sc7fw/sc7fw.elf atmosphere-$(AMSVER)-debug/exosphere-sc7fw.elf
|
||||||
cp exosphere/program/rebootstub/rebootstub.elf atmosphere-$(AMSVER)-debug/exosphere-rebootstub.elf
|
cp exosphere/program/rebootstub/rebootstub.elf atmosphere-$(AMSVER)-debug/exosphere-rebootstub.elf
|
||||||
cp mesosphere/kernel_ldr/kernel_ldr.elf atmosphere-$(AMSVER)-debug/kernel_ldr.elf
|
cp mesosphere/kernel_ldr/kernel_ldr.elf atmosphere-$(AMSVER)-debug/kernel_ldr.elf
|
||||||
cp mesosphere/kernel/kernel.elf atmosphere-$(AMSVER)-debug/kernel.elf
|
|
||||||
cp stratosphere/ams_mitm/ams_mitm.elf atmosphere-$(AMSVER)-debug/ams_mitm.elf
|
cp stratosphere/ams_mitm/ams_mitm.elf atmosphere-$(AMSVER)-debug/ams_mitm.elf
|
||||||
cp stratosphere/boot/boot.elf atmosphere-$(AMSVER)-debug/boot.elf
|
cp stratosphere/boot/boot.elf atmosphere-$(AMSVER)-debug/boot.elf
|
||||||
cp stratosphere/boot2/boot2.elf atmosphere-$(AMSVER)-debug/boot2.elf
|
cp stratosphere/boot2/boot2.elf atmosphere-$(AMSVER)-debug/boot2.elf
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,13 +1,9 @@
|
|||||||
[eupld]
|
|
||||||
; Disable uploading error reports to Nintendo
|
; Disable uploading error reports to Nintendo
|
||||||
|
[eupld]
|
||||||
; upload_enabled = u8!0x0
|
; upload_enabled = u8!0x0
|
||||||
[usb]
|
|
||||||
; Enable USB 3.0 superspeed for homebrew
|
|
||||||
; 0 = USB 3.0 support is system default (usually disabled), 1 = USB 3.0 support is enabled.
|
|
||||||
; usb30_force_enabled = u8!0x0
|
|
||||||
[ro]
|
|
||||||
; Control whether RO should ease its validation of NROs.
|
; Control whether RO should ease its validation of NROs.
|
||||||
; (note: this is normally not necessary, and ips patches can be used.)
|
; (note: this is normally not necessary, and ips patches can be used.)
|
||||||
|
[ro]
|
||||||
; ease_nro_restriction = u8!0x1
|
; ease_nro_restriction = u8!0x1
|
||||||
; Atmosphere custom settings
|
; Atmosphere custom settings
|
||||||
[atmosphere]
|
[atmosphere]
|
||||||
@@ -36,23 +32,16 @@
|
|||||||
; NOTE: EXPERIMENTAL
|
; NOTE: EXPERIMENTAL
|
||||||
; If you do not know what you are doing, do not touch this yet.
|
; If you do not know what you are doing, do not touch this yet.
|
||||||
; fsmitm_redirect_saves_to_sd = u8!0x0
|
; fsmitm_redirect_saves_to_sd = u8!0x0
|
||||||
|
; Controls whether to enable the deprecated hid mitm
|
||||||
|
; to fix compatibility with old homebrew.
|
||||||
|
; 0 = Do not enable, 1 = Enable.
|
||||||
|
; Please note this setting may be removed in a
|
||||||
|
; future release of Atmosphere.
|
||||||
|
; enable_deprecated_hid_mitm = u8!0x0
|
||||||
; Controls whether am sees system settings "DebugModeFlag" as
|
; Controls whether am sees system settings "DebugModeFlag" as
|
||||||
; enabled or disabled.
|
; enabled or disabled.
|
||||||
; 0 = Disabled (not debug mode), 1 = Enabled (debug mode)
|
; 0 = Disabled (not debug mode), 1 = Enabled (debug mode)
|
||||||
; enable_am_debug_mode = u8!0x0
|
; enable_am_debug_mode = u8!0x0
|
||||||
; Controls whether dns.mitm is enabled
|
|
||||||
; 0 = Disabled, 1 = Enabled
|
|
||||||
; enable_dns_mitm = u8!0x1
|
|
||||||
; Controls whether dns.mitm uses the default redirections in addition to
|
|
||||||
; whatever is specified in the user's hosts file.
|
|
||||||
; 0 = Disabled (use hosts file contents), 1 = Enabled (use defaults and hosts file contents)
|
|
||||||
; add_defaults_to_dns_hosts = u8!0x1
|
|
||||||
; Controls whether dns.mitm logs to the sd card for debugging
|
|
||||||
; 0 = Disabled, 1 = Enabled
|
|
||||||
; enable_dns_mitm_debug_log = u8!0x0
|
|
||||||
; Controls whether htc is enabled
|
|
||||||
; 0 = Disabled, 1 = Enabled
|
|
||||||
; enable_htc = u8!0x0
|
|
||||||
[hbloader]
|
[hbloader]
|
||||||
; Controls the size of the homebrew heap when running as applet.
|
; Controls the size of the homebrew heap when running as applet.
|
||||||
; If set to zero, all available applet memory is used as heap.
|
; If set to zero, all available applet memory is used as heap.
|
||||||
|
|||||||
@@ -5,11 +5,10 @@ Building Atmosphère is a very straightforward process that relies almost exclus
|
|||||||
+ [devkitA64](https://devkitpro.org)
|
+ [devkitA64](https://devkitpro.org)
|
||||||
+ [devkitARM](https://devkitpro.org)
|
+ [devkitARM](https://devkitpro.org)
|
||||||
+ [Python 2](https://www.python.org) (Python 3 may work as well, but this is not guaranteed)
|
+ [Python 2](https://www.python.org) (Python 3 may work as well, but this is not guaranteed)
|
||||||
+ [LZ4](https://pypi.org/project/lz4)
|
|
||||||
+ [PyCryptodome](https://pypi.org/project/pycryptodome) (optional)
|
+ [PyCryptodome](https://pypi.org/project/pycryptodome) (optional)
|
||||||
|
|
||||||
## Instructions
|
## Instructions
|
||||||
1. Follow the guide located [here](https://devkitpro.org/wiki/Getting_Started) to install and configure all the tools necessary for the build process.
|
1. Follow the guide located [here](https://devkitpro.org/wiki/Getting_Started) to install and configure all the tools necessary for the build process.
|
||||||
|
|
||||||
2. Install the following packages via (dkp-)pacman:
|
2. Install the following packages via (dkp-)pacman:
|
||||||
+ `switch-dev`
|
+ `switch-dev`
|
||||||
@@ -18,7 +17,12 @@ Building Atmosphère is a very straightforward process that relies almost exclus
|
|||||||
+ `devkitARM`
|
+ `devkitARM`
|
||||||
+ `devkitarm-rules`
|
+ `devkitarm-rules`
|
||||||
|
|
||||||
3. Install the following library via python's package manager `pip`, required by [exosphere](components/exosphere.md):
|
3. (Optional) In order to build [sept](components/sept.md) the pycryptodome PyPi package is required, which can be installed by running `pip install pycryptodome` under the installed Python environment of your choice or by installing the complete zip package to support the `make dist` recipe. This is an optional step included for advanced users who have the ability to provide the necessary encryption/signing keys themselves.
|
||||||
+ `lz4`
|
|
||||||
|
|
||||||
4. Finally, clone the Atmosphère repository and run `make` under its root directory.
|
4. It is, instead, possible to build [sept](components/sept.md) by providing previously encrypted/signed binaries distributed by official Atmosphère release packages. In order to do so, export the following variables in your current environment:
|
||||||
|
+ `SEPT_00_ENC_PATH` (must point to the `sept-secondary_00.enc` file)
|
||||||
|
+ `SEPT_01_ENC_PATH` (must point to the `sept-secondary_01.enc` file)
|
||||||
|
+ `SEPT_DEV_00_ENC_PATH` (must point to the `sept-secondary_dev_00.enc` file)
|
||||||
|
+ `SEPT_DEV_01_ENC_PATH` (must point to the `sept-secondary_dev_01.enc` file)
|
||||||
|
|
||||||
|
5. Finally, clone the Atmosphère repository and run `make` under its root directory.
|
||||||
|
|||||||
@@ -1,184 +1,4 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
## 0.20.1
|
|
||||||
+ An issue was fixed that caused severely degraded performance after wake-from-sleep on Mariko hardware.
|
|
||||||
+ This was due to Mariko MTC resulting in a frequency of 1599.999MHz instead of 1600MHz.
|
|
||||||
+ Due to this off-by-one, Nintendo's EMC management code failed to initialize/take over, and after wake from sleep RAM would be in a strange state.
|
|
||||||
+ General system stability improvements to enhance the user's experience.
|
|
||||||
## 0.20.0
|
|
||||||
+ DRAM training (MTC) was implemented for Mariko hardware, increasing RAM speed from 204MHz to 1600MHz.
|
|
||||||
+ This significantly optimizes Mariko boot speed, cutting boot time roughly in half.
|
|
||||||
+ Typical boot time reductions (measured as "select fusee" to "home menu visible"):
|
|
||||||
+ Normal (Iowa): ~35 seconds -> ~18 seconds.
|
|
||||||
+ Lite (Hoag): ~65 seconds -> ~30 seconds.
|
|
||||||
+ NOTE: Work is being started on a re-written `fusee` component, with an eye specifically towards ensuring a good boot speed.
|
|
||||||
+ With any luck, boot will be much much faster on all units (Mariko and Erista) in an upcoming release.
|
|
||||||
+ Sept was replaced, and deleted from the repository.
|
|
||||||
+ Erista units now use a custom TSEC firmware to manage key derivation.
|
|
||||||
+ For more details, contact SciresM#0524 on discord.
|
|
||||||
+ This has a number of benefits, including:
|
|
||||||
+ This greatly simplifies key derivation logic by making it consistent on all firmwares.
|
|
||||||
+ Fusee no longer accesses/uses keyblobs at all, so units which have accidentally destroyed/lost keyblobs can boot without them.
|
|
||||||
+ This greatly increases stability (sept was the biggest source of boot failures).
|
|
||||||
+ This improves boot speed (sept rebooted multiple times, performed hardware init multiple times, and was generally very slow).
|
|
||||||
+ Atmosphère build process is now much saner.
|
|
||||||
+ A number of improvements were made to the dmnt cheat engine.
|
|
||||||
+ Cheats which take in a memory region operand may now use types "2" or "3" to perform accesses relative to the alias/aslr regions, respectively.
|
|
||||||
+ Support was added for an "else" opcode in the cheat engine, to make writing certain conditional logic more natural.
|
|
||||||
+ Support was added for a cheat orchestrator homebrew (like edizon) to detach from a cheat process/set the master cheat programmatically.
|
|
||||||
+ Daybreak now provides a warning when attempting to install a firmware newer than the highest version atmosphère knows it supports.
|
|
||||||
+ To facilitate this, exosphere now exposes the supported HOS version via an extension ConfigItem.
|
|
||||||
+ A number of minor issues were fixed, including:
|
|
||||||
+ Several mesosphere debug SVC implementations were updated to reflect the semantics of the latest kernel.
|
|
||||||
+ Support was fixed for deriving BIS encryption keys on certain prototype hardware.
|
|
||||||
+ General system stability improvements to enhance the user's experience.
|
|
||||||
## 0.19.5
|
|
||||||
+ Support was added for 12.1.0.
|
|
||||||
+ LayeredFS support was added for OpenDataStorageWithProgramIndex commands.
|
|
||||||
+ Certain games using newer (7.0.0+ APIs) which include multiple programs under a single title previously could not be modified.
|
|
||||||
+ These are now supported as normal, and LayeredFS should have 100% compatibility again.
|
|
||||||
+ A number of minor issues were fixed, including:
|
|
||||||
+ The Reboot to Payload NRO was updated to allow the OS to save state prior to rebooting (thanks @AuroraWright)!
|
|
||||||
+ An issue was fixed that could cause dns.mitm to fail when games requested resolution of an empty string.
|
|
||||||
+ An issue was fixed that caused a memory leak in the erpt system module.
|
|
||||||
+ This would eventually cause a system crash after ~540 reports were generated without rebooting.
|
|
||||||
+ A number of minor improvements were made to improve mesosphere's accuracy.
|
|
||||||
+ General system stability improvements to enhance the user's experience.
|
|
||||||
## 0.19.4
|
|
||||||
+ Support was added for 12.0.3.
|
|
||||||
+ A number of minor issues were fixed, including:
|
|
||||||
+ An issue was fixed that could cause heap memory corruption when allocation was highly contended.
|
|
||||||
+ An issue was fixed that could cause sleep to fail under certain conditions.
|
|
||||||
+ An issue was fixed that could cause a scheduler slow path to be taken more often than necessary.
|
|
||||||
+ General system stability improvements to enhance the user's experience.
|
|
||||||
## 0.19.3
|
|
||||||
+ Support was added for 12.0.2.
|
|
||||||
+ A number of minor issues were fixed, including:
|
|
||||||
+ An issue was fixed in dns.mitm that caused a crash when games attempted to resolve the IP address of nullptr.
|
|
||||||
+ An issue was fixed in erpt that would cause an abort when booting without having ever booted stock previously.
|
|
||||||
+ An issue was fixed in (file-based) emummc that caused an error on system format/downloading certain games.
|
|
||||||
+ General system stability improvements to enhance the user's experience.
|
|
||||||
## 0.19.2
|
|
||||||
+ Atmosphère's components were further updated to reflect latest official behaviors as of 12.0.0.
|
|
||||||
+ Notably, `erpt` was updated to implement the new forced shutdown detection feature.
|
|
||||||
+ When a forced-shutdown occurs, an erpt_report will be generated and saved to the SD card on the next boot.
|
|
||||||
+ Atmosphere-libs was updated to use GCC 11 (latest devkitA64/devkitARM releases).
|
|
||||||
+ Initial inspections show mild-to-moderate optimizer improvements in several important places (kernel is 0x3000 smaller).
|
|
||||||
+ General system stability improvements to enhance the user's experience.
|
|
||||||
+ A number of minor issues were fixed, including:
|
|
||||||
+ A bug was fixed that caused a black screen when attempting to boot firmware versions 2.0.0-4.1.0.
|
|
||||||
+ A bug was fixed that caused sm to abort when at the session limit, rather than returning error codes.
|
|
||||||
+ A bug was fixed that allowed for resource exhaustion on 12.0.0, under certain circumstances.
|
|
||||||
+ Several issues were fixed, and usability and stability were improved.
|
|
||||||
## 0.19.1
|
|
||||||
+ An issue was fixed that caused a fatal error when using official `migration` services to transfer data between consoles.
|
|
||||||
+ An issue was fixed in `ncm` that caused an error when the OS tried to enumerate installed SD card content.
|
|
||||||
+ Several issues were fixed, and usability and stability were improved.
|
|
||||||
## 0.19.0
|
|
||||||
+ Support was added for 12.0.0.
|
|
||||||
+ `mesosphère` was updated to reflect the latest official kernel behavior.
|
|
||||||
+ `sm`, `boot2`, `pgl` were updated to reflect the latest official behaviors.
|
|
||||||
+ **Please Note**: 12.0.0 added a new protocol for IPC ("tipc"), which has been freshly reimplemented in its entirety.
|
|
||||||
+ It is possible there may be as of yet unfound issues; if there are, please send the appropriate crash reports to SciresM (SciresM#0524 on discord).
|
|
||||||
+ Homebrew which uses atmosphere extensions (including the mitm API) will need to be re-compiled in order to function on 0.19.0.
|
|
||||||
+ I apologize for this, but it's unavoidable for technical reasons. If you're affected by this and mad about it, please contact SciresM to complain.
|
|
||||||
+ `erpt` was partially updated to reflect the latest official behaviors.
|
|
||||||
+ New features were added to erpt to track the activity of running applets, and to detect when a forced shutdown occurs.
|
|
||||||
+ These behaviors have been temporarily stubbed, as they are not necessary for 12.0.0 to run (and their outputs won't be saved anywhere).
|
|
||||||
+ A future atmosphère update will implement these behaviors, in the interest of reflecting official logic as faithfully as we can.
|
|
||||||
+ Atmosphère no longer uses the /contents/ folder for its own programs.
|
|
||||||
+ Atmosphère's system modules are now bundled together in the single file "stratosphere.romfs".
|
|
||||||
+ For those working on developing for atmosphère, executables inside the /contents/ directory will be preferred to those in "stratosphere.romfs".
|
|
||||||
+ **Please Note**: In order to facilitate this change (and the desired behavior), the first time you boot after extracting a release zip, atmosphère system modules inside /contents/ will be deleted.
|
|
||||||
+ This will have no impact on user programs (it only removes programs with specific program ids).
|
|
||||||
+ Improvements were made to mesosphere, including:
|
|
||||||
+ An extension InfoType was added for getting the current process handle, without having to spawn a thread and do IPC with oneself.
|
|
||||||
+ An issue was fixed in SvcSetDebugThreadContext.
|
|
||||||
+ An issue was fixed when doing IPC with user buffers.
|
|
||||||
+ Support was fixed for toggling the custom setting `usb!usb30_force_enabled` on 9.0.0+.
|
|
||||||
+ This was broken by Nintendo's introducing a dependency that made USB a requirement to launch before custom settings are parsed.
|
|
||||||
+ Since the fix, you can now toggle the setting (as you could prior to atmosphère 0.9.4), and it will work as expected.
|
|
||||||
+ **Please Note**: Enabling USB 3.0 often severely impacts wireless communications.
|
|
||||||
+ Because of this, the setting will default to off. If you experience issues with it enabled, consider disabling it.
|
|
||||||
+ A warning was added to daybreak when resetting the console to factory settings.
|
|
||||||
+ Substantial work was completed towards atmosphere's upcoming implementation of the host target connection protocol.
|
|
||||||
+ Once completed, users will be able to interact with a Switch running atmosphère via a PC application ("Starlink") currently under development.
|
|
||||||
+ Planned eventual features for connected consoles include a gdbstub, interacting with memory (for cheat development), streaming gameplay audio and video, and accessing the Switch's SD card filesystem.
|
|
||||||
+ Switch homebrew will also have access to a (configurable and sandboxed) filesystem on the host PC, while connected.
|
|
||||||
+ Towards this end, the following was accomplished:
|
|
||||||
+ The "htc" system module was reimplemented completely.
|
|
||||||
+ The system module which provides remote access to the SD card was reimplemented completely.
|
|
||||||
+ This is currently the active focus of atmosphère's development.
|
|
||||||
+ **Please Note**: Support is not yet completed, and users are disadvised from interacting with the related settings for the time being, unless they particularly know what they're doing.
|
|
||||||
+ A number of minor issues were fixed, including:
|
|
||||||
+ A bug was fixed in `dmnt` that could cause a fatal when launching certain games with cheats active.
|
|
||||||
+ An issue was fixed that could cause an abort in `sm` when using a large number of custom system modules.
|
|
||||||
+ An issue was fixed that prevented launching gamecards on 1.0.0.
|
|
||||||
+ Minor issues were fixed in the cheat virtual machine's behavior.
|
|
||||||
+ Several issues were fixed, and usability and stability were improved.
|
|
||||||
## 0.18.1
|
|
||||||
+ A number of minor issues were fixed, including:
|
|
||||||
+ The new `dns.mitm` module added in 0.18.0 no longer fatal errors when receiving port=nullptr.
|
|
||||||
+ This fixes youtube ad-blocking, and possibly other usecases.
|
|
||||||
+ A bug was fixed that caused ams.mitm to incorrectly cache data storages.
|
|
||||||
+ This potentially broke DLC when using romfs mods, and could have caused other issues (e.g. with custom themes, and maybe other cases).
|
|
||||||
+ A bug was fixed in power state control module registration.
|
|
||||||
+ This might fix a weird edge case with system module dependencies on sleep/wake, but probably nobody should notice any differences.
|
|
||||||
+ A bug was fixed where mesosphere sometimes treated virtual core IDs as though they were physical core IDs.
|
|
||||||
+ This had zero impact, because for Switch virtual core == physical core, but it could have affected future platforms if it had remained unresolved.
|
|
||||||
+ Several issues were fixed, and usability and stability were improved.
|
|
||||||
## 0.18.0
|
|
||||||
+ A new mitm module was added (`dns.mitm`).
|
|
||||||
+ This provides a highly configurable mechanism for redirecting DNS resolution requests.
|
|
||||||
+ By default atmosphère redirects resolution requests for official telemetry servers to a loopback address.
|
|
||||||
+ Documentation on how to configure `dns.mitm` to meet your more specific needs may be found [here](https://github.com/Atmosphere-NX/Atmosphere/blob/master/docs/features/dns_mitm.md).
|
|
||||||
+ The service framework API (`sf`) was refactored to be more accurate to official logic and greatly reduce memory requirements.
|
|
||||||
+ The comparison of atmosphère module memory usage versus Nintendo's found [here](https://github.com/Atmosphere-NX/Atmosphere/wiki/Memory-Comparisons) was updated to reflect this.
|
|
||||||
+ **Please Note**: If you are a developer using the libstratosphere service APIs, some updating may be required. Contact SciresM#0524 on discord for assistance if required.
|
|
||||||
+ A number of deprecations were removed, following a general codebase cleanup:
|
|
||||||
+ The `sm` extension to not unregister services on connection close was superseded by official opt-in logic in 11.0.0, and has been removed in favor of official logic.
|
|
||||||
+ This should have zero impact on users.
|
|
||||||
+ The temporary `hid-mitm` added in 0.9.0 has finally been removed, following over a year of deprecation.
|
|
||||||
+ There shouldn't be any homebrew in use still affected by this, but the situation will be monitored.
|
|
||||||
+ If this is somehow still a real issue, an unaffiliated hid mitm sysmodule providing the same functionality can be created and released, separate from atmosphère itself.
|
|
||||||
+ Several issues were fixed, and usability and stability were improved.
|
|
||||||
## 0.17.1
|
|
||||||
+ A number of atmosphère's modules were using more memory than their Nintendo equivalent's in 0.17.0; a number of code generatio tweaks have been applied to fix this across the board.
|
|
||||||
+ A detailed comparison of atmosphère module memory usage versus Nintendo's was made and can be found [here](https://github.com/Atmosphere-NX/Atmosphere/wiki/Memory-Comparisons).
|
|
||||||
+ Several minor bugs were fixed, including:
|
|
||||||
+ A bug was fixed in mesosphère that caused games which attempt to map more memory than the Switch has to fail.
|
|
||||||
+ This affected "Piczle Lines DX 500 More Puzzles!", and possibly other games.
|
|
||||||
+ Enabling configuration to "blank" PRODINFO no longer causes a hang on Mariko devices (or any devices with newer format).
|
|
||||||
+ Several issues were fixed, and usability and stability were improved.
|
|
||||||
## 0.17.0
|
|
||||||
+ fusee was heavily rewritten in order to add support for Mariko hardware.
|
|
||||||
+ **Please Note**: Mariko hardware currently has no (and may not ever have any) software exploits; fusee works when loaded from bootloader context with the right keys in the security engine. No means of getting the system into this state is provided.
|
|
||||||
+ An issue was fixed in the way shutdown was performed on Erista hardware.
|
|
||||||
+ This fixes an issue that caused OFW to black screen on boot after power off from atmosphere without first doing a reboot.
|
|
||||||
+ This also substantially improves power drain when the system is shut off; consoles powered off from Atmosphere should now drain battery at the same reduced rate as original firmware.
|
|
||||||
+ A number of minor changes were made, including:
|
|
||||||
+ A number of inconsistencies in the build system were fixed.
|
|
||||||
+ For those building atmosphère at home, the `boot` sysmodule will no longer rebuild every time make is invoked.
|
|
||||||
+ This substantially improves build times during development iteration.
|
|
||||||
+ `sm` was updated to more accurately reflect how official code manages request deferral.
|
|
||||||
+ `mesosphère` was updated to more accurately reflect official kernel management of the trace buffer.
|
|
||||||
+ `mesosphère` was updated to improve kernel loader's logic by taking advantage of the assumption that we only boot our kernel, not Nintendo's.
|
|
||||||
+ As it has been a few months with zero reported issues, `mesosphère` is now opt-out.
|
|
||||||
+ Users who wish to begin using or continue using mesosphere should use the standard/cool kids zip ("atmosphere-").
|
|
||||||
+ Users who wish to opt-out of mesosphere should download and extract the opt-out zip ("atmosphere-WITHOUT_MESOSPHERE-").
|
|
||||||
+ Several issues were fixed, and usability and stability were improved.
|
|
||||||
## 0.16.2
|
|
||||||
+ Atmosphère release zips no longer bundle BCT.ini, instead relying on defaults in code.
|
|
||||||
+ This means atmosphere updates should no longer overwrite any user configuration at all.
|
|
||||||
+ If you wish to modify BCT.ini config, copy the template from /config_templates/ as with other configuration.
|
|
||||||
+ `pgl` and `creport` were further updated to reflect differences in official behavior in 11.0.0.
|
|
||||||
+ An issue was fixed that caused creport to be launched multiple times on process crash.
|
|
||||||
+ This fixes the "duplicate reports" issue that sometimes plagued people.
|
|
||||||
+ A new system setting (`atmosphere!enable_am_debug_mode`) configuring am to use debug mode.
|
|
||||||
+ If you are not a developer or don't see a clear use for this, leave it configured to the default (off).
|
|
||||||
+ Reboot to payload NRO was updated to fix support with certain payloads.
|
|
||||||
+ Support was fixed for atmosphere's extension to support homebrew use of new (8.0.0+) kernel mappings.
|
|
||||||
+ In particular, when running tracing debug builds of `mesosphère`, hbloader now has access to the kernel trace buffer.
|
|
||||||
+ Several issues were fixed, and usability and stability were improved.
|
|
||||||
## 0.16.1
|
## 0.16.1
|
||||||
+ Support was added for 11.0.1.
|
+ Support was added for 11.0.1.
|
||||||
+ `mesosphère` was updated to reflect the latest official kernel behavior.
|
+ `mesosphère` was updated to reflect the latest official kernel behavior.
|
||||||
@@ -187,7 +7,7 @@
|
|||||||
+ `fs` logic was refactored and cleaned up to reflect some newer sysmodule behavioral and structural changes.
|
+ `fs` logic was refactored and cleaned up to reflect some newer sysmodule behavioral and structural changes.
|
||||||
+ `exosphère` was updated to allow dynamic control of what uart port is used for logging.
|
+ `exosphère` was updated to allow dynamic control of what uart port is used for logging.
|
||||||
+ This can be controlled by editing the `log_port`, `log_baud_rate`, and `log_inverted` fields in `exosphere.ini`.
|
+ This can be controlled by editing the `log_port`, `log_baud_rate`, and `log_inverted` fields in `exosphere.ini`.
|
||||||
+ `mesosphère` was updated to improve debugging capabilities.
|
+ `mesosphère` was updated to improve debugging capabilities ().
|
||||||
+ This is still a work in progress, but developers may be interested.
|
+ This is still a work in progress, but developers may be interested.
|
||||||
+ A bug was fixed that caused `fatal` to fatal error if the fatal process was already being debugged.
|
+ A bug was fixed that caused `fatal` to fatal error if the fatal process was already being debugged.
|
||||||
+ Several issues were fixed, and usability and stability were improved.
|
+ Several issues were fixed, and usability and stability were improved.
|
||||||
|
|||||||
@@ -33,8 +33,3 @@ in settings as `#.#.#|AMS #.#.#|?` with `? = S` when running under system eMMC o
|
|||||||
### System Settings
|
### System Settings
|
||||||
set_mitm intercepts the `GetSettingsItemValueSize` and `GetSettingsItemValue` commands for all requesters.
|
set_mitm intercepts the `GetSettingsItemValueSize` and `GetSettingsItemValue` commands for all requesters.
|
||||||
It does so in order to enable user configuration of system settings, which are parsed from `/atmosphere/system_settings.ini` on boot. See [here](../../features/configurations.md) for more information on the system settings format.
|
It does so in order to enable user configuration of system settings, which are parsed from `/atmosphere/system_settings.ini` on boot. See [here](../../features/configurations.md) for more information on the system settings format.
|
||||||
|
|
||||||
## dns_mitm
|
|
||||||
dns_mitm enables intercepting requests to dns resolution services, to enable redirecting requests for specified hostnames.
|
|
||||||
|
|
||||||
For documentation, see [here](../../features/dns_mitm.md).
|
|
||||||
|
|||||||
14
docs/components/sept.md
Normal file
14
docs/components/sept.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# sept
|
||||||
|
Sept is a payload that facilitates booting Atmosphère when targeting firmware version 7.0.0+.
|
||||||
|
|
||||||
|
It consists of a primary and a secondary payload.
|
||||||
|
|
||||||
|
## sept-primary
|
||||||
|
sept-primary is essentially a stand-in for Nintendo's package1ldr, on 7.0.0+. To use it, the caller (normally fusée-secondary) loads the sept-primary binary to `0x4003F000`, loads the 7.0.0+ TSEC firmware to `0x40010F00`, and loads a signed, encrypted payload to `0x40016FE0`.
|
||||||
|
|
||||||
|
This signed, encrypted payload is normally sept-secondary.
|
||||||
|
|
||||||
|
## sept-secondary
|
||||||
|
sept-secondary is a payload that performs 7.0.0+ key derivation, and then chainloads to `sept/payload.bin`.
|
||||||
|
|
||||||
|
It is normally stored encrypted/signed. Therefore, if one wishes to build sept-secondary instead of using release builds, one must bring their own keys.
|
||||||
@@ -19,8 +19,6 @@ This behavior ensures that cheat codes are only loaded when the user would want
|
|||||||
|
|
||||||
In cases where `dmnt` has not activated the cheat manager, but the user wants to make it do so anyway, the cheat manager's service API provides a `ForceOpenCheatProcess` command that homebrew can use. This command will cause the cheat manager to try to force itself to attach to the process.
|
In cases where `dmnt` has not activated the cheat manager, but the user wants to make it do so anyway, the cheat manager's service API provides a `ForceOpenCheatProcess` command that homebrew can use. This command will cause the cheat manager to try to force itself to attach to the process.
|
||||||
|
|
||||||
In cases where `dmnt` has activated the cheat manager, but the user wants to use an alternate debugger, the cheat manager's service API provides a `ForceCloseCheatProcess` command that homebrew can use. This command will cause the cheat manager to detach itself from the process.
|
|
||||||
|
|
||||||
By default, all cheat codes listed in the loaded .txt file will be toggled on. This is configurable by the user by editing the `atmosphere!dmnt_cheats_enabled_by_default` [system setting](configurations.md).
|
By default, all cheat codes listed in the loaded .txt file will be toggled on. This is configurable by the user by editing the `atmosphere!dmnt_cheats_enabled_by_default` [system setting](configurations.md).
|
||||||
|
|
||||||
Users may use homebrew programs to toggle cheats on and off at runtime via the cheat manager's service API.
|
Users may use homebrew programs to toggle cheats on and off at runtime via the cheat manager's service API.
|
||||||
@@ -42,30 +40,30 @@ The following provides documentation of the instruction format for the virtual m
|
|||||||
|
|
||||||
Typically, instruction type is encoded in the upper nybble of the first instruction u32.
|
Typically, instruction type is encoded in the upper nybble of the first instruction u32.
|
||||||
|
|
||||||
### Code Type 0x0: Store Static Value to Memory
|
### Code Type 0: Store Static Value to Memory
|
||||||
Code type 0x0 allows writing a static value to a memory address.
|
Code type 0 allows writing a static value to a memory address.
|
||||||
|
|
||||||
#### Encoding
|
#### Encoding
|
||||||
`0TMR00AA AAAAAAAA VVVVVVVV (VVVVVVVV)`
|
`0TMR00AA AAAAAAAA VVVVVVVV (VVVVVVVV)`
|
||||||
|
|
||||||
+ T: Width of memory write (1, 2, 4, or 8 bytes).
|
+ T: Width of memory write (1, 2, 4, or 8 bytes).
|
||||||
+ M: Memory region to write to (0 = Main NSO, 1 = Heap, 2 = Alias, 3 = Aslr).
|
+ M: Memory region to write to (0 = Main NSO, 1 = Heap).
|
||||||
+ R: Register to use as an offset from memory region base.
|
+ R: Register to use as an offset from memory region base.
|
||||||
+ A: Immediate offset to use from memory region base.
|
+ A: Immediate offset to use from memory region base.
|
||||||
+ V: Value to write.
|
+ V: Value to write.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 0x1: Begin Conditional Block
|
### Code Type 1: Begin Conditional Block
|
||||||
Code type 0x1 performs a comparison of the contents of memory to a static value.
|
Code type 1 performs a comparison of the contents of memory to a static value.
|
||||||
|
|
||||||
If the condition is not met, all instructions until the appropriate End or Else conditional block terminator are skipped.
|
If the condition is not met, all instructions until the appropriate conditional block terminator are skipped.
|
||||||
|
|
||||||
#### Encoding
|
#### Encoding
|
||||||
`1TMC00AA AAAAAAAA VVVVVVVV (VVVVVVVV)`
|
`1TMC00AA AAAAAAAA VVVVVVVV (VVVVVVVV)`
|
||||||
|
|
||||||
+ T: Width of memory write (1, 2, 4, or 8 bytes).
|
+ T: Width of memory write (1, 2, 4, or 8 bytes).
|
||||||
+ M: Memory region to write to (0 = Main NSO, 1 = Heap, 2 = Alias, 3 = Aslr).
|
+ M: Memory region to write to (0 = Main NSO, 1 = Heap).
|
||||||
+ C: Condition to use, see below.
|
+ C: Condition to use, see below.
|
||||||
+ A: Immediate offset to use from memory region base.
|
+ A: Immediate offset to use from memory region base.
|
||||||
+ V: Value to compare to.
|
+ V: Value to compare to.
|
||||||
@@ -80,20 +78,16 @@ If the condition is not met, all instructions until the appropriate End or Else
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 0x2: End Conditional Block
|
### Code Type 2: End Conditional Block
|
||||||
Code type 0x2 marks the end of a conditional block (started by Code Type 0x1 or Code Type 0x8).
|
Code type 2 marks the end of a conditional block (started by Code Type 1 or Code Type 8).
|
||||||
|
|
||||||
When an Else is executed, all instructions until the appropriate End conditional block terminator are skipped.
|
|
||||||
|
|
||||||
#### Encoding
|
#### Encoding
|
||||||
`2X000000`
|
`20000000`
|
||||||
|
|
||||||
+ X: End type (0 = End, 1 = Else).
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 0x3: Start/End Loop
|
### Code Type 3: Start/End Loop
|
||||||
Code type 0x3 allows for iterating in a loop a fixed number of times.
|
Code type 3 allows for iterating in a loop a fixed number of times.
|
||||||
|
|
||||||
#### Start Loop Encoding
|
#### Start Loop Encoding
|
||||||
`300R0000 VVVVVVVV`
|
`300R0000 VVVVVVVV`
|
||||||
@@ -108,8 +102,8 @@ Code type 0x3 allows for iterating in a loop a fixed number of times.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 0x4: Load Register with Static Value
|
### Code Type 4: Load Register with Static Value
|
||||||
Code type 0x4 allows setting a register to a constant value.
|
Code type 4 allows setting a register to a constant value.
|
||||||
|
|
||||||
#### Encoding
|
#### Encoding
|
||||||
`400R0000 VVVVVVVV VVVVVVVV`
|
`400R0000 VVVVVVVV VVVVVVVV`
|
||||||
@@ -119,28 +113,29 @@ Code type 0x4 allows setting a register to a constant value.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 0x5: Load Register with Memory Value
|
### Code Type 5: Load Register with Memory Value
|
||||||
Code type 0x5 allows loading a value from memory into a register, either using a fixed address or by dereferencing the destination register.
|
Code type 5 allows loading a value from memory into a register, either using a fixed address or by dereferencing the destination register.
|
||||||
|
|
||||||
#### Load From Fixed Address Encoding
|
#### Load From Fixed Address Encoding
|
||||||
`5TMR00AA AAAAAAAA`
|
`5TMR00AA AAAAAAAA`
|
||||||
|
|
||||||
+ T: Width of memory read (1, 2, 4, or 8 bytes).
|
+ T: Width of memory read (1, 2, 4, or 8 bytes).
|
||||||
+ M: Memory region to write to (0 = Main NSO, 1 = Heap, 2 = Alias, 3 = Aslr).
|
+ M: Memory region to write to (0 = Main NSO, 1 = Heap).
|
||||||
+ R: Register to load value into.
|
+ R: Register to load value into.
|
||||||
+ A: Immediate offset to use from memory region base.
|
+ A: Immediate offset to use from memory region base.
|
||||||
|
|
||||||
#### Load from Register Address Encoding
|
#### Load from Register Address Encoding
|
||||||
`5T0R10AA AAAAAAAA`
|
`5TMR10AA AAAAAAAA`
|
||||||
|
|
||||||
+ T: Width of memory read (1, 2, 4, or 8 bytes).
|
+ T: Width of memory read (1, 2, 4, or 8 bytes).
|
||||||
+ R: Register to load value into. (This register is also used as the base memory address).
|
+ M: Memory region to write to (0 = Main NSO, 1 = Heap).
|
||||||
|
+ R: Register to load value into.
|
||||||
+ A: Immediate offset to use from register R.
|
+ A: Immediate offset to use from register R.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 0x6: Store Static Value to Register Memory Address
|
### Code Type 6: Store Static Value to Register Memory Address
|
||||||
Code type 0x6 allows writing a fixed value to a memory address specified by a register.
|
Code type 6 allows writing a fixed value to a memory address specified by a register.
|
||||||
|
|
||||||
#### Encoding
|
#### Encoding
|
||||||
`6T0RIor0 VVVVVVVV VVVVVVVV`
|
`6T0RIor0 VVVVVVVV VVVVVVVV`
|
||||||
@@ -154,10 +149,10 @@ Code type 0x6 allows writing a fixed value to a memory address specified by a re
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 0x7: Legacy Arithmetic
|
### Code Type 7: Legacy Arithmetic
|
||||||
Code type 0x7 allows performing arithmetic on registers.
|
Code type 7 allows performing arithmetic on registers.
|
||||||
|
|
||||||
However, it has been deprecated by Code type 0x9, and is only kept for backwards compatibility.
|
However, it has been deprecated by Code type 9, and is only kept for backwards compatibility.
|
||||||
|
|
||||||
#### Encoding
|
#### Encoding
|
||||||
`7T0RC000 VVVVVVVV`
|
`7T0RC000 VVVVVVVV`
|
||||||
@@ -176,8 +171,8 @@ However, it has been deprecated by Code type 0x9, and is only kept for backwards
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 0x8: Begin Keypress Conditional Block
|
### Code Type 8: Begin Keypress Conditional Block
|
||||||
Code type 0x8 enters or skips a conditional block based on whether a key combination is pressed.
|
Code type 8 enters or skips a conditional block based on whether a key combination is pressed.
|
||||||
|
|
||||||
#### Encoding
|
#### Encoding
|
||||||
`8kkkkkkk`
|
`8kkkkkkk`
|
||||||
@@ -218,8 +213,8 @@ Note: This is the direct output of `hidKeysDown()`.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 0x9: Perform Arithmetic
|
### Code Type 9: Perform Arithmetic
|
||||||
Code type 0x9 allows performing arithmetic on registers.
|
Code type 9 allows performing arithmetic on registers.
|
||||||
|
|
||||||
#### Register Arithmetic Encoding
|
#### Register Arithmetic Encoding
|
||||||
`9TCRS0s0`
|
`9TCRS0s0`
|
||||||
@@ -253,8 +248,8 @@ Code type 0x9 allows performing arithmetic on registers.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 0xA: Store Register to Memory Address
|
### Code Type 10: Store Register to Memory Address
|
||||||
Code type 0xA allows writing a register to memory.
|
Code type 10 allows writing a register to memory.
|
||||||
|
|
||||||
#### Encoding
|
#### Encoding
|
||||||
`ATSRIOxa (aaaaaaaa)`
|
`ATSRIOxa (aaaaaaaa)`
|
||||||
@@ -277,13 +272,13 @@ Code type 0xA allows writing a register to memory.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 0xB: Reserved
|
### Code Type 11: Reserved
|
||||||
Code Type 0xB is currently reserved for future use.
|
Code Type 11 is currently reserved for future use.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Code Type 0xC-0xF: Extended-Width Instruction
|
### Code Type 12-15: Extended-Width Instruction
|
||||||
Code Types 0xC-0xF signal to the VM to treat the upper two nybbles of the first dword as instruction type, instead of just the upper nybble.
|
Code Types 12-15 signal to the VM to treat the upper two nybbles of the first dword as instruction type, instead of just the upper nybble.
|
||||||
|
|
||||||
This reserves an additional 64 opcodes for future use.
|
This reserves an additional 64 opcodes for future use.
|
||||||
|
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
# DNS.mitm
|
|
||||||
As of 0.18.0, atmosphère provides a mechanism for redirecting DNS resolution requests.
|
|
||||||
|
|
||||||
By default, atmosphère redirects resolution requests for official telemetry servers, redirecting them to a loopback address.
|
|
||||||
|
|
||||||
## Hosts files
|
|
||||||
|
|
||||||
DNS.mitm can be configured through the usage of a slightly-extended `hosts` file format, which is parsed only once on system startup.
|
|
||||||
|
|
||||||
In particular, hosts files parsed by DNS.mitm have the following extensions to the usual format:
|
|
||||||
+ `*` is treated as a wildcard character, matching any collection of 0 or more characters wherever it occurs in a hostname.
|
|
||||||
+ `%` is treated as a stand-in for the value of `nsd!environment_identifier`. This is always `lp1`, on production devices.
|
|
||||||
|
|
||||||
If multiple entries in a host file match a domain, the last-defined match is used.
|
|
||||||
|
|
||||||
Please note that homebrew may trigger a hosts file re-parse by sending the extension IPC command 65000 ("AtmosphereReloadHostsFile") to a connected `sfdnsres` session.
|
|
||||||
|
|
||||||
### Hosts file selection
|
|
||||||
|
|
||||||
Atmosphère will try to read hosts from the following file paths, in order, stopping once it successfully performs a file read:
|
|
||||||
|
|
||||||
+ (emummc only) `/atmosphere/hosts/emummc_%04lx.txt`, formatted with the emummc's id number (see `emummc.ini`).
|
|
||||||
+ (emummc only) `/atmosphere/hosts/emummc.txt`.
|
|
||||||
+ (sysmmc only) `/atmosphere/hosts/sysmmc.txt`.
|
|
||||||
+ `/atmosphere/hosts/default.txt`
|
|
||||||
|
|
||||||
If `/atmosphere/hosts/default.txt` does not exist, atmosphère will create it to contain the defaults.
|
|
||||||
|
|
||||||
### Atmosphère defaults
|
|
||||||
|
|
||||||
By default, atmosphère's default redirections are parsed **in addition to** the contents of the loaded hosts file.
|
|
||||||
|
|
||||||
This is equivalent to thinking of the loaded hosts file as having the atmosphère defaults prepended to it.
|
|
||||||
|
|
||||||
This setting is considered desirable, because it minimizes the telemetry risks if a user forgets to update a custom hosts file on a system update which changes the telemetry servers.
|
|
||||||
|
|
||||||
This behavior can be opted-out from by setting `atmosphere!add_defaults_to_dns_hosts = u8!0x0` in `system_settings.ini`.
|
|
||||||
|
|
||||||
The current default redirections are:
|
|
||||||
|
|
||||||
```
|
|
||||||
# Nintendo telemetry servers
|
|
||||||
127.0.0.1 receive-%.dg.srv.nintendo.net receive-%.er.srv.nintendo.net
|
|
||||||
```
|
|
||||||
|
|
||||||
## Debugging
|
|
||||||
|
|
||||||
On startup (or on hosts file re-parse), DNS.mitm will log both what hosts file it selected and the contents of all redirections it parses to `/atmosphere/logs/dns_mitm_startup.log`.
|
|
||||||
|
|
||||||
In addition, if the user sets `atmosphere!enable_dns_mitm_debug_log = u8!0x1` in `system_settings.ini`, DNS.mitm will log all requests to GetHostByName/GetAddrInfo to `/atmosphere/logs/dns_mitm_debug.log`. All redirections will be noted when they occur.
|
|
||||||
|
|
||||||
## Opting-out of DNS.mitm entirely
|
|
||||||
If you wish to disable DNS.mitm entirely, `system_settings.ini` can be edited to set `atmosphere!enable_dns_mitm = u8!0x0`.
|
|
||||||
@@ -12,6 +12,7 @@ Atmosphère provides six core components, mimicking to some degree the various l
|
|||||||
|
|
||||||
Additionally, Atmosphère also provides the following secondary components:
|
Additionally, Atmosphère also provides the following secondary components:
|
||||||
+ [emummc](components/emummc.md)
|
+ [emummc](components/emummc.md)
|
||||||
|
+ [sept](components/sept.md)
|
||||||
+ [libraries](components/libraries.md)
|
+ [libraries](components/libraries.md)
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|||||||
@@ -1,32 +1,42 @@
|
|||||||
# Planned Features
|
# Planned Features
|
||||||
atmosphère has a number of features that are either works-in-progress or planned. Please note that while time-estimates are given, they are loose, and things may be completed sooner or later than advertised.
|
atmosphère has a number of features that are either works-in-progress or planned. Please note that while time-estimates are given, they are loose, and things may be completed sooner or later than advertised.
|
||||||
|
|
||||||
The following descriptions were last updated on January 14th, 2021
|
The following descriptions were last updated on July 7th, 2020.
|
||||||
|
|
||||||
|
## ams-on-mariko
|
||||||
|
* **Description**: Atmosphere cannot run as-is on Mariko hardware. A large number of changes are needed in many components. Although secure monitor support is complete in exosphere, additional work is needed on the bootloader and stratosphere sides as well. Mariko support will also require further design thought; atmosphere's debugging design heavily relies on reboot-to-payload and (more generally) the ability to perform warmboot bootrom hax at will. This is not possible on Mariko, and will require a new design/software support for whatever solution is chosen.
|
||||||
|
* **Development Status**: Planned.
|
||||||
|
* **Estimated Time**: Summer 2020
|
||||||
|
|
||||||
|
## settings reimplementation
|
||||||
|
* **Description**: A planned reimplementation of the settings system module, and with it a removal of the settings mitm. This will greatly simplify atmosphère's boot process, and will allow much more flexible control over the various system settings.
|
||||||
|
* **Development Status**: Undergoing research/initial development by Adubbz.
|
||||||
|
* **Estimated Time**: Mid 2020
|
||||||
|
|
||||||
|
## mesosphere
|
||||||
|
* **Description**: mesosphère is a reimplementation of the Horizon operating system's Kernel. It aims to provide an open-source reference for Nintendo's code.
|
||||||
|
* **Development Status**: Under active development by SciresM.
|
||||||
|
* **Estimated Time**: Mid-to-Late 2020
|
||||||
|
|
||||||
## tma reimplementation
|
## tma reimplementation
|
||||||
* **Description** tma ("target manager agent") is a system module that manages communication between the Switch and a client PC. Atmosphere's implementation will allow homebrew on the switch to communicate with a connected PC to do various operations such as exchanging data or interacting with files. It will also serve as the communicator for Atmosphère's planned debugger. This will also include PC-side software for interacting with the Switch.
|
* **Description** tma ("target manager agent") is a system module that manages communication between the Switch and a client PC. Atmosphere's implementation will allow homebrew on the switch to communicate with a connected PC to do various operations such as exchanging data or interacting with files. It will also serve as the communicator for Atmosphère's planned debugger. This will also include PC-side software for interacting with the Switch.
|
||||||
* **Development Status**: Planned. Switch-side code is fully implemented but needs heavy refactoring/rebasing, as the code was originally authored in 2018.
|
* **Development Status**: Planned. Switch-side code is fully implemented but needs heavy refactoring/rebasing, as the code was originally authored in 2018.
|
||||||
* **Estimated Time**: 2021-2022.
|
* **Estimated Time**: Late 2020-2021.
|
||||||
|
|
||||||
## dmnt.gen2 reimplementation
|
## dmnt.gen2 reimplementation
|
||||||
* **Description**: A reimplementation of the Switch's debug monitor, dmnt will provide an interface for debugging applications or system modules running on the Switch. This will include a gdbstub for debugging actively-running system components or applications.
|
* **Description**: A reimplementation of the Switch's debug monitor, dmnt will provide an interface for debugging applications or system modules running on the Switch. This will include a gdbstub for debugging actively-running system components or applications.
|
||||||
* **Development Status**: Planned
|
* **Development Status**: Planned
|
||||||
* **Estimated Time**: 2021-2022
|
* **Estimated Time**: 2021
|
||||||
|
|
||||||
## fs reimplementation
|
## fs reimplementation
|
||||||
* **Description**: Following mesosphère's completion, atmosphère will have reimplemented all components of the BootImagePackage firmware except for the filesystem services system module. Reimplementing fs will allow for fixing Nintendo bugs (such as corruption when using exFAT filesystems and encoding inconsistencies with UTF-8 and Shift-JIS).
|
* **Description**: Following mesosphère's completion, atmosphère will have reimplemented all components of the BootImagePackage firmware except for the filesystem services system module. Reimplementing fs will allow for fixing Nintendo bugs (such as corruption when using exFAT filesystems and encoding inconsistencies with UTF-8 and Shift-JIS).
|
||||||
* **Development Status**: Planned.
|
* **Development Status**: Planned.
|
||||||
* **Estimated Time**: 2021-2022.
|
* **Estimated Time**: 2021-2022.
|
||||||
|
|
||||||
## settings reimplementation
|
|
||||||
* **Description**: A planned reimplementation of the settings system module, and with it a removal of the settings mitm. This will greatly simplify atmosphère's boot process, and will allow much more flexible control over the various system settings.
|
|
||||||
* **Development Status**: Pending development by Adubbz.
|
|
||||||
* **Estimated Time**: Unclear, pending developer availability.
|
|
||||||
|
|
||||||
## thermosphère
|
## thermosphère
|
||||||
* **Description**: A general-purpose hypervisor, thermosphère will enable the virtualization of the Switch's operating system; this is planned to enable debugging of the Switch's kernel.
|
* **Description**: A general-purpose hypervisor, thermosphère will enable the virtualization of the Switch's operating system; this is planned to enable debugging of the Switch's kernel.
|
||||||
* **Development Status**: Pending development by TuxSH.
|
* **Development Status**: Under semi-active development by TuxSH.
|
||||||
* **Estimated Time**: Unclear, pending developer availability.
|
* **Estimated Time**: 2020-2021.
|
||||||
|
|
||||||
## other planned features
|
## other planned features
|
||||||
* **Description**: General system stability improvements to enhance the user's experience.
|
* **Description**: General system stability improvements to enhance the user's experience.
|
||||||
@@ -49,12 +59,4 @@ Please note that this is not an exhaustive list of features present in atmosphè
|
|||||||
|
|
||||||
## exosphere re-write
|
## exosphere re-write
|
||||||
* **Description**: exosphère, atmosphère's reimplementation of Horizon's Secure Monitor, was the first component authored for the project in early 2018. It is written in C, and in a style very different from the rest of atmosphère's code. In addition, exosphère was written to conform to constraints that no longer apply in an environment where it is not launched from the web browser, and where using a custom firmware image to orchestrate wake-from-sleep is possible. exosphère currently uses all but 1 KB of the space available to it, putting it at risk of breaking as future firmware updates are supported. A re-write will solve these issues.
|
* **Description**: exosphère, atmosphère's reimplementation of Horizon's Secure Monitor, was the first component authored for the project in early 2018. It is written in C, and in a style very different from the rest of atmosphère's code. In addition, exosphère was written to conform to constraints that no longer apply in an environment where it is not launched from the web browser, and where using a custom firmware image to orchestrate wake-from-sleep is possible. exosphère currently uses all but 1 KB of the space available to it, putting it at risk of breaking as future firmware updates are supported. A re-write will solve these issues.
|
||||||
* **Completion Time**: June 2020
|
* **Completion Time**: June 2020
|
||||||
|
|
||||||
## mesosphere
|
|
||||||
* **Description**: mesosphère is a reimplementation of the Horizon operating system's Kernel. It aims to provide an open-source reference for Nintendo's code.
|
|
||||||
* **Estimated Time**: September 2020
|
|
||||||
|
|
||||||
## ams-on-mariko
|
|
||||||
* **Description**: Atmosphere cannot run as-is on Mariko hardware. A large number of changes are needed in many components. Although secure monitor support is complete in exosphere, additional work is needed on the bootloader and stratosphere sides as well. Mariko support will also require further design thought; atmosphere's debugging design heavily relies on reboot-to-payload and (more generally) the ability to perform warmboot bootrom hax at will. This is not possible on Mariko, and will require a new design/software support for whatever solution is chosen.
|
|
||||||
* **Completion Time**: January 2021
|
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
[subrepo]
|
[subrepo]
|
||||||
remote = https://github.com/m4xw/emuMMC
|
remote = https://github.com/m4xw/emuMMC
|
||||||
branch = develop
|
branch = develop
|
||||||
commit = cbc294c390ed73bb281bc1028a8899c053427112
|
commit = 5eed18eb527bbaa63aee5323c26de5b0cca6d28e
|
||||||
parent = 38f9a76ba028995ed3274da3a45b0254f09d1f59
|
parent = 021b29d2dbc8ed0469bc822393e58c9f0d174d57
|
||||||
method = rebase
|
method = rebase
|
||||||
cmdver = 0.4.1
|
cmdver = 0.4.1
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ CFLAGS += $(INCLUDE) -D__SWITCH__
|
|||||||
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++17
|
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++17
|
||||||
|
|
||||||
ASFLAGS := -g $(ARCH)
|
ASFLAGS := -g $(ARCH)
|
||||||
LDFLAGS = -specs=$(EMUMMCDIR)/emummc.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
|
LDFLAGS = -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
|
||||||
|
|
||||||
ifneq ($(BUILD),$(notdir $(CURDIR)))
|
ifneq ($(BUILD),$(notdir $(CURDIR)))
|
||||||
|
|
||||||
|
|||||||
201
emummc/emummc.ld
201
emummc/emummc.ld
@@ -1,201 +0,0 @@
|
|||||||
OUTPUT_ARCH(aarch64)
|
|
||||||
ENTRY(_start)
|
|
||||||
|
|
||||||
PHDRS
|
|
||||||
{
|
|
||||||
code PT_LOAD FLAGS(5) /* Read | Execute */;
|
|
||||||
rodata PT_LOAD FLAGS(4) /* Read */;
|
|
||||||
data PT_LOAD FLAGS(6) /* Read | Write */;
|
|
||||||
dyn PT_DYNAMIC;
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
/* =========== CODE section =========== */
|
|
||||||
PROVIDE(__start__ = 0x0);
|
|
||||||
. = __start__;
|
|
||||||
__code_start = . ;
|
|
||||||
|
|
||||||
.crt0 :
|
|
||||||
{
|
|
||||||
KEEP (*(.crt0))
|
|
||||||
. = ALIGN(8);
|
|
||||||
} :code
|
|
||||||
|
|
||||||
.init :
|
|
||||||
{
|
|
||||||
KEEP( *(.init) )
|
|
||||||
. = ALIGN(8);
|
|
||||||
} :code
|
|
||||||
|
|
||||||
.plt :
|
|
||||||
{
|
|
||||||
*(.plt)
|
|
||||||
*(.iplt)
|
|
||||||
. = ALIGN(8);
|
|
||||||
} :code
|
|
||||||
|
|
||||||
.text :
|
|
||||||
{
|
|
||||||
*(.text.unlikely .text.*_unlikely .text.unlikely.*)
|
|
||||||
*(.text.exit .text.exit.*)
|
|
||||||
*(.text.startup .text.startup.*)
|
|
||||||
*(.text.hot .text.hot.*)
|
|
||||||
*(.text .stub .text.* .gnu.linkonce.t.*)
|
|
||||||
. = ALIGN(8);
|
|
||||||
} :code
|
|
||||||
|
|
||||||
.fini :
|
|
||||||
{
|
|
||||||
KEEP( *(.fini) )
|
|
||||||
. = ALIGN(8);
|
|
||||||
} :code
|
|
||||||
|
|
||||||
/* =========== RODATA section =========== */
|
|
||||||
. = ALIGN(0x1000);
|
|
||||||
__rodata_start = . ;
|
|
||||||
|
|
||||||
.nx-module-name : { KEEP (*(.nx-module-name)) } :rodata
|
|
||||||
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
*(.rodata .rodata.* .gnu.linkonce.r.*)
|
|
||||||
. = ALIGN(8);
|
|
||||||
} :rodata
|
|
||||||
|
|
||||||
.eh_frame_hdr : { __eh_frame_hdr_start = .; *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) __eh_frame_hdr_end = .; } :rodata
|
|
||||||
.eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } :rodata
|
|
||||||
.gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } :rodata
|
|
||||||
.gnu_extab : ONLY_IF_RO { *(.gnu_extab*) } : rodata
|
|
||||||
|
|
||||||
.dynamic : { *(.dynamic) } :rodata :dyn
|
|
||||||
.dynsym : { *(.dynsym) } :rodata
|
|
||||||
.dynstr : { *(.dynstr) } :rodata
|
|
||||||
.rela.dyn : { *(.rela.*) } :rodata
|
|
||||||
.interp : { *(.interp) } :rodata
|
|
||||||
.hash : { *(.hash) } :rodata
|
|
||||||
.gnu.hash : { *(.gnu.hash) } :rodata
|
|
||||||
.gnu.version : { *(.gnu.version) } :rodata
|
|
||||||
.gnu.version_d : { *(.gnu.version_d) } :rodata
|
|
||||||
.gnu.version_r : { *(.gnu.version_r) } :rodata
|
|
||||||
.note.gnu.build-id : { *(.note.gnu.build-id) } :rodata
|
|
||||||
|
|
||||||
/* =========== DATA section =========== */
|
|
||||||
. = ALIGN(0x1000);
|
|
||||||
__data_start = . ;
|
|
||||||
|
|
||||||
.eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) *(.eh_frame.*) } :data
|
|
||||||
.gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } :data
|
|
||||||
.gnu_extab : ONLY_IF_RW { *(.gnu_extab*) } : data
|
|
||||||
.exception_ranges : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) } :data
|
|
||||||
|
|
||||||
.tdata ALIGN(8) :
|
|
||||||
{
|
|
||||||
__tdata_lma = .;
|
|
||||||
*(.tdata .tdata.* .gnu.linkonce.td.*)
|
|
||||||
. = ALIGN(8);
|
|
||||||
__tdata_lma_end = .;
|
|
||||||
} :data
|
|
||||||
|
|
||||||
.tbss ALIGN(8) :
|
|
||||||
{
|
|
||||||
*(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon)
|
|
||||||
. = ALIGN(8);
|
|
||||||
} :data
|
|
||||||
|
|
||||||
.preinit_array ALIGN(8) :
|
|
||||||
{
|
|
||||||
PROVIDE (__preinit_array_start = .);
|
|
||||||
KEEP (*(.preinit_array))
|
|
||||||
PROVIDE (__preinit_array_end = .);
|
|
||||||
} :data
|
|
||||||
|
|
||||||
.init_array ALIGN(8) :
|
|
||||||
{
|
|
||||||
PROVIDE (__init_array_start = .);
|
|
||||||
KEEP( *(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)) )
|
|
||||||
KEEP( *(.init_array .ctors) )
|
|
||||||
PROVIDE (__init_array_end = .);
|
|
||||||
} :data
|
|
||||||
|
|
||||||
.fini_array ALIGN(8) :
|
|
||||||
{
|
|
||||||
PROVIDE (__fini_array_start = .);
|
|
||||||
KEEP( *(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)) )
|
|
||||||
KEEP( *(.fini_array .dtors) )
|
|
||||||
PROVIDE (__fini_array_end = .);
|
|
||||||
} :data
|
|
||||||
|
|
||||||
__got_start__ = .;
|
|
||||||
|
|
||||||
.got : { *(.got) *(.igot) } :data
|
|
||||||
.got.plt : { *(.got.plt) *(.igot.plt) } :data
|
|
||||||
|
|
||||||
__got_end__ = .;
|
|
||||||
|
|
||||||
.data ALIGN(8) :
|
|
||||||
{
|
|
||||||
*(.data .data.* .gnu.linkonce.d.*)
|
|
||||||
SORT(CONSTRUCTORS)
|
|
||||||
} :data
|
|
||||||
|
|
||||||
__bss_start__ = .;
|
|
||||||
.bss ALIGN(8) :
|
|
||||||
{
|
|
||||||
*(.dynbss)
|
|
||||||
*(.bss .bss.* .gnu.linkonce.b.*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN(8);
|
|
||||||
|
|
||||||
/* Reserve space for the TLS segment of the main thread */
|
|
||||||
__tls_start = .;
|
|
||||||
. += + SIZEOF(.tdata) + SIZEOF(.tbss);
|
|
||||||
__tls_end = .;
|
|
||||||
} : data
|
|
||||||
__bss_end__ = .;
|
|
||||||
|
|
||||||
__end__ = ABSOLUTE(.) ;
|
|
||||||
|
|
||||||
. = ALIGN(0x1000);
|
|
||||||
__argdata__ = ABSOLUTE(.) ;
|
|
||||||
|
|
||||||
/* ==================
|
|
||||||
==== Metadata ====
|
|
||||||
================== */
|
|
||||||
|
|
||||||
/* Discard sections that difficult post-processing */
|
|
||||||
/DISCARD/ : { *(.group .comment .note) }
|
|
||||||
|
|
||||||
/* Stabs debugging sections. */
|
|
||||||
.stab 0 : { *(.stab) }
|
|
||||||
.stabstr 0 : { *(.stabstr) }
|
|
||||||
.stab.excl 0 : { *(.stab.excl) }
|
|
||||||
.stab.exclstr 0 : { *(.stab.exclstr) }
|
|
||||||
.stab.index 0 : { *(.stab.index) }
|
|
||||||
.stab.indexstr 0 : { *(.stab.indexstr) }
|
|
||||||
|
|
||||||
/* DWARF debug sections.
|
|
||||||
Symbols in the DWARF debugging sections are relative to the beginning
|
|
||||||
of the section so we begin them at 0. */
|
|
||||||
|
|
||||||
/* DWARF 1 */
|
|
||||||
.debug 0 : { *(.debug) }
|
|
||||||
.line 0 : { *(.line) }
|
|
||||||
|
|
||||||
/* GNU DWARF 1 extensions */
|
|
||||||
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
|
||||||
.debug_sfnames 0 : { *(.debug_sfnames) }
|
|
||||||
|
|
||||||
/* DWARF 1.1 and DWARF 2 */
|
|
||||||
.debug_aranges 0 : { *(.debug_aranges) }
|
|
||||||
.debug_pubnames 0 : { *(.debug_pubnames) }
|
|
||||||
|
|
||||||
/* DWARF 2 */
|
|
||||||
.debug_info 0 : { *(.debug_info) }
|
|
||||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
|
||||||
.debug_line 0 : { *(.debug_line) }
|
|
||||||
.debug_frame 0 : { *(.debug_frame) }
|
|
||||||
.debug_str 0 : { *(.debug_str) }
|
|
||||||
.debug_loc 0 : { *(.debug_loc) }
|
|
||||||
.debug_macinfo 0 : { *(.debug_macinfo) }
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
%rename link old_link
|
|
||||||
|
|
||||||
*link:
|
|
||||||
%(old_link) -T %:getenv(TOPDIR /emummc.ld) -pie --no-dynamic-linker --spare-dynamic-tags=0 --gc-sections -z text -z nodynamic-undefined-weak --build-id=sha1 --nx-module-name
|
|
||||||
|
|
||||||
*startfile:
|
|
||||||
crti%O%s crtbegin%O%s
|
|
||||||
|
|
||||||
@@ -51,10 +51,6 @@
|
|||||||
#include "offsets/1020_exfat.h"
|
#include "offsets/1020_exfat.h"
|
||||||
#include "offsets/1100.h"
|
#include "offsets/1100.h"
|
||||||
#include "offsets/1100_exfat.h"
|
#include "offsets/1100_exfat.h"
|
||||||
#include "offsets/1200.h"
|
|
||||||
#include "offsets/1200_exfat.h"
|
|
||||||
#include "offsets/1203.h"
|
|
||||||
#include "offsets/1203_exfat.h"
|
|
||||||
#include "../utils/fatal.h"
|
#include "../utils/fatal.h"
|
||||||
|
|
||||||
#define GET_OFFSET_STRUCT_NAME(vers) g_offsets##vers
|
#define GET_OFFSET_STRUCT_NAME(vers) g_offsets##vers
|
||||||
@@ -117,10 +113,6 @@ DEFINE_OFFSET_STRUCT(_1020);
|
|||||||
DEFINE_OFFSET_STRUCT(_1020_EXFAT);
|
DEFINE_OFFSET_STRUCT(_1020_EXFAT);
|
||||||
DEFINE_OFFSET_STRUCT(_1100);
|
DEFINE_OFFSET_STRUCT(_1100);
|
||||||
DEFINE_OFFSET_STRUCT(_1100_EXFAT);
|
DEFINE_OFFSET_STRUCT(_1100_EXFAT);
|
||||||
DEFINE_OFFSET_STRUCT(_1200);
|
|
||||||
DEFINE_OFFSET_STRUCT(_1200_EXFAT);
|
|
||||||
DEFINE_OFFSET_STRUCT(_1203);
|
|
||||||
DEFINE_OFFSET_STRUCT(_1203_EXFAT);
|
|
||||||
|
|
||||||
const fs_offsets_t *get_fs_offsets(enum FS_VER version) {
|
const fs_offsets_t *get_fs_offsets(enum FS_VER version) {
|
||||||
switch (version) {
|
switch (version) {
|
||||||
@@ -194,14 +186,6 @@ const fs_offsets_t *get_fs_offsets(enum FS_VER version) {
|
|||||||
return &(GET_OFFSET_STRUCT_NAME(_1100));
|
return &(GET_OFFSET_STRUCT_NAME(_1100));
|
||||||
case FS_VER_11_0_0_EXFAT:
|
case FS_VER_11_0_0_EXFAT:
|
||||||
return &(GET_OFFSET_STRUCT_NAME(_1100_EXFAT));
|
return &(GET_OFFSET_STRUCT_NAME(_1100_EXFAT));
|
||||||
case FS_VER_12_0_0:
|
|
||||||
return &(GET_OFFSET_STRUCT_NAME(_1200));
|
|
||||||
case FS_VER_12_0_0_EXFAT:
|
|
||||||
return &(GET_OFFSET_STRUCT_NAME(_1200_EXFAT));
|
|
||||||
case FS_VER_12_0_3:
|
|
||||||
return &(GET_OFFSET_STRUCT_NAME(_1203));
|
|
||||||
case FS_VER_12_0_3_EXFAT:
|
|
||||||
return &(GET_OFFSET_STRUCT_NAME(_1203_EXFAT));
|
|
||||||
default:
|
default:
|
||||||
fatal_abort(Fatal_UnknownVersion);
|
fatal_abort(Fatal_UnknownVersion);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,12 +74,6 @@ enum FS_VER
|
|||||||
FS_VER_11_0_0,
|
FS_VER_11_0_0,
|
||||||
FS_VER_11_0_0_EXFAT,
|
FS_VER_11_0_0_EXFAT,
|
||||||
|
|
||||||
FS_VER_12_0_0,
|
|
||||||
FS_VER_12_0_0_EXFAT,
|
|
||||||
|
|
||||||
FS_VER_12_0_3,
|
|
||||||
FS_VER_12_0_3_EXFAT,
|
|
||||||
|
|
||||||
FS_VER_MAX,
|
FS_VER_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
|
||||||
* Copyright (c) 2019 Atmosphere-NX
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#ifndef __FS_1200_H__
|
|
||||||
#define __FS_1200_H__
|
|
||||||
|
|
||||||
// Accessor vtable getters
|
|
||||||
#define FS_OFFSET_1200_SDMMC_ACCESSOR_GC 0x154FD0
|
|
||||||
#define FS_OFFSET_1200_SDMMC_ACCESSOR_SD 0x156DE0
|
|
||||||
#define FS_OFFSET_1200_SDMMC_ACCESSOR_NAND 0x155500
|
|
||||||
|
|
||||||
// Hooks
|
|
||||||
#define FS_OFFSET_1200_SDMMC_WRAPPER_READ 0x150970
|
|
||||||
#define FS_OFFSET_1200_SDMMC_WRAPPER_WRITE 0x150A30
|
|
||||||
#define FS_OFFSET_1200_RTLD 0x688
|
|
||||||
#define FS_OFFSET_1200_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
|
||||||
|
|
||||||
#define FS_OFFSET_1200_CLKRST_SET_MIN_V_CLK_RATE 0x14FCC0
|
|
||||||
|
|
||||||
// Misc funcs
|
|
||||||
#define FS_OFFSET_1200_LOCK_MUTEX 0x29350
|
|
||||||
#define FS_OFFSET_1200_UNLOCK_MUTEX 0x293A0
|
|
||||||
|
|
||||||
#define FS_OFFSET_1200_SDMMC_WRAPPER_CONTROLLER_OPEN 0x150850
|
|
||||||
#define FS_OFFSET_1200_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1508E0
|
|
||||||
|
|
||||||
// Misc Data
|
|
||||||
#define FS_OFFSET_1200_SD_MUTEX 0xE3D3E8
|
|
||||||
#define FS_OFFSET_1200_NAND_MUTEX 0xE38768
|
|
||||||
#define FS_OFFSET_1200_ACTIVE_PARTITION 0xE387A8
|
|
||||||
#define FS_OFFSET_1200_SDMMC_DAS_HANDLE 0xE20DB0
|
|
||||||
|
|
||||||
// NOPs
|
|
||||||
#define FS_OFFSET_1200_SD_DAS_INIT 0x27244
|
|
||||||
|
|
||||||
// Nintendo Paths
|
|
||||||
#define FS_OFFSET_1200_NINTENDO_PATHS \
|
|
||||||
{ \
|
|
||||||
{.opcode_reg = 3, .adrp_offset = 0x0006E810, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 3, .adrp_offset = 0x0007AEC0, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 4, .adrp_offset = 0x00081254, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 4, .adrp_offset = 0x00092850, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // __FS_1200_H__
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
|
||||||
* Copyright (c) 2019 Atmosphere-NX
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#ifndef __FS_1200_EXFAT_H__
|
|
||||||
#define __FS_1200_EXFAT_H__
|
|
||||||
|
|
||||||
// Accessor vtable getters
|
|
||||||
#define FS_OFFSET_1200_EXFAT_SDMMC_ACCESSOR_GC 0x154FD0
|
|
||||||
#define FS_OFFSET_1200_EXFAT_SDMMC_ACCESSOR_SD 0x156DE0
|
|
||||||
#define FS_OFFSET_1200_EXFAT_SDMMC_ACCESSOR_NAND 0x155500
|
|
||||||
|
|
||||||
// Hooks
|
|
||||||
#define FS_OFFSET_1200_EXFAT_SDMMC_WRAPPER_READ 0x150970
|
|
||||||
#define FS_OFFSET_1200_EXFAT_SDMMC_WRAPPER_WRITE 0x150A30
|
|
||||||
#define FS_OFFSET_1200_EXFAT_RTLD 0x688
|
|
||||||
#define FS_OFFSET_1200_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
|
||||||
|
|
||||||
#define FS_OFFSET_1200_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x14FCC0
|
|
||||||
|
|
||||||
// Misc funcs
|
|
||||||
#define FS_OFFSET_1200_EXFAT_LOCK_MUTEX 0x29350
|
|
||||||
#define FS_OFFSET_1200_EXFAT_UNLOCK_MUTEX 0x293A0
|
|
||||||
|
|
||||||
#define FS_OFFSET_1200_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x150850
|
|
||||||
#define FS_OFFSET_1200_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1508E0
|
|
||||||
|
|
||||||
// Misc Data
|
|
||||||
#define FS_OFFSET_1200_EXFAT_SD_MUTEX 0xE4B3E8
|
|
||||||
#define FS_OFFSET_1200_EXFAT_NAND_MUTEX 0xE46768
|
|
||||||
#define FS_OFFSET_1200_EXFAT_ACTIVE_PARTITION 0xE467A8
|
|
||||||
#define FS_OFFSET_1200_EXFAT_SDMMC_DAS_HANDLE 0xE2EDB0
|
|
||||||
|
|
||||||
// NOPs
|
|
||||||
#define FS_OFFSET_1200_EXFAT_SD_DAS_INIT 0x27244
|
|
||||||
|
|
||||||
// Nintendo Paths
|
|
||||||
#define FS_OFFSET_1200_EXFAT_NINTENDO_PATHS \
|
|
||||||
{ \
|
|
||||||
{.opcode_reg = 3, .adrp_offset = 0x0006E810, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 3, .adrp_offset = 0x0007AEC0, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 4, .adrp_offset = 0x00081254, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 4, .adrp_offset = 0x00092850, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // __FS_1200_EXFAT_H__
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
|
||||||
* Copyright (c) 2019 Atmosphere-NX
|
|
||||||
* Copyright (c) 2021 CTCaer
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#ifndef __FS_1203_H__
|
|
||||||
#define __FS_1203_H__
|
|
||||||
|
|
||||||
// Accessor vtable getters
|
|
||||||
#define FS_OFFSET_1203_SDMMC_ACCESSOR_GC 0x1550E0
|
|
||||||
#define FS_OFFSET_1203_SDMMC_ACCESSOR_SD 0x156EF0
|
|
||||||
#define FS_OFFSET_1203_SDMMC_ACCESSOR_NAND 0x155610
|
|
||||||
|
|
||||||
// Hooks
|
|
||||||
#define FS_OFFSET_1203_SDMMC_WRAPPER_READ 0x150A80
|
|
||||||
#define FS_OFFSET_1203_SDMMC_WRAPPER_WRITE 0x150B40
|
|
||||||
#define FS_OFFSET_1203_RTLD 0x688
|
|
||||||
#define FS_OFFSET_1203_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
|
||||||
|
|
||||||
#define FS_OFFSET_1203_CLKRST_SET_MIN_V_CLK_RATE 0x14FDD0
|
|
||||||
|
|
||||||
// Misc funcs
|
|
||||||
#define FS_OFFSET_1203_LOCK_MUTEX 0x29350
|
|
||||||
#define FS_OFFSET_1203_UNLOCK_MUTEX 0x293A0
|
|
||||||
|
|
||||||
#define FS_OFFSET_1203_SDMMC_WRAPPER_CONTROLLER_OPEN 0x150960
|
|
||||||
#define FS_OFFSET_1203_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1509F0
|
|
||||||
|
|
||||||
// Misc Data
|
|
||||||
#define FS_OFFSET_1203_SD_MUTEX 0xE3D3E8
|
|
||||||
#define FS_OFFSET_1203_NAND_MUTEX 0xE38768
|
|
||||||
#define FS_OFFSET_1203_ACTIVE_PARTITION 0xE387A8
|
|
||||||
#define FS_OFFSET_1203_SDMMC_DAS_HANDLE 0xE20DB0
|
|
||||||
|
|
||||||
// NOPs
|
|
||||||
#define FS_OFFSET_1203_SD_DAS_INIT 0x27244
|
|
||||||
|
|
||||||
// Nintendo Paths
|
|
||||||
#define FS_OFFSET_1203_NINTENDO_PATHS \
|
|
||||||
{ \
|
|
||||||
{.opcode_reg = 3, .adrp_offset = 0x0006E920, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 3, .adrp_offset = 0x0007AFD0, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 4, .adrp_offset = 0x00081364, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 4, .adrp_offset = 0x00092960, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // __FS_1203_H__
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
|
||||||
* Copyright (c) 2019 Atmosphere-NX
|
|
||||||
* Copyright (c) 2021 CTCaer
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
#ifndef __FS_1203_EXFAT_H__
|
|
||||||
#define __FS_1203_EXFAT_H__
|
|
||||||
|
|
||||||
// Accessor vtable getters
|
|
||||||
#define FS_OFFSET_1203_EXFAT_SDMMC_ACCESSOR_GC 0x1550E0
|
|
||||||
#define FS_OFFSET_1203_EXFAT_SDMMC_ACCESSOR_SD 0x156EF0
|
|
||||||
#define FS_OFFSET_1203_EXFAT_SDMMC_ACCESSOR_NAND 0x155610
|
|
||||||
|
|
||||||
// Hooks
|
|
||||||
#define FS_OFFSET_1203_EXFAT_SDMMC_WRAPPER_READ 0x150A80
|
|
||||||
#define FS_OFFSET_1203_EXFAT_SDMMC_WRAPPER_WRITE 0x150B40
|
|
||||||
#define FS_OFFSET_1203_EXFAT_RTLD 0x688
|
|
||||||
#define FS_OFFSET_1203_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
|
||||||
|
|
||||||
#define FS_OFFSET_1203_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x14FDD0
|
|
||||||
|
|
||||||
// Misc funcs
|
|
||||||
#define FS_OFFSET_1203_EXFAT_LOCK_MUTEX 0x29350
|
|
||||||
#define FS_OFFSET_1203_EXFAT_UNLOCK_MUTEX 0x293A0
|
|
||||||
|
|
||||||
#define FS_OFFSET_1203_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x150960
|
|
||||||
#define FS_OFFSET_1203_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x1509F0
|
|
||||||
|
|
||||||
// Misc Data
|
|
||||||
#define FS_OFFSET_1203_EXFAT_SD_MUTEX 0xE4B3E8
|
|
||||||
#define FS_OFFSET_1203_EXFAT_NAND_MUTEX 0xE46768
|
|
||||||
#define FS_OFFSET_1203_EXFAT_ACTIVE_PARTITION 0xE467A8
|
|
||||||
#define FS_OFFSET_1203_EXFAT_SDMMC_DAS_HANDLE 0xE2EDB0
|
|
||||||
|
|
||||||
// NOPs
|
|
||||||
#define FS_OFFSET_1203_EXFAT_SD_DAS_INIT 0x27244
|
|
||||||
|
|
||||||
// Nintendo Paths
|
|
||||||
#define FS_OFFSET_1203_EXFAT_NINTENDO_PATHS \
|
|
||||||
{ \
|
|
||||||
{.opcode_reg = 3, .adrp_offset = 0x0006E920, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 3, .adrp_offset = 0x0007AFD0, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 4, .adrp_offset = 0x00081364, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 4, .adrp_offset = 0x00092960, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // __FS_1203_EXFAT_H__
|
|
||||||
@@ -292,36 +292,6 @@ static uint64_t emummc_read_write_inner(void *buf, unsigned int sector, unsigned
|
|||||||
{
|
{
|
||||||
fp = &f_emu.fp_gpp[sector / f_emu.part_size];
|
fp = &f_emu.fp_gpp[sector / f_emu.part_size];
|
||||||
sector = sector % f_emu.part_size;
|
sector = sector % f_emu.part_size;
|
||||||
|
|
||||||
// Special handling for reads/writes which cross file-boundaries.
|
|
||||||
if (__builtin_expect(sector + num_sectors > f_emu.part_size, 0))
|
|
||||||
{
|
|
||||||
unsigned int remaining = num_sectors;
|
|
||||||
while (remaining > 0) {
|
|
||||||
const unsigned int cur_sectors = MIN(remaining, f_emu.part_size - sector);
|
|
||||||
|
|
||||||
if (f_lseek(fp, (u64)sector << 9) != FR_OK)
|
|
||||||
return 0; // Out of bounds.
|
|
||||||
|
|
||||||
if (is_write)
|
|
||||||
{
|
|
||||||
if (f_write_fast(fp, buf, (u64)cur_sectors << 9) != FR_OK)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (f_read_fast(fp, buf, (u64)cur_sectors << 9) != FR_OK)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
buf = (char *)buf + ((u64)cur_sectors << 9);
|
|
||||||
remaining -= cur_sectors;
|
|
||||||
sector = 0;
|
|
||||||
++fp;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -336,14 +306,14 @@ static uint64_t emummc_read_write_inner(void *buf, unsigned int sector, unsigned
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (f_lseek(fp, (u64)sector << 9) != FR_OK)
|
if (f_lseek(fp, sector << 9) != FR_OK)
|
||||||
return 0; // Out of bounds.
|
return 0; // Out of bounds.
|
||||||
|
|
||||||
uint64_t res = 0;
|
uint64_t res = 0;
|
||||||
if (!is_write)
|
if (!is_write)
|
||||||
res = !f_read_fast(fp, buf, (u64)num_sectors << 9);
|
res = !f_read_fast(fp, buf, num_sectors << 9);
|
||||||
else
|
else
|
||||||
res = !f_write_fast(fp, buf, (u64)num_sectors << 9);
|
res = !f_write_fast(fp, buf, num_sectors << 9);
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@@ -358,13 +328,13 @@ uint64_t sdmmc_wrapper_controller_open(int mmc_id)
|
|||||||
if (_this != NULL)
|
if (_this != NULL)
|
||||||
{
|
{
|
||||||
// Lock eMMC xfer while SD card is being initialized by FS.
|
// Lock eMMC xfer while SD card is being initialized by FS.
|
||||||
if (mmc_id == FS_SDMMC_SD)
|
if (_this == sdmmc_accessor_get(FS_SDMMC_SD))
|
||||||
mutex_lock_handler(FS_SDMMC_EMMC); // Recursive Mutex, handler will lock SD as well if custom_driver
|
mutex_lock_handler(FS_SDMMC_EMMC); // Recursive Mutex, handler will lock SD as well if custom_driver
|
||||||
|
|
||||||
result = _this->vtab->sdmmc_accessor_controller_open(_this);
|
result = _this->vtab->sdmmc_accessor_controller_open(_this);
|
||||||
|
|
||||||
// Unlock eMMC.
|
// Unlock eMMC.
|
||||||
if (mmc_id == FS_SDMMC_SD)
|
if (_this == sdmmc_accessor_get(FS_SDMMC_SD))
|
||||||
mutex_unlock_handler(FS_SDMMC_EMMC);
|
mutex_unlock_handler(FS_SDMMC_EMMC);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ $(OFILES) : $(ATMOSPHERE_LIBRARIES_DIR)/libexosphere/$(ATMOSPHERE_LIBRARY_DIR)/l
|
|||||||
|
|
||||||
program.lz4.o: program_lz4.h
|
program.lz4.o: program_lz4.h
|
||||||
|
|
||||||
program_lz4.h: $(TOPDIR)/../program/program$(ATMOSPHERE_BUILD_TARGET_BINARY_SUFFIX).lz4
|
program.lz4.o program_lz4.h: $(TOPDIR)/../program/program$(ATMOSPHERE_BUILD_TARGET_BINARY_SUFFIX).lz4
|
||||||
@echo $(notdir $<)
|
@echo $(notdir $<)
|
||||||
@rm -rf tmp_program_$(ATMOSPHERE_BUILD_TARGET_IDENTIFIER)
|
@rm -rf tmp_program_$(ATMOSPHERE_BUILD_TARGET_IDENTIFIER)
|
||||||
@mkdir -p tmp_program_$(ATMOSPHERE_BUILD_TARGET_IDENTIFIER)
|
@mkdir -p tmp_program_$(ATMOSPHERE_BUILD_TARGET_IDENTIFIER)
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
%rename link old_link
|
%rename link old_link
|
||||||
|
|
||||||
*link:
|
*link:
|
||||||
%(old_link) -T %:getenv(TOPDIR /loader_stub.ld) --gc-sections --nmagic
|
%(old_link) -T %:getenv(TOPDIR /loader_stub.ld) --gc-sections --nmagic -nostdlib -nostartfiles
|
||||||
|
|
||||||
|
*startfile:
|
||||||
|
crti%O%s crtbegin%O%s
|
||||||
|
|||||||
@@ -20,13 +20,13 @@
|
|||||||
|
|
||||||
namespace ams::secmon::loader {
|
namespace ams::secmon::loader {
|
||||||
|
|
||||||
NORETURN void UncompressAndExecute(const void *program, const void *boot_code) {
|
NORETURN void UncompressAndExecute() {
|
||||||
/* Uncompress the program image. */
|
/* Uncompress the program image. */
|
||||||
Uncompress(secmon::MemoryRegionPhysicalTzramFullProgramImage.GetPointer(), secmon::MemoryRegionPhysicalTzramFullProgramImage.GetSize(), program, program_lz4_size);
|
Uncompress(secmon::MemoryRegionPhysicalTzramFullProgramImage.GetPointer(), secmon::MemoryRegionPhysicalTzramFullProgramImage.GetSize(), program_lz4, program_lz4_size);
|
||||||
|
|
||||||
/* Copy the boot image to the end of IRAM */
|
/* Copy the boot image to the end of IRAM */
|
||||||
u8 *relocated_boot_code = secmon::MemoryRegionPhysicalIramBootCodeImage.GetEndPointer<u8>() - boot_code_lz4_size;
|
u8 *relocated_boot_code = secmon::MemoryRegionPhysicalIramBootCodeImage.GetEndPointer<u8>() - boot_code_lz4_size;
|
||||||
std::memcpy(relocated_boot_code, boot_code, boot_code_lz4_size);
|
std::memcpy(relocated_boot_code, boot_code_lz4, boot_code_lz4_size);
|
||||||
|
|
||||||
/* Uncompress the boot image. */
|
/* Uncompress the boot image. */
|
||||||
Uncompress(secmon::MemoryRegionPhysicalIramBootCodeImage.GetPointer(), secmon::MemoryRegionPhysicalIramBootCodeImage.GetSize(), relocated_boot_code, boot_code_lz4_size);
|
Uncompress(secmon::MemoryRegionPhysicalIramBootCodeImage.GetPointer(), secmon::MemoryRegionPhysicalIramBootCodeImage.GetSize(), relocated_boot_code, boot_code_lz4_size);
|
||||||
|
|||||||
@@ -98,8 +98,8 @@ _start:
|
|||||||
ldr x20, =0x7C020000
|
ldr x20, =0x7C020000
|
||||||
mov sp, x20
|
mov sp, x20
|
||||||
|
|
||||||
adr x0, program_lz4
|
/* Call our init array functions. */
|
||||||
adr x1, boot_code_lz4
|
bl __libc_init_array
|
||||||
|
|
||||||
/* Uncompress the program and iram boot code images. */
|
/* Uncompress the program and iram boot code images. */
|
||||||
b _ZN3ams6secmon6loader20UncompressAndExecuteEPKvS3_
|
b _ZN3ams6secmon6loader20UncompressAndExecuteEv
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
%rename link old_link
|
%rename link old_link
|
||||||
|
|
||||||
*link:
|
*link:
|
||||||
%(old_link) -T %:getenv(TOPDIR /mariko_fatal.ld) --gc-sections --nmagic
|
%(old_link) -T %:getenv(TOPDIR /mariko_fatal.ld) --gc-sections --nmagic -nostdlib -nostartfiles
|
||||||
|
|
||||||
|
*startfile:
|
||||||
|
crti%O%s crtbegin%O%s
|
||||||
|
|||||||
@@ -111,7 +111,7 @@ namespace ams::secmon::fatal {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnableBacklightForVendor2050ForAula(int brightness) {
|
void EnableBacklightForVendor2050ForHardwareTypeFive(int brightness) {
|
||||||
/* Enable FRAME_END_INT */
|
/* Enable FRAME_END_INT */
|
||||||
reg::Write(g_disp1_regs + sizeof(u32) * DC_CMD_INT_ENABLE, 2);
|
reg::Write(g_disp1_regs + sizeof(u32) * DC_CMD_INT_ENABLE, 2);
|
||||||
|
|
||||||
@@ -270,7 +270,7 @@ namespace ams::secmon::fatal {
|
|||||||
reg::ClearBits(g_apb_misc_regs + PINMUX_AUX_LCD_BL_EN, reg::EncodeMask(PINMUX_REG_BITS_MASK(AUX_TRISTATE)));
|
reg::ClearBits(g_apb_misc_regs + PINMUX_AUX_LCD_BL_EN, reg::EncodeMask(PINMUX_REG_BITS_MASK(AUX_TRISTATE)));
|
||||||
reg::ClearBits(g_apb_misc_regs + PINMUX_AUX_LCD_RST, reg::EncodeMask(PINMUX_REG_BITS_MASK(AUX_TRISTATE)));
|
reg::ClearBits(g_apb_misc_regs + PINMUX_AUX_LCD_RST, reg::EncodeMask(PINMUX_REG_BITS_MASK(AUX_TRISTATE)));
|
||||||
|
|
||||||
if (fuse::GetHardwareType() == fuse::HardwareType_Aula) {
|
if (fuse::GetHardwareType() == fuse::HardwareType_Five) {
|
||||||
/* Configure LCD backlight. */
|
/* Configure LCD backlight. */
|
||||||
reg::SetBits(g_gpio_regs + GPIO_PORT6_CNF_1, 0x4);
|
reg::SetBits(g_gpio_regs + GPIO_PORT6_CNF_1, 0x4);
|
||||||
reg::SetBits(g_gpio_regs + GPIO_PORT6_OE_1, 0x4);
|
reg::SetBits(g_gpio_regs + GPIO_PORT6_OE_1, 0x4);
|
||||||
@@ -384,7 +384,7 @@ namespace ams::secmon::fatal {
|
|||||||
reg::ClearBits(g_apb_misc_regs + PINMUX_AUX_LCD_BL_EN, reg::EncodeMask(PINMUX_REG_BITS_MASK(AUX_TRISTATE)));
|
reg::ClearBits(g_apb_misc_regs + PINMUX_AUX_LCD_BL_EN, reg::EncodeMask(PINMUX_REG_BITS_MASK(AUX_TRISTATE)));
|
||||||
reg::ClearBits(g_apb_misc_regs + PINMUX_AUX_LCD_RST, reg::EncodeMask(PINMUX_REG_BITS_MASK(AUX_TRISTATE)));
|
reg::ClearBits(g_apb_misc_regs + PINMUX_AUX_LCD_RST, reg::EncodeMask(PINMUX_REG_BITS_MASK(AUX_TRISTATE)));
|
||||||
|
|
||||||
if (hw_type == fuse::HardwareType_Aula) {
|
if (hw_type == fuse::HardwareType_Five) {
|
||||||
/* Configure LCD backlight. */
|
/* Configure LCD backlight. */
|
||||||
reg::SetBits(g_gpio_regs + GPIO_PORT6_CNF_1, 0x4);
|
reg::SetBits(g_gpio_regs + GPIO_PORT6_CNF_1, 0x4);
|
||||||
reg::SetBits(g_gpio_regs + GPIO_PORT6_OE_1, 0x4);
|
reg::SetBits(g_gpio_regs + GPIO_PORT6_OE_1, 0x4);
|
||||||
@@ -429,7 +429,7 @@ namespace ams::secmon::fatal {
|
|||||||
reg::SetBits(g_gpio_regs + GPIO_PORT6_OUT_1, 0x4);
|
reg::SetBits(g_gpio_regs + GPIO_PORT6_OUT_1, 0x4);
|
||||||
util::WaitMicroSeconds(60'000ul);
|
util::WaitMicroSeconds(60'000ul);
|
||||||
|
|
||||||
if (hw_type == fuse::HardwareType_Aula) {
|
if (hw_type == fuse::HardwareType_Five) {
|
||||||
reg::Write(g_dsi_regs + sizeof(u32) * DSI_BTA_TIMING, 0x40103);
|
reg::Write(g_dsi_regs + sizeof(u32) * DSI_BTA_TIMING, 0x40103);
|
||||||
} else {
|
} else {
|
||||||
reg::Write(g_dsi_regs + sizeof(u32) * DSI_BTA_TIMING, 0x50204);
|
reg::Write(g_dsi_regs + sizeof(u32) * DSI_BTA_TIMING, 0x50204);
|
||||||
@@ -593,7 +593,7 @@ namespace ams::secmon::fatal {
|
|||||||
/* Enable backlight. */
|
/* Enable backlight. */
|
||||||
constexpr auto DisplayBrightness = 100;
|
constexpr auto DisplayBrightness = 100;
|
||||||
if (GetLcdVendor() == 0x2050) {
|
if (GetLcdVendor() == 0x2050) {
|
||||||
EnableBacklightForVendor2050ForAula(DisplayBrightness);
|
EnableBacklightForVendor2050ForHardwareTypeFive(DisplayBrightness);
|
||||||
} else {
|
} else {
|
||||||
EnableBacklightForGeneric(DisplayBrightness);
|
EnableBacklightForGeneric(DisplayBrightness);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
%rename link old_link
|
%rename link old_link
|
||||||
|
|
||||||
*link:
|
*link:
|
||||||
%(old_link) -T %:getenv(TOPDIR /program.ld) --gc-sections --nmagic
|
%(old_link) -T %:getenv(TOPDIR /program.ld) --gc-sections --nmagic -nostdlib -nostartfiles
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
%rename link old_link
|
%rename link old_link
|
||||||
|
|
||||||
*link:
|
*link:
|
||||||
%(old_link) -T %:getenv(TOPDIR /rebootstub.ld) --gc-sections --nmagic
|
%(old_link) -T %:getenv(TOPDIR /rebootstub.ld) --gc-sections --nmagic -nostdlib -nostartfiles
|
||||||
|
|
||||||
|
*startfile:
|
||||||
|
crti%O%s crtbegin%O%s
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
%rename link old_link
|
%rename link old_link
|
||||||
|
|
||||||
*link:
|
*link:
|
||||||
%(old_link) -T %:getenv(TOPDIR /sc7fw.ld) --gc-sections --nmagic
|
%(old_link) -T %:getenv(TOPDIR /sc7fw.ld) --gc-sections --nmagic -nostdlib -nostartfiles
|
||||||
|
|
||||||
|
*startfile:
|
||||||
|
crti%O%s crtbegin%O%s
|
||||||
|
|||||||
@@ -85,10 +85,10 @@ _ZN3ams6secmon4boot15VolatileKeyDataE:
|
|||||||
/* We can get away with only including latest because exosphere supports newer-than-expected master key in engine. */
|
/* We can get away with only including latest because exosphere supports newer-than-expected master key in engine. */
|
||||||
/* TODO: Update on next change of keys. */
|
/* TODO: Update on next change of keys. */
|
||||||
/* Mariko Development Master Kek Source. */
|
/* Mariko Development Master Kek Source. */
|
||||||
.byte 0x75, 0x2D, 0x2E, 0xF3, 0x2F, 0x3F, 0xFE, 0x65, 0xF4, 0xA9, 0x83, 0xB4, 0xED, 0x42, 0x63, 0xBA
|
.byte 0xF9, 0x37, 0xCF, 0x9A, 0xBD, 0x86, 0xBB, 0xA9, 0x9C, 0x9E, 0x03, 0xC4, 0xFC, 0xBC, 0x3B, 0xCE
|
||||||
|
|
||||||
/* Mariko Production Master Kek Source. */
|
/* Mariko Production Master Kek Source. */
|
||||||
.byte 0xE5, 0x41, 0xAC, 0xEC, 0xD1, 0xA7, 0xD1, 0xAB, 0xED, 0x03, 0x77, 0xF1, 0x27, 0xCA, 0xF8, 0xF1
|
.byte 0x0E, 0x44, 0x0C, 0xED, 0xB4, 0x36, 0xC0, 0x3F, 0xAA, 0x1D, 0xAE, 0xBF, 0x62, 0xB1, 0x09, 0x82
|
||||||
|
|
||||||
/* Development Master Key Vectors. */
|
/* Development Master Key Vectors. */
|
||||||
.byte 0x46, 0x22, 0xB4, 0x51, 0x9A, 0x7E, 0xA7, 0x7F, 0x62, 0xA1, 0x1F, 0x8F, 0xC5, 0x3A, 0xDB, 0xFE /* Zeroes encrypted with Master Key 00. */
|
.byte 0x46, 0x22, 0xB4, 0x51, 0x9A, 0x7E, 0xA7, 0x7F, 0x62, 0xA1, 0x1F, 0x8F, 0xC5, 0x3A, 0xDB, 0xFE /* Zeroes encrypted with Master Key 00. */
|
||||||
@@ -102,7 +102,6 @@ _ZN3ams6secmon4boot15VolatileKeyDataE:
|
|||||||
.byte 0xEC, 0xE1, 0x46, 0x89, 0x37, 0xFD, 0xD2, 0x15, 0x8C, 0x3F, 0x24, 0x82, 0xEF, 0x49, 0x68, 0x04 /* Master key 07 encrypted with Master key 08. */
|
.byte 0xEC, 0xE1, 0x46, 0x89, 0x37, 0xFD, 0xD2, 0x15, 0x8C, 0x3F, 0x24, 0x82, 0xEF, 0x49, 0x68, 0x04 /* Master key 07 encrypted with Master key 08. */
|
||||||
.byte 0x43, 0x3D, 0xC5, 0x3B, 0xEF, 0x91, 0x02, 0x21, 0x61, 0x54, 0x63, 0x8A, 0x35, 0xE7, 0xCA, 0xEE /* Master key 08 encrypted with Master key 09. */
|
.byte 0x43, 0x3D, 0xC5, 0x3B, 0xEF, 0x91, 0x02, 0x21, 0x61, 0x54, 0x63, 0x8A, 0x35, 0xE7, 0xCA, 0xEE /* Master key 08 encrypted with Master key 09. */
|
||||||
.byte 0x6C, 0x2E, 0xCD, 0xB3, 0x34, 0x61, 0x77, 0xF5, 0xF9, 0xB1, 0xDD, 0x61, 0x98, 0x19, 0x3E, 0xD4 /* Master key 09 encrypted with Master key 0A. */
|
.byte 0x6C, 0x2E, 0xCD, 0xB3, 0x34, 0x61, 0x77, 0xF5, 0xF9, 0xB1, 0xDD, 0x61, 0x98, 0x19, 0x3E, 0xD4 /* Master key 09 encrypted with Master key 0A. */
|
||||||
.byte 0x21, 0x88, 0x6B, 0x10, 0x9E, 0x83, 0xD6, 0x52, 0xAB, 0x08, 0xDB, 0x6D, 0x39, 0xFF, 0x1C, 0x9C /* Master key 0A encrypted with Master key 0B. */
|
|
||||||
|
|
||||||
/* Production Master Key Vectors. */
|
/* Production Master Key Vectors. */
|
||||||
.byte 0x0C, 0xF0, 0x59, 0xAC, 0x85, 0xF6, 0x26, 0x65, 0xE1, 0xE9, 0x19, 0x55, 0xE6, 0xF2, 0x67, 0x3D /* Zeroes encrypted with Master Key 00. */
|
.byte 0x0C, 0xF0, 0x59, 0xAC, 0x85, 0xF6, 0x26, 0x65, 0xE1, 0xE9, 0x19, 0x55, 0xE6, 0xF2, 0x67, 0x3D /* Zeroes encrypted with Master Key 00. */
|
||||||
@@ -116,37 +115,33 @@ _ZN3ams6secmon4boot15VolatileKeyDataE:
|
|||||||
.byte 0xEA, 0x60, 0xB3, 0xEA, 0xCE, 0x8F, 0x24, 0x46, 0x7D, 0x33, 0x9C, 0xD1, 0xBC, 0x24, 0x98, 0x29 /* Master key 07 encrypted with Master key 08. */
|
.byte 0xEA, 0x60, 0xB3, 0xEA, 0xCE, 0x8F, 0x24, 0x46, 0x7D, 0x33, 0x9C, 0xD1, 0xBC, 0x24, 0x98, 0x29 /* Master key 07 encrypted with Master key 08. */
|
||||||
.byte 0x4D, 0xD9, 0x98, 0x42, 0x45, 0x0D, 0xB1, 0x3C, 0x52, 0x0C, 0x9A, 0x44, 0xBB, 0xAD, 0xAF, 0x80 /* Master key 08 encrypted with Master key 09. */
|
.byte 0x4D, 0xD9, 0x98, 0x42, 0x45, 0x0D, 0xB1, 0x3C, 0x52, 0x0C, 0x9A, 0x44, 0xBB, 0xAD, 0xAF, 0x80 /* Master key 08 encrypted with Master key 09. */
|
||||||
.byte 0xB8, 0x96, 0x9E, 0x4A, 0x00, 0x0D, 0xD6, 0x28, 0xB3, 0xD1, 0xDB, 0x68, 0x5F, 0xFB, 0xE1, 0x2A /* Master key 09 encrypted with Master key 0A. */
|
.byte 0xB8, 0x96, 0x9E, 0x4A, 0x00, 0x0D, 0xD6, 0x28, 0xB3, 0xD1, 0xDB, 0x68, 0x5F, 0xFB, 0xE1, 0x2A /* Master key 09 encrypted with Master key 0A. */
|
||||||
.byte 0xC1, 0x8D, 0x16, 0xBB, 0x2A, 0xE4, 0x1D, 0xD4, 0xC2, 0xC1, 0xB6, 0x40, 0x94, 0x35, 0x63, 0x98 /* Master key 0A encrypted with Master key 0B. */
|
|
||||||
|
|
||||||
/* Device Master Key Source Sources. */
|
/* Device Master Key Source Sources. */
|
||||||
.byte 0x8B, 0x4E, 0x1C, 0x22, 0x42, 0x07, 0xC8, 0x73, 0x56, 0x94, 0x08, 0x8B, 0xCC, 0x47, 0x0F, 0x5D /* 4.0.0 Device Master Key Source Source. */
|
.byte 0x8B, 0x4E, 0x1C, 0x22, 0x42, 0x07, 0xC8, 0x73, 0x56, 0x94, 0x08, 0x8B, 0xCC, 0x47, 0x0F, 0x5D /* 4.0.0 Device Master Key Source Source. */
|
||||||
.byte 0x6C, 0xEF, 0xC6, 0x27, 0x8B, 0xEC, 0x8A, 0x91, 0x99, 0xAB, 0x24, 0xAC, 0x4F, 0x1C, 0x8F, 0x1C /* 5.0.0 Device Master Key Source Source. */
|
.byte 0x6C, 0xEF, 0xC6, 0x27, 0x8B, 0xEC, 0x8A, 0x91, 0x99, 0xAB, 0x24, 0xAC, 0x4F, 0x1C, 0x8F, 0x1C /* 5.0.0 Device Master Key Source Source. */
|
||||||
.byte 0x70, 0x08, 0x1B, 0x97, 0x44, 0x64, 0xF8, 0x91, 0x54, 0x9D, 0xC6, 0x84, 0x8F, 0x1A, 0xB2, 0xE4 /* 6.0.0 Device Master Key Source Source. */
|
.byte 0x70, 0x08, 0x1B, 0x97, 0x44, 0x64, 0xF8, 0x91, 0x54, 0x9D, 0xC6, 0x84, 0x8F, 0x1A, 0xB2, 0xE4 /* 6.0.0 Device Master Key Source Source. */
|
||||||
.byte 0x8E, 0x09, 0x1F, 0x7A, 0xBB, 0xCA, 0x6A, 0xFB, 0xB8, 0x9B, 0xD5, 0xC1, 0x25, 0x9C, 0xA9, 0x17 /* 6.2.0 Device Master Key Source Source. */
|
.byte 0x8E, 0x09, 0x1F, 0x7A, 0xBB, 0xCA, 0x6A, 0xFB, 0xB8, 0x9B, 0xD5, 0xC1, 0x25, 0x9C, 0xA9, 0x17 /* 6.2.0 Device Master Key Source Source. */
|
||||||
.byte 0x8F, 0x77, 0x5A, 0x96, 0xB0, 0x94, 0xFD, 0x8D, 0x28, 0xE4, 0x19, 0xC8, 0x16, 0x1C, 0xDB, 0x3D /* 7.0.0 Device Master Key Source Source. */
|
.byte 0x8F, 0x77, 0x5A, 0x96, 0xB0, 0x94, 0xFD, 0x8D, 0x28, 0xE4, 0x19, 0xC8, 0x16, 0x1C, 0xDB, 0x3D /* 7.0.0 Device Master Key Source Source. */
|
||||||
.byte 0x67, 0x62, 0xD4, 0x8E, 0x55, 0xCF, 0xFF, 0x41, 0x31, 0x15, 0x3B, 0x24, 0x0C, 0x7C, 0x07, 0xAE /* 8.1.0 Device Master Key Source Source. */
|
.byte 0x67, 0x62, 0xD4, 0x8E, 0x55, 0xCF, 0xFF, 0x41, 0x31, 0x15, 0x3B, 0x24, 0x0C, 0x7C, 0x07, 0xAE /* 8.1.0 Device Master Key Source Source. */
|
||||||
.byte 0x4A, 0xC3, 0x4E, 0x14, 0x8B, 0x96, 0x4A, 0xD5, 0xD4, 0x99, 0x73, 0xC4, 0x45, 0xAB, 0x8B, 0x49 /* 9.0.0 Device Master Key Source Source. */
|
.byte 0x4A, 0xC3, 0x4E, 0x14, 0x8B, 0x96, 0x4A, 0xD5, 0xD4, 0x99, 0x73, 0xC4, 0x45, 0xAB, 0x8B, 0x49 /* 9.0.0 Device Master Key Source Source. */
|
||||||
.byte 0x14, 0xB8, 0x74, 0x12, 0xCB, 0xBD, 0x0B, 0x8F, 0x20, 0xFB, 0x30, 0xDA, 0x27, 0xE4, 0x58, 0x94 /* 9.1.0 Device Master Key Source Source. */
|
.byte 0x14, 0xB8, 0x74, 0x12, 0xCB, 0xBD, 0x0B, 0x8F, 0x20, 0xFB, 0x30, 0xDA, 0x27, 0xE4, 0x58, 0x94 /* 9.1.0 Device Master Key Source Source. */
|
||||||
.byte 0xAA, 0xFD, 0xBC, 0xBB, 0x25, 0xC3, 0xA4, 0xEF, 0xE3, 0xEE, 0x58, 0x53, 0xB7, 0xF8, 0xDD, 0xD6 /* 12.1.0 Device Master Key Source Source. */
|
|
||||||
|
|
||||||
/* Development Device Master Kek Sources. */
|
/* Development Device Master Kek Sources. */
|
||||||
.byte 0xD6, 0xBD, 0x9F, 0xC6, 0x18, 0x09, 0xE1, 0x96, 0x20, 0x39, 0x60, 0xD2, 0x89, 0x83, 0x31, 0x34 /* 4.0.0 Device Master Kek Source. */
|
.byte 0xD6, 0xBD, 0x9F, 0xC6, 0x18, 0x09, 0xE1, 0x96, 0x20, 0x39, 0x60, 0xD2, 0x89, 0x83, 0x31, 0x34 /* 4.0.0 Device Master Kek Source. */
|
||||||
.byte 0x59, 0x2D, 0x20, 0x69, 0x33, 0xB5, 0x17, 0xBA, 0xCF, 0xB1, 0x4E, 0xFD, 0xE4, 0xC2, 0x7B, 0xA8 /* 5.0.0 Device Master Kek Source. */
|
.byte 0x59, 0x2D, 0x20, 0x69, 0x33, 0xB5, 0x17, 0xBA, 0xCF, 0xB1, 0x4E, 0xFD, 0xE4, 0xC2, 0x7B, 0xA8 /* 5.0.0 Device Master Kek Source. */
|
||||||
.byte 0xF6, 0xD8, 0x59, 0x63, 0x8F, 0x47, 0xCB, 0x4A, 0xD8, 0x74, 0x05, 0x7F, 0x88, 0x92, 0x33, 0xA5 /* 6.0.0 Device Master Kek Source. */
|
.byte 0xF6, 0xD8, 0x59, 0x63, 0x8F, 0x47, 0xCB, 0x4A, 0xD8, 0x74, 0x05, 0x7F, 0x88, 0x92, 0x33, 0xA5 /* 6.0.0 Device Master Kek Source. */
|
||||||
.byte 0x20, 0xAB, 0xF2, 0x0F, 0x05, 0xE3, 0xDE, 0x2E, 0xA1, 0xFB, 0x37, 0x5E, 0x8B, 0x22, 0x1A, 0x38 /* 6.2.0 Device Master Kek Source. */
|
.byte 0x20, 0xAB, 0xF2, 0x0F, 0x05, 0xE3, 0xDE, 0x2E, 0xA1, 0xFB, 0x37, 0x5E, 0x8B, 0x22, 0x1A, 0x38 /* 6.2.0 Device Master Kek Source. */
|
||||||
.byte 0x60, 0xAE, 0x56, 0x68, 0x11, 0xE2, 0x0C, 0x99, 0xDE, 0x05, 0xAE, 0x68, 0x78, 0x85, 0x04, 0xAE /* 7.0.0 Device Master Kek Source. */
|
.byte 0x60, 0xAE, 0x56, 0x68, 0x11, 0xE2, 0x0C, 0x99, 0xDE, 0x05, 0xAE, 0x68, 0x78, 0x85, 0x04, 0xAE /* 7.0.0 Device Master Kek Source. */
|
||||||
.byte 0x94, 0xD6, 0xA8, 0xC0, 0x95, 0xAF, 0xD0, 0xA6, 0x27, 0x53, 0x5E, 0xE5, 0x8E, 0x70, 0x1F, 0x87 /* 8.1.0 Device Master Kek Source. */
|
.byte 0x94, 0xD6, 0xA8, 0xC0, 0x95, 0xAF, 0xD0, 0xA6, 0x27, 0x53, 0x5E, 0xE5, 0x8E, 0x70, 0x1F, 0x87 /* 8.1.0 Device Master Kek Source. */
|
||||||
.byte 0x61, 0x6A, 0x88, 0x21, 0xA3, 0x52, 0xB0, 0x19, 0x16, 0x25, 0xA4, 0xE3, 0x4C, 0x54, 0x02, 0x0F /* 9.0.0 Device Master Kek Source. */
|
.byte 0x61, 0x6A, 0x88, 0x21, 0xA3, 0x52, 0xB0, 0x19, 0x16, 0x25, 0xA4, 0xE3, 0x4C, 0x54, 0x02, 0x0F /* 9.0.0 Device Master Kek Source. */
|
||||||
.byte 0x9D, 0xB1, 0xAE, 0xCB, 0xF6, 0xF6, 0xE3, 0xFE, 0xAB, 0x6F, 0xCB, 0xAF, 0x38, 0x03, 0xFC, 0x7B /* 9.1.0 Device Master Kek Source. */
|
.byte 0x9D, 0xB1, 0xAE, 0xCB, 0xF6, 0xF6, 0xE3, 0xFE, 0xAB, 0x6F, 0xCB, 0xAF, 0x38, 0x03, 0xFC, 0x7B /* 9.1.0 Device Master Kek Source. */
|
||||||
.byte 0xC4, 0xBB, 0xF3, 0x9F, 0xA3, 0xAA, 0x00, 0x99, 0x7C, 0x97, 0xAD, 0x91, 0x8F, 0xE8, 0x45, 0xCB /* 12.1.0 Device Master Kek Source. */
|
|
||||||
|
|
||||||
/* Production Device Master Kek Sources. */
|
/* Production Device Master Kek Sources. */
|
||||||
.byte 0x88, 0x62, 0x34, 0x6E, 0xFA, 0xF7, 0xD8, 0x3F, 0xE1, 0x30, 0x39, 0x50, 0xF0, 0xB7, 0x5D, 0x5D /* 4.0.0 Device Master Kek Source. */
|
.byte 0x88, 0x62, 0x34, 0x6E, 0xFA, 0xF7, 0xD8, 0x3F, 0xE1, 0x30, 0x39, 0x50, 0xF0, 0xB7, 0x5D, 0x5D /* 4.0.0 Device Master Kek Source. */
|
||||||
.byte 0x06, 0x1E, 0x7B, 0xE9, 0x6D, 0x47, 0x8C, 0x77, 0xC5, 0xC8, 0xE7, 0x94, 0x9A, 0xA8, 0x5F, 0x2E /* 5.0.0 Device Master Kek Source. */
|
.byte 0x06, 0x1E, 0x7B, 0xE9, 0x6D, 0x47, 0x8C, 0x77, 0xC5, 0xC8, 0xE7, 0x94, 0x9A, 0xA8, 0x5F, 0x2E /* 5.0.0 Device Master Kek Source. */
|
||||||
.byte 0x99, 0xFA, 0x98, 0xBD, 0x15, 0x1C, 0x72, 0xFD, 0x7D, 0x9A, 0xD5, 0x41, 0x00, 0xFD, 0xB2, 0xEF /* 6.0.0 Device Master Kek Source. */
|
.byte 0x99, 0xFA, 0x98, 0xBD, 0x15, 0x1C, 0x72, 0xFD, 0x7D, 0x9A, 0xD5, 0x41, 0x00, 0xFD, 0xB2, 0xEF /* 6.0.0 Device Master Kek Source. */
|
||||||
.byte 0x81, 0x3C, 0x6C, 0xBF, 0x5D, 0x21, 0xDE, 0x77, 0x20, 0xD9, 0x6C, 0xE3, 0x22, 0x06, 0xAE, 0xBB /* 6.2.0 Device Master Kek Source. */
|
.byte 0x81, 0x3C, 0x6C, 0xBF, 0x5D, 0x21, 0xDE, 0x77, 0x20, 0xD9, 0x6C, 0xE3, 0x22, 0x06, 0xAE, 0xBB /* 6.2.0 Device Master Kek Source. */
|
||||||
.byte 0x86, 0x61, 0xB0, 0x16, 0xFA, 0x7A, 0x9A, 0xEA, 0xF6, 0xF5, 0xBE, 0x1A, 0x13, 0x5B, 0x6D, 0x9E /* 7.0.0 Device Master Kek Source. */
|
.byte 0x86, 0x61, 0xB0, 0x16, 0xFA, 0x7A, 0x9A, 0xEA, 0xF6, 0xF5, 0xBE, 0x1A, 0x13, 0x5B, 0x6D, 0x9E /* 7.0.0 Device Master Kek Source. */
|
||||||
.byte 0xA6, 0x81, 0x71, 0xE7, 0xB5, 0x23, 0x74, 0xB0, 0x39, 0x8C, 0xB7, 0xFF, 0xA0, 0x62, 0x9F, 0x8D /* 8.1.0 Device Master Kek Source. */
|
.byte 0xA6, 0x81, 0x71, 0xE7, 0xB5, 0x23, 0x74, 0xB0, 0x39, 0x8C, 0xB7, 0xFF, 0xA0, 0x62, 0x9F, 0x8D /* 8.1.0 Device Master Kek Source. */
|
||||||
.byte 0x03, 0xE7, 0xEB, 0x43, 0x1B, 0xCF, 0x5F, 0xB5, 0xED, 0xDC, 0x97, 0xAE, 0x21, 0x8D, 0x19, 0xED /* 9.0.0 Device Master Kek Source. */
|
.byte 0x03, 0xE7, 0xEB, 0x43, 0x1B, 0xCF, 0x5F, 0xB5, 0xED, 0xDC, 0x97, 0xAE, 0x21, 0x8D, 0x19, 0xED /* 9.0.0 Device Master Kek Source. */
|
||||||
.byte 0xCE, 0xFE, 0x41, 0x0F, 0x46, 0x9A, 0x30, 0xD6, 0xF2, 0xE9, 0x0C, 0x6B, 0xB7, 0x15, 0x91, 0x36 /* 9.1.0 Device Master Kek Source. */
|
.byte 0xCE, 0xFE, 0x41, 0x0F, 0x46, 0x9A, 0x30, 0xD6, 0xF2, 0xE9, 0x0C, 0x6B, 0xB7, 0x15, 0x91, 0x36 /* 9.1.0 Device Master Kek Source. */
|
||||||
.byte 0xC2, 0x65, 0x34, 0x6E, 0xC7, 0xC6, 0x5D, 0x97, 0x3E, 0x34, 0x5C, 0x6B, 0xB3, 0x7E, 0xC6, 0xE3 /* 12.1.0 Device Master Kek Source. */
|
|
||||||
|
|||||||
@@ -64,9 +64,17 @@ namespace ams::secmon::boot {
|
|||||||
/* Configure warmboot to set Set FUSE_PRIVATEKEYDISABLE to KEY_INVISIBLE. */
|
/* Configure warmboot to set Set FUSE_PRIVATEKEYDISABLE to KEY_INVISIBLE. */
|
||||||
reg::ReadWrite(pmc + APBDEV_PMC_SECURE_SCRATCH21, REG_BITS_VALUE(4, 1, 1));
|
reg::ReadWrite(pmc + APBDEV_PMC_SECURE_SCRATCH21, REG_BITS_VALUE(4, 1, 1));
|
||||||
|
|
||||||
/* NOTE: Here, Nintendo writes the warmboot key. */
|
/* Write the warmboot key. */
|
||||||
/* However, we rely on the bootloader (e.g. fusee/hekate) having already done this. */
|
/* TODO: This is necessary for mariko. We should decide how to handle this. */
|
||||||
/* reg::Write(pmc + APBDEV_PMC_SECURE_SCRATCH32, ...); */
|
/* In particular, mariko will need to support loading older-than-expected warmboot firmware. */
|
||||||
|
/* We could hash the warmboot firmware and use a lookup table, or require bootloader to provide */
|
||||||
|
/* The warmboot key as a parameter. The latter is a better solution, but it would be nice to take */
|
||||||
|
/* care of it here. Perhaps we should read the number of anti-downgrade fuses burnt, and translate that */
|
||||||
|
/* to the warmboot key? To be decided during the process of implementing ams-on-mariko support. */
|
||||||
|
reg::Write(pmc + APBDEV_PMC_SECURE_SCRATCH32, 0x129);
|
||||||
|
|
||||||
|
/* TODO: Fix to ensure correct scratch contents on mariko, as otherwise wb is broken. */
|
||||||
|
AMS_ABORT_UNLESS(fuse::GetSocType() != fuse::SocType_Mariko);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function derives the master kek and device keys using the tsec root key. */
|
/* This function derives the master kek and device keys using the tsec root key. */
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ namespace ams::secmon::boot {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Check that the key generation is one that we can use. */
|
/* Check that the key generation is one that we can use. */
|
||||||
static_assert(pkg1::KeyGeneration_Count == 12);
|
static_assert(pkg1::KeyGeneration_Count == 11);
|
||||||
if (key_generation >= pkg1::KeyGeneration_Count) {
|
if (key_generation >= pkg1::KeyGeneration_Count) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -409,8 +409,8 @@ namespace ams::secmon {
|
|||||||
reg0 |= reg::Encode(SLAVE_SECURITY_REG_BITS_ENUM(0, CEC, ENABLE));
|
reg0 |= reg::Encode(SLAVE_SECURITY_REG_BITS_ENUM(0, CEC, ENABLE));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Icosa, Iowa, and Aula all set I2C4 to be secure. */
|
/* Icosa, Iowa, and Five all set I2C4 to be secure. */
|
||||||
if (hw_type == fuse::HardwareType_Icosa && hw_type == fuse::HardwareType_Iowa && hw_type == fuse::HardwareType_Aula) {
|
if (hw_type == fuse::HardwareType_Icosa && hw_type == fuse::HardwareType_Iowa && hw_type == fuse::HardwareType_Five) {
|
||||||
reg1 |= reg::Encode(SLAVE_SECURITY_REG_BITS_ENUM(1, I2C4, ENABLE));
|
reg1 |= reg::Encode(SLAVE_SECURITY_REG_BITS_ENUM(1, I2C4, ENABLE));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -272,19 +272,7 @@ namespace ams::secmon::smc {
|
|||||||
|
|
||||||
void GetSecureDataImpl(u8 *dst, SecureData which, bool tweak) {
|
void GetSecureDataImpl(u8 *dst, SecureData which, bool tweak) {
|
||||||
/* Compute the appropriate AES-CTR. */
|
/* Compute the appropriate AES-CTR. */
|
||||||
{
|
se::ComputeAes128Ctr(dst, AesKeySize, pkg1::AesKeySlot_Device, SecureDataSource, AesKeySize, GetSecureDataCounter(which), AesKeySize);
|
||||||
/* Ensure that the SE sees consistent data. */
|
|
||||||
hw::FlushDataCache(dst, AesKeySize);
|
|
||||||
hw::DataSynchronizationBarrierInnerShareable();
|
|
||||||
|
|
||||||
/* Perform the appropriate AES operation. */
|
|
||||||
se::ComputeAes128Ctr(dst, AesKeySize, pkg1::AesKeySlot_Device, SecureDataSource, AesKeySize, GetSecureDataCounter(which), AesKeySize);
|
|
||||||
hw::DataSynchronizationBarrierInnerShareable();
|
|
||||||
|
|
||||||
/* Ensure the CPU sees consistent data. */
|
|
||||||
hw::FlushDataCache(dst, AesKeySize);
|
|
||||||
hw::DataSynchronizationBarrierInnerShareable();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Tweak, if we should. */
|
/* Tweak, if we should. */
|
||||||
if (tweak) {
|
if (tweak) {
|
||||||
|
|||||||
@@ -47,9 +47,9 @@ namespace ams::secmon::smc {
|
|||||||
[fuse::DramId_IcosaSamsung4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_IcosaSamsung4GB] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_IcosaHynix4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_IcosaHynix4GB] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_IcosaMicron4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_IcosaMicron4GB] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_IowaHynix1y4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_FiveHynix1y4GB] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_IcosaSamsung6GB] = pkg1::MemorySize_6GB,
|
[fuse::DramId_IcosaSamsung6GB] = pkg1::MemorySize_6GB,
|
||||||
[fuse::DramId_HoagHynix1y4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_CopperHynix4GB] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_CopperMicron4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_CopperMicron4GB] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_IowaX1X2Samsung4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_IowaX1X2Samsung4GB] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_IowaSansung4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_IowaSansung4GB] = pkg1::MemorySize_4GB,
|
||||||
@@ -66,13 +66,13 @@ namespace ams::secmon::smc {
|
|||||||
[fuse::DramId_HoagSamsung1y4GBX] = pkg1::MemorySize_4GB,
|
[fuse::DramId_HoagSamsung1y4GBX] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_IowaSamsung1y4GBY] = pkg1::MemorySize_4GB,
|
[fuse::DramId_IowaSamsung1y4GBY] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_IowaSamsung1y8GBY] = pkg1::MemorySize_8GB,
|
[fuse::DramId_IowaSamsung1y8GBY] = pkg1::MemorySize_8GB,
|
||||||
[fuse::DramId_AulaSamsung1y4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_FiveSamsung1y4GB] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_HoagSamsung1y8GBX] = pkg1::MemorySize_8GB,
|
[fuse::DramId_HoagSamsung1y8GBX] = pkg1::MemorySize_8GB,
|
||||||
[fuse::DramId_AulaSamsung1y4GBX] = pkg1::MemorySize_4GB,
|
[fuse::DramId_FiveSamsung1y4GBX] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_IowaMicron1y4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_IowaMicron1y4GB] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_HoagMicron1y4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_HoagMicron1y4GB] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_AulaMicron1y4GB] = pkg1::MemorySize_4GB,
|
[fuse::DramId_FiveMicron1y4GB] = pkg1::MemorySize_4GB,
|
||||||
[fuse::DramId_AulaSamsung1y8GBX] = pkg1::MemorySize_8GB,
|
[fuse::DramId_FiveSamsung1y8GBX] = pkg1::MemorySize_8GB,
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr const pkg1::MemoryMode MemoryModes[] = {
|
constexpr const pkg1::MemoryMode MemoryModes[] = {
|
||||||
@@ -243,7 +243,7 @@ namespace ams::secmon::smc {
|
|||||||
(static_cast<u64>(ATMOSPHERE_RELEASE_VERSION_MINOR & 0xFF) << 48) |
|
(static_cast<u64>(ATMOSPHERE_RELEASE_VERSION_MINOR & 0xFF) << 48) |
|
||||||
(static_cast<u64>(ATMOSPHERE_RELEASE_VERSION_MICRO & 0xFF) << 40) |
|
(static_cast<u64>(ATMOSPHERE_RELEASE_VERSION_MICRO & 0xFF) << 40) |
|
||||||
(static_cast<u64>(GetKeyGeneration()) << 32) |
|
(static_cast<u64>(GetKeyGeneration()) << 32) |
|
||||||
(static_cast<u64>(GetTargetFirmware()) << 0);
|
(static_cast<u64>(GetTargetFirmware()) << 00);
|
||||||
break;
|
break;
|
||||||
case ConfigItem::ExosphereNeedsReboot:
|
case ConfigItem::ExosphereNeedsReboot:
|
||||||
/* We are executing, so we aren't in the process of rebooting. */
|
/* We are executing, so we aren't in the process of rebooting. */
|
||||||
@@ -286,16 +286,6 @@ namespace ams::secmon::smc {
|
|||||||
/* Get the log configuration. */
|
/* Get the log configuration. */
|
||||||
args.r[1] = (static_cast<u64>(static_cast<u8>(secmon::GetLogPort())) << 32) | static_cast<u64>(secmon::GetLogBaudRate());
|
args.r[1] = (static_cast<u64>(static_cast<u8>(secmon::GetLogPort())) << 32) | static_cast<u64>(secmon::GetLogBaudRate());
|
||||||
break;
|
break;
|
||||||
case ConfigItem::ExosphereForceEnableUsb30:
|
|
||||||
/* Get whether usb 3.0 should be force-enabled. */
|
|
||||||
args.r[1] = GetSecmonConfiguration().IsUsb30ForceEnabled();
|
|
||||||
break;
|
|
||||||
case ConfigItem::ExosphereSupportedHosVersion:
|
|
||||||
/* Get information about the supported hos version. */
|
|
||||||
args.r[1] = (static_cast<u64>(ATMOSPHERE_SUPPORTED_HOS_VERSION_MAJOR & 0xFF) << 24) |
|
|
||||||
(static_cast<u64>(ATMOSPHERE_SUPPORTED_HOS_VERSION_MINOR & 0xFF) << 16) |
|
|
||||||
(static_cast<u64>(ATMOSPHERE_SUPPORTED_HOS_VERSION_MICRO & 0xFF) << 8);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
return SmcResult::InvalidArgument;
|
return SmcResult::InvalidArgument;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,18 +40,16 @@ namespace ams::secmon::smc {
|
|||||||
Package2Hash = 17,
|
Package2Hash = 17,
|
||||||
|
|
||||||
/* Extension config items for exosphere. */
|
/* Extension config items for exosphere. */
|
||||||
ExosphereApiVersion = 65000,
|
ExosphereApiVersion = 65000,
|
||||||
ExosphereNeedsReboot = 65001,
|
ExosphereNeedsReboot = 65001,
|
||||||
ExosphereNeedsShutdown = 65002,
|
ExosphereNeedsShutdown = 65002,
|
||||||
ExosphereGitCommitHash = 65003,
|
ExosphereGitCommitHash = 65003,
|
||||||
ExosphereHasRcmBugPatch = 65004,
|
ExosphereHasRcmBugPatch = 65004,
|
||||||
ExosphereBlankProdInfo = 65005,
|
ExosphereBlankProdInfo = 65005,
|
||||||
ExosphereAllowCalWrites = 65006,
|
ExosphereAllowCalWrites = 65006,
|
||||||
ExosphereEmummcType = 65007,
|
ExosphereEmummcType = 65007,
|
||||||
ExospherePayloadAddress = 65008,
|
ExospherePayloadAddress = 65008,
|
||||||
ExosphereLogConfiguration = 65009,
|
ExosphereLogConfiguration = 65009,
|
||||||
ExosphereForceEnableUsb30 = 65010,
|
|
||||||
ExosphereSupportedHosVersion = 65011,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
SmcResult SmcGetConfigUser(SmcArguments &args);
|
SmcResult SmcGetConfigUser(SmcArguments &args);
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
%rename link old_link
|
%rename link old_link
|
||||||
|
|
||||||
*link:
|
*link:
|
||||||
%(old_link) -T %:getenv(TOPDIR /sdmmc_test.ld) --gc-sections --nmagic
|
%(old_link) -T %:getenv(TOPDIR /sdmmc_test.ld) --gc-sections --nmagic -nostdlib -nostartfiles
|
||||||
|
|
||||||
|
*startfile:
|
||||||
|
crti%O%s crtbegin%O%s
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ namespace ams::warmboot {
|
|||||||
void Main(const Metadata *metadata) {
|
void Main(const Metadata *metadata) {
|
||||||
/* Ensure that we're running under vaguely sane conditions. */
|
/* Ensure that we're running under vaguely sane conditions. */
|
||||||
AMS_ABORT_UNLESS(metadata->magic == Metadata::Magic);
|
AMS_ABORT_UNLESS(metadata->magic == Metadata::Magic);
|
||||||
|
AMS_ABORT_UNLESS(metadata->target_firmware <= ams::TargetFirmware_Max);
|
||||||
|
|
||||||
/* Restrict the bpmp's access to dram. */
|
/* Restrict the bpmp's access to dram. */
|
||||||
if (metadata->target_firmware >= TargetFirmware_4_0_0) {
|
if (metadata->target_firmware >= TargetFirmware_4_0_0) {
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
%rename link old_link
|
%rename link old_link
|
||||||
|
|
||||||
*link:
|
*link:
|
||||||
%(old_link) -T %:getenv(TOPDIR /warmboot.ld) --gc-sections --nmagic
|
%(old_link) -T %:getenv(TOPDIR /warmboot.ld) --gc-sections --nmagic -nostdlib -nostartfiles
|
||||||
|
|
||||||
|
*startfile:
|
||||||
|
crti%O%s crtbegin%O%s
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
SUBFOLDERS := fusee-primary fusee-secondary
|
SUBFOLDERS := fusee-primary fusee-mtc fusee-secondary
|
||||||
|
|
||||||
TOPTARGETS := all clean
|
TOPTARGETS := all clean
|
||||||
|
|
||||||
|
|||||||
@@ -1,77 +0,0 @@
|
|||||||
/*-----------------------------------------------------------------------/
|
|
||||||
/ Low level disk interface modlue include file (C)ChaN, 2019 /
|
|
||||||
/-----------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#ifndef _DISKIO_DEFINED
|
|
||||||
#define _DISKIO_DEFINED
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Status of Disk Functions */
|
|
||||||
typedef BYTE DSTATUS;
|
|
||||||
|
|
||||||
/* Results of Disk Functions */
|
|
||||||
typedef enum {
|
|
||||||
RES_OK = 0, /* 0: Successful */
|
|
||||||
RES_ERROR, /* 1: R/W Error */
|
|
||||||
RES_WRPRT, /* 2: Write Protected */
|
|
||||||
RES_NOTRDY, /* 3: Not Ready */
|
|
||||||
RES_PARERR /* 4: Invalid Parameter */
|
|
||||||
} DRESULT;
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------*/
|
|
||||||
/* Prototypes for disk control functions */
|
|
||||||
|
|
||||||
|
|
||||||
DSTATUS disk_initialize (BYTE pdrv);
|
|
||||||
DSTATUS disk_status (BYTE pdrv);
|
|
||||||
DRESULT disk_read (BYTE pdrv, BYTE* buff, LBA_t sector, UINT count);
|
|
||||||
DRESULT disk_write (BYTE pdrv, const BYTE* buff, LBA_t sector, UINT count);
|
|
||||||
DRESULT disk_ioctl (BYTE pdrv, BYTE cmd, void* buff);
|
|
||||||
|
|
||||||
|
|
||||||
/* Disk Status Bits (DSTATUS) */
|
|
||||||
|
|
||||||
#define STA_NOINIT 0x01 /* Drive not initialized */
|
|
||||||
#define STA_NODISK 0x02 /* No medium in the drive */
|
|
||||||
#define STA_PROTECT 0x04 /* Write protected */
|
|
||||||
|
|
||||||
|
|
||||||
/* Command code for disk_ioctrl fucntion */
|
|
||||||
|
|
||||||
/* Generic command (Used by FatFs) */
|
|
||||||
#define CTRL_SYNC 0 /* Complete pending write process (needed at FF_FS_READONLY == 0) */
|
|
||||||
#define GET_SECTOR_COUNT 1 /* Get media size (needed at FF_USE_MKFS == 1) */
|
|
||||||
#define GET_SECTOR_SIZE 2 /* Get sector size (needed at FF_MAX_SS != FF_MIN_SS) */
|
|
||||||
#define GET_BLOCK_SIZE 3 /* Get erase block size (needed at FF_USE_MKFS == 1) */
|
|
||||||
#define CTRL_TRIM 4 /* Inform device that the data on the block of sectors is no longer used (needed at FF_USE_TRIM == 1) */
|
|
||||||
|
|
||||||
/* Generic command (Not used by FatFs) */
|
|
||||||
#define CTRL_POWER 5 /* Get/Set power status */
|
|
||||||
#define CTRL_LOCK 6 /* Lock/Unlock media removal */
|
|
||||||
#define CTRL_EJECT 7 /* Eject media */
|
|
||||||
#define CTRL_FORMAT 8 /* Create physical format on the media */
|
|
||||||
|
|
||||||
/* MMC/SDC specific ioctl command */
|
|
||||||
#define MMC_GET_TYPE 10 /* Get card type */
|
|
||||||
#define MMC_GET_CSD 11 /* Get CSD */
|
|
||||||
#define MMC_GET_CID 12 /* Get CID */
|
|
||||||
#define MMC_GET_OCR 13 /* Get OCR */
|
|
||||||
#define MMC_GET_SDSTAT 14 /* Get SD status */
|
|
||||||
#define ISDIO_READ 55 /* Read data form SD iSDIO register */
|
|
||||||
#define ISDIO_WRITE 56 /* Write data to SD iSDIO register */
|
|
||||||
#define ISDIO_MRITE 57 /* Masked write data to SD iSDIO register */
|
|
||||||
|
|
||||||
/* ATA/CF specific ioctl command */
|
|
||||||
#define ATA_GET_REV 20 /* Get F/W revision */
|
|
||||||
#define ATA_GET_MODEL 21 /* Get model name */
|
|
||||||
#define ATA_GET_SN 22 /* Get serial number */
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,426 +0,0 @@
|
|||||||
/*----------------------------------------------------------------------------/
|
|
||||||
/ FatFs - Generic FAT Filesystem module R0.14 /
|
|
||||||
/-----------------------------------------------------------------------------/
|
|
||||||
/
|
|
||||||
/ Copyright (C) 2019, ChaN, all right reserved.
|
|
||||||
/
|
|
||||||
/ FatFs module is an open source software. Redistribution and use of FatFs in
|
|
||||||
/ source and binary forms, with or without modification, are permitted provided
|
|
||||||
/ that the following condition is met:
|
|
||||||
|
|
||||||
/ 1. Redistributions of source code must retain the above copyright notice,
|
|
||||||
/ this condition and the following disclaimer.
|
|
||||||
/
|
|
||||||
/ This software is provided by the copyright holder and contributors "AS IS"
|
|
||||||
/ and any warranties related to this software are DISCLAIMED.
|
|
||||||
/ The copyright owner or contributors be NOT LIABLE for any damages caused
|
|
||||||
/ by use of this software.
|
|
||||||
/
|
|
||||||
/----------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef FF_DEFINED
|
|
||||||
#define FF_DEFINED 86606 /* Revision ID */
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "ffconf.h" /* FatFs configuration options */
|
|
||||||
|
|
||||||
#if FF_DEFINED != FFCONF_DEF
|
|
||||||
#error Wrong configuration file (ffconf.h).
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Integer types used for FatFs API */
|
|
||||||
|
|
||||||
#if defined(_WIN32) /* Main development platform */
|
|
||||||
#define FF_INTDEF 2
|
|
||||||
#include <windows.h>
|
|
||||||
typedef unsigned __int64 QWORD;
|
|
||||||
#elif (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__cplusplus) /* C99 or later */
|
|
||||||
#define FF_INTDEF 2
|
|
||||||
#include <stdint.h>
|
|
||||||
typedef unsigned int UINT; /* int must be 16-bit or 32-bit */
|
|
||||||
typedef unsigned char BYTE; /* char must be 8-bit */
|
|
||||||
typedef uint16_t WORD; /* 16-bit unsigned integer */
|
|
||||||
typedef uint32_t DWORD; /* 32-bit unsigned integer */
|
|
||||||
typedef uint64_t QWORD; /* 64-bit unsigned integer */
|
|
||||||
typedef WORD WCHAR; /* UTF-16 character type */
|
|
||||||
#else /* Earlier than C99 */
|
|
||||||
#define FF_INTDEF 1
|
|
||||||
typedef unsigned int UINT; /* int must be 16-bit or 32-bit */
|
|
||||||
typedef unsigned char BYTE; /* char must be 8-bit */
|
|
||||||
typedef unsigned short WORD; /* 16-bit unsigned integer */
|
|
||||||
typedef unsigned long DWORD; /* 32-bit unsigned integer */
|
|
||||||
typedef WORD WCHAR; /* UTF-16 character type */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Definitions of volume management */
|
|
||||||
|
|
||||||
#if FF_MULTI_PARTITION /* Multiple partition configuration */
|
|
||||||
typedef struct {
|
|
||||||
BYTE pd; /* Physical drive number */
|
|
||||||
BYTE pt; /* Partition: 0:Auto detect, 1-4:Forced partition) */
|
|
||||||
} PARTITION;
|
|
||||||
extern PARTITION VolToPart[]; /* Volume - Partition mapping table */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if FF_STR_VOLUME_ID
|
|
||||||
#ifndef FF_VOLUME_STRS
|
|
||||||
extern const char* VolumeStr[FF_VOLUMES]; /* User defied volume ID */
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Type of path name strings on FatFs API */
|
|
||||||
|
|
||||||
#ifndef _INC_TCHAR
|
|
||||||
#define _INC_TCHAR
|
|
||||||
|
|
||||||
#if FF_USE_LFN && FF_LFN_UNICODE == 1 /* Unicode in UTF-16 encoding */
|
|
||||||
typedef WCHAR TCHAR;
|
|
||||||
#define _T(x) L ## x
|
|
||||||
#define _TEXT(x) L ## x
|
|
||||||
#elif FF_USE_LFN && FF_LFN_UNICODE == 2 /* Unicode in UTF-8 encoding */
|
|
||||||
typedef char TCHAR;
|
|
||||||
#define _T(x) u8 ## x
|
|
||||||
#define _TEXT(x) u8 ## x
|
|
||||||
#elif FF_USE_LFN && FF_LFN_UNICODE == 3 /* Unicode in UTF-32 encoding */
|
|
||||||
typedef DWORD TCHAR;
|
|
||||||
#define _T(x) U ## x
|
|
||||||
#define _TEXT(x) U ## x
|
|
||||||
#elif FF_USE_LFN && (FF_LFN_UNICODE < 0 || FF_LFN_UNICODE > 3)
|
|
||||||
#error Wrong FF_LFN_UNICODE setting
|
|
||||||
#else /* ANSI/OEM code in SBCS/DBCS */
|
|
||||||
typedef char TCHAR;
|
|
||||||
#define _T(x) x
|
|
||||||
#define _TEXT(x) x
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Type of file size and LBA variables */
|
|
||||||
|
|
||||||
#if FF_FS_EXFAT
|
|
||||||
#if FF_INTDEF != 2
|
|
||||||
#error exFAT feature wants C99 or later
|
|
||||||
#endif
|
|
||||||
typedef QWORD FSIZE_t;
|
|
||||||
#if FF_LBA64
|
|
||||||
typedef QWORD LBA_t;
|
|
||||||
#else
|
|
||||||
typedef DWORD LBA_t;
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
#if FF_LBA64
|
|
||||||
#error exFAT needs to be enabled when enable 64-bit LBA
|
|
||||||
#endif
|
|
||||||
typedef DWORD FSIZE_t;
|
|
||||||
typedef DWORD LBA_t;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Filesystem object structure (FATFS) */
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
BYTE fs_type; /* Filesystem type (0:not mounted) */
|
|
||||||
BYTE pdrv; /* Associated physical drive */
|
|
||||||
BYTE n_fats; /* Number of FATs (1 or 2) */
|
|
||||||
BYTE wflag; /* win[] flag (b0:dirty) */
|
|
||||||
BYTE fsi_flag; /* FSINFO flags (b7:disabled, b0:dirty) */
|
|
||||||
WORD id; /* Volume mount ID */
|
|
||||||
WORD n_rootdir; /* Number of root directory entries (FAT12/16) */
|
|
||||||
WORD csize; /* Cluster size [sectors] */
|
|
||||||
#if FF_MAX_SS != FF_MIN_SS
|
|
||||||
WORD ssize; /* Sector size (512, 1024, 2048 or 4096) */
|
|
||||||
#endif
|
|
||||||
#if FF_USE_LFN
|
|
||||||
WCHAR* lfnbuf; /* LFN working buffer */
|
|
||||||
#endif
|
|
||||||
#if FF_FS_EXFAT
|
|
||||||
BYTE* dirbuf; /* Directory entry block scratchpad buffer for exFAT */
|
|
||||||
#endif
|
|
||||||
#if FF_FS_REENTRANT
|
|
||||||
FF_SYNC_t sobj; /* Identifier of sync object */
|
|
||||||
#endif
|
|
||||||
#if !FF_FS_READONLY
|
|
||||||
DWORD last_clst; /* Last allocated cluster */
|
|
||||||
DWORD free_clst; /* Number of free clusters */
|
|
||||||
#endif
|
|
||||||
#if FF_FS_RPATH
|
|
||||||
DWORD cdir; /* Current directory start cluster (0:root) */
|
|
||||||
#if FF_FS_EXFAT
|
|
||||||
DWORD cdc_scl; /* Containing directory start cluster (invalid when cdir is 0) */
|
|
||||||
DWORD cdc_size; /* b31-b8:Size of containing directory, b7-b0: Chain status */
|
|
||||||
DWORD cdc_ofs; /* Offset in the containing directory (invalid when cdir is 0) */
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
DWORD n_fatent; /* Number of FAT entries (number of clusters + 2) */
|
|
||||||
DWORD fsize; /* Size of an FAT [sectors] */
|
|
||||||
LBA_t volbase; /* Volume base sector */
|
|
||||||
LBA_t fatbase; /* FAT base sector */
|
|
||||||
LBA_t dirbase; /* Root directory base sector/cluster */
|
|
||||||
LBA_t database; /* Data base sector */
|
|
||||||
#if FF_FS_EXFAT
|
|
||||||
LBA_t bitbase; /* Allocation bitmap base sector */
|
|
||||||
#endif
|
|
||||||
LBA_t winsect; /* Current sector appearing in the win[] */
|
|
||||||
BYTE win[FF_MAX_SS]; /* Disk access window for Directory, FAT (and file data at tiny cfg) */
|
|
||||||
} FATFS;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Object ID and allocation information (FFOBJID) */
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
FATFS* fs; /* Pointer to the hosting volume of this object */
|
|
||||||
WORD id; /* Hosting volume mount ID */
|
|
||||||
BYTE attr; /* Object attribute */
|
|
||||||
BYTE stat; /* Object chain status (b1-0: =0:not contiguous, =2:contiguous, =3:fragmented in this session, b2:sub-directory stretched) */
|
|
||||||
DWORD sclust; /* Object data start cluster (0:no cluster or root directory) */
|
|
||||||
FSIZE_t objsize; /* Object size (valid when sclust != 0) */
|
|
||||||
#if FF_FS_EXFAT
|
|
||||||
DWORD n_cont; /* Size of first fragment - 1 (valid when stat == 3) */
|
|
||||||
DWORD n_frag; /* Size of last fragment needs to be written to FAT (valid when not zero) */
|
|
||||||
DWORD c_scl; /* Containing directory start cluster (valid when sclust != 0) */
|
|
||||||
DWORD c_size; /* b31-b8:Size of containing directory, b7-b0: Chain status (valid when c_scl != 0) */
|
|
||||||
DWORD c_ofs; /* Offset in the containing directory (valid when file object and sclust != 0) */
|
|
||||||
#endif
|
|
||||||
#if FF_FS_LOCK
|
|
||||||
UINT lockid; /* File lock ID origin from 1 (index of file semaphore table Files[]) */
|
|
||||||
#endif
|
|
||||||
} FFOBJID;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* File object structure (FIL) */
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
FFOBJID obj; /* Object identifier (must be the 1st member to detect invalid object pointer) */
|
|
||||||
BYTE flag; /* File status flags */
|
|
||||||
BYTE err; /* Abort flag (error code) */
|
|
||||||
FSIZE_t fptr; /* File read/write pointer (Zeroed on file open) */
|
|
||||||
DWORD clust; /* Current cluster of fpter (invalid when fptr is 0) */
|
|
||||||
LBA_t sect; /* Sector number appearing in buf[] (0:invalid) */
|
|
||||||
#if !FF_FS_READONLY
|
|
||||||
LBA_t dir_sect; /* Sector number containing the directory entry (not used at exFAT) */
|
|
||||||
BYTE* dir_ptr; /* Pointer to the directory entry in the win[] (not used at exFAT) */
|
|
||||||
#endif
|
|
||||||
#if FF_USE_FASTSEEK
|
|
||||||
DWORD* cltbl; /* Pointer to the cluster link map table (nulled on open, set by application) */
|
|
||||||
#endif
|
|
||||||
#if !FF_FS_TINY
|
|
||||||
BYTE buf[FF_MAX_SS]; /* File private data read/write window */
|
|
||||||
#endif
|
|
||||||
} FIL;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Directory object structure (DIR) */
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
FFOBJID obj; /* Object identifier */
|
|
||||||
DWORD dptr; /* Current read/write offset */
|
|
||||||
DWORD clust; /* Current cluster */
|
|
||||||
LBA_t sect; /* Current sector (0:Read operation has terminated) */
|
|
||||||
BYTE* dir; /* Pointer to the directory item in the win[] */
|
|
||||||
BYTE fn[12]; /* SFN (in/out) {body[8],ext[3],status[1]} */
|
|
||||||
#if FF_USE_LFN
|
|
||||||
DWORD blk_ofs; /* Offset of current entry block being processed (0xFFFFFFFF:Invalid) */
|
|
||||||
#endif
|
|
||||||
#if FF_USE_FIND
|
|
||||||
const TCHAR* pat; /* Pointer to the name matching pattern */
|
|
||||||
#endif
|
|
||||||
} DIR;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* File information structure (FILINFO) */
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
FSIZE_t fsize; /* File size */
|
|
||||||
WORD fdate; /* Modified date */
|
|
||||||
WORD ftime; /* Modified time */
|
|
||||||
BYTE fattrib; /* File attribute */
|
|
||||||
#if FF_USE_LFN
|
|
||||||
TCHAR altname[FF_SFN_BUF + 1];/* Altenative file name */
|
|
||||||
TCHAR fname[FF_LFN_BUF + 1]; /* Primary file name */
|
|
||||||
#else
|
|
||||||
TCHAR fname[12 + 1]; /* File name */
|
|
||||||
#endif
|
|
||||||
} FILINFO;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Format parameter structure (MKFS_PARM) */
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
BYTE fmt; /* Format option (FM_FAT, FM_FAT32, FM_EXFAT and FM_SFD) */
|
|
||||||
BYTE n_fat; /* Number of FATs */
|
|
||||||
UINT align; /* Data area alignment (sector) */
|
|
||||||
UINT n_root; /* Number of root directory entries */
|
|
||||||
DWORD au_size; /* Cluster size (byte) */
|
|
||||||
} MKFS_PARM;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* File function return code (FRESULT) */
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
FR_OK = 0, /* (0) Succeeded */
|
|
||||||
FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */
|
|
||||||
FR_INT_ERR, /* (2) Assertion failed */
|
|
||||||
FR_NOT_READY, /* (3) The physical drive cannot work */
|
|
||||||
FR_NO_FILE, /* (4) Could not find the file */
|
|
||||||
FR_NO_PATH, /* (5) Could not find the path */
|
|
||||||
FR_INVALID_NAME, /* (6) The path name format is invalid */
|
|
||||||
FR_DENIED, /* (7) Access denied due to prohibited access or directory full */
|
|
||||||
FR_EXIST, /* (8) Access denied due to prohibited access */
|
|
||||||
FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */
|
|
||||||
FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
|
|
||||||
FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
|
|
||||||
FR_NOT_ENABLED, /* (12) The volume has no work area */
|
|
||||||
FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */
|
|
||||||
FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any problem */
|
|
||||||
FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
|
|
||||||
FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */
|
|
||||||
FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
|
|
||||||
FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > FF_FS_LOCK */
|
|
||||||
FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
|
|
||||||
} FRESULT;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------*/
|
|
||||||
/* FatFs module application interface */
|
|
||||||
|
|
||||||
FRESULT f_open (FIL* fp, const TCHAR* path, BYTE mode); /* Open or create a file */
|
|
||||||
FRESULT f_close (FIL* fp); /* Close an open file object */
|
|
||||||
FRESULT f_read (FIL* fp, void* buff, UINT btr, UINT* br); /* Read data from the file */
|
|
||||||
FRESULT f_write (FIL* fp, const void* buff, UINT btw, UINT* bw); /* Write data to the file */
|
|
||||||
FRESULT f_lseek (FIL* fp, FSIZE_t ofs); /* Move file pointer of the file object */
|
|
||||||
FRESULT f_truncate (FIL* fp); /* Truncate the file */
|
|
||||||
FRESULT f_sync (FIL* fp); /* Flush cached data of the writing file */
|
|
||||||
FRESULT f_opendir (DIR* dp, const TCHAR* path); /* Open a directory */
|
|
||||||
FRESULT f_closedir (DIR* dp); /* Close an open directory */
|
|
||||||
FRESULT f_readdir (DIR* dp, FILINFO* fno); /* Read a directory item */
|
|
||||||
FRESULT f_findfirst (DIR* dp, FILINFO* fno, const TCHAR* path, const TCHAR* pattern); /* Find first file */
|
|
||||||
FRESULT f_findnext (DIR* dp, FILINFO* fno); /* Find next file */
|
|
||||||
FRESULT f_mkdir (const TCHAR* path); /* Create a sub directory */
|
|
||||||
FRESULT f_unlink (const TCHAR* path); /* Delete an existing file or directory */
|
|
||||||
FRESULT f_rename (const TCHAR* path_old, const TCHAR* path_new); /* Rename/Move a file or directory */
|
|
||||||
FRESULT f_stat (const TCHAR* path, FILINFO* fno); /* Get file status */
|
|
||||||
FRESULT f_chmod (const TCHAR* path, BYTE attr, BYTE mask); /* Change attribute of a file/dir */
|
|
||||||
FRESULT f_utime (const TCHAR* path, const FILINFO* fno); /* Change timestamp of a file/dir */
|
|
||||||
FRESULT f_chdir (const TCHAR* path); /* Change current directory */
|
|
||||||
FRESULT f_chdrive (const TCHAR* path); /* Change current drive */
|
|
||||||
FRESULT f_getcwd (TCHAR* buff, UINT len); /* Get current directory */
|
|
||||||
FRESULT f_getfree (const TCHAR* path, DWORD* nclst, FATFS** fatfs); /* Get number of free clusters on the drive */
|
|
||||||
FRESULT f_getlabel (const TCHAR* path, TCHAR* label, DWORD* vsn); /* Get volume label */
|
|
||||||
FRESULT f_setlabel (const TCHAR* label); /* Set volume label */
|
|
||||||
FRESULT f_forward (FIL* fp, UINT(*func)(const BYTE*,UINT), UINT btf, UINT* bf); /* Forward data to the stream */
|
|
||||||
FRESULT f_expand (FIL* fp, FSIZE_t fsz, BYTE opt); /* Allocate a contiguous block to the file */
|
|
||||||
FRESULT f_mount (FATFS* fs, const TCHAR* path, BYTE opt); /* Mount/Unmount a logical drive */
|
|
||||||
FRESULT f_mkfs (const TCHAR* path, const MKFS_PARM* opt, void* work, UINT len); /* Create a FAT volume */
|
|
||||||
FRESULT f_fdisk (BYTE pdrv, const LBA_t ptbl[], void* work); /* Divide a physical drive into some partitions */
|
|
||||||
FRESULT f_setcp (WORD cp); /* Set current code page */
|
|
||||||
int f_putc (TCHAR c, FIL* fp); /* Put a character to the file */
|
|
||||||
int f_puts (const TCHAR* str, FIL* cp); /* Put a string to the file */
|
|
||||||
int f_printf (FIL* fp, const TCHAR* str, ...); /* Put a formatted string to the file */
|
|
||||||
TCHAR* f_gets (TCHAR* buff, int len, FIL* fp); /* Get a string from the file */
|
|
||||||
|
|
||||||
#define f_eof(fp) ((int)((fp)->fptr == (fp)->obj.objsize))
|
|
||||||
#define f_error(fp) ((fp)->err)
|
|
||||||
#define f_tell(fp) ((fp)->fptr)
|
|
||||||
#define f_size(fp) ((fp)->obj.objsize)
|
|
||||||
#define f_rewind(fp) f_lseek((fp), 0)
|
|
||||||
#define f_rewinddir(dp) f_readdir((dp), 0)
|
|
||||||
#define f_rmdir(path) f_unlink(path)
|
|
||||||
#define f_unmount(path) f_mount(0, path, 0)
|
|
||||||
|
|
||||||
#ifndef EOF
|
|
||||||
#define EOF (-1)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------*/
|
|
||||||
/* Additional user defined functions */
|
|
||||||
|
|
||||||
/* RTC function */
|
|
||||||
#if !FF_FS_READONLY && !FF_FS_NORTC
|
|
||||||
DWORD get_fattime (void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* LFN support functions */
|
|
||||||
#if FF_USE_LFN >= 1 /* Code conversion (defined in unicode.c) */
|
|
||||||
WCHAR ff_oem2uni (WCHAR oem, WORD cp); /* OEM code to Unicode conversion */
|
|
||||||
WCHAR ff_uni2oem (DWORD uni, WORD cp); /* Unicode to OEM code conversion */
|
|
||||||
DWORD ff_wtoupper (DWORD uni); /* Unicode upper-case conversion */
|
|
||||||
#endif
|
|
||||||
#if FF_USE_LFN == 3 /* Dynamic memory allocation */
|
|
||||||
void* ff_memalloc (UINT msize); /* Allocate memory block */
|
|
||||||
void ff_memfree (void* mblock); /* Free memory block */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Sync functions */
|
|
||||||
#if FF_FS_REENTRANT
|
|
||||||
int ff_cre_syncobj (BYTE vol, FF_SYNC_t* sobj); /* Create a sync object */
|
|
||||||
int ff_req_grant (FF_SYNC_t sobj); /* Lock sync object */
|
|
||||||
void ff_rel_grant (FF_SYNC_t sobj); /* Unlock sync object */
|
|
||||||
int ff_del_syncobj (FF_SYNC_t sobj); /* Delete a sync object */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------*/
|
|
||||||
/* Flags and offset address */
|
|
||||||
|
|
||||||
|
|
||||||
/* File access mode and open method flags (3rd argument of f_open) */
|
|
||||||
#define FA_READ 0x01
|
|
||||||
#define FA_WRITE 0x02
|
|
||||||
#define FA_OPEN_EXISTING 0x00
|
|
||||||
#define FA_CREATE_NEW 0x04
|
|
||||||
#define FA_CREATE_ALWAYS 0x08
|
|
||||||
#define FA_OPEN_ALWAYS 0x10
|
|
||||||
#define FA_OPEN_APPEND 0x30
|
|
||||||
|
|
||||||
/* Fast seek controls (2nd argument of f_lseek) */
|
|
||||||
#define CREATE_LINKMAP ((FSIZE_t)0 - 1)
|
|
||||||
|
|
||||||
/* Format options (2nd argument of f_mkfs) */
|
|
||||||
#define FM_FAT 0x01
|
|
||||||
#define FM_FAT32 0x02
|
|
||||||
#define FM_EXFAT 0x04
|
|
||||||
#define FM_ANY 0x07
|
|
||||||
#define FM_SFD 0x08
|
|
||||||
|
|
||||||
/* Filesystem type (FATFS.fs_type) */
|
|
||||||
#define FS_FAT12 1
|
|
||||||
#define FS_FAT16 2
|
|
||||||
#define FS_FAT32 3
|
|
||||||
#define FS_EXFAT 4
|
|
||||||
|
|
||||||
/* File attribute bits for directory entry (FILINFO.fattrib) */
|
|
||||||
#define AM_RDO 0x01 /* Read only */
|
|
||||||
#define AM_HID 0x02 /* Hidden */
|
|
||||||
#define AM_SYS 0x04 /* System */
|
|
||||||
#define AM_DIR 0x10 /* Directory */
|
|
||||||
#define AM_ARC 0x20 /* Archive */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* FF_DEFINED */
|
|
||||||
@@ -1,170 +0,0 @@
|
|||||||
/*------------------------------------------------------------------------*/
|
|
||||||
/* Sample Code of OS Dependent Functions for FatFs */
|
|
||||||
/* (C)ChaN, 2018 */
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "ff.h"
|
|
||||||
|
|
||||||
|
|
||||||
#if FF_USE_LFN == 3 /* Dynamic memory allocation */
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
/* Allocate a memory block */
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
void* ff_memalloc ( /* Returns pointer to the allocated memory block (null if not enough core) */
|
|
||||||
UINT msize /* Number of bytes to allocate */
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return malloc(msize); /* Allocate a new memory block with POSIX API */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
/* Free a memory block */
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
void ff_memfree (
|
|
||||||
void* mblock /* Pointer to the memory block to free (nothing to do if null) */
|
|
||||||
)
|
|
||||||
{
|
|
||||||
free(mblock); /* Free the memory block with POSIX API */
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if FF_FS_REENTRANT /* Mutal exclusion */
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
/* Create a Synchronization Object */
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
/* This function is called in f_mount() function to create a new
|
|
||||||
/ synchronization object for the volume, such as semaphore and mutex.
|
|
||||||
/ When a 0 is returned, the f_mount() function fails with FR_INT_ERR.
|
|
||||||
*/
|
|
||||||
|
|
||||||
//const osMutexDef_t Mutex[FF_VOLUMES]; /* Table of CMSIS-RTOS mutex */
|
|
||||||
|
|
||||||
|
|
||||||
int ff_cre_syncobj ( /* 1:Function succeeded, 0:Could not create the sync object */
|
|
||||||
BYTE vol, /* Corresponding volume (logical drive number) */
|
|
||||||
FF_SYNC_t* sobj /* Pointer to return the created sync object */
|
|
||||||
)
|
|
||||||
{
|
|
||||||
/* Win32 */
|
|
||||||
*sobj = CreateMutex(NULL, FALSE, NULL);
|
|
||||||
return (int)(*sobj != INVALID_HANDLE_VALUE);
|
|
||||||
|
|
||||||
/* uITRON */
|
|
||||||
// T_CSEM csem = {TA_TPRI,1,1};
|
|
||||||
// *sobj = acre_sem(&csem);
|
|
||||||
// return (int)(*sobj > 0);
|
|
||||||
|
|
||||||
/* uC/OS-II */
|
|
||||||
// OS_ERR err;
|
|
||||||
// *sobj = OSMutexCreate(0, &err);
|
|
||||||
// return (int)(err == OS_NO_ERR);
|
|
||||||
|
|
||||||
/* FreeRTOS */
|
|
||||||
// *sobj = xSemaphoreCreateMutex();
|
|
||||||
// return (int)(*sobj != NULL);
|
|
||||||
|
|
||||||
/* CMSIS-RTOS */
|
|
||||||
// *sobj = osMutexCreate(&Mutex[vol]);
|
|
||||||
// return (int)(*sobj != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
/* Delete a Synchronization Object */
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
/* This function is called in f_mount() function to delete a synchronization
|
|
||||||
/ object that created with ff_cre_syncobj() function. When a 0 is returned,
|
|
||||||
/ the f_mount() function fails with FR_INT_ERR.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int ff_del_syncobj ( /* 1:Function succeeded, 0:Could not delete due to an error */
|
|
||||||
FF_SYNC_t sobj /* Sync object tied to the logical drive to be deleted */
|
|
||||||
)
|
|
||||||
{
|
|
||||||
/* Win32 */
|
|
||||||
return (int)CloseHandle(sobj);
|
|
||||||
|
|
||||||
/* uITRON */
|
|
||||||
// return (int)(del_sem(sobj) == E_OK);
|
|
||||||
|
|
||||||
/* uC/OS-II */
|
|
||||||
// OS_ERR err;
|
|
||||||
// OSMutexDel(sobj, OS_DEL_ALWAYS, &err);
|
|
||||||
// return (int)(err == OS_NO_ERR);
|
|
||||||
|
|
||||||
/* FreeRTOS */
|
|
||||||
// vSemaphoreDelete(sobj);
|
|
||||||
// return 1;
|
|
||||||
|
|
||||||
/* CMSIS-RTOS */
|
|
||||||
// return (int)(osMutexDelete(sobj) == osOK);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
/* Request Grant to Access the Volume */
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
/* This function is called on entering file functions to lock the volume.
|
|
||||||
/ When a 0 is returned, the file function fails with FR_TIMEOUT.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int ff_req_grant ( /* 1:Got a grant to access the volume, 0:Could not get a grant */
|
|
||||||
FF_SYNC_t sobj /* Sync object to wait */
|
|
||||||
)
|
|
||||||
{
|
|
||||||
/* Win32 */
|
|
||||||
return (int)(WaitForSingleObject(sobj, FF_FS_TIMEOUT) == WAIT_OBJECT_0);
|
|
||||||
|
|
||||||
/* uITRON */
|
|
||||||
// return (int)(wai_sem(sobj) == E_OK);
|
|
||||||
|
|
||||||
/* uC/OS-II */
|
|
||||||
// OS_ERR err;
|
|
||||||
// OSMutexPend(sobj, FF_FS_TIMEOUT, &err));
|
|
||||||
// return (int)(err == OS_NO_ERR);
|
|
||||||
|
|
||||||
/* FreeRTOS */
|
|
||||||
// return (int)(xSemaphoreTake(sobj, FF_FS_TIMEOUT) == pdTRUE);
|
|
||||||
|
|
||||||
/* CMSIS-RTOS */
|
|
||||||
// return (int)(osMutexWait(sobj, FF_FS_TIMEOUT) == osOK);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
/* Release Grant to Access the Volume */
|
|
||||||
/*------------------------------------------------------------------------*/
|
|
||||||
/* This function is called on leaving file functions to unlock the volume.
|
|
||||||
*/
|
|
||||||
|
|
||||||
void ff_rel_grant (
|
|
||||||
FF_SYNC_t sobj /* Sync object to be signaled */
|
|
||||||
)
|
|
||||||
{
|
|
||||||
/* Win32 */
|
|
||||||
ReleaseMutex(sobj);
|
|
||||||
|
|
||||||
/* uITRON */
|
|
||||||
// sig_sem(sobj);
|
|
||||||
|
|
||||||
/* uC/OS-II */
|
|
||||||
// OSMutexPost(sobj);
|
|
||||||
|
|
||||||
/* FreeRTOS */
|
|
||||||
// xSemaphoreGive(sobj);
|
|
||||||
|
|
||||||
/* CMSIS-RTOS */
|
|
||||||
// osMutexRelease(sobj);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ endif
|
|||||||
|
|
||||||
TOPDIR ?= $(CURDIR)
|
TOPDIR ?= $(CURDIR)
|
||||||
|
|
||||||
AMS ?= $(TOPDIR)/../../../
|
AMS := $(TOPDIR)/../../
|
||||||
include $(DEVKITARM)/base_rules
|
include $(DEVKITARM)/base_rules
|
||||||
|
|
||||||
AMSBRANCH := $(shell git symbolic-ref --short HEAD)
|
AMSBRANCH := $(shell git symbolic-ref --short HEAD)
|
||||||
@@ -27,9 +27,9 @@ endif
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
TARGET := $(notdir $(CURDIR))
|
TARGET := $(notdir $(CURDIR))
|
||||||
BUILD := build
|
BUILD := build
|
||||||
SOURCES := src ../../../fusee/common ../../../fusee/common/display ../../../fusee/common/fatfs ../../../fusee/common/sdmmc
|
SOURCES := src src/lib src/display
|
||||||
DATA := data
|
DATA := data
|
||||||
INCLUDES := include ../../../libraries/libvapours/include
|
INCLUDES := include ../../libraries/libvapours/include
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# options for code generation
|
# options for code generation
|
||||||
@@ -39,7 +39,6 @@ DEFINES := -D__BPMP__ -DFUSEE_STAGE1_SRC -DATMOSPHERE_GIT_BRANCH=\"$(AMSBRANCH)\
|
|||||||
|
|
||||||
CFLAGS := \
|
CFLAGS := \
|
||||||
-g \
|
-g \
|
||||||
-gdwarf-4 \
|
|
||||||
-O2 \
|
-O2 \
|
||||||
-fomit-frame-pointer \
|
-fomit-frame-pointer \
|
||||||
-ffunction-sections \
|
-ffunction-sections \
|
||||||
@@ -47,9 +46,6 @@ CFLAGS := \
|
|||||||
-std=gnu11 \
|
-std=gnu11 \
|
||||||
-Werror \
|
-Werror \
|
||||||
-Wall \
|
-Wall \
|
||||||
-Wno-array-bounds \
|
|
||||||
-Wno-stringop-overflow \
|
|
||||||
-Wno-stringop-overread \
|
|
||||||
-fstrict-volatile-bitfields \
|
-fstrict-volatile-bitfields \
|
||||||
$(ARCH) $(DEFINES)
|
$(ARCH) $(DEFINES)
|
||||||
|
|
||||||
@@ -57,8 +53,8 @@ CFLAGS += $(INCLUDE)
|
|||||||
|
|
||||||
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11
|
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11
|
||||||
|
|
||||||
ASFLAGS := -g -gdwarf-4 $(ARCH)
|
ASFLAGS := -g $(ARCH)
|
||||||
LDFLAGS = -specs=$(TOPDIR)/linker.specs -g -gdwarf-4 $(ARCH) -Wl,-Map,$(notdir $*.map)
|
LDFLAGS = -specs=$(TOPDIR)/linker.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
|
||||||
|
|
||||||
LIBS :=
|
LIBS :=
|
||||||
|
|
||||||
@@ -80,15 +76,14 @@ export OUTPUT := $(CURDIR)/$(TARGET)
|
|||||||
export TOPDIR := $(CURDIR)
|
export TOPDIR := $(CURDIR)
|
||||||
|
|
||||||
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
|
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
|
||||||
$(foreach dir,$(DATA),$(CURDIR)/$(dir)) \
|
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
|
||||||
$(AMS)/exosphere/program/rebootstub
|
|
||||||
|
|
||||||
export DEPSDIR := $(CURDIR)/$(BUILD)
|
export DEPSDIR := $(CURDIR)/$(BUILD)
|
||||||
|
|
||||||
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
|
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
|
||||||
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
|
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
|
||||||
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
|
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
|
||||||
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) rebootstub.bin
|
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# use CXX for linking C++ projects, CC for standard C
|
# use CXX for linking C++ projects, CC for standard C
|
||||||
@@ -115,25 +110,20 @@ export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
|||||||
|
|
||||||
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
|
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
|
||||||
|
|
||||||
.PHONY: $(BUILD) clean all check_rebootstub
|
.PHONY: $(BUILD) clean all
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
all: check_rebootstub $(BUILD)
|
all: $(BUILD)
|
||||||
|
|
||||||
check_rebootstub:
|
$(BUILD):
|
||||||
@$(MAKE) -C $(AMS)/exosphere/program/rebootstub all
|
|
||||||
|
|
||||||
$(BUILD): check_rebootstub
|
|
||||||
@[ -d $@ ] || mkdir -p $@
|
@[ -d $@ ] || mkdir -p $@
|
||||||
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
|
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
clean:
|
clean:
|
||||||
@echo clean ...
|
@echo clean ...
|
||||||
@$(MAKE) -C $(AMS)/exosphere/program/rebootstub clean
|
|
||||||
@rm -fr $(BUILD) $(TARGET).bin $(TARGET).elf
|
@rm -fr $(BUILD) $(TARGET).bin $(TARGET).elf
|
||||||
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
else
|
else
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
@@ -143,11 +133,7 @@ DEPENDS := $(OFILES:.o=.d)
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# main targets
|
# main targets
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
all : $(OUTPUT).lz4
|
all : $(OUTPUT).bin
|
||||||
|
|
||||||
$(OUTPUT).lz4 : $(OUTPUT).bin
|
|
||||||
@python ../lz4_compress.py $(OUTPUT).bin $(OUTPUT).lz4
|
|
||||||
@echo built ... $(notdir $@)
|
|
||||||
|
|
||||||
$(OUTPUT).bin : $(OUTPUT).elf
|
$(OUTPUT).bin : $(OUTPUT).elf
|
||||||
$(OBJCOPY) -S -O binary $< $@
|
$(OBJCOPY) -S -O binary $< $@
|
||||||
170
fusee/fusee-mtc/linker.ld
Normal file
170
fusee/fusee-mtc/linker.ld
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
||||||
|
OUTPUT_ARCH(arm)
|
||||||
|
ENTRY(_start)
|
||||||
|
|
||||||
|
PHDRS
|
||||||
|
{
|
||||||
|
crt0 PT_LOAD;
|
||||||
|
main PT_LOAD;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mostly copied from https://github.com/devkitPro/buildscripts/blob/master/dkarm-eabi/crtls/3dsx.ld */
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
NULL : ORIGIN = 0x00000000, LENGTH = 0x1000
|
||||||
|
main : ORIGIN = 0xF0000000, LENGTH = 0x10000000
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
PROVIDE(__start__ = 0xF0000000);
|
||||||
|
PROVIDE(__stack_bottom__ = 0x90010000);
|
||||||
|
PROVIDE(__stack_top__ = 0x90020000);
|
||||||
|
PROVIDE(__heap_start__ = 0x90020000);
|
||||||
|
PROVIDE(__heap_end__ = 0xA0020000);
|
||||||
|
|
||||||
|
. = __start__;
|
||||||
|
|
||||||
|
.crt0 :
|
||||||
|
{
|
||||||
|
KEEP( *(.text.start) )
|
||||||
|
KEEP( *(.init) )
|
||||||
|
. = ALIGN(32);
|
||||||
|
} >main :crt0
|
||||||
|
|
||||||
|
.text :
|
||||||
|
{
|
||||||
|
. = ALIGN(32);
|
||||||
|
/* .text */
|
||||||
|
*(.text)
|
||||||
|
*(.text.*)
|
||||||
|
*(.glue_7)
|
||||||
|
*(.glue_7t)
|
||||||
|
*(.stub)
|
||||||
|
*(.gnu.warning)
|
||||||
|
*(.gnu.linkonce.t*)
|
||||||
|
|
||||||
|
/* .fini */
|
||||||
|
KEEP( *(.fini) )
|
||||||
|
. = ALIGN(8);
|
||||||
|
} >main :main
|
||||||
|
|
||||||
|
.rodata :
|
||||||
|
{
|
||||||
|
*(.rodata)
|
||||||
|
*(.roda)
|
||||||
|
*(.rodata.*)
|
||||||
|
*all.rodata*(*)
|
||||||
|
*(.gnu.linkonce.r*)
|
||||||
|
SORT(CONSTRUCTORS)
|
||||||
|
. = ALIGN(8);
|
||||||
|
} >main
|
||||||
|
|
||||||
|
.preinit_array :
|
||||||
|
{
|
||||||
|
PROVIDE (__preinit_array_start = .);
|
||||||
|
KEEP (*(.preinit_array))
|
||||||
|
PROVIDE (__preinit_array_end = .);
|
||||||
|
} >main
|
||||||
|
|
||||||
|
.init_array ALIGN(4) :
|
||||||
|
{
|
||||||
|
PROVIDE (__init_array_start = .);
|
||||||
|
KEEP (*(SORT(.init_array.*)))
|
||||||
|
KEEP (*(.init_array))
|
||||||
|
PROVIDE (__init_array_end = .);
|
||||||
|
} >main
|
||||||
|
|
||||||
|
.fini_array ALIGN(4) :
|
||||||
|
{
|
||||||
|
PROVIDE (__fini_array_start = .);
|
||||||
|
KEEP (*(.fini_array))
|
||||||
|
KEEP (*(SORT(.fini_array.*)))
|
||||||
|
PROVIDE (__fini_array_end = .);
|
||||||
|
} >main
|
||||||
|
|
||||||
|
.ctors ALIGN(4) :
|
||||||
|
{
|
||||||
|
KEEP (*crtbegin.o(.ctors)) /* MUST be first -- GCC requires it */
|
||||||
|
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
||||||
|
KEEP (*(SORT(.ctors.*)))
|
||||||
|
KEEP (*(.ctors))
|
||||||
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
|
} >main
|
||||||
|
|
||||||
|
.dtors ALIGN(4) :
|
||||||
|
{
|
||||||
|
KEEP (*crtbegin.o(.dtors))
|
||||||
|
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
||||||
|
KEEP (*(SORT(.dtors.*)))
|
||||||
|
KEEP (*(.dtors))
|
||||||
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
|
} >main
|
||||||
|
|
||||||
|
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) __exidx_start = ABSOLUTE(.);} >main
|
||||||
|
ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) __exidx_end = ABSOLUTE(.);} >main
|
||||||
|
|
||||||
|
.data :
|
||||||
|
{
|
||||||
|
*(.data)
|
||||||
|
*(.data.*)
|
||||||
|
*(.gnu.linkonce.d*)
|
||||||
|
CONSTRUCTORS
|
||||||
|
. = ALIGN(32);
|
||||||
|
} >main
|
||||||
|
|
||||||
|
.bss (NOLOAD) :
|
||||||
|
{
|
||||||
|
. = ALIGN(32);
|
||||||
|
PROVIDE (__bss_start__ = ABSOLUTE(.));
|
||||||
|
*(.dynbss)
|
||||||
|
*(.bss)
|
||||||
|
*(.bss.*)
|
||||||
|
*(.gnu.linkonce.b*)
|
||||||
|
*(COMMON)
|
||||||
|
. = ALIGN(32);
|
||||||
|
PROVIDE (__bss_end__ = ABSOLUTE(.));
|
||||||
|
} >main :NONE
|
||||||
|
__end__ = ABSOLUTE(.) ;
|
||||||
|
|
||||||
|
|
||||||
|
/* ==================
|
||||||
|
==== Metadata ====
|
||||||
|
================== */
|
||||||
|
|
||||||
|
/* Discard sections that difficult post-processing */
|
||||||
|
/DISCARD/ : { *(.group .comment .note) }
|
||||||
|
|
||||||
|
/* Stabs debugging sections. */
|
||||||
|
.stab 0 : { *(.stab) }
|
||||||
|
.stabstr 0 : { *(.stabstr) }
|
||||||
|
.stab.excl 0 : { *(.stab.excl) }
|
||||||
|
.stab.exclstr 0 : { *(.stab.exclstr) }
|
||||||
|
.stab.index 0 : { *(.stab.index) }
|
||||||
|
.stab.indexstr 0 : { *(.stab.indexstr) }
|
||||||
|
|
||||||
|
/* DWARF debug sections.
|
||||||
|
Symbols in the DWARF debugging sections are relative to the beginning
|
||||||
|
of the section so we begin them at 0. */
|
||||||
|
|
||||||
|
/* DWARF 1 */
|
||||||
|
.debug 0 : { *(.debug) }
|
||||||
|
.line 0 : { *(.line) }
|
||||||
|
|
||||||
|
/* GNU DWARF 1 extensions */
|
||||||
|
.debug_srcinfo 0 : { *(.debug_srcinfo) }
|
||||||
|
.debug_sfnames 0 : { *(.debug_sfnames) }
|
||||||
|
|
||||||
|
/* DWARF 1.1 and DWARF 2 */
|
||||||
|
.debug_aranges 0 : { *(.debug_aranges) }
|
||||||
|
.debug_pubnames 0 : { *(.debug_pubnames) }
|
||||||
|
|
||||||
|
/* DWARF 2 */
|
||||||
|
.debug_info 0 : { *(.debug_info) }
|
||||||
|
.debug_abbrev 0 : { *(.debug_abbrev) }
|
||||||
|
.debug_line 0 : { *(.debug_line) }
|
||||||
|
.debug_frame 0 : { *(.debug_frame) }
|
||||||
|
.debug_str 0 : { *(.debug_str) }
|
||||||
|
.debug_loc 0 : { *(.debug_loc) }
|
||||||
|
.debug_macinfo 0 : { *(.debug_macinfo) }
|
||||||
|
}
|
||||||
@@ -35,7 +35,6 @@ static inline uint32_t get_clk_source_reg(CarDevice dev) {
|
|||||||
case CARDEVICE_KFUSE: return 0;
|
case CARDEVICE_KFUSE: return 0;
|
||||||
case CARDEVICE_CL_DVFS: return 0;
|
case CARDEVICE_CL_DVFS: return 0;
|
||||||
case CARDEVICE_CORESIGHT: return 0x1D4;
|
case CARDEVICE_CORESIGHT: return 0x1D4;
|
||||||
case CARDEVICE_MSELECT: return 0x3B4;
|
|
||||||
case CARDEVICE_ACTMON: return 0x3E8;
|
case CARDEVICE_ACTMON: return 0x3E8;
|
||||||
case CARDEVICE_BPMP: return 0;
|
case CARDEVICE_BPMP: return 0;
|
||||||
default: generic_panic();
|
default: generic_panic();
|
||||||
@@ -59,7 +58,6 @@ static inline uint32_t get_clk_source_val(CarDevice dev) {
|
|||||||
case CARDEVICE_KFUSE: return 0;
|
case CARDEVICE_KFUSE: return 0;
|
||||||
case CARDEVICE_CL_DVFS: return 0;
|
case CARDEVICE_CL_DVFS: return 0;
|
||||||
case CARDEVICE_CORESIGHT: return 0;
|
case CARDEVICE_CORESIGHT: return 0;
|
||||||
case CARDEVICE_MSELECT: return 0;
|
|
||||||
case CARDEVICE_ACTMON: return 6;
|
case CARDEVICE_ACTMON: return 6;
|
||||||
case CARDEVICE_BPMP: return 0;
|
case CARDEVICE_BPMP: return 0;
|
||||||
default: generic_panic();
|
default: generic_panic();
|
||||||
@@ -83,7 +81,6 @@ static inline uint32_t get_clk_source_div(CarDevice dev) {
|
|||||||
case CARDEVICE_KFUSE: return 0;
|
case CARDEVICE_KFUSE: return 0;
|
||||||
case CARDEVICE_CL_DVFS: return 0;
|
case CARDEVICE_CL_DVFS: return 0;
|
||||||
case CARDEVICE_CORESIGHT: return 4;
|
case CARDEVICE_CORESIGHT: return 4;
|
||||||
case CARDEVICE_MSELECT: return 6;
|
|
||||||
case CARDEVICE_ACTMON: return 0;
|
case CARDEVICE_ACTMON: return 0;
|
||||||
case CARDEVICE_BPMP: return 0;
|
case CARDEVICE_BPMP: return 0;
|
||||||
default: generic_panic();
|
default: generic_panic();
|
||||||
@@ -37,28 +37,23 @@
|
|||||||
|
|
||||||
/* Clock and reset devices. */
|
/* Clock and reset devices. */
|
||||||
typedef enum {
|
typedef enum {
|
||||||
CARDEVICE_BPMP = ((0 << 5) | 0x1),
|
CARDEVICE_UARTA = ((0 << 5) | 0x6),
|
||||||
CARDEVICE_UARTA = ((0 << 5) | 0x6),
|
CARDEVICE_UARTB = ((0 << 5) | 0x7),
|
||||||
CARDEVICE_UARTB = ((0 << 5) | 0x7),
|
CARDEVICE_UARTC = ((1 << 5) | 0x17),
|
||||||
CARDEVICE_I2C1 = ((0 << 5) | 0xC),
|
CARDEVICE_I2C1 = ((0 << 5) | 0xC),
|
||||||
CARDEVICE_USBD = ((0 << 5) | 0x16),
|
CARDEVICE_I2C5 = ((1 << 5) | 0xF),
|
||||||
CARDEVICE_HOST1X = ((0 << 5) | 0x1C),
|
CARDEVICE_TZRAM = ((3 << 5) | 0x1E),
|
||||||
CARDEVICE_AHBDMA = ((1 << 5) | 0x1),
|
CARDEVICE_SE = ((3 << 5) | 0x1F),
|
||||||
CARDEVICE_APBDMA = ((1 << 5) | 0x2),
|
CARDEVICE_HOST1X = ((0 << 5) | 0x1C),
|
||||||
CARDEVICE_KFUSE = ((1 << 5) | 0x8),
|
CARDEVICE_TSEC = ((2 << 5) | 0x13),
|
||||||
CARDEVICE_I2C5 = ((1 << 5) | 0xF),
|
CARDEVICE_SOR_SAFE = ((6 << 5) | 0x1E),
|
||||||
CARDEVICE_UARTC = ((1 << 5) | 0x17),
|
CARDEVICE_SOR0 = ((5 << 5) | 0x16),
|
||||||
CARDEVICE_USB2 = ((1 << 5) | 0x1A),
|
CARDEVICE_SOR1 = ((5 << 5) | 0x17),
|
||||||
|
CARDEVICE_KFUSE = ((1 << 5) | 0x8),
|
||||||
|
CARDEVICE_CL_DVFS = ((4 << 5) | 0x1B),
|
||||||
CARDEVICE_CORESIGHT = ((2 << 5) | 0x9),
|
CARDEVICE_CORESIGHT = ((2 << 5) | 0x9),
|
||||||
CARDEVICE_TSEC = ((2 << 5) | 0x13),
|
CARDEVICE_ACTMON = ((3 << 5) | 0x17),
|
||||||
CARDEVICE_MSELECT = ((3 << 5) | 0x8),
|
CARDEVICE_BPMP = ((0 << 5) | 0x1)
|
||||||
CARDEVICE_ACTMON = ((3 << 5) | 0x17),
|
|
||||||
CARDEVICE_TZRAM = ((3 << 5) | 0x1E),
|
|
||||||
CARDEVICE_SE = ((3 << 5) | 0x1F),
|
|
||||||
CARDEVICE_CL_DVFS = ((4 << 5) | 0x1B),
|
|
||||||
CARDEVICE_SOR0 = ((5 << 5) | 0x16),
|
|
||||||
CARDEVICE_SOR1 = ((5 << 5) | 0x17),
|
|
||||||
CARDEVICE_SOR_SAFE = ((6 << 5) | 0x1E),
|
|
||||||
} CarDevice;
|
} CarDevice;
|
||||||
|
|
||||||
/* Clock/Reset Controller (CLK_RST_CONTROLLER_) regs */
|
/* Clock/Reset Controller (CLK_RST_CONTROLLER_) regs */
|
||||||
@@ -102,31 +97,31 @@ typedef struct {
|
|||||||
uint32_t pllc_out;
|
uint32_t pllc_out;
|
||||||
uint32_t pllc_misc0;
|
uint32_t pllc_misc0;
|
||||||
uint32_t pllc_misc1;
|
uint32_t pllc_misc1;
|
||||||
|
|
||||||
/* PLLM 0x90-0x9c */
|
/* PLLM 0x90-0x9c */
|
||||||
uint32_t pllm_base;
|
uint32_t pllm_base;
|
||||||
uint32_t pllm_out;
|
uint32_t pllm_out;
|
||||||
uint32_t pllm_misc1;
|
uint32_t pllm_misc1;
|
||||||
uint32_t pllm_misc2;
|
uint32_t pllm_misc2;
|
||||||
|
|
||||||
/* PLLP 0xa0-0xac */
|
/* PLLP 0xa0-0xac */
|
||||||
uint32_t pllp_base;
|
uint32_t pllp_base;
|
||||||
uint32_t pllp_outa;
|
uint32_t pllp_outa;
|
||||||
uint32_t pllp_outb;
|
uint32_t pllp_outb;
|
||||||
uint32_t pllp_misc;
|
uint32_t pllp_misc;
|
||||||
|
|
||||||
/* PLLA 0xb0-0xbc */
|
/* PLLA 0xb0-0xbc */
|
||||||
uint32_t plla_base;
|
uint32_t plla_base;
|
||||||
uint32_t plla_out;
|
uint32_t plla_out;
|
||||||
uint32_t plla_misc0;
|
uint32_t plla_misc0;
|
||||||
uint32_t plla_misc1;
|
uint32_t plla_misc1;
|
||||||
|
|
||||||
/* PLLU 0xc0-0xcc */
|
/* PLLU 0xc0-0xcc */
|
||||||
uint32_t pllu_base;
|
uint32_t pllu_base;
|
||||||
uint32_t pllu_out;
|
uint32_t pllu_out;
|
||||||
uint32_t pllu_misc1;
|
uint32_t pllu_misc1;
|
||||||
uint32_t pllu_misc2;
|
uint32_t pllu_misc2;
|
||||||
|
|
||||||
/* PLLD 0xd0-0xdc */
|
/* PLLD 0xd0-0xdc */
|
||||||
uint32_t plld_base;
|
uint32_t plld_base;
|
||||||
uint32_t plld_out;
|
uint32_t plld_out;
|
||||||
@@ -136,13 +131,13 @@ typedef struct {
|
|||||||
/* PLLX 0xe0-0xe4 */
|
/* PLLX 0xe0-0xe4 */
|
||||||
uint32_t pllx_base;
|
uint32_t pllx_base;
|
||||||
uint32_t pllx_misc;
|
uint32_t pllx_misc;
|
||||||
|
|
||||||
/* PLLE 0xe8-0xf4 */
|
/* PLLE 0xe8-0xf4 */
|
||||||
uint32_t plle_base;
|
uint32_t plle_base;
|
||||||
uint32_t plle_misc;
|
uint32_t plle_misc;
|
||||||
uint32_t plle_ss_cntl1;
|
uint32_t plle_ss_cntl1;
|
||||||
uint32_t plle_ss_cntl2;
|
uint32_t plle_ss_cntl2;
|
||||||
|
|
||||||
uint32_t lvl2_clk_gate_ovra; /* _LVL2_CLK_GATE_OVRA_0, 0xf8 */
|
uint32_t lvl2_clk_gate_ovra; /* _LVL2_CLK_GATE_OVRA_0, 0xf8 */
|
||||||
uint32_t lvl2_clk_gate_ovrb; /* _LVL2_CLK_GATE_OVRB_0, 0xfc */
|
uint32_t lvl2_clk_gate_ovrb; /* _LVL2_CLK_GATE_OVRB_0, 0xfc */
|
||||||
|
|
||||||
@@ -193,7 +188,7 @@ typedef struct {
|
|||||||
uint32_t _0x1e0[5];
|
uint32_t _0x1e0[5];
|
||||||
uint32_t clk_source_tsec; /* _CLK_SOURCE_TSEC_0, 0x1f4 */
|
uint32_t clk_source_tsec; /* _CLK_SOURCE_TSEC_0, 0x1f4 */
|
||||||
uint32_t _0x1f8;
|
uint32_t _0x1f8;
|
||||||
|
|
||||||
uint32_t clk_spare2; /* _CLK_SPARE2_0, 0x1fc */
|
uint32_t clk_spare2; /* _CLK_SPARE2_0, 0x1fc */
|
||||||
uint32_t _0x200[32];
|
uint32_t _0x200[32];
|
||||||
|
|
||||||
@@ -262,7 +257,7 @@ typedef struct {
|
|||||||
uint32_t lvl2_clk_gate_ovrc; /* _LVL2_CLK_GATE_OVRC, 0x3a0 */
|
uint32_t lvl2_clk_gate_ovrc; /* _LVL2_CLK_GATE_OVRC, 0x3a0 */
|
||||||
uint32_t lvl2_clk_gate_ovrd; /* _LVL2_CLK_GATE_OVRD, 0x3a4 */
|
uint32_t lvl2_clk_gate_ovrd; /* _LVL2_CLK_GATE_OVRD, 0x3a4 */
|
||||||
uint32_t _0x3a8[2];
|
uint32_t _0x3a8[2];
|
||||||
|
|
||||||
uint32_t _0x3b0;
|
uint32_t _0x3b0;
|
||||||
uint32_t clk_source_mselect; /* _CLK_SOURCE_MSELECT_0, 0x3b4 */
|
uint32_t clk_source_mselect; /* _CLK_SOURCE_MSELECT_0, 0x3b4 */
|
||||||
uint32_t clk_source_tsensor; /* _CLK_SOURCE_TSENSOR_0, 0x3b8 */
|
uint32_t clk_source_tsensor; /* _CLK_SOURCE_TSENSOR_0, 0x3b8 */
|
||||||
@@ -288,7 +283,7 @@ typedef struct {
|
|||||||
uint32_t clk_source_sata_oob; /* _CLK_SOURCE_SATA_OOB_0, 0x420 */
|
uint32_t clk_source_sata_oob; /* _CLK_SOURCE_SATA_OOB_0, 0x420 */
|
||||||
uint32_t clk_source_sata; /* _CLK_SOURCE_SATA_0, 0x424 */
|
uint32_t clk_source_sata; /* _CLK_SOURCE_SATA_0, 0x424 */
|
||||||
uint32_t clk_source_hda; /* _CLK_SOURCE_HDA_0, 0x428 */
|
uint32_t clk_source_hda; /* _CLK_SOURCE_HDA_0, 0x428 */
|
||||||
uint32_t clk_source_se; /* _CLK_SOURCE_SE_0, 0x42c */
|
uint32_t _0x42c;
|
||||||
|
|
||||||
/* _RST_DEV_V/W_SET_0 0x430-0x43c */
|
/* _RST_DEV_V/W_SET_0 0x430-0x43c */
|
||||||
uint32_t rst_dev_v_set;
|
uint32_t rst_dev_v_set;
|
||||||
@@ -376,13 +371,13 @@ typedef struct {
|
|||||||
uint32_t spare_reg0; /* _SPARE_REG0_0, 0x55c */
|
uint32_t spare_reg0; /* _SPARE_REG0_0, 0x55c */
|
||||||
uint32_t audio_sync_clk_dmic1; /* _AUDIO_SYNC_CLK_DMIC1_0, 0x560 */
|
uint32_t audio_sync_clk_dmic1; /* _AUDIO_SYNC_CLK_DMIC1_0, 0x560 */
|
||||||
uint32_t audio_sync_clk_dmic2; /* _AUDIO_SYNC_CLK_DMIC2_0, 0x564 */
|
uint32_t audio_sync_clk_dmic2; /* _AUDIO_SYNC_CLK_DMIC2_0, 0x564 */
|
||||||
|
|
||||||
uint32_t _0x568[2];
|
uint32_t _0x568[2];
|
||||||
uint32_t plld2_ss_cfg; /* _PLLD2_SS_CFG, 0x570 */
|
uint32_t plld2_ss_cfg; /* _PLLD2_SS_CFG, 0x570 */
|
||||||
uint32_t plld2_ss_ctrl1; /* _PLLD2_SS_CTRL1_0, 0x574 */
|
uint32_t plld2_ss_ctrl1; /* _PLLD2_SS_CTRL1_0, 0x574 */
|
||||||
uint32_t plld2_ss_ctrl2; /* _PLLD2_SS_CTRL2_0, 0x578 */
|
uint32_t plld2_ss_ctrl2; /* _PLLD2_SS_CTRL2_0, 0x578 */
|
||||||
uint32_t _0x57c[5];
|
uint32_t _0x57c[5];
|
||||||
|
|
||||||
uint32_t plldp_base; /* _PLLDP_BASE, 0x590*/
|
uint32_t plldp_base; /* _PLLDP_BASE, 0x590*/
|
||||||
uint32_t plldp_misc; /* _PLLDP_MISC, 0x594 */
|
uint32_t plldp_misc; /* _PLLDP_MISC, 0x594 */
|
||||||
uint32_t plldp_ss_cfg; /* _PLLDP_SS_CFG, 0x598 */
|
uint32_t plldp_ss_cfg; /* _PLLDP_SS_CFG, 0x598 */
|
||||||
@@ -404,7 +399,7 @@ typedef struct {
|
|||||||
uint32_t pllx_misc4; /* _PLLX_MISC_4_0, 0x5f0 */
|
uint32_t pllx_misc4; /* _PLLX_MISC_4_0, 0x5f0 */
|
||||||
uint32_t pllx_misc5; /* _PLLX_MISC_5_0, 0x5f4 */
|
uint32_t pllx_misc5; /* _PLLX_MISC_5_0, 0x5f4 */
|
||||||
uint32_t _0x5f8[2];
|
uint32_t _0x5f8[2];
|
||||||
|
|
||||||
uint32_t clk_source_xusb_core_host; /* _CLK_SOURCE_XUSB_CORE_HOST_0, 0x600 */
|
uint32_t clk_source_xusb_core_host; /* _CLK_SOURCE_XUSB_CORE_HOST_0, 0x600 */
|
||||||
uint32_t clk_source_xusb_falcon; /* _CLK_SOURCE_XUSB_FALCON_0, 0x604 */
|
uint32_t clk_source_xusb_falcon; /* _CLK_SOURCE_XUSB_FALCON_0, 0x604 */
|
||||||
uint32_t clk_source_xusb_fs; /* _CLK_SOURCE_XUSB_FS_0, 0x608 */
|
uint32_t clk_source_xusb_fs; /* _CLK_SOURCE_XUSB_FS_0, 0x608 */
|
||||||
@@ -433,7 +428,7 @@ typedef struct {
|
|||||||
uint32_t clk_source_uart_fst_mipi_cal; /* _CLK_SOURCE_UART_FST_MIPI_CAL_0, 0x66c */
|
uint32_t clk_source_uart_fst_mipi_cal; /* _CLK_SOURCE_UART_FST_MIPI_CAL_0, 0x66c */
|
||||||
uint32_t _0x670[2];
|
uint32_t _0x670[2];
|
||||||
uint32_t clk_source_vic; /* _CLK_SOURCE_VIC_0, 0x678 */
|
uint32_t clk_source_vic; /* _CLK_SOURCE_VIC_0, 0x678 */
|
||||||
|
|
||||||
uint32_t pllp_outc; /* _PLLP_OUTC_0, 0x67c */
|
uint32_t pllp_outc; /* _PLLP_OUTC_0, 0x67c */
|
||||||
uint32_t pllp_misc1; /* _PLLP_MISC1_0, 0x680 */
|
uint32_t pllp_misc1; /* _PLLP_MISC1_0, 0x680 */
|
||||||
uint32_t _0x684[2];
|
uint32_t _0x684[2];
|
||||||
@@ -444,14 +439,14 @@ typedef struct {
|
|||||||
uint32_t clk_source_nvdec; /* _CLK_SOURCE_NVDEC_0, 0x698 */
|
uint32_t clk_source_nvdec; /* _CLK_SOURCE_NVDEC_0, 0x698 */
|
||||||
uint32_t clk_source_nvjpg; /* _CLK_SOURCE_NVJPG_0, 0x69c */
|
uint32_t clk_source_nvjpg; /* _CLK_SOURCE_NVJPG_0, 0x69c */
|
||||||
uint32_t clk_source_nvenc; /* _CLK_SOURCE_NVENC_0, 0x6a0 */
|
uint32_t clk_source_nvenc; /* _CLK_SOURCE_NVENC_0, 0x6a0 */
|
||||||
|
|
||||||
uint32_t plla1_base; /* _PLLA1_BASE_0, 0x6a4 */
|
uint32_t plla1_base; /* _PLLA1_BASE_0, 0x6a4 */
|
||||||
uint32_t plla1_misc0; /* _PLLA1_MISC_0_0, 0x6a8 */
|
uint32_t plla1_misc0; /* _PLLA1_MISC_0_0, 0x6a8 */
|
||||||
uint32_t plla1_misc1; /* _PLLA1_MISC_1_0, 0x6ac */
|
uint32_t plla1_misc1; /* _PLLA1_MISC_1_0, 0x6ac */
|
||||||
uint32_t plla1_misc2; /* _PLLA1_MISC_2_0, 0x6b0 */
|
uint32_t plla1_misc2; /* _PLLA1_MISC_2_0, 0x6b0 */
|
||||||
uint32_t plla1_misc3; /* _PLLA1_MISC_3_0, 0x6b4 */
|
uint32_t plla1_misc3; /* _PLLA1_MISC_3_0, 0x6b4 */
|
||||||
uint32_t audio_sync_clk_dmic3; /* _AUDIO_SYNC_CLK_DMIC3_0, 0x6b8 */
|
uint32_t audio_sync_clk_dmic3; /* _AUDIO_SYNC_CLK_DMIC3_0, 0x6b8 */
|
||||||
|
|
||||||
uint32_t clk_source_dmic3; /* _CLK_SOURCE_DMIC3_0, 0x6bc */
|
uint32_t clk_source_dmic3; /* _CLK_SOURCE_DMIC3_0, 0x6bc */
|
||||||
uint32_t clk_source_ape; /* _CLK_SOURCE_APE_0, 0x6c0 */
|
uint32_t clk_source_ape; /* _CLK_SOURCE_APE_0, 0x6c0 */
|
||||||
uint32_t clk_source_qspi; /* _CLK_SOURCE_QSPI_0, 0x6c4 */
|
uint32_t clk_source_qspi; /* _CLK_SOURCE_QSPI_0, 0x6c4 */
|
||||||
@@ -460,11 +455,11 @@ typedef struct {
|
|||||||
uint32_t clk_source_pex_sata_usb_rx_byp; /* _CLK_SOURCE_PEX_SATA_USB_RX_BYP_0, 0x6d0 */
|
uint32_t clk_source_pex_sata_usb_rx_byp; /* _CLK_SOURCE_PEX_SATA_USB_RX_BYP_0, 0x6d0 */
|
||||||
uint32_t clk_source_maud; /* _CLK_SOURCE_MAUD_0, 0x6d4 */
|
uint32_t clk_source_maud; /* _CLK_SOURCE_MAUD_0, 0x6d4 */
|
||||||
uint32_t clk_source_tsecb; /* _CLK_SOURCE_TSECB_0, 0x6d8 */
|
uint32_t clk_source_tsecb; /* _CLK_SOURCE_TSECB_0, 0x6d8 */
|
||||||
|
|
||||||
uint32_t clk_cpug_misc1; /* _CLK_CPUG_MISC1_0, 0x6dc */
|
uint32_t clk_cpug_misc1; /* _CLK_CPUG_MISC1_0, 0x6dc */
|
||||||
uint32_t aclk_burst_policy; /* _ACLK_BURST_POLICY_0, 0x6e0 */
|
uint32_t aclk_burst_policy; /* _ACLK_BURST_POLICY_0, 0x6e0 */
|
||||||
uint32_t super_aclk_divider; /* _SUPER_ACLK_DIVIDER_0, 0x6e4 */
|
uint32_t super_aclk_divider; /* _SUPER_ACLK_DIVIDER_0, 0x6e4 */
|
||||||
|
|
||||||
uint32_t nvenc_super_clk_divider; /* _NVENC_SUPER_CLK_DIVIDER_0, 0x6e8 */
|
uint32_t nvenc_super_clk_divider; /* _NVENC_SUPER_CLK_DIVIDER_0, 0x6e8 */
|
||||||
uint32_t vi_super_clk_divider; /* _VI_SUPER_CLK_DIVIDER_0, 0x6ec */
|
uint32_t vi_super_clk_divider; /* _VI_SUPER_CLK_DIVIDER_0, 0x6ec */
|
||||||
uint32_t vic_super_clk_divider; /* _VIC_SUPER_CLK_DIVIDER_0, 0x6f0 */
|
uint32_t vic_super_clk_divider; /* _VIC_SUPER_CLK_DIVIDER_0, 0x6f0 */
|
||||||
@@ -475,7 +470,7 @@ typedef struct {
|
|||||||
uint32_t se_super_clk_divider; /* _SE_SUPER_CLK_DIVIDER_0, 0x704 */
|
uint32_t se_super_clk_divider; /* _SE_SUPER_CLK_DIVIDER_0, 0x704 */
|
||||||
uint32_t tsec_super_clk_divider; /* _TSEC_SUPER_CLK_DIVIDER_0, 0x708 */
|
uint32_t tsec_super_clk_divider; /* _TSEC_SUPER_CLK_DIVIDER_0, 0x708 */
|
||||||
uint32_t tsecb_super_clk_divider; /* _TSECB_SUPER_CLK_DIVIDER_0, 0x70c */
|
uint32_t tsecb_super_clk_divider; /* _TSECB_SUPER_CLK_DIVIDER_0, 0x70c */
|
||||||
|
|
||||||
uint32_t clk_source_uartape; /* _CLK_SOURCE_UARTAPE_0, 0x710 */
|
uint32_t clk_source_uartape; /* _CLK_SOURCE_UARTAPE_0, 0x710 */
|
||||||
uint32_t clk_cpug_misc2; /* _CLK_CPUG_MISC2_0, 0x714 */
|
uint32_t clk_cpug_misc2; /* _CLK_CPUG_MISC2_0, 0x714 */
|
||||||
uint32_t clk_source_dbgapb; /* _CLK_SOURCE_DBGAPB_0, 0x718 */
|
uint32_t clk_source_dbgapb; /* _CLK_SOURCE_DBGAPB_0, 0x718 */
|
||||||
57
fusee/fusee-mtc/src/display/video_fb.h
Normal file
57
fusee/fusee-mtc/src/display/video_fb.h
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* (C) Copyright 1997-2002 ELTEC Elektronik AG
|
||||||
|
* Frank Gottschling <fgottschling@eltec.de>
|
||||||
|
*
|
||||||
|
* See file CREDITS for list of people who contributed to this
|
||||||
|
* project.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License as
|
||||||
|
* published by the Free Software Foundation; either version 2 of
|
||||||
|
* the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||||
|
* MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _VIDEO_FB_H_
|
||||||
|
#define _VIDEO_FB_H_
|
||||||
|
|
||||||
|
#define CONSOLE_BG_COL 0x00
|
||||||
|
#define CONSOLE_FG_COL 0xa0
|
||||||
|
|
||||||
|
/* Try using the small font */
|
||||||
|
#define CONFIG_VIDEO_FONT_SMALL
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Graphic Data Format (GDF) bits for VIDEO_DATA_FORMAT
|
||||||
|
*/
|
||||||
|
#define GDF__8BIT_INDEX 0
|
||||||
|
#define GDF_15BIT_555RGB 1
|
||||||
|
#define GDF_16BIT_565RGB 2
|
||||||
|
#define GDF_32BIT_X888RGB 3
|
||||||
|
#define GDF_24BIT_888RGB 4
|
||||||
|
#define GDF__8BIT_332RGB 5
|
||||||
|
|
||||||
|
#define CONFIG_VIDEO_FB_LITTLE_ENDIAN
|
||||||
|
#define CONFIG_VIDEO_VISIBLE_COLS 720
|
||||||
|
#define CONFIG_VIDEO_VISIBLE_ROWS 1280
|
||||||
|
#define CONFIG_VIDEO_COLS 768
|
||||||
|
#define CONFIG_VIDEO_PIXEL_SIZE 4
|
||||||
|
#define CONFIG_VIDEO_DATA_FORMAT GDF_32BIT_X888RGB /* BGR actually, but w/e */
|
||||||
|
|
||||||
|
int video_get_col(void);
|
||||||
|
int video_get_row(void);
|
||||||
|
|
||||||
|
int video_init(void *fb);
|
||||||
|
int video_resume(void *fb, int row, int col);
|
||||||
|
void video_puts(const char *s);
|
||||||
|
|
||||||
|
#endif /*_VIDEO_FB_H_ */
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -24,6 +24,11 @@
|
|||||||
#include "pmc.h"
|
#include "pmc.h"
|
||||||
#include "timers.h"
|
#include "timers.h"
|
||||||
|
|
||||||
|
/* Prototypes for internal commands. */
|
||||||
|
void fuse_enable_power(void);
|
||||||
|
void fuse_disable_power(void);
|
||||||
|
void fuse_wait_idle(void);
|
||||||
|
|
||||||
/* Initialize the fuse driver */
|
/* Initialize the fuse driver */
|
||||||
void fuse_init(void) {
|
void fuse_init(void) {
|
||||||
/* Make all fuse registers visible, disable the private key and disable programming. */
|
/* Make all fuse registers visible, disable the private key and disable programming. */
|
||||||
@@ -38,7 +43,7 @@ void fuse_disable_private_key(void) {
|
|||||||
fuse->FUSE_PRIVATEKEYDISABLE = 0x10;
|
fuse->FUSE_PRIVATEKEYDISABLE = 0x10;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Disable all fuse programming. */
|
/* Disables all fuse programming. */
|
||||||
void fuse_disable_programming(void) {
|
void fuse_disable_programming(void) {
|
||||||
volatile tegra_fuse_t *fuse = fuse_get_regs();
|
volatile tegra_fuse_t *fuse = fuse_get_regs();
|
||||||
fuse->FUSE_DISABLEREGPROGRAM = 1;
|
fuse->FUSE_DISABLEREGPROGRAM = 1;
|
||||||
@@ -63,14 +68,13 @@ void fuse_disable_power(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Wait for the fuse driver to go idle. */
|
/* Wait for the fuse driver to go idle. */
|
||||||
static void fuse_wait_idle(void) {
|
void fuse_wait_idle(void) {
|
||||||
volatile tegra_fuse_t *fuse = fuse_get_regs();
|
volatile tegra_fuse_t *fuse = fuse_get_regs();
|
||||||
uint32_t ctrl_val = 0;
|
uint32_t ctrl_val = 0;
|
||||||
|
|
||||||
/* Wait for STATE_IDLE */
|
/* Wait for STATE_IDLE */
|
||||||
while ((ctrl_val & (0xF0000)) != 0x40000) {
|
while ((ctrl_val & (0xF0000)) != 0x40000)
|
||||||
ctrl_val = fuse->FUSE_FUSECTRL;
|
ctrl_val = fuse->FUSE_FUSECTRL;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read a fuse from the hardware array. */
|
/* Read a fuse from the hardware array. */
|
||||||
@@ -116,7 +120,7 @@ void fuse_hw_write(uint32_t value, uint32_t addr) {
|
|||||||
fuse_wait_idle();
|
fuse_wait_idle();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sense the fuse hardware array into the fuse cache. */
|
/* Sense the fuse hardware array into the shadow cache. */
|
||||||
void fuse_hw_sense(void) {
|
void fuse_hw_sense(void) {
|
||||||
volatile tegra_fuse_t *fuse = fuse_get_regs();
|
volatile tegra_fuse_t *fuse = fuse_get_regs();
|
||||||
|
|
||||||
@@ -133,68 +137,46 @@ void fuse_hw_sense(void) {
|
|||||||
fuse_wait_idle();
|
fuse_wait_idle();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read the SKU info register. */
|
/* Read the SKU info register from the shadow cache. */
|
||||||
uint32_t fuse_get_sku_info(void) {
|
uint32_t fuse_get_sku_info(void) {
|
||||||
volatile tegra_fuse_chip_common_t *fuse_chip = fuse_chip_common_get_regs();
|
volatile tegra_fuse_chip_t *fuse_chip = fuse_chip_get_regs();
|
||||||
return fuse_chip->FUSE_SKU_INFO;
|
return fuse_chip->FUSE_SKU_INFO;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read the bootrom patch version. */
|
/* Read the bootrom patch version from a register in the shadow cache. */
|
||||||
uint32_t fuse_get_bootrom_patch_version(void) {
|
uint32_t fuse_get_bootrom_patch_version(void) {
|
||||||
volatile tegra_fuse_chip_common_t *fuse_chip = fuse_chip_common_get_regs();
|
volatile tegra_fuse_chip_t *fuse_chip = fuse_chip_get_regs();
|
||||||
return fuse_chip->FUSE_SOC_SPEEDO_1_CALIB;
|
return fuse_chip->FUSE_SOC_SPEEDO_1_CALIB;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read a spare bit register. */
|
/* Read a spare bit register from the shadow cache */
|
||||||
uint32_t fuse_get_spare_bit(uint32_t index) {
|
uint32_t fuse_get_spare_bit(uint32_t idx) {
|
||||||
uint32_t soc_type = fuse_get_soc_type();
|
if (idx < 32) {
|
||||||
if (soc_type == 0) {
|
volatile tegra_fuse_chip_t *fuse_chip = fuse_chip_get_regs();
|
||||||
if (index < 32) {
|
return fuse_chip->FUSE_SPARE_BIT[idx];
|
||||||
volatile tegra_fuse_chip_erista_t *fuse_chip = fuse_chip_erista_get_regs();
|
|
||||||
return fuse_chip->FUSE_SPARE_BIT[index];
|
|
||||||
}
|
|
||||||
} else if (soc_type == 1) {
|
|
||||||
if (index < 30) {
|
|
||||||
volatile tegra_fuse_chip_mariko_t *fuse_chip = fuse_chip_mariko_get_regs();
|
|
||||||
return fuse_chip->FUSE_SPARE_BIT[index];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Read a reserved ODM register. */
|
|
||||||
uint32_t fuse_get_reserved_odm(uint32_t index) {
|
|
||||||
if (index < 8) {
|
|
||||||
volatile tegra_fuse_chip_common_t *fuse_chip = fuse_chip_common_get_regs();
|
|
||||||
return fuse_chip->FUSE_RESERVED_ODM0[index];
|
|
||||||
} else {
|
} else {
|
||||||
uint32_t soc_type = fuse_get_soc_type();
|
return 0;
|
||||||
if (soc_type == 1) {
|
|
||||||
volatile tegra_fuse_chip_mariko_t *fuse_chip = fuse_chip_mariko_get_regs();
|
|
||||||
if (index < 22) {
|
|
||||||
return fuse_chip->FUSE_RESERVED_ODM8[index - 8];
|
|
||||||
} else if (index < 25) {
|
|
||||||
return fuse_chip->FUSE_RESERVED_ODM22[index - 22];
|
|
||||||
} else if (index < 26) {
|
|
||||||
return fuse_chip->FUSE_RESERVED_ODM25;
|
|
||||||
} else if (index < 29) {
|
|
||||||
return fuse_chip->FUSE_RESERVED_ODM26[index - 26];
|
|
||||||
} else if (index < 30) {
|
|
||||||
return fuse_chip->FUSE_RESERVED_ODM29;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the DramId. */
|
/* Read a reserved ODM register from the shadow cache. */
|
||||||
|
uint32_t fuse_get_reserved_odm(uint32_t idx) {
|
||||||
|
if (idx < 8) {
|
||||||
|
volatile tegra_fuse_chip_t *fuse_chip = fuse_chip_get_regs();
|
||||||
|
return fuse_chip->FUSE_RESERVED_ODM[idx];
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the DRAM ID using values in the shadow cache. */
|
||||||
uint32_t fuse_get_dram_id(void) {
|
uint32_t fuse_get_dram_id(void) {
|
||||||
return ((fuse_get_reserved_odm(4) >> 3) & 0x1F);
|
return ((fuse_get_reserved_odm(4) >> 3) & 0x7);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Derive the DeviceId. */
|
/* Derive the Device ID using values in the shadow cache. */
|
||||||
uint64_t fuse_get_device_id(void) {
|
uint64_t fuse_get_device_id(void) {
|
||||||
volatile tegra_fuse_chip_common_t *fuse_chip = fuse_chip_common_get_regs();
|
volatile tegra_fuse_chip_t *fuse_chip = fuse_chip_get_regs();
|
||||||
|
|
||||||
uint64_t device_id = 0;
|
uint64_t device_id = 0;
|
||||||
uint64_t y_coord = fuse_chip->FUSE_OPT_Y_COORDINATE & 0x1FF;
|
uint64_t y_coord = fuse_chip->FUSE_OPT_Y_COORDINATE & 0x1FF;
|
||||||
@@ -218,74 +200,48 @@ uint64_t fuse_get_device_id(void) {
|
|||||||
return device_id;
|
return device_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Derive the HardwareType with firmware specific checks. */
|
/* Derive the Hardware Type using values in the shadow cache. */
|
||||||
uint32_t fuse_get_hardware_type_with_firmware_check(uint32_t target_firmware) {
|
uint32_t fuse_get_hardware_type(uint32_t target_firmware) {
|
||||||
uint32_t fuse_reserved_odm4 = fuse_get_reserved_odm(4);
|
uint32_t fuse_reserved_odm4 = fuse_get_reserved_odm(4);
|
||||||
uint32_t hardware_type = (((fuse_reserved_odm4 >> 7) & 2) | ((fuse_reserved_odm4 >> 2) & 1));
|
uint32_t hardware_type = (((fuse_reserved_odm4 >> 7) & 2) | ((fuse_reserved_odm4 >> 2) & 1));
|
||||||
|
|
||||||
|
/* Firmware from versions 1.0.0 to 3.0.2. */
|
||||||
if (target_firmware < ATMOSPHERE_TARGET_FIRMWARE_4_0_0) {
|
if (target_firmware < ATMOSPHERE_TARGET_FIRMWARE_4_0_0) {
|
||||||
volatile tegra_fuse_chip_common_t *fuse_chip = fuse_chip_common_get_regs();
|
volatile tegra_fuse_chip_t *fuse_chip = fuse_chip_get_regs();
|
||||||
uint32_t fuse_spare_bit9 = (fuse_chip->FUSE_SPARE_BIT[9] & 1);
|
if (hardware_type >= 1) {
|
||||||
|
return (hardware_type > 2) ? 3 : hardware_type - 1;
|
||||||
switch (hardware_type) {
|
} else if ((fuse_chip->FUSE_SPARE_BIT[9] & 1) == 0) {
|
||||||
case 0x00: return (fuse_spare_bit9 == 0) ? 0 : 3;
|
return 0;
|
||||||
case 0x01: return 0; /* HardwareType_Icosa */
|
|
||||||
case 0x02: return 1; /* HardwareType_Copper */
|
|
||||||
default: return 3; /* HardwareType_Undefined */
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
hardware_type |= ((fuse_reserved_odm4 >> 14) & 0x3C);
|
|
||||||
|
|
||||||
if (target_firmware < ATMOSPHERE_TARGET_FIRMWARE_7_0_0) {
|
|
||||||
switch (hardware_type) {
|
|
||||||
case 0x01: return 0; /* HardwareType_Icosa */
|
|
||||||
case 0x02: return 1; /* HardwareType_Copper */
|
|
||||||
case 0x04: return 3; /* HardwareType_Iowa */
|
|
||||||
default: return 4; /* HardwareType_Undefined */
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (target_firmware < ATMOSPHERE_TARGET_FIRMWARE_10_0_0) {
|
return 3;
|
||||||
switch (hardware_type) {
|
|
||||||
case 0x01: return 0; /* HardwareType_Icosa */
|
|
||||||
case 0x02: return 4; /* HardwareType_Calcio */
|
|
||||||
case 0x04: return 3; /* HardwareType_Iowa */
|
|
||||||
case 0x08: return 2; /* HardwareType_Hoag */
|
|
||||||
default: return 0xF; /* HardwareType_Undefined */
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
switch (hardware_type) {
|
|
||||||
case 0x01: return 0; /* HardwareType_Icosa */
|
|
||||||
case 0x02: return 4; /* HardwareType_Calcio */
|
|
||||||
case 0x04: return 3; /* HardwareType_Iowa */
|
|
||||||
case 0x08: return 2; /* HardwareType_Hoag */
|
|
||||||
case 0x10: return 5; /* HardwareType_Five */
|
|
||||||
default: return 0xF; /* HardwareType_Undefined */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
} else if (target_firmware < ATMOSPHERE_TARGET_FIRMWARE_7_0_0) { /* Firmware versions from 4.0.0 to 6.2.0. */
|
||||||
|
static const uint32_t types[] = {0,1,4,3};
|
||||||
|
hardware_type |= ((fuse_reserved_odm4 >> 14) & 0x3C);
|
||||||
|
hardware_type--;
|
||||||
|
return (hardware_type > 3) ? 4 : types[hardware_type];
|
||||||
|
} else { /* Firmware versions from 7.0.0 onwards. */
|
||||||
|
/* Always return 0 in retail. */
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Derive the HardwareType. */
|
/* Derive the Retail Type using values in the shadow cache. */
|
||||||
uint32_t fuse_get_hardware_type(void) {
|
uint32_t fuse_get_retail_type(void) {
|
||||||
return fuse_get_hardware_type_with_firmware_check(ATMOSPHERE_TARGET_FIRMWARE_CURRENT);
|
/* Retail Type = IS_RETAIL | UNIT_TYPE. */
|
||||||
}
|
|
||||||
|
|
||||||
/* Derive the HardwareState. */
|
|
||||||
uint32_t fuse_get_hardware_state(void) {
|
|
||||||
uint32_t fuse_reserved_odm4 = fuse_get_reserved_odm(4);
|
uint32_t fuse_reserved_odm4 = fuse_get_reserved_odm(4);
|
||||||
uint32_t hardware_state = (((fuse_reserved_odm4 >> 7) & 4) | (fuse_reserved_odm4 & 3));
|
uint32_t retail_type = (((fuse_reserved_odm4 >> 7) & 4) | (fuse_reserved_odm4 & 3));
|
||||||
|
if (retail_type == 4) { /* Standard retail unit, IS_RETAIL | 0. */
|
||||||
switch (hardware_state) {
|
return 1;
|
||||||
case 0x03: return 0; /* HardwareState_Development */
|
} else if (retail_type == 3) { /* Standard dev unit, 0 | DEV_UNIT. */
|
||||||
case 0x04: return 1; /* HardwareState_Production */
|
return 0;
|
||||||
default: return 2; /* HardwareState_Undefined */
|
|
||||||
}
|
}
|
||||||
|
return 2; /* IS_RETAIL | DEV_UNIT */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Derive the 16-byte HardwareInfo and copy to output buffer. */
|
/* Derive the 16-byte Hardware Info using values in the shadow cache, and copy to output buffer. */
|
||||||
void fuse_get_hardware_info(void *dst) {
|
void fuse_get_hardware_info(void *dst) {
|
||||||
volatile tegra_fuse_chip_common_t *fuse_chip = fuse_chip_common_get_regs();
|
volatile tegra_fuse_chip_t *fuse_chip = fuse_chip_get_regs();
|
||||||
uint32_t hw_info[0x4];
|
uint32_t hw_info[0x4];
|
||||||
|
|
||||||
uint32_t ops_reserved = fuse_chip->FUSE_OPT_OPS_RESERVED & 0x3F;
|
uint32_t ops_reserved = fuse_chip->FUSE_OPT_OPS_RESERVED & 0x3F;
|
||||||
@@ -305,42 +261,3 @@ void fuse_get_hardware_info(void *dst) {
|
|||||||
|
|
||||||
memcpy(dst, hw_info, 0x10);
|
memcpy(dst, hw_info, 0x10);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if have a new ODM fuse format. */
|
|
||||||
bool fuse_is_new_format(void) {
|
|
||||||
return ((fuse_get_reserved_odm(4) & 0x800) && (fuse_get_reserved_odm(0) == 0x8E61ECAE) && (fuse_get_reserved_odm(1) == 0xF2BA3BB2));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get the DeviceUniqueKeyGeneration. */
|
|
||||||
uint32_t fuse_get_device_unique_key_generation(void) {
|
|
||||||
if (fuse_is_new_format()) {
|
|
||||||
return (fuse_get_reserved_odm(2) & 0x1F);
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get the SocType from the HardwareType. */
|
|
||||||
uint32_t fuse_get_soc_type(void) {
|
|
||||||
switch (fuse_get_hardware_type()) {
|
|
||||||
case 0:
|
|
||||||
case 1:
|
|
||||||
return 0; /* SocType_Erista */
|
|
||||||
case 3:
|
|
||||||
case 2:
|
|
||||||
case 4:
|
|
||||||
case 5:
|
|
||||||
return 1; /* SocType_Mariko */
|
|
||||||
default:
|
|
||||||
return 0xF; /* SocType_Undefined */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get the Regulator type. */
|
|
||||||
uint32_t fuse_get_regulator(void) {
|
|
||||||
if (fuse_get_soc_type() == 1) {
|
|
||||||
return ((fuse_get_reserved_odm(28) & 1) + 1); /* Regulator_Mariko_Max77812_A or Regulator_Mariko_Max77812_B */
|
|
||||||
} else {
|
|
||||||
return 0; /* Regulator_Erista_Max77621 */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
227
fusee/fusee-mtc/src/fuse.h
Normal file
227
fusee/fusee-mtc/src/fuse.h
Normal file
@@ -0,0 +1,227 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018-2020 Atmosphère-NX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FUSEE_FUSE_H
|
||||||
|
#define FUSEE_FUSE_H
|
||||||
|
|
||||||
|
#define FUSE_BASE 0x7000F800
|
||||||
|
#define FUSE_CHIP_BASE (FUSE_BASE + 0x100)
|
||||||
|
#define MAKE_FUSE_REG(n) MAKE_REG32(FUSE_BASE + n)
|
||||||
|
#define MAKE_FUSE_CHIP_REG(n) MAKE_REG32(FUSE_CHIP_BASE + n)
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint32_t FUSE_FUSECTRL;
|
||||||
|
uint32_t FUSE_FUSEADDR;
|
||||||
|
uint32_t FUSE_FUSERDATA;
|
||||||
|
uint32_t FUSE_FUSEWDATA;
|
||||||
|
uint32_t FUSE_FUSETIME_RD1;
|
||||||
|
uint32_t FUSE_FUSETIME_RD2;
|
||||||
|
uint32_t FUSE_FUSETIME_PGM1;
|
||||||
|
uint32_t FUSE_FUSETIME_PGM2;
|
||||||
|
uint32_t FUSE_PRIV2INTFC_START;
|
||||||
|
uint32_t FUSE_FUSEBYPASS;
|
||||||
|
uint32_t FUSE_PRIVATEKEYDISABLE;
|
||||||
|
uint32_t FUSE_DISABLEREGPROGRAM;
|
||||||
|
uint32_t FUSE_WRITE_ACCESS_SW;
|
||||||
|
uint32_t FUSE_PWR_GOOD_SW;
|
||||||
|
uint32_t _0x38;
|
||||||
|
uint32_t FUSE_PRIV2RESHIFT;
|
||||||
|
uint32_t _0x40[0x3];
|
||||||
|
uint32_t FUSE_FUSETIME_RD3;
|
||||||
|
uint32_t _0x50[0xC];
|
||||||
|
uint32_t FUSE_PRIVATE_KEY0_NONZERO;
|
||||||
|
uint32_t FUSE_PRIVATE_KEY1_NONZERO;
|
||||||
|
uint32_t FUSE_PRIVATE_KEY2_NONZERO;
|
||||||
|
uint32_t FUSE_PRIVATE_KEY3_NONZERO;
|
||||||
|
uint32_t FUSE_PRIVATE_KEY4_NONZERO;
|
||||||
|
uint32_t _0x90[0x1C];
|
||||||
|
} tegra_fuse_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint32_t FUSE_PRODUCTION_MODE;
|
||||||
|
uint32_t FUSE_JTAG_SECUREID_VALID;
|
||||||
|
uint32_t FUSE_ODM_LOCK;
|
||||||
|
uint32_t FUSE_OPT_OPENGL_EN;
|
||||||
|
uint32_t FUSE_SKU_INFO;
|
||||||
|
uint32_t FUSE_CPU_SPEEDO_0_CALIB;
|
||||||
|
uint32_t FUSE_CPU_IDDQ_CALIB;
|
||||||
|
uint32_t FUSE_DAC_CRT_CALIB;
|
||||||
|
uint32_t FUSE_DAC_HDTV_CALIB;
|
||||||
|
uint32_t FUSE_DAC_SDTV_CALIB;
|
||||||
|
uint32_t FUSE_OPT_FT_REV;
|
||||||
|
uint32_t FUSE_CPU_SPEEDO_1_CALIB;
|
||||||
|
uint32_t FUSE_CPU_SPEEDO_2_CALIB;
|
||||||
|
uint32_t FUSE_SOC_SPEEDO_0_CALIB;
|
||||||
|
uint32_t FUSE_SOC_SPEEDO_1_CALIB;
|
||||||
|
uint32_t FUSE_SOC_SPEEDO_2_CALIB;
|
||||||
|
uint32_t FUSE_SOC_IDDQ_CALIB;
|
||||||
|
uint32_t FUSE_RESERVED_PRODUCTION_WP;
|
||||||
|
uint32_t FUSE_FA;
|
||||||
|
uint32_t FUSE_RESERVED_PRODUCTION;
|
||||||
|
uint32_t FUSE_HDMI_LANE0_CALIB;
|
||||||
|
uint32_t FUSE_HDMI_LANE1_CALIB;
|
||||||
|
uint32_t FUSE_HDMI_LANE2_CALIB;
|
||||||
|
uint32_t FUSE_HDMI_LANE3_CALIB;
|
||||||
|
uint32_t FUSE_ENCRYPTION_RATE;
|
||||||
|
uint32_t FUSE_PUBLIC_KEY[0x8];
|
||||||
|
uint32_t FUSE_TSENSOR1_CALIB;
|
||||||
|
uint32_t FUSE_TSENSOR2_CALIB;
|
||||||
|
uint32_t FUSE_VSENSOR_CALIB;
|
||||||
|
uint32_t FUSE_OPT_CP_REV;
|
||||||
|
uint32_t FUSE_OPT_PFG;
|
||||||
|
uint32_t FUSE_TSENSOR0_CALIB;
|
||||||
|
uint32_t FUSE_FIRST_BOOTROM_PATCH_SIZE;
|
||||||
|
uint32_t FUSE_SECURITY_MODE;
|
||||||
|
uint32_t FUSE_PRIVATE_KEY[0x5];
|
||||||
|
uint32_t FUSE_ARM_JTAG_DIS;
|
||||||
|
uint32_t FUSE_BOOT_DEVICE_INFO;
|
||||||
|
uint32_t FUSE_RESERVED_SW;
|
||||||
|
uint32_t FUSE_OPT_VP9_DISABLE;
|
||||||
|
uint32_t FUSE_RESERVED_ODM[0x8];
|
||||||
|
uint32_t FUSE_OBS_DIS;
|
||||||
|
uint32_t FUSE_NOR_INFO;
|
||||||
|
uint32_t FUSE_USB_CALIB;
|
||||||
|
uint32_t FUSE_SKU_DIRECT_CONFIG;
|
||||||
|
uint32_t FUSE_KFUSE_PRIVKEY_CTRL;
|
||||||
|
uint32_t FUSE_PACKAGE_INFO;
|
||||||
|
uint32_t FUSE_OPT_VENDOR_CODE;
|
||||||
|
uint32_t FUSE_OPT_FAB_CODE;
|
||||||
|
uint32_t FUSE_OPT_LOT_CODE_0;
|
||||||
|
uint32_t FUSE_OPT_LOT_CODE_1;
|
||||||
|
uint32_t FUSE_OPT_WAFER_ID;
|
||||||
|
uint32_t FUSE_OPT_X_COORDINATE;
|
||||||
|
uint32_t FUSE_OPT_Y_COORDINATE;
|
||||||
|
uint32_t FUSE_OPT_SEC_DEBUG_EN;
|
||||||
|
uint32_t FUSE_OPT_OPS_RESERVED;
|
||||||
|
uint32_t FUSE_SATA_CALIB;
|
||||||
|
uint32_t FUSE_GPU_IDDQ_CALIB;
|
||||||
|
uint32_t FUSE_TSENSOR3_CALIB;
|
||||||
|
uint32_t FUSE_SKU_BOND_OUT_L;
|
||||||
|
uint32_t FUSE_SKU_BOND_OUT_H;
|
||||||
|
uint32_t FUSE_SKU_BOND_OUT_U;
|
||||||
|
uint32_t FUSE_SKU_BOND_OUT_V;
|
||||||
|
uint32_t FUSE_SKU_BOND_OUT_W;
|
||||||
|
uint32_t FUSE_OPT_SAMPLE_TYPE;
|
||||||
|
uint32_t FUSE_OPT_SUBREVISION;
|
||||||
|
uint32_t FUSE_OPT_SW_RESERVED_0;
|
||||||
|
uint32_t FUSE_OPT_SW_RESERVED_1;
|
||||||
|
uint32_t FUSE_TSENSOR4_CALIB;
|
||||||
|
uint32_t FUSE_TSENSOR5_CALIB;
|
||||||
|
uint32_t FUSE_TSENSOR6_CALIB;
|
||||||
|
uint32_t FUSE_TSENSOR7_CALIB;
|
||||||
|
uint32_t FUSE_OPT_PRIV_SEC_EN;
|
||||||
|
uint32_t FUSE_PKC_DISABLE;
|
||||||
|
uint32_t _0x16C;
|
||||||
|
uint32_t _0x170;
|
||||||
|
uint32_t _0x174;
|
||||||
|
uint32_t _0x178;
|
||||||
|
uint32_t FUSE_FUSE2TSEC_DEBUG_DISABLE;
|
||||||
|
uint32_t FUSE_TSENSOR_COMMON;
|
||||||
|
uint32_t FUSE_OPT_CP_BIN;
|
||||||
|
uint32_t FUSE_OPT_GPU_DISABLE;
|
||||||
|
uint32_t FUSE_OPT_FT_BIN;
|
||||||
|
uint32_t FUSE_OPT_DONE_MAP;
|
||||||
|
uint32_t _0x194;
|
||||||
|
uint32_t FUSE_APB2JTAG_DISABLE;
|
||||||
|
uint32_t FUSE_ODM_INFO;
|
||||||
|
uint32_t _0x1A0;
|
||||||
|
uint32_t _0x1A4;
|
||||||
|
uint32_t FUSE_ARM_CRYPT_DE_FEATURE;
|
||||||
|
uint32_t _0x1AC;
|
||||||
|
uint32_t _0x1B0;
|
||||||
|
uint32_t _0x1B4;
|
||||||
|
uint32_t _0x1B8;
|
||||||
|
uint32_t _0x1BC;
|
||||||
|
uint32_t FUSE_WOA_SKU_FLAG;
|
||||||
|
uint32_t FUSE_ECO_RESERVE_1;
|
||||||
|
uint32_t FUSE_GCPLEX_CONFIG_FUSE;
|
||||||
|
uint32_t FUSE_PRODUCTION_MONTH;
|
||||||
|
uint32_t FUSE_RAM_REPAIR_INDICATOR;
|
||||||
|
uint32_t FUSE_TSENSOR9_CALIB;
|
||||||
|
uint32_t _0x1D8;
|
||||||
|
uint32_t FUSE_VMIN_CALIBRATION;
|
||||||
|
uint32_t FUSE_AGING_SENSOR_CALIBRATION;
|
||||||
|
uint32_t FUSE_DEBUG_AUTHENTICATION;
|
||||||
|
uint32_t FUSE_SECURE_PROVISION_INDEX;
|
||||||
|
uint32_t FUSE_SECURE_PROVISION_INFO;
|
||||||
|
uint32_t FUSE_OPT_GPU_DISABLE_CP1;
|
||||||
|
uint32_t FUSE_SPARE_ENDIS;
|
||||||
|
uint32_t FUSE_ECO_RESERVE_0;
|
||||||
|
uint32_t _0x1FC;
|
||||||
|
uint32_t _0x200;
|
||||||
|
uint32_t FUSE_RESERVED_CALIB0;
|
||||||
|
uint32_t FUSE_RESERVED_CALIB1;
|
||||||
|
uint32_t FUSE_OPT_GPU_TPC0_DISABLE;
|
||||||
|
uint32_t FUSE_OPT_GPU_TPC0_DISABLE_CP1;
|
||||||
|
uint32_t FUSE_OPT_CPU_DISABLE;
|
||||||
|
uint32_t FUSE_OPT_CPU_DISABLE_CP1;
|
||||||
|
uint32_t FUSE_TSENSOR10_CALIB;
|
||||||
|
uint32_t FUSE_TSENSOR10_CALIB_AUX;
|
||||||
|
uint32_t FUSE_OPT_RAM_SVOP_DP;
|
||||||
|
uint32_t FUSE_OPT_RAM_SVOP_PDP;
|
||||||
|
uint32_t FUSE_OPT_RAM_SVOP_REG;
|
||||||
|
uint32_t FUSE_OPT_RAM_SVOP_SP;
|
||||||
|
uint32_t FUSE_OPT_RAM_SVOP_SMPDP;
|
||||||
|
uint32_t FUSE_OPT_GPU_TPC0_DISABLE_CP2;
|
||||||
|
uint32_t FUSE_OPT_GPU_TPC1_DISABLE;
|
||||||
|
uint32_t FUSE_OPT_GPU_TPC1_DISABLE_CP1;
|
||||||
|
uint32_t FUSE_OPT_GPU_TPC1_DISABLE_CP2;
|
||||||
|
uint32_t FUSE_OPT_CPU_DISABLE_CP2;
|
||||||
|
uint32_t FUSE_OPT_GPU_DISABLE_CP2;
|
||||||
|
uint32_t FUSE_USB_CALIB_EXT;
|
||||||
|
uint32_t FUSE_RESERVED_FIELD;
|
||||||
|
uint32_t FUSE_OPT_ECC_EN;
|
||||||
|
uint32_t _0x25C;
|
||||||
|
uint32_t _0x260;
|
||||||
|
uint32_t _0x264;
|
||||||
|
uint32_t _0x268;
|
||||||
|
uint32_t _0x26C;
|
||||||
|
uint32_t _0x270;
|
||||||
|
uint32_t _0x274;
|
||||||
|
uint32_t _0x278;
|
||||||
|
uint32_t FUSE_SPARE_REALIGNMENT_REG;
|
||||||
|
uint32_t FUSE_SPARE_BIT[0x20];
|
||||||
|
} tegra_fuse_chip_t;
|
||||||
|
|
||||||
|
static inline volatile tegra_fuse_t *fuse_get_regs(void)
|
||||||
|
{
|
||||||
|
return (volatile tegra_fuse_t *)FUSE_BASE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline volatile tegra_fuse_chip_t *fuse_chip_get_regs(void)
|
||||||
|
{
|
||||||
|
return (volatile tegra_fuse_chip_t *)FUSE_CHIP_BASE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void fuse_init(void);
|
||||||
|
void fuse_disable_programming(void);
|
||||||
|
void fuse_disable_private_key(void);
|
||||||
|
|
||||||
|
uint32_t fuse_get_sku_info(void);
|
||||||
|
uint32_t fuse_get_spare_bit(uint32_t idx);
|
||||||
|
uint32_t fuse_get_reserved_odm(uint32_t idx);
|
||||||
|
uint32_t fuse_get_bootrom_patch_version(void);
|
||||||
|
uint64_t fuse_get_device_id(void);
|
||||||
|
uint32_t fuse_get_dram_id(void);
|
||||||
|
uint32_t fuse_get_hardware_type(uint32_t target_firmware);
|
||||||
|
uint32_t fuse_get_retail_type(void);
|
||||||
|
void fuse_get_hardware_info(void *dst);
|
||||||
|
|
||||||
|
uint32_t fuse_hw_read(uint32_t addr);
|
||||||
|
void fuse_hw_write(uint32_t value, uint32_t addr);
|
||||||
|
void fuse_hw_sense(void);
|
||||||
|
|
||||||
|
#endif
|
||||||
86
fusee/fusee-mtc/src/init.c
Normal file
86
fusee/fusee-mtc/src/init.c
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018-2020 Atmosphère-NX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
#include <sys/iosupport.h>
|
||||||
|
#include "stage2.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
|
void __libc_init_array(void);
|
||||||
|
void __libc_fini_array(void);
|
||||||
|
|
||||||
|
extern uint8_t __bss_start__[], __bss_end__[];
|
||||||
|
extern uint8_t __heap_start__[], __heap_end__[];
|
||||||
|
|
||||||
|
extern char *fake_heap_start;
|
||||||
|
extern char *fake_heap_end;
|
||||||
|
|
||||||
|
int __program_argc;
|
||||||
|
void **__program_argv;
|
||||||
|
|
||||||
|
void __program_exit(int rc);
|
||||||
|
static void __program_parse_argc_argv(int argc, char *argdata);
|
||||||
|
static void __program_cleanup_argv(void);
|
||||||
|
|
||||||
|
static void __program_init_heap(void) {
|
||||||
|
fake_heap_start = (char*)__heap_start__;
|
||||||
|
fake_heap_end = (char*)__heap_end__;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __program_init_newlib_hooks(void) {
|
||||||
|
__syscalls.exit = __program_exit; /* For exit, etc. */
|
||||||
|
}
|
||||||
|
|
||||||
|
void __program_init(int argc, char *argdata) {
|
||||||
|
/* Zero-fill the .bss section */
|
||||||
|
memset(__bss_start__, 0, __bss_end__ - __bss_start__);
|
||||||
|
|
||||||
|
__program_init_heap();
|
||||||
|
__program_init_newlib_hooks();
|
||||||
|
__program_parse_argc_argv(argc, argdata);
|
||||||
|
__libc_init_array();
|
||||||
|
}
|
||||||
|
|
||||||
|
void __program_exit(int rc) {
|
||||||
|
__libc_fini_array();
|
||||||
|
__program_cleanup_argv();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __program_parse_argc_argv(int argc, char *argdata) {
|
||||||
|
__program_argc = argc;
|
||||||
|
|
||||||
|
__program_argv = malloc(argc * sizeof(void **));
|
||||||
|
if (__program_argv == NULL) {
|
||||||
|
generic_panic();
|
||||||
|
}
|
||||||
|
|
||||||
|
__program_argv[0] = malloc(sizeof(stage2_mtc_args_t));
|
||||||
|
if (__program_argv[0] == NULL) {
|
||||||
|
generic_panic();
|
||||||
|
}
|
||||||
|
memcpy(__program_argv[0], argdata, sizeof(stage2_mtc_args_t));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __program_cleanup_argv(void) {
|
||||||
|
for (int i = 0; i < __program_argc; i++) {
|
||||||
|
free(__program_argv[i]);
|
||||||
|
__program_argv[i] = NULL;
|
||||||
|
}
|
||||||
|
free(__program_argv);
|
||||||
|
}
|
||||||
127
fusee/fusee-mtc/src/lib/log.c
Normal file
127
fusee/fusee-mtc/src/lib/log.c
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018-2020 Atmosphère-NX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "log.h"
|
||||||
|
|
||||||
|
#include "../display/video_fb.h"
|
||||||
|
#include "vsprintf.h"
|
||||||
|
|
||||||
|
/* default log level for screen output */
|
||||||
|
ScreenLogLevel g_screen_log_level = SCREEN_LOG_LEVEL_NONE;
|
||||||
|
|
||||||
|
void log_set_log_level(ScreenLogLevel log_level) {
|
||||||
|
g_screen_log_level = log_level;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScreenLogLevel log_get_log_level() {
|
||||||
|
return g_screen_log_level;
|
||||||
|
}
|
||||||
|
|
||||||
|
void log_to_uart(const char *message) {
|
||||||
|
/* TODO: add UART logging */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void print_to_screen(ScreenLogLevel screen_log_level, char *message) {
|
||||||
|
/* don't print to screen if below log level */
|
||||||
|
if(screen_log_level > g_screen_log_level) return;
|
||||||
|
|
||||||
|
video_puts(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* vprintk - logs a message and prints it to screen based on its screen_log_level
|
||||||
|
*
|
||||||
|
* If the level is below g_screen_log_level it will not be shown but logged to UART
|
||||||
|
* This text will not be colored or prefixed
|
||||||
|
* UART is TODO
|
||||||
|
*/
|
||||||
|
void vprint(ScreenLogLevel screen_log_level, const char *fmt, va_list args)
|
||||||
|
{
|
||||||
|
char buf[PRINT_MESSAGE_MAX_LENGTH];
|
||||||
|
vsnprintf(buf, PRINT_MESSAGE_MAX_LENGTH, fmt, args);
|
||||||
|
|
||||||
|
/* we don't need that flag here, but if it gets used, strip it so we print correctly */
|
||||||
|
screen_log_level &= ~SCREEN_LOG_LEVEL_NO_PREFIX;
|
||||||
|
|
||||||
|
/* log to UART */
|
||||||
|
log_to_uart(buf);
|
||||||
|
|
||||||
|
print_to_screen(screen_log_level, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void add_prefix(ScreenLogLevel screen_log_level, const char *fmt, char *buf) {
|
||||||
|
char typebuf[] = "[%s] %s";
|
||||||
|
|
||||||
|
/* apply prefix and append message format */
|
||||||
|
/* TODO: add coloring to the output */
|
||||||
|
switch(screen_log_level)
|
||||||
|
{
|
||||||
|
case SCREEN_LOG_LEVEL_ERROR:
|
||||||
|
snprintf(buf, PRINT_MESSAGE_MAX_LENGTH, typebuf, "ERROR", fmt);
|
||||||
|
break;
|
||||||
|
case SCREEN_LOG_LEVEL_WARNING:
|
||||||
|
snprintf(buf, PRINT_MESSAGE_MAX_LENGTH, typebuf, "WARNING", fmt);
|
||||||
|
break;
|
||||||
|
case SCREEN_LOG_LEVEL_MANDATORY:
|
||||||
|
snprintf(buf, PRINT_MESSAGE_MAX_LENGTH, "%s", fmt);
|
||||||
|
break;
|
||||||
|
case SCREEN_LOG_LEVEL_INFO:
|
||||||
|
snprintf(buf, PRINT_MESSAGE_MAX_LENGTH, typebuf, "INFO", fmt);
|
||||||
|
break;
|
||||||
|
case SCREEN_LOG_LEVEL_DEBUG:
|
||||||
|
snprintf(buf, PRINT_MESSAGE_MAX_LENGTH, typebuf, "DEBUG", fmt);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* print - logs a message and prints it to screen based on its screen_log_level
|
||||||
|
*
|
||||||
|
* If the level is below g_screen_log_level it will not be shown but logged to UART
|
||||||
|
* Use SCREEN_LOG_LEVEL_NO_PREFIX if you don't want a prefix to be added
|
||||||
|
* UART is TODO
|
||||||
|
*/
|
||||||
|
void print(ScreenLogLevel screen_log_level, const char * fmt, ...)
|
||||||
|
{
|
||||||
|
char buf[PRINT_MESSAGE_MAX_LENGTH] = {};
|
||||||
|
char message[PRINT_MESSAGE_MAX_LENGTH] = {};
|
||||||
|
|
||||||
|
/* TODO: make splash disappear if level > MANDATORY */
|
||||||
|
|
||||||
|
/* make prefix free messages with log_level possible */
|
||||||
|
if(screen_log_level & SCREEN_LOG_LEVEL_NO_PREFIX) {
|
||||||
|
/* remove the NO_PREFIX flag so the enum can be recognized later on */
|
||||||
|
screen_log_level &= ~SCREEN_LOG_LEVEL_NO_PREFIX;
|
||||||
|
|
||||||
|
snprintf(buf, PRINT_MESSAGE_MAX_LENGTH, "%s", fmt);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
add_prefix(screen_log_level, fmt, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* input arguments */
|
||||||
|
va_list args;
|
||||||
|
va_start(args, fmt);
|
||||||
|
vsnprintf(message, PRINT_MESSAGE_MAX_LENGTH, buf, args);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
/* log to UART */
|
||||||
|
log_to_uart(message);
|
||||||
|
|
||||||
|
print_to_screen(screen_log_level, message);
|
||||||
|
}
|
||||||
@@ -25,12 +25,11 @@ typedef enum {
|
|||||||
SCREEN_LOG_LEVEL_NONE = 0,
|
SCREEN_LOG_LEVEL_NONE = 0,
|
||||||
SCREEN_LOG_LEVEL_ERROR = 1,
|
SCREEN_LOG_LEVEL_ERROR = 1,
|
||||||
SCREEN_LOG_LEVEL_WARNING = 2,
|
SCREEN_LOG_LEVEL_WARNING = 2,
|
||||||
SCREEN_LOG_LEVEL_MANDATORY = 3, /* No log prefix. */
|
SCREEN_LOG_LEVEL_MANDATORY = 3, /* no log prefix */
|
||||||
SCREEN_LOG_LEVEL_INFO = 4,
|
SCREEN_LOG_LEVEL_INFO = 4,
|
||||||
SCREEN_LOG_LEVEL_DEBUG = 5,
|
SCREEN_LOG_LEVEL_DEBUG = 5,
|
||||||
SCREEN_LOG_LEVEL_SD_DEBUG = 6,
|
|
||||||
|
|
||||||
SCREEN_LOG_LEVEL_NO_PREFIX = 0x100 /* OR this to your LOG_LEVEL to prevent prefix creation. */
|
SCREEN_LOG_LEVEL_NO_PREFIX = 0x100 /* OR this to your LOG_LEVEL to prevent prefix creation */
|
||||||
} ScreenLogLevel;
|
} ScreenLogLevel;
|
||||||
|
|
||||||
extern ScreenLogLevel g_screen_log_level;
|
extern ScreenLogLevel g_screen_log_level;
|
||||||
57
fusee/fusee-mtc/src/main.c
Normal file
57
fusee/fusee-mtc/src/main.c
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018-2020 Atmosphère-NX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include "mtc.h"
|
||||||
|
#include "stage2.h"
|
||||||
|
#include "display/video_fb.h"
|
||||||
|
|
||||||
|
static void *g_framebuffer;
|
||||||
|
static __attribute__((__aligned__(0x200))) stage2_mtc_args_t g_mtc_args_store;
|
||||||
|
static stage2_mtc_args_t *g_mtc_args;
|
||||||
|
|
||||||
|
/* Allow for main(int argc, void **argv) signature. */
|
||||||
|
#pragma GCC diagnostic ignored "-Wmain"
|
||||||
|
|
||||||
|
int main(int argc, void **argv) {
|
||||||
|
ScreenLogLevel log_level = SCREEN_LOG_LEVEL_NONE;
|
||||||
|
|
||||||
|
/* Check argc. */
|
||||||
|
if (argc != MTC_ARGC) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Extract arguments from argv. */
|
||||||
|
g_mtc_args = &g_mtc_args_store;
|
||||||
|
memcpy(g_mtc_args, (stage2_mtc_args_t *)argv[MTC_ARGV_ARGUMENT_STRUCT], sizeof(*g_mtc_args));
|
||||||
|
log_level = g_mtc_args->log_level;
|
||||||
|
|
||||||
|
/* Override the global logging level. */
|
||||||
|
log_set_log_level(log_level);
|
||||||
|
|
||||||
|
if (log_level != SCREEN_LOG_LEVEL_NONE) {
|
||||||
|
/* Set framebuffer address. */
|
||||||
|
g_framebuffer = (void *)0xC0000000;
|
||||||
|
|
||||||
|
/* Zero-fill the framebuffer and register it as printk provider. */
|
||||||
|
video_init(g_framebuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Train DRAM. */
|
||||||
|
train_dram();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
167
fusee/fusee-mtc/src/mc.c
Normal file
167
fusee/fusee-mtc/src/mc.c
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018 naehrwert
|
||||||
|
* Copyright (c) 2018-2020 Atmosphère-NX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "mc.h"
|
||||||
|
#include "car.h"
|
||||||
|
#include "timers.h"
|
||||||
|
|
||||||
|
void mc_config_tsec_carveout(uint32_t bom, uint32_t size1mb, bool lock)
|
||||||
|
{
|
||||||
|
MAKE_MC_REG(MC_SEC_CARVEOUT_BOM) = bom;
|
||||||
|
MAKE_MC_REG(MC_SEC_CARVEOUT_SIZE_MB) = size1mb;
|
||||||
|
|
||||||
|
if (lock)
|
||||||
|
MAKE_MC_REG(MC_SEC_CARVEOUT_REG_CTRL) = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mc_config_carveout()
|
||||||
|
{
|
||||||
|
*(volatile uint32_t *)0x8005FFFC = 0xC0EDBBCC;
|
||||||
|
|
||||||
|
MAKE_MC_REG(MC_VIDEO_PROTECT_GPU_OVERRIDE_0) = 1;
|
||||||
|
MAKE_MC_REG(MC_VIDEO_PROTECT_GPU_OVERRIDE_1) = 0;
|
||||||
|
MAKE_MC_REG(MC_VIDEO_PROTECT_BOM) = 0;
|
||||||
|
MAKE_MC_REG(MC_VIDEO_PROTECT_SIZE_MB) = 0;
|
||||||
|
MAKE_MC_REG(MC_VIDEO_PROTECT_REG_CTRL) = 1;
|
||||||
|
|
||||||
|
mc_config_tsec_carveout(0, 0, true);
|
||||||
|
|
||||||
|
MAKE_MC_REG(MC_MTS_CARVEOUT_BOM) = 0;
|
||||||
|
MAKE_MC_REG(MC_MTS_CARVEOUT_SIZE_MB) = 0;
|
||||||
|
MAKE_MC_REG(MC_MTS_CARVEOUT_ADR_HI) = 0;
|
||||||
|
MAKE_MC_REG(MC_MTS_CARVEOUT_REG_CTRL) = 1;
|
||||||
|
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT1_BOM) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT1_BOM_HI) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT1_SIZE_128KB) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT1_CLIENT_ACCESS0) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT1_CLIENT_ACCESS1) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT1_CLIENT_ACCESS2) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT1_CLIENT_ACCESS3) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT1_CLIENT_ACCESS4) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT1_CLIENT_FORCE_INTERNAL_ACCESS0) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT1_CLIENT_FORCE_INTERNAL_ACCESS1) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT1_CLIENT_FORCE_INTERNAL_ACCESS2) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT1_CLIENT_FORCE_INTERNAL_ACCESS3) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT1_CLIENT_FORCE_INTERNAL_ACCESS4) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT1_CFG0) = 0x4000006;
|
||||||
|
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT3_BOM) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT3_BOM_HI) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT3_SIZE_128KB) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT3_CLIENT_ACCESS0) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT3_CLIENT_ACCESS1) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT3_CLIENT_ACCESS2) = (BIT(CSR_GPUSRD) | BIT(CSW_GPUSWR));
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT3_CLIENT_ACCESS3) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT3_CLIENT_ACCESS4) = (BIT(CSR_GPUSRD2) | BIT(CSW_GPUSWR2));
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT3_CLIENT_FORCE_INTERNAL_ACCESS0) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT3_CLIENT_FORCE_INTERNAL_ACCESS1) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT3_CLIENT_FORCE_INTERNAL_ACCESS2) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT3_CLIENT_FORCE_INTERNAL_ACCESS3) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT3_CLIENT_FORCE_INTERNAL_ACCESS4) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT3_CFG0) = 0x4401E7E;
|
||||||
|
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT4_BOM) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT4_BOM_HI) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT4_SIZE_128KB) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT4_CLIENT_ACCESS0) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT4_CLIENT_ACCESS1) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT4_CLIENT_ACCESS2) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT4_CLIENT_ACCESS3) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT4_CLIENT_ACCESS4) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT4_CLIENT_FORCE_INTERNAL_ACCESS0) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT4_CLIENT_FORCE_INTERNAL_ACCESS1) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT4_CLIENT_FORCE_INTERNAL_ACCESS2) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT4_CLIENT_FORCE_INTERNAL_ACCESS3) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT4_CLIENT_FORCE_INTERNAL_ACCESS4) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT4_CFG0) = 0x8F;
|
||||||
|
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT5_BOM) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT5_BOM_HI) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT5_SIZE_128KB) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT5_CLIENT_ACCESS0) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT5_CLIENT_ACCESS1) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT5_CLIENT_ACCESS2) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT5_CLIENT_ACCESS3) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT5_CLIENT_ACCESS4) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT5_CLIENT_FORCE_INTERNAL_ACCESS0) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT5_CLIENT_FORCE_INTERNAL_ACCESS1) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT5_CLIENT_FORCE_INTERNAL_ACCESS2) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT5_CLIENT_FORCE_INTERNAL_ACCESS3) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT5_CLIENT_FORCE_INTERNAL_ACCESS4) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT5_CFG0) = 0x8F;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mc_config_carveout_finalize()
|
||||||
|
{
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT2_BOM) = 0x80020000;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT2_BOM_HI) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT2_SIZE_128KB) = 2;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT2_CLIENT_ACCESS0) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT2_CLIENT_ACCESS1) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT2_CLIENT_ACCESS2) = (BIT(CSR_GPUSRD) | BIT(CSW_GPUSWR));
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT2_CLIENT_ACCESS3) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT2_CLIENT_ACCESS4) = (BIT(CSR_GPUSRD2) | BIT(CSW_GPUSWR2));
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT2_CLIENT_FORCE_INTERNAL_ACCESS0) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT2_CLIENT_FORCE_INTERNAL_ACCESS1) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT2_CLIENT_FORCE_INTERNAL_ACCESS2) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT2_CLIENT_FORCE_INTERNAL_ACCESS3) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT2_CLIENT_FORCE_INTERNAL_ACCESS4) = 0;
|
||||||
|
MAKE_MC_REG(MC_SECURITY_CARVEOUT2_CFG0) = 0x440167E;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mc_enable_ahb_redirect()
|
||||||
|
{
|
||||||
|
volatile tegra_car_t *car = car_get_regs();
|
||||||
|
car->lvl2_clk_gate_ovrd = ((car->lvl2_clk_gate_ovrd & 0xFFF7FFFF) | 0x80000);
|
||||||
|
|
||||||
|
MAKE_MC_REG(MC_IRAM_BOM) = 0x40000000;
|
||||||
|
MAKE_MC_REG(MC_IRAM_TOM) = 0x4003F000;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mc_disable_ahb_redirect()
|
||||||
|
{
|
||||||
|
volatile tegra_car_t *car = car_get_regs();
|
||||||
|
|
||||||
|
MAKE_MC_REG(MC_IRAM_BOM) = 0xFFFFF000;
|
||||||
|
MAKE_MC_REG(MC_IRAM_TOM) = 0;
|
||||||
|
|
||||||
|
car->lvl2_clk_gate_ovrd &= 0xFFF7FFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mc_enable()
|
||||||
|
{
|
||||||
|
volatile tegra_car_t *car = car_get_regs();
|
||||||
|
|
||||||
|
/* Set EMC clock source. */
|
||||||
|
car->clk_source_emc = ((car->clk_source_emc & 0x1FFFFFFF) | 0x40000000);
|
||||||
|
|
||||||
|
/* Enable MIPI CAL clock. */
|
||||||
|
car->clk_enb_h_set = ((car->clk_enb_h_set & 0xFDFFFFFF) | 0x2000000);
|
||||||
|
|
||||||
|
/* Enable MC clock. */
|
||||||
|
car->clk_enb_h_set = ((car->clk_enb_h_set & 0xFFFFFFFE) | 1);
|
||||||
|
|
||||||
|
/* Enable EMC DLL clock. */
|
||||||
|
car->clk_enb_x_set = ((car->clk_enb_x_set & 0xFFFFBFFF) | 0x4000);
|
||||||
|
|
||||||
|
/* Clear EMC and MC reset. */
|
||||||
|
car->rst_dev_h_set = 0x2000001;
|
||||||
|
udelay(5);
|
||||||
|
|
||||||
|
mc_disable_ahb_redirect();
|
||||||
|
}
|
||||||
@@ -497,7 +497,6 @@
|
|||||||
#define MC_SECURITY_CARVEOUT4_CLIENT_ACCESS0 0xd08
|
#define MC_SECURITY_CARVEOUT4_CLIENT_ACCESS0 0xd08
|
||||||
#define MC_ERR_APB_ASID_UPDATE_STATUS 0x9d0
|
#define MC_ERR_APB_ASID_UPDATE_STATUS 0x9d0
|
||||||
#define MC_DA_CONFIG0 0x9dc
|
#define MC_DA_CONFIG0 0x9dc
|
||||||
#define MC_UNTRANSLATED_REGION_CHECK 0x948
|
|
||||||
|
|
||||||
/* Memory Controller clients */
|
/* Memory Controller clients */
|
||||||
#define CLIENT_ACCESS_NUM_CLIENTS 32
|
#define CLIENT_ACCESS_NUM_CLIENTS 32
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
626
fusee/fusee-mtc/src/pmc.h
Normal file
626
fusee/fusee-mtc/src/pmc.h
Normal file
@@ -0,0 +1,626 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018-2020 Atmosphère-NX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FUSEE_PMC_H
|
||||||
|
#define FUSEE_PMC_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define PMC_BASE 0x7000E400
|
||||||
|
#define MAKE_PMC_REG(n) MAKE_REG32(PMC_BASE + n)
|
||||||
|
|
||||||
|
#define PMC_CONTROL_SDMMC1 (1 << 12)
|
||||||
|
#define PMC_CONTROL_SDMMC3 (1 << 13)
|
||||||
|
#define PMC_CONTROL_SDMMC4 (1 << 14)
|
||||||
|
|
||||||
|
#define APBDEV_PMC_CONTROL MAKE_PMC_REG(0x00)
|
||||||
|
#define APBDEV_PM_0 MAKE_PMC_REG(0x14)
|
||||||
|
#define APBDEV_PMC_DPD_ENABLE_0 MAKE_PMC_REG(0x24)
|
||||||
|
#define APBDEV_PMC_PWRGATE_TOGGLE_0 MAKE_PMC_REG(0x30)
|
||||||
|
#define APBDEV_PMC_PWRGATE_STATUS_0 MAKE_PMC_REG(0x38)
|
||||||
|
#define APBDEV_PMC_NO_IOPOWER_0 MAKE_PMC_REG(0x44)
|
||||||
|
#define APBDEV_PMC_SCRATCH0_0 MAKE_PMC_REG(0x50)
|
||||||
|
#define APBDEV_PMC_SCRATCH1_0 MAKE_PMC_REG(0x54)
|
||||||
|
#define APBDEV_PMC_SCRATCH20_0 MAKE_PMC_REG(0xA0)
|
||||||
|
#define APBDEV_PMC_PWR_DET_VAL_0 MAKE_PMC_REG(0xE4)
|
||||||
|
#define APBDEV_PMC_DDR_PWR_0 MAKE_PMC_REG(0xE8)
|
||||||
|
#define APBDEV_PMC_CRYPTO_OP_0 MAKE_PMC_REG(0xF4)
|
||||||
|
#define APBDEV_PMC_WAKE2_STATUS_0 MAKE_PMC_REG(0x168)
|
||||||
|
#define APBDEV_PMC_OSC_EDPD_OVER_0 MAKE_PMC_REG(0x1A4)
|
||||||
|
#define APBDEV_PMC_RST_STATUS_0 MAKE_PMC_REG(0x1B4)
|
||||||
|
#define APBDEV_PMC_IO_DPD_REQ_0 MAKE_PMC_REG(0x1B8)
|
||||||
|
#define APBDEV_PMC_IO_DPD2_REQ_0 MAKE_PMC_REG(0x1C0)
|
||||||
|
#define APBDEV_PMC_VDDP_SEL_0 MAKE_PMC_REG(0x1CC)
|
||||||
|
#define APBDEV_PMC_SCRATCH49_0 MAKE_PMC_REG(0x244)
|
||||||
|
#define APBDEV_PMC_TSC_MULT_0 MAKE_PMC_REG(0x2B4)
|
||||||
|
#define APBDEV_PMC_REG_SHORT_0 MAKE_PMC_REG(0x2CC)
|
||||||
|
#define APBDEV_PMC_WEAK_BIAS_0 MAKE_PMC_REG(0x2C8)
|
||||||
|
#define APBDEV_PMC_SECURE_SCRATCH21_0 MAKE_PMC_REG(0x334)
|
||||||
|
#define APBDEV_PMC_SECURE_SCRATCH32_0 MAKE_PMC_REG(0x360)
|
||||||
|
#define APBDEV_PMC_SECURE_SCRATCH49_0 MAKE_PMC_REG(0x3A4)
|
||||||
|
#define APBDEV_PMC_CNTRL2_0 MAKE_PMC_REG(0x440)
|
||||||
|
#define APBDEV_PMC_IO_DPD4_REQ_0 MAKE_PMC_REG(0x464)
|
||||||
|
#define APBDEV_PMC_UTMIP_PAD_CFG1_0 MAKE_PMC_REG(0x4C4)
|
||||||
|
#define APBDEV_PMC_UTMIP_PAD_CFG3_0 MAKE_PMC_REG(0x4CC)
|
||||||
|
#define APBDEV_PMC_DDR_CNTRL_0 MAKE_PMC_REG(0x4E4)
|
||||||
|
#define APBDEV_PMC_SCRATCH43_0 MAKE_PMC_REG(0x22C)
|
||||||
|
#define APBDEV_PMC_SCRATCH188_0 MAKE_PMC_REG(0x810)
|
||||||
|
#define APBDEV_PMC_SCRATCH190_0 MAKE_PMC_REG(0x818)
|
||||||
|
#define APBDEV_PMC_SCRATCH200_0 MAKE_PMC_REG(0x840)
|
||||||
|
|
||||||
|
#define APBDEV_PMC_SCRATCH45_0 MAKE_PMC_REG(0x234)
|
||||||
|
#define APBDEV_PMC_SCRATCH46_0 MAKE_PMC_REG(0x238)
|
||||||
|
#define APBDEV_PMC_SCRATCH33_0 MAKE_PMC_REG(0x120)
|
||||||
|
#define APBDEV_PMC_SCRATCH40_0 MAKE_PMC_REG(0x13C)
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint32_t cntrl;
|
||||||
|
uint32_t sec_disable;
|
||||||
|
uint32_t pmc_swrst;
|
||||||
|
uint32_t wake_mask;
|
||||||
|
uint32_t wake_lvl;
|
||||||
|
uint32_t wake_status;
|
||||||
|
uint32_t sw_wake_status;
|
||||||
|
uint32_t dpd_pads_oride;
|
||||||
|
uint32_t dpd_sample;
|
||||||
|
uint32_t dpd_enable;
|
||||||
|
uint32_t pwrgate_timer_off;
|
||||||
|
uint32_t clamp_status;
|
||||||
|
uint32_t pwrgate_toggle;
|
||||||
|
uint32_t remove_clamping;
|
||||||
|
uint32_t pwrgate_status;
|
||||||
|
uint32_t pwrgood_timer;
|
||||||
|
uint32_t blink_timer;
|
||||||
|
uint32_t no_iopower;
|
||||||
|
uint32_t pwr_det;
|
||||||
|
uint32_t pwr_det_latch;
|
||||||
|
uint32_t scratch0;
|
||||||
|
uint32_t scratch1;
|
||||||
|
uint32_t scratch2;
|
||||||
|
uint32_t scratch3;
|
||||||
|
uint32_t scratch4;
|
||||||
|
uint32_t scratch5;
|
||||||
|
uint32_t scratch6;
|
||||||
|
uint32_t scratch7;
|
||||||
|
uint32_t scratch8;
|
||||||
|
uint32_t scratch9;
|
||||||
|
uint32_t scratch10;
|
||||||
|
uint32_t scratch11;
|
||||||
|
uint32_t scratch12;
|
||||||
|
uint32_t scratch13;
|
||||||
|
uint32_t scratch14;
|
||||||
|
uint32_t scratch15;
|
||||||
|
uint32_t scratch16;
|
||||||
|
uint32_t scratch17;
|
||||||
|
uint32_t scratch18;
|
||||||
|
uint32_t scratch19;
|
||||||
|
uint32_t scratch20;
|
||||||
|
uint32_t scratch21;
|
||||||
|
uint32_t scratch22;
|
||||||
|
uint32_t scratch23;
|
||||||
|
uint32_t secure_scratch0;
|
||||||
|
uint32_t secure_scratch1;
|
||||||
|
uint32_t secure_scratch2;
|
||||||
|
uint32_t secure_scratch3;
|
||||||
|
uint32_t secure_scratch4;
|
||||||
|
uint32_t secure_scratch5;
|
||||||
|
uint32_t cpupwrgood_timer;
|
||||||
|
uint32_t cpupwroff_timer;
|
||||||
|
uint32_t pg_mask;
|
||||||
|
uint32_t pg_mask_1;
|
||||||
|
uint32_t auto_wake_lvl;
|
||||||
|
uint32_t auto_wake_lvl_mask;
|
||||||
|
uint32_t wake_delay;
|
||||||
|
uint32_t pwr_det_val;
|
||||||
|
uint32_t ddr_pwr;
|
||||||
|
uint32_t usb_debounce_del;
|
||||||
|
uint32_t usb_ao;
|
||||||
|
uint32_t crypto_op;
|
||||||
|
uint32_t pllp_wb0_override;
|
||||||
|
uint32_t scratch24;
|
||||||
|
uint32_t scratch25;
|
||||||
|
uint32_t scratch26;
|
||||||
|
uint32_t scratch27;
|
||||||
|
uint32_t scratch28;
|
||||||
|
uint32_t scratch29;
|
||||||
|
uint32_t scratch30;
|
||||||
|
uint32_t scratch31;
|
||||||
|
uint32_t scratch32;
|
||||||
|
uint32_t scratch33;
|
||||||
|
uint32_t scratch34;
|
||||||
|
uint32_t scratch35;
|
||||||
|
uint32_t scratch36;
|
||||||
|
uint32_t scratch37;
|
||||||
|
uint32_t scratch38;
|
||||||
|
uint32_t scratch39;
|
||||||
|
uint32_t scratch40;
|
||||||
|
uint32_t scratch41;
|
||||||
|
uint32_t scratch42;
|
||||||
|
uint32_t bo_mirror0;
|
||||||
|
uint32_t bo_mirror1;
|
||||||
|
uint32_t bo_mirror2;
|
||||||
|
uint32_t sys_33v_en;
|
||||||
|
uint32_t bo_mirror_access;
|
||||||
|
uint32_t gate;
|
||||||
|
uint32_t wake2_mask;
|
||||||
|
uint32_t wake2_lvl;
|
||||||
|
uint32_t wake2_stat;
|
||||||
|
uint32_t sw_wake2_stat;
|
||||||
|
uint32_t auto_wake2_lvl_mask;
|
||||||
|
uint32_t pg_mask2;
|
||||||
|
uint32_t pg_mask_ce1;
|
||||||
|
uint32_t pg_mask_ce2;
|
||||||
|
uint32_t pg_mask_ce3;
|
||||||
|
uint32_t pwrgate_timer_ce0;
|
||||||
|
uint32_t pwrgate_timer_ce1;
|
||||||
|
uint32_t pwrgate_timer_ce2;
|
||||||
|
uint32_t pwrgate_timer_ce3;
|
||||||
|
uint32_t pwrgate_timer_ce4;
|
||||||
|
uint32_t pwrgate_timer_ce5;
|
||||||
|
uint32_t pwrgate_timer_ce6;
|
||||||
|
uint32_t pcx_edpd_cntrl;
|
||||||
|
uint32_t osc_edpd_over;
|
||||||
|
uint32_t clk_out_cntrl;
|
||||||
|
uint32_t sata_pwrgate;
|
||||||
|
uint32_t sensor_ctrl;
|
||||||
|
uint32_t reset_status;
|
||||||
|
uint32_t io_dpd_req;
|
||||||
|
uint32_t io_dpd_stat;
|
||||||
|
uint32_t io_dpd2_req;
|
||||||
|
uint32_t io_dpd2_stat;
|
||||||
|
uint32_t sel_dpd_tim;
|
||||||
|
uint32_t vddp_sel;
|
||||||
|
uint32_t ddr_cfg;
|
||||||
|
uint32_t e_no_vttgen;
|
||||||
|
uint32_t _reserved0;
|
||||||
|
uint32_t pllm_wb0_ovrride_frq;
|
||||||
|
uint32_t test_pwrgate;
|
||||||
|
uint32_t pwrgate_timer_mult;
|
||||||
|
uint32_t dsi_sel_dpd;
|
||||||
|
uint32_t utmip_uhsic_triggers;
|
||||||
|
uint32_t utmip_uhsic_saved_st;
|
||||||
|
uint32_t utmip_pad_cfg;
|
||||||
|
uint32_t utmip_term_pad_cfg;
|
||||||
|
uint32_t utmip_uhsic_sleep_cfg;
|
||||||
|
uint32_t utmip_uhsic_sleepwalk_cfg;
|
||||||
|
uint32_t utmip_sleepwalk_p[3];
|
||||||
|
uint32_t uhsic_sleepwalk_p0;
|
||||||
|
uint32_t utmip_uhsic_status;
|
||||||
|
uint32_t utmip_uhsic_fake;
|
||||||
|
uint32_t bo_mirror3[2];
|
||||||
|
uint32_t secure_scratch6;
|
||||||
|
uint32_t secure_scratch7;
|
||||||
|
uint32_t scratch43;
|
||||||
|
uint32_t scratch44;
|
||||||
|
uint32_t scratch45;
|
||||||
|
uint32_t scratch46;
|
||||||
|
uint32_t scratch47;
|
||||||
|
uint32_t scratch48;
|
||||||
|
uint32_t scratch49;
|
||||||
|
uint32_t scratch50;
|
||||||
|
uint32_t scratch51;
|
||||||
|
uint32_t scratch52;
|
||||||
|
uint32_t scratch53;
|
||||||
|
uint32_t scratch54;
|
||||||
|
uint32_t scratch55;
|
||||||
|
uint32_t scratch0_eco;
|
||||||
|
uint32_t por_dpd_ctrl;
|
||||||
|
uint32_t scratch2_eco;
|
||||||
|
uint32_t utmip_uhsic_line_wakeup;
|
||||||
|
uint32_t utmip_bias_master_cntrl;
|
||||||
|
uint32_t utmip_master_config;
|
||||||
|
uint32_t td_pwrgate_inter_part_timer;
|
||||||
|
uint32_t utmip_uhsic2_triggers;
|
||||||
|
uint32_t utmip_uhsic2_saved_state;
|
||||||
|
uint32_t utmip_uhsic2_sleep_cfg;
|
||||||
|
uint32_t utmip_uhsic2_sleepwalk_cfg;
|
||||||
|
uint32_t uhsic2_sleepwalk_p1;
|
||||||
|
uint32_t utmip_uhsic2_status;
|
||||||
|
uint32_t utmip_uhsic2_fake;
|
||||||
|
uint32_t utmip_uhsic2_line_wakeup;
|
||||||
|
uint32_t utmip_master2_config;
|
||||||
|
uint32_t utmip_uhsic_rpd_cfg;
|
||||||
|
uint32_t pg_mask_ce0;
|
||||||
|
uint32_t pg_mask3[2];
|
||||||
|
uint32_t pllm_wb0_override2;
|
||||||
|
uint32_t tsc_mult;
|
||||||
|
uint32_t cpu_vsense_override;
|
||||||
|
uint32_t glb_amap_cfg;
|
||||||
|
uint32_t sticky_bits;
|
||||||
|
uint32_t sec_disable2;
|
||||||
|
uint32_t weak_bias;
|
||||||
|
uint32_t reg_short;
|
||||||
|
uint32_t pg_mask_andor;
|
||||||
|
uint32_t _reserved1[11];
|
||||||
|
uint32_t secure_scratch8;
|
||||||
|
uint32_t secure_scratch9;
|
||||||
|
uint32_t secure_scratch10;
|
||||||
|
uint32_t secure_scratch11;
|
||||||
|
uint32_t secure_scratch12;
|
||||||
|
uint32_t secure_scratch13;
|
||||||
|
uint32_t secure_scratch14;
|
||||||
|
uint32_t secure_scratch15;
|
||||||
|
uint32_t secure_scratch16;
|
||||||
|
uint32_t secure_scratch17;
|
||||||
|
uint32_t secure_scratch18;
|
||||||
|
uint32_t secure_scratch19;
|
||||||
|
uint32_t secure_scratch20;
|
||||||
|
uint32_t secure_scratch21;
|
||||||
|
uint32_t secure_scratch22;
|
||||||
|
uint32_t secure_scratch23;
|
||||||
|
uint32_t secure_scratch24;
|
||||||
|
uint32_t secure_scratch25;
|
||||||
|
uint32_t secure_scratch26;
|
||||||
|
uint32_t secure_scratch27;
|
||||||
|
uint32_t secure_scratch28;
|
||||||
|
uint32_t secure_scratch29;
|
||||||
|
uint32_t secure_scratch30;
|
||||||
|
uint32_t secure_scratch31;
|
||||||
|
uint32_t secure_scratch32;
|
||||||
|
uint32_t secure_scratch33;
|
||||||
|
uint32_t secure_scratch34;
|
||||||
|
uint32_t secure_scratch35;
|
||||||
|
uint32_t secure_scratch36;
|
||||||
|
uint32_t secure_scratch37;
|
||||||
|
uint32_t secure_scratch38;
|
||||||
|
uint32_t secure_scratch39;
|
||||||
|
uint32_t secure_scratch40;
|
||||||
|
uint32_t secure_scratch41;
|
||||||
|
uint32_t secure_scratch42;
|
||||||
|
uint32_t secure_scratch43;
|
||||||
|
uint32_t secure_scratch44;
|
||||||
|
uint32_t secure_scratch45;
|
||||||
|
uint32_t secure_scratch46;
|
||||||
|
uint32_t secure_scratch47;
|
||||||
|
uint32_t secure_scratch48;
|
||||||
|
uint32_t secure_scratch49;
|
||||||
|
uint32_t secure_scratch50;
|
||||||
|
uint32_t secure_scratch51;
|
||||||
|
uint32_t secure_scratch52;
|
||||||
|
uint32_t secure_scratch53;
|
||||||
|
uint32_t secure_scratch54;
|
||||||
|
uint32_t secure_scratch55;
|
||||||
|
uint32_t secure_scratch56;
|
||||||
|
uint32_t secure_scratch57;
|
||||||
|
uint32_t secure_scratch58;
|
||||||
|
uint32_t secure_scratch59;
|
||||||
|
uint32_t secure_scratch60;
|
||||||
|
uint32_t secure_scratch61;
|
||||||
|
uint32_t secure_scratch62;
|
||||||
|
uint32_t secure_scratch63;
|
||||||
|
uint32_t secure_scratch64;
|
||||||
|
uint32_t secure_scratch65;
|
||||||
|
uint32_t secure_scratch66;
|
||||||
|
uint32_t secure_scratch67;
|
||||||
|
uint32_t secure_scratch68;
|
||||||
|
uint32_t secure_scratch69;
|
||||||
|
uint32_t secure_scratch70;
|
||||||
|
uint32_t secure_scratch71;
|
||||||
|
uint32_t secure_scratch72;
|
||||||
|
uint32_t secure_scratch73;
|
||||||
|
uint32_t secure_scratch74;
|
||||||
|
uint32_t secure_scratch75;
|
||||||
|
uint32_t secure_scratch76;
|
||||||
|
uint32_t secure_scratch77;
|
||||||
|
uint32_t secure_scratch78;
|
||||||
|
uint32_t secure_scratch79;
|
||||||
|
uint32_t _reserved2[8];
|
||||||
|
uint32_t cntrl2;
|
||||||
|
uint32_t _reserved3[2];
|
||||||
|
uint32_t event_counter;
|
||||||
|
uint32_t fuse_control;
|
||||||
|
uint32_t scratch1_eco;
|
||||||
|
uint32_t _reserved4;
|
||||||
|
uint32_t io_dpd3_req;
|
||||||
|
uint32_t io_dpd3_status;
|
||||||
|
uint32_t io_dpd4_req;
|
||||||
|
uint32_t io_dpd4_status;
|
||||||
|
uint32_t _reserved5[30];
|
||||||
|
uint32_t ddr_cntrl;
|
||||||
|
uint32_t _reserved6[70];
|
||||||
|
uint32_t scratch56;
|
||||||
|
uint32_t scratch57;
|
||||||
|
uint32_t scratch58;
|
||||||
|
uint32_t scratch59;
|
||||||
|
uint32_t scratch60;
|
||||||
|
uint32_t scratch61;
|
||||||
|
uint32_t scratch62;
|
||||||
|
uint32_t scratch63;
|
||||||
|
uint32_t scratch64;
|
||||||
|
uint32_t scratch65;
|
||||||
|
uint32_t scratch66;
|
||||||
|
uint32_t scratch67;
|
||||||
|
uint32_t scratch68;
|
||||||
|
uint32_t scratch69;
|
||||||
|
uint32_t scratch70;
|
||||||
|
uint32_t scratch71;
|
||||||
|
uint32_t scratch72;
|
||||||
|
uint32_t scratch73;
|
||||||
|
uint32_t scratch74;
|
||||||
|
uint32_t scratch75;
|
||||||
|
uint32_t scratch76;
|
||||||
|
uint32_t scratch77;
|
||||||
|
uint32_t scratch78;
|
||||||
|
uint32_t scratch79;
|
||||||
|
uint32_t scratch80;
|
||||||
|
uint32_t scratch81;
|
||||||
|
uint32_t scratch82;
|
||||||
|
uint32_t scratch83;
|
||||||
|
uint32_t scratch84;
|
||||||
|
uint32_t scratch85;
|
||||||
|
uint32_t scratch86;
|
||||||
|
uint32_t scratch87;
|
||||||
|
uint32_t scratch88;
|
||||||
|
uint32_t scratch89;
|
||||||
|
uint32_t scratch90;
|
||||||
|
uint32_t scratch91;
|
||||||
|
uint32_t scratch92;
|
||||||
|
uint32_t scratch93;
|
||||||
|
uint32_t scratch94;
|
||||||
|
uint32_t scratch95;
|
||||||
|
uint32_t scratch96;
|
||||||
|
uint32_t scratch97;
|
||||||
|
uint32_t scratch98;
|
||||||
|
uint32_t scratch99;
|
||||||
|
uint32_t scratch100;
|
||||||
|
uint32_t scratch101;
|
||||||
|
uint32_t scratch102;
|
||||||
|
uint32_t scratch103;
|
||||||
|
uint32_t scratch104;
|
||||||
|
uint32_t scratch105;
|
||||||
|
uint32_t scratch106;
|
||||||
|
uint32_t scratch107;
|
||||||
|
uint32_t scratch108;
|
||||||
|
uint32_t scratch109;
|
||||||
|
uint32_t scratch110;
|
||||||
|
uint32_t scratch111;
|
||||||
|
uint32_t scratch112;
|
||||||
|
uint32_t scratch113;
|
||||||
|
uint32_t scratch114;
|
||||||
|
uint32_t scratch115;
|
||||||
|
uint32_t scratch116;
|
||||||
|
uint32_t scratch117;
|
||||||
|
uint32_t scratch118;
|
||||||
|
uint32_t scratch119;
|
||||||
|
uint32_t scratch120;
|
||||||
|
uint32_t scratch121;
|
||||||
|
uint32_t scratch122;
|
||||||
|
uint32_t scratch123;
|
||||||
|
uint32_t scratch124;
|
||||||
|
uint32_t scratch125;
|
||||||
|
uint32_t scratch126;
|
||||||
|
uint32_t scratch127;
|
||||||
|
uint32_t scratch128;
|
||||||
|
uint32_t scratch129;
|
||||||
|
uint32_t scratch130;
|
||||||
|
uint32_t scratch131;
|
||||||
|
uint32_t scratch132;
|
||||||
|
uint32_t scratch133;
|
||||||
|
uint32_t scratch134;
|
||||||
|
uint32_t scratch135;
|
||||||
|
uint32_t scratch136;
|
||||||
|
uint32_t scratch137;
|
||||||
|
uint32_t scratch138;
|
||||||
|
uint32_t scratch139;
|
||||||
|
uint32_t scratch140;
|
||||||
|
uint32_t scratch141;
|
||||||
|
uint32_t scratch142;
|
||||||
|
uint32_t scratch143;
|
||||||
|
uint32_t scratch144;
|
||||||
|
uint32_t scratch145;
|
||||||
|
uint32_t scratch146;
|
||||||
|
uint32_t scratch147;
|
||||||
|
uint32_t scratch148;
|
||||||
|
uint32_t scratch149;
|
||||||
|
uint32_t scratch150;
|
||||||
|
uint32_t scratch151;
|
||||||
|
uint32_t scratch152;
|
||||||
|
uint32_t scratch153;
|
||||||
|
uint32_t scratch154;
|
||||||
|
uint32_t scratch155;
|
||||||
|
uint32_t scratch156;
|
||||||
|
uint32_t scratch157;
|
||||||
|
uint32_t scratch158;
|
||||||
|
uint32_t scratch159;
|
||||||
|
uint32_t scratch160;
|
||||||
|
uint32_t scratch161;
|
||||||
|
uint32_t scratch162;
|
||||||
|
uint32_t scratch163;
|
||||||
|
uint32_t scratch164;
|
||||||
|
uint32_t scratch165;
|
||||||
|
uint32_t scratch166;
|
||||||
|
uint32_t scratch167;
|
||||||
|
uint32_t scratch168;
|
||||||
|
uint32_t scratch169;
|
||||||
|
uint32_t scratch170;
|
||||||
|
uint32_t scratch171;
|
||||||
|
uint32_t scratch172;
|
||||||
|
uint32_t scratch173;
|
||||||
|
uint32_t scratch174;
|
||||||
|
uint32_t scratch175;
|
||||||
|
uint32_t scratch176;
|
||||||
|
uint32_t scratch177;
|
||||||
|
uint32_t scratch178;
|
||||||
|
uint32_t scratch179;
|
||||||
|
uint32_t scratch180;
|
||||||
|
uint32_t scratch181;
|
||||||
|
uint32_t scratch182;
|
||||||
|
uint32_t scratch183;
|
||||||
|
uint32_t scratch184;
|
||||||
|
uint32_t scratch185;
|
||||||
|
uint32_t scratch186;
|
||||||
|
uint32_t scratch187;
|
||||||
|
uint32_t scratch188;
|
||||||
|
uint32_t scratch189;
|
||||||
|
uint32_t scratch190;
|
||||||
|
uint32_t scratch191;
|
||||||
|
uint32_t scratch192;
|
||||||
|
uint32_t scratch193;
|
||||||
|
uint32_t scratch194;
|
||||||
|
uint32_t scratch195;
|
||||||
|
uint32_t scratch196;
|
||||||
|
uint32_t scratch197;
|
||||||
|
uint32_t scratch198;
|
||||||
|
uint32_t scratch199;
|
||||||
|
uint32_t scratch200;
|
||||||
|
uint32_t scratch201;
|
||||||
|
uint32_t scratch202;
|
||||||
|
uint32_t scratch203;
|
||||||
|
uint32_t scratch204;
|
||||||
|
uint32_t scratch205;
|
||||||
|
uint32_t scratch206;
|
||||||
|
uint32_t scratch207;
|
||||||
|
uint32_t scratch208;
|
||||||
|
uint32_t scratch209;
|
||||||
|
uint32_t scratch210;
|
||||||
|
uint32_t scratch211;
|
||||||
|
uint32_t scratch212;
|
||||||
|
uint32_t scratch213;
|
||||||
|
uint32_t scratch214;
|
||||||
|
uint32_t scratch215;
|
||||||
|
uint32_t scratch216;
|
||||||
|
uint32_t scratch217;
|
||||||
|
uint32_t scratch218;
|
||||||
|
uint32_t scratch219;
|
||||||
|
uint32_t scratch220;
|
||||||
|
uint32_t scratch221;
|
||||||
|
uint32_t scratch222;
|
||||||
|
uint32_t scratch223;
|
||||||
|
uint32_t scratch224;
|
||||||
|
uint32_t scratch225;
|
||||||
|
uint32_t scratch226;
|
||||||
|
uint32_t scratch227;
|
||||||
|
uint32_t scratch228;
|
||||||
|
uint32_t scratch229;
|
||||||
|
uint32_t scratch230;
|
||||||
|
uint32_t scratch231;
|
||||||
|
uint32_t scratch232;
|
||||||
|
uint32_t scratch233;
|
||||||
|
uint32_t scratch234;
|
||||||
|
uint32_t scratch235;
|
||||||
|
uint32_t scratch236;
|
||||||
|
uint32_t scratch237;
|
||||||
|
uint32_t scratch238;
|
||||||
|
uint32_t scratch239;
|
||||||
|
uint32_t scratch240;
|
||||||
|
uint32_t scratch241;
|
||||||
|
uint32_t scratch242;
|
||||||
|
uint32_t scratch243;
|
||||||
|
uint32_t scratch244;
|
||||||
|
uint32_t scratch245;
|
||||||
|
uint32_t scratch246;
|
||||||
|
uint32_t scratch247;
|
||||||
|
uint32_t scratch248;
|
||||||
|
uint32_t scratch249;
|
||||||
|
uint32_t scratch250;
|
||||||
|
uint32_t scratch251;
|
||||||
|
uint32_t scratch252;
|
||||||
|
uint32_t scratch253;
|
||||||
|
uint32_t scratch254;
|
||||||
|
uint32_t scratch255;
|
||||||
|
uint32_t scratch256;
|
||||||
|
uint32_t scratch257;
|
||||||
|
uint32_t scratch258;
|
||||||
|
uint32_t scratch259;
|
||||||
|
uint32_t scratch260;
|
||||||
|
uint32_t scratch261;
|
||||||
|
uint32_t scratch262;
|
||||||
|
uint32_t scratch263;
|
||||||
|
uint32_t scratch264;
|
||||||
|
uint32_t scratch265;
|
||||||
|
uint32_t scratch266;
|
||||||
|
uint32_t scratch267;
|
||||||
|
uint32_t scratch268;
|
||||||
|
uint32_t scratch269;
|
||||||
|
uint32_t scratch270;
|
||||||
|
uint32_t scratch271;
|
||||||
|
uint32_t scratch272;
|
||||||
|
uint32_t scratch273;
|
||||||
|
uint32_t scratch274;
|
||||||
|
uint32_t scratch275;
|
||||||
|
uint32_t scratch276;
|
||||||
|
uint32_t scratch277;
|
||||||
|
uint32_t scratch278;
|
||||||
|
uint32_t scratch279;
|
||||||
|
uint32_t scratch280;
|
||||||
|
uint32_t scratch281;
|
||||||
|
uint32_t scratch282;
|
||||||
|
uint32_t scratch283;
|
||||||
|
uint32_t scratch284;
|
||||||
|
uint32_t scratch285;
|
||||||
|
uint32_t scratch286;
|
||||||
|
uint32_t scratch287;
|
||||||
|
uint32_t scratch288;
|
||||||
|
uint32_t scratch289;
|
||||||
|
uint32_t scratch290;
|
||||||
|
uint32_t scratch291;
|
||||||
|
uint32_t scratch292;
|
||||||
|
uint32_t scratch293;
|
||||||
|
uint32_t scratch294;
|
||||||
|
uint32_t scratch295;
|
||||||
|
uint32_t scratch296;
|
||||||
|
uint32_t scratch297;
|
||||||
|
uint32_t scratch298;
|
||||||
|
uint32_t scratch299;
|
||||||
|
uint32_t _reserved7[50];
|
||||||
|
uint32_t secure_scratch80;
|
||||||
|
uint32_t secure_scratch81;
|
||||||
|
uint32_t secure_scratch82;
|
||||||
|
uint32_t secure_scratch83;
|
||||||
|
uint32_t secure_scratch84;
|
||||||
|
uint32_t secure_scratch85;
|
||||||
|
uint32_t secure_scratch86;
|
||||||
|
uint32_t secure_scratch87;
|
||||||
|
uint32_t secure_scratch88;
|
||||||
|
uint32_t secure_scratch89;
|
||||||
|
uint32_t secure_scratch90;
|
||||||
|
uint32_t secure_scratch91;
|
||||||
|
uint32_t secure_scratch92;
|
||||||
|
uint32_t secure_scratch93;
|
||||||
|
uint32_t secure_scratch94;
|
||||||
|
uint32_t secure_scratch95;
|
||||||
|
uint32_t secure_scratch96;
|
||||||
|
uint32_t secure_scratch97;
|
||||||
|
uint32_t secure_scratch98;
|
||||||
|
uint32_t secure_scratch99;
|
||||||
|
uint32_t secure_scratch100;
|
||||||
|
uint32_t secure_scratch101;
|
||||||
|
uint32_t secure_scratch102;
|
||||||
|
uint32_t secure_scratch103;
|
||||||
|
uint32_t secure_scratch104;
|
||||||
|
uint32_t secure_scratch105;
|
||||||
|
uint32_t secure_scratch106;
|
||||||
|
uint32_t secure_scratch107;
|
||||||
|
uint32_t secure_scratch108;
|
||||||
|
uint32_t secure_scratch109;
|
||||||
|
uint32_t secure_scratch110;
|
||||||
|
uint32_t secure_scratch111;
|
||||||
|
uint32_t secure_scratch112;
|
||||||
|
uint32_t secure_scratch113;
|
||||||
|
uint32_t secure_scratch114;
|
||||||
|
uint32_t secure_scratch115;
|
||||||
|
uint32_t secure_scratch116;
|
||||||
|
uint32_t secure_scratch117;
|
||||||
|
uint32_t secure_scratch118;
|
||||||
|
uint32_t secure_scratch119;
|
||||||
|
} tegra_pmc_t;
|
||||||
|
|
||||||
|
static inline volatile tegra_pmc_t *pmc_get_regs(void)
|
||||||
|
{
|
||||||
|
return (volatile tegra_pmc_t *)PMC_BASE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -13,14 +13,17 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef FUSEE_STAGE2_H
|
||||||
|
#define FUSEE_STAGE2_H
|
||||||
|
|
||||||
#pragma once
|
#include "lib/log.h"
|
||||||
#include <vapours/results/results_common.hpp>
|
|
||||||
|
|
||||||
namespace ams::socket {
|
#define MTC_ARGV_ARGUMENT_STRUCT 0
|
||||||
|
#define MTC_ARGC 1
|
||||||
|
|
||||||
R_DEFINE_NAMESPACE_RESULT_MODULE(27);
|
typedef struct {
|
||||||
|
ScreenLogLevel log_level;
|
||||||
|
} stage2_mtc_args_t;
|
||||||
|
|
||||||
R_DEFINE_ERROR_RESULT(InsufficientProvidedMemory, 1);
|
#endif
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2018-2020 Atmosphère-NX
|
* Copyright (c) 2018 Atmosphère-NX
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.macro CLEAR_GPR_REG_ITER
|
.macro CLEAR_GPR_REG_ITER
|
||||||
mov r\@, #0
|
mov r\@, #0
|
||||||
.endm
|
.endm
|
||||||
@@ -26,10 +26,18 @@
|
|||||||
_start:
|
_start:
|
||||||
/* Switch to system mode, mask all interrupts, clear all flags */
|
/* Switch to system mode, mask all interrupts, clear all flags */
|
||||||
msr cpsr_cxsf, #0xDF
|
msr cpsr_cxsf, #0xDF
|
||||||
|
|
||||||
|
/* Backup current stack pointer. */
|
||||||
|
mov r12, sp
|
||||||
|
|
||||||
/* Set the stack pointer */
|
/* Set the stack pointer */
|
||||||
ldr sp, =__stack_top__
|
ldr sp, =__stack_top__
|
||||||
mov fp, #0
|
mov fp, #0
|
||||||
|
|
||||||
|
/* Save context */
|
||||||
|
push {r12, lr}
|
||||||
|
|
||||||
|
/* Call init. */
|
||||||
bl __program_init
|
bl __program_init
|
||||||
|
|
||||||
/* Set r0 to r12 to 0 (for debugging) & call main */
|
/* Set r0 to r12 to 0 (for debugging) & call main */
|
||||||
@@ -38,17 +46,25 @@ _start:
|
|||||||
.endr
|
.endr
|
||||||
ldr r0, =__program_argc
|
ldr r0, =__program_argc
|
||||||
ldr r1, =__program_argv
|
ldr r1, =__program_argv
|
||||||
ldr lr, =__program_exit
|
|
||||||
ldr r0, [r0]
|
ldr r0, [r0]
|
||||||
ldr r1, [r1]
|
ldr r1, [r1]
|
||||||
b main
|
bl main
|
||||||
|
|
||||||
|
/* Save result. */
|
||||||
|
push {r0}
|
||||||
|
|
||||||
|
/* Exit manually. */
|
||||||
|
bl __program_exit
|
||||||
|
|
||||||
|
/* Restore result. */
|
||||||
|
pop {r0}
|
||||||
|
|
||||||
/* No need to include this in normal programs: */
|
/* Restore context */
|
||||||
.section .chainloader.text.start, "ax", %progbits
|
pop {r12}
|
||||||
.arm
|
pop {lr}
|
||||||
.align 5
|
|
||||||
.global relocate_and_chainload
|
/* Restore previous stack pointer. */
|
||||||
.type relocate_and_chainload, %function
|
mov sp, r12
|
||||||
relocate_and_chainload:
|
|
||||||
ldr sp, =__stack_top__
|
/* Return */
|
||||||
b relocate_and_chainload_main
|
bx lr
|
||||||
49
fusee/fusee-mtc/src/utils.c
Normal file
49
fusee/fusee-mtc/src/utils.c
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018-2020 Atmosphère-NX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include "utils.h"
|
||||||
|
#include "display/video_fb.h"
|
||||||
|
#include "lib/log.h"
|
||||||
|
|
||||||
|
__attribute__ ((noreturn)) void generic_panic(void) {
|
||||||
|
while (true) {
|
||||||
|
/* Lock. */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
__attribute__((noreturn)) void fatal_error(const char *fmt, ...) {
|
||||||
|
/* Forcefully initialize the screen if logging is disabled. */
|
||||||
|
if (log_get_log_level() == SCREEN_LOG_LEVEL_NONE) {
|
||||||
|
/* Zero-fill the framebuffer and register it as printk provider. */
|
||||||
|
video_init((void *)0xC0000000);
|
||||||
|
|
||||||
|
/* Override the global logging level. */
|
||||||
|
log_set_log_level(SCREEN_LOG_LEVEL_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Display fatal error. */
|
||||||
|
va_list args;
|
||||||
|
print(SCREEN_LOG_LEVEL_ERROR, "Fatal error: ");
|
||||||
|
va_start(args, fmt);
|
||||||
|
vprint(SCREEN_LOG_LEVEL_ERROR, fmt, args);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
/* Lock. */
|
||||||
|
}
|
||||||
|
}
|
||||||
43
fusee/fusee-mtc/src/utils.h
Normal file
43
fusee/fusee-mtc/src/utils.h
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018-2020 Atmosphère-NX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FUSEE_UTILS_H
|
||||||
|
#define FUSEE_UTILS_H
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define BIT(n) (1u << (n))
|
||||||
|
#define BITL(n) (1ull << (n))
|
||||||
|
#define MASK(n) (BIT(n) - 1)
|
||||||
|
#define MASKL(n) (BITL(n) - 1)
|
||||||
|
#define MASK2(a,b) (MASK(a) & ~MASK(b))
|
||||||
|
#define MASK2L(a,b) (MASKL(a) & ~MASKL(b))
|
||||||
|
|
||||||
|
#define MAKE_REG32(a) (*(volatile uint32_t *)(a))
|
||||||
|
|
||||||
|
#define ALIGN(m) __attribute__((aligned(m)))
|
||||||
|
#define PACKED __attribute__((packed))
|
||||||
|
|
||||||
|
#define ALINLINE __attribute__((always_inline))
|
||||||
|
#define NOINLINE __attribute__((noinline))
|
||||||
|
|
||||||
|
__attribute__((noreturn)) void generic_panic(void);
|
||||||
|
__attribute__((noreturn)) void fatal_error(const char *fmt, ...);
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -8,7 +8,7 @@ endif
|
|||||||
|
|
||||||
TOPDIR ?= $(CURDIR)
|
TOPDIR ?= $(CURDIR)
|
||||||
|
|
||||||
AMS := $(TOPDIR)/../../../
|
AMS := $(TOPDIR)/../../
|
||||||
include $(DEVKITARM)/base_rules
|
include $(DEVKITARM)/base_rules
|
||||||
|
|
||||||
AMSBRANCH := $(shell git symbolic-ref --short HEAD)
|
AMSBRANCH := $(shell git symbolic-ref --short HEAD)
|
||||||
@@ -18,13 +18,6 @@ ifneq (, $(strip $(shell git status --porcelain 2>/dev/null)))
|
|||||||
AMSREV := $(AMSREV)-dirty
|
AMSREV := $(AMSREV)-dirty
|
||||||
endif
|
endif
|
||||||
|
|
||||||
define _bin2o
|
|
||||||
bin2s $< | $(AS) -o $(@)
|
|
||||||
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _ | tr - _)`"_end[];" > `(echo $(<F) | tr . _ | tr - _)`.h
|
|
||||||
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _ | tr - _)`"[];" >> `(echo $(<F) | tr . _ | tr - _)`.h
|
|
||||||
echo "extern const u32" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _ | tr - _)`_size";" >> `(echo $(<F) | tr . _ | tr - _)`.h
|
|
||||||
endef
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# TARGET is the name of the output
|
# TARGET is the name of the output
|
||||||
# BUILD is the directory where object files & intermediate files will be placed
|
# BUILD is the directory where object files & intermediate files will be placed
|
||||||
@@ -34,9 +27,9 @@ endef
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
TARGET := $(notdir $(CURDIR))
|
TARGET := $(notdir $(CURDIR))
|
||||||
BUILD := build
|
BUILD := build
|
||||||
SOURCES := src
|
SOURCES := src src/sdmmc src/lib src/lib/fatfs src/display
|
||||||
DATA := data
|
DATA := data
|
||||||
INCLUDES := include ../../../libraries/libvapours/include
|
INCLUDES := include ../../libraries/libvapours/include
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# options for code generation
|
# options for code generation
|
||||||
@@ -46,7 +39,6 @@ DEFINES := -D__BPMP__ -DFUSEE_STAGE1_SRC -DATMOSPHERE_GIT_BRANCH=\"$(AMSBRANCH)\
|
|||||||
|
|
||||||
CFLAGS := \
|
CFLAGS := \
|
||||||
-g \
|
-g \
|
||||||
-gdwarf-4 \
|
|
||||||
-O2 \
|
-O2 \
|
||||||
-fomit-frame-pointer \
|
-fomit-frame-pointer \
|
||||||
-ffunction-sections \
|
-ffunction-sections \
|
||||||
@@ -54,9 +46,6 @@ CFLAGS := \
|
|||||||
-std=gnu11 \
|
-std=gnu11 \
|
||||||
-Werror \
|
-Werror \
|
||||||
-Wall \
|
-Wall \
|
||||||
-Wno-array-bounds \
|
|
||||||
-Wno-stringop-overflow \
|
|
||||||
-Wno-stringop-overread \
|
|
||||||
-fstrict-volatile-bitfields \
|
-fstrict-volatile-bitfields \
|
||||||
$(ARCH) $(DEFINES)
|
$(ARCH) $(DEFINES)
|
||||||
|
|
||||||
@@ -64,8 +53,8 @@ CFLAGS += $(INCLUDE)
|
|||||||
|
|
||||||
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11
|
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11
|
||||||
|
|
||||||
ASFLAGS := -g -gdwarf-4 $(ARCH)
|
ASFLAGS := -g $(ARCH)
|
||||||
LDFLAGS = -specs=$(TOPDIR)/linker.specs -g -gdwarf-4 $(ARCH) -Wl,-Map,$(notdir $*.map)
|
LDFLAGS = -specs=$(TOPDIR)/linker.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
|
||||||
|
|
||||||
LIBS :=
|
LIBS :=
|
||||||
|
|
||||||
@@ -88,14 +77,14 @@ export TOPDIR := $(CURDIR)
|
|||||||
|
|
||||||
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
|
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
|
||||||
$(foreach dir,$(DATA),$(CURDIR)/$(dir)) \
|
$(foreach dir,$(DATA),$(CURDIR)/$(dir)) \
|
||||||
$(CURDIR)/fusee-primary-main
|
$(AMS)/exosphere/program/rebootstub
|
||||||
|
|
||||||
export DEPSDIR := $(CURDIR)/$(BUILD)
|
export DEPSDIR := $(CURDIR)/$(BUILD)
|
||||||
|
|
||||||
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
|
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
|
||||||
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
|
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
|
||||||
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
|
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
|
||||||
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) fusee-primary-main.lz4
|
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) rebootstub.bin
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# use CXX for linking C++ projects, CC for standard C
|
# use CXX for linking C++ projects, CC for standard C
|
||||||
@@ -111,10 +100,10 @@ else
|
|||||||
endif
|
endif
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
export OFILES_BIN := $(addsuffix .o,$(subst -,_,$(BINFILES)))
|
export OFILES_BIN := $(addsuffix .o,$(BINFILES))
|
||||||
export OFILES_SRC := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
|
export OFILES_SRC := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
|
||||||
export OFILES := $(OFILES_BIN) $(OFILES_SRC)
|
export OFILES := $(OFILES_BIN) $(OFILES_SRC)
|
||||||
export HFILES_BIN := $(addsuffix .h,$(subst .,_,$(subst -,_,$(BINFILES))))
|
export HFILES_BIN := $(addsuffix .h,$(subst .,_,$(BINFILES)))
|
||||||
|
|
||||||
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
||||||
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
||||||
@@ -122,24 +111,22 @@ export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
|||||||
|
|
||||||
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
|
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
|
||||||
|
|
||||||
.PHONY: $(BUILD) clean all check_main
|
.PHONY: $(BUILD) clean all check_rebootstub
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
all: $(BUILD)
|
all: check_rebootstub $(BUILD)
|
||||||
|
|
||||||
fusee-primary-main/fusee-primary-main.lz4: check_main
|
check_rebootstub:
|
||||||
|
@$(MAKE) -C $(AMS)/exosphere/program/rebootstub all
|
||||||
|
|
||||||
check_main:
|
$(BUILD): check_rebootstub
|
||||||
@$(MAKE) -C fusee-primary-main all
|
|
||||||
|
|
||||||
$(BUILD): fusee-primary-main/fusee-primary-main.lz4
|
|
||||||
@[ -d $@ ] || mkdir -p $@
|
@[ -d $@ ] || mkdir -p $@
|
||||||
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
|
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
clean:
|
clean:
|
||||||
@echo clean ...
|
@echo clean ...
|
||||||
@$(MAKE) -C fusee-primary-main clean
|
@$(MAKE) -C $(AMS)/exosphere/program/rebootstub clean
|
||||||
@rm -fr $(BUILD) $(TARGET).bin $(TARGET).elf
|
@rm -fr $(BUILD) $(TARGET).bin $(TARGET).elf
|
||||||
|
|
||||||
|
|
||||||
@@ -165,8 +152,6 @@ $(OUTPUT).elf : $(OFILES)
|
|||||||
@$(LD) $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@
|
@$(LD) $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@
|
||||||
@$(NM) -CSn $@ > $(notdir $*.lst)
|
@$(NM) -CSn $@ > $(notdir $*.lst)
|
||||||
|
|
||||||
utils.o: CFLAGS += -fno-builtin
|
|
||||||
|
|
||||||
$(OFILES_SRC) : $(HFILES_BIN)
|
$(OFILES_SRC) : $(HFILES_BIN)
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
@@ -177,14 +162,6 @@ $(OFILES_SRC) : $(HFILES_BIN)
|
|||||||
@echo $(notdir $<)
|
@echo $(notdir $<)
|
||||||
@$(bin2o)
|
@$(bin2o)
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# you need a rule like this for each extension you use as binary data
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
fusee_primary_main.lz4.o fusee_primary_main_lz4.h: fusee-primary-main.lz4
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
@echo $(notdir $<)
|
|
||||||
@$(_bin2o)
|
|
||||||
|
|
||||||
-include $(DEPENDS)
|
-include $(DEPENDS)
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
import sys, lz4
|
|
||||||
from struct import unpack as up
|
|
||||||
|
|
||||||
def lz4_compress(data):
|
|
||||||
try:
|
|
||||||
import lz4.block as block
|
|
||||||
except ImportError:
|
|
||||||
block = lz4.LZ4_compress
|
|
||||||
return block.compress(data, 'high_compression', store_size=False)
|
|
||||||
|
|
||||||
def main(argc, argv):
|
|
||||||
if argc != 3:
|
|
||||||
print('Usage: %s in out' % argv[0])
|
|
||||||
return 1
|
|
||||||
with open(argv[1], 'rb') as f:
|
|
||||||
data = f.read()
|
|
||||||
with open(argv[2], 'wb') as f:
|
|
||||||
f.write(lz4_compress(data))
|
|
||||||
return 0
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.exit(main(len(sys.argv), sys.argv))
|
|
||||||
@@ -1,465 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2018 naehrwert
|
|
||||||
* Copyright (c) 2018 CTCaer
|
|
||||||
* Copyright (c) 2018-2020 Atmosphère-NX
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "di.h"
|
|
||||||
#include "fuse.h"
|
|
||||||
#include "timers.h"
|
|
||||||
#include "i2c.h"
|
|
||||||
#include "pmc.h"
|
|
||||||
#include "max77620.h"
|
|
||||||
#include "gpio.h"
|
|
||||||
#include "pinmux.h"
|
|
||||||
#include "car.h"
|
|
||||||
#include "apb_misc.h"
|
|
||||||
|
|
||||||
#include "di.inl"
|
|
||||||
|
|
||||||
static uint32_t g_lcd_vendor = 0;
|
|
||||||
|
|
||||||
/* Determine the current SoC for Mariko specific code. */
|
|
||||||
static bool is_soc_mariko() {
|
|
||||||
return (fuse_get_soc_type() == 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void do_dsi_sleep_or_register_writes(const dsi_sleep_or_register_write_t *writes, uint32_t num_writes) {
|
|
||||||
for (uint32_t i = 0; i < num_writes; i++) {
|
|
||||||
if (writes[i].kind == 1) {
|
|
||||||
udelay(1000 * writes[i].offset);
|
|
||||||
} else {
|
|
||||||
*(volatile uint32_t *)(DSI_BASE + sizeof(uint32_t) * writes[i].offset) = writes[i].value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void do_register_writes(uint32_t base_address, const register_write_t *writes, uint32_t num_writes) {
|
|
||||||
for (uint32_t i = 0; i < num_writes; i++) {
|
|
||||||
*(volatile uint32_t *)(base_address + writes[i].offset) = writes[i].value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void dsi_wait(uint32_t timeout, uint32_t offset, uint32_t mask, uint32_t delay) {
|
|
||||||
uint32_t end = get_time_us() + timeout;
|
|
||||||
while ((get_time_us() < end) && (MAKE_DSI_REG(offset) & mask)) {
|
|
||||||
/* Wait. */
|
|
||||||
}
|
|
||||||
udelay(delay);
|
|
||||||
}
|
|
||||||
|
|
||||||
void display_init(void) {
|
|
||||||
volatile tegra_car_t *car = car_get_regs();
|
|
||||||
volatile tegra_pmc_t *pmc = pmc_get_regs();
|
|
||||||
volatile tegra_pinmux_t *pinmux = pinmux_get_regs();
|
|
||||||
bool is_mariko = is_soc_mariko();
|
|
||||||
uint32_t hardware_type = fuse_get_hardware_type();
|
|
||||||
|
|
||||||
/* Power on. */
|
|
||||||
if (is_mariko) {
|
|
||||||
uint8_t val = 0x3A;
|
|
||||||
i2c_send(I2C_5, MAX77620_PWR_I2C_ADDR, MAX77620_REG_SD2, &val, 1);
|
|
||||||
val = 0x71;
|
|
||||||
i2c_send(I2C_5, MAX77620_PWR_I2C_ADDR, MAX77620_REG_SD2_CFG, &val, 1);
|
|
||||||
val = 0xD0;
|
|
||||||
i2c_send(I2C_5, MAX77620_PWR_I2C_ADDR, MAX77620_REG_LDO0_CFG, &val, 1);
|
|
||||||
} else {
|
|
||||||
uint8_t val = 0xD0;
|
|
||||||
i2c_send(I2C_5, MAX77620_PWR_I2C_ADDR, MAX77620_REG_LDO0_CFG, &val, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Enable MIPI CAL, DSI, DISP1, HOST1X, UART_FST_MIPI_CAL, DSIA LP clocks. */
|
|
||||||
car->rst_dev_h_clr = 0x1010000;
|
|
||||||
car->clk_enb_h_set = 0x1010000;
|
|
||||||
car->rst_dev_l_clr = 0x18000000;
|
|
||||||
car->clk_enb_l_set = 0x18000000;
|
|
||||||
car->clk_enb_x_set = 0x20000;
|
|
||||||
car->clk_source_uart_fst_mipi_cal = 0xA;
|
|
||||||
car->clk_enb_w_set = 0x80000;
|
|
||||||
car->clk_source_dsia_lp = 0xA;
|
|
||||||
|
|
||||||
/* DPD idle. */
|
|
||||||
pmc->io_dpd_req = 0x40000000;
|
|
||||||
pmc->io_dpd2_req = 0x40000000;
|
|
||||||
|
|
||||||
/* Configure pins. */
|
|
||||||
pinmux->nfc_en &= ~PINMUX_TRISTATE;
|
|
||||||
pinmux->nfc_int &= ~PINMUX_TRISTATE;
|
|
||||||
pinmux->lcd_bl_pwm &= ~PINMUX_TRISTATE;
|
|
||||||
pinmux->lcd_bl_en &= ~PINMUX_TRISTATE;
|
|
||||||
pinmux->lcd_rst &= ~PINMUX_TRISTATE;
|
|
||||||
|
|
||||||
if (is_mariko && (hardware_type == 5)) {
|
|
||||||
/* HardwareType_Five only configures GPIO_LCD_BL_RST. */
|
|
||||||
gpio_configure_mode(GPIO_LCD_BL_RST, GPIO_MODE_GPIO);
|
|
||||||
gpio_configure_direction(GPIO_LCD_BL_RST, GPIO_DIRECTION_OUTPUT);
|
|
||||||
} else {
|
|
||||||
/* Configure Backlight +-5V GPIOs. */
|
|
||||||
gpio_configure_mode(GPIO_LCD_BL_P5V, GPIO_MODE_GPIO);
|
|
||||||
gpio_configure_mode(GPIO_LCD_BL_N5V, GPIO_MODE_GPIO);
|
|
||||||
gpio_configure_direction(GPIO_LCD_BL_P5V, GPIO_DIRECTION_OUTPUT);
|
|
||||||
gpio_configure_direction(GPIO_LCD_BL_N5V, GPIO_DIRECTION_OUTPUT);
|
|
||||||
|
|
||||||
/* Enable Backlight +5V. */
|
|
||||||
gpio_write(GPIO_LCD_BL_P5V, GPIO_LEVEL_HIGH);
|
|
||||||
|
|
||||||
udelay(10000);
|
|
||||||
|
|
||||||
/* Enable Backlight -5V. */
|
|
||||||
gpio_write(GPIO_LCD_BL_N5V, GPIO_LEVEL_HIGH);
|
|
||||||
|
|
||||||
udelay(10000);
|
|
||||||
|
|
||||||
/* Configure Backlight PWM, EN and RST GPIOs. */
|
|
||||||
gpio_configure_mode(GPIO_LCD_BL_PWM, GPIO_MODE_GPIO);
|
|
||||||
gpio_configure_mode(GPIO_LCD_BL_EN, GPIO_MODE_GPIO);
|
|
||||||
gpio_configure_mode(GPIO_LCD_BL_RST, GPIO_MODE_GPIO);
|
|
||||||
gpio_configure_direction(GPIO_LCD_BL_PWM, GPIO_DIRECTION_OUTPUT);
|
|
||||||
gpio_configure_direction(GPIO_LCD_BL_EN, GPIO_DIRECTION_OUTPUT);
|
|
||||||
gpio_configure_direction(GPIO_LCD_BL_RST, GPIO_DIRECTION_OUTPUT);
|
|
||||||
|
|
||||||
/* Enable Backlight EN. */
|
|
||||||
gpio_write(GPIO_LCD_BL_EN, GPIO_LEVEL_HIGH);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Configure display interface and display. */
|
|
||||||
MAKE_MIPI_CAL_REG(MIPI_CAL_MIPI_BIAS_PAD_CFG2) = 0;
|
|
||||||
if (is_mariko) {
|
|
||||||
MAKE_MIPI_CAL_REG(MIPI_CAL_MIPI_BIAS_PAD_CFG0) = 0;
|
|
||||||
APB_MISC_GP_DSI_PAD_CONTROL_0 = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_mariko) {
|
|
||||||
do_register_writes(CAR_BASE, display_config_plld_01_mariko, 4);
|
|
||||||
} else {
|
|
||||||
do_register_writes(CAR_BASE, display_config_plld_01_erista, 4);
|
|
||||||
}
|
|
||||||
do_register_writes(DI_BASE, display_config_dc_01, 94);
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_01_init_01, 8);
|
|
||||||
if (is_mariko) {
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_01_init_02_mariko, 1);
|
|
||||||
} else {
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_01_init_02_erista, 1);
|
|
||||||
}
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_01_init_03, 14);
|
|
||||||
if (is_mariko) {
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_01_init_04_mariko, 7);
|
|
||||||
} else {
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_01_init_04_erista, 0);
|
|
||||||
}
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_01_init_05, 10);
|
|
||||||
if (is_mariko) {
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_phy_timing_mariko, 1);
|
|
||||||
} else {
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_phy_timing_erista, 1);
|
|
||||||
}
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_01_init_06, 12);
|
|
||||||
if (is_mariko) {
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_phy_timing_mariko, 1);
|
|
||||||
} else {
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_phy_timing_erista, 1);
|
|
||||||
}
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_01_init_07, 14);
|
|
||||||
|
|
||||||
udelay(10000);
|
|
||||||
|
|
||||||
/* Enable Backlight RST. */
|
|
||||||
gpio_write(GPIO_LCD_BL_RST, GPIO_LEVEL_HIGH);
|
|
||||||
|
|
||||||
udelay(60000);
|
|
||||||
|
|
||||||
if (is_mariko && (hardware_type == 5)) {
|
|
||||||
MAKE_DSI_REG(DSI_BTA_TIMING) = 0x40103;
|
|
||||||
} else {
|
|
||||||
MAKE_DSI_REG(DSI_BTA_TIMING) = 0x50204;
|
|
||||||
}
|
|
||||||
MAKE_DSI_REG(DSI_WR_DATA) = 0x337;
|
|
||||||
MAKE_DSI_REG(DSI_TRIGGER) = DSI_TRIGGER_HOST;
|
|
||||||
dsi_wait(250000, DSI_TRIGGER, (DSI_TRIGGER_HOST | DSI_TRIGGER_VIDEO), 5);
|
|
||||||
|
|
||||||
MAKE_DSI_REG(DSI_WR_DATA) = 0x406;
|
|
||||||
MAKE_DSI_REG(DSI_TRIGGER) = DSI_TRIGGER_HOST;
|
|
||||||
dsi_wait(250000, DSI_TRIGGER, (DSI_TRIGGER_HOST | DSI_TRIGGER_VIDEO), 5);
|
|
||||||
|
|
||||||
MAKE_DSI_REG(DSI_HOST_CONTROL) = (DSI_HOST_CONTROL_TX_TRIG_HOST | DSI_HOST_CONTROL_IMM_BTA | DSI_HOST_CONTROL_CS | DSI_HOST_CONTROL_ECC);
|
|
||||||
dsi_wait(150000, DSI_HOST_CONTROL, DSI_HOST_CONTROL_IMM_BTA, 5000);
|
|
||||||
|
|
||||||
/* Parse LCD vendor. */
|
|
||||||
uint32_t host_response[3];
|
|
||||||
for (uint32_t i = 0; i < 3; i++) {
|
|
||||||
host_response[i] = MAKE_DSI_REG(DSI_RD_DATA);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The last word from host response is:
|
|
||||||
Bits 0-7: FAB
|
|
||||||
Bits 8-15: REV
|
|
||||||
Bits 16-23: Minor REV
|
|
||||||
*/
|
|
||||||
if ((host_response[2] & 0xFF) == 0x10) {
|
|
||||||
g_lcd_vendor = 0;
|
|
||||||
} else {
|
|
||||||
g_lcd_vendor = (host_response[2] >> 8) & 0xFF00;
|
|
||||||
}
|
|
||||||
g_lcd_vendor = (g_lcd_vendor & 0xFFFFFF00) | (host_response[2] & 0xFF);
|
|
||||||
|
|
||||||
/* LCD vendor specific configuration. */
|
|
||||||
switch (g_lcd_vendor) {
|
|
||||||
case 0x10: /* Japan Display Inc screens. */
|
|
||||||
do_dsi_sleep_or_register_writes(display_config_jdi_specific_init_01, 48);
|
|
||||||
break;
|
|
||||||
case 0xF20: /* Innolux nx-abca2 screens. */
|
|
||||||
do_dsi_sleep_or_register_writes(display_config_innolux_nx_abca2_specific_init_01, 14);
|
|
||||||
break;
|
|
||||||
case 0xF30: /* AUO nx-abca2 screens. */
|
|
||||||
do_dsi_sleep_or_register_writes(display_config_auo_nx_abca2_specific_init_01, 14);
|
|
||||||
break;
|
|
||||||
case 0x2050: /* Unknown nx-abcd screens. */
|
|
||||||
do_dsi_sleep_or_register_writes(display_config_50_nx_abcd_specific_init_01, 13);
|
|
||||||
break;
|
|
||||||
case 0x1020: /* Innolux nx-abcc screens. */
|
|
||||||
case 0x1030: /* AUO nx-abcc screens. */
|
|
||||||
case 0x1040: /* Unknown nx-abcc screens. */
|
|
||||||
default:
|
|
||||||
do_dsi_sleep_or_register_writes(display_config_innolux_auo_40_nx_abcc_specific_init_01, 5);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
udelay(20000);
|
|
||||||
|
|
||||||
if (is_mariko) {
|
|
||||||
do_register_writes(CAR_BASE, display_config_plld_02_mariko, 3);
|
|
||||||
} else {
|
|
||||||
do_register_writes(CAR_BASE, display_config_plld_02_erista, 3);
|
|
||||||
}
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_01_init_08, 1);
|
|
||||||
if (is_mariko) {
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_phy_timing_mariko, 1);
|
|
||||||
} else {
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_phy_timing_erista, 1);
|
|
||||||
}
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_01_init_09, 19);
|
|
||||||
MAKE_DI_REG(DC_DISP_DISP_CLOCK_CONTROL) = 4;
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_01_init_10, 10);
|
|
||||||
|
|
||||||
udelay(10000);
|
|
||||||
|
|
||||||
if (is_mariko) {
|
|
||||||
do_register_writes(MIPI_CAL_BASE, display_config_mipi_cal_01, 4);
|
|
||||||
do_register_writes(MIPI_CAL_BASE, display_config_mipi_cal_02_mariko, 2);
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_01_init_11_mariko, 7);
|
|
||||||
do_register_writes(MIPI_CAL_BASE, display_config_mipi_cal_03_mariko, 6);
|
|
||||||
do_register_writes(MIPI_CAL_BASE, display_config_mipi_cal_04, 10);
|
|
||||||
do_register_writes(MIPI_CAL_BASE, display_config_mipi_cal_02_mariko, 2);
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_01_init_11_mariko, 7);
|
|
||||||
do_register_writes(MIPI_CAL_BASE, display_config_mipi_cal_03_mariko, 6);
|
|
||||||
do_register_writes(MIPI_CAL_BASE, display_config_mipi_cal_04, 10);
|
|
||||||
} else {
|
|
||||||
do_register_writes(MIPI_CAL_BASE, display_config_mipi_cal_01, 4);
|
|
||||||
do_register_writes(MIPI_CAL_BASE, display_config_mipi_cal_02_erista, 2);
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_01_init_11_erista, 4);
|
|
||||||
do_register_writes(MIPI_CAL_BASE, display_config_mipi_cal_03_erista, 6);
|
|
||||||
do_register_writes(MIPI_CAL_BASE, display_config_mipi_cal_04, 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
udelay(10000);
|
|
||||||
|
|
||||||
do_register_writes(DI_BASE, display_config_dc_02, 113);
|
|
||||||
}
|
|
||||||
|
|
||||||
void display_end(void) {
|
|
||||||
volatile tegra_car_t *car = car_get_regs();
|
|
||||||
volatile tegra_pinmux_t *pinmux = pinmux_get_regs();
|
|
||||||
bool is_mariko = is_soc_mariko();
|
|
||||||
|
|
||||||
/* Disable Backlight. */
|
|
||||||
display_backlight(false);
|
|
||||||
|
|
||||||
MAKE_DSI_REG(DSI_VIDEO_MODE_CONTROL) = 1;
|
|
||||||
MAKE_DSI_REG(DSI_WR_DATA) = 0x2805;
|
|
||||||
|
|
||||||
/* Wait 5 frames. */
|
|
||||||
uint32_t start_val = MAKE_HOST1X_REG(0x30A4);
|
|
||||||
while (MAKE_HOST1X_REG(0x30A4) < start_val + 5) {
|
|
||||||
/* Wait. */
|
|
||||||
}
|
|
||||||
|
|
||||||
MAKE_DI_REG(DC_CMD_STATE_ACCESS) = (READ_MUX | WRITE_MUX);
|
|
||||||
MAKE_DSI_REG(DSI_VIDEO_MODE_CONTROL) = 0;
|
|
||||||
|
|
||||||
do_register_writes(DI_BASE, display_config_dc_01_fini_01, 13);
|
|
||||||
udelay(40000);
|
|
||||||
|
|
||||||
if (is_mariko) {
|
|
||||||
do_register_writes(CAR_BASE, display_config_plld_01_mariko, 4);
|
|
||||||
} else {
|
|
||||||
do_register_writes(CAR_BASE, display_config_plld_01_erista, 4);
|
|
||||||
}
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_01_fini_01, 2);
|
|
||||||
if (is_mariko) {
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_phy_timing_mariko, 1);
|
|
||||||
} else {
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_phy_timing_erista, 1);
|
|
||||||
}
|
|
||||||
do_register_writes(DSI_BASE, display_config_dsi_01_fini_02, 13);
|
|
||||||
|
|
||||||
if (g_lcd_vendor != 0x2050) {
|
|
||||||
udelay(10000);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* LCD vendor specific shutdown. */
|
|
||||||
switch (g_lcd_vendor) {
|
|
||||||
case 0x10: /* Japan Display Inc screens. */
|
|
||||||
do_dsi_sleep_or_register_writes(display_config_jdi_specific_fini_01, 22);
|
|
||||||
break;
|
|
||||||
case 0xF30: /* AUO nx-abca2 screens. */
|
|
||||||
do_dsi_sleep_or_register_writes(display_config_auo_nx_abca2_specific_fini_01, 38);
|
|
||||||
break;
|
|
||||||
case 0x1020: /* Innolux nx-abcc screens. */
|
|
||||||
do_dsi_sleep_or_register_writes(display_config_innolux_nx_abcc_specific_fini_01, 10);
|
|
||||||
break;
|
|
||||||
case 0x1030: /* AUO nx-abcc screens. */
|
|
||||||
do_dsi_sleep_or_register_writes(display_config_auo_nx_abcc_specific_fini_01, 10);
|
|
||||||
break;
|
|
||||||
case 0x1040: /* Unknown nx-abcc screens. */
|
|
||||||
do_dsi_sleep_or_register_writes(display_config_40_nx_abcc_specific_fini_01, 10);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
MAKE_DSI_REG(DSI_WR_DATA) = 0x1005;
|
|
||||||
MAKE_DSI_REG(DSI_TRIGGER) = DSI_TRIGGER_HOST;
|
|
||||||
udelay((g_lcd_vendor == 0x2050) ? 120000 : 50000);
|
|
||||||
|
|
||||||
/* Disable Backlight RST. */
|
|
||||||
gpio_write(GPIO_LCD_BL_RST, GPIO_LEVEL_LOW);
|
|
||||||
|
|
||||||
if (g_lcd_vendor == 0x2050) {
|
|
||||||
udelay(30000);
|
|
||||||
} else {
|
|
||||||
udelay(10000);
|
|
||||||
|
|
||||||
/* Disable Backlight -5V. */
|
|
||||||
gpio_write(GPIO_LCD_BL_N5V, GPIO_LEVEL_LOW);
|
|
||||||
|
|
||||||
udelay(10000);
|
|
||||||
|
|
||||||
/* Disable Backlight +5V. */
|
|
||||||
gpio_write(GPIO_LCD_BL_P5V, GPIO_LEVEL_LOW);
|
|
||||||
|
|
||||||
udelay(10000);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Disable clocks. */
|
|
||||||
car->rst_dev_h_set = 0x1010000;
|
|
||||||
car->clk_enb_h_clr = 0x1010000;
|
|
||||||
car->rst_dev_l_set = 0x18000000;
|
|
||||||
car->clk_enb_l_clr = 0x18000000;
|
|
||||||
|
|
||||||
MAKE_DSI_REG(DSI_PAD_CONTROL_0) = (DSI_PAD_CONTROL_VS1_PULLDN_CLK | DSI_PAD_CONTROL_VS1_PULLDN(0xF) | DSI_PAD_CONTROL_VS1_PDIO_CLK | DSI_PAD_CONTROL_VS1_PDIO(0xF));
|
|
||||||
MAKE_DSI_REG(DSI_POWER_CONTROL) = 0;
|
|
||||||
|
|
||||||
if (!is_mariko) {
|
|
||||||
/* Backlight PWM. */
|
|
||||||
gpio_configure_mode(GPIO_LCD_BL_PWM, GPIO_MODE_SFIO);
|
|
||||||
|
|
||||||
pinmux->lcd_bl_pwm = ((pinmux->lcd_bl_pwm & ~PINMUX_TRISTATE) | PINMUX_TRISTATE);
|
|
||||||
pinmux->lcd_bl_pwm = (((pinmux->lcd_bl_pwm >> 2) << 2) | 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void display_backlight(bool enable) {
|
|
||||||
if (g_lcd_vendor == 0x2050) {
|
|
||||||
int brightness = enable ? 100 : 0;
|
|
||||||
|
|
||||||
/* Enable FRAME_END_INT */
|
|
||||||
MAKE_DI_REG(DC_CMD_INT_ENABLE) = 2;
|
|
||||||
|
|
||||||
/* Configure DSI_LINE_TYPE as FOUR */
|
|
||||||
MAKE_DSI_REG(DSI_VIDEO_MODE_CONTROL) = 1;
|
|
||||||
MAKE_DSI_REG(DSI_VIDEO_MODE_CONTROL) = 9;
|
|
||||||
|
|
||||||
/* Set and wait for FRAME_END_INT */
|
|
||||||
MAKE_DI_REG(DC_CMD_INT_STATUS) = 2;
|
|
||||||
while ((MAKE_DI_REG(DC_CMD_INT_STATUS) & 2) != 0) {
|
|
||||||
/* Wait */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Configure display brightness. */
|
|
||||||
const uint32_t brightness_val = ((0x7FF * brightness) / 100);
|
|
||||||
MAKE_DSI_REG(DSI_WR_DATA) = 0x339;
|
|
||||||
MAKE_DSI_REG(DSI_WR_DATA) = (brightness_val & 0x700) | ((brightness_val & 0xFF) << 16) | 0x51;
|
|
||||||
|
|
||||||
/* Set and wait for FRAME_END_INT */
|
|
||||||
MAKE_DI_REG(DC_CMD_INT_STATUS) = 2;
|
|
||||||
while ((MAKE_DI_REG(DC_CMD_INT_STATUS) & 2) != 0) {
|
|
||||||
/* Wait */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set client sync point block reset. */
|
|
||||||
MAKE_DSI_REG(DSI_INCR_SYNCPT_CNTRL) = 1;
|
|
||||||
udelay(300000);
|
|
||||||
|
|
||||||
/* Clear client sync point block resest. */
|
|
||||||
MAKE_DSI_REG(DSI_INCR_SYNCPT_CNTRL) = 0;
|
|
||||||
udelay(300000);
|
|
||||||
|
|
||||||
/* Clear DSI_LINE_TYPE config. */
|
|
||||||
MAKE_DSI_REG(DSI_VIDEO_MODE_CONTROL) = 0;
|
|
||||||
|
|
||||||
/* Disable FRAME_END_INT */
|
|
||||||
MAKE_DI_REG(DC_CMD_INT_ENABLE) = 0;
|
|
||||||
MAKE_DI_REG(DC_CMD_INT_STATUS) = 2;
|
|
||||||
} else {
|
|
||||||
/* Enable Backlight PWM. */
|
|
||||||
gpio_write(GPIO_LCD_BL_PWM, enable ? GPIO_LEVEL_HIGH : GPIO_LEVEL_LOW);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void display_color_screen(uint32_t color) {
|
|
||||||
do_register_writes(DI_BASE, display_config_solid_color, 8);
|
|
||||||
|
|
||||||
/* Configure display to show single color. */
|
|
||||||
MAKE_DI_REG(DC_WIN_AD_WIN_OPTIONS) = 0;
|
|
||||||
MAKE_DI_REG(DC_WIN_BD_WIN_OPTIONS) = 0;
|
|
||||||
MAKE_DI_REG(DC_WIN_CD_WIN_OPTIONS) = 0;
|
|
||||||
MAKE_DI_REG(DC_DISP_BLEND_BACKGROUND_COLOR) = color;
|
|
||||||
MAKE_DI_REG(DC_CMD_STATE_CONTROL) = ((MAKE_DI_REG(DC_CMD_STATE_CONTROL) & 0xFFFFFFFE) | GENERAL_ACT_REQ);
|
|
||||||
|
|
||||||
udelay(35000);
|
|
||||||
|
|
||||||
display_backlight(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t *display_init_framebuffer(void *address) {
|
|
||||||
static register_write_t conf[sizeof(display_config_frame_buffer)/sizeof(register_write_t)] = {0};
|
|
||||||
if (conf[0].value == 0) {
|
|
||||||
for (uint32_t i = 0; i < sizeof(display_config_frame_buffer)/sizeof(register_write_t); i++) {
|
|
||||||
conf[i] = display_config_frame_buffer[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t *lfb_addr = (uint32_t *)address;
|
|
||||||
conf[19].value = (uint32_t)address;
|
|
||||||
|
|
||||||
/* This configures the framebuffer @ address with a resolution of 1280x720 (line stride 768). */
|
|
||||||
do_register_writes(DI_BASE, conf, 32);
|
|
||||||
|
|
||||||
udelay(35000);
|
|
||||||
|
|
||||||
return lfb_addr;
|
|
||||||
}
|
|
||||||
@@ -1,773 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2018 naehrwert
|
|
||||||
* Copyright (c) 2018 CTCaer
|
|
||||||
* Copyright (c) 2018-2020 Atmosphère-NX
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint32_t offset;
|
|
||||||
uint32_t value;
|
|
||||||
} register_write_t;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint16_t kind;
|
|
||||||
uint16_t offset;
|
|
||||||
uint32_t value;
|
|
||||||
} dsi_sleep_or_register_write_t;
|
|
||||||
|
|
||||||
static const uint32_t display_config_frame_buffer_address = 0xC0000000;
|
|
||||||
|
|
||||||
static const register_write_t display_config_plld_01_erista[4] = {
|
|
||||||
{CLK_RST_CONTROLLER_CLK_SOURCE_DISP1, 0x40000000},
|
|
||||||
{CLK_RST_CONTROLLER_PLLD_BASE, 0x4830A001},
|
|
||||||
{CLK_RST_CONTROLLER_PLLD_MISC1, 0x00000020},
|
|
||||||
{CLK_RST_CONTROLLER_PLLD_MISC, 0x002D0AAA},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_plld_01_mariko[4] = {
|
|
||||||
{CLK_RST_CONTROLLER_CLK_SOURCE_DISP1, 0x40000000},
|
|
||||||
{CLK_RST_CONTROLLER_PLLD_BASE, 0x4830A001},
|
|
||||||
{CLK_RST_CONTROLLER_PLLD_MISC1, 0x00000000},
|
|
||||||
{CLK_RST_CONTROLLER_PLLD_MISC, 0x002DFC00},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dc_01[94] = {
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_ACCESS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_REG_ACT_CONTROL, 0x54},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DC_MCCIF_FIFOCTRL, 0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_MEM_HIGH_PRIORITY, 0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_MEM_HIGH_PRIORITY_TIMER, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_POWER_CONTROL, PW0_ENABLE | PW1_ENABLE | PW2_ENABLE | PW3_ENABLE | PW4_ENABLE | PM0_ENABLE | PM1_ENABLE},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_GENERAL_INCR_SYNCPT_CNTRL, SYNCPT_CNTRL_NO_STALL},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_CONT_SYNCPT_VSYNC, SYNCPT_VSYNC_ENABLE | 0x9},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_UPDATE | WIN_A_UPDATE | WIN_B_UPDATE | WIN_C_UPDATE},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ | WIN_A_ACT_REQ | WIN_B_ACT_REQ | WIN_C_ACT_REQ},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_ACCESS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_DV_CONTROL, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_YOF, 0xF0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KYRGB, 0x12A},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KUR, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KVR, 0x198},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KUG, 0x39B},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KVG, 0x32F},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KUB, 0x204},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KVB, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_DV_CONTROL, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_YOF, 0xF0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KYRGB, 0x12A},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KUR, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KVR, 0x198},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KUG, 0x39B},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KVG, 0x32F},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KUB, 0x204},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KVB, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_DV_CONTROL, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_YOF, 0xF0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KYRGB, 0x12A},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KUR, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KVR, 0x198},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KUG, 0x39B},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KVG, 0x32F},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KUB, 0x204},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KVB, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_COLOR_CONTROL, BASE_COLOR_SIZE_888},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_INTERFACE_CONTROL, DISP_DATA_FORMAT_DF1P1C},
|
|
||||||
{sizeof(uint32_t) * DC_COM_PIN_OUTPUT_POLARITY(1), 0x1000000},
|
|
||||||
{sizeof(uint32_t) * DC_COM_PIN_OUTPUT_POLARITY(3), 0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_BLEND_BACKGROUND_COLOR, 0},
|
|
||||||
{sizeof(uint32_t) * DC_COM_CRC_CONTROL, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_UPDATE | WIN_A_UPDATE | WIN_B_UPDATE | WIN_C_UPDATE},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ | WIN_A_ACT_REQ | WIN_B_ACT_REQ | WIN_C_ACT_REQ},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WINBUF_BLEND_LAYER_CONTROL, 0x10000FF},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WINBUF_BLEND_LAYER_CONTROL, 0x10000FF},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WINBUF_BLEND_LAYER_CONTROL, 0x10000FF},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_COMMAND_OPTION0, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_COMMAND, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_UPDATE | WIN_A_UPDATE | WIN_B_UPDATE | WIN_C_UPDATE},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ | WIN_A_ACT_REQ | WIN_B_ACT_REQ | WIN_C_ACT_REQ},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dsi_01_init_01[8] = {
|
|
||||||
{sizeof(uint32_t) * DSI_WR_DATA, 0x0},
|
|
||||||
{sizeof(uint32_t) * DSI_INT_ENABLE, 0x0},
|
|
||||||
{sizeof(uint32_t) * DSI_INT_STATUS, 0x0},
|
|
||||||
{sizeof(uint32_t) * DSI_INT_MASK, 0x0},
|
|
||||||
{sizeof(uint32_t) * DSI_INIT_SEQ_DATA_0, 0x0},
|
|
||||||
{sizeof(uint32_t) * DSI_INIT_SEQ_DATA_1, 0x0},
|
|
||||||
{sizeof(uint32_t) * DSI_INIT_SEQ_DATA_2, 0x0},
|
|
||||||
{sizeof(uint32_t) * DSI_INIT_SEQ_DATA_3, 0x0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dsi_01_init_02_erista[1] = {
|
|
||||||
{sizeof(uint32_t) * DSI_INIT_SEQ_DATA_15, 0x0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dsi_01_init_02_mariko[1] = {
|
|
||||||
{sizeof(uint32_t) * DSI_INIT_SEQ_DATA_15_MARIKO, 0x0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dsi_01_init_03[14] = {
|
|
||||||
{sizeof(uint32_t) * DSI_DCS_CMDS, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_0_LO, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_1_LO, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_2_LO, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_3_LO, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_4_LO, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_5_LO, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_0_HI, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_1_HI, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_2_HI, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_3_HI, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_4_HI, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_5_HI, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_CONTROL, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dsi_01_init_04_erista[0] = {
|
|
||||||
/* No register writes. */
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dsi_01_init_04_mariko[7] = {
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_1, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_2, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_3, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_4, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_5_MARIKO, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_6_MARIKO, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_7_MARIKO, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dsi_01_init_05[10] = {
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_CD, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_SOL_DELAY, 0x18},
|
|
||||||
{sizeof(uint32_t) * DSI_MAX_THRESHOLD, 0x1E0},
|
|
||||||
{sizeof(uint32_t) * DSI_TRIGGER, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_INIT_SEQ_CONTROL, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_LEN_0_1, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_LEN_2_3, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_LEN_4_5, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_LEN_6_7, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_1, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dsi_01_init_06[12] = {
|
|
||||||
{sizeof(uint32_t) * DSI_PHY_TIMING_1, 0x40A0E05},
|
|
||||||
{sizeof(uint32_t) * DSI_PHY_TIMING_2, 0x30109},
|
|
||||||
{sizeof(uint32_t) * DSI_BTA_TIMING, 0x190A14},
|
|
||||||
{sizeof(uint32_t) * DSI_TIMEOUT_0, DSI_TIMEOUT_LRX(0x2000) | DSI_TIMEOUT_HTX(0xFFFF)},
|
|
||||||
{sizeof(uint32_t) * DSI_TIMEOUT_1, DSI_TIMEOUT_PR(0x765) | DSI_TIMEOUT_TA(0x2000)},
|
|
||||||
{sizeof(uint32_t) * DSI_TO_TALLY, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_0, DSI_PAD_CONTROL_VS1_PULLDN(0) | DSI_PAD_CONTROL_VS1_PDIO(0)},
|
|
||||||
{sizeof(uint32_t) * DSI_POWER_CONTROL, DSI_POWER_CONTROL_ENABLE},
|
|
||||||
{sizeof(uint32_t) * DSI_POWER_CONTROL, DSI_POWER_CONTROL_ENABLE},
|
|
||||||
{sizeof(uint32_t) * DSI_POWER_CONTROL, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_POWER_CONTROL, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_1, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dsi_01_init_07[14] = {
|
|
||||||
{sizeof(uint32_t) * DSI_PHY_TIMING_1, 0x40A0E05},
|
|
||||||
{sizeof(uint32_t) * DSI_PHY_TIMING_2, 0x30118},
|
|
||||||
{sizeof(uint32_t) * DSI_BTA_TIMING, 0x190A14},
|
|
||||||
{sizeof(uint32_t) * DSI_TIMEOUT_0, DSI_TIMEOUT_LRX(0x2000) | DSI_TIMEOUT_HTX(0xFFFF)},
|
|
||||||
{sizeof(uint32_t) * DSI_TIMEOUT_1, DSI_TIMEOUT_PR(0x1343) | DSI_TIMEOUT_TA(0x2000)},
|
|
||||||
{sizeof(uint32_t) * DSI_TO_TALLY, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_HOST_CONTROL, DSI_HOST_CONTROL_CRC_RESET | DSI_HOST_CONTROL_TX_TRIG_HOST | DSI_HOST_CONTROL_CS | DSI_HOST_CONTROL_ECC},
|
|
||||||
{sizeof(uint32_t) * DSI_CONTROL, DSI_CONTROL_LANES(3) | DSI_CONTROL_HOST_ENABLE},
|
|
||||||
{sizeof(uint32_t) * DSI_POWER_CONTROL, DSI_POWER_CONTROL_ENABLE},
|
|
||||||
{sizeof(uint32_t) * DSI_POWER_CONTROL, DSI_POWER_CONTROL_ENABLE},
|
|
||||||
{sizeof(uint32_t) * DSI_MAX_THRESHOLD, 0x40},
|
|
||||||
{sizeof(uint32_t) * DSI_TRIGGER, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_TX_CRC, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_INIT_SEQ_CONTROL, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dsi_phy_timing_erista[1] = {
|
|
||||||
{sizeof(uint32_t) * DSI_PHY_TIMING_0, 0x6070601},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dsi_phy_timing_mariko[1] = {
|
|
||||||
{sizeof(uint32_t) * DSI_PHY_TIMING_0, 0x6070603},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const dsi_sleep_or_register_write_t display_config_jdi_specific_init_01[48] = {
|
|
||||||
{0, DSI_WR_DATA, 0x439},
|
|
||||||
{0, DSI_WR_DATA, 0x9483FFB9},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0xBD15},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0x1939},
|
|
||||||
{0, DSI_WR_DATA, 0xAAAAAAD8},
|
|
||||||
{0, DSI_WR_DATA, 0xAAAAAAEB},
|
|
||||||
{0, DSI_WR_DATA, 0xAAEBAAAA},
|
|
||||||
{0, DSI_WR_DATA, 0xAAAAAAAA},
|
|
||||||
{0, DSI_WR_DATA, 0xAAAAAAEB},
|
|
||||||
{0, DSI_WR_DATA, 0xAAEBAAAA},
|
|
||||||
{0, DSI_WR_DATA, 0xAA},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0x1BD15},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0x2739},
|
|
||||||
{0, DSI_WR_DATA, 0xFFFFFFD8},
|
|
||||||
{0, DSI_WR_DATA, 0xFFFFFFFF},
|
|
||||||
{0, DSI_WR_DATA, 0xFFFFFFFF},
|
|
||||||
{0, DSI_WR_DATA, 0xFFFFFFFF},
|
|
||||||
{0, DSI_WR_DATA, 0xFFFFFFFF},
|
|
||||||
{0, DSI_WR_DATA, 0xFFFFFFFF},
|
|
||||||
{0, DSI_WR_DATA, 0xFFFFFFFF},
|
|
||||||
{0, DSI_WR_DATA, 0xFFFFFFFF},
|
|
||||||
{0, DSI_WR_DATA, 0xFFFFFFFF},
|
|
||||||
{0, DSI_WR_DATA, 0xFFFFFF},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0x2BD15},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0xF39},
|
|
||||||
{0, DSI_WR_DATA, 0xFFFFFFD8},
|
|
||||||
{0, DSI_WR_DATA, 0xFFFFFFFF},
|
|
||||||
{0, DSI_WR_DATA, 0xFFFFFFFF},
|
|
||||||
{0, DSI_WR_DATA, 0xFFFFFF},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0xBD15},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0x6D915},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0x439},
|
|
||||||
{0, DSI_WR_DATA, 0xB9},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0x1105},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{1, 0xB4, 0},
|
|
||||||
{0, DSI_WR_DATA, 0x2905},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const dsi_sleep_or_register_write_t display_config_innolux_nx_abca2_specific_init_01[14] = {
|
|
||||||
{0, DSI_WR_DATA, 0x1105},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{1, 0xB4, 0},
|
|
||||||
{0, DSI_WR_DATA, 0x439},
|
|
||||||
{0, DSI_WR_DATA, 0x9483FFB9},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{1, 0x5, 0},
|
|
||||||
{0, DSI_WR_DATA, 0x739},
|
|
||||||
{0, DSI_WR_DATA, 0x751548B1},
|
|
||||||
{0, DSI_WR_DATA, 0x143209},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{1, 0x5, 0},
|
|
||||||
{0, DSI_WR_DATA, 0x2905},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const dsi_sleep_or_register_write_t display_config_auo_nx_abca2_specific_init_01[14] = {
|
|
||||||
{0, DSI_WR_DATA, 0x1105},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{1, 0xB4, 0},
|
|
||||||
{0, DSI_WR_DATA, 0x439},
|
|
||||||
{0, DSI_WR_DATA, 0x9483FFB9},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{1, 0x5, 0},
|
|
||||||
{0, DSI_WR_DATA, 0x739},
|
|
||||||
{0, DSI_WR_DATA, 0x711148B1},
|
|
||||||
{0, DSI_WR_DATA, 0x143209},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{1, 0x5, 0},
|
|
||||||
{0, DSI_WR_DATA, 0x2905},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const dsi_sleep_or_register_write_t display_config_innolux_auo_40_nx_abcc_specific_init_01[5] = {
|
|
||||||
{0, DSI_WR_DATA, 0x1105},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{1, 0x78, 0},
|
|
||||||
{0, DSI_WR_DATA, 0x2905},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const dsi_sleep_or_register_write_t display_config_50_nx_abcd_specific_init_01[13] = {
|
|
||||||
{0, DSI_WR_DATA, 0x1105},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{1, 0xB4, 0},
|
|
||||||
{0, DSI_WR_DATA, 0xA015},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0x205315},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0x339},
|
|
||||||
{0, DSI_WR_DATA, 0xFF0751},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{1, 0x5, 0},
|
|
||||||
{0, DSI_WR_DATA, 0x2905},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_plld_02_erista[3] = {
|
|
||||||
{CLK_RST_CONTROLLER_PLLD_BASE, 0x4810c001},
|
|
||||||
{CLK_RST_CONTROLLER_PLLD_MISC1, 0x00000020},
|
|
||||||
{CLK_RST_CONTROLLER_PLLD_MISC, 0x002D0AAA},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_plld_02_mariko[3] = {
|
|
||||||
{CLK_RST_CONTROLLER_PLLD_BASE, 0x4810c001},
|
|
||||||
{CLK_RST_CONTROLLER_PLLD_MISC1, 0x00000000},
|
|
||||||
{CLK_RST_CONTROLLER_PLLD_MISC, 0x002DFC00},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dsi_01_init_08[1] = {
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_1, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dsi_01_init_09[19] = {
|
|
||||||
{sizeof(uint32_t) * DSI_PHY_TIMING_1, 0x40A0E05},
|
|
||||||
{sizeof(uint32_t) * DSI_PHY_TIMING_2, 0x30172},
|
|
||||||
{sizeof(uint32_t) * DSI_BTA_TIMING, 0x190A14},
|
|
||||||
{sizeof(uint32_t) * DSI_TIMEOUT_0, DSI_TIMEOUT_LRX(0x2000) | DSI_TIMEOUT_HTX(0xA40)},
|
|
||||||
{sizeof(uint32_t) * DSI_TIMEOUT_1, DSI_TIMEOUT_PR(0x5A2F) | DSI_TIMEOUT_TA(0x2000)},
|
|
||||||
{sizeof(uint32_t) * DSI_TO_TALLY, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_0_LO, 0x40000208},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_2_LO, 0x40000308},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_4_LO, 0x40000308},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_1_LO, 0x40000308},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_3_LO, 0x3F3B2B08},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_3_HI, 0x2CC},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_5_LO, 0x3F3B2B08},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_SEQ_5_HI, 0x2CC},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_LEN_0_1, 0xCE0000},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_LEN_2_3, 0x87001A2},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_LEN_4_5, 0x190},
|
|
||||||
{sizeof(uint32_t) * DSI_PKT_LEN_6_7, 0x190},
|
|
||||||
{sizeof(uint32_t) * DSI_HOST_CONTROL, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dsi_01_init_10[10] = {
|
|
||||||
{sizeof(uint32_t) * DSI_TRIGGER, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_CONTROL, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_SOL_DELAY, 6},
|
|
||||||
{sizeof(uint32_t) * DSI_MAX_THRESHOLD, 0x1E0},
|
|
||||||
{sizeof(uint32_t) * DSI_POWER_CONTROL, DSI_POWER_CONTROL_ENABLE},
|
|
||||||
{sizeof(uint32_t) * DSI_CONTROL, DSI_CONTROL_HS_CLK_CTRL | DSI_CONTROL_FORMAT(3) | DSI_CONTROL_LANES(3) | DSI_CONTROL_VIDEO_ENABLE},
|
|
||||||
{sizeof(uint32_t) * DSI_HOST_CONTROL, DSI_HOST_CONTROL_HS | DSI_HOST_CONTROL_FIFO_SEL| DSI_HOST_CONTROL_CS | DSI_HOST_CONTROL_ECC},
|
|
||||||
{sizeof(uint32_t) * DSI_CONTROL, DSI_CONTROL_HS_CLK_CTRL | DSI_CONTROL_FORMAT(3) | DSI_CONTROL_LANES(3) | DSI_CONTROL_VIDEO_ENABLE},
|
|
||||||
{sizeof(uint32_t) * DSI_HOST_CONTROL, DSI_HOST_CONTROL_CS | DSI_HOST_CONTROL_ECC},
|
|
||||||
{sizeof(uint32_t) * DSI_HOST_CONTROL, DSI_HOST_CONTROL_HS | DSI_HOST_CONTROL_CS | DSI_HOST_CONTROL_ECC}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dsi_01_init_11_erista[4] = {
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_1, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_2, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_3, DSI_PAD_PREEMP_PD_CLK(0x3) | DSI_PAD_PREEMP_PU_CLK(0x3) | DSI_PAD_PREEMP_PD(0x03) | DSI_PAD_PREEMP_PU(0x3)},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_4, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dsi_01_init_11_mariko[7] = {
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_1, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_2, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_3, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_4, 0x77777},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_5_MARIKO, 0x77777},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_6_MARIKO, DSI_PAD_PREEMP_PD_CLK(0x1) | DSI_PAD_PREEMP_PU_CLK(0x1) | DSI_PAD_PREEMP_PD(0x01) | DSI_PAD_PREEMP_PU(0x1)},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_7_MARIKO, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_mipi_cal_01[4] = {
|
|
||||||
{MIPI_CAL_MIPI_BIAS_PAD_CFG2, 0},
|
|
||||||
{MIPI_CAL_CIL_MIPI_CAL_STATUS, 0xF3F10000},
|
|
||||||
{MIPI_CAL_MIPI_BIAS_PAD_CFG0, 1},
|
|
||||||
{MIPI_CAL_MIPI_BIAS_PAD_CFG2, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_mipi_cal_02_erista[2] = {
|
|
||||||
{MIPI_CAL_MIPI_BIAS_PAD_CFG2, 0x10010},
|
|
||||||
{MIPI_CAL_MIPI_BIAS_PAD_CFG1, 0x300},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_mipi_cal_02_mariko[2] = {
|
|
||||||
{MIPI_CAL_MIPI_BIAS_PAD_CFG2, 0x10010},
|
|
||||||
{MIPI_CAL_MIPI_BIAS_PAD_CFG1, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_mipi_cal_03_erista[6] = {
|
|
||||||
{MIPI_CAL_DSIA_MIPI_CAL_CONFIG, 0x200200},
|
|
||||||
{MIPI_CAL_DSIB_MIPI_CAL_CONFIG, 0x200200},
|
|
||||||
{MIPI_CAL_DSIA_MIPI_CAL_CONFIG_2, 0x200002},
|
|
||||||
{MIPI_CAL_DSIB_MIPI_CAL_CONFIG_2, 0x200002},
|
|
||||||
{MIPI_CAL_CILA_MIPI_CAL_CONFIG, 0},
|
|
||||||
{MIPI_CAL_CILB_MIPI_CAL_CONFIG, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_mipi_cal_03_mariko[6] = {
|
|
||||||
{MIPI_CAL_DSIA_MIPI_CAL_CONFIG, 0x200006},
|
|
||||||
{MIPI_CAL_DSIB_MIPI_CAL_CONFIG, 0x200006},
|
|
||||||
{MIPI_CAL_DSIA_MIPI_CAL_CONFIG_2, 0x260000},
|
|
||||||
{MIPI_CAL_DSIB_MIPI_CAL_CONFIG_2, 0x260000},
|
|
||||||
{MIPI_CAL_CILA_MIPI_CAL_CONFIG, 0},
|
|
||||||
{MIPI_CAL_CILB_MIPI_CAL_CONFIG, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_mipi_cal_04[10] = {
|
|
||||||
{MIPI_CAL_CILC_MIPI_CAL_CONFIG, 0},
|
|
||||||
{MIPI_CAL_CILD_MIPI_CAL_CONFIG, 0},
|
|
||||||
{MIPI_CAL_CILE_MIPI_CAL_CONFIG, 0},
|
|
||||||
{MIPI_CAL_CILF_MIPI_CAL_CONFIG, 0},
|
|
||||||
{MIPI_CAL_DSIC_MIPI_CAL_CONFIG, 0},
|
|
||||||
{MIPI_CAL_DSID_MIPI_CAL_CONFIG, 0},
|
|
||||||
{MIPI_CAL_DSIB_MIPI_CAL_CONFIG_2, 0},
|
|
||||||
{MIPI_CAL_DSIC_MIPI_CAL_CONFIG_2, 0},
|
|
||||||
{MIPI_CAL_DSID_MIPI_CAL_CONFIG_2, 0},
|
|
||||||
{MIPI_CAL_MIPI_CAL_CTRL, 0x2A000001},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dc_02[113] = {
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_ACCESS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_DV_CONTROL, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_YOF, 0xF0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KYRGB, 0x12A},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KUR, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KVR, 0x198},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KUG, 0x39B},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KVG, 0x32F},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KUB, 0x204},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KVB, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_DV_CONTROL, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_YOF, 0xF0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KYRGB, 0x12A},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KUR, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KVR, 0x198},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KUG, 0x39B},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KVG, 0x32F},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KUB, 0x204},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KVB, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_DV_CONTROL, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_YOF, 0xF0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KYRGB, 0x12A},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KUR, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KVR, 0x198},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KUG, 0x39B},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KVG, 0x32F},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KUB, 0x204},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_CSC_KVB, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_COLOR_CONTROL, BASE_COLOR_SIZE_888},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_INTERFACE_CONTROL, DISP_DATA_FORMAT_DF1P1C},
|
|
||||||
{sizeof(uint32_t) * DC_COM_PIN_OUTPUT_POLARITY(1), 0x1000000},
|
|
||||||
{sizeof(uint32_t) * DC_COM_PIN_OUTPUT_POLARITY(3), 0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_BLEND_BACKGROUND_COLOR, 0},
|
|
||||||
{sizeof(uint32_t) * DC_COM_CRC_CONTROL, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_UPDATE | WIN_A_UPDATE | WIN_B_UPDATE | WIN_C_UPDATE},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ | WIN_A_ACT_REQ | WIN_B_ACT_REQ | WIN_C_ACT_REQ},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WINBUF_BLEND_LAYER_CONTROL, 0x10000FF},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WINBUF_BLEND_LAYER_CONTROL, 0x10000FF},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WINBUF_BLEND_LAYER_CONTROL, 0x10000FF},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_COMMAND_OPTION0, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_COMMAND, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_UPDATE | WIN_A_UPDATE | WIN_B_UPDATE | WIN_C_UPDATE},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ | WIN_A_ACT_REQ | WIN_B_ACT_REQ | WIN_C_ACT_REQ},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_ACCESS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_TIMING_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_REF_TO_SYNC, (1 << 16)},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_SYNC_WIDTH, 0x10048},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_BACK_PORCH, 0x90048},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_ACTIVE, 0x50002D0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_FRONT_PORCH, 0xA0088},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_SHIFT_CLOCK_OPTIONS, SC1_H_QUALIFIER_NONE | SC0_H_QUALIFIER_NONE},
|
|
||||||
{sizeof(uint32_t) * DC_COM_PIN_OUTPUT_ENABLE(1), 0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DATA_ENABLE_OPTIONS, DE_SELECT_ACTIVE | DE_CONTROL_NORMAL},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_INTERFACE_CONTROL, DISP_DATA_FORMAT_DF1P1C},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_CLOCK_CONTROL, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_COMMAND_OPTION0, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_COMMAND, DISP_CTRL_MODE_C_DISPLAY},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_ACCESS, READ_MUX | WRITE_MUX},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_FRONT_PORCH, 0xA0088},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_ACCESS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_GENERAL_INCR_SYNCPT, 0x301},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_GENERAL_INCR_SYNCPT, 0x301},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_ACCESS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_CLOCK_CONTROL, PIXEL_CLK_DIVIDER_PCD1 | SHIFT_CLK_DIVIDER(4)},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_COLOR_CONTROL, BASE_COLOR_SIZE_888},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_COMMAND_OPTION0, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_frame_buffer[32] = {
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_WIN_OPTIONS, DSI_ENABLE},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_COLOR_DEPTH, WIN_COLOR_DEPTH_B8G8R8A8},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_POSITION, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_H_INITIAL_DDA, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_V_INITIAL_DDA, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_PRESCALED_SIZE, V_PRESCALED_SIZE(1280) | H_PRESCALED_SIZE(2880)},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_DDA_INC, V_DDA_INC(0x1000) | H_DDA_INC(0x1000)},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_SIZE, V_SIZE(1280) | H_SIZE(720)},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_LINE_STRIDE, 0x6000C00},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_BUFFER_CONTROL, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WINBUF_SURFACE_KIND, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WINBUF_START_ADDR, display_config_frame_buffer_address},
|
|
||||||
{sizeof(uint32_t) * DC_WINBUF_ADDR_H_OFFSET, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WINBUF_ADDR_V_OFFSET, 0},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_WIN_OPTIONS, DSI_ENABLE},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_WIN_OPTIONS, DSI_ENABLE},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_WIN_OPTIONS, DSI_ENABLE},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, WIN_ENABLE},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_COMMAND, DISP_CTRL_MODE_C_DISPLAY},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_UPDATE | WIN_A_UPDATE},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ | WIN_A_ACT_REQ},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_solid_color[8] = {
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_B_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_C_SELECT},
|
|
||||||
{sizeof(uint32_t) * DC_WIN_WIN_OPTIONS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_DISP_DISP_WIN_OPTIONS, DSI_ENABLE},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_COMMAND, DISP_CTRL_MODE_C_DISPLAY},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dc_01_fini_01[13] = {
|
|
||||||
{sizeof(uint32_t) * DC_DISP_FRONT_PORCH, 0xA0088},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_INT_MASK, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_ACCESS, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_INT_ENABLE, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_CONT_SYNCPT_VSYNC, 0},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_DISPLAY_COMMAND, DISP_CTRL_MODE_STOP},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_GENERAL_INCR_SYNCPT, 0x301},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_GENERAL_INCR_SYNCPT, 0x301},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
|
|
||||||
{sizeof(uint32_t) * DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dsi_01_fini_01[2] = {
|
|
||||||
{sizeof(uint32_t) * DSI_POWER_CONTROL, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_PAD_CONTROL_1, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const register_write_t display_config_dsi_01_fini_02[13] = {
|
|
||||||
{sizeof(uint32_t) * DSI_PHY_TIMING_1, 0x40A0E05},
|
|
||||||
{sizeof(uint32_t) * DSI_PHY_TIMING_2, 0x30109},
|
|
||||||
{sizeof(uint32_t) * DSI_BTA_TIMING, 0x190A14},
|
|
||||||
{sizeof(uint32_t) * DSI_TIMEOUT_0, DSI_TIMEOUT_LRX(0x2000) | DSI_TIMEOUT_HTX(0xFFFF) },
|
|
||||||
{sizeof(uint32_t) * DSI_TIMEOUT_1, DSI_TIMEOUT_PR(0x765) | DSI_TIMEOUT_TA(0x2000)},
|
|
||||||
{sizeof(uint32_t) * DSI_TO_TALLY, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_HOST_CONTROL, DSI_HOST_CONTROL_CRC_RESET | DSI_HOST_CONTROL_TX_TRIG_HOST | DSI_HOST_CONTROL_CS | DSI_HOST_CONTROL_ECC},
|
|
||||||
{sizeof(uint32_t) * DSI_CONTROL, DSI_CONTROL_LANES(3) | DSI_CONTROL_HOST_ENABLE},
|
|
||||||
{sizeof(uint32_t) * DSI_POWER_CONTROL, DSI_POWER_CONTROL_ENABLE},
|
|
||||||
{sizeof(uint32_t) * DSI_MAX_THRESHOLD, 0x40},
|
|
||||||
{sizeof(uint32_t) * DSI_TRIGGER, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_TX_CRC, 0},
|
|
||||||
{sizeof(uint32_t) * DSI_INIT_SEQ_CONTROL, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const dsi_sleep_or_register_write_t display_config_jdi_specific_fini_01[22] = {
|
|
||||||
{0, DSI_WR_DATA, 0x439},
|
|
||||||
{0, DSI_WR_DATA, 0x9483FFB9},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0x2139},
|
|
||||||
{0, DSI_WR_DATA, 0x191919D5},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0xB39},
|
|
||||||
{0, DSI_WR_DATA, 0x4F0F41B1},
|
|
||||||
{0, DSI_WR_DATA, 0xF179A433},
|
|
||||||
{0, DSI_WR_DATA, 0x2D81},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0x439},
|
|
||||||
{0, DSI_WR_DATA, 0xB9},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const dsi_sleep_or_register_write_t display_config_auo_nx_abca2_specific_fini_01[38] = {
|
|
||||||
{0, DSI_WR_DATA, 0x439},
|
|
||||||
{0, DSI_WR_DATA, 0x9483FFB9},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0x2C39},
|
|
||||||
{0, DSI_WR_DATA, 0x191919D5},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0x2C39},
|
|
||||||
{0, DSI_WR_DATA, 0x191919D6},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_WR_DATA, 0x19191919},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0xB39},
|
|
||||||
{0, DSI_WR_DATA, 0x711148B1},
|
|
||||||
{0, DSI_WR_DATA, 0x71143209},
|
|
||||||
{0, DSI_WR_DATA, 0x114D31},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{0, DSI_WR_DATA, 0x439},
|
|
||||||
{0, DSI_WR_DATA, 0xB9},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{1, 0x5, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const dsi_sleep_or_register_write_t display_config_innolux_nx_abcc_specific_fini_01[10] = {
|
|
||||||
{0, DSI_WR_DATA, 0x439},
|
|
||||||
{0, DSI_WR_DATA, 0x9483FFB9},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{1, 0x5, 0},
|
|
||||||
{0, DSI_WR_DATA, 0xB39},
|
|
||||||
{0, DSI_WR_DATA, 0x751548B1},
|
|
||||||
{0, DSI_WR_DATA, 0x71143209},
|
|
||||||
{0, DSI_WR_DATA, 0x115631},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{1, 0x5, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const dsi_sleep_or_register_write_t display_config_auo_nx_abcc_specific_fini_01[10] = {
|
|
||||||
{0, DSI_WR_DATA, 0x439},
|
|
||||||
{0, DSI_WR_DATA, 0x9483FFB9},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{1, 0x5, 0},
|
|
||||||
{0, DSI_WR_DATA, 0xB39},
|
|
||||||
{0, DSI_WR_DATA, 0x711148B1},
|
|
||||||
{0, DSI_WR_DATA, 0x71143209},
|
|
||||||
{0, DSI_WR_DATA, 0x114D31},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{1, 0x5, 0},
|
|
||||||
};
|
|
||||||
|
|
||||||
static const dsi_sleep_or_register_write_t display_config_40_nx_abcc_specific_fini_01[10] = {
|
|
||||||
{0, DSI_WR_DATA, 0x439},
|
|
||||||
{0, DSI_WR_DATA, 0x9483FFB9},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{1, 0x5, 0},
|
|
||||||
{0, DSI_WR_DATA, 0xB39},
|
|
||||||
{0, DSI_WR_DATA, 0x731348B1},
|
|
||||||
{0, DSI_WR_DATA, 0x71243209},
|
|
||||||
{0, DSI_WR_DATA, 0x4C31},
|
|
||||||
{0, DSI_TRIGGER, DSI_TRIGGER_HOST},
|
|
||||||
{1, 0x5, 0},
|
|
||||||
};
|
|
||||||
@@ -1,484 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2018-2020 Atmosphère-NX
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef FUSEE_FUSE_H
|
|
||||||
#define FUSEE_FUSE_H
|
|
||||||
|
|
||||||
#define FUSE_BASE 0x7000F800
|
|
||||||
#define FUSE_CHIP_BASE (FUSE_BASE + 0x98)
|
|
||||||
#define MAKE_FUSE_REG(n) MAKE_REG32(FUSE_BASE + n)
|
|
||||||
#define MAKE_FUSE_CHIP_REG(n) MAKE_REG32(FUSE_CHIP_BASE + n)
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint32_t FUSE_FUSECTRL;
|
|
||||||
uint32_t FUSE_FUSEADDR;
|
|
||||||
uint32_t FUSE_FUSERDATA;
|
|
||||||
uint32_t FUSE_FUSEWDATA;
|
|
||||||
uint32_t FUSE_FUSETIME_RD1;
|
|
||||||
uint32_t FUSE_FUSETIME_RD2;
|
|
||||||
uint32_t FUSE_FUSETIME_PGM1;
|
|
||||||
uint32_t FUSE_FUSETIME_PGM2;
|
|
||||||
uint32_t FUSE_PRIV2INTFC_START;
|
|
||||||
uint32_t FUSE_FUSEBYPASS;
|
|
||||||
uint32_t FUSE_PRIVATEKEYDISABLE;
|
|
||||||
uint32_t FUSE_DISABLEREGPROGRAM;
|
|
||||||
uint32_t FUSE_WRITE_ACCESS_SW;
|
|
||||||
uint32_t FUSE_PWR_GOOD_SW;
|
|
||||||
uint32_t _0x38;
|
|
||||||
uint32_t FUSE_PRIV2RESHIFT;
|
|
||||||
uint32_t _0x40[0x3];
|
|
||||||
uint32_t FUSE_FUSETIME_RD3;
|
|
||||||
uint32_t _0x50[0xC];
|
|
||||||
uint32_t FUSE_PRIVATE_KEY0_NONZERO;
|
|
||||||
uint32_t FUSE_PRIVATE_KEY1_NONZERO;
|
|
||||||
uint32_t FUSE_PRIVATE_KEY2_NONZERO;
|
|
||||||
uint32_t FUSE_PRIVATE_KEY3_NONZERO;
|
|
||||||
uint32_t FUSE_PRIVATE_KEY4_NONZERO;
|
|
||||||
uint32_t _0x94;
|
|
||||||
} tegra_fuse_t;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint32_t _0x98[0x1A];
|
|
||||||
uint32_t FUSE_PRODUCTION_MODE;
|
|
||||||
uint32_t FUSE_JTAG_SECUREID_VALID;
|
|
||||||
uint32_t FUSE_ODM_LOCK;
|
|
||||||
uint32_t FUSE_OPT_OPENGL_EN;
|
|
||||||
uint32_t FUSE_SKU_INFO;
|
|
||||||
uint32_t FUSE_CPU_SPEEDO_0_CALIB;
|
|
||||||
uint32_t FUSE_CPU_IDDQ_CALIB;
|
|
||||||
uint32_t _0x11C[0x3];
|
|
||||||
uint32_t FUSE_OPT_FT_REV;
|
|
||||||
uint32_t FUSE_CPU_SPEEDO_1_CALIB;
|
|
||||||
uint32_t FUSE_CPU_SPEEDO_2_CALIB;
|
|
||||||
uint32_t FUSE_SOC_SPEEDO_0_CALIB;
|
|
||||||
uint32_t FUSE_SOC_SPEEDO_1_CALIB;
|
|
||||||
uint32_t FUSE_SOC_SPEEDO_2_CALIB;
|
|
||||||
uint32_t FUSE_SOC_IDDQ_CALIB;
|
|
||||||
uint32_t _0x144;
|
|
||||||
uint32_t FUSE_FA;
|
|
||||||
uint32_t FUSE_RESERVED_PRODUCTION;
|
|
||||||
uint32_t FUSE_HDMI_LANE0_CALIB;
|
|
||||||
uint32_t FUSE_HDMI_LANE1_CALIB;
|
|
||||||
uint32_t FUSE_HDMI_LANE2_CALIB;
|
|
||||||
uint32_t FUSE_HDMI_LANE3_CALIB;
|
|
||||||
uint32_t FUSE_ENCRYPTION_RATE;
|
|
||||||
uint32_t FUSE_PUBLIC_KEY[0x8];
|
|
||||||
uint32_t FUSE_TSENSOR1_CALIB;
|
|
||||||
uint32_t FUSE_TSENSOR2_CALIB;
|
|
||||||
uint32_t _0x18C;
|
|
||||||
uint32_t FUSE_OPT_CP_REV;
|
|
||||||
uint32_t FUSE_OPT_PFG;
|
|
||||||
uint32_t FUSE_TSENSOR0_CALIB;
|
|
||||||
uint32_t FUSE_FIRST_BOOTROM_PATCH_SIZE;
|
|
||||||
uint32_t FUSE_SECURITY_MODE;
|
|
||||||
uint32_t FUSE_PRIVATE_KEY[0x5];
|
|
||||||
uint32_t FUSE_ARM_JTAG_DIS;
|
|
||||||
uint32_t FUSE_BOOT_DEVICE_INFO;
|
|
||||||
uint32_t FUSE_RESERVED_SW;
|
|
||||||
uint32_t FUSE_OPT_VP9_DISABLE;
|
|
||||||
uint32_t FUSE_RESERVED_ODM0[0x8];
|
|
||||||
uint32_t FUSE_OBS_DIS;
|
|
||||||
uint32_t _0x1EC;
|
|
||||||
uint32_t FUSE_USB_CALIB;
|
|
||||||
uint32_t FUSE_SKU_DIRECT_CONFIG;
|
|
||||||
uint32_t FUSE_KFUSE_PRIVKEY_CTRL;
|
|
||||||
uint32_t FUSE_PACKAGE_INFO;
|
|
||||||
uint32_t FUSE_OPT_VENDOR_CODE;
|
|
||||||
uint32_t FUSE_OPT_FAB_CODE;
|
|
||||||
uint32_t FUSE_OPT_LOT_CODE_0;
|
|
||||||
uint32_t FUSE_OPT_LOT_CODE_1;
|
|
||||||
uint32_t FUSE_OPT_WAFER_ID;
|
|
||||||
uint32_t FUSE_OPT_X_COORDINATE;
|
|
||||||
uint32_t FUSE_OPT_Y_COORDINATE;
|
|
||||||
uint32_t FUSE_OPT_SEC_DEBUG_EN;
|
|
||||||
uint32_t FUSE_OPT_OPS_RESERVED;
|
|
||||||
uint32_t _0x224;
|
|
||||||
uint32_t FUSE_GPU_IDDQ_CALIB;
|
|
||||||
uint32_t FUSE_TSENSOR3_CALIB;
|
|
||||||
uint32_t FUSE_CLOCK_BOUNDOUT0;
|
|
||||||
uint32_t FUSE_CLOCK_BOUNDOUT1;
|
|
||||||
uint32_t _0x238[0x3];
|
|
||||||
uint32_t FUSE_OPT_SAMPLE_TYPE;
|
|
||||||
uint32_t FUSE_OPT_SUBREVISION;
|
|
||||||
uint32_t FUSE_OPT_SW_RESERVED_0;
|
|
||||||
uint32_t FUSE_OPT_SW_RESERVED_1;
|
|
||||||
uint32_t FUSE_TSENSOR4_CALIB;
|
|
||||||
uint32_t FUSE_TSENSOR5_CALIB;
|
|
||||||
uint32_t FUSE_TSENSOR6_CALIB;
|
|
||||||
uint32_t FUSE_TSENSOR7_CALIB;
|
|
||||||
uint32_t FUSE_OPT_PRIV_SEC_EN;
|
|
||||||
uint32_t _0x268[0x5];
|
|
||||||
uint32_t FUSE_FUSE2TSEC_DEBUG_DISABLE;
|
|
||||||
uint32_t FUSE_TSENSOR_COMMON;
|
|
||||||
uint32_t FUSE_OPT_CP_BIN;
|
|
||||||
uint32_t FUSE_OPT_GPU_DISABLE;
|
|
||||||
uint32_t FUSE_OPT_FT_BIN;
|
|
||||||
uint32_t FUSE_OPT_DONE_MAP;
|
|
||||||
uint32_t _0x294;
|
|
||||||
uint32_t FUSE_APB2JTAG_DISABLE;
|
|
||||||
uint32_t FUSE_ODM_INFO;
|
|
||||||
uint32_t _0x2A0[0x2];
|
|
||||||
uint32_t FUSE_ARM_CRYPT_DE_FEATURE;
|
|
||||||
uint32_t _0x2AC[0x5];
|
|
||||||
uint32_t FUSE_WOA_SKU_FLAG;
|
|
||||||
uint32_t FUSE_ECO_RESERVE_1;
|
|
||||||
uint32_t FUSE_GCPLEX_CONFIG_FUSE;
|
|
||||||
uint32_t FUSE_PRODUCTION_MONTH;
|
|
||||||
uint32_t FUSE_RAM_REPAIR_INDICATOR;
|
|
||||||
uint32_t FUSE_TSENSOR9_CALIB;
|
|
||||||
uint32_t _0x2D8;
|
|
||||||
uint32_t FUSE_VMIN_CALIBRATION;
|
|
||||||
uint32_t FUSE_AGING_SENSOR_CALIBRATION;
|
|
||||||
uint32_t FUSE_DEBUG_AUTHENTICATION;
|
|
||||||
uint32_t FUSE_SECURE_PROVISION_INDEX;
|
|
||||||
uint32_t FUSE_SECURE_PROVISION_INFO;
|
|
||||||
uint32_t FUSE_OPT_GPU_DISABLE_CP1;
|
|
||||||
uint32_t FUSE_SPARE_ENDIS;
|
|
||||||
uint32_t FUSE_ECO_RESERVE_0;
|
|
||||||
uint32_t _0x2FC[0x2];
|
|
||||||
uint32_t FUSE_RESERVED_CALIB0;
|
|
||||||
uint32_t FUSE_RESERVED_CALIB1;
|
|
||||||
uint32_t FUSE_OPT_GPU_TPC0_DISABLE;
|
|
||||||
uint32_t FUSE_OPT_GPU_TPC0_DISABLE_CP1;
|
|
||||||
uint32_t FUSE_OPT_CPU_DISABLE;
|
|
||||||
uint32_t FUSE_OPT_CPU_DISABLE_CP1;
|
|
||||||
uint32_t FUSE_TSENSOR10_CALIB;
|
|
||||||
uint32_t FUSE_TSENSOR10_CALIB_AUX;
|
|
||||||
uint32_t _0x324[0x5];
|
|
||||||
uint32_t FUSE_OPT_GPU_TPC0_DISABLE_CP2;
|
|
||||||
uint32_t FUSE_OPT_GPU_TPC1_DISABLE;
|
|
||||||
uint32_t FUSE_OPT_GPU_TPC1_DISABLE_CP1;
|
|
||||||
uint32_t FUSE_OPT_GPU_TPC1_DISABLE_CP2;
|
|
||||||
uint32_t FUSE_OPT_CPU_DISABLE_CP2;
|
|
||||||
uint32_t FUSE_OPT_GPU_DISABLE_CP2;
|
|
||||||
uint32_t FUSE_USB_CALIB_EXT;
|
|
||||||
uint32_t FUSE_RESERVED_FIELD;
|
|
||||||
uint32_t _0x358[0x9];
|
|
||||||
uint32_t FUSE_SPARE_REALIGNMENT_REG;
|
|
||||||
uint32_t FUSE_SPARE_BIT[0x20];
|
|
||||||
} tegra_fuse_chip_common_t;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint32_t _0x98[0x1A];
|
|
||||||
uint32_t FUSE_PRODUCTION_MODE;
|
|
||||||
uint32_t FUSE_JTAG_SECUREID_VALID;
|
|
||||||
uint32_t FUSE_ODM_LOCK;
|
|
||||||
uint32_t FUSE_OPT_OPENGL_EN;
|
|
||||||
uint32_t FUSE_SKU_INFO;
|
|
||||||
uint32_t FUSE_CPU_SPEEDO_0_CALIB;
|
|
||||||
uint32_t FUSE_CPU_IDDQ_CALIB;
|
|
||||||
uint32_t _0x11C[0x3];
|
|
||||||
uint32_t FUSE_OPT_FT_REV;
|
|
||||||
uint32_t FUSE_CPU_SPEEDO_1_CALIB;
|
|
||||||
uint32_t FUSE_CPU_SPEEDO_2_CALIB;
|
|
||||||
uint32_t FUSE_SOC_SPEEDO_0_CALIB;
|
|
||||||
uint32_t FUSE_SOC_SPEEDO_1_CALIB;
|
|
||||||
uint32_t FUSE_SOC_SPEEDO_2_CALIB;
|
|
||||||
uint32_t FUSE_SOC_IDDQ_CALIB;
|
|
||||||
uint32_t _0x144;
|
|
||||||
uint32_t FUSE_FA;
|
|
||||||
uint32_t FUSE_RESERVED_PRODUCTION;
|
|
||||||
uint32_t FUSE_HDMI_LANE0_CALIB;
|
|
||||||
uint32_t FUSE_HDMI_LANE1_CALIB;
|
|
||||||
uint32_t FUSE_HDMI_LANE2_CALIB;
|
|
||||||
uint32_t FUSE_HDMI_LANE3_CALIB;
|
|
||||||
uint32_t FUSE_ENCRYPTION_RATE;
|
|
||||||
uint32_t FUSE_PUBLIC_KEY[0x8];
|
|
||||||
uint32_t FUSE_TSENSOR1_CALIB;
|
|
||||||
uint32_t FUSE_TSENSOR2_CALIB;
|
|
||||||
uint32_t _0x18C;
|
|
||||||
uint32_t FUSE_OPT_CP_REV;
|
|
||||||
uint32_t FUSE_OPT_PFG;
|
|
||||||
uint32_t FUSE_TSENSOR0_CALIB;
|
|
||||||
uint32_t FUSE_FIRST_BOOTROM_PATCH_SIZE;
|
|
||||||
uint32_t FUSE_SECURITY_MODE;
|
|
||||||
uint32_t FUSE_PRIVATE_KEY[0x5];
|
|
||||||
uint32_t FUSE_ARM_JTAG_DIS;
|
|
||||||
uint32_t FUSE_BOOT_DEVICE_INFO;
|
|
||||||
uint32_t FUSE_RESERVED_SW;
|
|
||||||
uint32_t FUSE_OPT_VP9_DISABLE;
|
|
||||||
uint32_t FUSE_RESERVED_ODM0[0x8];
|
|
||||||
uint32_t FUSE_OBS_DIS;
|
|
||||||
uint32_t _0x1EC;
|
|
||||||
uint32_t FUSE_USB_CALIB;
|
|
||||||
uint32_t FUSE_SKU_DIRECT_CONFIG;
|
|
||||||
uint32_t FUSE_KFUSE_PRIVKEY_CTRL;
|
|
||||||
uint32_t FUSE_PACKAGE_INFO;
|
|
||||||
uint32_t FUSE_OPT_VENDOR_CODE;
|
|
||||||
uint32_t FUSE_OPT_FAB_CODE;
|
|
||||||
uint32_t FUSE_OPT_LOT_CODE_0;
|
|
||||||
uint32_t FUSE_OPT_LOT_CODE_1;
|
|
||||||
uint32_t FUSE_OPT_WAFER_ID;
|
|
||||||
uint32_t FUSE_OPT_X_COORDINATE;
|
|
||||||
uint32_t FUSE_OPT_Y_COORDINATE;
|
|
||||||
uint32_t FUSE_OPT_SEC_DEBUG_EN;
|
|
||||||
uint32_t FUSE_OPT_OPS_RESERVED;
|
|
||||||
uint32_t FUSE_SATA_CALIB; /* Erista only. */
|
|
||||||
uint32_t FUSE_GPU_IDDQ_CALIB;
|
|
||||||
uint32_t FUSE_TSENSOR3_CALIB;
|
|
||||||
uint32_t FUSE_CLOCK_BOUNDOUT0;
|
|
||||||
uint32_t FUSE_CLOCK_BOUNDOUT1;
|
|
||||||
uint32_t _0x238[0x3];
|
|
||||||
uint32_t FUSE_OPT_SAMPLE_TYPE;
|
|
||||||
uint32_t FUSE_OPT_SUBREVISION;
|
|
||||||
uint32_t FUSE_OPT_SW_RESERVED_0;
|
|
||||||
uint32_t FUSE_OPT_SW_RESERVED_1;
|
|
||||||
uint32_t FUSE_TSENSOR4_CALIB;
|
|
||||||
uint32_t FUSE_TSENSOR5_CALIB;
|
|
||||||
uint32_t FUSE_TSENSOR6_CALIB;
|
|
||||||
uint32_t FUSE_TSENSOR7_CALIB;
|
|
||||||
uint32_t FUSE_OPT_PRIV_SEC_EN;
|
|
||||||
uint32_t FUSE_PKC_DISABLE; /* Erista only. */
|
|
||||||
uint32_t _0x26C[0x4];
|
|
||||||
uint32_t FUSE_FUSE2TSEC_DEBUG_DISABLE;
|
|
||||||
uint32_t FUSE_TSENSOR_COMMON;
|
|
||||||
uint32_t FUSE_OPT_CP_BIN;
|
|
||||||
uint32_t FUSE_OPT_GPU_DISABLE;
|
|
||||||
uint32_t FUSE_OPT_FT_BIN;
|
|
||||||
uint32_t FUSE_OPT_DONE_MAP;
|
|
||||||
uint32_t _0x294;
|
|
||||||
uint32_t FUSE_APB2JTAG_DISABLE;
|
|
||||||
uint32_t FUSE_ODM_INFO;
|
|
||||||
uint32_t _0x2A0[0x2];
|
|
||||||
uint32_t FUSE_ARM_CRYPT_DE_FEATURE;
|
|
||||||
uint32_t _0x2AC[0x5];
|
|
||||||
uint32_t FUSE_WOA_SKU_FLAG;
|
|
||||||
uint32_t FUSE_ECO_RESERVE_1;
|
|
||||||
uint32_t FUSE_GCPLEX_CONFIG_FUSE;
|
|
||||||
uint32_t FUSE_PRODUCTION_MONTH;
|
|
||||||
uint32_t FUSE_RAM_REPAIR_INDICATOR;
|
|
||||||
uint32_t FUSE_TSENSOR9_CALIB;
|
|
||||||
uint32_t _0x2D8;
|
|
||||||
uint32_t FUSE_VMIN_CALIBRATION;
|
|
||||||
uint32_t FUSE_AGING_SENSOR_CALIBRATION;
|
|
||||||
uint32_t FUSE_DEBUG_AUTHENTICATION;
|
|
||||||
uint32_t FUSE_SECURE_PROVISION_INDEX;
|
|
||||||
uint32_t FUSE_SECURE_PROVISION_INFO;
|
|
||||||
uint32_t FUSE_OPT_GPU_DISABLE_CP1;
|
|
||||||
uint32_t FUSE_SPARE_ENDIS;
|
|
||||||
uint32_t FUSE_ECO_RESERVE_0;
|
|
||||||
uint32_t _0x2FC[0x2];
|
|
||||||
uint32_t FUSE_RESERVED_CALIB0;
|
|
||||||
uint32_t FUSE_RESERVED_CALIB1;
|
|
||||||
uint32_t FUSE_OPT_GPU_TPC0_DISABLE;
|
|
||||||
uint32_t FUSE_OPT_GPU_TPC0_DISABLE_CP1;
|
|
||||||
uint32_t FUSE_OPT_CPU_DISABLE;
|
|
||||||
uint32_t FUSE_OPT_CPU_DISABLE_CP1;
|
|
||||||
uint32_t FUSE_TSENSOR10_CALIB;
|
|
||||||
uint32_t FUSE_TSENSOR10_CALIB_AUX;
|
|
||||||
uint32_t FUSE_OPT_RAM_SVOP_DP; /* Erista only. */
|
|
||||||
uint32_t FUSE_OPT_RAM_SVOP_PDP; /* Erista only. */
|
|
||||||
uint32_t FUSE_OPT_RAM_SVOP_REG; /* Erista only. */
|
|
||||||
uint32_t FUSE_OPT_RAM_SVOP_SP; /* Erista only. */
|
|
||||||
uint32_t FUSE_OPT_RAM_SVOP_SMPDP; /* Erista only. */
|
|
||||||
uint32_t FUSE_OPT_GPU_TPC0_DISABLE_CP2;
|
|
||||||
uint32_t FUSE_OPT_GPU_TPC1_DISABLE;
|
|
||||||
uint32_t FUSE_OPT_GPU_TPC1_DISABLE_CP1;
|
|
||||||
uint32_t FUSE_OPT_GPU_TPC1_DISABLE_CP2;
|
|
||||||
uint32_t FUSE_OPT_CPU_DISABLE_CP2;
|
|
||||||
uint32_t FUSE_OPT_GPU_DISABLE_CP2;
|
|
||||||
uint32_t FUSE_USB_CALIB_EXT;
|
|
||||||
uint32_t FUSE_RESERVED_FIELD;
|
|
||||||
uint32_t _0x358[0x9];
|
|
||||||
uint32_t FUSE_SPARE_REALIGNMENT_REG;
|
|
||||||
uint32_t FUSE_SPARE_BIT[0x20];
|
|
||||||
} tegra_fuse_chip_erista_t;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint32_t FUSE_RESERVED_ODM8[0xE]; /* Mariko only. */
|
|
||||||
uint32_t FUSE_KEK[0x4]; /* Mariko only. */
|
|
||||||
uint32_t FUSE_BEK[0x4]; /* Mariko only. */
|
|
||||||
uint32_t _0xF0; /* Mariko only. */
|
|
||||||
uint32_t _0xF4; /* Mariko only. */
|
|
||||||
uint32_t _0xF8; /* Mariko only. */
|
|
||||||
uint32_t _0xFC; /* Mariko only. */
|
|
||||||
uint32_t FUSE_PRODUCTION_MODE;
|
|
||||||
uint32_t FUSE_JTAG_SECUREID_VALID;
|
|
||||||
uint32_t FUSE_ODM_LOCK;
|
|
||||||
uint32_t FUSE_OPT_OPENGL_EN;
|
|
||||||
uint32_t FUSE_SKU_INFO;
|
|
||||||
uint32_t FUSE_CPU_SPEEDO_0_CALIB;
|
|
||||||
uint32_t FUSE_CPU_IDDQ_CALIB;
|
|
||||||
uint32_t FUSE_RESERVED_ODM22[0x3]; /* Mariko only. */
|
|
||||||
uint32_t FUSE_OPT_FT_REV;
|
|
||||||
uint32_t FUSE_CPU_SPEEDO_1_CALIB;
|
|
||||||
uint32_t FUSE_CPU_SPEEDO_2_CALIB;
|
|
||||||
uint32_t FUSE_SOC_SPEEDO_0_CALIB;
|
|
||||||
uint32_t FUSE_SOC_SPEEDO_1_CALIB;
|
|
||||||
uint32_t FUSE_SOC_SPEEDO_2_CALIB;
|
|
||||||
uint32_t FUSE_SOC_IDDQ_CALIB;
|
|
||||||
uint32_t FUSE_RESERVED_ODM25; /* Mariko only. */
|
|
||||||
uint32_t FUSE_FA;
|
|
||||||
uint32_t FUSE_RESERVED_PRODUCTION;
|
|
||||||
uint32_t FUSE_HDMI_LANE0_CALIB;
|
|
||||||
uint32_t FUSE_HDMI_LANE1_CALIB;
|
|
||||||
uint32_t FUSE_HDMI_LANE2_CALIB;
|
|
||||||
uint32_t FUSE_HDMI_LANE3_CALIB;
|
|
||||||
uint32_t FUSE_ENCRYPTION_RATE;
|
|
||||||
uint32_t FUSE_PUBLIC_KEY[0x8];
|
|
||||||
uint32_t FUSE_TSENSOR1_CALIB;
|
|
||||||
uint32_t FUSE_TSENSOR2_CALIB;
|
|
||||||
uint32_t FUSE_OPT_SECURE_SCC_DIS; /* Mariko only. */
|
|
||||||
uint32_t FUSE_OPT_CP_REV;
|
|
||||||
uint32_t FUSE_OPT_PFG;
|
|
||||||
uint32_t FUSE_TSENSOR0_CALIB;
|
|
||||||
uint32_t FUSE_FIRST_BOOTROM_PATCH_SIZE;
|
|
||||||
uint32_t FUSE_SECURITY_MODE;
|
|
||||||
uint32_t FUSE_PRIVATE_KEY[0x5];
|
|
||||||
uint32_t FUSE_ARM_JTAG_DIS;
|
|
||||||
uint32_t FUSE_BOOT_DEVICE_INFO;
|
|
||||||
uint32_t FUSE_RESERVED_SW;
|
|
||||||
uint32_t FUSE_OPT_VP9_DISABLE;
|
|
||||||
uint32_t FUSE_RESERVED_ODM0[0x8];
|
|
||||||
uint32_t FUSE_OBS_DIS;
|
|
||||||
uint32_t _0x1EC; /* Mariko only. */
|
|
||||||
uint32_t FUSE_USB_CALIB;
|
|
||||||
uint32_t FUSE_SKU_DIRECT_CONFIG;
|
|
||||||
uint32_t FUSE_KFUSE_PRIVKEY_CTRL;
|
|
||||||
uint32_t FUSE_PACKAGE_INFO;
|
|
||||||
uint32_t FUSE_OPT_VENDOR_CODE;
|
|
||||||
uint32_t FUSE_OPT_FAB_CODE;
|
|
||||||
uint32_t FUSE_OPT_LOT_CODE_0;
|
|
||||||
uint32_t FUSE_OPT_LOT_CODE_1;
|
|
||||||
uint32_t FUSE_OPT_WAFER_ID;
|
|
||||||
uint32_t FUSE_OPT_X_COORDINATE;
|
|
||||||
uint32_t FUSE_OPT_Y_COORDINATE;
|
|
||||||
uint32_t FUSE_OPT_SEC_DEBUG_EN;
|
|
||||||
uint32_t FUSE_OPT_OPS_RESERVED;
|
|
||||||
uint32_t _0x224; /* Mariko only. */
|
|
||||||
uint32_t FUSE_GPU_IDDQ_CALIB;
|
|
||||||
uint32_t FUSE_TSENSOR3_CALIB;
|
|
||||||
uint32_t FUSE_CLOCK_BOUNDOUT0;
|
|
||||||
uint32_t FUSE_CLOCK_BOUNDOUT1;
|
|
||||||
uint32_t FUSE_RESERVED_ODM26[0x3]; /* Mariko only. */
|
|
||||||
uint32_t FUSE_OPT_SAMPLE_TYPE;
|
|
||||||
uint32_t FUSE_OPT_SUBREVISION;
|
|
||||||
uint32_t FUSE_OPT_SW_RESERVED_0;
|
|
||||||
uint32_t FUSE_OPT_SW_RESERVED_1;
|
|
||||||
uint32_t FUSE_TSENSOR4_CALIB;
|
|
||||||
uint32_t FUSE_TSENSOR5_CALIB;
|
|
||||||
uint32_t FUSE_TSENSOR6_CALIB;
|
|
||||||
uint32_t FUSE_TSENSOR7_CALIB;
|
|
||||||
uint32_t FUSE_OPT_PRIV_SEC_EN;
|
|
||||||
uint32_t FUSE_BOOT_SECURITY_INFO; /* Mariko only. */
|
|
||||||
uint32_t _0x26C; /* Mariko only. */
|
|
||||||
uint32_t _0x270; /* Mariko only. */
|
|
||||||
uint32_t _0x274; /* Mariko only. */
|
|
||||||
uint32_t _0x278; /* Mariko only. */
|
|
||||||
uint32_t FUSE_FUSE2TSEC_DEBUG_DISABLE;
|
|
||||||
uint32_t FUSE_TSENSOR_COMMON;
|
|
||||||
uint32_t FUSE_OPT_CP_BIN;
|
|
||||||
uint32_t FUSE_OPT_GPU_DISABLE;
|
|
||||||
uint32_t FUSE_OPT_FT_BIN;
|
|
||||||
uint32_t FUSE_OPT_DONE_MAP;
|
|
||||||
uint32_t FUSE_RESERVED_ODM29; /* Mariko only. */
|
|
||||||
uint32_t FUSE_APB2JTAG_DISABLE;
|
|
||||||
uint32_t FUSE_ODM_INFO;
|
|
||||||
uint32_t _0x2A0[0x2];
|
|
||||||
uint32_t FUSE_ARM_CRYPT_DE_FEATURE;
|
|
||||||
uint32_t _0x2AC;
|
|
||||||
uint32_t _0x2B0; /* Mariko only. */
|
|
||||||
uint32_t _0x2B4; /* Mariko only. */
|
|
||||||
uint32_t _0x2B8; /* Mariko only. */
|
|
||||||
uint32_t _0x2BC; /* Mariko only. */
|
|
||||||
uint32_t FUSE_WOA_SKU_FLAG;
|
|
||||||
uint32_t FUSE_ECO_RESERVE_1;
|
|
||||||
uint32_t FUSE_GCPLEX_CONFIG_FUSE;
|
|
||||||
uint32_t FUSE_PRODUCTION_MONTH;
|
|
||||||
uint32_t FUSE_RAM_REPAIR_INDICATOR;
|
|
||||||
uint32_t FUSE_TSENSOR9_CALIB;
|
|
||||||
uint32_t _0x2D8;
|
|
||||||
uint32_t FUSE_VMIN_CALIBRATION;
|
|
||||||
uint32_t FUSE_AGING_SENSOR_CALIBRATION;
|
|
||||||
uint32_t FUSE_DEBUG_AUTHENTICATION;
|
|
||||||
uint32_t FUSE_SECURE_PROVISION_INDEX;
|
|
||||||
uint32_t FUSE_SECURE_PROVISION_INFO;
|
|
||||||
uint32_t FUSE_OPT_GPU_DISABLE_CP1;
|
|
||||||
uint32_t FUSE_SPARE_ENDIS;
|
|
||||||
uint32_t FUSE_ECO_RESERVE_0;
|
|
||||||
uint32_t _0x2FC[0x2];
|
|
||||||
uint32_t FUSE_RESERVED_CALIB0;
|
|
||||||
uint32_t FUSE_RESERVED_CALIB1;
|
|
||||||
uint32_t FUSE_OPT_GPU_TPC0_DISABLE;
|
|
||||||
uint32_t FUSE_OPT_GPU_TPC0_DISABLE_CP1;
|
|
||||||
uint32_t FUSE_OPT_CPU_DISABLE;
|
|
||||||
uint32_t FUSE_OPT_CPU_DISABLE_CP1;
|
|
||||||
uint32_t FUSE_TSENSOR10_CALIB;
|
|
||||||
uint32_t FUSE_TSENSOR10_CALIB_AUX;
|
|
||||||
uint32_t _0x324; /* Mariko only. */
|
|
||||||
uint32_t _0x328; /* Mariko only. */
|
|
||||||
uint32_t _0x32C; /* Mariko only. */
|
|
||||||
uint32_t _0x330; /* Mariko only. */
|
|
||||||
uint32_t _0x334; /* Mariko only. */
|
|
||||||
uint32_t FUSE_OPT_GPU_TPC0_DISABLE_CP2;
|
|
||||||
uint32_t FUSE_OPT_GPU_TPC1_DISABLE;
|
|
||||||
uint32_t FUSE_OPT_GPU_TPC1_DISABLE_CP1;
|
|
||||||
uint32_t FUSE_OPT_GPU_TPC1_DISABLE_CP2;
|
|
||||||
uint32_t FUSE_OPT_CPU_DISABLE_CP2;
|
|
||||||
uint32_t FUSE_OPT_GPU_DISABLE_CP2;
|
|
||||||
uint32_t FUSE_USB_CALIB_EXT;
|
|
||||||
uint32_t FUSE_RESERVED_FIELD;
|
|
||||||
uint32_t _0x358[0x9];
|
|
||||||
uint32_t FUSE_SPARE_REALIGNMENT_REG;
|
|
||||||
uint32_t FUSE_SPARE_BIT[0x1E];
|
|
||||||
} tegra_fuse_chip_mariko_t;
|
|
||||||
|
|
||||||
static inline volatile tegra_fuse_t *fuse_get_regs(void)
|
|
||||||
{
|
|
||||||
return (volatile tegra_fuse_t *)FUSE_BASE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline volatile tegra_fuse_chip_common_t *fuse_chip_common_get_regs(void)
|
|
||||||
{
|
|
||||||
return (volatile tegra_fuse_chip_common_t *)FUSE_CHIP_BASE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline volatile tegra_fuse_chip_erista_t *fuse_chip_erista_get_regs(void)
|
|
||||||
{
|
|
||||||
return (volatile tegra_fuse_chip_erista_t *)FUSE_CHIP_BASE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline volatile tegra_fuse_chip_mariko_t *fuse_chip_mariko_get_regs(void)
|
|
||||||
{
|
|
||||||
return (volatile tegra_fuse_chip_mariko_t *)FUSE_CHIP_BASE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void fuse_init(void);
|
|
||||||
void fuse_disable_programming(void);
|
|
||||||
void fuse_disable_private_key(void);
|
|
||||||
void fuse_enable_power(void);
|
|
||||||
void fuse_disable_power(void);
|
|
||||||
|
|
||||||
uint32_t fuse_get_sku_info(void);
|
|
||||||
uint32_t fuse_get_spare_bit(uint32_t index);
|
|
||||||
uint32_t fuse_get_reserved_odm(uint32_t index);
|
|
||||||
uint32_t fuse_get_bootrom_patch_version(void);
|
|
||||||
uint64_t fuse_get_device_id(void);
|
|
||||||
uint32_t fuse_get_dram_id(void);
|
|
||||||
uint32_t fuse_get_hardware_type_with_firmware_check(uint32_t target_firmware);
|
|
||||||
uint32_t fuse_get_hardware_type(void);
|
|
||||||
uint32_t fuse_get_retail_type(void);
|
|
||||||
void fuse_get_hardware_info(void *dst);
|
|
||||||
bool fuse_is_new_format(void);
|
|
||||||
uint32_t fuse_get_device_unique_key_generation(void);
|
|
||||||
uint32_t fuse_get_soc_type(void);
|
|
||||||
uint32_t fuse_get_regulator(void);
|
|
||||||
|
|
||||||
uint32_t fuse_hw_read(uint32_t addr);
|
|
||||||
void fuse_hw_write(uint32_t value, uint32_t addr);
|
|
||||||
void fuse_hw_sense(void);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2018-2020 Atmosphère-NX
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef FUSEE_MAX77812_H_
|
|
||||||
#define FUSEE_MAX77812_H_
|
|
||||||
|
|
||||||
#define MAX77812_REG_RESET 0x00
|
|
||||||
#define MAX77812_REG_INT_SRC 0x01
|
|
||||||
#define MAX77812_REG_INT_SRC_M 0x02
|
|
||||||
#define MAX77812_REG_TOPSYS_INT 0x03
|
|
||||||
#define MAX77812_REG_TOPSYS_INT_M 0x04
|
|
||||||
#define MAX77812_REG_TOPSYS_STAT 0x05
|
|
||||||
#define MAX77812_REG_EN_CTRL 0x06
|
|
||||||
#define MAX77812_REG_STUP_DLY1 0x07
|
|
||||||
#define MAX77812_REG_STUP_DLY2 0x08
|
|
||||||
#define MAX77812_REG_STUP_DLY3 0x09
|
|
||||||
#define MAX77812_REG_SHDN_DLY1 0x0A
|
|
||||||
#define MAX77812_REG_SHDN_DLY2 0x0B
|
|
||||||
#define MAX77812_REG_SHDN_DLY3 0x0C
|
|
||||||
#define MAX77812_REG_SHDN_DLY4 0x0D
|
|
||||||
#define MAX77812_REG_WDTRSTB_DEB 0x0E
|
|
||||||
#define MAX77812_REG_GPI_FUNC 0x0F
|
|
||||||
#define MAX77812_REG_GPI_DEB1 0x10
|
|
||||||
#define MAX77812_REG_GPI_DEB2 0x11
|
|
||||||
#define MAX77812_REG_GPI_PD_CTRL 0x12
|
|
||||||
#define MAX77812_REG_PROT_CFG 0x13
|
|
||||||
#define MAX77812_REG_I2C_CFG 0x15
|
|
||||||
#define MAX77812_REG_BUCK_INT 0x20
|
|
||||||
#define MAX77812_REG_BUCK_INT_M 0x21
|
|
||||||
#define MAX77812_REG_BUCK_STAT 0x22
|
|
||||||
#define MAX77812_REG_M1_VOUT 0x23
|
|
||||||
#define MAX77812_REG_M2_VOUT 0x24
|
|
||||||
#define MAX77812_REG_M3_VOUT 0x25
|
|
||||||
#define MAX77812_REG_M4_VOUT 0x26
|
|
||||||
#define MAX77812_REG_M1_VOUT_D 0x27
|
|
||||||
#define MAX77812_REG_M2_VOUT_D 0x28
|
|
||||||
#define MAX77812_REG_M3_VOUT_D 0x29
|
|
||||||
#define MAX77812_REG_M4_VOUT_D 0x2A
|
|
||||||
#define MAX77812_REG_M1_VOUT_S 0x2B
|
|
||||||
#define MAX77812_REG_M2_VOUT_S 0x2C
|
|
||||||
#define MAX77812_REG_M3_VOUT_S 0x2D
|
|
||||||
#define MAX77812_REG_M4_VOUT_S 0x2E
|
|
||||||
#define MAX77812_REG_M1_CGF 0x2F
|
|
||||||
#define MAX77812_REG_M2_CGF 0x30
|
|
||||||
#define MAX77812_REG_M3_CGF 0x31
|
|
||||||
#define MAX77812_REG_M4_CGF 0x32
|
|
||||||
#define MAX77812_REG_GLB_CFG1 0x33
|
|
||||||
#define MAX77812_REG_GLB_CFG2 0x34
|
|
||||||
#define MAX77812_REG_GLB_CFG3 0x35
|
|
||||||
|
|
||||||
#define MAX77812_REG_EN_CTRL_MASK(n) BIT(n)
|
|
||||||
#define MAX77812_START_SLEW_RATE_MASK 0x07
|
|
||||||
#define MAX77812_SHDN_SLEW_RATE_MASK 0x70
|
|
||||||
#define MAX77812_RAMPDOWN_SLEW_RATE_MASK 0x07
|
|
||||||
#define MAX77812_RAMPUP_SLEW_RATE_MASK 0x70
|
|
||||||
|
|
||||||
#define MAX77812_VOUT_MASK 0xFF
|
|
||||||
#define MAX77812_VOUT_N_VOLTAGE 0xFF
|
|
||||||
#define MAX77812_VOUT_VMIN 250000
|
|
||||||
#define MAX77812_VOUT_VMAX 1525000
|
|
||||||
#define MAX77812_VOUT_STEP 5000
|
|
||||||
|
|
||||||
#define MAX77812_REGULATOR_ID_M1 0
|
|
||||||
#define MAX77812_REGULATOR_ID_M2 1
|
|
||||||
#define MAX77812_REGULATOR_ID_M3 2
|
|
||||||
#define MAX77812_REGULATOR_ID_M4 3
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,713 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2018-2020 Atmosphère-NX
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef FUSEE_PMC_H
|
|
||||||
#define FUSEE_PMC_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#define PMC_BASE 0x7000E400
|
|
||||||
#define MAKE_PMC_REG(n) MAKE_REG32(PMC_BASE + n)
|
|
||||||
|
|
||||||
#define PMC_CONTROL_SDMMC1 (1 << 12)
|
|
||||||
#define PMC_CONTROL_SDMMC3 (1 << 13)
|
|
||||||
#define PMC_CONTROL_SDMMC4 (1 << 14)
|
|
||||||
|
|
||||||
#define APBDEV_PMC_CONTROL MAKE_PMC_REG(0x00)
|
|
||||||
#define APBDEV_PM_0 MAKE_PMC_REG(0x14)
|
|
||||||
#define APBDEV_PMC_DPD_ENABLE_0 MAKE_PMC_REG(0x24)
|
|
||||||
#define APBDEV_PMC_PWRGATE_TOGGLE_0 MAKE_PMC_REG(0x30)
|
|
||||||
#define APBDEV_PMC_PWRGATE_STATUS_0 MAKE_PMC_REG(0x38)
|
|
||||||
#define APBDEV_PMC_NO_IOPOWER_0 MAKE_PMC_REG(0x44)
|
|
||||||
#define APBDEV_PMC_SCRATCH0_0 MAKE_PMC_REG(0x50)
|
|
||||||
#define APBDEV_PMC_SCRATCH1_0 MAKE_PMC_REG(0x54)
|
|
||||||
#define APBDEV_PMC_SCRATCH20_0 MAKE_PMC_REG(0xA0)
|
|
||||||
#define APBDEV_PMC_PWR_DET_VAL_0 MAKE_PMC_REG(0xE4)
|
|
||||||
#define APBDEV_PMC_DDR_PWR_0 MAKE_PMC_REG(0xE8)
|
|
||||||
#define APBDEV_PMC_CRYPTO_OP_0 MAKE_PMC_REG(0xF4)
|
|
||||||
#define APBDEV_PMC_WAKE2_STATUS_0 MAKE_PMC_REG(0x168)
|
|
||||||
#define APBDEV_PMC_OSC_EDPD_OVER_0 MAKE_PMC_REG(0x1A4)
|
|
||||||
#define APBDEV_PMC_RST_STATUS_0 MAKE_PMC_REG(0x1B4)
|
|
||||||
#define APBDEV_PMC_IO_DPD_REQ_0 MAKE_PMC_REG(0x1B8)
|
|
||||||
#define APBDEV_PMC_IO_DPD2_REQ_0 MAKE_PMC_REG(0x1C0)
|
|
||||||
#define APBDEV_PMC_VDDP_SEL_0 MAKE_PMC_REG(0x1CC)
|
|
||||||
#define APBDEV_PMC_SCRATCH49_0 MAKE_PMC_REG(0x244)
|
|
||||||
#define APBDEV_PMC_TSC_MULT_0 MAKE_PMC_REG(0x2B4)
|
|
||||||
#define APBDEV_PMC_REG_SHORT_0 MAKE_PMC_REG(0x2CC)
|
|
||||||
#define APBDEV_PMC_WEAK_BIAS_0 MAKE_PMC_REG(0x2C8)
|
|
||||||
#define APBDEV_PMC_SECURE_SCRATCH21_0 MAKE_PMC_REG(0x334)
|
|
||||||
#define APBDEV_PMC_SECURE_SCRATCH32_0 MAKE_PMC_REG(0x360)
|
|
||||||
#define APBDEV_PMC_SECURE_SCRATCH49_0 MAKE_PMC_REG(0x3A4)
|
|
||||||
#define APBDEV_PMC_CNTRL2_0 MAKE_PMC_REG(0x440)
|
|
||||||
#define APBDEV_PMC_IO_DPD4_REQ_0 MAKE_PMC_REG(0x464)
|
|
||||||
#define APBDEV_PMC_UTMIP_PAD_CFG1_0 MAKE_PMC_REG(0x4C4)
|
|
||||||
#define APBDEV_PMC_UTMIP_PAD_CFG3_0 MAKE_PMC_REG(0x4CC)
|
|
||||||
#define APBDEV_PMC_DDR_CNTRL_0 MAKE_PMC_REG(0x4E4)
|
|
||||||
#define APBDEV_PMC_SCRATCH43_0 MAKE_PMC_REG(0x22C)
|
|
||||||
#define APBDEV_PMC_SCRATCH188_0 MAKE_PMC_REG(0x810)
|
|
||||||
#define APBDEV_PMC_SCRATCH190_0 MAKE_PMC_REG(0x818)
|
|
||||||
#define APBDEV_PMC_SCRATCH200_0 MAKE_PMC_REG(0x840)
|
|
||||||
|
|
||||||
#define APBDEV_PMC_SCRATCH45_0 MAKE_PMC_REG(0x234)
|
|
||||||
#define APBDEV_PMC_SCRATCH46_0 MAKE_PMC_REG(0x238)
|
|
||||||
#define APBDEV_PMC_SCRATCH33_0 MAKE_PMC_REG(0x120)
|
|
||||||
#define APBDEV_PMC_SCRATCH40_0 MAKE_PMC_REG(0x13C)
|
|
||||||
|
|
||||||
/* Power Management Controller (APBDEV_PMC_) regs */
|
|
||||||
typedef struct {
|
|
||||||
uint32_t cntrl; /* _CNTRL_0, 0x00 */
|
|
||||||
uint32_t sec_disable; /* _SEC_DISABLE_0, 0x04 */
|
|
||||||
uint32_t pmc_swrst; /* _PMC_SWRST_0, 0x08 */
|
|
||||||
uint32_t wake_mask; /* _WAKE_MASK_0, 0x0c */
|
|
||||||
uint32_t wake_lvl; /* _WAKE_LVL_0, 0x10 */
|
|
||||||
uint32_t wake_status; /* _WAKE_STATUS_0, 0x14 */
|
|
||||||
uint32_t sw_wake_status; /* _SW_WAKE_STATUS_0, 0x18 */
|
|
||||||
uint32_t dpd_pads_oride; /* _DPD_PADS_ORIDE_0, 0x1c */
|
|
||||||
uint32_t dpd_sample; /* _DPD_SAMPLE_0, 0x20 */
|
|
||||||
uint32_t dpd_enable; /* _DPD_ENABLE_0, 0x24 */
|
|
||||||
uint32_t pwrgate_timer_off; /* _PWRGATE_TIMER_OFF_0, 0x28 */
|
|
||||||
uint32_t clamp_status; /* _CLAMP_STATUS_0, 0x2c */
|
|
||||||
uint32_t pwrgate_toggle; /* _PWRGATE_TOGGLE_0, 0x30 */
|
|
||||||
uint32_t remove_clamping; /* _REMOVE_CLAMPING_0, 0x34 */
|
|
||||||
uint32_t pwrgate_status; /* _PWRGATE_STATUS_0, 0x38 */
|
|
||||||
uint32_t pwrgood_timer; /* _PWRGOOD_TIMER_0, 0x3c */
|
|
||||||
uint32_t blink_timer; /* _BLINK_TIMER_0, 0x40 */
|
|
||||||
uint32_t no_iopower; /* _NO_IOPOWER_0, 0x44 */
|
|
||||||
uint32_t pwr_det; /* _PWR_DET_0, 0x48 */
|
|
||||||
uint32_t pwr_det_latch; /* _PWR_DET_LATCH_0, 0x4c */
|
|
||||||
uint32_t scratch0; /* _SCRATCH0_0, 0x50 */
|
|
||||||
uint32_t scratch1; /* _SCRATCH1_0, 0x54 */
|
|
||||||
uint32_t scratch2; /* _SCRATCH2_0, 0x58 */
|
|
||||||
uint32_t scratch3; /* _SCRATCH3_0, 0x5c */
|
|
||||||
uint32_t scratch4; /* _SCRATCH4_0, 0x60 */
|
|
||||||
uint32_t scratch5; /* _SCRATCH5_0, 0x64 */
|
|
||||||
uint32_t scratch6; /* _SCRATCH6_0, 0x68 */
|
|
||||||
uint32_t scratch7; /* _SCRATCH7_0, 0x6c */
|
|
||||||
uint32_t scratch8; /* _SCRATCH8_0, 0x70 */
|
|
||||||
uint32_t scratch9; /* _SCRATCH9_0, 0x74 */
|
|
||||||
uint32_t scratch10; /* _SCRATCH10_0, 0x78 */
|
|
||||||
uint32_t scratch11; /* _SCRATCH11_0, 0x7c */
|
|
||||||
uint32_t scratch12; /* _SCRATCH12_0, 0x80 */
|
|
||||||
uint32_t scratch13; /* _SCRATCH13_0, 0x84 */
|
|
||||||
uint32_t scratch14; /* _SCRATCH14_0, 0x88 */
|
|
||||||
uint32_t scratch15; /* _SCRATCH15_0, 0x8c */
|
|
||||||
uint32_t scratch16; /* _SCRATCH16_0, 0x90 */
|
|
||||||
uint32_t scratch17; /* _SCRATCH17_0, 0x94 */
|
|
||||||
uint32_t scratch18; /* _SCRATCH18_0, 0x98 */
|
|
||||||
uint32_t scratch19; /* _SCRATCH19_0, 0x9c */
|
|
||||||
uint32_t scratch20; /* _SCRATCH20_0, 0xa0 */
|
|
||||||
uint32_t scratch21; /* _SCRATCH21_0, 0xa4 */
|
|
||||||
uint32_t scratch22; /* _SCRATCH22_0, 0xa8 */
|
|
||||||
uint32_t scratch23; /* _SCRATCH23_0, 0xac */
|
|
||||||
uint32_t secure_scratch0; /* _SECURE_SCRATCH0_0, 0xb0 */
|
|
||||||
uint32_t secure_scratch1; /* _SECURE_SCRATCH1_0, 0xb4 */
|
|
||||||
uint32_t secure_scratch2; /* _SECURE_SCRATCH2_0, 0xb8 */
|
|
||||||
uint32_t secure_scratch3; /* _SECURE_SCRATCH3_0, 0xbc */
|
|
||||||
uint32_t secure_scratch4; /* _SECURE_SCRATCH4_0, 0xc0 */
|
|
||||||
uint32_t secure_scratch5; /* _SECURE_SCRATCH5_0, 0xc4 */
|
|
||||||
uint32_t cpupwrgood_timer; /* _CPUPWRGOOD_TIMER_0, 0xc8 */
|
|
||||||
uint32_t cpupwroff_timer; /* _CPUPWROFF_TIMER_0, 0xcc */
|
|
||||||
uint32_t pg_mask; /* _PG_MASK_0, 0xd0 */
|
|
||||||
uint32_t pg_mask_1; /* _PG_MASK_1_0, 0xd4 */
|
|
||||||
uint32_t auto_wake_lvl; /* _AUTO_WAKE_LVL_0, 0xd8 */
|
|
||||||
uint32_t auto_wake_lvl_mask; /* _AUTO_WAKE_LVL_MASK_0, 0xdc */
|
|
||||||
uint32_t wake_delay; /* _WAKE_DELAY_0, 0xe0 */
|
|
||||||
uint32_t pwr_det_val; /* _PWR_DET_VAL_0, 0xe4 */
|
|
||||||
uint32_t ddr_pwr; /* _DDR_PWR_0, 0xe8 */
|
|
||||||
uint32_t usb_debounce_del; /* _USB_DEBOUNCE_DEL_0, 0xec */
|
|
||||||
uint32_t usb_ao; /* _USB_AO_0, 0xf0 */
|
|
||||||
uint32_t crypto_op; /* _CRYPTO_OP_0, 0xf4 */
|
|
||||||
uint32_t pllp_wb0_override; /* _PLLP_WB0_OVERRIDE_0, 0xf8 */
|
|
||||||
uint32_t scratch24; /* _SCRATCH24_0, 0xfc */
|
|
||||||
uint32_t scratch25; /* _SCRATCH25_0, 0x100 */
|
|
||||||
uint32_t scratch26; /* _SCRATCH26_0, 0x104 */
|
|
||||||
uint32_t scratch27; /* _SCRATCH27_0, 0x108 */
|
|
||||||
uint32_t scratch28; /* _SCRATCH28_0, 0x10c */
|
|
||||||
uint32_t scratch29; /* _SCRATCH29_0, 0x110 */
|
|
||||||
uint32_t scratch30; /* _SCRATCH30_0, 0x114 */
|
|
||||||
uint32_t scratch31; /* _SCRATCH31_0, 0x118 */
|
|
||||||
uint32_t scratch32; /* _SCRATCH32_0, 0x11c */
|
|
||||||
uint32_t scratch33; /* _SCRATCH33_0, 0x120 */
|
|
||||||
uint32_t scratch34; /* _SCRATCH34_0, 0x124 */
|
|
||||||
uint32_t scratch35; /* _SCRATCH35_0, 0x128 */
|
|
||||||
uint32_t scratch36; /* _SCRATCH36_0, 0x12c */
|
|
||||||
uint32_t scratch37; /* _SCRATCH37_0, 0x130 */
|
|
||||||
uint32_t scratch38; /* _SCRATCH38_0, 0x134 */
|
|
||||||
uint32_t scratch39; /* _SCRATCH39_0, 0x138 */
|
|
||||||
uint32_t scratch40; /* _SCRATCH40_0, 0x13c */
|
|
||||||
uint32_t scratch41; /* _SCRATCH41_0, 0x140 */
|
|
||||||
uint32_t scratch42; /* _SCRATCH42_0, 0x144 */
|
|
||||||
uint32_t bondout_mirror0; /* _BONDOUT_MIRROR0_0, 0x148 */
|
|
||||||
uint32_t bondout_mirror1; /* _BONDOUT_MIRROR1_0, 0x14c */
|
|
||||||
uint32_t bondout_mirror2; /* _BONDOUT_MIRROR2_0, 0x150 */
|
|
||||||
uint32_t sys_33v_en; /* _SYS_33V_EN_0, 0x154 */
|
|
||||||
uint32_t bondout_mirror_access; /* _BONDOUT_MIRROR_ACCESS_0, 0x158 */
|
|
||||||
uint32_t gate; /* _GATE_0, 0x15c */
|
|
||||||
uint32_t wake2_mask; /* _WAKE2_MASK_0, 0x160 */
|
|
||||||
uint32_t wake2_lvl; /* _WAKE2_LVL_0, 0x164 */
|
|
||||||
uint32_t wake2_status; /* _WAKE2_STATUS_0, 0x168 */
|
|
||||||
uint32_t sw_wake2_status; /* _SW_WAKE2_STATUS_0, 0x16c */
|
|
||||||
uint32_t auto_wake2_lvl_mask; /* _AUTO_WAKE2_LVL_MASK_0, 0x170 */
|
|
||||||
uint32_t pg_mask_2; /* _PG_MASK_2_0, 0x174 */
|
|
||||||
uint32_t pg_mask_ce1; /* _PG_MASK_CE1_0, 0x178 */
|
|
||||||
uint32_t pg_mask_ce2; /* _PG_MASK_CE2_0, 0x17c */
|
|
||||||
uint32_t pg_mask_ce3; /* _PG_MASK_CE3_0, 0x180 */
|
|
||||||
uint32_t pwrgate_timer_ce_0; /* _PWRGATE_TIMER_CE_0_0, 0x184 */
|
|
||||||
uint32_t pwrgate_timer_ce_1; /* _PWRGATE_TIMER_CE_1_0, 0x188 */
|
|
||||||
uint32_t pwrgate_timer_ce_2; /* _PWRGATE_TIMER_CE_2_0, 0x18c */
|
|
||||||
uint32_t pwrgate_timer_ce_3; /* _PWRGATE_TIMER_CE_3_0, 0x190 */
|
|
||||||
uint32_t pwrgate_timer_ce_4; /* _PWRGATE_TIMER_CE_4_0, 0x194 */
|
|
||||||
uint32_t pwrgate_timer_ce_5; /* _PWRGATE_TIMER_CE_5_0, 0x198 */
|
|
||||||
uint32_t pwrgate_timer_ce_6; /* _PWRGATE_TIMER_CE_6_0, 0x19c */
|
|
||||||
uint32_t pcx_edpd_cntrl; /* _PCX_EDPD_CNTRL_0, 0x1a0 */
|
|
||||||
uint32_t osc_edpd_over; /* _OSC_EDPD_OVER_0, 0x1a4 */
|
|
||||||
uint32_t clk_out_cntrl; /* _CLK_OUT_CNTRL_0, 0x1a8 */
|
|
||||||
uint32_t sata_pwrgt; /* _SATA_PWRGT_0, 0x1ac */
|
|
||||||
uint32_t sensor_ctrl; /* _SENSOR_CTRL_0, 0x1b0 */
|
|
||||||
uint32_t rst_status; /* _RST_STATUS_0, 0x1b4 */
|
|
||||||
uint32_t io_dpd_req; /* _IO_DPD_REQ_0, 0x1b8 */
|
|
||||||
uint32_t io_dpd_status; /* _IO_DPD_STATUS_0, 0x1bc */
|
|
||||||
uint32_t io_dpd2_req; /* _IO_DPD2_REQ_0, 0x1c0 */
|
|
||||||
uint32_t io_dpd2_status; /* _IO_DPD2_STATUS_0, 0x1c4 */
|
|
||||||
uint32_t sel_dpd_tim; /* _SEL_DPD_TIM_0, 0x1c8 */
|
|
||||||
uint32_t vddp_sel; /* _VDDP_SEL_0, 0x1cc */
|
|
||||||
uint32_t ddr_cfg; /* _DDR_CFG_0, 0x1d0 */
|
|
||||||
uint32_t _0x1d4[2];
|
|
||||||
uint32_t pllm_wb0_override_freq; /* _PLLM_WB0_OVERRIDE_FREQ_0, 0x1dc */
|
|
||||||
uint32_t _0x1e0;
|
|
||||||
uint32_t pwrgate_timer_mult; /* _PWRGATE_TIMER_MULT_0, 0x1e4 */
|
|
||||||
uint32_t dsi_sel_dpd; /* _DSI_SEL_DPD_0, 0x1e8 */
|
|
||||||
uint32_t utmip_uhsic_triggers; /* _UTMIP_UHSIC_TRIGGERS_0, 0x1ec */
|
|
||||||
uint32_t utmip_uhsic_saved_state; /* _UTMIP_UHSIC_SAVED_STATE_0, 0x1f0 */
|
|
||||||
uint32_t _0x1f4;
|
|
||||||
uint32_t utmip_term_pad_cfg; /* _UTMIP_TERM_PAD_CFG_0, 0x1f8 */
|
|
||||||
uint32_t utmip_uhsic_sleep_cfg; /* _UTMIP_UHSIC_SLEEP_CFG_0, 0x1fc */
|
|
||||||
uint32_t utmip_uhsic_sleepwalk_cfg; /* _UTMIP_UHSIC_SLEEPWALK_CFG_0, 0x200 */
|
|
||||||
uint32_t utmip_sleepwalk_p0; /* _UTMIP_SLEEPWALK_P0_0, 0x204 */
|
|
||||||
uint32_t utmip_sleepwalk_p1; /* _UTMIP_SLEEPWALK_P1_0, 0x208 */
|
|
||||||
uint32_t utmip_sleepwalk_p2; /* _UTMIP_SLEEPWALK_P2_0, 0x20c */
|
|
||||||
uint32_t uhsic_sleepwalk_p0; /* _UHSIC_SLEEPWALK_P0_0, 0x210 */
|
|
||||||
uint32_t utmip_uhsic_status; /* _UTMIP_UHSIC_STATUS_0, 0x214 */
|
|
||||||
uint32_t utmip_uhsic_fake; /* _UTMIP_UHSIC_FAKE_0, 0x218 */
|
|
||||||
uint32_t bondout_mirror3; /* _BONDOUT_MIRROR3_0, 0x21c */
|
|
||||||
uint32_t bondout_mirror4; /* _BONDOUT_MIRROR4_0, 0x220 */
|
|
||||||
uint32_t secure_scratch6; /* _SECURE_SCRATCH6_0, 0x224 */
|
|
||||||
uint32_t secure_scratch7; /* _SECURE_SCRATCH7_0, 0x228 */
|
|
||||||
uint32_t scratch43; /* _SCRATCH43_0, 0x22c */
|
|
||||||
uint32_t scratch44; /* _SCRATCH44_0, 0x230 */
|
|
||||||
uint32_t scratch45; /* _SCRATCH45_0, 0x234 */
|
|
||||||
uint32_t scratch46; /* _SCRATCH46_0, 0x238 */
|
|
||||||
uint32_t scratch47; /* _SCRATCH47_0, 0x23c */
|
|
||||||
uint32_t scratch48; /* _SCRATCH48_0, 0x240 */
|
|
||||||
uint32_t scratch49; /* _SCRATCH49_0, 0x244 */
|
|
||||||
uint32_t scratch50; /* _SCRATCH50_0, 0x248 */
|
|
||||||
uint32_t scratch51; /* _SCRATCH51_0, 0x24c */
|
|
||||||
uint32_t scratch52; /* _SCRATCH52_0, 0x250 */
|
|
||||||
uint32_t scratch53; /* _SCRATCH53_0, 0x254 */
|
|
||||||
uint32_t scratch54; /* _SCRATCH54_0, 0x258 */
|
|
||||||
uint32_t scratch55; /* _SCRATCH55_0, 0x25c */
|
|
||||||
uint32_t scratch0_eco; /* _SCRATCH0_ECO_0, 0x260 */
|
|
||||||
uint32_t por_dpd_ctrl; /* _POR_DPD_CTRL_0, 0x264 */
|
|
||||||
uint32_t scratch2_eco; /* _SCRATCH2_ECO_0, 0x268 */
|
|
||||||
uint32_t utmip_uhsic_line_wakeup; /* _UTMIP_UHSIC_LINE_WAKEUP_0, 0x26c */
|
|
||||||
uint32_t utmip_bias_master_cntrl; /* _UTMIP_BIAS_MASTER_CNTRL_0, 0x270 */
|
|
||||||
uint32_t utmip_master_config; /* _UTMIP_MASTER_CONFIG_0, 0x274 */
|
|
||||||
uint32_t td_pwrgate_inter_part_timer; /* _TD_PWRGATE_INTER_PART_TIMER_0, 0x278 */
|
|
||||||
uint32_t utmip_uhsic2_triggers; /* _UTMIP_UHSIC2_TRIGGERS_0, 0x27c */
|
|
||||||
uint32_t utmip_uhsic2_saved_state; /* _UTMIP_UHSIC2_SAVED_STATE_0, 0x280 */
|
|
||||||
uint32_t utmip_uhsic2_sleep_cfg; /* _UTMIP_UHSIC2_SLEEP_CFG_0, 0x284 */
|
|
||||||
uint32_t utmip_uhsic2_sleepwalk_cfg; /* _UTMIP_UHSIC2_SLEEPWALK_CFG_0, 0x288 */
|
|
||||||
uint32_t uhsic2_sleepwalk_p1; /* _UHSIC2_SLEEPWALK_P1_0, 0x28c */
|
|
||||||
uint32_t utmip_uhsic2_status; /* _UTMIP_UHSIC2_STATUS_0, 0x290 */
|
|
||||||
uint32_t utmip_uhsic2_fake; /* _UTMIP_UHSIC2_FAKE_0, 0x294 */
|
|
||||||
uint32_t utmip_uhsic2_line_wakeup; /* _UTMIP_UHSIC2_LINE_WAKEUP_0, 0x298 */
|
|
||||||
uint32_t utmip_master2_config; /* _UTMIP_MASTER2_CONFIG_0, 0x29c */
|
|
||||||
uint32_t utmip_uhsic_rpd_cfg; /* _UTMIP_UHSIC_RPD_CFG_0, 0x2a0 */
|
|
||||||
uint32_t pg_mask_ce0; /* _PG_MASK_CE0_0, 0x2a4 */
|
|
||||||
uint32_t pg_mask_3; /* _PG_MASK_3_0, 0x2a8 */
|
|
||||||
uint32_t pg_mask_4; /* _PG_MASK_4_0, 0x2ac */
|
|
||||||
uint32_t pllm_wb0_override2; /* _PLLM_WB0_OVERRIDE2_0, 0x2b0 */
|
|
||||||
uint32_t tsc_mult; /* _TSC_MULT_0, 0x2b4 */
|
|
||||||
uint32_t cpu_vsense_override; /* _CPU_VSENSE_OVERRIDE_0, 0x2b8 */
|
|
||||||
uint32_t glb_amap_cfg; /* _GLB_AMAP_CFG_0, 0x2bc */
|
|
||||||
uint32_t sticky_bits; /* _STICKY_BITS_0, 0x2c0 */
|
|
||||||
uint32_t sec_disable2; /* _SEC_DISABLE2_0, 0x2c4 */
|
|
||||||
uint32_t weak_bias; /* _WEAK_BIAS_0, 0x2c8 */
|
|
||||||
uint32_t reg_short; /* _REG_SHORT_0, 0x2cc */
|
|
||||||
uint32_t pg_mask_andor; /* _PG_MASK_ANDOR_0, 0x2d0 */
|
|
||||||
uint32_t gpu_rg_cntrl; /* _GPU_RG_CNTRL_0, 0x2d4 */
|
|
||||||
uint32_t sec_disable3; /* _SEC_DISABLE3_0, 0x2d8 */
|
|
||||||
uint32_t pg_mask_5; /* _PG_MASK_5_0, 0x2dc */
|
|
||||||
uint32_t pg_mask_6; /* _PG_MASK_6_0, 0x2e0 */
|
|
||||||
uint32_t _0x2e4[7];
|
|
||||||
uint32_t secure_scratch8; /* _SECURE_SCRATCH8_0, 0x300 */
|
|
||||||
uint32_t secure_scratch9; /* _SECURE_SCRATCH9_0, 0x304 */
|
|
||||||
uint32_t secure_scratch10; /* _SECURE_SCRATCH10_0, 0x308 */
|
|
||||||
uint32_t secure_scratch11; /* _SECURE_SCRATCH11_0, 0x30c */
|
|
||||||
uint32_t secure_scratch12; /* _SECURE_SCRATCH12_0, 0x310 */
|
|
||||||
uint32_t secure_scratch13; /* _SECURE_SCRATCH13_0, 0x314 */
|
|
||||||
uint32_t secure_scratch14; /* _SECURE_SCRATCH14_0, 0x318 */
|
|
||||||
uint32_t secure_scratch15; /* _SECURE_SCRATCH15_0, 0x31c */
|
|
||||||
uint32_t secure_scratch16; /* _SECURE_SCRATCH16_0, 0x320 */
|
|
||||||
uint32_t secure_scratch17; /* _SECURE_SCRATCH17_0, 0x324 */
|
|
||||||
uint32_t secure_scratch18; /* _SECURE_SCRATCH18_0, 0x328 */
|
|
||||||
uint32_t secure_scratch19; /* _SECURE_SCRATCH19_0, 0x32c */
|
|
||||||
uint32_t secure_scratch20; /* _SECURE_SCRATCH20_0, 0x330 */
|
|
||||||
uint32_t secure_scratch21; /* _SECURE_SCRATCH21_0, 0x334 */
|
|
||||||
uint32_t secure_scratch22; /* _SECURE_SCRATCH22_0, 0x338 */
|
|
||||||
uint32_t secure_scratch23; /* _SECURE_SCRATCH23_0, 0x33c */
|
|
||||||
uint32_t secure_scratch24; /* _SECURE_SCRATCH24_0, 0x340 */
|
|
||||||
uint32_t secure_scratch25; /* _SECURE_SCRATCH25_0, 0x344 */
|
|
||||||
uint32_t secure_scratch26; /* _SECURE_SCRATCH26_0, 0x348 */
|
|
||||||
uint32_t secure_scratch27; /* _SECURE_SCRATCH27_0, 0x34c */
|
|
||||||
uint32_t secure_scratch28; /* _SECURE_SCRATCH28_0, 0x350 */
|
|
||||||
uint32_t secure_scratch29; /* _SECURE_SCRATCH29_0, 0x354 */
|
|
||||||
uint32_t secure_scratch30; /* _SECURE_SCRATCH30_0, 0x358 */
|
|
||||||
uint32_t secure_scratch31; /* _SECURE_SCRATCH31_0, 0x35c */
|
|
||||||
uint32_t secure_scratch32; /* _SECURE_SCRATCH32_0, 0x360 */
|
|
||||||
uint32_t secure_scratch33; /* _SECURE_SCRATCH33_0, 0x364 */
|
|
||||||
uint32_t secure_scratch34; /* _SECURE_SCRATCH34_0, 0x368 */
|
|
||||||
uint32_t secure_scratch35; /* _SECURE_SCRATCH35_0, 0x36c */
|
|
||||||
uint32_t secure_scratch36; /* _SECURE_SCRATCH36_0, 0x370 */
|
|
||||||
uint32_t secure_scratch37; /* _SECURE_SCRATCH37_0, 0x374 */
|
|
||||||
uint32_t secure_scratch38; /* _SECURE_SCRATCH38_0, 0x378 */
|
|
||||||
uint32_t secure_scratch39; /* _SECURE_SCRATCH39_0, 0x37c */
|
|
||||||
uint32_t secure_scratch40; /* _SECURE_SCRATCH40_0, 0x380 */
|
|
||||||
uint32_t secure_scratch41; /* _SECURE_SCRATCH41_0, 0x384 */
|
|
||||||
uint32_t secure_scratch42; /* _SECURE_SCRATCH42_0, 0x388 */
|
|
||||||
uint32_t secure_scratch43; /* _SECURE_SCRATCH43_0, 0x38c */
|
|
||||||
uint32_t secure_scratch44; /* _SECURE_SCRATCH44_0, 0x390 */
|
|
||||||
uint32_t secure_scratch45; /* _SECURE_SCRATCH45_0, 0x394 */
|
|
||||||
uint32_t secure_scratch46; /* _SECURE_SCRATCH46_0, 0x398 */
|
|
||||||
uint32_t secure_scratch47; /* _SECURE_SCRATCH47_0, 0x39c */
|
|
||||||
uint32_t secure_scratch48; /* _SECURE_SCRATCH48_0, 0x3a0 */
|
|
||||||
uint32_t secure_scratch49; /* _SECURE_SCRATCH49_0, 0x3a4 */
|
|
||||||
uint32_t secure_scratch50; /* _SECURE_SCRATCH50_0, 0x3a8 */
|
|
||||||
uint32_t secure_scratch51; /* _SECURE_SCRATCH51_0, 0x3ac */
|
|
||||||
uint32_t secure_scratch52; /* _SECURE_SCRATCH52_0, 0x3b0 */
|
|
||||||
uint32_t secure_scratch53; /* _SECURE_SCRATCH53_0, 0x3b4 */
|
|
||||||
uint32_t secure_scratch54; /* _SECURE_SCRATCH54_0, 0x3b8 */
|
|
||||||
uint32_t secure_scratch55; /* _SECURE_SCRATCH55_0, 0x3bc */
|
|
||||||
uint32_t secure_scratch56; /* _SECURE_SCRATCH56_0, 0x3c0 */
|
|
||||||
uint32_t secure_scratch57; /* _SECURE_SCRATCH57_0, 0x3c4 */
|
|
||||||
uint32_t secure_scratch58; /* _SECURE_SCRATCH58_0, 0x3c8 */
|
|
||||||
uint32_t secure_scratch59; /* _SECURE_SCRATCH59_0, 0x3cc */
|
|
||||||
uint32_t secure_scratch60; /* _SECURE_SCRATCH60_0, 0x3d0 */
|
|
||||||
uint32_t secure_scratch61; /* _SECURE_SCRATCH61_0, 0x3d4 */
|
|
||||||
uint32_t secure_scratch62; /* _SECURE_SCRATCH62_0, 0x3d8 */
|
|
||||||
uint32_t secure_scratch63; /* _SECURE_SCRATCH63_0, 0x3dc */
|
|
||||||
uint32_t secure_scratch64; /* _SECURE_SCRATCH64_0, 0x3e0 */
|
|
||||||
uint32_t secure_scratch65; /* _SECURE_SCRATCH65_0, 0x3e4 */
|
|
||||||
uint32_t secure_scratch66; /* _SECURE_SCRATCH66_0, 0x3e8 */
|
|
||||||
uint32_t secure_scratch67; /* _SECURE_SCRATCH67_0, 0x3ec */
|
|
||||||
uint32_t secure_scratch68; /* _SECURE_SCRATCH68_0, 0x3f0 */
|
|
||||||
uint32_t secure_scratch69; /* _SECURE_SCRATCH69_0, 0x3f4 */
|
|
||||||
uint32_t secure_scratch70; /* _SECURE_SCRATCH70_0, 0x3f8 */
|
|
||||||
uint32_t secure_scratch71; /* _SECURE_SCRATCH71_0, 0x3fc */
|
|
||||||
uint32_t secure_scratch72; /* _SECURE_SCRATCH72_0, 0x400 */
|
|
||||||
uint32_t secure_scratch73; /* _SECURE_SCRATCH73_0, 0x404 */
|
|
||||||
uint32_t secure_scratch74; /* _SECURE_SCRATCH74_0, 0x408 */
|
|
||||||
uint32_t secure_scratch75; /* _SECURE_SCRATCH75_0, 0x40c */
|
|
||||||
uint32_t secure_scratch76; /* _SECURE_SCRATCH76_0, 0x410 */
|
|
||||||
uint32_t secure_scratch77; /* _SECURE_SCRATCH77_0, 0x414 */
|
|
||||||
uint32_t secure_scratch78; /* _SECURE_SCRATCH78_0, 0x418 */
|
|
||||||
uint32_t secure_scratch79; /* _SECURE_SCRATCH79_0, 0x41c */
|
|
||||||
uint32_t _0x420[8];
|
|
||||||
uint32_t cntrl2; /* _CNTRL2_0, 0x440 */
|
|
||||||
uint32_t io_dpd_off_mask; /* _IO_DPD_OFF_MASK_0, 0x444 */
|
|
||||||
uint32_t io_dpd2_off_mask; /* _IO_DPD2_OFF_MASK_0, 0x448 */
|
|
||||||
uint32_t event_counter; /* _EVENT_COUNTER_0, 0x44c */
|
|
||||||
uint32_t fuse_control; /* _FUSE_CONTROL_0, 0x450 */
|
|
||||||
uint32_t scratch1_eco; /* _SCRATCH1_ECO_0, 0x454 */
|
|
||||||
uint32_t _0x458;
|
|
||||||
uint32_t io_dpd3_req; /* _IO_DPD3_REQ_0, 0x45c */
|
|
||||||
uint32_t io_dpd3_status; /* _IO_DPD3_STATUS_0, 0x460 */
|
|
||||||
uint32_t io_dpd4_req; /* _IO_DPD4_REQ_0, 0x464 */
|
|
||||||
uint32_t io_dpd4_status; /* _IO_DPD4_STATUS_0, 0x468 */
|
|
||||||
uint32_t _0x46c[2];
|
|
||||||
uint32_t direct_thermtrip_cfg; /* _DIRECT_THERMTRIP_CFG_0, 0x474 */
|
|
||||||
uint32_t tsosc_delay; /* _TSOSC_DELAY_0, 0x478 */
|
|
||||||
uint32_t set_sw_clamp; /* _SET_SW_CLAMP_0, 0x47c */
|
|
||||||
uint32_t debug_authentication; /* _DEBUG_AUTHENTICATION_0, 0x480 */
|
|
||||||
uint32_t aotag_cfg; /* _AOTAG_CFG_0, 0x484 */
|
|
||||||
uint32_t aotag_thresh1_cfg; /* _AOTAG_THRESH1_CFG_0, 0x488 */
|
|
||||||
uint32_t aotag_thresh2_cfg; /* _AOTAG_THRESH2_CFG_0, 0x48c */
|
|
||||||
uint32_t aotag_thresh3_cfg; /* _AOTAG_THRESH3_CFG_0, 0x490 */
|
|
||||||
uint32_t aotag_status; /* _AOTAG_STATUS_0, 0x494 */
|
|
||||||
uint32_t aotag_security; /* _AOTAG_SECURITY_0, 0x498 */
|
|
||||||
uint32_t tsensor_config0; /* _TSENSOR_CONFIG0_0, 0x49c */
|
|
||||||
uint32_t tsensor_config1; /* _TSENSOR_CONFIG1_0, 0x4a0 */
|
|
||||||
uint32_t tsensor_config2; /* _TSENSOR_CONFIG2_0, 0x4a4 */
|
|
||||||
uint32_t tsensor_status0; /* _TSENSOR_STATUS0_0, 0x4a8 */
|
|
||||||
uint32_t tsensor_status1; /* _TSENSOR_STATUS1_0, 0x4ac */
|
|
||||||
uint32_t tsensor_status2; /* _TSENSOR_STATUS2_0, 0x4b0 */
|
|
||||||
uint32_t tsensor_pdiv; /* _TSENSOR_PDIV_0, 0x4b4 */
|
|
||||||
uint32_t aotag_intr_en; /* _AOTAG_INTR_EN_0, 0x4b8 */
|
|
||||||
uint32_t aotag_intr_dis; /* _AOTAG_INTR_DIS_0, 0x4bc */
|
|
||||||
uint32_t utmip_pad_cfg0; /* _UTMIP_PAD_CFG0_0, 0x4c0 */
|
|
||||||
uint32_t utmip_pad_cfg1; /* _UTMIP_PAD_CFG1_0, 0x4c4 */
|
|
||||||
uint32_t utmip_pad_cfg2; /* _UTMIP_PAD_CFG2_0, 0x4c8 */
|
|
||||||
uint32_t utmip_pad_cfg3; /* _UTMIP_PAD_CFG3_0, 0x4cc */
|
|
||||||
uint32_t utmip_uhsic_sleep_cfg1; /* _UTMIP_UHSIC_SLEEP_CFG1_0, 0x4d0 */
|
|
||||||
uint32_t cc4_hvc_control; /* _CC4_HVC_CONTROL_0, 0x4d4 */
|
|
||||||
uint32_t wake_debounce_en; /* _WAKE_DEBOUNCE_EN_0, 0x4d8 */
|
|
||||||
uint32_t ramdump_ctl_status; /* _RAMDUMP_CTL_STATUS_0, 0x4dc */
|
|
||||||
uint32_t utmip_sleepwalk_p3; /* _UTMIP_SLEEPWALK_P3_0, 0x4e0 */
|
|
||||||
uint32_t ddr_cntrl; /* _DDR_CNTRL_0, 0x4e4 */
|
|
||||||
uint32_t _0x4e8[50];
|
|
||||||
uint32_t sec_disable4; /* _SEC_DISABLE4_0, 0x5b0 */
|
|
||||||
uint32_t sec_disable5; /* _SEC_DISABLE5_0, 0x5b4 */
|
|
||||||
uint32_t sec_disable6; /* _SEC_DISABLE6_0, 0x5b8 */
|
|
||||||
uint32_t sec_disable7; /* _SEC_DISABLE7_0, 0x5bc */
|
|
||||||
uint32_t sec_disable8; /* _SEC_DISABLE8_0, 0x5c0 */
|
|
||||||
uint32_t sec_disable9; /* _SEC_DISABLE9_0, 0x5c4 */
|
|
||||||
uint32_t sec_disable10; /* _SEC_DISABLE10_0, 0x5c8 */
|
|
||||||
uint32_t _0x5cc[13];
|
|
||||||
uint32_t scratch56; /* _SCRATCH56_0, 0x600 */
|
|
||||||
uint32_t scratch57; /* _SCRATCH57_0, 0x604 */
|
|
||||||
uint32_t scratch58; /* _SCRATCH58_0, 0x608 */
|
|
||||||
uint32_t scratch59; /* _SCRATCH59_0, 0x60c */
|
|
||||||
uint32_t scratch60; /* _SCRATCH60_0, 0x610 */
|
|
||||||
uint32_t scratch61; /* _SCRATCH61_0, 0x614 */
|
|
||||||
uint32_t scratch62; /* _SCRATCH62_0, 0x618 */
|
|
||||||
uint32_t scratch63; /* _SCRATCH63_0, 0x61c */
|
|
||||||
uint32_t scratch64; /* _SCRATCH64_0, 0x620 */
|
|
||||||
uint32_t scratch65; /* _SCRATCH65_0, 0x624 */
|
|
||||||
uint32_t scratch66; /* _SCRATCH66_0, 0x628 */
|
|
||||||
uint32_t scratch67; /* _SCRATCH67_0, 0x62c */
|
|
||||||
uint32_t scratch68; /* _SCRATCH68_0, 0x630 */
|
|
||||||
uint32_t scratch69; /* _SCRATCH69_0, 0x634 */
|
|
||||||
uint32_t scratch70; /* _SCRATCH70_0, 0x638 */
|
|
||||||
uint32_t scratch71; /* _SCRATCH71_0, 0x63c */
|
|
||||||
uint32_t scratch72; /* _SCRATCH72_0, 0x640 */
|
|
||||||
uint32_t scratch73; /* _SCRATCH73_0, 0x644 */
|
|
||||||
uint32_t scratch74; /* _SCRATCH74_0, 0x648 */
|
|
||||||
uint32_t scratch75; /* _SCRATCH75_0, 0x64c */
|
|
||||||
uint32_t scratch76; /* _SCRATCH76_0, 0x650 */
|
|
||||||
uint32_t scratch77; /* _SCRATCH77_0, 0x654 */
|
|
||||||
uint32_t scratch78; /* _SCRATCH78_0, 0x658 */
|
|
||||||
uint32_t scratch79; /* _SCRATCH79_0, 0x65c */
|
|
||||||
uint32_t scratch80; /* _SCRATCH80_0, 0x660 */
|
|
||||||
uint32_t scratch81; /* _SCRATCH81_0, 0x664 */
|
|
||||||
uint32_t scratch82; /* _SCRATCH82_0, 0x668 */
|
|
||||||
uint32_t scratch83; /* _SCRATCH83_0, 0x66c */
|
|
||||||
uint32_t scratch84; /* _SCRATCH84_0, 0x670 */
|
|
||||||
uint32_t scratch85; /* _SCRATCH85_0, 0x674 */
|
|
||||||
uint32_t scratch86; /* _SCRATCH86_0, 0x678 */
|
|
||||||
uint32_t scratch87; /* _SCRATCH87_0, 0x67c */
|
|
||||||
uint32_t scratch88; /* _SCRATCH88_0, 0x680 */
|
|
||||||
uint32_t scratch89; /* _SCRATCH89_0, 0x684 */
|
|
||||||
uint32_t scratch90; /* _SCRATCH90_0, 0x688 */
|
|
||||||
uint32_t scratch91; /* _SCRATCH91_0, 0x68c */
|
|
||||||
uint32_t scratch92; /* _SCRATCH92_0, 0x690 */
|
|
||||||
uint32_t scratch93; /* _SCRATCH93_0, 0x694 */
|
|
||||||
uint32_t scratch94; /* _SCRATCH94_0, 0x698 */
|
|
||||||
uint32_t scratch95; /* _SCRATCH95_0, 0x69c */
|
|
||||||
uint32_t scratch96; /* _SCRATCH96_0, 0x6a0 */
|
|
||||||
uint32_t scratch97; /* _SCRATCH97_0, 0x6a4 */
|
|
||||||
uint32_t scratch98; /* _SCRATCH98_0, 0x6a8 */
|
|
||||||
uint32_t scratch99; /* _SCRATCH99_0, 0x6ac */
|
|
||||||
uint32_t scratch100; /* _SCRATCH100_0, 0x6b0 */
|
|
||||||
uint32_t scratch101; /* _SCRATCH101_0, 0x6b4 */
|
|
||||||
uint32_t scratch102; /* _SCRATCH102_0, 0x6b8 */
|
|
||||||
uint32_t scratch103; /* _SCRATCH103_0, 0x6bc */
|
|
||||||
uint32_t scratch104; /* _SCRATCH104_0, 0x6c0 */
|
|
||||||
uint32_t scratch105; /* _SCRATCH105_0, 0x6c4 */
|
|
||||||
uint32_t scratch106; /* _SCRATCH106_0, 0x6c8 */
|
|
||||||
uint32_t scratch107; /* _SCRATCH107_0, 0x6cc */
|
|
||||||
uint32_t scratch108; /* _SCRATCH108_0, 0x6d0 */
|
|
||||||
uint32_t scratch109; /* _SCRATCH109_0, 0x6d4 */
|
|
||||||
uint32_t scratch110; /* _SCRATCH110_0, 0x6d8 */
|
|
||||||
uint32_t scratch111; /* _SCRATCH111_0, 0x6dc */
|
|
||||||
uint32_t scratch112; /* _SCRATCH112_0, 0x6e0 */
|
|
||||||
uint32_t scratch113; /* _SCRATCH113_0, 0x6e4 */
|
|
||||||
uint32_t scratch114; /* _SCRATCH114_0, 0x6e8 */
|
|
||||||
uint32_t scratch115; /* _SCRATCH115_0, 0x6ec */
|
|
||||||
uint32_t scratch116; /* _SCRATCH116_0, 0x6f0 */
|
|
||||||
uint32_t scratch117; /* _SCRATCH117_0, 0x6f4 */
|
|
||||||
uint32_t scratch118; /* _SCRATCH118_0, 0x6f8 */
|
|
||||||
uint32_t scratch119; /* _SCRATCH119_0, 0x6fc */
|
|
||||||
uint32_t scratch120; /* _SCRATCH120_0, 0x700 */
|
|
||||||
uint32_t scratch121; /* _SCRATCH121_0, 0x704 */
|
|
||||||
uint32_t scratch122; /* _SCRATCH122_0, 0x708 */
|
|
||||||
uint32_t scratch123; /* _SCRATCH123_0, 0x70c */
|
|
||||||
uint32_t scratch124; /* _SCRATCH124_0, 0x710 */
|
|
||||||
uint32_t scratch125; /* _SCRATCH125_0, 0x714 */
|
|
||||||
uint32_t scratch126; /* _SCRATCH126_0, 0x718 */
|
|
||||||
uint32_t scratch127; /* _SCRATCH127_0, 0x71c */
|
|
||||||
uint32_t scratch128; /* _SCRATCH128_0, 0x720 */
|
|
||||||
uint32_t scratch129; /* _SCRATCH129_0, 0x724 */
|
|
||||||
uint32_t scratch130; /* _SCRATCH130_0, 0x728 */
|
|
||||||
uint32_t scratch131; /* _SCRATCH131_0, 0x72c */
|
|
||||||
uint32_t scratch132; /* _SCRATCH132_0, 0x730 */
|
|
||||||
uint32_t scratch133; /* _SCRATCH133_0, 0x734 */
|
|
||||||
uint32_t scratch134; /* _SCRATCH134_0, 0x738 */
|
|
||||||
uint32_t scratch135; /* _SCRATCH135_0, 0x73c */
|
|
||||||
uint32_t scratch136; /* _SCRATCH136_0, 0x740 */
|
|
||||||
uint32_t scratch137; /* _SCRATCH137_0, 0x744 */
|
|
||||||
uint32_t scratch138; /* _SCRATCH138_0, 0x748 */
|
|
||||||
uint32_t scratch139; /* _SCRATCH139_0, 0x74c */
|
|
||||||
uint32_t scratch140; /* _SCRATCH140_0, 0x750 */
|
|
||||||
uint32_t scratch141; /* _SCRATCH141_0, 0x754 */
|
|
||||||
uint32_t scratch142; /* _SCRATCH142_0, 0x758 */
|
|
||||||
uint32_t scratch143; /* _SCRATCH143_0, 0x75c */
|
|
||||||
uint32_t scratch144; /* _SCRATCH144_0, 0x760 */
|
|
||||||
uint32_t scratch145; /* _SCRATCH145_0, 0x764 */
|
|
||||||
uint32_t scratch146; /* _SCRATCH146_0, 0x768 */
|
|
||||||
uint32_t scratch147; /* _SCRATCH147_0, 0x76c */
|
|
||||||
uint32_t scratch148; /* _SCRATCH148_0, 0x770 */
|
|
||||||
uint32_t scratch149; /* _SCRATCH149_0, 0x774 */
|
|
||||||
uint32_t scratch150; /* _SCRATCH150_0, 0x778 */
|
|
||||||
uint32_t scratch151; /* _SCRATCH151_0, 0x77c */
|
|
||||||
uint32_t scratch152; /* _SCRATCH152_0, 0x780 */
|
|
||||||
uint32_t scratch153; /* _SCRATCH153_0, 0x784 */
|
|
||||||
uint32_t scratch154; /* _SCRATCH154_0, 0x788 */
|
|
||||||
uint32_t scratch155; /* _SCRATCH155_0, 0x78c */
|
|
||||||
uint32_t scratch156; /* _SCRATCH156_0, 0x790 */
|
|
||||||
uint32_t scratch157; /* _SCRATCH157_0, 0x794 */
|
|
||||||
uint32_t scratch158; /* _SCRATCH158_0, 0x798 */
|
|
||||||
uint32_t scratch159; /* _SCRATCH159_0, 0x79c */
|
|
||||||
uint32_t scratch160; /* _SCRATCH160_0, 0x7a0 */
|
|
||||||
uint32_t scratch161; /* _SCRATCH161_0, 0x7a4 */
|
|
||||||
uint32_t scratch162; /* _SCRATCH162_0, 0x7a8 */
|
|
||||||
uint32_t scratch163; /* _SCRATCH163_0, 0x7ac */
|
|
||||||
uint32_t scratch164; /* _SCRATCH164_0, 0x7b0 */
|
|
||||||
uint32_t scratch165; /* _SCRATCH165_0, 0x7b4 */
|
|
||||||
uint32_t scratch166; /* _SCRATCH166_0, 0x7b8 */
|
|
||||||
uint32_t scratch167; /* _SCRATCH167_0, 0x7bc */
|
|
||||||
uint32_t scratch168; /* _SCRATCH168_0, 0x7c0 */
|
|
||||||
uint32_t scratch169; /* _SCRATCH169_0, 0x7c4 */
|
|
||||||
uint32_t scratch170; /* _SCRATCH170_0, 0x7c8 */
|
|
||||||
uint32_t scratch171; /* _SCRATCH171_0, 0x7cc */
|
|
||||||
uint32_t scratch172; /* _SCRATCH172_0, 0x7d0 */
|
|
||||||
uint32_t scratch173; /* _SCRATCH173_0, 0x7d4 */
|
|
||||||
uint32_t scratch174; /* _SCRATCH174_0, 0x7d8 */
|
|
||||||
uint32_t scratch175; /* _SCRATCH175_0, 0x7dc */
|
|
||||||
uint32_t scratch176; /* _SCRATCH176_0, 0x7e0 */
|
|
||||||
uint32_t scratch177; /* _SCRATCH177_0, 0x7e4 */
|
|
||||||
uint32_t scratch178; /* _SCRATCH178_0, 0x7e8 */
|
|
||||||
uint32_t scratch179; /* _SCRATCH179_0, 0x7ec */
|
|
||||||
uint32_t scratch180; /* _SCRATCH180_0, 0x7f0 */
|
|
||||||
uint32_t scratch181; /* _SCRATCH181_0, 0x7f4 */
|
|
||||||
uint32_t scratch182; /* _SCRATCH182_0, 0x7f8 */
|
|
||||||
uint32_t scratch183; /* _SCRATCH183_0, 0x7fc */
|
|
||||||
uint32_t scratch184; /* _SCRATCH184_0, 0x800 */
|
|
||||||
uint32_t scratch185; /* _SCRATCH185_0, 0x804 */
|
|
||||||
uint32_t scratch186; /* _SCRATCH186_0, 0x808 */
|
|
||||||
uint32_t scratch187; /* _SCRATCH187_0, 0x80c */
|
|
||||||
uint32_t scratch188; /* _SCRATCH188_0, 0x810 */
|
|
||||||
uint32_t scratch189; /* _SCRATCH189_0, 0x814 */
|
|
||||||
uint32_t scratch190; /* _SCRATCH190_0, 0x818 */
|
|
||||||
uint32_t scratch191; /* _SCRATCH191_0, 0x81c */
|
|
||||||
uint32_t scratch192; /* _SCRATCH192_0, 0x820 */
|
|
||||||
uint32_t scratch193; /* _SCRATCH193_0, 0x824 */
|
|
||||||
uint32_t scratch194; /* _SCRATCH194_0, 0x828 */
|
|
||||||
uint32_t scratch195; /* _SCRATCH195_0, 0x82c */
|
|
||||||
uint32_t scratch196; /* _SCRATCH196_0, 0x830 */
|
|
||||||
uint32_t scratch197; /* _SCRATCH197_0, 0x834 */
|
|
||||||
uint32_t scratch198; /* _SCRATCH198_0, 0x838 */
|
|
||||||
uint32_t scratch199; /* _SCRATCH199_0, 0x83c */
|
|
||||||
uint32_t scratch200; /* _SCRATCH200_0, 0x840 */
|
|
||||||
uint32_t scratch201; /* _SCRATCH201_0, 0x844 */
|
|
||||||
uint32_t scratch202; /* _SCRATCH202_0, 0x848 */
|
|
||||||
uint32_t scratch203; /* _SCRATCH203_0, 0x84c */
|
|
||||||
uint32_t scratch204; /* _SCRATCH204_0, 0x850 */
|
|
||||||
uint32_t scratch205; /* _SCRATCH205_0, 0x854 */
|
|
||||||
uint32_t scratch206; /* _SCRATCH206_0, 0x858 */
|
|
||||||
uint32_t scratch207; /* _SCRATCH207_0, 0x85c */
|
|
||||||
uint32_t scratch208; /* _SCRATCH208_0, 0x860 */
|
|
||||||
uint32_t scratch209; /* _SCRATCH209_0, 0x864 */
|
|
||||||
uint32_t scratch210; /* _SCRATCH210_0, 0x868 */
|
|
||||||
uint32_t scratch211; /* _SCRATCH211_0, 0x86c */
|
|
||||||
uint32_t scratch212; /* _SCRATCH212_0, 0x870 */
|
|
||||||
uint32_t scratch213; /* _SCRATCH213_0, 0x874 */
|
|
||||||
uint32_t scratch214; /* _SCRATCH214_0, 0x878 */
|
|
||||||
uint32_t scratch215; /* _SCRATCH215_0, 0x87c */
|
|
||||||
uint32_t scratch216; /* _SCRATCH216_0, 0x880 */
|
|
||||||
uint32_t scratch217; /* _SCRATCH217_0, 0x884 */
|
|
||||||
uint32_t scratch218; /* _SCRATCH218_0, 0x888 */
|
|
||||||
uint32_t scratch219; /* _SCRATCH219_0, 0x88c */
|
|
||||||
uint32_t scratch220; /* _SCRATCH220_0, 0x890 */
|
|
||||||
uint32_t scratch221; /* _SCRATCH221_0, 0x894 */
|
|
||||||
uint32_t scratch222; /* _SCRATCH222_0, 0x898 */
|
|
||||||
uint32_t scratch223; /* _SCRATCH223_0, 0x89c */
|
|
||||||
uint32_t scratch224; /* _SCRATCH224_0, 0x8a0 */
|
|
||||||
uint32_t scratch225; /* _SCRATCH225_0, 0x8a4 */
|
|
||||||
uint32_t scratch226; /* _SCRATCH226_0, 0x8a8 */
|
|
||||||
uint32_t scratch227; /* _SCRATCH227_0, 0x8ac */
|
|
||||||
uint32_t scratch228; /* _SCRATCH228_0, 0x8b0 */
|
|
||||||
uint32_t scratch229; /* _SCRATCH229_0, 0x8b4 */
|
|
||||||
uint32_t scratch230; /* _SCRATCH230_0, 0x8b8 */
|
|
||||||
uint32_t scratch231; /* _SCRATCH231_0, 0x8bc */
|
|
||||||
uint32_t scratch232; /* _SCRATCH232_0, 0x8c0 */
|
|
||||||
uint32_t scratch233; /* _SCRATCH233_0, 0x8c4 */
|
|
||||||
uint32_t scratch234; /* _SCRATCH234_0, 0x8c8 */
|
|
||||||
uint32_t scratch235; /* _SCRATCH235_0, 0x8cc */
|
|
||||||
uint32_t scratch236; /* _SCRATCH236_0, 0x8d0 */
|
|
||||||
uint32_t scratch237; /* _SCRATCH237_0, 0x8d4 */
|
|
||||||
uint32_t scratch238; /* _SCRATCH238_0, 0x8d8 */
|
|
||||||
uint32_t scratch239; /* _SCRATCH239_0, 0x8dc */
|
|
||||||
uint32_t scratch240; /* _SCRATCH240_0, 0x8e0 */
|
|
||||||
uint32_t scratch241; /* _SCRATCH241_0, 0x8e4 */
|
|
||||||
uint32_t scratch242; /* _SCRATCH242_0, 0x8e8 */
|
|
||||||
uint32_t scratch243; /* _SCRATCH243_0, 0x8ec */
|
|
||||||
uint32_t scratch244; /* _SCRATCH244_0, 0x8f0 */
|
|
||||||
uint32_t scratch245; /* _SCRATCH245_0, 0x8f4 */
|
|
||||||
uint32_t scratch246; /* _SCRATCH246_0, 0x8f8 */
|
|
||||||
uint32_t scratch247; /* _SCRATCH247_0, 0x8fc */
|
|
||||||
uint32_t scratch248; /* _SCRATCH248_0, 0x900 */
|
|
||||||
uint32_t scratch249; /* _SCRATCH249_0, 0x904 */
|
|
||||||
uint32_t scratch250; /* _SCRATCH250_0, 0x908 */
|
|
||||||
uint32_t scratch251; /* _SCRATCH251_0, 0x90c */
|
|
||||||
uint32_t scratch252; /* _SCRATCH252_0, 0x910 */
|
|
||||||
uint32_t scratch253; /* _SCRATCH253_0, 0x914 */
|
|
||||||
uint32_t scratch254; /* _SCRATCH254_0, 0x918 */
|
|
||||||
uint32_t scratch255; /* _SCRATCH255_0, 0x91c */
|
|
||||||
uint32_t scratch256; /* _SCRATCH256_0, 0x920 */
|
|
||||||
uint32_t scratch257; /* _SCRATCH257_0, 0x924 */
|
|
||||||
uint32_t scratch258; /* _SCRATCH258_0, 0x928 */
|
|
||||||
uint32_t scratch259; /* _SCRATCH259_0, 0x92c */
|
|
||||||
uint32_t scratch260; /* _SCRATCH260_0, 0x930 */
|
|
||||||
uint32_t scratch261; /* _SCRATCH261_0, 0x934 */
|
|
||||||
uint32_t scratch262; /* _SCRATCH262_0, 0x938 */
|
|
||||||
uint32_t scratch263; /* _SCRATCH263_0, 0x93c */
|
|
||||||
uint32_t scratch264; /* _SCRATCH264_0, 0x940 */
|
|
||||||
uint32_t scratch265; /* _SCRATCH265_0, 0x944 */
|
|
||||||
uint32_t scratch266; /* _SCRATCH266_0, 0x948 */
|
|
||||||
uint32_t scratch267; /* _SCRATCH267_0, 0x94c */
|
|
||||||
uint32_t scratch268; /* _SCRATCH268_0, 0x950 */
|
|
||||||
uint32_t scratch269; /* _SCRATCH269_0, 0x954 */
|
|
||||||
uint32_t scratch270; /* _SCRATCH270_0, 0x958 */
|
|
||||||
uint32_t scratch271; /* _SCRATCH271_0, 0x95c */
|
|
||||||
uint32_t scratch272; /* _SCRATCH272_0, 0x960 */
|
|
||||||
uint32_t scratch273; /* _SCRATCH273_0, 0x964 */
|
|
||||||
uint32_t scratch274; /* _SCRATCH274_0, 0x968 */
|
|
||||||
uint32_t scratch275; /* _SCRATCH275_0, 0x96c */
|
|
||||||
uint32_t scratch276; /* _SCRATCH276_0, 0x970 */
|
|
||||||
uint32_t scratch277; /* _SCRATCH277_0, 0x974 */
|
|
||||||
uint32_t scratch278; /* _SCRATCH278_0, 0x978 */
|
|
||||||
uint32_t scratch279; /* _SCRATCH279_0, 0x97c */
|
|
||||||
uint32_t scratch280; /* _SCRATCH280_0, 0x980 */
|
|
||||||
uint32_t scratch281; /* _SCRATCH281_0, 0x984 */
|
|
||||||
uint32_t scratch282; /* _SCRATCH282_0, 0x988 */
|
|
||||||
uint32_t scratch283; /* _SCRATCH283_0, 0x98c */
|
|
||||||
uint32_t scratch284; /* _SCRATCH284_0, 0x990 */
|
|
||||||
uint32_t scratch285; /* _SCRATCH285_0, 0x994 */
|
|
||||||
uint32_t scratch286; /* _SCRATCH286_0, 0x998 */
|
|
||||||
uint32_t scratch287; /* _SCRATCH287_0, 0x99c */
|
|
||||||
uint32_t scratch288; /* _SCRATCH288_0, 0x9a0 */
|
|
||||||
uint32_t scratch289; /* _SCRATCH289_0, 0x9a4 */
|
|
||||||
uint32_t scratch290; /* _SCRATCH290_0, 0x9a8 */
|
|
||||||
uint32_t scratch291; /* _SCRATCH291_0, 0x9ac */
|
|
||||||
uint32_t scratch292; /* _SCRATCH292_0, 0x9b0 */
|
|
||||||
uint32_t scratch293; /* _SCRATCH293_0, 0x9b4 */
|
|
||||||
uint32_t scratch294; /* _SCRATCH294_0, 0x9b8 */
|
|
||||||
uint32_t scratch295; /* _SCRATCH295_0, 0x9bc */
|
|
||||||
uint32_t scratch296; /* _SCRATCH296_0, 0x9c0 */
|
|
||||||
uint32_t scratch297; /* _SCRATCH297_0, 0x9c4 */
|
|
||||||
uint32_t scratch298; /* _SCRATCH298_0, 0x9c8 */
|
|
||||||
uint32_t scratch299; /* _SCRATCH299_0, 0x9cc */
|
|
||||||
uint32_t _0x9d0[50];
|
|
||||||
uint32_t secure_scratch80; /* _SECURE_SCRATCH80_0, 0xa98 */
|
|
||||||
uint32_t secure_scratch81; /* _SECURE_SCRATCH81_0, 0xa9c */
|
|
||||||
uint32_t secure_scratch82; /* _SECURE_SCRATCH82_0, 0xaa0 */
|
|
||||||
uint32_t secure_scratch83; /* _SECURE_SCRATCH83_0, 0xaa4 */
|
|
||||||
uint32_t secure_scratch84; /* _SECURE_SCRATCH84_0, 0xaa8 */
|
|
||||||
uint32_t secure_scratch85; /* _SECURE_SCRATCH85_0, 0xaac */
|
|
||||||
uint32_t secure_scratch86; /* _SECURE_SCRATCH86_0, 0xab0 */
|
|
||||||
uint32_t secure_scratch87; /* _SECURE_SCRATCH87_0, 0xab4 */
|
|
||||||
uint32_t secure_scratch88; /* _SECURE_SCRATCH88_0, 0xab8 */
|
|
||||||
uint32_t secure_scratch89; /* _SECURE_SCRATCH89_0, 0xabc */
|
|
||||||
uint32_t secure_scratch90; /* _SECURE_SCRATCH90_0, 0xac0 */
|
|
||||||
uint32_t secure_scratch91; /* _SECURE_SCRATCH91_0, 0xac4 */
|
|
||||||
uint32_t secure_scratch92; /* _SECURE_SCRATCH92_0, 0xac8 */
|
|
||||||
uint32_t secure_scratch93; /* _SECURE_SCRATCH93_0, 0xacc */
|
|
||||||
uint32_t secure_scratch94; /* _SECURE_SCRATCH94_0, 0xad0 */
|
|
||||||
uint32_t secure_scratch95; /* _SECURE_SCRATCH95_0, 0xad4 */
|
|
||||||
uint32_t secure_scratch96; /* _SECURE_SCRATCH96_0, 0xad8 */
|
|
||||||
uint32_t secure_scratch97; /* _SECURE_SCRATCH97_0, 0xadc */
|
|
||||||
uint32_t secure_scratch98; /* _SECURE_SCRATCH98_0, 0xae0 */
|
|
||||||
uint32_t secure_scratch99; /* _SECURE_SCRATCH99_0, 0xae4 */
|
|
||||||
uint32_t secure_scratch100; /* _SECURE_SCRATCH100_0, 0xae8 */
|
|
||||||
uint32_t secure_scratch101; /* _SECURE_SCRATCH101_0, 0xaec */
|
|
||||||
uint32_t secure_scratch102; /* _SECURE_SCRATCH102_0, 0xaf0 */
|
|
||||||
uint32_t secure_scratch103; /* _SECURE_SCRATCH103_0, 0xaf4 */
|
|
||||||
uint32_t secure_scratch104; /* _SECURE_SCRATCH104_0, 0xaf8 */
|
|
||||||
uint32_t secure_scratch105; /* _SECURE_SCRATCH105_0, 0xafc */
|
|
||||||
uint32_t secure_scratch106; /* _SECURE_SCRATCH106_0, 0xb00 */
|
|
||||||
uint32_t secure_scratch107; /* _SECURE_SCRATCH107_0, 0xb04 */
|
|
||||||
uint32_t secure_scratch108; /* _SECURE_SCRATCH108_0, 0xb08 */
|
|
||||||
uint32_t secure_scratch109; /* _SECURE_SCRATCH109_0, 0xb0c */
|
|
||||||
uint32_t secure_scratch110; /* _SECURE_SCRATCH110_0, 0xb10 */
|
|
||||||
uint32_t secure_scratch111; /* _SECURE_SCRATCH111_0, 0xb14 */
|
|
||||||
uint32_t secure_scratch112; /* _SECURE_SCRATCH112_0, 0xb18 */
|
|
||||||
uint32_t secure_scratch113; /* _SECURE_SCRATCH113_0, 0xb1c */
|
|
||||||
uint32_t secure_scratch114; /* _SECURE_SCRATCH114_0, 0xb20 */
|
|
||||||
uint32_t secure_scratch115; /* _SECURE_SCRATCH115_0, 0xb24 */
|
|
||||||
uint32_t secure_scratch116; /* _SECURE_SCRATCH116_0, 0xb28 */
|
|
||||||
uint32_t secure_scratch117; /* _SECURE_SCRATCH117_0, 0xb2c */
|
|
||||||
uint32_t secure_scratch118; /* _SECURE_SCRATCH118_0, 0xb30 */
|
|
||||||
uint32_t secure_scratch119; /* _SECURE_SCRATCH119_0, 0xb34 */
|
|
||||||
uint32_t secure_scratch120; /* _SECURE_SCRATCH120_0, 0xb38 */
|
|
||||||
uint32_t secure_scratch121; /* _SECURE_SCRATCH121_0, 0xb3c */
|
|
||||||
uint32_t secure_scratch122; /* _SECURE_SCRATCH122_0, 0xb40 */
|
|
||||||
uint32_t secure_scratch123; /* _SECURE_SCRATCH123_0, 0xb44 */
|
|
||||||
uint32_t led_breathing_ctrl; /* _LED_BREATHING_CTRL_0, 0xb48 */
|
|
||||||
uint32_t led_breathing_counter0; /* _LED_BREATHING_COUNTER0_0, 0xb4c */
|
|
||||||
uint32_t led_breathing_counter1; /* _LED_BREATHING_COUNTER1_0, 0xb50 */
|
|
||||||
uint32_t led_breathing_counter2; /* _LED_BREATHING_COUNTER2_0, 0xb54 */
|
|
||||||
uint32_t led_breathing_counter3; /* _LED_BREATHING_COUNTER3_0, 0xb58 */
|
|
||||||
uint32_t led_breathing_status; /* _LED_BREATHING_STATUS_0, 0xb5c */
|
|
||||||
uint32_t _0xb60[2];
|
|
||||||
uint32_t secure_scratch124; /* _SECURE_SCRATCH124_0, 0xb68 */
|
|
||||||
uint32_t secure_scratch125; /* _SECURE_SCRATCH125_0, 0xb6c */
|
|
||||||
uint32_t secure_scratch126; /* _SECURE_SCRATCH126_0, 0xb70 */
|
|
||||||
uint32_t secure_scratch127; /* _SECURE_SCRATCH127_0, 0xb74 */
|
|
||||||
uint32_t secure_scratch128; /* _SECURE_SCRATCH128_0, 0xb78 */
|
|
||||||
uint32_t secure_scratch129; /* _SECURE_SCRATCH129_0, 0xb7c */
|
|
||||||
uint32_t secure_scratch130; /* _SECURE_SCRATCH130_0, 0xb80 */
|
|
||||||
uint32_t secure_scratch131; /* _SECURE_SCRATCH131_0, 0xb84 */
|
|
||||||
uint32_t secure_scratch132; /* _SECURE_SCRATCH132_0, 0xb88 */
|
|
||||||
uint32_t secure_scratch133; /* _SECURE_SCRATCH133_0, 0xb8c */
|
|
||||||
uint32_t secure_scratch134; /* _SECURE_SCRATCH134_0, 0xb90 */
|
|
||||||
uint32_t secure_scratch135; /* _SECURE_SCRATCH135_0, 0xb94 */
|
|
||||||
uint32_t secure_scratch136; /* _SECURE_SCRATCH136_0, 0xb98 */
|
|
||||||
uint32_t secure_scratch137; /* _SECURE_SCRATCH137_0, 0xb9c */
|
|
||||||
uint32_t secure_scratch138; /* _SECURE_SCRATCH138_0, 0xba0 */
|
|
||||||
uint32_t secure_scratch139; /* _SECURE_SCRATCH139_0, 0xba4 */
|
|
||||||
uint32_t _0xba8[2];
|
|
||||||
uint32_t sec_disable_ns; /* _SEC_DISABLE_NS_0, 0xbb0 */
|
|
||||||
uint32_t sec_disable2_ns; /* _SEC_DISABLE2_NS_0, 0xbb4 */
|
|
||||||
uint32_t sec_disable3_ns; /* _SEC_DISABLE3_NS_0, 0xbb8 */
|
|
||||||
uint32_t sec_disable4_ns; /* _SEC_DISABLE4_NS_0, 0xbbc */
|
|
||||||
uint32_t sec_disable5_ns; /* _SEC_DISABLE5_NS_0, 0xbc0 */
|
|
||||||
uint32_t sec_disable6_ns; /* _SEC_DISABLE6_NS_0, 0xbc4 */
|
|
||||||
uint32_t sec_disable7_ns; /* _SEC_DISABLE7_NS_0, 0xbc8 */
|
|
||||||
uint32_t sec_disable8_ns; /* _SEC_DISABLE8_NS_0, 0xbcc */
|
|
||||||
uint32_t sec_disable9_ns; /* _SEC_DISABLE9_NS_0, 0xbd0 */
|
|
||||||
uint32_t sec_disable10_ns; /* _SEC_DISABLE10_NS_0, 0xbd4 */
|
|
||||||
uint32_t _0xbd8[4];
|
|
||||||
uint32_t tzram_pwr_cntrl; /* _TZRAM_PWR_CNTRL_0, 0xbe8 */
|
|
||||||
uint32_t tzram_sec_disable; /* _TZRAM_SEC_DISABLE_0, 0xbec */
|
|
||||||
uint32_t tzram_non_sec_disable; /* _TZRAM_NON_SEC_DISABLE_0, 0xbf0 */
|
|
||||||
} tegra_pmc_t;
|
|
||||||
|
|
||||||
static inline volatile tegra_pmc_t *pmc_get_regs(void)
|
|
||||||
{
|
|
||||||
return (volatile tegra_pmc_t *)PMC_BASE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2018-2020 Atmosphère-NX
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
.macro CLEAR_GPR_REG_ITER
|
|
||||||
mov r\@, #0
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.section .reboot.start, "ax", %progbits
|
|
||||||
.arm
|
|
||||||
.align 5
|
|
||||||
.global reboot_start
|
|
||||||
.type reboot_start, %function
|
|
||||||
reboot_start:
|
|
||||||
/* Switch to system mode, mask all interrupts, clear all flags */
|
|
||||||
msr cpsr_cxsf, #0xDF
|
|
||||||
|
|
||||||
/* Relocate reboot start to 0x4003E000. */
|
|
||||||
ldr r0, =0x4003E000
|
|
||||||
adr r1, reboot_start
|
|
||||||
cmp r0, r1
|
|
||||||
beq 1f
|
|
||||||
|
|
||||||
mov r2, #0x1000
|
|
||||||
0:
|
|
||||||
ldmia r1!, {r5-r12}
|
|
||||||
stmia r0!, {r5-r12}
|
|
||||||
subs r2, #0x20
|
|
||||||
bne 0b
|
|
||||||
|
|
||||||
ldr r0, =0x4003E000
|
|
||||||
adr r1, reboot_start
|
|
||||||
adr r2, 1f
|
|
||||||
sub r2, r2, r1
|
|
||||||
add r2, r2, r0
|
|
||||||
bx r2
|
|
||||||
|
|
||||||
1:
|
|
||||||
|
|
||||||
/* Restore our low iram code. */
|
|
||||||
ldr r0, =0x40008000
|
|
||||||
ldr r1, =0x40030000
|
|
||||||
mov r2, #0x8000
|
|
||||||
0:
|
|
||||||
ldmia r1!, {r5-r12}
|
|
||||||
stmia r0!, {r5-r12}
|
|
||||||
subs r2, #0x20
|
|
||||||
bne 0b
|
|
||||||
|
|
||||||
/* Restore our upper stub code. */
|
|
||||||
ldr r0, =0x40010000
|
|
||||||
ldr r1, =0x4003D000
|
|
||||||
mov r2, #0x1000
|
|
||||||
0:
|
|
||||||
ldmia r1!, {r5-r12}
|
|
||||||
stmia r0!, {r5-r12}
|
|
||||||
subs r2, #0x20
|
|
||||||
bne 0b
|
|
||||||
|
|
||||||
/* Jump to start. */
|
|
||||||
ldr r0, =0x40008000
|
|
||||||
bx r0
|
|
||||||
|
|
||||||
0: b 0b
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,338 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2018 naehrwert
|
|
||||||
* Copyright (c) 2018-2020 Atmosphère-NX
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static const uint8_t sdram_params_erista_lz[1262] = {
|
|
||||||
0x17, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00,
|
|
||||||
0x00, 0x2C, 0x17, 0x04, 0x09, 0x00, 0x17, 0x04, 0x04, 0x17, 0x08, 0x08,
|
|
||||||
0x17, 0x10, 0x10, 0x00, 0x00, 0x68, 0xBC, 0x01, 0x70, 0x0A, 0x00, 0x00,
|
|
||||||
0x00, 0x04, 0xB4, 0x01, 0x70, 0x01, 0x32, 0x54, 0x76, 0xC8, 0xE6, 0x00,
|
|
||||||
0x70, 0x17, 0x10, 0x24, 0x34, 0x00, 0x00, 0x00, 0x02, 0x80, 0x18, 0x40,
|
|
||||||
0x00, 0x00, 0x00, 0x17, 0x04, 0x04, 0x17, 0x09, 0x18, 0xFF, 0xFF, 0x1F,
|
|
||||||
0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x77,
|
|
||||||
0x00, 0x17, 0x04, 0x04, 0x17, 0x08, 0x08, 0x17, 0x08, 0x08, 0xA6, 0xA6,
|
|
||||||
0xAF, 0xB3, 0x3C, 0x9E, 0x00, 0x00, 0x03, 0x03, 0xE0, 0xC1, 0x04, 0x04,
|
|
||||||
0x04, 0x04, 0x17, 0x04, 0x04, 0x17, 0x04, 0x3C, 0x1F, 0x1F, 0x1F, 0x1F,
|
|
||||||
0x17, 0x04, 0x04, 0x17, 0x06, 0x06, 0x00, 0x00, 0x04, 0x08, 0x17, 0x06,
|
|
||||||
0x46, 0xA1, 0x01, 0x00, 0x00, 0x32, 0x17, 0x0B, 0x64, 0x01, 0x17, 0x04,
|
|
||||||
0x7C, 0x17, 0x07, 0x0C, 0x03, 0x17, 0x04, 0x04, 0x00, 0x00, 0x00, 0x1E,
|
|
||||||
0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x13,
|
|
||||||
0x17, 0x0B, 0x2C, 0x09, 0x00, 0x00, 0x00, 0x17, 0x05, 0x5D, 0x17, 0x07,
|
|
||||||
0x10, 0x0B, 0x17, 0x07, 0x28, 0x08, 0x17, 0x07, 0x0C, 0x17, 0x04, 0x1C,
|
|
||||||
0x20, 0x00, 0x00, 0x00, 0x06, 0x17, 0x04, 0x04, 0x17, 0x07, 0x08, 0x17,
|
|
||||||
0x04, 0x50, 0x17, 0x04, 0x2C, 0x17, 0x04, 0x1C, 0x17, 0x04, 0x10, 0x17,
|
|
||||||
0x08, 0x6C, 0x17, 0x04, 0x10, 0x17, 0x04, 0x38, 0x17, 0x04, 0x40, 0x05,
|
|
||||||
0x17, 0x07, 0x1C, 0x17, 0x08, 0x58, 0x17, 0x04, 0x24, 0x17, 0x04, 0x18,
|
|
||||||
0x17, 0x08, 0x64, 0x00, 0x00, 0x01, 0x00, 0x12, 0x00, 0x00, 0x00, 0x14,
|
|
||||||
0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x17, 0x09, 0x0C, 0x17, 0x05, 0x82,
|
|
||||||
0x58, 0x17, 0x07, 0x61, 0xC1, 0x17, 0x07, 0x50, 0x17, 0x04, 0x04, 0x17,
|
|
||||||
0x08, 0x81, 0x48, 0x17, 0x04, 0x04, 0x17, 0x04, 0x28, 0x17, 0x04, 0x60,
|
|
||||||
0x17, 0x08, 0x54, 0x27, 0x17, 0x04, 0x04, 0x17, 0x07, 0x14, 0x17, 0x04,
|
|
||||||
0x04, 0x04, 0x17, 0x07, 0x81, 0x58, 0x17, 0x0C, 0x0C, 0x1C, 0x03, 0x00,
|
|
||||||
0x00, 0x0D, 0xA0, 0x60, 0x91, 0xBF, 0x3B, 0x17, 0x04, 0x5A, 0xF3, 0x0C,
|
|
||||||
0x04, 0x05, 0x1B, 0x06, 0x02, 0x03, 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05,
|
|
||||||
0x08, 0x1D, 0x09, 0x0A, 0x24, 0x0B, 0x1E, 0x0D, 0x0C, 0x26, 0x26, 0x03,
|
|
||||||
0x02, 0x1B, 0x1C, 0x23, 0x03, 0x04, 0x07, 0x05, 0x06, 0x25, 0x25, 0x02,
|
|
||||||
0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, 0x24, 0x26, 0x26, 0x08,
|
|
||||||
0x24, 0x06, 0x07, 0x9A, 0x12, 0x17, 0x05, 0x83, 0x41, 0x00, 0xFF, 0x17,
|
|
||||||
0x10, 0x83, 0x6C, 0x04, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x08, 0x00,
|
|
||||||
0x00, 0x0D, 0x08, 0x00, 0x00, 0x00, 0xC0, 0x71, 0x71, 0x03, 0x08, 0x00,
|
|
||||||
0x00, 0x0B, 0x08, 0x72, 0x72, 0x0E, 0x0C, 0x17, 0x04, 0x20, 0x08, 0x08,
|
|
||||||
0x0D, 0x0C, 0x00, 0x00, 0x0D, 0x0C, 0x14, 0x14, 0x16, 0x08, 0x17, 0x06,
|
|
||||||
0x2C, 0x11, 0x08, 0x17, 0x10, 0x84, 0x67, 0x15, 0x00, 0xCC, 0x00, 0x0A,
|
|
||||||
0x00, 0x33, 0x00, 0x00, 0x00, 0x20, 0xF3, 0x05, 0x08, 0x11, 0x00, 0xFF,
|
|
||||||
0x0F, 0xFF, 0x0F, 0x17, 0x08, 0x83, 0x4C, 0x01, 0x03, 0x00, 0x70, 0x00,
|
|
||||||
0x0C, 0x00, 0x01, 0x17, 0x04, 0x0C, 0x08, 0x44, 0x00, 0x10, 0x04, 0x04,
|
|
||||||
0x00, 0x06, 0x13, 0x07, 0x00, 0x80, 0x17, 0x04, 0x10, 0xA0, 0x00, 0x2C,
|
|
||||||
0x00, 0x01, 0x37, 0x00, 0x00, 0x00, 0x80, 0x17, 0x06, 0x48, 0x08, 0x00,
|
|
||||||
0x04, 0x00, 0x1F, 0x22, 0x20, 0x80, 0x0F, 0xF4, 0x20, 0x02, 0x28, 0x28,
|
|
||||||
0x28, 0x28, 0x17, 0x04, 0x04, 0x11, 0x11, 0x11, 0x11, 0x17, 0x04, 0x04,
|
|
||||||
0xBE, 0x00, 0x00, 0x17, 0x05, 0x58, 0x17, 0x08, 0x5C, 0x17, 0x22, 0x85,
|
|
||||||
0x6A, 0x17, 0x1A, 0x1A, 0x14, 0x00, 0x12, 0x00, 0x10, 0x17, 0x05, 0x83,
|
|
||||||
0x0A, 0x17, 0x16, 0x18, 0x30, 0x00, 0x2E, 0x00, 0x33, 0x00, 0x30, 0x00,
|
|
||||||
0x33, 0x00, 0x35, 0x00, 0x30, 0x00, 0x32, 0x17, 0x05, 0x83, 0x0C, 0x17,
|
|
||||||
0x04, 0x20, 0x17, 0x18, 0x18, 0x28, 0x00, 0x28, 0x17, 0x04, 0x04, 0x17,
|
|
||||||
0x08, 0x08, 0x17, 0x10, 0x10, 0x00, 0x14, 0x17, 0x05, 0x5A, 0x17, 0x04,
|
|
||||||
0x5C, 0x17, 0x04, 0x5E, 0x17, 0x04, 0x0E, 0x17, 0x0E, 0x78, 0x17, 0x09,
|
|
||||||
0x82, 0x50, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, 0x00, 0x51,
|
|
||||||
0x17, 0x08, 0x18, 0x80, 0x01, 0x00, 0x00, 0x40, 0x17, 0x04, 0x20, 0x03,
|
|
||||||
0x00, 0x00, 0x00, 0xAB, 0x00, 0x0A, 0x04, 0x11, 0x17, 0x08, 0x82, 0x58,
|
|
||||||
0x17, 0x0C, 0x38, 0x17, 0x1B, 0x81, 0x6C, 0x17, 0x08, 0x85, 0x60, 0x17,
|
|
||||||
0x08, 0x86, 0x50, 0x17, 0x08, 0x86, 0x60, 0x17, 0x06, 0x83, 0x21, 0x22,
|
|
||||||
0x04, 0xFF, 0xFF, 0xAF, 0x4F, 0x17, 0x0C, 0x86, 0x74, 0x17, 0x08, 0x2C,
|
|
||||||
0x8B, 0xFF, 0x07, 0x17, 0x06, 0x81, 0x04, 0x32, 0x54, 0x76, 0x10, 0x47,
|
|
||||||
0x32, 0x65, 0x10, 0x34, 0x76, 0x25, 0x01, 0x34, 0x67, 0x25, 0x01, 0x75,
|
|
||||||
0x64, 0x32, 0x01, 0x72, 0x56, 0x34, 0x10, 0x23, 0x74, 0x56, 0x01, 0x45,
|
|
||||||
0x32, 0x67, 0x17, 0x04, 0x24, 0x49, 0x92, 0x24, 0x17, 0x04, 0x04, 0x17,
|
|
||||||
0x11, 0x7C, 0x1B, 0x17, 0x04, 0x04, 0x17, 0x13, 0x81, 0x14, 0x2F, 0x41,
|
|
||||||
0x13, 0x1F, 0x14, 0x00, 0x01, 0x00, 0x17, 0x04, 0x7C, 0xFF, 0xFF, 0xFF,
|
|
||||||
0x7F, 0x0B, 0xD7, 0x06, 0x40, 0x00, 0x00, 0x02, 0x00, 0x08, 0x08, 0x03,
|
|
||||||
0x00, 0x00, 0x5C, 0x01, 0x00, 0x10, 0x10, 0x10, 0x17, 0x06, 0x86, 0x59,
|
|
||||||
0x17, 0x0F, 0x89, 0x14, 0x37, 0x17, 0x07, 0x82, 0x72, 0x10, 0x17, 0x06,
|
|
||||||
0x83, 0x0D, 0x00, 0x11, 0x01, 0x17, 0x05, 0x85, 0x39, 0x17, 0x04, 0x0E,
|
|
||||||
0x0A, 0x17, 0x07, 0x89, 0x29, 0x17, 0x04, 0x1B, 0x17, 0x08, 0x86, 0x77,
|
|
||||||
0x17, 0x09, 0x12, 0x20, 0x00, 0x00, 0x00, 0x81, 0x10, 0x09, 0x28, 0x93,
|
|
||||||
0x32, 0xA5, 0x44, 0x5B, 0x8A, 0x67, 0x76, 0x17, 0x18, 0x82, 0x2C, 0xFF,
|
|
||||||
0xEF, 0xFF, 0xEF, 0xC0, 0xC0, 0xC0, 0xC0, 0x17, 0x04, 0x04, 0xDC, 0xDC,
|
|
||||||
0xDC, 0xDC, 0x0A, 0x0A, 0x0A, 0x0A, 0x17, 0x04, 0x04, 0x17, 0x04, 0x04,
|
|
||||||
0x17, 0x05, 0x82, 0x24, 0x03, 0x07, 0x17, 0x04, 0x04, 0x00, 0x00, 0x24,
|
|
||||||
0xFF, 0xFF, 0x00, 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, 0x10,
|
|
||||||
0x9C, 0x4B, 0x17, 0x04, 0x64, 0x01, 0x00, 0x00, 0x08, 0x4C, 0x00, 0x00,
|
|
||||||
0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, 0x10, 0x17, 0x06, 0x85, 0x60, 0x17,
|
|
||||||
0x10, 0x82, 0x74, 0x17, 0x08, 0x08, 0x17, 0x08, 0x88, 0x00, 0x17, 0x04,
|
|
||||||
0x10, 0x04, 0x17, 0x0B, 0x87, 0x6C, 0x01, 0x00, 0x02, 0x02, 0x01, 0x02,
|
|
||||||
0x03, 0x00, 0x04, 0x05, 0xC3, 0x71, 0x0F, 0x0F, 0x17, 0x08, 0x8B, 0x18,
|
|
||||||
0x1F, 0x17, 0x09, 0x81, 0x73, 0x00, 0xFF, 0x00, 0xFF, 0x17, 0x05, 0x86,
|
|
||||||
0x48, 0x17, 0x04, 0x0C, 0x17, 0x07, 0x86, 0x34, 0x00, 0x00, 0xF0, 0x17,
|
|
||||||
0x09, 0x87, 0x54, 0x43, 0xC3, 0xBA, 0xE4, 0xD3, 0x1E, 0x17, 0x0C, 0x81,
|
|
||||||
0x52, 0x17, 0x0A, 0x1C, 0x17, 0x10, 0x81, 0x6C, 0x17, 0x0A, 0x82, 0x21,
|
|
||||||
0x17, 0x07, 0x82, 0x4D, 0x17, 0x0A, 0x8A, 0x1B, 0x17, 0x11, 0x2C, 0x76,
|
|
||||||
0x0C, 0x17, 0x0A, 0x8A, 0x67, 0x17, 0x0F, 0x84, 0x28, 0x17, 0x06, 0x34,
|
|
||||||
0x17, 0x17, 0x3A, 0x7E, 0x16, 0x40, 0x17, 0x0C, 0x8B, 0x1F, 0x17, 0x2A,
|
|
||||||
0x38, 0x1E, 0x17, 0x0A, 0x38, 0x17, 0x13, 0x81, 0x28, 0x00, 0xC0, 0x17,
|
|
||||||
0x17, 0x55, 0x46, 0x24, 0x17, 0x0A, 0x81, 0x28, 0x17, 0x14, 0x38, 0x17,
|
|
||||||
0x18, 0x81, 0x60, 0x46, 0x2C, 0x17, 0x06, 0x38, 0xEC, 0x17, 0x0D, 0x16,
|
|
||||||
0x17, 0x0E, 0x82, 0x3C, 0x17, 0x82, 0x0C, 0x8E, 0x68, 0x17, 0x04, 0x24,
|
|
||||||
0x17, 0x5C, 0x8E, 0x68, 0x17, 0x07, 0x82, 0x5F, 0x80, 0x17, 0x87, 0x01,
|
|
||||||
0x8E, 0x68, 0x02, 0x17, 0x81, 0x4A, 0x8E, 0x68, 0x17, 0x0C, 0x87, 0x78,
|
|
||||||
0x17, 0x85, 0x28, 0x8E, 0x68, 0x17, 0x8E, 0x68, 0x9D, 0x50, 0x17, 0x81,
|
|
||||||
0x24, 0x8E, 0x68, 0x17, 0x04, 0x2C, 0x17, 0x28, 0x8E, 0x68, 0x17, 0x04,
|
|
||||||
0x30, 0x17, 0x85, 0x3C, 0x8E, 0x68, 0x12, 0x17, 0x07, 0x85, 0x70, 0x17,
|
|
||||||
0x88, 0x74, 0x8E, 0x68, 0x17, 0x87, 0x3E, 0x9D, 0x50, 0x0C, 0x17, 0x04,
|
|
||||||
0x04, 0x17, 0x12, 0x8E, 0x68, 0x18, 0x17, 0x87, 0x12, 0xBB, 0x20, 0x17,
|
|
||||||
0x83, 0x04, 0x9D, 0x50, 0x15, 0x17, 0x05, 0x8D, 0x76, 0x17, 0x0F, 0x8B,
|
|
||||||
0x49, 0x17, 0x0B, 0x18, 0x32, 0x00, 0x2F, 0x00, 0x32, 0x00, 0x31, 0x00,
|
|
||||||
0x34, 0x00, 0x36, 0x00, 0x2F, 0x00, 0x33, 0x17, 0x09, 0x84, 0x0C, 0x17,
|
|
||||||
0x18, 0x18, 0x17, 0x20, 0x8E, 0x68, 0x15, 0x17, 0x07, 0x5A, 0x17, 0x06,
|
|
||||||
0x5E, 0x16, 0x00, 0x15, 0x17, 0x82, 0x40, 0x9D, 0x50, 0x17, 0x86, 0x5F,
|
|
||||||
0xBB, 0x20, 0x3A, 0x00, 0x00, 0x00, 0x1D, 0x17, 0x81, 0x4F, 0xAC, 0x38,
|
|
||||||
0x3B, 0x17, 0x04, 0x04, 0x17, 0x86, 0x30, 0x8E, 0x68, 0x17, 0x81, 0x53,
|
|
||||||
0xAC, 0x38, 0x07, 0x17, 0x0D, 0x8E, 0x68, 0xA3, 0x72, 0x17, 0x83, 0x10,
|
|
||||||
0x8E, 0x68
|
|
||||||
};
|
|
||||||
|
|
||||||
static const uint8_t sdram_params_mariko_lz[1741] = {
|
|
||||||
0x19, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00,
|
|
||||||
0x00, 0x2C, 0x19, 0x04, 0x09, 0x00, 0x19, 0x04, 0x04, 0x19, 0x08, 0x08,
|
|
||||||
0x19, 0x10, 0x10, 0x19, 0x20, 0x20, 0x19, 0x40, 0x40, 0x19, 0x2A, 0x2A,
|
|
||||||
0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x19, 0x04, 0x04, 0x19, 0x09,
|
|
||||||
0x14, 0xFF, 0xFF, 0x1F, 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x19, 0x06, 0x0E,
|
|
||||||
0x88, 0x19, 0x04, 0x04, 0x00, 0x20, 0x12, 0x19, 0x0A, 0x0C, 0x19, 0x06,
|
|
||||||
0x08, 0x00, 0x00, 0xBC, 0xBC, 0xC5, 0xB3, 0x3C, 0x9E, 0x00, 0x00, 0x02,
|
|
||||||
0x03, 0xE0, 0xC1, 0x04, 0x04, 0x04, 0x04, 0x19, 0x04, 0x04, 0x19, 0x04,
|
|
||||||
0x04, 0x3F, 0x3F, 0x3F, 0x3F, 0x19, 0x04, 0x04, 0x19, 0x04, 0x04, 0x19,
|
|
||||||
0x04, 0x38, 0x04, 0x08, 0x00, 0x00, 0x50, 0x50, 0x50, 0x00, 0xA1, 0x01,
|
|
||||||
0x00, 0x00, 0x30, 0x19, 0x04, 0x39, 0x10, 0x00, 0x16, 0x00, 0x10, 0x90,
|
|
||||||
0x19, 0x06, 0x81, 0x00, 0x19, 0x07, 0x74, 0x03, 0x19, 0x04, 0x04, 0x00,
|
|
||||||
0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x3A, 0x00,
|
|
||||||
0x00, 0x00, 0x1D, 0x19, 0x0B, 0x81, 0x14, 0x09, 0x00, 0x00, 0x00, 0x04,
|
|
||||||
0x19, 0x0B, 0x10, 0x0B, 0x19, 0x07, 0x28, 0x08, 0x19, 0x07, 0x0C, 0x19,
|
|
||||||
0x04, 0x1C, 0x17, 0x00, 0x00, 0x00, 0x15, 0x19, 0x07, 0x08, 0x1B, 0x19,
|
|
||||||
0x07, 0x28, 0x20, 0x00, 0x00, 0x00, 0x06, 0x19, 0x04, 0x04, 0x19, 0x07,
|
|
||||||
0x08, 0x19, 0x04, 0x64, 0x19, 0x04, 0x18, 0x19, 0x04, 0x30, 0x19, 0x04,
|
|
||||||
0x10, 0x19, 0x08, 0x81, 0x00, 0x19, 0x04, 0x10, 0x19, 0x04, 0x4C, 0x0E,
|
|
||||||
0x00, 0x00, 0x00, 0x05, 0x19, 0x07, 0x1C, 0x19, 0x09, 0x82, 0x24, 0x19,
|
|
||||||
0x07, 0x6C, 0x19, 0x07, 0x83, 0x57, 0x80, 0x19, 0x04, 0x0A, 0x12, 0x00,
|
|
||||||
0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x16, 0x19,
|
|
||||||
0x07, 0x0C, 0x0A, 0x19, 0x04, 0x48, 0x19, 0x07, 0x61, 0xC1, 0x19, 0x07,
|
|
||||||
0x50, 0x19, 0x04, 0x04, 0x19, 0x04, 0x13, 0x19, 0x04, 0x1C, 0x19, 0x04,
|
|
||||||
0x08, 0x14, 0x19, 0x07, 0x60, 0x19, 0x08, 0x54, 0x3B, 0x19, 0x04, 0x04,
|
|
||||||
0x19, 0x07, 0x14, 0x19, 0x04, 0x04, 0x04, 0x19, 0x07, 0x81, 0x6C, 0x19,
|
|
||||||
0x0C, 0x0C, 0x1C, 0x03, 0x00, 0x00, 0x0D, 0xA0, 0x60, 0x91, 0x3F, 0x3A,
|
|
||||||
0x19, 0x04, 0x5A, 0xF3, 0x0C, 0x04, 0x05, 0x1B, 0x06, 0x02, 0x03, 0x07,
|
|
||||||
0x1C, 0x23, 0x25, 0x25, 0x05, 0x08, 0x1D, 0x09, 0x0A, 0x24, 0x0B, 0x1E,
|
|
||||||
0x0D, 0x0C, 0x26, 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, 0x03, 0x04, 0x07,
|
|
||||||
0x05, 0x06, 0x25, 0x25, 0x02, 0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, 0x09,
|
|
||||||
0x1E, 0x24, 0x26, 0x26, 0x08, 0x24, 0x06, 0x07, 0x9A, 0x19, 0x05, 0x83,
|
|
||||||
0x3F, 0xFF, 0x00, 0xFF, 0x19, 0x10, 0x84, 0x00, 0x04, 0x00, 0x01, 0x88,
|
|
||||||
0x00, 0x00, 0x02, 0x88, 0x00, 0x00, 0x0D, 0x88, 0x00, 0x00, 0x00, 0xC0,
|
|
||||||
0x31, 0x31, 0x03, 0x88, 0x00, 0x00, 0x0B, 0x88, 0x5D, 0x5D, 0x0E, 0x8C,
|
|
||||||
0x5D, 0x5D, 0x0C, 0x88, 0x08, 0x08, 0x0D, 0x8C, 0x00, 0x00, 0x0D, 0x8C,
|
|
||||||
0x16, 0x16, 0x16, 0x88, 0x19, 0x06, 0x2C, 0x11, 0x08, 0x19, 0x10, 0x85,
|
|
||||||
0x5F, 0x10, 0x00, 0xCC, 0x00, 0x0A, 0x00, 0x33, 0x00, 0x00, 0x00, 0x20,
|
|
||||||
0xF3, 0x25, 0x08, 0x11, 0x19, 0x04, 0x69, 0x0F, 0x19, 0x04, 0x18, 0x19,
|
|
||||||
0x04, 0x28, 0x01, 0x03, 0x00, 0x70, 0x00, 0x0C, 0x00, 0x01, 0x19, 0x04,
|
|
||||||
0x0C, 0x08, 0x44, 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, 0x19,
|
|
||||||
0x06, 0x1C, 0xA0, 0x00, 0x2C, 0x00, 0x01, 0x37, 0x0F, 0x19, 0x05, 0x82,
|
|
||||||
0x52, 0x02, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x04, 0x00, 0x1F, 0x22, 0x20,
|
|
||||||
0x80, 0x0F, 0xF4, 0x20, 0x02, 0x29, 0x29, 0x29, 0x29, 0x19, 0x04, 0x04,
|
|
||||||
0x19, 0x08, 0x08, 0x78, 0x19, 0x06, 0x85, 0x1A, 0x19, 0x05, 0x58, 0x19,
|
|
||||||
0x40, 0x85, 0x74, 0x22, 0x00, 0x0E, 0x00, 0x10, 0x19, 0x09, 0x84, 0x22,
|
|
||||||
0x19, 0x12, 0x18, 0x43, 0x00, 0x49, 0x00, 0x45, 0x00, 0x42, 0x00, 0x47,
|
|
||||||
0x00, 0x49, 0x00, 0x47, 0x00, 0x46, 0x19, 0x05, 0x83, 0x60, 0x00, 0x00,
|
|
||||||
0x10, 0x19, 0x18, 0x18, 0x00, 0x28, 0x00, 0x28, 0x19, 0x04, 0x04, 0x19,
|
|
||||||
0x08, 0x08, 0x19, 0x10, 0x10, 0x00, 0x22, 0x19, 0x05, 0x5A, 0x19, 0x04,
|
|
||||||
0x5C, 0x19, 0x04, 0x5E, 0x1B, 0x19, 0x05, 0x88, 0x24, 0x19, 0x10, 0x7C,
|
|
||||||
0x19, 0x09, 0x82, 0x54, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F,
|
|
||||||
0x00, 0x51, 0x80, 0x19, 0x07, 0x18, 0x19, 0x08, 0x08, 0x19, 0x05, 0x84,
|
|
||||||
0x40, 0xAB, 0x00, 0x0A, 0x04, 0x11, 0x19, 0x08, 0x82, 0x5C, 0x19, 0x0C,
|
|
||||||
0x38, 0x19, 0x1C, 0x87, 0x64, 0x19, 0x0B, 0x0C, 0x19, 0x08, 0x89, 0x28,
|
|
||||||
0x19, 0x05, 0x14, 0x01, 0x22, 0x04, 0xFF, 0x9F, 0xAF, 0x4F, 0x19, 0x09,
|
|
||||||
0x10, 0x19, 0x0B, 0x28, 0x9F, 0xFF, 0x37, 0x19, 0x06, 0x81, 0x18, 0x32,
|
|
||||||
0x54, 0x76, 0x10, 0x47, 0x32, 0x65, 0x10, 0x34, 0x76, 0x25, 0x01, 0x34,
|
|
||||||
0x67, 0x25, 0x01, 0x75, 0x64, 0x32, 0x01, 0x72, 0x56, 0x34, 0x10, 0x23,
|
|
||||||
0x74, 0x56, 0x01, 0x45, 0x32, 0x67, 0x19, 0x04, 0x24, 0x49, 0x92, 0x24,
|
|
||||||
0x19, 0x04, 0x04, 0x19, 0x11, 0x78, 0x12, 0x19, 0x04, 0x04, 0x19, 0x13,
|
|
||||||
0x81, 0x10, 0x20, 0x41, 0x13, 0x1F, 0x14, 0x00, 0x01, 0x00, 0x19, 0x04,
|
|
||||||
0x7C, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0xD7, 0x36, 0x19, 0x07, 0x89, 0x00,
|
|
||||||
0x09, 0x00, 0x00, 0x34, 0x10, 0x19, 0x09, 0x87, 0x70, 0x19, 0x14, 0x81,
|
|
||||||
0x4C, 0x03, 0x00, 0x05, 0x19, 0x05, 0x86, 0x2B, 0x10, 0x02, 0x19, 0x06,
|
|
||||||
0x87, 0x5D, 0x21, 0x19, 0x07, 0x88, 0x15, 0x19, 0x07, 0x41, 0x19, 0x06,
|
|
||||||
0x3D, 0x19, 0x07, 0x2C, 0x80, 0x00, 0x40, 0x00, 0x04, 0x10, 0x80, 0x19,
|
|
||||||
0x05, 0x88, 0x04, 0x81, 0x10, 0x09, 0x28, 0x93, 0x32, 0xA5, 0x44, 0x5B,
|
|
||||||
0x8A, 0x67, 0x76, 0x19, 0x60, 0x8A, 0x54, 0x10, 0x10, 0x19, 0x04, 0x04,
|
|
||||||
0x00, 0x00, 0x00, 0xEF, 0x00, 0xEF, 0x19, 0x08, 0x14, 0x1C, 0x1C, 0x1C,
|
|
||||||
0x1C, 0x19, 0x11, 0x83, 0x18, 0x03, 0x08, 0x19, 0x04, 0x04, 0x00, 0x00,
|
|
||||||
0x24, 0xFF, 0xFF, 0x00, 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00,
|
|
||||||
0x10, 0x9C, 0x4B, 0x00, 0x10, 0x19, 0x05, 0x83, 0x24, 0x08, 0x4C, 0x00,
|
|
||||||
0x00, 0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, 0x10, 0x00, 0x80, 0x19, 0x08,
|
|
||||||
0x83, 0x68, 0x19, 0x0C, 0x83, 0x40, 0x19, 0x08, 0x08, 0x05, 0x19, 0x0B,
|
|
||||||
0x84, 0x0C, 0x04, 0x19, 0x07, 0x10, 0x07, 0x19, 0x06, 0x62, 0x02, 0x01,
|
|
||||||
0x02, 0x03, 0x00, 0x04, 0x05, 0xA3, 0x72, 0x0F, 0x0F, 0x00, 0x70, 0x19,
|
|
||||||
0x06, 0x42, 0x1F, 0x19, 0x0A, 0x82, 0x28, 0xFF, 0x00, 0xFF, 0x19, 0x05,
|
|
||||||
0x87, 0x18, 0x19, 0x07, 0x89, 0x56, 0x19, 0x06, 0x20, 0xF0, 0x19, 0x09,
|
|
||||||
0x88, 0x24, 0x43, 0xC3, 0xBA, 0xE4, 0xD3, 0x1E, 0x19, 0x0C, 0x8A, 0x0B,
|
|
||||||
0x19, 0x0A, 0x1C, 0x19, 0x10, 0x81, 0x4C, 0x19, 0x05, 0x44, 0x19, 0x09,
|
|
||||||
0x0E, 0x19, 0x05, 0x8B, 0x66, 0x19, 0x08, 0x8A, 0x6B, 0x19, 0x11, 0x2C,
|
|
||||||
0x76, 0x0C, 0x19, 0x0A, 0x8B, 0x4B, 0x19, 0x0F, 0x84, 0x78, 0x19, 0x06,
|
|
||||||
0x34, 0x19, 0x17, 0x3A, 0x7E, 0x16, 0x40, 0x19, 0x0C, 0x8C, 0x03, 0x19,
|
|
||||||
0x2A, 0x38, 0x1E, 0x19, 0x0A, 0x38, 0x19, 0x13, 0x81, 0x28, 0x00, 0xC0,
|
|
||||||
0x19, 0x17, 0x55, 0x46, 0x24, 0x19, 0x0A, 0x81, 0x28, 0x19, 0x14, 0x38,
|
|
||||||
0x19, 0x18, 0x81, 0x60, 0x46, 0x2C, 0x19, 0x06, 0x38, 0xEC, 0x19, 0x0D,
|
|
||||||
0x16, 0x19, 0x16, 0x82, 0x3C, 0x19, 0x87, 0x2C, 0x90, 0x38, 0x16, 0x00,
|
|
||||||
0x0D, 0x00, 0x0B, 0x19, 0x05, 0x84, 0x26, 0x19, 0x16, 0x18, 0x43, 0x00,
|
|
||||||
0x45, 0x00, 0x45, 0x00, 0x43, 0x00, 0x46, 0x00, 0x47, 0x00, 0x41, 0x00,
|
|
||||||
0x46, 0x00, 0x0C, 0x19, 0x05, 0x83, 0x3A, 0x0D, 0x19, 0x18, 0x18, 0x19,
|
|
||||||
0x21, 0x90, 0x38, 0x16, 0x19, 0x05, 0x5A, 0x19, 0x04, 0x5C, 0x19, 0x04,
|
|
||||||
0x5E, 0x17, 0x19, 0x07, 0x90, 0x70, 0x19, 0x89, 0x5C, 0x90, 0x38, 0x50,
|
|
||||||
0x05, 0x19, 0x1E, 0x90, 0x38, 0xAF, 0xC9, 0x19, 0x3C, 0x90, 0x38, 0x19,
|
|
||||||
0x0C, 0x89, 0x30, 0x19, 0x81, 0x0C, 0x90, 0x38, 0x19, 0x04, 0x18, 0x05,
|
|
||||||
0x19, 0x0F, 0x83, 0x5C, 0x0C, 0x19, 0x81, 0x5A, 0x90, 0x38, 0x08, 0x00,
|
|
||||||
0x00, 0x02, 0x08, 0x00, 0x00, 0x0D, 0x08, 0x19, 0x07, 0x90, 0x38, 0x08,
|
|
||||||
0x00, 0x00, 0x0B, 0x08, 0x5D, 0x5D, 0x0E, 0x0C, 0x5D, 0x5D, 0x0C, 0x08,
|
|
||||||
0x08, 0x08, 0x0D, 0x0C, 0x00, 0x00, 0x0D, 0x0C, 0x14, 0x14, 0x16, 0x08,
|
|
||||||
0x19, 0x06, 0x2C, 0x19, 0x56, 0x90, 0x38, 0x19, 0x04, 0x30, 0x19, 0x0C,
|
|
||||||
0x90, 0x38, 0x35, 0x35, 0x35, 0x35, 0x19, 0x04, 0x04, 0x19, 0x81, 0x24,
|
|
||||||
0x90, 0x38, 0x10, 0x19, 0x05, 0xA0, 0x4A, 0x19, 0x06, 0x06, 0x19, 0x0C,
|
|
||||||
0x0C, 0x19, 0x08, 0x08, 0x19, 0x37, 0x90, 0x38, 0x19, 0x08, 0x18, 0x80,
|
|
||||||
0x01, 0x00, 0x00, 0x40, 0x19, 0x82, 0x34, 0x90, 0x38, 0x19, 0x08, 0x12,
|
|
||||||
0x19, 0x81, 0x14, 0x90, 0x38, 0x19, 0x05, 0x82, 0x74, 0x19, 0x18, 0x90,
|
|
||||||
0x38, 0x20, 0x19, 0x32, 0x90, 0x38, 0x19, 0x08, 0x10, 0x19, 0x0C, 0x90,
|
|
||||||
0x38, 0x01, 0x19, 0x49, 0x90, 0x38, 0x80, 0x2A, 0x19, 0x06, 0x84, 0x20,
|
|
||||||
0x19, 0x95, 0x3E, 0xA0, 0x70, 0x19, 0x83, 0x2C, 0x90, 0x38, 0x14, 0x14,
|
|
||||||
0x19, 0x4D, 0x90, 0x38, 0x19, 0x05, 0x8A, 0x08, 0x19, 0x87, 0x2A, 0x90,
|
|
||||||
0x38, 0x19, 0x84, 0x30, 0xA0, 0x70, 0x19, 0x84, 0x7A, 0x90, 0x38, 0x32,
|
|
||||||
0x32, 0x32, 0x32, 0x19, 0x04, 0x04, 0x19, 0x54, 0x90, 0x38, 0x18, 0x00,
|
|
||||||
0x0F, 0x19, 0x15, 0x90, 0x38, 0x19, 0x08, 0x18, 0x48, 0x00, 0x44, 0x00,
|
|
||||||
0x45, 0x00, 0x44, 0x00, 0x47, 0x19, 0x07, 0x90, 0x20, 0x0D, 0x19, 0x05,
|
|
||||||
0x83, 0x0E, 0x0D, 0x19, 0x18, 0x18, 0x00, 0x78, 0x00, 0x78, 0x19, 0x04,
|
|
||||||
0x04, 0x19, 0x08, 0x08, 0x19, 0x10, 0x10, 0x00, 0x18, 0x19, 0x05, 0x5A,
|
|
||||||
0x19, 0x04, 0x5C, 0x19, 0x06, 0x90, 0x38, 0x18, 0x19, 0x8B, 0x57, 0x90,
|
|
||||||
0x38, 0x19, 0x81, 0x6F, 0xC1, 0x60, 0x19, 0x8D, 0x31, 0xA0, 0x70, 0x19,
|
|
||||||
0x82, 0x18, 0xD2, 0x18, 0x19, 0x04, 0x34, 0x19, 0x82, 0x00, 0xD2, 0x18,
|
|
||||||
0x19, 0x82, 0x03, 0x90, 0x38, 0x19, 0x84, 0x1D, 0xD2, 0x18, 0x19, 0x08,
|
|
||||||
0x83, 0x7C, 0x19, 0x85, 0x16, 0xD2, 0x18, 0x19, 0x82, 0x76, 0xB1, 0x28,
|
|
||||||
0x19, 0x6F, 0x90, 0x38, 0x19, 0x81, 0x71, 0xA0, 0x70, 0x19, 0x50, 0xB1,
|
|
||||||
0x28, 0x19, 0x20, 0x90, 0x38, 0x19, 0x84, 0x54, 0xB1, 0x28, 0x19, 0x10,
|
|
||||||
0x90, 0x38, 0x19, 0x87, 0x04, 0xA0, 0x70, 0x19, 0x81, 0x6F, 0x90, 0x38,
|
|
||||||
0x19, 0x81, 0x15, 0xA0, 0x70, 0x19, 0x81, 0x2C, 0xC1, 0x60, 0x19, 0x57,
|
|
||||||
0x90, 0x38, 0x19, 0x8C, 0x51, 0xA0, 0x70, 0x06, 0x1B, 0x04, 0x1C, 0x07,
|
|
||||||
0x03, 0x05, 0x02, 0x00, 0x25, 0x25, 0x03, 0x00, 0x1E, 0x1D, 0x08, 0x0D,
|
|
||||||
0x0A, 0x0C, 0x09, 0x0B, 0x26, 0x26, 0x05, 0x02, 0x04, 0x03, 0x05, 0x00,
|
|
||||||
0x06, 0x1C, 0x1B, 0x07, 0x25, 0x25, 0x07, 0x0A, 0x0B, 0x1D, 0x0C, 0x0D,
|
|
||||||
0x09, 0x00, 0x08, 0x1E, 0x26, 0x26, 0x09, 0x24, 0x06, 0x08, 0x2A, 0x19,
|
|
||||||
0x82, 0x0C, 0xA0, 0x70, 0x10, 0x00, 0x14, 0x00, 0x0B, 0x00, 0x13, 0x19,
|
|
||||||
0x18, 0x18, 0x00, 0x47, 0x00, 0x45, 0x00, 0x4F, 0x00, 0x4D, 0x00, 0x46,
|
|
||||||
0x00, 0x46, 0x00, 0x48, 0x00, 0x48, 0x00, 0x08, 0x00, 0x0C, 0x00, 0x0C,
|
|
||||||
0x00, 0x0B, 0x19, 0x18, 0x18, 0x19, 0x21, 0x90, 0x38, 0x10, 0x19, 0x05,
|
|
||||||
0x5A, 0x19, 0x04, 0x5C, 0x19, 0x04, 0x5E, 0x13, 0x19, 0x13, 0x8D, 0x5D,
|
|
||||||
0x19, 0x78, 0xA0, 0x70, 0x28, 0x40, 0xFF, 0x9F, 0x9F, 0x19, 0x1D, 0x90,
|
|
||||||
0x38, 0x57, 0x21, 0x03, 0x64, 0x67, 0x04, 0x32, 0x51, 0x21, 0x56, 0x73,
|
|
||||||
0x04, 0x12, 0x60, 0x35, 0x47, 0x73, 0x56, 0x04, 0x12, 0x10, 0x72, 0x65,
|
|
||||||
0x43, 0x37, 0x21, 0x40, 0x65, 0x64, 0x21, 0x30, 0x57, 0x19, 0x3E, 0x90,
|
|
||||||
0x38, 0x9F, 0x19, 0x06, 0x90, 0x38, 0xCF, 0x33, 0x19, 0x54, 0x90, 0x38,
|
|
||||||
0x10, 0x08, 0x01, 0x03, 0x00, 0x50, 0x00, 0x40, 0x01, 0x19, 0x06, 0x90,
|
|
||||||
0x38, 0x08, 0x29, 0x32, 0x93, 0xA5, 0x54, 0x4A, 0x6B, 0x76, 0x87, 0x19,
|
|
||||||
0x82, 0x29, 0xA0, 0x70, 0xCB, 0xFA, 0xE4, 0xD3, 0xFE, 0x19, 0x82, 0x3A,
|
|
||||||
0x90, 0x38, 0x9C, 0x19, 0x84, 0x6F, 0xD2, 0x18, 0x19, 0x82, 0x60, 0xB1,
|
|
||||||
0x28, 0x19, 0x85, 0x44, 0xD2, 0x18, 0x19, 0x85, 0x7C, 0xB1, 0x28, 0x19,
|
|
||||||
0x8B, 0x21, 0x90, 0x38, 0x19, 0x82, 0x3F, 0xA0, 0x70, 0x19, 0x24, 0x90,
|
|
||||||
0x38
|
|
||||||
};
|
|
||||||
|
|
||||||
static const uint32_t sdram_params_index_table_erista[29] = {
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
3,
|
|
||||||
4,
|
|
||||||
5,
|
|
||||||
6,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
};
|
|
||||||
|
|
||||||
static const uint32_t sdram_params_index_table_mariko[29] = {
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xC,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0xFFFFFFFF,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
3,
|
|
||||||
4,
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
3,
|
|
||||||
4,
|
|
||||||
5,
|
|
||||||
6,
|
|
||||||
7,
|
|
||||||
6,
|
|
||||||
8,
|
|
||||||
9,
|
|
||||||
0xA,
|
|
||||||
7,
|
|
||||||
6,
|
|
||||||
0xB,
|
|
||||||
0xB,
|
|
||||||
0xB,
|
|
||||||
7,
|
|
||||||
};
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,202 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2018-2020 Atmosphère-NX
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms and conditions of the GNU General Public License,
|
|
||||||
* version 2, as published by the Free Software Foundation.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
||||||
* more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include "utils.h"
|
|
||||||
#include "di.h"
|
|
||||||
#include "se.h"
|
|
||||||
#include "fuse.h"
|
|
||||||
#include "pmc.h"
|
|
||||||
#include "timers.h"
|
|
||||||
#include "i2c.h"
|
|
||||||
#include "panic.h"
|
|
||||||
#include "car.h"
|
|
||||||
#include "btn.h"
|
|
||||||
#include "max77620.h"
|
|
||||||
#include "../../../fusee/common/log.h"
|
|
||||||
#include "../../../fusee/common/vsprintf.h"
|
|
||||||
#include "../../../fusee/common/display/video_fb.h"
|
|
||||||
|
|
||||||
#include <inttypes.h>
|
|
||||||
|
|
||||||
#define u8 uint8_t
|
|
||||||
#define u32 uint32_t
|
|
||||||
#include "rebootstub_bin.h"
|
|
||||||
#undef u8
|
|
||||||
#undef u32
|
|
||||||
|
|
||||||
static bool is_soc_mariko(void) {
|
|
||||||
return fuse_get_soc_type() == 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__((noreturn)) static void shutdown_system(bool reboot) {
|
|
||||||
/* Ensure that i2c5 is in a coherent state. */
|
|
||||||
i2c_config(I2C_5);
|
|
||||||
clkrst_reboot(CARDEVICE_I2C5);
|
|
||||||
i2c_init(I2C_5);
|
|
||||||
|
|
||||||
/* Get value, set or clear software reset mask. */
|
|
||||||
uint8_t on_off_2_val = 0;
|
|
||||||
i2c_query(I2C_5, MAX77620_PWR_I2C_ADDR, MAX77620_REG_ONOFFCNFG2, &on_off_2_val, 1);
|
|
||||||
if (reboot) {
|
|
||||||
on_off_2_val |= MAX77620_ONOFFCNFG2_SFT_RST_WK;
|
|
||||||
} else {
|
|
||||||
on_off_2_val &= ~(MAX77620_ONOFFCNFG2_SFT_RST_WK);
|
|
||||||
}
|
|
||||||
i2c_send(I2C_5, MAX77620_PWR_I2C_ADDR, MAX77620_REG_ONOFFCNFG2, &on_off_2_val, 1);
|
|
||||||
|
|
||||||
/* Set software reset mask. */
|
|
||||||
uint8_t on_off_1_val = 0;
|
|
||||||
i2c_query(I2C_5, MAX77620_PWR_I2C_ADDR, MAX77620_REG_ONOFFCNFG1, &on_off_1_val, 1);
|
|
||||||
on_off_1_val |= MAX77620_ONOFFCNFG1_SFT_RST;
|
|
||||||
i2c_send(I2C_5, MAX77620_PWR_I2C_ADDR, MAX77620_REG_ONOFFCNFG1, &on_off_1_val, 1);
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
/* Wait for reboot. */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extern uint8_t __reboot_start__[], __reboot_end__[];
|
|
||||||
|
|
||||||
void wait(uint32_t microseconds) {
|
|
||||||
uint32_t old_time = TIMERUS_CNTR_1US_0;
|
|
||||||
while (TIMERUS_CNTR_1US_0 - old_time <= microseconds) {
|
|
||||||
/* Spin-lock. */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__((noreturn)) void watchdog_reboot(void) {
|
|
||||||
volatile watchdog_timers_t *wdt = GET_WDT(4);
|
|
||||||
wdt->PATTERN = WDT_REBOOT_PATTERN;
|
|
||||||
wdt->COMMAND = 2; /* Disable Counter. */
|
|
||||||
GET_WDT_REBOOT_CFG_REG(4) = 0xC0000000;
|
|
||||||
wdt->CONFIG = 0x8019; /* Full System Reset after Fourth Counter expires, using TIMER(9). */
|
|
||||||
wdt->COMMAND = 1; /* Enable Counter. */
|
|
||||||
while (true) {
|
|
||||||
/* Wait for reboot. */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__((noreturn)) void pmc_reboot(uint32_t scratch0) {
|
|
||||||
APBDEV_PMC_SCRATCH0_0 = scratch0;
|
|
||||||
|
|
||||||
/* Reset the processor. */
|
|
||||||
APBDEV_PMC_CONTROL = BIT(4);
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
/* Wait for reboot. */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__((noreturn)) void reboot_to_self(void) {
|
|
||||||
if (is_soc_mariko()) {
|
|
||||||
/* If mariko, we can't reboot to self/payload, so just reboot. */
|
|
||||||
shutdown_system(true);
|
|
||||||
} else {
|
|
||||||
/* Patch SDRAM init to perform an SVC immediately after second write */
|
|
||||||
APBDEV_PMC_SCRATCH45_0 = 0x2E38DFFF;
|
|
||||||
APBDEV_PMC_SCRATCH46_0 = 0x6001DC28;
|
|
||||||
/* Set SVC handler to jump to reboot stub in IRAM. */
|
|
||||||
APBDEV_PMC_SCRATCH33_0 = 0x4003F000;
|
|
||||||
APBDEV_PMC_SCRATCH40_0 = 0x6000F208;
|
|
||||||
|
|
||||||
/* Copy reboot stub into IRAM high. */
|
|
||||||
for (size_t i = 0; i < rebootstub_bin_size; i += sizeof(uint32_t)) {
|
|
||||||
write32le((void *)0x4003F000, i, read32le(rebootstub_bin, i));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Copy our low part into safe IRAM. */
|
|
||||||
for (size_t i = 0; i < 0x8000; i += sizeof(uint32_t)) {
|
|
||||||
write32le((void *)0x40030000, i, read32le((void *)0x40008000, i));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Copy our start page into fatal IRAM. */
|
|
||||||
for (size_t i = 0; i < 0x1000; i += sizeof(uint32_t)) {
|
|
||||||
write32le((void *)0x4003D000, i, read32le((void *)0x40010000, i));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Copy our reboot handler to the rebootstub target. */
|
|
||||||
for (size_t i = 0; i < (__reboot_end__ - __reboot_start__); i += sizeof(uint32_t)) {
|
|
||||||
write32le((void *)0x40010000, i, read32le(__reboot_start__, i));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Trigger warm reboot. */
|
|
||||||
APBDEV_PMC_SCRATCH0_0 = (1 << 0);
|
|
||||||
|
|
||||||
/* Reset the processor. */
|
|
||||||
APBDEV_PMC_CONTROL = BIT(4);
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
/* Wait for reboot. */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__((noreturn)) void wait_for_button_and_reboot(void) {
|
|
||||||
uint32_t button;
|
|
||||||
while (true) {
|
|
||||||
button = btn_read();
|
|
||||||
if (button & BTN_POWER) {
|
|
||||||
reboot_to_self();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((noreturn)) void generic_panic(void) {
|
|
||||||
panic(0xFF000006);
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__((noreturn)) void fatal_error(const char *fmt, ...) {
|
|
||||||
/* Forcefully initialize the screen if logging is disabled. */
|
|
||||||
if (log_get_log_level() == SCREEN_LOG_LEVEL_NONE) {
|
|
||||||
/* Zero-fill the framebuffer and register it as printk provider. */
|
|
||||||
video_init((void *)0xC0000000);
|
|
||||||
|
|
||||||
/* Initialize the display. */
|
|
||||||
display_init();
|
|
||||||
|
|
||||||
/* Set the framebuffer. */
|
|
||||||
display_init_framebuffer((void *)0xC0000000);
|
|
||||||
|
|
||||||
/* Turn on the backlight after initializing the lfb */
|
|
||||||
/* to avoid flickering. */
|
|
||||||
display_backlight(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Override the global logging level. */
|
|
||||||
log_set_log_level(SCREEN_LOG_LEVEL_ERROR);
|
|
||||||
|
|
||||||
/* Display fatal error. */
|
|
||||||
va_list args;
|
|
||||||
print(SCREEN_LOG_LEVEL_ERROR, "Fatal error: ");
|
|
||||||
va_start(args, fmt);
|
|
||||||
vprint(SCREEN_LOG_LEVEL_ERROR, fmt, args);
|
|
||||||
va_end(args);
|
|
||||||
print(SCREEN_LOG_LEVEL_ERROR | SCREEN_LOG_LEVEL_NO_PREFIX,"\nPress POWER to reboot\n");
|
|
||||||
|
|
||||||
/* Wait for button and reboot. */
|
|
||||||
wait_for_button_and_reboot();
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__((noinline)) bool overlaps(uint64_t as, uint64_t ae, uint64_t bs, uint64_t be)
|
|
||||||
{
|
|
||||||
if(as <= bs && bs <= ae)
|
|
||||||
return true;
|
|
||||||
if(bs <= as && as <= be)
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
@@ -5,8 +5,8 @@ ENTRY(_start)
|
|||||||
PHDRS
|
PHDRS
|
||||||
{
|
{
|
||||||
crt0 PT_LOAD;
|
crt0 PT_LOAD;
|
||||||
|
chainloader PT_LOAD;
|
||||||
main PT_LOAD;
|
main PT_LOAD;
|
||||||
loader_stub PT_LOAD;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mostly copied from https://github.com/devkitPro/buildscripts/blob/master/dkarm-eabi/crtls/3dsx.ld */
|
/* Mostly copied from https://github.com/devkitPro/buildscripts/blob/master/dkarm-eabi/crtls/3dsx.ld */
|
||||||
@@ -14,14 +14,14 @@ MEMORY
|
|||||||
{
|
{
|
||||||
NULL : ORIGIN = 0x00000000, LENGTH = 0x1000
|
NULL : ORIGIN = 0x00000000, LENGTH = 0x1000
|
||||||
main : ORIGIN = 0x40010000, LENGTH = 0x20000
|
main : ORIGIN = 0x40010000, LENGTH = 0x20000
|
||||||
loader_stub : ORIGIN = 0x40030000, LENGTH = 0x4000
|
low_iram : ORIGIN = 0x40003000, LENGTH = 0x8000
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
PROVIDE(__start__ = 0x40008000);
|
PROVIDE(__start__ = 0x40010000);
|
||||||
PROVIDE(__stack_top__ = 0x40038000);
|
PROVIDE(__stack_top__ = 0x40010000);
|
||||||
PROVIDE(__stack_bottom__ = 0x40034000);
|
PROVIDE(__stack_bottom__ = 0x4000C000);
|
||||||
PROVIDE(__heap_start__ = 0);
|
PROVIDE(__heap_start__ = 0);
|
||||||
PROVIDE(__heap_end__ = 0);
|
PROVIDE(__heap_end__ = 0);
|
||||||
|
|
||||||
@@ -34,6 +34,44 @@ SECTIONS
|
|||||||
. = ALIGN(32);
|
. = ALIGN(32);
|
||||||
} >main :crt0
|
} >main :crt0
|
||||||
|
|
||||||
|
.chainloader_loadable :
|
||||||
|
{
|
||||||
|
. = ALIGN(32);
|
||||||
|
PROVIDE (__chainloader_start__ = ABSOLUTE(.));
|
||||||
|
PROVIDE (__chainloader_lma__ = LOADADDR(.chainloader_loadable));
|
||||||
|
KEEP(*(.chainloader.text.start))
|
||||||
|
chainloader.o(.text*)
|
||||||
|
chainloader.o(.rodata*)
|
||||||
|
chainloader.o(.data*)
|
||||||
|
. = ALIGN(32);
|
||||||
|
} >low_iram AT>main :chainloader
|
||||||
|
|
||||||
|
.chainloader_bss (NOLOAD) :
|
||||||
|
{
|
||||||
|
. = ALIGN(32);
|
||||||
|
PROVIDE (__chainloader_bss_start__ = ABSOLUTE(.));
|
||||||
|
chainloader.o(.bss* COMMON)
|
||||||
|
. = ALIGN(32);
|
||||||
|
PROVIDE (__chainloader_end__ = ABSOLUTE(.));
|
||||||
|
} >low_iram :NONE
|
||||||
|
|
||||||
|
.text :
|
||||||
|
{
|
||||||
|
. = ALIGN(32);
|
||||||
|
/* .text */
|
||||||
|
*(.text)
|
||||||
|
*(.text.*)
|
||||||
|
*(.glue_7)
|
||||||
|
*(.glue_7t)
|
||||||
|
*(.stub)
|
||||||
|
*(.gnu.warning)
|
||||||
|
*(.gnu.linkonce.t*)
|
||||||
|
|
||||||
|
/* .fini */
|
||||||
|
KEEP( *(.fini) )
|
||||||
|
. = ALIGN(8);
|
||||||
|
} >main :main
|
||||||
|
|
||||||
.rodata :
|
.rodata :
|
||||||
{
|
{
|
||||||
*(.rodata)
|
*(.rodata)
|
||||||
@@ -45,6 +83,21 @@ SECTIONS
|
|||||||
. = ALIGN(8);
|
. = ALIGN(8);
|
||||||
} >main
|
} >main
|
||||||
|
|
||||||
|
.preinit_array :
|
||||||
|
{
|
||||||
|
PROVIDE (__preinit_array_start = .);
|
||||||
|
KEEP (*(.preinit_array))
|
||||||
|
PROVIDE (__preinit_array_end = .);
|
||||||
|
} >main
|
||||||
|
|
||||||
|
.init_array ALIGN(4) :
|
||||||
|
{
|
||||||
|
PROVIDE (__init_array_start = .);
|
||||||
|
KEEP (*(SORT(.init_array.*)))
|
||||||
|
KEEP (*(.init_array))
|
||||||
|
PROVIDE (__init_array_end = .);
|
||||||
|
} >main
|
||||||
|
|
||||||
.fini_array ALIGN(4) :
|
.fini_array ALIGN(4) :
|
||||||
{
|
{
|
||||||
PROVIDE (__fini_array_start = .);
|
PROVIDE (__fini_array_start = .);
|
||||||
@@ -95,25 +148,6 @@ SECTIONS
|
|||||||
. = ALIGN(32);
|
. = ALIGN(32);
|
||||||
PROVIDE (__bss_end__ = ABSOLUTE(.));
|
PROVIDE (__bss_end__ = ABSOLUTE(.));
|
||||||
} >main :NONE
|
} >main :NONE
|
||||||
|
|
||||||
.loader_stub :
|
|
||||||
{
|
|
||||||
. = ALIGN(32);
|
|
||||||
PROVIDE (__loader_stub_start__ = ABSOLUTE(.));
|
|
||||||
PROVIDE (__loader_stub_lma__ = LOADADDR(.loader_stub));
|
|
||||||
loader_stub.o(.text*)
|
|
||||||
lz4.o(.text*)
|
|
||||||
utils.o(.text*)
|
|
||||||
loader_stub.o(.rodata*)
|
|
||||||
lz4.o(.rodata*)
|
|
||||||
utils.o(.rodata*)
|
|
||||||
loader_stub.o(.data*)
|
|
||||||
lz4.o(.data*)
|
|
||||||
utils.o(data)
|
|
||||||
. = ALIGN(32);
|
|
||||||
PROVIDE (__loader_stub_end__ = ABSOLUTE(.));
|
|
||||||
} >loader_stub AT>main : loader_stub
|
|
||||||
|
|
||||||
__end__ = ABSOLUTE(.) ;
|
__end__ = ABSOLUTE(.) ;
|
||||||
|
|
||||||
/* ==================
|
/* ==================
|
||||||
|
|||||||
@@ -25,33 +25,18 @@
|
|||||||
#define MAKE_APB_PADCTL_REG(n) MAKE_REG32(APB_PADCTL_BASE + n)
|
#define MAKE_APB_PADCTL_REG(n) MAKE_REG32(APB_PADCTL_BASE + n)
|
||||||
|
|
||||||
#define APB_MISC_PP_PINMUX_GLOBAL_0 MAKE_APB_MISC_REG(0x40)
|
#define APB_MISC_PP_PINMUX_GLOBAL_0 MAKE_APB_MISC_REG(0x40)
|
||||||
#define APB_MISC_GP_DSI_PAD_CONTROL_0 MAKE_APB_MISC_REG(0xAC0)
|
|
||||||
#define APB_MISC_GP_WIFI_EN_CFGPADCTRL_0 MAKE_APB_MISC_REG(0xB64)
|
#define APB_MISC_GP_WIFI_EN_CFGPADCTRL_0 MAKE_APB_MISC_REG(0xB64)
|
||||||
#define APB_MISC_GP_WIFI_RST_CFGPADCTRL_0 MAKE_APB_MISC_REG(0xB68)
|
#define APB_MISC_GP_WIFI_RST_CFGPADCTRL_0 MAKE_APB_MISC_REG(0xB68)
|
||||||
|
|
||||||
#define SDMMC1_PAD_CAL_DRVUP_SHIFT (20)
|
#define SDMMC1_PAD_CAL_DRVUP_SHIFT (20)
|
||||||
#define SDMMC1_PAD_CAL_DRVDN_SHIFT (12)
|
#define SDMMC1_PAD_CAL_DRVDN_SHIFT (12)
|
||||||
#define SDMMC1_CLK_CFG_CAL_DRVDN_SLWR_SHIFT (28)
|
|
||||||
#define SDMMC1_CLK_CFG_CAL_DRVDN_SLWF_SHIFT (30)
|
|
||||||
#define SDMMC1_PAD_CAL_DRVUP_MASK (0x7Fu << SDMMC1_PAD_CAL_DRVUP_SHIFT)
|
#define SDMMC1_PAD_CAL_DRVUP_MASK (0x7Fu << SDMMC1_PAD_CAL_DRVUP_SHIFT)
|
||||||
#define SDMMC1_PAD_CAL_DRVDN_MASK (0x7Fu << SDMMC1_PAD_CAL_DRVDN_SHIFT)
|
#define SDMMC1_PAD_CAL_DRVDN_MASK (0x7Fu << SDMMC1_PAD_CAL_DRVDN_SHIFT)
|
||||||
#define SDMMC1_CLK_CFG_CAL_DRVDN_SLWR_MASK (0x03u << SDMMC1_CLK_CFG_CAL_DRVDN_SLWR_SHIFT)
|
|
||||||
#define SDMMC1_CLK_CFG_CAL_DRVDN_SLWF_MASK (0x03u << SDMMC1_CLK_CFG_CAL_DRVDN_SLWF_SHIFT)
|
|
||||||
|
|
||||||
#define EMMC2_PAD_DRVUP_COMP_SHIFT (8)
|
#define CFG2TMC_EMMC4_PAD_DRVUP_COMP_SHIFT (8)
|
||||||
#define EMMC2_PAD_DRVDN_COMP_SHIFT (2)
|
#define CFG2TMC_EMMC4_PAD_DRVDN_COMP_SHIFT (2)
|
||||||
#define EMMC2_PAD_DRVUP_COMP_MASK (0x3Fu << EMMC2_PAD_DRVUP_COMP_SHIFT)
|
#define CFG2TMC_EMMC4_PAD_DRVUP_COMP_MASK (0x3Fu << CFG2TMC_EMMC4_PAD_DRVUP_COMP_SHIFT)
|
||||||
#define EMMC2_PAD_DRVDN_COMP_MASK (0x3Fu << EMMC2_PAD_DRVDN_COMP_SHIFT)
|
#define CFG2TMC_EMMC4_PAD_DRVDN_COMP_MASK (0x3Fu << CFG2TMC_EMMC4_PAD_DRVDN_COMP_SHIFT)
|
||||||
|
|
||||||
#define SDMMC2_PAD_CAL_DRVUP_SHIFT (20)
|
|
||||||
#define SDMMC2_PAD_CAL_DRVDN_SHIFT (12)
|
|
||||||
#define SDMMC2_PAD_CAL_DRVUP_MASK (0x7Fu << SDMMC2_PAD_CAL_DRVUP_SHIFT)
|
|
||||||
#define SDMMC2_PAD_CAL_DRVDN_MASK (0x7Fu << SDMMC2_PAD_CAL_DRVDN_SHIFT)
|
|
||||||
|
|
||||||
#define EMMC4_PAD_DRVUP_COMP_SHIFT (8)
|
|
||||||
#define EMMC4_PAD_DRVDN_COMP_SHIFT (2)
|
|
||||||
#define EMMC4_PAD_DRVUP_COMP_MASK (0x3Fu << EMMC4_PAD_DRVUP_COMP_SHIFT)
|
|
||||||
#define EMMC4_PAD_DRVDN_COMP_MASK (0x3Fu << EMMC4_PAD_DRVDN_COMP_SHIFT)
|
|
||||||
|
|
||||||
#define PADCTL_SDMMC1_DEEP_LOOPBACK (1 << 0)
|
#define PADCTL_SDMMC1_DEEP_LOOPBACK (1 << 0)
|
||||||
#define PADCTL_SDMMC3_DEEP_LOOPBACK (1 << 0)
|
#define PADCTL_SDMMC3_DEEP_LOOPBACK (1 << 0)
|
||||||
@@ -68,22 +53,22 @@
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32_t asdbgreg; /* 0x810 */
|
uint32_t asdbgreg; /* 0x810 */
|
||||||
uint32_t _0x814[0x31];
|
uint32_t reserved0[0x31];
|
||||||
uint32_t sdmmc1_clk_lpbk_control; /* 0x8D4 */
|
uint32_t sdmmc1_clk_lpbk_control; /* 0x8D4 */
|
||||||
uint32_t sdmmc3_clk_lpbk_control; /* 0x8D8 */
|
uint32_t sdmmc3_clk_lpbk_control; /* 0x8D8 */
|
||||||
uint32_t emmc2_pad_cfg_control; /* 0x8DC */
|
uint32_t emmc2_pad_cfg_control; /* 0x8DC */
|
||||||
uint32_t emmc4_pad_cfg_control; /* 0x8E0 */
|
uint32_t emmc4_pad_cfg_control; /* 0x8E0 */
|
||||||
uint32_t _0x8E4[0x6E];
|
uint32_t _todo0[0x6E];
|
||||||
uint32_t sdmmc1_pad_cfgpadctrl; /* 0xA98 */
|
uint32_t sdmmc1_pad_cfgpadctrl; /* 0xA98 */
|
||||||
uint32_t emmc2_pad_cfgpadctrl; /* 0xA9C */
|
uint32_t emmc2_pad_cfgpadctrl; /* 0xA9C */
|
||||||
uint32_t emmc2_pad_drv_type_cfgpadctrl; /* 0xAA0 */
|
uint32_t emmc2_pad_drv_type_cfgpadctrl; /* 0xAA0 */
|
||||||
uint32_t emmc2_pad_pupd_cfgpadctrl; /* 0xAA4 */
|
uint32_t emmc2_pad_pupd_cfgpadctrl; /* 0xAA4 */
|
||||||
uint32_t _0xAA8[0x03];
|
uint32_t _todo1[0x03];
|
||||||
uint32_t sdmmc3_pad_cfgpadctrl; /* 0xAB0 */
|
uint32_t sdmmc3_pad_cfgpadctrl; /* 0xAB0 */
|
||||||
uint32_t emmc4_pad_cfgpadctrl; /* 0xAB4 */
|
uint32_t emmc4_pad_cfgpadctrl; /* 0xAB4 */
|
||||||
uint32_t emmc4_pad_drv_type_cfgpadctrl; /* 0xAB8 */
|
uint32_t emmc4_pad_drv_type_cfgpadctrl; /* 0xAB8 */
|
||||||
uint32_t emmc4_pad_pupd_cfgpadctrl; /* 0xABC */
|
uint32_t emmc4_pad_pupd_cfgpadctrl; /* 0xABC */
|
||||||
uint32_t _0xAC0[0x2E];
|
uint32_t _todo2[0x2E];
|
||||||
uint32_t vgpio_gpio_mux_sel; /* 0xB74 */
|
uint32_t vgpio_gpio_mux_sel; /* 0xB74 */
|
||||||
uint32_t qspi_sck_lpbk_control; /* 0xB78 */
|
uint32_t qspi_sck_lpbk_control; /* 0xB78 */
|
||||||
} tegra_padctl_t;
|
} tegra_padctl_t;
|
||||||
139
fusee/fusee-primary/src/car.c
Normal file
139
fusee/fusee-primary/src/car.c
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018-2020 Atmosphère-NX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "car.h"
|
||||||
|
#include "timers.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
|
static inline uint32_t get_clk_source_reg(CarDevice dev) {
|
||||||
|
switch (dev) {
|
||||||
|
case CARDEVICE_UARTA: return 0x178;
|
||||||
|
case CARDEVICE_UARTB: return 0x17C;
|
||||||
|
case CARDEVICE_UARTC: return 0x1A0;
|
||||||
|
case CARDEVICE_I2C1: return 0x124;
|
||||||
|
case CARDEVICE_I2C5: return 0x128;
|
||||||
|
case CARDEVICE_TZRAM: return 0;
|
||||||
|
case CARDEVICE_SE: return 0x42C;
|
||||||
|
case CARDEVICE_HOST1X: return 0x180;
|
||||||
|
case CARDEVICE_TSEC: return 0x1F4;
|
||||||
|
case CARDEVICE_SOR_SAFE: return 0;
|
||||||
|
case CARDEVICE_SOR0: return 0;
|
||||||
|
case CARDEVICE_SOR1: return 0x410;
|
||||||
|
case CARDEVICE_KFUSE: return 0;
|
||||||
|
case CARDEVICE_CL_DVFS: return 0;
|
||||||
|
case CARDEVICE_CORESIGHT: return 0x1D4;
|
||||||
|
case CARDEVICE_ACTMON: return 0x3E8;
|
||||||
|
case CARDEVICE_BPMP: return 0;
|
||||||
|
default: generic_panic();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint32_t get_clk_source_val(CarDevice dev) {
|
||||||
|
switch (dev) {
|
||||||
|
case CARDEVICE_UARTA: return 0;
|
||||||
|
case CARDEVICE_UARTB: return 0;
|
||||||
|
case CARDEVICE_UARTC: return 0;
|
||||||
|
case CARDEVICE_I2C1: return 6;
|
||||||
|
case CARDEVICE_I2C5: return 6;
|
||||||
|
case CARDEVICE_TZRAM: return 0;
|
||||||
|
case CARDEVICE_SE: return 0;
|
||||||
|
case CARDEVICE_HOST1X: return 4;
|
||||||
|
case CARDEVICE_TSEC: return 0;
|
||||||
|
case CARDEVICE_SOR_SAFE: return 0;
|
||||||
|
case CARDEVICE_SOR0: return 0;
|
||||||
|
case CARDEVICE_SOR1: return 0;
|
||||||
|
case CARDEVICE_KFUSE: return 0;
|
||||||
|
case CARDEVICE_CL_DVFS: return 0;
|
||||||
|
case CARDEVICE_CORESIGHT: return 0;
|
||||||
|
case CARDEVICE_ACTMON: return 6;
|
||||||
|
case CARDEVICE_BPMP: return 0;
|
||||||
|
default: generic_panic();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint32_t get_clk_source_div(CarDevice dev) {
|
||||||
|
switch (dev) {
|
||||||
|
case CARDEVICE_UARTA: return 0;
|
||||||
|
case CARDEVICE_UARTB: return 0;
|
||||||
|
case CARDEVICE_UARTC: return 0;
|
||||||
|
case CARDEVICE_I2C1: return 0;
|
||||||
|
case CARDEVICE_I2C5: return 0;
|
||||||
|
case CARDEVICE_TZRAM: return 0;
|
||||||
|
case CARDEVICE_SE: return 0;
|
||||||
|
case CARDEVICE_HOST1X: return 3;
|
||||||
|
case CARDEVICE_TSEC: return 2;
|
||||||
|
case CARDEVICE_SOR_SAFE: return 0;
|
||||||
|
case CARDEVICE_SOR0: return 0;
|
||||||
|
case CARDEVICE_SOR1: return 2;
|
||||||
|
case CARDEVICE_KFUSE: return 0;
|
||||||
|
case CARDEVICE_CL_DVFS: return 0;
|
||||||
|
case CARDEVICE_CORESIGHT: return 4;
|
||||||
|
case CARDEVICE_ACTMON: return 0;
|
||||||
|
case CARDEVICE_BPMP: return 0;
|
||||||
|
default: generic_panic();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint32_t g_clk_reg_offsets[NUM_CAR_BANKS] = {0x010, 0x014, 0x018, 0x360, 0x364, 0x280, 0x298};
|
||||||
|
static uint32_t g_rst_reg_offsets[NUM_CAR_BANKS] = {0x004, 0x008, 0x00C, 0x358, 0x35C, 0x28C, 0x2A4};
|
||||||
|
|
||||||
|
void clk_enable(CarDevice dev) {
|
||||||
|
uint32_t clk_source_reg;
|
||||||
|
if ((clk_source_reg = get_clk_source_reg(dev))) {
|
||||||
|
MAKE_CAR_REG(clk_source_reg) = (get_clk_source_val(dev) << 29) | get_clk_source_div(dev);
|
||||||
|
}
|
||||||
|
MAKE_CAR_REG(g_clk_reg_offsets[dev >> 5]) |= BIT(dev & 0x1F);
|
||||||
|
}
|
||||||
|
|
||||||
|
void clk_disable(CarDevice dev) {
|
||||||
|
MAKE_CAR_REG(g_clk_reg_offsets[dev >> 5]) &= ~(BIT(dev & 0x1F));
|
||||||
|
}
|
||||||
|
|
||||||
|
void rst_enable(CarDevice dev) {
|
||||||
|
MAKE_CAR_REG(g_rst_reg_offsets[dev >> 5]) |= BIT(dev & 0x1F);
|
||||||
|
}
|
||||||
|
|
||||||
|
void rst_disable(CarDevice dev) {
|
||||||
|
MAKE_CAR_REG(g_rst_reg_offsets[dev >> 5]) &= ~(BIT(dev & 0x1F));
|
||||||
|
}
|
||||||
|
|
||||||
|
void clkrst_enable(CarDevice dev) {
|
||||||
|
clk_enable(dev);
|
||||||
|
rst_disable(dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
void clkrst_disable(CarDevice dev) {
|
||||||
|
rst_enable(dev);
|
||||||
|
clk_disable(dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
void clkrst_reboot(CarDevice dev) {
|
||||||
|
clkrst_disable(dev);
|
||||||
|
if (dev == CARDEVICE_KFUSE) {
|
||||||
|
/* Workaround for KFUSE clock. */
|
||||||
|
clk_enable(dev);
|
||||||
|
udelay(100);
|
||||||
|
rst_disable(dev);
|
||||||
|
udelay(200);
|
||||||
|
} else {
|
||||||
|
clkrst_enable(dev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void clkrst_enable_fuse_regs(bool enable) {
|
||||||
|
volatile tegra_car_t *car = car_get_regs();
|
||||||
|
car->misc_clk_enb = ((car->misc_clk_enb & 0xEFFFFFFF) | ((enable & 1) << 28));
|
||||||
|
}
|
||||||
505
fusee/fusee-primary/src/car.h
Normal file
505
fusee/fusee-primary/src/car.h
Normal file
@@ -0,0 +1,505 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018-2020 Atmosphère-NX
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
* version 2, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FUSEE_CAR_H
|
||||||
|
#define FUSEE_CAR_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#define CAR_BASE 0x60006000
|
||||||
|
#define MAKE_CAR_REG(n) MAKE_REG32(CAR_BASE + n)
|
||||||
|
|
||||||
|
#define CLK_L_SDMMC1 (1 << 14)
|
||||||
|
#define CLK_L_SDMMC2 (1 << 9)
|
||||||
|
#define CLK_U_SDMMC3 (1 << 5)
|
||||||
|
#define CLK_L_SDMMC4 (1 << 15)
|
||||||
|
|
||||||
|
#define CLK_SOURCE_MASK (0b111 << 29)
|
||||||
|
#define CLK_SOURCE_FIRST (0b000 << 29)
|
||||||
|
#define CLK_DIVIDER_MASK (0xff << 0)
|
||||||
|
#define CLK_DIVIDER_UNITY (0x00 << 0)
|
||||||
|
|
||||||
|
#define NUM_CAR_BANKS 7
|
||||||
|
|
||||||
|
/* Clock and reset devices. */
|
||||||
|
typedef enum {
|
||||||
|
CARDEVICE_UARTA = ((0 << 5) | 0x6),
|
||||||
|
CARDEVICE_UARTB = ((0 << 5) | 0x7),
|
||||||
|
CARDEVICE_UARTC = ((1 << 5) | 0x17),
|
||||||
|
CARDEVICE_I2C1 = ((0 << 5) | 0xC),
|
||||||
|
CARDEVICE_I2C5 = ((1 << 5) | 0xF),
|
||||||
|
CARDEVICE_TZRAM = ((3 << 5) | 0x1E),
|
||||||
|
CARDEVICE_SE = ((3 << 5) | 0x1F),
|
||||||
|
CARDEVICE_HOST1X = ((0 << 5) | 0x1C),
|
||||||
|
CARDEVICE_TSEC = ((2 << 5) | 0x13),
|
||||||
|
CARDEVICE_SOR_SAFE = ((6 << 5) | 0x1E),
|
||||||
|
CARDEVICE_SOR0 = ((5 << 5) | 0x16),
|
||||||
|
CARDEVICE_SOR1 = ((5 << 5) | 0x17),
|
||||||
|
CARDEVICE_KFUSE = ((1 << 5) | 0x8),
|
||||||
|
CARDEVICE_CL_DVFS = ((4 << 5) | 0x1B),
|
||||||
|
CARDEVICE_CORESIGHT = ((2 << 5) | 0x9),
|
||||||
|
CARDEVICE_ACTMON = ((3 << 5) | 0x17),
|
||||||
|
CARDEVICE_BPMP = ((0 << 5) | 0x1)
|
||||||
|
} CarDevice;
|
||||||
|
|
||||||
|
/* Clock/Reset Controller (CLK_RST_CONTROLLER_) regs */
|
||||||
|
typedef struct {
|
||||||
|
uint32_t rst_src; /* _RST_SOURCE_0, 0x00 */
|
||||||
|
|
||||||
|
/* _RST_DEVICES_L/H/U_0 0x4-0xc */
|
||||||
|
uint32_t rst_dev_l;
|
||||||
|
uint32_t rst_dev_h;
|
||||||
|
uint32_t rst_dev_u;
|
||||||
|
|
||||||
|
/* _CLK_OUT_ENB_L/H/U_0 0x10-0x18 */
|
||||||
|
uint32_t clk_out_enb_l;
|
||||||
|
uint32_t clk_out_enb_h;
|
||||||
|
uint32_t clk_out_enb_u;
|
||||||
|
|
||||||
|
uint32_t _0x1C;
|
||||||
|
uint32_t cclk_brst_pol; /* _CCLK_BURST_POLICY_0, 0x20 */
|
||||||
|
uint32_t super_cclk_div; /* _SUPER_CCLK_DIVIDER_0, 0x24 */
|
||||||
|
uint32_t sclk_brst_pol; /* _SCLK_BURST_POLICY_0, 0x28 */
|
||||||
|
uint32_t super_sclk_div; /* _SUPER_SCLK_DIVIDER_0, 0x2c */
|
||||||
|
uint32_t clk_sys_rate; /* _CLK_SYSTEM_RATE_0, 0x30 */
|
||||||
|
uint32_t prog_dly_clk; /* _PROG_DLY_CLK_0, 0x34 */
|
||||||
|
uint32_t aud_sync_clk_rate; /* _AUDIO_SYNC_CLK_RATE_0, 0x38 */
|
||||||
|
uint32_t _0x3C;
|
||||||
|
uint32_t cop_clk_skip_plcy; /* _COP_CLK_SKIP_POLICY_0, 0x40 */
|
||||||
|
uint32_t clk_mask_arm; /* _CLK_MASK_ARM_0, 0x44 */
|
||||||
|
uint32_t misc_clk_enb; /* _MISC_CLK_ENB_0, 0x48 */
|
||||||
|
uint32_t clk_cpu_cmplx; /* _CLK_CPU_CMPLX_0, 0x4c */
|
||||||
|
uint32_t osc_ctrl; /* _OSC_CTRL_0, 0x50 */
|
||||||
|
uint32_t pll_lfsr; /* _PLL_LFSR_0, 0x54 */
|
||||||
|
uint32_t osc_freq_det; /* _OSC_FREQ_DET_0, 0x58 */
|
||||||
|
uint32_t osc_freq_det_stat; /* _OSC_FREQ_DET_STATUS_0, 0x5c */
|
||||||
|
uint32_t _0x60[2];
|
||||||
|
uint32_t plle_ss_cntl; /* _PLLE_SS_CNTL_0, 0x68 */
|
||||||
|
uint32_t plle_misc1; /* _PLLE_MISC1_0, 0x6c */
|
||||||
|
uint32_t _0x70[4];
|
||||||
|
|
||||||
|
/* PLLC 0x80-0x8c */
|
||||||
|
uint32_t pllc_base;
|
||||||
|
uint32_t pllc_out;
|
||||||
|
uint32_t pllc_misc0;
|
||||||
|
uint32_t pllc_misc1;
|
||||||
|
|
||||||
|
/* PLLM 0x90-0x9c */
|
||||||
|
uint32_t pllm_base;
|
||||||
|
uint32_t pllm_out;
|
||||||
|
uint32_t pllm_misc1;
|
||||||
|
uint32_t pllm_misc2;
|
||||||
|
|
||||||
|
/* PLLP 0xa0-0xac */
|
||||||
|
uint32_t pllp_base;
|
||||||
|
uint32_t pllp_outa;
|
||||||
|
uint32_t pllp_outb;
|
||||||
|
uint32_t pllp_misc;
|
||||||
|
|
||||||
|
/* PLLA 0xb0-0xbc */
|
||||||
|
uint32_t plla_base;
|
||||||
|
uint32_t plla_out;
|
||||||
|
uint32_t plla_misc0;
|
||||||
|
uint32_t plla_misc1;
|
||||||
|
|
||||||
|
/* PLLU 0xc0-0xcc */
|
||||||
|
uint32_t pllu_base;
|
||||||
|
uint32_t pllu_out;
|
||||||
|
uint32_t pllu_misc1;
|
||||||
|
uint32_t pllu_misc2;
|
||||||
|
|
||||||
|
/* PLLD 0xd0-0xdc */
|
||||||
|
uint32_t plld_base;
|
||||||
|
uint32_t plld_out;
|
||||||
|
uint32_t plld_misc1;
|
||||||
|
uint32_t plld_misc2;
|
||||||
|
|
||||||
|
/* PLLX 0xe0-0xe4 */
|
||||||
|
uint32_t pllx_base;
|
||||||
|
uint32_t pllx_misc;
|
||||||
|
|
||||||
|
/* PLLE 0xe8-0xf4 */
|
||||||
|
uint32_t plle_base;
|
||||||
|
uint32_t plle_misc;
|
||||||
|
uint32_t plle_ss_cntl1;
|
||||||
|
uint32_t plle_ss_cntl2;
|
||||||
|
|
||||||
|
uint32_t lvl2_clk_gate_ovra; /* _LVL2_CLK_GATE_OVRA_0, 0xf8 */
|
||||||
|
uint32_t lvl2_clk_gate_ovrb; /* _LVL2_CLK_GATE_OVRB_0, 0xfc */
|
||||||
|
|
||||||
|
uint32_t clk_source_i2s2; /* _CLK_SOURCE_I2S2_0, 0x100 */
|
||||||
|
uint32_t clk_source_i2s3; /* _CLK_SOURCE_I2S3_0, 0x104 */
|
||||||
|
uint32_t clk_source_spdif_out; /* _CLK_SOURCE_SPDIF_OUT_0, 0x108 */
|
||||||
|
uint32_t clk_source_spdif_in; /* _CLK_SOURCE_SPDIF_IN_0, 0x10c */
|
||||||
|
uint32_t clk_source_pwm; /* _CLK_SOURCE_PWM_0, 0x110 */
|
||||||
|
uint32_t _0x114;
|
||||||
|
uint32_t clk_source_spi2; /* _CLK_SOURCE_SPI2_0, 0x118 */
|
||||||
|
uint32_t clk_source_spi3; /* _CLK_SOURCE_SPI3_0, 0x11c */
|
||||||
|
uint32_t _0x120;
|
||||||
|
uint32_t clk_source_i2c1; /* _CLK_SOURCE_I2C1_0, 0x124 */
|
||||||
|
uint32_t clk_source_i2c5; /* _CLK_SOURCE_I2C5_0, 0x128 */
|
||||||
|
uint32_t _0x12c[2];
|
||||||
|
uint32_t clk_source_spi1; /* _CLK_SOURCE_SPI1_0, 0x134 */
|
||||||
|
uint32_t clk_source_disp1; /* _CLK_SOURCE_DISP1_0, 0x138 */
|
||||||
|
uint32_t clk_source_disp2; /* _CLK_SOURCE_DISP2_0, 0x13c */
|
||||||
|
uint32_t _0x140;
|
||||||
|
uint32_t clk_source_isp; /* _CLK_SOURCE_ISP_0, 0x144 */
|
||||||
|
uint32_t clk_source_vi; /* _CLK_SOURCE_VI_0, 0x148 */
|
||||||
|
uint32_t _0x14c;
|
||||||
|
uint32_t clk_source_sdmmc1; /* _CLK_SOURCE_SDMMC1_0, 0x150 */
|
||||||
|
uint32_t clk_source_sdmmc2; /* _CLK_SOURCE_SDMMC2_0, 0x154 */
|
||||||
|
uint32_t _0x158[3];
|
||||||
|
uint32_t clk_source_sdmmc4; /* _CLK_SOURCE_SDMMC4_0, 0x164 */
|
||||||
|
uint32_t _0x168[4];
|
||||||
|
uint32_t clk_source_uarta; /* _CLK_SOURCE_UARTA_0, 0x178 */
|
||||||
|
uint32_t clk_source_uartb; /* _CLK_SOURCE_UARTB_0, 0x17c */
|
||||||
|
uint32_t clk_source_host1x; /* _CLK_SOURCE_HOST1X_0, 0x180 */
|
||||||
|
uint32_t _0x184[5];
|
||||||
|
uint32_t clk_source_i2c2; /* _CLK_SOURCE_I2C2_0, 0x198 */
|
||||||
|
uint32_t clk_source_emc; /* _CLK_SOURCE_EMC_0, 0x19c */
|
||||||
|
uint32_t clk_source_uartc; /* _CLK_SOURCE_UARTC_0, 0x1a0 */
|
||||||
|
uint32_t _0x1a4;
|
||||||
|
uint32_t clk_source_vi_sensor; /* _CLK_SOURCE_VI_SENSOR_0, 0x1a8 */
|
||||||
|
uint32_t _0x1ac[2];
|
||||||
|
uint32_t clk_source_spi4; /* _CLK_SOURCE_SPI4_0, 0x1b4 */
|
||||||
|
uint32_t clk_source_i2c3; /* _CLK_SOURCE_I2C3_0, 0x1b8 */
|
||||||
|
uint32_t clk_source_sdmmc3; /* _CLK_SOURCE_SDMMC3_0, 0x1bc */
|
||||||
|
uint32_t clk_source_uartd; /* _CLK_SOURCE_UARTD_0, 0x1c0 */
|
||||||
|
uint32_t _0x1c4[2];
|
||||||
|
uint32_t clk_source_owr; /* _CLK_SOURCE_OWR_0, 0x1cc */
|
||||||
|
uint32_t _0x1d0;
|
||||||
|
uint32_t clk_source_csite; /* _CLK_SOURCE_CSITE_0, 0x1d4 */
|
||||||
|
uint32_t clk_source_i2s1; /* _CLK_SOURCE_I2S1_0, 0x1d8 */
|
||||||
|
uint32_t clk_source_dtv; /* _CLK_SOURCE_DTV_0, 0x1dc */
|
||||||
|
uint32_t _0x1e0[5];
|
||||||
|
uint32_t clk_source_tsec; /* _CLK_SOURCE_TSEC_0, 0x1f4 */
|
||||||
|
uint32_t _0x1f8;
|
||||||
|
|
||||||
|
uint32_t clk_spare2; /* _CLK_SPARE2_0, 0x1fc */
|
||||||
|
uint32_t _0x200[32];
|
||||||
|
|
||||||
|
uint32_t clk_out_enb_x; /* _CLK_OUT_ENB_X_0, 0x280 */
|
||||||
|
uint32_t clk_enb_x_set; /* _CLK_ENB_X_SET_0, 0x284 */
|
||||||
|
uint32_t clk_enb_x_clr; /* _CLK_ENB_X_CLR_0, 0x288 */
|
||||||
|
|
||||||
|
uint32_t rst_devices_x; /* _RST_DEVICES_X_0, 0x28c */
|
||||||
|
uint32_t rst_dev_x_set; /* _RST_DEV_X_SET_0, 0x290 */
|
||||||
|
uint32_t rst_dev_x_clr; /* _RST_DEV_X_CLR_0, 0x294 */
|
||||||
|
|
||||||
|
uint32_t clk_out_enb_y; /* _CLK_OUT_ENB_Y_0, 0x298 */
|
||||||
|
uint32_t clk_enb_y_set; /* _CLK_ENB_Y_SET_0, 0x29c */
|
||||||
|
uint32_t clk_enb_y_clr; /* _CLK_ENB_Y_CLR_0, 0x2a0 */
|
||||||
|
|
||||||
|
uint32_t rst_devices_y; /* _RST_DEVICES_Y_0, 0x2a4 */
|
||||||
|
uint32_t rst_dev_y_set; /* _RST_DEV_Y_SET_0, 0x2a8 */
|
||||||
|
uint32_t rst_dev_y_clr; /* _RST_DEV_Y_CLR_0, 0x2ac */
|
||||||
|
|
||||||
|
uint32_t _0x2b0[17];
|
||||||
|
uint32_t dfll_base; /* _DFLL_BASE_0, 0x2f4 */
|
||||||
|
uint32_t _0x2f8[2];
|
||||||
|
|
||||||
|
/* _RST_DEV_L/H/U_SET_0 0x300-0x314 */
|
||||||
|
uint32_t rst_dev_l_set;
|
||||||
|
uint32_t rst_dev_l_clr;
|
||||||
|
uint32_t rst_dev_h_set;
|
||||||
|
uint32_t rst_dev_h_clr;
|
||||||
|
uint32_t rst_dev_u_set;
|
||||||
|
uint32_t rst_dev_u_clr;
|
||||||
|
|
||||||
|
uint32_t _0x318[2];
|
||||||
|
|
||||||
|
/* _CLK_ENB_L/H/U_CLR_0 0x320-0x334 */
|
||||||
|
uint32_t clk_enb_l_set;
|
||||||
|
uint32_t clk_enb_l_clr;
|
||||||
|
uint32_t clk_enb_h_set;
|
||||||
|
uint32_t clk_enb_h_clr;
|
||||||
|
uint32_t clk_enb_u_set;
|
||||||
|
uint32_t clk_enb_u_clr;
|
||||||
|
|
||||||
|
uint32_t _0x338;
|
||||||
|
uint32_t ccplex_pg_sm_ovrd; /* _CCPLEX_PG_SM_OVRD_0, 0x33c */
|
||||||
|
uint32_t rst_cpu_cmplx_set; /* _RST_CPU_CMPLX_SET_0, 0x340 */
|
||||||
|
uint32_t rst_cpu_cmplx_clr; /* _RST_CPU_CMPLX_CLR_0, 0x344 */
|
||||||
|
|
||||||
|
/* Additional (T30) registers */
|
||||||
|
uint32_t clk_cpu_cmplx_set; /* _CLK_CPU_CMPLX_SET_0, 0x348 */
|
||||||
|
uint32_t clk_cpu_cmplx_clr; /* _CLK_CPU_CMPLX_SET_0, 0x34c */
|
||||||
|
|
||||||
|
uint32_t _0x350[2];
|
||||||
|
uint32_t rst_dev_v; /* _RST_DEVICES_V_0, 0x358 */
|
||||||
|
uint32_t rst_dev_w; /* _RST_DEVICES_W_0, 0x35c */
|
||||||
|
uint32_t clk_out_enb_v; /* _CLK_OUT_ENB_V_0, 0x360 */
|
||||||
|
uint32_t clk_out_enb_w; /* _CLK_OUT_ENB_W_0, 0x364 */
|
||||||
|
uint32_t cclkg_brst_pol; /* _CCLKG_BURST_POLICY_0, 0x368 */
|
||||||
|
uint32_t super_cclkg_div; /* _SUPER_CCLKG_DIVIDER_0, 0x36c */
|
||||||
|
uint32_t cclklp_brst_pol; /* _CCLKLP_BURST_POLICY_0, 0x370 */
|
||||||
|
uint32_t super_cclkp_div; /* _SUPER_CCLKLP_DIVIDER_0, 0x374 */
|
||||||
|
uint32_t clk_cpug_cmplx; /* _CLK_CPUG_CMPLX_0, 0x378 */
|
||||||
|
uint32_t clk_cpulp_cmplx; /* _CLK_CPULP_CMPLX_0, 0x37c */
|
||||||
|
uint32_t cpu_softrst_ctrl; /* _CPU_SOFTRST_CTRL_0, 0x380 */
|
||||||
|
uint32_t cpu_softrst_ctrl1; /* _CPU_SOFTRST_CTRL1_0, 0x384 */
|
||||||
|
uint32_t cpu_softrst_ctrl2; /* _CPU_SOFTRST_CTRL2_0, 0x388 */
|
||||||
|
uint32_t _0x38c[5];
|
||||||
|
uint32_t lvl2_clk_gate_ovrc; /* _LVL2_CLK_GATE_OVRC, 0x3a0 */
|
||||||
|
uint32_t lvl2_clk_gate_ovrd; /* _LVL2_CLK_GATE_OVRD, 0x3a4 */
|
||||||
|
uint32_t _0x3a8[2];
|
||||||
|
|
||||||
|
uint32_t _0x3b0;
|
||||||
|
uint32_t clk_source_mselect; /* _CLK_SOURCE_MSELECT_0, 0x3b4 */
|
||||||
|
uint32_t clk_source_tsensor; /* _CLK_SOURCE_TSENSOR_0, 0x3b8 */
|
||||||
|
uint32_t clk_source_i2s4; /* _CLK_SOURCE_I2S4_0, 0x3bc */
|
||||||
|
uint32_t clk_source_i2s5; /* _CLK_SOURCE_I2S5_0, 0x3c0 */
|
||||||
|
uint32_t clk_source_i2c4; /* _CLK_SOURCE_I2C4_0, 0x3c4 */
|
||||||
|
uint32_t _0x3c8[2];
|
||||||
|
uint32_t clk_source_ahub; /* _CLK_SOURCE_AHUB_0, 0x3d0 */
|
||||||
|
uint32_t _0x3d4[4];
|
||||||
|
uint32_t clk_source_hda2codec_2x; /* _CLK_SOURCE_HDA2CODEC_2X_0, 0x3e4 */
|
||||||
|
uint32_t clk_source_actmon; /* _CLK_SOURCE_ACTMON_0, 0x3e8 */
|
||||||
|
uint32_t clk_source_extperiph1; /* _CLK_SOURCE_EXTPERIPH1_0, 0x3ec */
|
||||||
|
uint32_t clk_source_extperiph2; /* _CLK_SOURCE_EXTPERIPH2_0, 0x3f0 */
|
||||||
|
uint32_t clk_source_extperiph3; /* _CLK_SOURCE_EXTPERIPH3_0, 0x3f4 */
|
||||||
|
uint32_t _0x3f8;
|
||||||
|
uint32_t clk_source_i2c_slow; /* _CLK_SOURCE_I2C_SLOW_0, 0x3fc */
|
||||||
|
uint32_t clk_source_sys; /* _CLK_SOURCE_SYS_0, 0x400 */
|
||||||
|
uint32_t clk_source_ispb; /* _CLK_SOURCE_ISPB_0, 0x404 */
|
||||||
|
uint32_t _0x408[2];
|
||||||
|
uint32_t clk_source_sor1; /* _CLK_SOURCE_SOR1_0, 0x410 */
|
||||||
|
uint32_t clk_source_sor0; /* _CLK_SOURCE_SOR0_0, 0x414 */
|
||||||
|
uint32_t _0x418[2];
|
||||||
|
uint32_t clk_source_sata_oob; /* _CLK_SOURCE_SATA_OOB_0, 0x420 */
|
||||||
|
uint32_t clk_source_sata; /* _CLK_SOURCE_SATA_0, 0x424 */
|
||||||
|
uint32_t clk_source_hda; /* _CLK_SOURCE_HDA_0, 0x428 */
|
||||||
|
uint32_t _0x42c;
|
||||||
|
|
||||||
|
/* _RST_DEV_V/W_SET_0 0x430-0x43c */
|
||||||
|
uint32_t rst_dev_v_set;
|
||||||
|
uint32_t rst_dev_v_clr;
|
||||||
|
uint32_t rst_dev_w_set;
|
||||||
|
uint32_t rst_dev_w_clr;
|
||||||
|
|
||||||
|
/* _CLK_ENB_V/W_CLR_0 0x440-0x44c */
|
||||||
|
uint32_t clk_enb_v_set;
|
||||||
|
uint32_t clk_enb_v_clr;
|
||||||
|
uint32_t clk_enb_w_set;
|
||||||
|
uint32_t clk_enb_w_clr;
|
||||||
|
|
||||||
|
/* Additional (T114+) registers */
|
||||||
|
uint32_t rst_cpug_cmplx_set; /* _RST_CPUG_CMPLX_SET_0, 0x450 */
|
||||||
|
uint32_t rst_cpug_cmplx_clr; /* _RST_CPUG_CMPLX_CLR_0, 0x454 */
|
||||||
|
uint32_t rst_cpulp_cmplx_set; /* _RST_CPULP_CMPLX_SET_0, 0x458 */
|
||||||
|
uint32_t rst_cpulp_cmplx_clr; /* _RST_CPULP_CMPLX_CLR_0, 0x45c */
|
||||||
|
uint32_t clk_cpug_cmplx_set; /* _CLK_CPUG_CMPLX_SET_0, 0x460 */
|
||||||
|
uint32_t clk_cpug_cmplx_clr; /* _CLK_CPUG_CMPLX_CLR_0, 0x464 */
|
||||||
|
uint32_t clk_cpulp_cmplx_set; /* _CLK_CPULP_CMPLX_SET_0, 0x468 */
|
||||||
|
uint32_t clk_cpulp_cmplx_clr; /* _CLK_CPULP_CMPLX_CLR_0, 0x46c */
|
||||||
|
uint32_t cpu_cmplx_status; /* _CPU_CMPLX_STATUS_0, 0x470 */
|
||||||
|
uint32_t _0x474;
|
||||||
|
uint32_t intstatus; /* _INTSTATUS_0, 0x478 */
|
||||||
|
uint32_t intmask; /* _INTMASK_0, 0x47c */
|
||||||
|
uint32_t utmip_pll_cfg0; /* _UTMIP_PLL_CFG0_0, 0x480 */
|
||||||
|
uint32_t utmip_pll_cfg1; /* _UTMIP_PLL_CFG1_0, 0x484 */
|
||||||
|
uint32_t utmip_pll_cfg2; /* _UTMIP_PLL_CFG2_0, 0x488 */
|
||||||
|
|
||||||
|
uint32_t plle_aux; /* _PLLE_AUX_0, 0x48c */
|
||||||
|
uint32_t sata_pll_cfg0; /* _SATA_PLL_CFG0_0, 0x490 */
|
||||||
|
uint32_t sata_pll_cfg1; /* _SATA_PLL_CFG1_0, 0x494 */
|
||||||
|
uint32_t pcie_pll_cfg0; /* _PCIE_PLL_CFG0_0, 0x498 */
|
||||||
|
|
||||||
|
uint32_t prog_audio_dly_clk; /* _PROG_AUDIO_DLY_CLK_0, 0x49c */
|
||||||
|
uint32_t audio_sync_clk_i2s0; /* _AUDIO_SYNC_CLK_I2S0_0, 0x4a0 */
|
||||||
|
uint32_t audio_sync_clk_i2s1; /* _AUDIO_SYNC_CLK_I2S1_0, 0x4a4 */
|
||||||
|
uint32_t audio_sync_clk_i2s2; /* _AUDIO_SYNC_CLK_I2S2_0, 0x4a8 */
|
||||||
|
uint32_t audio_sync_clk_i2s3; /* _AUDIO_SYNC_CLK_I2S3_0, 0x4ac */
|
||||||
|
uint32_t audio_sync_clk_i2s4; /* _AUDIO_SYNC_CLK_I2S4_0, 0x4b0 */
|
||||||
|
uint32_t audio_sync_clk_spdif; /* _AUDIO_SYNC_CLK_SPDIF_0, 0x4b4 */
|
||||||
|
|
||||||
|
uint32_t plld2_base; /* _PLLD2_BASE_0, 0x4b8 */
|
||||||
|
uint32_t plld2_misc; /* _PLLD2_MISC_0, 0x4bc */
|
||||||
|
uint32_t utmip_pll_cfg3; /* _UTMIP_PLL_CFG3_0, 0x4c0 */
|
||||||
|
uint32_t pllrefe_base; /* _PLLREFE_BASE_0, 0x4c4 */
|
||||||
|
uint32_t pllrefe_misc; /* _PLLREFE_MISC_0, 0x4c8 */
|
||||||
|
uint32_t pllrefe_out; /* _PLLREFE_OUT_0, 0x4cc */
|
||||||
|
uint32_t cpu_finetrim_byp; /* _CPU_FINETRIM_BYP_0, 0x4d0 */
|
||||||
|
uint32_t cpu_finetrim_select; /* _CPU_FINETRIM_SELECT_0, 0x4d4 */
|
||||||
|
uint32_t cpu_finetrim_dr; /* _CPU_FINETRIM_DR_0, 0x4d8 */
|
||||||
|
uint32_t cpu_finetrim_df; /* _CPU_FINETRIM_DF_0, 0x4dc */
|
||||||
|
uint32_t cpu_finetrim_f; /* _CPU_FINETRIM_F_0, 0x4e0 */
|
||||||
|
uint32_t cpu_finetrim_r; /* _CPU_FINETRIM_R_0, 0x4e4 */
|
||||||
|
uint32_t pllc2_base; /* _PLLC2_BASE_0, 0x4e8 */
|
||||||
|
uint32_t pllc2_misc0; /* _PLLC2_MISC_0_0, 0x4ec */
|
||||||
|
uint32_t pllc2_misc1; /* _PLLC2_MISC_1_0, 0x4f0 */
|
||||||
|
uint32_t pllc2_misc2; /* _PLLC2_MISC_2_0, 0x4f4 */
|
||||||
|
uint32_t pllc2_misc3; /* _PLLC2_MISC_3_0, 0x4f8 */
|
||||||
|
uint32_t pllc3_base; /* _PLLC3_BASE_0, 0x4fc */
|
||||||
|
uint32_t pllc3_misc0; /* _PLLC3_MISC_0_0, 0x500 */
|
||||||
|
uint32_t pllc3_misc1; /* _PLLC3_MISC_1_0, 0x504 */
|
||||||
|
uint32_t pllc3_misc2; /* _PLLC3_MISC_2_0, 0x508 */
|
||||||
|
uint32_t pllc3_misc3; /* _PLLC3_MISC_3_0, 0x50c */
|
||||||
|
uint32_t pllx_misc1; /* _PLLX_MISC_1_0, 0x510 */
|
||||||
|
uint32_t pllx_misc2; /* _PLLX_MISC_2_0, 0x514 */
|
||||||
|
uint32_t pllx_misc3; /* _PLLX_MISC_3_0, 0x518 */
|
||||||
|
uint32_t xusbio_pll_cfg0; /* _XUSBIO_PLL_CFG0_0, 0x51c */
|
||||||
|
uint32_t xusbio_pll_cfg1; /* _XUSBIO_PLL_CFG0_1, 0x520 */
|
||||||
|
uint32_t plle_aux1; /* _PLLE_AUX1_0, 0x524 */
|
||||||
|
uint32_t pllp_reshift; /* _PLLP_RESHIFT_0, 0x528 */
|
||||||
|
uint32_t utmipll_hw_pwrdn_cfg0; /* _UTMIPLL_HW_PWRDN_CFG0_0, 0x52c */
|
||||||
|
uint32_t pllu_hw_pwrdn_cfg0; /* _PLLU_HW_PWRDN_CFG0_0, 0x530 */
|
||||||
|
uint32_t xusb_pll_cfg0; /* _XUSB_PLL_CFG0_0, 0x534 */
|
||||||
|
uint32_t _0x538;
|
||||||
|
uint32_t clk_cpu_misc; /* _CLK_CPU_MISC_0, 0x53c */
|
||||||
|
uint32_t clk_cpug_misc; /* _CLK_CPUG_MISC_0, 0x540 */
|
||||||
|
uint32_t clk_cpulp_misc; /* _CLK_CPULP_MISC_0, 0x544 */
|
||||||
|
uint32_t pllx_hw_ctrl_cfg; /* _PLLX_HW_CTRL_CFG_0, 0x548 */
|
||||||
|
uint32_t pllx_sw_ramp_cfg; /* _PLLX_SW_RAMP_CFG_0, 0x54c */
|
||||||
|
uint32_t pllx_hw_ctrl_status; /* _PLLX_HW_CTRL_STATUS_0, 0x550 */
|
||||||
|
uint32_t lvl2_clk_gate_ovre; /* _LVL2_CLK_GATE_OVRE, 0x554 */
|
||||||
|
uint32_t super_gr3d_clk_div; /* _SUPER_GR3D_CLK_DIVIDER_0, 0x558 */
|
||||||
|
uint32_t spare_reg0; /* _SPARE_REG0_0, 0x55c */
|
||||||
|
uint32_t audio_sync_clk_dmic1; /* _AUDIO_SYNC_CLK_DMIC1_0, 0x560 */
|
||||||
|
uint32_t audio_sync_clk_dmic2; /* _AUDIO_SYNC_CLK_DMIC2_0, 0x564 */
|
||||||
|
|
||||||
|
uint32_t _0x568[2];
|
||||||
|
uint32_t plld2_ss_cfg; /* _PLLD2_SS_CFG, 0x570 */
|
||||||
|
uint32_t plld2_ss_ctrl1; /* _PLLD2_SS_CTRL1_0, 0x574 */
|
||||||
|
uint32_t plld2_ss_ctrl2; /* _PLLD2_SS_CTRL2_0, 0x578 */
|
||||||
|
uint32_t _0x57c[5];
|
||||||
|
|
||||||
|
uint32_t plldp_base; /* _PLLDP_BASE, 0x590*/
|
||||||
|
uint32_t plldp_misc; /* _PLLDP_MISC, 0x594 */
|
||||||
|
uint32_t plldp_ss_cfg; /* _PLLDP_SS_CFG, 0x598 */
|
||||||
|
uint32_t plldp_ss_ctrl1; /* _PLLDP_SS_CTRL1_0, 0x59c */
|
||||||
|
uint32_t plldp_ss_ctrl2; /* _PLLDP_SS_CTRL2_0, 0x5a0 */
|
||||||
|
uint32_t pllc4_base; /* _PLLC4_BASE_0, 0x5a4 */
|
||||||
|
uint32_t pllc4_misc; /* _PLLC4_MISC_0, 0x5a8 */
|
||||||
|
uint32_t _0x5ac[6];
|
||||||
|
uint32_t clk_spare0; /* _CLK_SPARE0_0, 0x5c4 */
|
||||||
|
uint32_t clk_spare1; /* _CLK_SPARE1_0, 0x5c8 */
|
||||||
|
uint32_t gpu_isob_ctrl; /* _GPU_ISOB_CTRL_0, 0x5cc */
|
||||||
|
uint32_t pllc_misc2; /* _PLLC_MISC_2_0, 0x5d0 */
|
||||||
|
uint32_t pllc_misc3; /* _PLLC_MISC_3_0, 0x5d4 */
|
||||||
|
uint32_t plla_misc2; /* _PLLA_MISC2_0, 0x5d8 */
|
||||||
|
uint32_t _0x5dc[2];
|
||||||
|
uint32_t pllc4_out; /* _PLLC4_OUT_0, 0x5e4 */
|
||||||
|
uint32_t pllmb_base; /* _PLLMB_BASE_0, 0x5e8 */
|
||||||
|
uint32_t pllmb_misc1; /* _PLLMB_MISC1_0, 0x5ec */
|
||||||
|
uint32_t pllx_misc4; /* _PLLX_MISC_4_0, 0x5f0 */
|
||||||
|
uint32_t pllx_misc5; /* _PLLX_MISC_5_0, 0x5f4 */
|
||||||
|
uint32_t _0x5f8[2];
|
||||||
|
|
||||||
|
uint32_t clk_source_xusb_core_host; /* _CLK_SOURCE_XUSB_CORE_HOST_0, 0x600 */
|
||||||
|
uint32_t clk_source_xusb_falcon; /* _CLK_SOURCE_XUSB_FALCON_0, 0x604 */
|
||||||
|
uint32_t clk_source_xusb_fs; /* _CLK_SOURCE_XUSB_FS_0, 0x608 */
|
||||||
|
uint32_t clk_source_xusb_core_dev; /* _CLK_SOURCE_XUSB_CORE_DEV_0, 0x60c */
|
||||||
|
uint32_t clk_source_xusb_ss; /* _CLK_SOURCE_XUSB_SS_0, 0x610 */
|
||||||
|
uint32_t clk_source_cilab; /* _CLK_SOURCE_CILAB_0, 0x614 */
|
||||||
|
uint32_t clk_source_cilcd; /* _CLK_SOURCE_CILCD_0, 0x618 */
|
||||||
|
uint32_t clk_source_cilef; /* _CLK_SOURCE_CILEF_0, 0x61c */
|
||||||
|
uint32_t clk_source_dsia_lp; /* _CLK_SOURCE_DSIA_LP_0, 0x620 */
|
||||||
|
uint32_t clk_source_dsib_lp; /* _CLK_SOURCE_DSIB_LP_0, 0x624 */
|
||||||
|
uint32_t clk_source_entropy; /* _CLK_SOURCE_ENTROPY_0, 0x628 */
|
||||||
|
uint32_t clk_source_dvfs_ref; /* _CLK_SOURCE_DVFS_REF_0, 0x62c */
|
||||||
|
uint32_t clk_source_dvfs_soc; /* _CLK_SOURCE_DVFS_SOC_0, 0x630 */
|
||||||
|
uint32_t _0x634[3];
|
||||||
|
uint32_t clk_source_emc_latency; /* _CLK_SOURCE_EMC_LATENCY_0, 0x640 */
|
||||||
|
uint32_t clk_source_soc_therm; /* _CLK_SOURCE_SOC_THERM_0, 0x644 */
|
||||||
|
uint32_t _0x648;
|
||||||
|
uint32_t clk_source_dmic1; /* _CLK_SOURCE_DMIC1_0, 0x64c */
|
||||||
|
uint32_t clk_source_dmic2; /* _CLK_SOURCE_DMIC2_0, 0x650 */
|
||||||
|
uint32_t _0x654;
|
||||||
|
uint32_t clk_source_vi_sensor2; /* _CLK_SOURCE_VI_SENSOR2_0, 0x658 */
|
||||||
|
uint32_t clk_source_i2c6; /* _CLK_SOURCE_I2C6_0, 0x65c */
|
||||||
|
uint32_t clk_source_mipibif; /* _CLK_SOURCE_MIPIBIF_0, 0x660 */
|
||||||
|
uint32_t clk_source_emc_dll; /* _CLK_SOURCE_EMC_DLL_0, 0x664 */
|
||||||
|
uint32_t _0x668;
|
||||||
|
uint32_t clk_source_uart_fst_mipi_cal; /* _CLK_SOURCE_UART_FST_MIPI_CAL_0, 0x66c */
|
||||||
|
uint32_t _0x670[2];
|
||||||
|
uint32_t clk_source_vic; /* _CLK_SOURCE_VIC_0, 0x678 */
|
||||||
|
|
||||||
|
uint32_t pllp_outc; /* _PLLP_OUTC_0, 0x67c */
|
||||||
|
uint32_t pllp_misc1; /* _PLLP_MISC1_0, 0x680 */
|
||||||
|
uint32_t _0x684[2];
|
||||||
|
uint32_t emc_div_clk_shaper_ctrl; /* _EMC_DIV_CLK_SHAPER_CTRL_0, 0x68c */
|
||||||
|
uint32_t emc_pllc_shaper_ctrl; /* _EMC_PLLC_SHAPER_CTRL_0, 0x690 */
|
||||||
|
|
||||||
|
uint32_t clk_source_sdmmc_legacy_tm; /* _CLK_SOURCE_SDMMC_LEGACY_TM_0, 0x694 */
|
||||||
|
uint32_t clk_source_nvdec; /* _CLK_SOURCE_NVDEC_0, 0x698 */
|
||||||
|
uint32_t clk_source_nvjpg; /* _CLK_SOURCE_NVJPG_0, 0x69c */
|
||||||
|
uint32_t clk_source_nvenc; /* _CLK_SOURCE_NVENC_0, 0x6a0 */
|
||||||
|
|
||||||
|
uint32_t plla1_base; /* _PLLA1_BASE_0, 0x6a4 */
|
||||||
|
uint32_t plla1_misc0; /* _PLLA1_MISC_0_0, 0x6a8 */
|
||||||
|
uint32_t plla1_misc1; /* _PLLA1_MISC_1_0, 0x6ac */
|
||||||
|
uint32_t plla1_misc2; /* _PLLA1_MISC_2_0, 0x6b0 */
|
||||||
|
uint32_t plla1_misc3; /* _PLLA1_MISC_3_0, 0x6b4 */
|
||||||
|
uint32_t audio_sync_clk_dmic3; /* _AUDIO_SYNC_CLK_DMIC3_0, 0x6b8 */
|
||||||
|
|
||||||
|
uint32_t clk_source_dmic3; /* _CLK_SOURCE_DMIC3_0, 0x6bc */
|
||||||
|
uint32_t clk_source_ape; /* _CLK_SOURCE_APE_0, 0x6c0 */
|
||||||
|
uint32_t clk_source_qspi; /* _CLK_SOURCE_QSPI_0, 0x6c4 */
|
||||||
|
uint32_t clk_source_vi_i2c; /* _CLK_SOURCE_VI_I2C_0, 0x6c8 */
|
||||||
|
uint32_t clk_source_usb2_hsic_trk; /* _CLK_SOURCE_USB2_HSIC_TRK_0, 0x6cc */
|
||||||
|
uint32_t clk_source_pex_sata_usb_rx_byp; /* _CLK_SOURCE_PEX_SATA_USB_RX_BYP_0, 0x6d0 */
|
||||||
|
uint32_t clk_source_maud; /* _CLK_SOURCE_MAUD_0, 0x6d4 */
|
||||||
|
uint32_t clk_source_tsecb; /* _CLK_SOURCE_TSECB_0, 0x6d8 */
|
||||||
|
|
||||||
|
uint32_t clk_cpug_misc1; /* _CLK_CPUG_MISC1_0, 0x6dc */
|
||||||
|
uint32_t aclk_burst_policy; /* _ACLK_BURST_POLICY_0, 0x6e0 */
|
||||||
|
uint32_t super_aclk_divider; /* _SUPER_ACLK_DIVIDER_0, 0x6e4 */
|
||||||
|
|
||||||
|
uint32_t nvenc_super_clk_divider; /* _NVENC_SUPER_CLK_DIVIDER_0, 0x6e8 */
|
||||||
|
uint32_t vi_super_clk_divider; /* _VI_SUPER_CLK_DIVIDER_0, 0x6ec */
|
||||||
|
uint32_t vic_super_clk_divider; /* _VIC_SUPER_CLK_DIVIDER_0, 0x6f0 */
|
||||||
|
uint32_t nvdec_super_clk_divider; /* _NVDEC_SUPER_CLK_DIVIDER_0, 0x6f4 */
|
||||||
|
uint32_t isp_super_clk_divider; /* _ISP_SUPER_CLK_DIVIDER_0, 0x6f8 */
|
||||||
|
uint32_t ispb_super_clk_divider; /* _ISPB_SUPER_CLK_DIVIDER_0, 0x6fc */
|
||||||
|
uint32_t nvjpg_super_clk_divider; /* _NVJPG_SUPER_CLK_DIVIDER_0, 0x700 */
|
||||||
|
uint32_t se_super_clk_divider; /* _SE_SUPER_CLK_DIVIDER_0, 0x704 */
|
||||||
|
uint32_t tsec_super_clk_divider; /* _TSEC_SUPER_CLK_DIVIDER_0, 0x708 */
|
||||||
|
uint32_t tsecb_super_clk_divider; /* _TSECB_SUPER_CLK_DIVIDER_0, 0x70c */
|
||||||
|
|
||||||
|
uint32_t clk_source_uartape; /* _CLK_SOURCE_UARTAPE_0, 0x710 */
|
||||||
|
uint32_t clk_cpug_misc2; /* _CLK_CPUG_MISC2_0, 0x714 */
|
||||||
|
uint32_t clk_source_dbgapb; /* _CLK_SOURCE_DBGAPB_0, 0x718 */
|
||||||
|
uint32_t clk_ccplex_cc4_ret_clk_enb; /* _CLK_CCPLEX_CC4_RET_CLK_ENB_0, 0x71c */
|
||||||
|
uint32_t actmon_cpu_clk; /* _ACTMON_CPU_CLK_0, 0x720 */
|
||||||
|
uint32_t clk_source_emc_safe; /* _CLK_SOURCE_EMC_SAFE_0, 0x724 */
|
||||||
|
uint32_t sdmmc2_pllc4_out0_shaper_ctrl; /* _SDMMC2_PLLC4_OUT0_SHAPER_CTRL_0, 0x728 */
|
||||||
|
uint32_t sdmmc2_pllc4_out1_shaper_ctrl; /* _SDMMC2_PLLC4_OUT1_SHAPER_CTRL_0, 0x72c */
|
||||||
|
uint32_t sdmmc2_pllc4_out2_shaper_ctrl; /* _SDMMC2_PLLC4_OUT2_SHAPER_CTRL_0, 0x730 */
|
||||||
|
uint32_t sdmmc2_div_clk_shaper_ctrl; /* _SDMMC2_DIV_CLK_SHAPER_CTRL_0, 0x734 */
|
||||||
|
uint32_t sdmmc4_pllc4_out0_shaper_ctrl; /* _SDMMC4_PLLC4_OUT0_SHAPER_CTRL_0, 0x738 */
|
||||||
|
uint32_t sdmmc4_pllc4_out1_shaper_ctrl; /* _SDMMC4_PLLC4_OUT1_SHAPER_CTRL_0, 0x73c */
|
||||||
|
uint32_t sdmmc4_pllc4_out2_shaper_ctrl; /* _SDMMC4_PLLC4_OUT2_SHAPER_CTRL_0, 0x740 */
|
||||||
|
uint32_t sdmmc4_div_clk_shaper_ctrl; /* _SDMMC4_DIV_CLK_SHAPER_CTRL_0, 0x744 */
|
||||||
|
} tegra_car_t;
|
||||||
|
|
||||||
|
static inline volatile tegra_car_t *car_get_regs(void) {
|
||||||
|
return (volatile tegra_car_t *)CAR_BASE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void clk_enable(CarDevice dev);
|
||||||
|
void clk_disable(CarDevice dev);
|
||||||
|
void rst_enable(CarDevice dev);
|
||||||
|
void rst_disable(CarDevice dev);
|
||||||
|
|
||||||
|
void clkrst_enable(CarDevice dev);
|
||||||
|
void clkrst_disable(CarDevice dev);
|
||||||
|
void clkrst_reboot(CarDevice dev);
|
||||||
|
|
||||||
|
void clkrst_enable_fuse_regs(bool enable);
|
||||||
|
|
||||||
|
#endif
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user