fusee: sdram scratch fixes

This commit is contained in:
Michael Scire 2021-01-04 02:37:05 -08:00
parent 6e9675916c
commit 45bae80f18
2 changed files with 123 additions and 122 deletions

View file

@ -544,9 +544,9 @@ static void sdram_config_mariko(const sdram_params_mariko_t *params) {
pmc->weak_bias = ((~params->EmcPmcScratch1 & 0x1000) << 19) | ((~params->EmcPmcScratch1 & 0xFFF) << 18) | ((~params->EmcPmcScratch1 & 0x8000) << 15); pmc->weak_bias = ((~params->EmcPmcScratch1 & 0x1000) << 19) | ((~params->EmcPmcScratch1 & 0xFFF) << 18) | ((~params->EmcPmcScratch1 & 0x8000) << 15);
pmc->io_dpd3_req = (~params->EmcPmcScratch1 & 0x9FFF) + 0x80000000; pmc->io_dpd3_req = (~params->EmcPmcScratch1 & 0x9FFF) + 0x80000000;
udelay(params->PmcIoDpd3ReqWait); udelay(params->PmcIoDpd3ReqWait);
pmc->io_dpd4_req = (~params->EmcPmcScratch2 & 0x3FFF0000) + 0x80000000; pmc->io_dpd4_req = (~params->EmcPmcScratch2 & 0x3FFF0000) | 0x80000000;
udelay(params->PmcIoDpd4ReqWait); udelay(params->PmcIoDpd4ReqWait);
pmc->io_dpd4_req = (~params->EmcPmcScratch2 & 0x1FFF) + 0x80000000; pmc->io_dpd4_req = (~params->EmcPmcScratch2 & 0x1FFF) | 0x80000000;
udelay(1); udelay(1);
MAKE_EMC_REG(EMC_FBIO_CFG7) = params->EmcFbioCfg7; MAKE_EMC_REG(EMC_FBIO_CFG7) = params->EmcFbioCfg7;
@ -585,7 +585,7 @@ static void sdram_config_mariko(const sdram_params_mariko_t *params) {
udelay(params->PmcVddpSelWait + 2); udelay(params->PmcVddpSelWait + 2);
car->clk_source_emc = params->EmcClockSource; car->clk_source_emc = params->EmcClockSource;
car->clk_source_emc_dll = params->EmcClockSourceDll; car->clk_source_emc_dll = params->EmcClockSourceDll;
MAKE_EMC_REG(EMC_DBG) = params->EmcDbg | 2 * params->EmcDbgWriteMux; MAKE_EMC_REG(EMC_DBG) = params->EmcDbg | (2 * params->EmcDbgWriteMux);
if (params->EmcBctSpare2) { if (params->EmcBctSpare2) {
*(volatile uint32_t *)params->EmcBctSpare2 = params->EmcBctSpare3; *(volatile uint32_t *)params->EmcBctSpare2 = params->EmcBctSpare3;
@ -1219,11 +1219,11 @@ static void sdram_save_params_erista(const void *save_params) {
*/ */
/* [4.0.0+] Patch carveout parameters. */ /* [4.0.0+] Patch carveout parameters. */
*(volatile uint32_t *)params->McGeneralizedCarveout1Cfg0 = 0; *(volatile uint32_t *)&params->McGeneralizedCarveout1Cfg0 = 0;
*(volatile uint32_t *)params->McGeneralizedCarveout2Cfg0 = 0; *(volatile uint32_t *)&params->McGeneralizedCarveout2Cfg0 = 0;
*(volatile uint32_t *)params->McGeneralizedCarveout3Cfg0 = 0; *(volatile uint32_t *)&params->McGeneralizedCarveout3Cfg0 = 0;
*(volatile uint32_t *)params->McGeneralizedCarveout4Cfg0 = 0; *(volatile uint32_t *)&params->McGeneralizedCarveout4Cfg0 = 0;
*(volatile uint32_t *)params->McGeneralizedCarveout5Cfg0 = 0; *(volatile uint32_t *)&params->McGeneralizedCarveout5Cfg0 = 0;
/* Patch SDRAM parameters. */ /* Patch SDRAM parameters. */
uint32_t t0 = params->EmcSwizzleRank0Byte0 << 5 >> 29 > params->EmcSwizzleRank0Byte0 << 1 >> 29; uint32_t t0 = params->EmcSwizzleRank0Byte0 << 5 >> 29 > params->EmcSwizzleRank0Byte0 << 1 >> 29;
@ -1234,9 +1234,9 @@ static void sdram_save_params_erista(const void *save_params) {
uint32_t t5 = (t4 & 0xFFFFFFBF) | ((params->EmcSwizzleRank1Byte2 << 5 >> 29 > params->EmcSwizzleRank1Byte2 << 1 >> 29) << 6); uint32_t t5 = (t4 & 0xFFFFFFBF) | ((params->EmcSwizzleRank1Byte2 << 5 >> 29 > params->EmcSwizzleRank1Byte2 << 1 >> 29) << 6);
uint32_t t6 = (t5 & 0xFFFFFFF7) | ((params->EmcSwizzleRank0Byte3 << 5 >> 29 > params->EmcSwizzleRank0Byte3 << 1 >> 29) << 3); uint32_t t6 = (t5 & 0xFFFFFFF7) | ((params->EmcSwizzleRank0Byte3 << 5 >> 29 > params->EmcSwizzleRank0Byte3 << 1 >> 29) << 3);
uint32_t t7 = (t6 & 0xFFFFFF7F) | ((params->EmcSwizzleRank1Byte3 << 5 >> 29 > params->EmcSwizzleRank1Byte3 << 1 >> 29) << 7); uint32_t t7 = (t6 & 0xFFFFFF7F) | ((params->EmcSwizzleRank1Byte3 << 5 >> 29 > params->EmcSwizzleRank1Byte3 << 1 >> 29) << 7);
*(volatile uint32_t *)params->SwizzleRankByteEncode = t7; *(volatile uint32_t *)&params->SwizzleRankByteEncode = t7;
*(volatile uint32_t *)params->EmcBctSpare2 = 0x40000DD8; *(volatile uint32_t *)&params->EmcBctSpare2 = 0x40000DD8;
*(volatile uint32_t *)params->EmcBctSpare3 = t7; *(volatile uint32_t *)&params->EmcBctSpare3 = t7;
s(EmcClockSource, 7:0, scratch6, 15:8); s(EmcClockSource, 7:0, scratch6, 15:8);
s(EmcClockSourceDll, 7:0, scratch6, 23:16); s(EmcClockSourceDll, 7:0, scratch6, 23:16);
@ -2246,14 +2246,14 @@ static void sdram_save_params_mariko(const void *save_params) {
#define c32(value, pmcreg) pmc->pmcreg = value #define c32(value, pmcreg) pmc->pmcreg = value
/* Patch carveout parameters. */ /* Patch carveout parameters. */
*(volatile uint32_t *)params->McGeneralizedCarveout1Cfg0 = 0; *(volatile uint32_t *)&params->McGeneralizedCarveout1Cfg0 = 0;
*(volatile uint32_t *)params->McGeneralizedCarveout2Cfg0 = 0; *(volatile uint32_t *)&params->McGeneralizedCarveout2Cfg0 = 0;
*(volatile uint32_t *)params->McGeneralizedCarveout3Cfg0 = 0; *(volatile uint32_t *)&params->McGeneralizedCarveout3Cfg0 = 0;
*(volatile uint32_t *)params->McGeneralizedCarveout4Cfg0 = 0; *(volatile uint32_t *)&params->McGeneralizedCarveout4Cfg0 = 0;
*(volatile uint32_t *)params->McGeneralizedCarveout5Cfg0 = 0; *(volatile uint32_t *)&params->McGeneralizedCarveout5Cfg0 = 0;
/* Patch SDRAM parameters. */ /* Patch SDRAM parameters. */
*(volatile uint32_t *)params->SwizzleRankByteEncode = 0; *(volatile uint32_t *)&params->SwizzleRankByteEncode = 0;
uint32_t t0 = params->EmcSwizzleRank0Byte0 << 5 >> 29 > params->EmcSwizzleRank0Byte0 << 1 >> 29; uint32_t t0 = params->EmcSwizzleRank0Byte0 << 5 >> 29 > params->EmcSwizzleRank0Byte0 << 1 >> 29;
uint32_t t1 = (t0 & 0xFFFFFFEF) | ((params->EmcSwizzleRank1Byte0 << 5 >> 29 > params->EmcSwizzleRank1Byte0 << 1 >> 29) << 4); uint32_t t1 = (t0 & 0xFFFFFFEF) | ((params->EmcSwizzleRank1Byte0 << 5 >> 29 > params->EmcSwizzleRank1Byte0 << 1 >> 29) << 4);
uint32_t t2 = (t1 & 0xFFFFFFFD) | ((params->EmcSwizzleRank0Byte1 << 5 >> 29 > params->EmcSwizzleRank0Byte1 << 1 >> 29) << 1); uint32_t t2 = (t1 & 0xFFFFFFFD) | ((params->EmcSwizzleRank0Byte1 << 5 >> 29 > params->EmcSwizzleRank0Byte1 << 1 >> 29) << 1);
@ -2262,9 +2262,9 @@ static void sdram_save_params_mariko(const void *save_params) {
uint32_t t5 = (t4 & 0xFFFFFFBF) | ((params->EmcSwizzleRank1Byte2 << 5 >> 29 > params->EmcSwizzleRank1Byte2 << 1 >> 29) << 6); uint32_t t5 = (t4 & 0xFFFFFFBF) | ((params->EmcSwizzleRank1Byte2 << 5 >> 29 > params->EmcSwizzleRank1Byte2 << 1 >> 29) << 6);
uint32_t t6 = (t5 & 0xFFFFFFF7) | ((params->EmcSwizzleRank0Byte3 << 5 >> 29 > params->EmcSwizzleRank0Byte3 << 1 >> 29) << 3); uint32_t t6 = (t5 & 0xFFFFFFF7) | ((params->EmcSwizzleRank0Byte3 << 5 >> 29 > params->EmcSwizzleRank0Byte3 << 1 >> 29) << 3);
uint32_t t7 = (t6 & 0xFFFFFF7F) | ((params->EmcSwizzleRank1Byte3 << 5 >> 29 > params->EmcSwizzleRank1Byte3 << 1 >> 29) << 7); uint32_t t7 = (t6 & 0xFFFFFF7F) | ((params->EmcSwizzleRank1Byte3 << 5 >> 29 > params->EmcSwizzleRank1Byte3 << 1 >> 29) << 7);
*(volatile uint32_t *)params->SwizzleRankByteEncode = t7; *(volatile uint32_t *)&params->SwizzleRankByteEncode = t7;
*(volatile uint32_t *)params->EmcBctSpare2 = 0x40000DD8; *(volatile uint32_t *)&params->EmcBctSpare2 = 0x40000DD8;
*(volatile uint32_t *)params->EmcBctSpare3 = t7; *(volatile uint32_t *)&params->EmcBctSpare3 = t7;
s(EmcClockSource, 7:0, scratch6, 15:8); s(EmcClockSource, 7:0, scratch6, 15:8);
s(EmcClockSourceDll, 7:0, scratch6, 23:16); s(EmcClockSourceDll, 7:0, scratch6, 23:16);
@ -2401,7 +2401,7 @@ static void sdram_save_params_mariko(const void *save_params) {
s(EmcAutoCalChannel, 11:8, scratch83, 9:6); s(EmcAutoCalChannel, 11:8, scratch83, 9:6);
s(EmcAutoCalChannel, 27:16, scratch83, 21:10); s(EmcAutoCalChannel, 27:16, scratch83, 21:10);
s(EmcAutoCalChannel, 31:29, scratch83, 24:22); s(EmcAutoCalChannel, 31:29, scratch83, 24:22);
s(EmcAutoCalChannel, 6:0, scratch83, 31:25); s(EmcConfigSampleDelay, 6:0, scratch83, 31:25);
s(EmcPmacroRxTerm, 5:0, scratch84, 5:0); s(EmcPmacroRxTerm, 5:0, scratch84, 5:0);
s(EmcPmacroRxTerm, 13:8, scratch84, 11:6); s(EmcPmacroRxTerm, 13:8, scratch84, 11:6);
s(EmcPmacroRxTerm, 21:16, scratch84, 17:12); s(EmcPmacroRxTerm, 21:16, scratch84, 17:12);
@ -3265,7 +3265,7 @@ static void sdram_save_params_mariko(const void *save_params) {
s(McGeneralizedCarveout1Cfg0, 26:22, secure_scratch57, 29:25); s(McGeneralizedCarveout1Cfg0, 26:22, secure_scratch57, 29:25);
s(McGeneralizedCarveout3Cfg0, 1:0, secure_scratch57, 31:30); s(McGeneralizedCarveout3Cfg0, 1:0, secure_scratch57, 31:30);
s(McGeneralizedCarveout3Cfg0, 2:2, secure_scratch58, 0:0); s(McGeneralizedCarveout3Cfg0, 2:2, secure_scratch58, 0:0);
s(McGeneralizedCarveout3Cfg0, 26:22, secure_scratch57, 5:1); s(McGeneralizedCarveout3Cfg0, 26:22, secure_scratch58, 5:1);
s32(McGeneralizedCarveout1Access0, secure_scratch59); s32(McGeneralizedCarveout1Access0, secure_scratch59);
s32(McGeneralizedCarveout1Access1, secure_scratch60); s32(McGeneralizedCarveout1Access1, secure_scratch60);
@ -3337,7 +3337,8 @@ static void sdram_save_params_mariko(const void *save_params) {
s(PllMSetupControl, 23:0, scratch36, 23:0); s(PllMSetupControl, 23:0, scratch36, 23:0);
c32(0, scratch4); c32(0, scratch4);
s(PllMStableTime, 19:0, scratch4, 19:0); s(PllMStableTime, 9:0, scratch4, 9:0);
s(PllMStableTime, 31:0, scratch4, 31:10);
} }
void sdram_init(void) { void sdram_init(void) {