[Skiboot] [PATCH v4 6/9] npu: move npu_set_fence_state() to phb_ops
Nicholas Piggin
npiggin at gmail.com
Mon Dec 20 17:11:49 AEDT 2021
Excerpts from Cédric Le Goater's message of December 18, 2021 1:26 am:
> On 12/17/21 03:36, Nicholas Piggin wrote:
>> From: Stewart Smith <stewart at flamingspork.com>
>>
>> This lets us consider not building in npu.o
>
> I would instead introduce an empty stub for npu_set_fence_state()
> in npu.h.
hmi.c has explicit npu code already, so ok I'll do that.
Would be best to move all the npu and capp checkstop / fir handling into
relevant files and then maybe a new phb checkstop handling ops function
would be justified. But that can be later.
Thanks,
Nick
>
> Thanks,
>
> C.
>
>> Reviewed-by: Dan Horák <dan at danny.cz>
>> Signed-off-by: Stewart Smith <stewart at flamingspork.com>
>> ---
>> core/hmi.c | 2 +-
>> hw/npu.c | 7 +++++--
>> include/npu.h | 1 -
>> include/pci.h | 3 +++
>> 4 files changed, 9 insertions(+), 4 deletions(-)
>>
>> diff --git a/core/hmi.c b/core/hmi.c
>> index ce5abd7d6..fe3d82529 100644
>> --- a/core/hmi.c
>> +++ b/core/hmi.c
>> @@ -908,7 +908,7 @@ static void find_npu_checkstop_reason(int flat_chip_id,
>>
>> if (phb->phb_type == phb_type_pcie_v3) {
>> /* Set the NPU to fenced since it can't recover. */
>> - npu_set_fence_state(phb_to_npu(phb), true);
>> + phb->ops->set_fence_state(phb, true);
>> }
>>
>> /* Set up the HMI event */
>> diff --git a/hw/npu.c b/hw/npu.c
>> index 35e6372d2..542f37397 100644
>> --- a/hw/npu.c
>> +++ b/hw/npu.c
>> @@ -925,7 +925,9 @@ static int64_t npu_eeh_next_error(struct phb *phb,
>> }
>>
>> /* For use in error injection and handling. */
>> -void npu_set_fence_state(struct npu *p, bool fence) {
>> +static void npu_set_fence_state(struct phb *phb, bool fence) {
>> + struct npu *p = phb_to_npu(phb);
>> +
>> p->fenced = fence;
>>
>> if (fence)
>> @@ -968,7 +970,7 @@ static int64_t npu_err_inject(struct phb *phb, uint64_t pe_number,
>> return OPAL_PARAMETER;
>> } else if (type == 1) {
>> /* Emulate fence mode. */
>> - npu_set_fence_state(p, true);
>> + npu_set_fence_state(phb, true);
>> } else {
>> /* Cause a freeze with an invalid MMIO read. If the BAR is not
>> * enabled, this will checkstop the machine.
>> @@ -1012,6 +1014,7 @@ static const struct phb_ops npu_ops = {
>> .get_diag_data2 = NULL,
>> .set_capi_mode = NULL,
>> .set_capp_recovery = NULL,
>> + .set_fence_state = npu_set_fence_state,
>> };
>>
>> static void assign_mmio_bars(uint32_t gcid, uint32_t xscom,
>> diff --git a/include/npu.h b/include/npu.h
>> index 50cc9c9fc..45818a28f 100644
>> --- a/include/npu.h
>> +++ b/include/npu.h
>> @@ -153,7 +153,6 @@ int64_t npu_dev_procedure(void *dev, struct pci_cfg_reg_filter *pcrf,
>> uint32_t offset, uint32_t len, uint32_t *data,
>> bool write);
>>
>> -void npu_set_fence_state(struct npu *p, bool fence);
>> void npu_dev_procedure_reset(struct npu_dev *dev);
>>
>> #define NPUDBG(p, fmt, a...) prlog(PR_DEBUG, "NPU%d: " fmt, \
>> diff --git a/include/pci.h b/include/pci.h
>> index caae74431..101442490 100644
>> --- a/include/pci.h
>> +++ b/include/pci.h
>> @@ -340,6 +340,9 @@ struct phb_ops {
>> /* Get/set PBCQ Tunnel BAR register */
>> void (*get_tunnel_bar)(struct phb *phb, uint64_t *addr);
>> int64_t (*set_tunnel_bar)(struct phb *phb, uint64_t addr);
>> +
>> + /* Currently only used by NPU HMI code */
>> + void (*set_fence_state)(struct phb *phb, bool fence);
>> };
>>
>> enum phb_type {
>>
>
>
More information about the Skiboot
mailing list