Skip to content

Commit 2b87a02

Browse files
Update SCA base address
1 parent 14d2d90 commit 2b87a02

File tree

2 files changed

+28
-16
lines changed

2 files changed

+28
-16
lines changed

src/CommandLineUtilities/AliceLowlevelFrontend/Sca.cxx

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,27 +18,39 @@ namespace CommandLineUtilities {
1818
namespace Alf {
1919

2020
namespace Registers {
21-
constexpr size_t BASE_INDEX = 0x4224000 / 4;
22-
constexpr int WRITE_DATA(0x20 / 4);
23-
constexpr int WRITE_COMMAND(0x24 / 4);
24-
constexpr int CONTROL(0x28 / 4);
25-
constexpr int READ_DATA(0x30 / 4);
26-
constexpr int READ_COMMAND(0x34 / 4);
27-
constexpr int READ_BUSY(0x38 / 4);
28-
constexpr int READ_TIME(0x3c / 4);
21+
constexpr int CRU_BASE_INDEX = 0x4224000 / 4;
22+
constexpr int CRU_LINK_OFFSET = 0x20000 / 4;
23+
constexpr int CRU_MAX_LINKS = 7;
24+
constexpr int CRORC_BASE_INDEX = 0x30 / 4;
25+
constexpr int CRORC_LINK_OFFSET = 0x50 / 4;
26+
constexpr int CRORC_MAX_LINKS = 2;
27+
constexpr int WRITE_DATA = 0x20 / 4;
28+
constexpr int WRITE_COMMAND = 0x24 / 4;
29+
constexpr int CONTROL = 0x28 / 4;
30+
constexpr int READ_DATA = 0x30 / 4;
31+
constexpr int READ_COMMAND = 0x34 / 4;
32+
constexpr int READ_BUSY = 0x38 / 4;
33+
constexpr int READ_TIME = 0x3c / 4;
2934
} // namespace Registers
3035

3136
constexpr auto BUSY_TIMEOUT = std::chrono::milliseconds(10);
3237
constexpr auto CHANNEL_BUSY_TIMEOUT = std::chrono::milliseconds(10);
3338

34-
Sca::Sca(RegisterReadWriteInterface &bar2, CardType::type cardType, int link) : bar2(bar2)
39+
Sca::Sca(RegisterReadWriteInterface &bar2, CardType::type cardType, int link) : mBar2(bar2)
3540
{
41+
auto setOffset = [&](auto base, auto offset, auto maxLinks) {
42+
if (link >= maxLinks ) {
43+
BOOST_THROW_EXCEPTION(ScaException() << ErrorInfo::Message("Maximum link number exceeded"));
44+
}
45+
mOffset = base + link * offset;
46+
};
47+
3648
if (cardType == CardType::Cru) {
37-
offset = 0x04224000 + link * 0x20000;
49+
setOffset(Registers::CRU_BASE_INDEX, Registers::CRU_LINK_OFFSET, Registers::CRU_MAX_LINKS);
3850
} else if (cardType == CardType::Crorc) {
39-
offset = 0x1a0;
51+
setOffset(Registers::CRORC_BASE_INDEX, Registers::CRORC_LINK_OFFSET, Registers::CRORC_MAX_LINKS);
4052
} else if (cardType == CardType::Dummy){
41-
offset = 0;
53+
setOffset(0, 0x100, 6);
4254
} else {
4355
throw std::runtime_error("Unknown card type, could not calculate SCA offset");
4456
}
@@ -183,12 +195,12 @@ auto Sca::gpioRead() -> ReadResult
183195

184196
void Sca::barWrite(int index, uint32_t data)
185197
{
186-
bar2.writeRegister(index + offset, data);
198+
mBar2.writeRegister(index + mOffset, data);
187199
}
188200

189201
uint32_t Sca::barRead(int index)
190202
{
191-
return bar2.readRegister(index + offset);
203+
return mBar2.readRegister(index + mOffset);
192204
}
193205

194206
void Sca::executeCommand()

src/CommandLineUtilities/AliceLowlevelFrontend/Sca.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,10 @@ class Sca
5757
bool isChannelBusy(uint32_t command);
5858

5959
/// Interface for BAR 2
60-
RegisterReadWriteInterface& bar2;
60+
RegisterReadWriteInterface& mBar2;
6161

6262
/// Offset for the registers. May differ per card
63-
int offset;
63+
int mOffset;
6464
};
6565

6666

0 commit comments

Comments
 (0)