From 88c7efe83dee6be514128b4b3c2ea647b129d7fc Mon Sep 17 00:00:00 2001 From: emxll <emxlsurfs@gmail.com> Date: Wed, 21 Aug 2024 15:27:56 +0200 Subject: [PATCH] MCC: T6030 compatibility --- src/mcc.c | 65 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 24 deletions(-) diff --git a/src/mcc.c b/src/mcc.c index 37538839..f3e7cad6 100644 --- a/src/mcc.c +++ b/src/mcc.c @@ -23,11 +23,11 @@ static bool mcc_initialized = false; #define T6000_DCS_STRIDE 0x100000 #define T6000_DCS_COUNT 4 -#define T6031_PLANE_OFFSET 0 -#define T6031_PLANE_STRIDE 0x40000 -#define T6031_GLOBAL_OFFSET 0x100000 -#define T6031_DCS_OFFSET 0x400000 -#define T6031_DCS_STRIDE 0x200000 +#define T603X_PLANE_OFFSET 0 +#define T603X_PLANE_STRIDE 0x40000 +#define T603X_GLOBAL_OFFSET 0x100000 +#define T603X_DCS_OFFSET 0x400000 +#define T603X_DCS_STRIDE 0x200000 #define PLANE_TZ_MAX_REGS 4 @@ -55,7 +55,15 @@ struct tz_regs t602x_tz_regs = { .enable = 0x6c8, }; -struct tz_regs t603x_tz_regs = { +struct tz_regs t6030_tz_regs = { + .count = 4, + .stride = 0x14, + .start = 0x6dc, + .end = 0x6e0, + .enable = 0x6e8, +}; + +struct tz_regs t6031_tz_regs = { .count = 4, .stride = 0x14, .start = 0x6d8, @@ -78,11 +86,11 @@ struct tz_regs t603x_tz_regs = { (FIELD_PREP(T6000_CACHE_STATUS_DATA_COUNT, T6000_CACHE_WAYS) | \ FIELD_PREP(T6000_CACHE_STATUS_TAG_COUNT, T6000_CACHE_WAYS)) -#define T6031_CACHE_WAYS 12 -#define T6031_CACHE_STATUS_MASK (T6000_CACHE_STATUS_DATA_COUNT | T6000_CACHE_STATUS_TAG_COUNT) -#define T6031_CACHE_STATUS_VAL \ - (FIELD_PREP(T6000_CACHE_STATUS_DATA_COUNT, T6031_CACHE_WAYS) | \ - FIELD_PREP(T6000_CACHE_STATUS_TAG_COUNT, T6031_CACHE_WAYS)) +#define T603X_CACHE_WAYS 12 +#define T603X_CACHE_STATUS_MASK (T6000_CACHE_STATUS_DATA_COUNT | T6000_CACHE_STATUS_TAG_COUNT) +#define T603X_CACHE_STATUS_VAL \ + (FIELD_PREP(T6000_CACHE_STATUS_DATA_COUNT, T603X_CACHE_WAYS) | \ + FIELD_PREP(T6000_CACHE_STATUS_TAG_COUNT, T603X_CACHE_WAYS)) #define T8103_CACHE_WAYS 16 #define T8103_CACHE_STATUS_MASK (T8103_CACHE_STATUS_DATA_COUNT | T8103_CACHE_STATUS_TAG_COUNT) @@ -318,7 +326,7 @@ int mcc_init_t6000(int node, int *path, bool t602x) return 0; } -int mcc_init_t6031(int node, int *path) +int mcc_init_t603x(int node, int *path, int lsn) { u32 reg_len; u32 reg_offset = 3; @@ -330,7 +338,7 @@ int mcc_init_t6031(int node, int *path) mcc_count = reg_len / 16 - reg_offset; - printf("MCC: Initializing T6031 MCCs (%d instances)...\n", mcc_count); + printf("MCC: Initializing T603%x MCCs (%d instances)...\n", lsn, mcc_count); if (mcc_count > MAX_MCC_INSTANCES) { printf("MCC: Too many instances, increase MAX_MCC_INSTANCES!\n"); @@ -357,26 +365,33 @@ int mcc_init_t6031(int node, int *path) return -1; } - mcc_regs[i].plane_base = base + T6031_PLANE_OFFSET; - mcc_regs[i].plane_stride = T6031_PLANE_STRIDE; + mcc_regs[i].plane_base = base + T603X_PLANE_OFFSET; + mcc_regs[i].plane_stride = T603X_PLANE_STRIDE; mcc_regs[i].plane_count = plane_count; - mcc_regs[i].global_base = base + T6031_GLOBAL_OFFSET; + mcc_regs[i].global_base = base + T603X_GLOBAL_OFFSET; - mcc_regs[i].dcs_base = base + T6031_DCS_OFFSET; - mcc_regs[i].dcs_stride = T6031_DCS_STRIDE; + mcc_regs[i].dcs_base = base + T603X_DCS_OFFSET; + mcc_regs[i].dcs_stride = T603X_DCS_STRIDE; mcc_regs[i].dcs_count = dcs_count; mcc_regs[i].cache_enable_val = 1; - mcc_regs[i].cache_ways = T6031_CACHE_WAYS; - mcc_regs[i].cache_status_mask = T6031_CACHE_STATUS_MASK; - mcc_regs[i].cache_status_val = T6031_CACHE_STATUS_VAL; + mcc_regs[i].cache_ways = T603X_CACHE_WAYS; + mcc_regs[i].cache_status_mask = T603X_CACHE_STATUS_MASK; + mcc_regs[i].cache_status_val = T603X_CACHE_STATUS_VAL; mcc_regs[i].cache_disable = 0; - mcc_regs[i].tz = &t603x_tz_regs; + if(lsn == 0){ + mcc_regs[i].tz = &t6030_tz_regs; + } else if(lsn == 1){ + mcc_regs[i].tz = &t6031_tz_regs; + } else { + printf("MCC: Unsupported chip (T603%x)", lsn); + return -1; + } } - printf("MCC: Initialized T6031 MCCs (%d instances, %d planes, %d channels)\n", mcc_count, + printf("MCC: Initialized T603%x MCCs (%d instances, %d planes, %d channels)\n", lsn, mcc_count, mcc_regs[0].plane_count, mcc_regs[0].dcs_count); mcc_initialized = true; @@ -402,8 +417,10 @@ int mcc_init(void) return mcc_init_t6000(node, path, false); } else if (adt_is_compatible(adt, node, "mcc,t6020")) { return mcc_init_t6000(node, path, true); + } else if (adt_is_compatible(adt, node, "mcc,t6030")) { + return mcc_init_t603x(node, path, 0); } else if (adt_is_compatible(adt, node, "mcc,t6031")) { - return mcc_init_t6031(node, path); + return mcc_init_t603x(node, path, 1); } else { printf("MCC: Unsupported version:%s\n", adt_get_property(adt, node, "compatible")->value); return -1;