TT Zephyr Platforms 18.11.99
Tenstorrent Firmware
Loading...
Searching...
No Matches
noc2axi.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2024 Tenstorrent AI ULC
3 * SPDX-License-Identifier: Apache-2.0
4 */
5
6#ifndef NOC2AXI_H
7#define NOC2AXI_H
8
9#include <stdint.h>
10#include <zephyr/sys/util.h>
11#include "reg.h"
12
13#define ARC_NOC0_BASE_ADDR 0xC0000000
14#define ARC_NOC1_BASE_ADDR 0xE0000000
15
16#define NOC_TLB_LOG_SIZE 24
17#define NOC_TLB_WINDOW_ADDR_MASK ((1 << NOC_TLB_LOG_SIZE) - 1)
18
25
26void NOC2AXITlbSetup(const uint8_t ring, const uint8_t tlb_num, const uint8_t x, const uint8_t y,
27 const uint64_t addr);
28void NOC2AXIMulticastTlbSetup(const uint8_t ring, const uint8_t tlb_num, const uint8_t x_start,
29 const uint8_t y_start, const uint8_t x_end, const uint8_t y_end,
30 const uint64_t addr, Noc2AxiOrdering ordering);
31void NOC2AXITensixBroadcastTlbSetup(const uint8_t ring, const uint8_t tlb_num, const uint64_t addr,
32 Noc2AxiOrdering ordering);
33
34static inline void volatile *GetTlbWindowAddr(const uint8_t noc_id, const uint8_t tlb_entry,
35 const uint64_t addr)
36{
37 uint32_t noc_base_addr = (noc_id == 0) ? ARC_NOC0_BASE_ADDR : ARC_NOC1_BASE_ADDR;
38 uint32_t volatile *_addr =
39 (void volatile *)(noc_base_addr + (tlb_entry << NOC_TLB_LOG_SIZE) +
41 return _addr;
42}
43
44static inline void NOC2AXIWrite32(const uint8_t noc_id, const uint8_t tlb_entry,
45 const uint64_t addr, const uint32_t data)
46{
47 WriteReg((uint32_t)GetTlbWindowAddr(noc_id, tlb_entry, addr), data);
48}
49
50static inline void NOC2AXIWrite8(const uint8_t noc_id, const uint8_t tlb_entry, const uint64_t addr,
51 const uint8_t data)
52{
53 uint8_t volatile *_addr = GetTlbWindowAddr(noc_id, tlb_entry, addr);
54 *_addr = data;
55}
56
57static inline uint32_t NOC2AXIRead32(const uint8_t noc_id, const uint8_t tlb_entry,
58 const uint64_t addr)
59{
60 return ReadReg((uint32_t)GetTlbWindowAddr(noc_id, tlb_entry, addr));
61}
62
63#endif
#define ARC_NOC0_BASE_ADDR
Definition noc2axi.h:13
#define NOC_TLB_WINDOW_ADDR_MASK
Definition noc2axi.h:17
void NOC2AXITensixBroadcastTlbSetup(const uint8_t ring, const uint8_t tlb_num, const uint64_t addr, Noc2AxiOrdering ordering)
Definition noc2axi.c:145
Noc2AxiOrdering
Definition noc2axi.h:19
@ kNoc2AxiOrderingPostedStrict
Definition noc2axi.h:23
@ kNoc2AxiOrderingStrict
Definition noc2axi.h:21
@ kNoc2AxiOrderingRelaxed
Definition noc2axi.h:20
@ kNoc2AxiOrderingPosted
Definition noc2axi.h:22
static uint32_t NOC2AXIRead32(const uint8_t noc_id, const uint8_t tlb_entry, const uint64_t addr)
Definition noc2axi.h:57
void NOC2AXITlbSetup(const uint8_t ring, const uint8_t tlb_num, const uint8_t x, const uint8_t y, const uint64_t addr)
Definition noc2axi.c:92
#define ARC_NOC1_BASE_ADDR
Definition noc2axi.h:14
static void NOC2AXIWrite8(const uint8_t noc_id, const uint8_t tlb_entry, const uint64_t addr, const uint8_t data)
Definition noc2axi.h:50
#define NOC_TLB_LOG_SIZE
Definition noc2axi.h:16
static void volatile * GetTlbWindowAddr(const uint8_t noc_id, const uint8_t tlb_entry, const uint64_t addr)
Definition noc2axi.h:34
static void NOC2AXIWrite32(const uint8_t noc_id, const uint8_t tlb_entry, const uint64_t addr, const uint32_t data)
Definition noc2axi.h:44
void NOC2AXIMulticastTlbSetup(const uint8_t ring, const uint8_t tlb_num, const uint8_t x_start, const uint8_t y_start, const uint8_t x_end, const uint8_t y_end, const uint64_t addr, Noc2AxiOrdering ordering)
Definition noc2axi.c:113
static void WriteReg(uint32_t addr, uint32_t val)
Definition reg.h:19
static uint32_t ReadReg(uint32_t addr)
Definition reg.h:15
__UINT32_TYPE__ uint32_t
__INTPTR_TYPE__ intptr_t
__UINT64_TYPE__ uint64_t
__UINT8_TYPE__ uint8_t