TT-System-Firmware APIs 19.15.99
Tenstorrent Firmware
Loading...
Searching...
No Matches
gddr.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 _GDDR_H_
7#define _GDDR_H_
8
10#include "gddr_params.h"
11
12#include <zephyr/sys/util.h>
13#include <zephyr/sys_clock.h>
14
15/* Oldest telemetry table version the SMC can still consume. Tables older than
16 * GDDR_TELEMETRY_TABLE_T_VERSION simply lack the newer trailing fields.
17 */
18#define GDDR_TELEMETRY_TABLE_T_VERSION_MIN 2
19
20/* gddr_params_table_t feature_bits fields (bh-mrisc feature_bit_t) */
21#define GDDR_FEATURE_AC_TIMING_OVERRIDE BIT(0)
22#define GDDR_FEATURE_CTRL_PHY_PARAMS_OVERRIDE BIT(1)
23#define GDDR_FEATURE_ENABLE_INLINE_ECC BIT(2)
24#define GDDR_FEATURE_CA_SETTINGS_VALID BIT(3)
25#define GDDR_FEATURE_ENABLE_CA_MARGIN_CHECK BIT(4)
26#define GDDR_FEATURE_ENABLE_CA_SWEEP_FALLBACK BIT(5)
27
28#define MIN_GDDR_SPEED 12000
29#define MAX_GDDR_SPEED 20000
30#define GDDR_SPEED_TO_MEMCLK_RATIO 16
31#define NUM_GDDR 8
32#define NUM_MRISC_NOC2AXI_PORT 3
33
34/* MRISC FW telemetry base addr */
35#define GDDR_TELEMETRY_TABLE_ADDR 0x8000
36#define GDDR_MSG_STRUCT_ADDR 0x6000
37
38#define RISC_CTRL_A_SCRATCH_0__REG_ADDR 0xFFB14010
39#define RISC_CTRL_A_SCRATCH_1__REG_ADDR 0xFFB14014
40#define RISC_CTRL_A_SCRATCH_2__REG_ADDR 0xFFB14018
41#define MRISC_INIT_STATUS RISC_CTRL_A_SCRATCH_0__REG_ADDR
42#define MRISC_POST_CODE RISC_CTRL_A_SCRATCH_1__REG_ADDR
43#define MRISC_MSG_REGISTER RISC_CTRL_A_SCRATCH_2__REG_ADDR
44
45#define MRISC_INIT_FINISHED 0xdeadbeef
46#define MRISC_INIT_FAILED 0xfa11
47#define MRISC_INIT_BEFORE 0x11111111
48#define MRISC_INIT_STARTED 0x0
49#ifdef CONFIG_TT_BH_ARC_GDDR_CA_LATCH
50/* The CA sweep fallback (MRISC 2.17+) can escalate through the full
51 * 15 VREFC x 4 termination x 8 driver strength matrix when no setting
52 * satisfies the +/-N margin requirement. Measured worst case is ~28 s on a
53 * P300 (failing points are dominated by training retries); allow for it.
54 * Healthy boots still finish in well under a second - this only delays the
55 * failure verdict for controllers that are already in trouble.
56 */
57#define MRISC_INIT_TIMEOUT 40000 /* In ms */
58#else
59#define MRISC_INIT_TIMEOUT 1000 /* In ms */
60#endif
61#define MRISC_MEMTEST_TIMEOUT 1000 /* In ms */
62#define MRISC_POWER_SETTING_TIMEOUT_MS 1000
63
64/* Defined by MRISC FW */
65
69#define MRISC_MSG_TYPE_NONE 0
71#define MRISC_MSG_TYPE_PHY_POWERDOWN 1
73#define MRISC_MSG_TYPE_PHY_WAKEUP 2
75#define MRISC_MSG_TYPE_RUN_MEMTEST 8
76
77int read_gddr_telemetry_table(uint8_t gddr_inst, gddr_telemetry_table_t *gddr_telemetry);
78
84
86struct gddr_temps {
87 uint32_t max_temp; /* degC, max across all read dies */
88 struct gddr_inst_temp inst[NUM_GDDR]; /* per-instance top/bottom die temps */
89};
90
101int get_gddr_temps(struct gddr_temps *temps);
102
110
116
124
131
132#endif
struct gddr_bist_info get_gddr_bist_info(void)
Get GDDR BIST status.
Definition gddr.c:109
int get_gddr_temps(struct gddr_temps *temps)
Read the DRAM die temperatures for all enabled GDDR instances.
Definition gddr.c:331
#define NUM_GDDR
Definition gddr.h:31
int read_gddr_telemetry_table(uint8_t gddr_inst, gddr_telemetry_table_t *gddr_telemetry)
Definition gddr.c:171
uint8_t get_gddr_mrisc_noc2axi_port(uint8_t gddr_inst)
Get the noc2axi port MRISC FW is loaded on for a GDDR instance.
Definition gddr.c:55
int32_t set_mrisc_power_setting(bool on)
Sets the MRISC power setting for all active MRISCs.
Definition gddr.c:886
__UINT32_TYPE__ uint32_t
__INT32_TYPE__ int32_t
__UINT8_TYPE__ uint8_t
BIST status bitmasks (one bit per GDDR instance).
Definition gddr.h:112
uint8_t failed
Definition gddr.h:114
uint8_t complete
Definition gddr.h:113
Top and bottom DRAM die temperatures for a single GDDR instance (degrees Celsius).
Definition gddr.h:80
uint8_t bottom
Definition gddr.h:82
uint8_t top
Definition gddr.h:81
Definition gddr_telemetry_table.h:21
Per-instance GDDR die temperatures plus the max across all dies.
Definition gddr.h:86
struct gddr_inst_temp inst[8]
Definition gddr.h:88
uint32_t max_temp
Definition gddr.h:87