#include <Library/IoLib.h>\r
#include <Library/DebugLib.h>\r
#include <Library/ArmLib.h>\r
-#include <Library/L2X0CacheLib.h>\r
+#include <Drivers/PL310L2Cache.h>\r
#include <Library/PcdLib.h>\r
\r
#define L2x0WriteReg(reg,val) MmioWrite32(PcdGet32(PcdL2x0ControllerBase) + reg, val)\r
VOID\r
L2x0CacheInit (\r
IN UINTN L2x0Base,\r
+ IN UINT32 L2x0TagLatencies,\r
+ IN UINT32 L2x0DataLatencies,\r
+ IN UINT32 L2x0AuxValue,\r
+ IN UINT32 L2x0AuxMask,\r
IN BOOLEAN CacheEnabled\r
)\r
{\r
Aux |= L2x0_AUXCTRL_AW_AWCACHE;\r
// Use default Size\r
Data = L2x0ReadReg(L2X0_AUXCTRL);\r
- Aux |= Data & (0x7 << 17);\r
+ Aux |= Data & L2X0_AUXCTRL_WAYSIZE_MASK;\r
// Use default associativity\r
- Aux |= Data & (0x1 << 16);\r
+ Aux |= Data & L2X0_AUXCTRL_ASSOCIATIVITY;\r
// Enabled I & D Prefetch\r
Aux |= L2x0_AUXCTRL_IPREFETCH | L2x0_AUXCTRL_DPREFETCH;\r
\r
L2x0WriteReg(L2X0_PWRCTRL, PwrCtl);\r
}\r
\r
- if (Revision >= 4) {\r
- // Tag RAM Latency register\r
- // - Use default latency\r
- \r
- // Data RAM Latency Control register\r
- // - Use default latency\r
- } else if (Revision >= 2) {\r
- L2x0WriteReg(L230_TAG_LATENCY,\r
- (L2_TAG_ACCESS_LATENCY << 8)\r
- | (L2_TAG_ACCESS_LATENCY << 4)\r
- | L2_TAG_SETUP_LATENCY\r
- );\r
- \r
- L2x0WriteReg(L230_DATA_LATENCY,\r
- (L2_DATA_ACCESS_LATENCY << 8)\r
- | (L2_DATA_ACCESS_LATENCY << 4)\r
- | L2_DATA_SETUP_LATENCY\r
- );\r
- } else {\r
- Aux |= (L2_TAG_ACCESS_LATENCY << 6)\r
- | (L2_DATA_ACCESS_LATENCY << 3)\r
- | L2_DATA_ACCESS_LATENCY;\r
- }\r
+ if (Revision >= 2) {\r
+ L2x0WriteReg(L230_TAG_LATENCY, L2x0TagLatencies);\r
+ L2x0WriteReg(L230_DATA_LATENCY, L2x0DataLatencies);\r
+ } else {\r
+ // PL310 old style latency is not supported yet\r
+ ASSERT(0);\r
+ }\r
+\r
+ // Set the platform specific values\r
+ Aux = (Aux & L2x0AuxMask) | L2x0AuxValue;\r
\r
// Write Auxiliary value\r
L2x0WriteReg(L2X0_AUXCTRL, Aux);\r