/* SPDX-License-Identifier: GPL-2.0 */
/*
* Intel(R) Trace Hub Memory Storage Unit (MSU) data structures
*
* Copyright (C) 2014-2015 Intel Corporation.
*/
#ifndef __INTEL_TH_MSU_H__
#define __INTEL_TH_MSU_H__
enum {
REG_MSU_MSUPARAMS = 0 x0000,
REG_MSU_MSUSTS = 0 x0008,
REG_MSU_MINTCTL = 0 x0004, /* MSU-global interrupt control */
REG_MSU_MSC0CTL = 0 x0100, /* MSC0 control */
REG_MSU_MSC0STS = 0 x0104, /* MSC0 status */
REG_MSU_MSC0BAR = 0 x0108, /* MSC0 output base address */
REG_MSU_MSC0SIZE = 0 x010c, /* MSC0 output size */
REG_MSU_MSC0MWP = 0 x0110, /* MSC0 write pointer */
REG_MSU_MSC0NWSA = 0 x011c, /* MSC0 next window start address */
REG_MSU_MSC1CTL = 0 x0200, /* MSC1 control */
REG_MSU_MSC1STS = 0 x0204, /* MSC1 status */
REG_MSU_MSC1BAR = 0 x0208, /* MSC1 output base address */
REG_MSU_MSC1SIZE = 0 x020c, /* MSC1 output size */
REG_MSU_MSC1MWP = 0 x0210, /* MSC1 write pointer */
REG_MSU_MSC1NWSA = 0 x021c, /* MSC1 next window start address */
};
/* MSUSTS bits */
#define MSUSTS_MSU_INT BIT(0 )
#define MSUSTS_MSC0BLAST BIT(16 )
#define MSUSTS_MSC1BLAST BIT(24 )
/* MSCnCTL bits */
#define MSC_EN BIT(0 )
#define MSC_WRAPEN BIT(1 )
#define MSC_RD_HDR_OVRD BIT(2 )
#define MSC_MODE (BIT(4 ) | BIT(5 ))
#define MSC_LEN (BIT(8 ) | BIT(9 ) | BIT(10 ))
/* MINTCTL bits */
#define MICDE BIT(0 )
#define M0BLIE BIT(16 )
#define M1BLIE BIT(24 )
/* MSCnSTS bits */
#define MSCSTS_WRAPSTAT BIT(1 ) /* Wrap occurred */
#define MSCSTS_PLE BIT(2 ) /* Pipeline Empty */
/*
* Multiblock/multiwindow block descriptor
*/
struct msc_block_desc {
u32 sw_tag;
u32 block_sz;
u32 next_blk;
u32 next_win;
u32 res0[4 ];
u32 hw_tag;
u32 valid_dw;
u32 ts_low;
u32 ts_high;
u32 res1[4 ];
} __packed;
#define MSC_BDESC sizeof (struct msc_block_desc)
#define DATA_IN_PAGE (PAGE_SIZE - MSC_BDESC)
/* MSC multiblock sw tag bits */
#define MSC_SW_TAG_LASTBLK BIT(0 )
#define MSC_SW_TAG_LASTWIN BIT(1 )
/* MSC multiblock hw tag bits */
#define MSC_HW_TAG_TRIGGER BIT(0 )
#define MSC_HW_TAG_BLOCKWRAP BIT(1 )
#define MSC_HW_TAG_WINWRAP BIT(2 )
#define MSC_HW_TAG_ENDBIT BIT(3 )
static inline unsigned long msc_data_sz(struct msc_block_desc *bdesc)
{
if (!bdesc->valid_dw)
return 0 ;
return bdesc->valid_dw * 4 - MSC_BDESC;
}
static inline unsigned long msc_total_sz(struct msc_block_desc *bdesc)
{
return bdesc->valid_dw * 4 ;
}
static inline unsigned long msc_block_sz(struct msc_block_desc *bdesc)
{
return bdesc->block_sz * 64 - MSC_BDESC;
}
static inline bool msc_block_wrapped(struct msc_block_desc *bdesc)
{
if (bdesc->hw_tag & (MSC_HW_TAG_BLOCKWRAP | MSC_HW_TAG_WINWRAP))
return true ;
return false ;
}
static inline bool msc_block_last_written(struct msc_block_desc *bdesc)
{
if ((bdesc->hw_tag & MSC_HW_TAG_ENDBIT) ||
(msc_data_sz(bdesc) != msc_block_sz(bdesc)))
return true ;
return false ;
}
/* waiting for Pipeline Empty bit(s) to assert for MSC */
#define MSC_PLE_WAITLOOP_DEPTH 10000
#endif /* __INTEL_TH_MSU_H__ */
Messung V0.5 in Prozent C=94 H=90 G=91
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-07)
¤
*© Formatika GbR, Deutschland