summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/fapiTestHwp.C
blob: b37bdd49a343667b9430d9c571da43fe6c00adb6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/**
 *  @file fapiTestHwp.C
 *
 *  @brief Implements a simple test Hardware Procedure
 */

/*
 * Change Log ******************************************************************
 * Flag     Defect/Feature  User        Date        Description
 * ------   --------------  ----------  ----------- ----------------------------
 *                          mjjones     04/21/2011  Created.
 *                          mjjones     06/02/2011  Use ecmdDataBufferBase
 *                          mjjones     06/28/2011  Removed attribute tests
 *                          andrewg     07/07/2011  Added test for hw team to fill in
 *
 */

#include <fapiTestHwp.H>

extern "C"
{

//******************************************************************************
// hwpIsP7ChipletClockOn function
//******************************************************************************
fapi::ReturnCode hwpIsP7EM0ChipletClockOn(const fapi::Target & i_chip,
                                          bool & o_clocksOn)
{
    // Ported from a combination of
    // hwsvClockAlgP7.C : hwsvClockQueryOnP7 (main HWP)
    // hwsvClockAlgP7.C : isChipletClockOn (sub function)

    // Attempt to call the attribute get/set functions for the test attributes
    fapi::ReturnCode l_rc;

    // -----------------------------------------------------------------------
    // NOTE: @TODO
    // There's no EM0 in P8.
    // Must use core 3 clock status register to work in current VBU model
    // -----------------------------------------------------------------------
    // Constants
    const uint64_t EX_CLOCK_STATUS_MASK = 0xEEC0000000000000ULL;
    const uint32_t EX3_CHIPLET_BASE_ADDR = 0x13000000;
    const uint32_t CHIPLET_CLOCK_ON_SCOM_ADDR = 0x00030008;

    // Set caller's result to default
    o_clocksOn = false;

    // Figure out the scom address and create a 64 bit data buffer
    uint32_t l_addr = (EX3_CHIPLET_BASE_ADDR | CHIPLET_CLOCK_ON_SCOM_ADDR);
    ecmdDataBufferBase l_data(64);

    // Perform a GetScom operation on the chip
    l_rc = GetScom(i_chip, l_addr, l_data);

    if (l_rc != fapi::FAPI_RC_SUCCESS)
    {
        FAPI_ERR("hwpIsP8EX3ChipletClockOn: Error from GetScomChip");
    }
    else
    {
        if (!(l_data.getDoubleWord(0) & EX_CLOCK_STATUS_MASK))
        {
            FAPI_INF("hwpIsP8EX3ChipletClockOn: Clocks are on");
            o_clocksOn = true;
        }
        else
        {
            FAPI_INF("hwpIsP8EX3ChipletClockOn: Clocks are off");
        }
    }

    return l_rc;
}

//******************************************************************************
// hwpInitialTest function - Override with whatever you want here
//******************************************************************************
fapi::ReturnCode hwpInitialTest(const fapi::Target & i_chip)
{
    fapi::ReturnCode l_rc;

    // Figure out the scom address and create a 64 bit data buffer
    ecmdDataBufferBase l_data(64);

    const uint64_t l_addr = 0x0201240B;

    // Perform a GetScom operation on the chip
    l_rc = GetScom(i_chip, l_addr, l_data);

    if (l_rc != fapi::FAPI_RC_SUCCESS)
    {
        FAPI_ERR("hwpInitialTest: Error from GetScomChip");
    }
    else
    {
        FAPI_INF("hwpInitialTest: Data from SCOM:0x%X  0x%16X",l_data.getDoubleWord(0));
        
    }

    return l_rc;
}

} // extern "C"
OpenPOWER on IntegriCloud