summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorAlice Guo <alice.guo@nxp.com>2022-07-26 11:40:59 +0300
committerStefano Babic <sbabic@denx.de>2022-07-26 12:29:01 +0300
commit31b3ca5527dce8eed136b0dc30026cb24fac6eb1 (patch)
treeb20007067848f2021cd937508dc458b3ce3ce246 /drivers
parent5d78ff733d647e694e803f87f2645a45229d1413 (diff)
downloadu-boot-31b3ca5527dce8eed136b0dc30026cb24fac6eb1.tar.xz
misc: fuse: support to access fuse on i.MX93
i.MX93 fuse can be accessed through FSB and s400-api. Add mapping tables for i.MX93. The offset address of FSB accessing OTP shadow registers is different between i.MX8ULP and i.MX93, so use macro to define the offset address instead of hardcode. Signed-off-by: Alice Guo <alice.guo@nxp.com> Signed-off-by: Peng Fan <peng.fan@nxp.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/misc/sentinel/fuse.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/drivers/misc/sentinel/fuse.c b/drivers/misc/sentinel/fuse.c
index 83d2c25731..abb4c072f9 100644
--- a/drivers/misc/sentinel/fuse.c
+++ b/drivers/misc/sentinel/fuse.c
@@ -31,6 +31,9 @@ struct s400_map_entry {
u32 s400_index;
};
+#if defined(CONFIG_IMX8ULP)
+#define FSB_OTP_SHADOW 0x800
+
struct fsb_map_entry fsb_mapping_table[] = {
{ 3, 8 },
{ 4, 8 },
@@ -65,6 +68,31 @@ struct s400_map_entry s400_api_mapping_table[] = {
{ 23, 1, 4, 2 }, /* OTFAD */
{ 25, 8 }, /* Test config2 */
};
+#elif defined(CONFIG_ARCH_IMX9)
+#define FSB_OTP_SHADOW 0x8000
+
+struct fsb_map_entry fsb_mapping_table[] = {
+ { 0, 8 },
+ { 1, 8 },
+ { 2, 8 },
+ { -1, 8 },
+ { 4, 8 },
+ { 5, 8 },
+ { 6, 8 }, /* UID */
+ { -1, 8 },
+ { 8, 8 },
+ { 9, 8 },
+ { 10, 8 },
+};
+
+struct s400_map_entry s400_api_mapping_table[] = {
+ { 3, 11 }, /* 24 .. 34 */
+ { 7, 8 },
+ { 16, 11 }, /* 128 .. 143 */
+ { 22, 8 },
+ { 23, 8 },
+};
+#endif
static s32 map_fsb_fuse_index(u32 bank, u32 word, bool *redundancy)
{
@@ -128,7 +156,7 @@ int fuse_sense(u32 bank, u32 word, u32 *val)
word_index = map_fsb_fuse_index(bank, word, &redundancy);
if (word_index >= 0) {
- *val = readl((ulong)FSB_BASE_ADDR + 0x800 + (word_index << 2));
+ *val = readl((ulong)FSB_BASE_ADDR + FSB_OTP_SHADOW + (word_index << 2));
if (redundancy)
*val = (*val >> ((word % 2) * 16)) & 0xFFFF;