mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-23 11:33:32 +00:00
81 lines
1.7 KiB
Text
81 lines
1.7 KiB
Text
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||
|
/*
|
||
|
* Copyright (C) 2015 Google Inc.
|
||
|
* Copyright (C) 2018 Intel Corporation.
|
||
|
*/
|
||
|
|
||
|
#include <intelblocks/pcr.h>
|
||
|
|
||
|
/*
|
||
|
* Calculate PCR register base at specified PID
|
||
|
* Arg0 - PCR Port ID
|
||
|
*/
|
||
|
Method (PCRB, 1, NotSerialized)
|
||
|
{
|
||
|
Return (Add (IOMAP_P2SB_BAR,
|
||
|
ShiftLeft (Arg0, PCR_PORTID_SHIFT)))
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Read a PCR register at specified PID and offset
|
||
|
* Arg0 - PCR Port ID
|
||
|
* Arg1 - Register Offset
|
||
|
*/
|
||
|
Method (PCRR, 2, Serialized)
|
||
|
{
|
||
|
OperationRegion (PCRD, SystemMemory, Add (PCRB (Arg0), Arg1), 4)
|
||
|
Field (PCRD, DWordAcc, NoLock, Preserve)
|
||
|
{
|
||
|
DATA, 32
|
||
|
}
|
||
|
Return (DATA)
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* AND a value with PCR register at specified PID and offset
|
||
|
* Arg0 - PCR Port ID
|
||
|
* Arg1 - Register Offset
|
||
|
* Arg2 - Value to AND
|
||
|
*/
|
||
|
Method (PCRA, 3, Serialized)
|
||
|
{
|
||
|
OperationRegion (PCRD, SystemMemory, Add (PCRB (Arg0), Arg1), 4)
|
||
|
Field (PCRD, DWordAcc, NoLock, Preserve)
|
||
|
{
|
||
|
DATA, 32
|
||
|
}
|
||
|
And (DATA, Arg2, DATA)
|
||
|
|
||
|
/*
|
||
|
* After every write one needs to read an innocuous register
|
||
|
* to ensure the writes are completed for certain ports. This is done
|
||
|
* for all ports so that the callers don't need the per-port knowledge
|
||
|
* for each transaction.
|
||
|
*/
|
||
|
PCRR (Arg0, Arg1)
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* OR a value with PCR register at specified PID and offset
|
||
|
* Arg0 - PCR Port ID
|
||
|
* Arg1 - Register Offset
|
||
|
* Arg2 - Value to OR
|
||
|
*/
|
||
|
Method (PCRO, 3, Serialized)
|
||
|
{
|
||
|
OperationRegion (PCRD, SystemMemory, Add (PCRB (Arg0), Arg1), 4)
|
||
|
Field (PCRD, DWordAcc, NoLock, Preserve)
|
||
|
{
|
||
|
DATA, 32
|
||
|
}
|
||
|
Or (DATA, Arg2, DATA)
|
||
|
|
||
|
/*
|
||
|
* After every write one needs to read an innocuous register
|
||
|
* to ensure the writes are completed for certain ports. This is done
|
||
|
* for all ports so that the callers don't need the per-port knowledge
|
||
|
* for each transaction.
|
||
|
*/
|
||
|
PCRR (Arg0, Arg1)
|
||
|
}
|