2 The interface layer for memory controller access.
3 It is supporting both real hardware platform and simulation environment.
5 Copyright (c) 2013-2015 Intel Corporation.
7 SPDX-License-Identifier: BSD-2-Clause-Patent
11 #include "memory_options.h"
12 #include "meminit_utils.h"
30 // This is a simple delay function.
31 // It takes "nanoseconds" as a parameter.
32 void delay_n(uint32_t nanoseconds
)
34 SimDelayClk( 800*nanoseconds
/1000);
52 SimMmio32Read( 1, addr
, &data
);
62 // Handle case addr bigger than 8bit
63 pciwrite32(0, 0, 0, SB_HADR_REG
, addr
& 0xFFF00);
66 pciwrite32(0, 0, 0, SB_PACKET_REG
,
67 SB_COMMAND(SB_REG_READ_OPCODE
, unit
, addr
));
68 data
= pciread32(0, 0, 0, SB_DATA_REG
);
72 // Handle case addr bigger than 8bit
73 pciwrite32(0, 0, 0, SB_HADR_REG
, addr
& 0xFFF00);
76 pciwrite32(0, 0, 0, SB_PACKET_REG
,
77 SB_COMMAND(SB_DDRIO_REG_READ_OPCODE
, unit
, addr
));
78 data
= pciread32(0, 0, 0, SB_DATA_REG
);
87 DPF(D_REGRD
, "RD32 %03X %08X %08X\n", unit
, addr
, data
);
101 DPF(D_REGWR
, "WR32 %03X %08X %08X\n", unit
, addr
, data
);
108 SimMmio32Write( 1, addr
, data
);
118 // Handle case addr bigger than 8bit
119 pciwrite32(0, 0, 0, SB_HADR_REG
, addr
& 0xFFF00);
122 pciwrite32(0, 0, 0, SB_DATA_REG
, data
);
123 pciwrite32(0, 0, 0, SB_PACKET_REG
,
124 SB_COMMAND(SB_REG_WRITE_OPCODE
, unit
, addr
));
128 // Handle case addr bigger than 8bit
129 pciwrite32(0, 0, 0, SB_HADR_REG
, addr
& 0xFFF00);
132 pciwrite32(0, 0, 0, SB_DATA_REG
, data
);
133 pciwrite32(0, 0, 0, SB_PACKET_REG
,
134 SB_COMMAND(SB_DDRIO_REG_WRITE_OPCODE
, unit
, addr
));
138 pciwrite32(0, 0, 0, SB_HADR_REG
, 0);
139 pciwrite32(0, 0, 0, SB_DATA_REG
, data
);
140 pciwrite32(0, 0, 0, SB_PACKET_REG
,
141 SB_COMMAND(SB_DRAM_CMND_OPCODE
, MCU
, 0));
159 Wr32(unit
, addr
, ((Rd32(unit
, addr
) & ~mask
) | (data
& mask
)));
172 Wr32(MMIO
, PCIADDR(bus
,dev
,fn
,reg
), data
);
184 return Rd32(MMIO
, PCIADDR(bus
,dev
,fn
,reg
));