| .. | .. |
|---|
| 1 | | -// SPDX-License-Identifier: GPL-2.0 |
|---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0 */ |
|---|
| 2 | 2 | /* |
|---|
| 3 | 3 | * Intel(R) Trace Hub Memory Storage Unit (MSU) data structures |
|---|
| 4 | 4 | * |
|---|
| .. | .. |
|---|
| 11 | 11 | enum { |
|---|
| 12 | 12 | REG_MSU_MSUPARAMS = 0x0000, |
|---|
| 13 | 13 | REG_MSU_MSUSTS = 0x0008, |
|---|
| 14 | + REG_MSU_MINTCTL = 0x0004, /* MSU-global interrupt control */ |
|---|
| 14 | 15 | REG_MSU_MSC0CTL = 0x0100, /* MSC0 control */ |
|---|
| 15 | 16 | REG_MSU_MSC0STS = 0x0104, /* MSC0 status */ |
|---|
| 16 | 17 | REG_MSU_MSC0BAR = 0x0108, /* MSC0 output base address */ |
|---|
| .. | .. |
|---|
| 28 | 29 | |
|---|
| 29 | 30 | /* MSUSTS bits */ |
|---|
| 30 | 31 | #define MSUSTS_MSU_INT BIT(0) |
|---|
| 32 | +#define MSUSTS_MSC0BLAST BIT(16) |
|---|
| 33 | +#define MSUSTS_MSC1BLAST BIT(24) |
|---|
| 31 | 34 | |
|---|
| 32 | 35 | /* MSCnCTL bits */ |
|---|
| 33 | 36 | #define MSC_EN BIT(0) |
|---|
| .. | .. |
|---|
| 36 | 39 | #define MSC_MODE (BIT(4) | BIT(5)) |
|---|
| 37 | 40 | #define MSC_LEN (BIT(8) | BIT(9) | BIT(10)) |
|---|
| 38 | 41 | |
|---|
| 39 | | -/* MSC operating modes (MSC_MODE) */ |
|---|
| 40 | | -enum { |
|---|
| 41 | | - MSC_MODE_SINGLE = 0, |
|---|
| 42 | | - MSC_MODE_MULTI, |
|---|
| 43 | | - MSC_MODE_EXI, |
|---|
| 44 | | - MSC_MODE_DEBUG, |
|---|
| 45 | | -}; |
|---|
| 42 | +/* MINTCTL bits */ |
|---|
| 43 | +#define MICDE BIT(0) |
|---|
| 44 | +#define M0BLIE BIT(16) |
|---|
| 45 | +#define M1BLIE BIT(24) |
|---|
| 46 | 46 | |
|---|
| 47 | 47 | /* MSCnSTS bits */ |
|---|
| 48 | 48 | #define MSCSTS_WRAPSTAT BIT(1) /* Wrap occurred */ |
|---|
| .. | .. |
|---|
| 85 | 85 | return bdesc->valid_dw * 4 - MSC_BDESC; |
|---|
| 86 | 86 | } |
|---|
| 87 | 87 | |
|---|
| 88 | +static inline unsigned long msc_total_sz(struct msc_block_desc *bdesc) |
|---|
| 89 | +{ |
|---|
| 90 | + return bdesc->valid_dw * 4; |
|---|
| 91 | +} |
|---|
| 92 | + |
|---|
| 93 | +static inline unsigned long msc_block_sz(struct msc_block_desc *bdesc) |
|---|
| 94 | +{ |
|---|
| 95 | + return bdesc->block_sz * 64 - MSC_BDESC; |
|---|
| 96 | +} |
|---|
| 97 | + |
|---|
| 88 | 98 | static inline bool msc_block_wrapped(struct msc_block_desc *bdesc) |
|---|
| 89 | 99 | { |
|---|
| 90 | | - if (bdesc->hw_tag & MSC_HW_TAG_BLOCKWRAP) |
|---|
| 100 | + if (bdesc->hw_tag & (MSC_HW_TAG_BLOCKWRAP | MSC_HW_TAG_WINWRAP)) |
|---|
| 91 | 101 | return true; |
|---|
| 92 | 102 | |
|---|
| 93 | 103 | return false; |
|---|
| .. | .. |
|---|
| 96 | 106 | static inline bool msc_block_last_written(struct msc_block_desc *bdesc) |
|---|
| 97 | 107 | { |
|---|
| 98 | 108 | if ((bdesc->hw_tag & MSC_HW_TAG_ENDBIT) || |
|---|
| 99 | | - (msc_data_sz(bdesc) != DATA_IN_PAGE)) |
|---|
| 109 | + (msc_data_sz(bdesc) != msc_block_sz(bdesc))) |
|---|
| 100 | 110 | return true; |
|---|
| 101 | 111 | |
|---|
| 102 | 112 | return false; |
|---|