1*30bcf84cSAndrew Jeffery // SPDX-License-Identifier: Apache-2.0
2*30bcf84cSAndrew Jeffery // Copyright (C) 2018 IBM Corp.
3*30bcf84cSAndrew Jeffery 
4*30bcf84cSAndrew Jeffery #include "config.h"
5*30bcf84cSAndrew Jeffery #include <assert.h>
6*30bcf84cSAndrew Jeffery 
7*30bcf84cSAndrew Jeffery #include "common.h"
8*30bcf84cSAndrew Jeffery #include "vpnor/pnor_partition_defs.h"
9*30bcf84cSAndrew Jeffery #include "vpnor/pnor_partition_table.hpp"
10*30bcf84cSAndrew Jeffery 
11*30bcf84cSAndrew Jeffery static constexpr auto BLOCK_SIZE = 4 * 1024;
12*30bcf84cSAndrew Jeffery static constexpr auto DATA_MASK = ((1 << 24) - 1);
13*30bcf84cSAndrew Jeffery 
main()14*30bcf84cSAndrew Jeffery int main()
15*30bcf84cSAndrew Jeffery {
16*30bcf84cSAndrew Jeffery     namespace vpnor = openpower::virtual_pnor;
17*30bcf84cSAndrew Jeffery 
18*30bcf84cSAndrew Jeffery     struct pnor_partition part;
19*30bcf84cSAndrew Jeffery     std::string line;
20*30bcf84cSAndrew Jeffery 
21*30bcf84cSAndrew Jeffery     mbox_vlog = mbox_log_console;
22*30bcf84cSAndrew Jeffery     verbosity = MBOX_LOG_DEBUG;
23*30bcf84cSAndrew Jeffery 
24*30bcf84cSAndrew Jeffery     line = "partition01=FOO,00001000,00002000,80,ECC";
25*30bcf84cSAndrew Jeffery     vpnor::parseTocLine(line, BLOCK_SIZE, part);
26*30bcf84cSAndrew Jeffery     assert((part.data.user.data[0]) == PARTITION_ECC_PROTECTED);
27*30bcf84cSAndrew Jeffery     assert(!(part.data.user.data[1] & DATA_MASK));
28*30bcf84cSAndrew Jeffery 
29*30bcf84cSAndrew Jeffery     line = "partition01=FOO,00001000,00002000,80,PRESERVED";
30*30bcf84cSAndrew Jeffery     vpnor::parseTocLine(line, BLOCK_SIZE, part);
31*30bcf84cSAndrew Jeffery     assert(!(part.data.user.data[0]));
32*30bcf84cSAndrew Jeffery     assert((part.data.user.data[1] & DATA_MASK) == PARTITION_PRESERVED);
33*30bcf84cSAndrew Jeffery 
34*30bcf84cSAndrew Jeffery     line = "partition01=FOO,00001000,00002000,80,READONLY";
35*30bcf84cSAndrew Jeffery     vpnor::parseTocLine(line, BLOCK_SIZE, part);
36*30bcf84cSAndrew Jeffery     assert(!(part.data.user.data[0]));
37*30bcf84cSAndrew Jeffery     assert((part.data.user.data[1] & DATA_MASK) == PARTITION_READONLY);
38*30bcf84cSAndrew Jeffery 
39*30bcf84cSAndrew Jeffery     /* BACKUP is unimplemented */
40*30bcf84cSAndrew Jeffery     line = "partition01=FOO,00001000,00002000,80,BACKUP";
41*30bcf84cSAndrew Jeffery     vpnor::parseTocLine(line, BLOCK_SIZE, part);
42*30bcf84cSAndrew Jeffery     assert(!(part.data.user.data[0]));
43*30bcf84cSAndrew Jeffery     assert(!(part.data.user.data[1] & DATA_MASK));
44*30bcf84cSAndrew Jeffery 
45*30bcf84cSAndrew Jeffery     line = "partition01=FOO,00001000,00002000,80,REPROVISION";
46*30bcf84cSAndrew Jeffery     vpnor::parseTocLine(line, BLOCK_SIZE, part);
47*30bcf84cSAndrew Jeffery     assert(!(part.data.user.data[0]));
48*30bcf84cSAndrew Jeffery     assert((part.data.user.data[1] & DATA_MASK) == PARTITION_REPROVISION);
49*30bcf84cSAndrew Jeffery 
50*30bcf84cSAndrew Jeffery     line = "partition01=FOO,00001000,00002000,80,VOLATILE";
51*30bcf84cSAndrew Jeffery     vpnor::parseTocLine(line, BLOCK_SIZE, part);
52*30bcf84cSAndrew Jeffery     assert(!(part.data.user.data[0]));
53*30bcf84cSAndrew Jeffery     assert((part.data.user.data[1] & DATA_MASK) == PARTITION_VOLATILE);
54*30bcf84cSAndrew Jeffery 
55*30bcf84cSAndrew Jeffery     line = "partition01=FOO,00001000,00002000,80,CLEARECC";
56*30bcf84cSAndrew Jeffery     vpnor::parseTocLine(line, BLOCK_SIZE, part);
57*30bcf84cSAndrew Jeffery     assert(!(part.data.user.data[0]));
58*30bcf84cSAndrew Jeffery     assert((part.data.user.data[1] & DATA_MASK) == PARTITION_CLEARECC);
59*30bcf84cSAndrew Jeffery 
60*30bcf84cSAndrew Jeffery     line = "partition01=FOO,00001000,00002000,80,READWRITE";
61*30bcf84cSAndrew Jeffery     vpnor::parseTocLine(line, BLOCK_SIZE, part);
62*30bcf84cSAndrew Jeffery     assert(!(part.data.user.data[0]));
63*30bcf84cSAndrew Jeffery     assert(((part.data.user.data[1] & DATA_MASK) ^ PARTITION_READONLY) ==
64*30bcf84cSAndrew Jeffery            PARTITION_READONLY);
65*30bcf84cSAndrew Jeffery 
66*30bcf84cSAndrew Jeffery     line = "partition01=FOO,00001000,00002000,80,";
67*30bcf84cSAndrew Jeffery     vpnor::parseTocLine(line, BLOCK_SIZE, part);
68*30bcf84cSAndrew Jeffery     assert(!(part.data.user.data[0]));
69*30bcf84cSAndrew Jeffery     assert(!(part.data.user.data[1] & DATA_MASK));
70*30bcf84cSAndrew Jeffery 
71*30bcf84cSAndrew Jeffery     line = "partition01=FOO,00001000,00002000,80,junk";
72*30bcf84cSAndrew Jeffery     vpnor::parseTocLine(line, BLOCK_SIZE, part);
73*30bcf84cSAndrew Jeffery     assert(!(part.data.user.data[0]));
74*30bcf84cSAndrew Jeffery     assert(!(part.data.user.data[1] & DATA_MASK));
75*30bcf84cSAndrew Jeffery 
76*30bcf84cSAndrew Jeffery     return 0;
77*30bcf84cSAndrew Jeffery }
78