<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>diff</title>
<meta name="Generator" content="Vim/9.0">
<meta name="plugin-version" content="vim9.0_v2">
<meta name="settings" content="whole_filler,use_css,no_foldcolumn,prevent_copy=,use_input_for_pc=none">
<meta name="colorscheme" content="none">
<style>
<!--
pre { font-family: monospace; color: #ffffff; background-color: #000000; }
body { font-family: monospace; color: #ffffff; background-color: #000000; }
* { font-size: 1em; }
.Folded { color: #00ffff; background-color: #808080; padding-bottom: 1px; font-weight: bold; }
.PreProc { color: #8080ff; font-weight: bold; }
.Type { color: #00ff00; font-weight: bold; }
.Statement { color: #ffff00; font-weight: bold; }
.Comment { color: #00ffff; font-weight: bold; }
.Constant { color: #ff40ff; font-weight: bold; }
.DiffText { background-color: #ff6060; padding-bottom: 1px; font-weight: bold; }
.DiffAdd { background-color: #8080ff; padding-bottom: 1px; }
.DiffChange { background-color: #ff40ff; padding-bottom: 1px; }
.DiffDelete { color: #8080ff; background-color: #00ffff; padding-bottom: 1px; font-weight: bold; }
-->
<!--
table { table-layout: fixed; }
html, body, table, tbody { width: 100%; margin: 0; padding: 0; }
table, td, th { border: 1px solid; }
td { vertical-align: top; }
th, td { width: 50.0%; }
td div { overflow: auto; }
-->
</style>
</head>
<body>
<table id='vimCodeElement'>
<tr>
<th>drivers/net/ethernet/stmicro/stmmac/dwmac5_sfty.c</th>
<th>drivers/net/ethernet/stmicro/stmmac/dwxgmac2_sfty.c</th>
</tr><tr>
<td><div>
<pre>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">MAC_DPP_FSM_INT_STATUS </span><span class="Constant DiffText">0x0000014</span><span class="Constant DiffChange">0</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">MAC_FSM_CONTROL </span><span class="Constant DiffText">0x0000014</span><span class="Constant DiffChange">8</span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">MTL_ECC_CONTROL </span><span class="Constant DiffText">0x00000c</span><span class="Constant DiffChange">c0</span><span class="DiffChange"> </span>
<span class="PreProc DiffText">#define MEEAO BIT(</span><span class="Constant DiffText">8</span><span class="PreProc DiffText">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffText">#define TSOEE BIT(</span><span class="Constant DiffText">4</span><span class="PreProc DiffText">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffText">#define MRXPEE BIT(</span><span class="Constant DiffText">3</span><span class="PreProc DiffText">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffText">#define MESTEE BIT(</span><span class="Constant DiffText">2</span><span class="PreProc DiffText">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffText">#define MRXEE BIT(</span><span class="Constant DiffText">1</span><span class="PreProc DiffText">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffText">#define MTXEE BIT(</span><span class="Constant DiffText">0</span><span class="PreProc DiffText">)</span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">MTL_SAFETY_INT_STATUS </span><span class="Constant DiffText">0x00000c</span><span class="Constant DiffChange">c4</span><span class="DiffChange"> </span>
<span class="PreProc DiffText">#define MCSIS BIT(</span><span class="Constant DiffText">31</span><span class="PreProc DiffText">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">MEUIS </span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">1</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">MECIS </span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">0</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">MTL_ECC_INT_ENABLE </span><span class="Constant DiffText">0x00000c</span><span class="Constant DiffChange">c8</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">RPCEIE </span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">12</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">ECEIE </span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">8</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">RXCEIE </span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">4</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">TXCEIE </span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">0</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">MTL_ECC_INT_STATUS </span><span class="Constant DiffText">0x00000c</span><span class="Constant DiffChange">cc</span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="PreProc DiffText">#define MTL_DPP_CONTROL </span><span class="Constant DiffText">0x00000ce0</span><span class="DiffChange"> </span>
<span class="PreProc DiffText">#define EPSI BIT(</span><span class="Constant DiffText">2</span><span class="PreProc DiffText">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffText">#define OPE BIT(</span><span class="Constant DiffText">1</span><span class="PreProc DiffText">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffText">#define EDPP BIT(</span><span class="Constant DiffText">0</span><span class="PreProc DiffText">)</span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">DMA_SAFETY_INT_STATUS </span><span class="Constant DiffText">0x00001080</span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">MSUIS </span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">29</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">MSCIS </span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">28</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">DEUIS </span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">1</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">DECIS </span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">0</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">DMA_ECC_INT_ENABLE </span><span class="Constant DiffText">0x00001084</span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">TCEIE </span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">0</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">DMA_ECC_INT_STATUS </span><span class="Constant DiffText">0x00001088</span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="Type DiffChange">struct</span><span class="DiffChange"> dw</span><span class="DiffText">mac5</span><span class="DiffChange">_error_desc { </span>
<span class="Type">bool</span> valid;
<span class="Type">const</span> <span class="Type">char</span> *desc;
<span class="Type">const</span> <span class="Type">char</span> *detailed_desc;
};
<span class="PreProc">#define STAT_OFF(field) offsetof(</span><span class="Type">struct</span><span class="PreProc"> stmmac_safety_stats, field)</span>
<span class="Type DiffChange">static</span><span class="DiffChange"> </span><span class="Type DiffChange">void</span><span class="DiffChange"> dw</span><span class="DiffText">mac5</span><span class="DiffChange">_log_error(</span><span class="Type DiffChange">struct</span><span class="DiffChange"> net_device *ndev, u32 value, </span><span class="Type DiffChange">bool</span><span class="DiffChange"> corr, </span>
<span class="Type">const</span> <span class="Type">char</span> *module_name,
<span class="DiffChange"> </span><span class="Type DiffChange">const</span><span class="DiffChange"> </span><span class="Type DiffChange">struct</span><span class="DiffChange"> dw</span><span class="DiffText">mac5</span><span class="DiffChange">_error_desc *desc, </span>
<span class="Type">unsigned</span> <span class="Type">long</span> field_offset,
<span class="Type">struct</span> stmmac_safety_stats *stats)
{
<span class="Type">unsigned</span> <span class="Type">long</span> loc, mask;
u8 *bptr = (u8 *)stats;
<span class="Type">unsigned</span> <span class="Type">long</span> *ptr;
<span class="Folded">+-- 8 lines: ptr = (unsigned long *)(bptr + field_offset);----------------------------------------------------------------------------------------------------------------</span>
<span class="Comment">/*</span><span class="Comment"> Update counters </span><span class="Comment">*/</span>
ptr[loc]++;
}
}
<span class="Type DiffChange">static</span><span class="DiffChange"> </span><span class="Type DiffChange">const</span><span class="DiffChange"> </span><span class="Type DiffChange">struct</span><span class="DiffChange"> dw</span><span class="DiffText">mac5_error_desc dwmac5</span><span class="DiffChange">_mac_errors[</span><span class="Constant DiffChange">32</span><span class="DiffChange">]= { </span>
{ <span class="Constant">true</span>, <span class="Constant">"ATPES"</span>, <span class="Constant">"Application Transmit Interface Parity Check Error"</span> },
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
{ <span class="Constant">true</span>, <span class="Constant">"TPES"</span>, <span class="Constant">"TSO Data Path Parity Check Error"</span> },
<span class="DiffChange"> { </span><span class="Constant DiffChange">true</span><span class="DiffChange">, </span><span class="Constant DiffChange">"</span><span class="Constant DiffText">RDPES"</span><span class="DiffText">, </span><span class="Constant DiffText">"Read Descriptor</span><span class="Constant DiffChange"> Parity Check Error"</span><span class="DiffChange"> }, </span>
<span class="DiffChange"> { </span><span class="Constant DiffChange">true</span><span class="DiffChange">, </span><span class="Constant DiffChange">"MPES"</span><span class="DiffChange">, </span><span class="Constant DiffChange">"MTL Data Path Parity Check Error"</span><span class="DiffChange"> }, </span>
{ <span class="Constant">true</span>, <span class="Constant">"MTSPES"</span>, <span class="Constant">"MTL TX Status Data Path Parity Check Error"</span> },
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
{ <span class="Constant">true</span>, <span class="Constant">"ARPES"</span>, <span class="Constant">"Application Receive Interface Data Path Parity Check Error"</span> },
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
{ <span class="Constant">true</span>, <span class="Constant">"CWPES"</span>, <span class="Constant">"CSR Write Data Path Parity Check Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"ASRPES"</span>, <span class="Constant">"AXI Slave Read Data Path Parity Check Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"TTES"</span>, <span class="Constant">"TX FSM Timeout Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"RTES"</span>, <span class="Constant">"RX FSM Timeout Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"CTES"</span>, <span class="Constant">"CSR FSM Timeout Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"ATES"</span>, <span class="Constant">"APP FSM Timeout Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"PTES"</span>, <span class="Constant">"PTP FSM Timeout Error"</span> },
<span class="DiffChange"> { </span><span class="Constant DiffText">true</span><span class="DiffText">, </span><span class="Constant DiffText">"T125ES"</span><span class="DiffText">, </span><span class="Constant DiffText">"TX125 FSM Timeout Error"</span><span class="DiffText"> },</span><span class="DiffChange"> </span>
<span class="DiffChange"> { </span><span class="Constant DiffText">true</span><span class="DiffText">, </span><span class="Constant DiffText">"R125ES"</span><span class="DiffText">, </span><span class="Constant DiffText">"RX125 FSM Timeout Error"</span><span class="DiffText"> },</span><span class="DiffChange"> </span>
<span class="DiffChange"> { </span><span class="Constant DiffText">true</span><span class="DiffText">, </span><span class="Constant DiffText">"RVCTES"</span><span class="DiffText">, </span><span class="Constant DiffText">"REV MDC FSM Timeout Error"</span><span class="DiffText"> },</span><span class="DiffChange"> </span>
{ <span class="Constant">true</span>, <span class="Constant">"MSTTES"</span>, <span class="Constant">"Master Read/Write Timeout Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"SLVTES"</span>, <span class="Constant">"Slave Read/Write Timeout Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"ATITES"</span>, <span class="Constant">"Application Timeout on ATI Interface Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"ARITES"</span>, <span class="Constant">"Application Timeout on ARI Interface Error"</span> },
<span class="DiffAdd"> { </span><span class="Constant DiffAdd">false</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"UNKNOWN"</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"Unknown Error"</span><span class="DiffAdd"> }, </span><span class="Comment DiffAdd">/*</span><span class="Comment DiffAdd"> 20 </span><span class="Comment DiffAdd">*/</span><span class="DiffAdd"> </span>
<span class="DiffAdd"> { </span><span class="Constant DiffAdd">false</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"UNKNOWN"</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"Unknown Error"</span><span class="DiffAdd"> }, </span><span class="Comment DiffAdd">/*</span><span class="Comment DiffAdd"> 21 </span><span class="Comment DiffAdd">*/</span><span class="DiffAdd"> </span>
<span class="DiffAdd"> { </span><span class="Constant DiffAdd">false</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"UNKNOWN"</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"Unknown Error"</span><span class="DiffAdd"> }, </span><span class="Comment DiffAdd">/*</span><span class="Comment DiffAdd"> 22 </span><span class="Comment DiffAdd">*/</span><span class="DiffAdd"> </span>
<span class="DiffAdd"> { </span><span class="Constant DiffAdd">false</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"UNKNOWN"</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"Unknown Error"</span><span class="DiffAdd"> }, </span><span class="Comment DiffAdd">/*</span><span class="Comment DiffAdd"> 23 </span><span class="Comment DiffAdd">*/</span><span class="DiffAdd"> </span>
{ <span class="Constant">true</span>, <span class="Constant">"FSMPES"</span>, <span class="Constant">"FSM State Parity Error"</span> },
<span class="DiffAdd"> { </span><span class="Constant DiffAdd">false</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"UNKNOWN"</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"Unknown Error"</span><span class="DiffAdd"> }, </span><span class="Comment DiffAdd">/*</span><span class="Comment DiffAdd"> 25 </span><span class="Comment DiffAdd">*/</span><span class="DiffAdd"> </span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 26 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 27 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 28 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 29 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 30 </span><span class="Comment">*/</span>
<span class="DiffChange"> { </span><span class="Constant DiffText">false</span><span class="DiffText">, </span><span class="Constant DiffText">"UNKNOWN"</span><span class="DiffText">, </span><span class="Constant DiffText">"Unknown Error"</span><span class="DiffText"> }, </span><span class="Comment DiffText">/*</span><span class="Comment DiffText"> 31 </span><span class="Comment DiffText">*/</span><span class="DiffChange"> </span>
};
<span class="Type DiffChange">static</span><span class="DiffChange"> </span><span class="Type DiffChange">void</span><span class="DiffChange"> dw</span><span class="DiffText">mac5</span><span class="DiffChange">_handle_mac_err(</span><span class="Type DiffChange">struct</span><span class="DiffChange"> net_device *ndev, </span>
<span class="Type">void</span> __iomem *ioaddr, <span class="Type">bool</span> correctable,
<span class="Type">struct</span> stmmac_safety_stats *stats)
{
u32 value;
<span class="DiffChange"> value = readl(ioaddr + MAC_DPP_FSM_INT_STATUS);</span><span class="DiffChange"> </span>
<span class="DiffChange"> writel(value, ioaddr + MAC_DPP_FSM_INT_STATUS);</span><span class="DiffChange"> </span>
<span class="DiffChange"> dw</span><span class="DiffText">mac5_log_error(ndev, value, correctable, </span><span class="Constant DiffText">"MAC"</span><span class="DiffText">, dwmac5</span><span class="DiffChange">_mac_errors, </span>
<span class="DiffChange"> STAT_OFF(mac_errors), stats);</span><span class="DiffChange"> </span>
}
<span class="Type DiffChange">static</span><span class="DiffChange"> </span><span class="Type DiffChange">const</span><span class="DiffChange"> </span><span class="Type DiffChange">struct</span><span class="DiffChange"> dw</span><span class="DiffText">mac5_error_desc dwmac5</span><span class="DiffChange">_mtl_errors[</span><span class="Constant DiffChange">32</span><span class="DiffChange">]= { </span>
{ <span class="Constant">true</span>, <span class="Constant">"TXCES"</span>, <span class="Constant">"MTL TX Memory Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"TXAMS"</span>, <span class="Constant">"MTL TX Memory Address Mismatch Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"TXUES"</span>, <span class="Constant">"MTL TX Memory Error"</span> },
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 3 </span><span class="Comment">*/</span>
{ <span class="Constant">true</span>, <span class="Constant">"RXCES"</span>, <span class="Constant">"MTL RX Memory Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"RXAMS"</span>, <span class="Constant">"MTL RX Memory Address Mismatch Error"</span> },
<span class="Folded">+-- 22 lines: { true, "RXUES", "MTL RX Memory Error" },--------------------------------------------------------------------------------------------------------------------</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 28 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 29 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 30 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 31 </span><span class="Comment">*/</span>
};
<span class="Type DiffChange">static</span><span class="DiffChange"> </span><span class="Type DiffChange">void</span><span class="DiffChange"> dw</span><span class="DiffText">mac5</span><span class="DiffChange">_handle_mtl_err(</span><span class="Type DiffChange">struct</span><span class="DiffChange"> net_device *ndev, </span>
<span class="Type">void</span> __iomem *ioaddr, <span class="Type">bool</span> correctable,
<span class="Type">struct</span> stmmac_safety_stats *stats)
{
u32 value;
<span class="DiffChange"> value = readl(ioaddr + MTL_ECC_INT_STATUS);</span><span class="DiffChange"> </span>
<span class="DiffChange"> writel(value, ioaddr + MTL_ECC_INT_STATUS);</span><span class="DiffChange"> </span>
<span class="DiffChange"> dw</span><span class="DiffText">mac5_log_error(ndev, value, correctable, </span><span class="Constant DiffText">"MTL"</span><span class="DiffText">, dwmac5_mtl_errors</span><span class="DiffChange">, </span>
<span class="DiffChange"> STAT_OFF(mtl_errors), stats);</span><span class="DiffChange"> </span>
}
<span class="Type DiffChange">static</span><span class="DiffChange"> </span><span class="Type DiffChange">const</span><span class="DiffChange"> </span><span class="Type DiffChange">struct</span><span class="DiffChange"> dw</span><span class="DiffText">mac5_error_desc dwmac5</span><span class="DiffChange">_dma_errors[</span><span class="Constant DiffChange">32</span><span class="DiffChange">]= { </span>
{ <span class="Constant">true</span>, <span class="Constant">"TCES"</span>, <span class="Constant">"DMA TSO Memory Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"TAMS"</span>, <span class="Constant">"DMA TSO Memory Address Mismatch Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"TUES"</span>, <span class="Constant">"DMA TSO Memory Error"</span> },
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 3 </span><span class="Comment">*/</span>
<span class="DiffChange"> { </span><span class="Constant DiffText">false</span><span class="DiffText">, </span><span class="Constant DiffText">"UNKNOWN"</span><span class="DiffText">, </span><span class="Constant DiffText">"Unknown Error"</span><span class="DiffText"> }, </span><span class="Comment DiffText">/*</span><span class="Comment DiffText"> 4 </span><span class="Comment DiffText">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> { </span><span class="Constant DiffText">false</span><span class="DiffText">, </span><span class="Constant DiffText">"UNKNOWN"</span><span class="DiffText">, </span><span class="Constant DiffText">"Unknown Error"</span><span class="DiffText"> }, </span><span class="Comment DiffText">/*</span><span class="Comment DiffText"> 5 </span><span class="Comment DiffText">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> { </span><span class="Constant DiffText">false</span><span class="DiffText">, </span><span class="Constant DiffText">"UNKNOWN"</span><span class="DiffText">, </span><span class="Constant DiffText">"Unknown Error"</span><span class="DiffText"> }, </span><span class="Comment DiffText">/*</span><span class="Comment DiffText"> 6 </span><span class="Comment DiffText">*/</span><span class="DiffChange"> </span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 7 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 8 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 9 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 10 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 11 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 12 </span><span class="Comment">*/</span>
<span class="Folded">+-- 15 lines: { false, "UNKNOWN", "Unknown Error" }, 13 -------------------------------------------------------------------------------------------------------------------</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 28 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 29 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 30 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 31 </span><span class="Comment">*/</span>
};
<span class="Type DiffChange">static</span><span class="DiffChange"> </span><span class="Type DiffChange">void</span><span class="DiffChange"> dw</span><span class="DiffText">mac5</span><span class="DiffChange">_handle_dma_err(</span><span class="Type DiffChange">struct</span><span class="DiffChange"> net_device *ndev, </span>
<span class="DiffChange"> </span><span class="Type DiffChange">void</span><span class="DiffChange"> __iomem *ioaddr, </span><span class="Type DiffChange">bool</span><span class="DiffChange"> correctable, </span>
<span class="DiffChange"> </span><span class="Type DiffChange">struct</span><span class="DiffChange"> stmmac_safety_stats *stats) </span>
{
u32 value;
<span class="DiffChange"> value = readl(ioaddr + DMA_ECC_INT_STATUS);</span><span class="DiffChange"> </span>
<span class="DiffChange"> writel(value, ioaddr + DMA_ECC_INT_STATUS);</span><span class="DiffChange"> </span>
<span class="DiffChange"> dw</span><span class="DiffText">mac5_log_error(ndev, value, correctable, </span><span class="Constant DiffText">"DMA"</span><span class="DiffText">, dwmac5</span><span class="DiffChange">_dma_errors, </span>
<span class="DiffChange"> STAT_OFF(dma_errors), stats);</span><span class="DiffChange"> </span>
}
<span class="Type DiffText">int</span><span class="DiffText"> dwmac5</span><span class="DiffChange">_safety_feat_irq_status(</span><span class="Type DiffChange">struct</span><span class="DiffChange"> net_device *ndev, </span>
<span class="DiffChange"> </span><span class="Type DiffChange">void</span><span class="DiffChange"> __iomem *ioaddr, </span>
<span class="DiffChange"> </span><span class="Type DiffChange">unsigned</span><span class="DiffChange"> </span><span class="Type DiffChange">int</span><span class="DiffChange"> asp, </span>
<span class="DiffChange"> </span><span class="Type DiffChange">struct</span><span class="DiffChange"> stmmac_safety_stats *stats) </span>
{
<span class="Type">bool</span> err, corr;
u32 mtl, dma;
<span class="Type">int</span> ret = <span class="Constant">0</span>;
<span class="Statement">if</span> (!asp)
<span class="Statement">return</span> -<span class="Constant">EINVAL</span>;
<span class="DiffChange"> mtl = readl(ioaddr + MTL_SAFETY_INT_STATUS);</span><span class="DiffChange"> </span>
<span class="DiffChange"> dma = readl(ioaddr + DMA_SAFETY_INT_STATUS);</span><span class="DiffChange"> </span>
<span class="DiffChange"> err = (mtl & </span><span class="DiffText">MCSIS) || (dma & </span><span class="DiffChange">MCSIS); </span>
corr = <span class="Constant">false</span>;
<span class="Statement">if</span> (err) {
<span class="DiffChange"> dw</span><span class="DiffText">mac5</span><span class="DiffChange">_handle_mac_err(ndev, ioaddr, corr, stats); </span>
ret |= !corr;
}
<span class="DiffChange"> err = (mtl & (</span><span class="DiffText">MEUIS | MECIS)) || (dma & (MSUIS | </span><span class="DiffChange">MSCIS)); </span>
<span class="DiffChange"> corr = (mtl & </span><span class="DiffText">MECIS) || (dma & </span><span class="DiffChange">MSCIS); </span>
<span class="Statement">if</span> (err) {
<span class="DiffChange"> dw</span><span class="DiffText">mac5</span><span class="DiffChange">_handle_mtl_err(ndev, ioaddr, corr, stats); </span>
ret |= !corr;
}
<span class="DiffChange"> err = dma & (</span><span class="DiffText">DEUIS | </span><span class="DiffChange">DECIS); </span>
<span class="DiffChange"> corr = dma & DECIS;</span><span class="DiffChange"> </span>
<span class="Statement">if</span> (err) {
<span class="DiffChange"> dw</span><span class="DiffText">mac5</span><span class="DiffChange">_handle_dma_err(ndev, ioaddr, corr, stats); </span>
ret |= !corr;
}
<span class="Statement">return</span> ret;
}
<span class="Type DiffChange">static</span><span class="DiffChange"> </span><span class="Type DiffChange">const</span><span class="DiffChange"> </span><span class="Type DiffChange">struct</span><span class="DiffChange"> dw</span><span class="DiffText">mac5</span><span class="DiffChange">_error { </span>
<span class="DiffChange"> </span><span class="Type DiffChange">const</span><span class="DiffChange"> </span><span class="Type DiffChange">struct</span><span class="DiffChange"> dw</span><span class="DiffText">mac5</span><span class="DiffChange">_error_desc *desc; </span>
<span class="DiffChange">} dw</span><span class="DiffText">mac5</span><span class="DiffChange">_all_errors[] = { </span>
<span class="DiffChange"> { dw</span><span class="DiffText">mac5</span><span class="DiffChange">_mac_errors }, </span>
<span class="DiffChange"> { dw</span><span class="DiffText">mac5</span><span class="DiffChange">_mtl_errors }, </span>
<span class="DiffChange"> { dw</span><span class="DiffText">mac5</span><span class="DiffChange">_dma_errors }, </span>
};
<span class="Type DiffText">int</span><span class="DiffText"> dwmac5</span><span class="DiffChange">_safety_feat_dump(</span><span class="Type DiffChange">struct</span><span class="DiffChange"> stmmac_safety_stats *stats, </span>
<span class="DiffChange"> </span><span class="Type DiffChange">int</span><span class="DiffChange"> index, </span><span class="Type DiffChange">unsigned</span><span class="DiffChange"> </span><span class="Type DiffChange">long</span><span class="DiffChange"> *count, </span>
<span class="DiffChange"> </span><span class="Type DiffChange">const</span><span class="DiffChange"> </span><span class="Type DiffChange">char</span><span class="DiffChange"> **desc) </span>
{
<span class="Type">int</span> module = index / <span class="Constant">32</span>, offset = index % <span class="Constant">32</span>;
<span class="Type">unsigned</span> <span class="Type">long</span> *ptr = (<span class="Type">unsigned</span> <span class="Type">long</span> *)stats;
<span class="DiffChange"> </span><span class="Statement DiffChange">if</span><span class="DiffChange"> (module >= ARRAY_SIZE(dw</span><span class="DiffText">mac5</span><span class="DiffChange">_all_errors)) </span>
<span class="Statement">return</span> -<span class="Constant">EINVAL</span>;
<span class="DiffChange"> </span><span class="Statement DiffChange">if</span><span class="DiffChange"> (!dw</span><span class="DiffText">mac5</span><span class="DiffChange">_all_errors[module].desc[offset].valid) </span>
<span class="Statement">return</span> -<span class="Constant">EINVAL</span>;
<span class="Statement">if</span> (count)
*count = *(ptr + index);
<span class="Statement">if</span> (desc)
<span class="DiffChange"> *desc = dw</span><span class="DiffText">mac5</span><span class="DiffChange">_all_errors[module].desc[offset].desc; </span>
<span class="Statement">return</span> <span class="Constant">0</span>;
}
<span class="Type DiffText">int</span><span class="DiffText"> dwmac5</span><span class="DiffChange">_safety_feat_config(</span><span class="Type DiffChange">void</span><span class="DiffChange"> __iomem *ioaddr, </span><span class="Type DiffChange">unsigned</span><span class="DiffChange"> </span><span class="Type DiffChange">int</span><span class="DiffChange"> asp, </span>
<span class="DiffChange"> </span><span class="DiffText"> </span><span class="Type DiffText">struct</span><span class="DiffText"> stmmac_safety_feature_cfg *safety_feat</span><span class="DiffChange">_cfg) </span>
{
<span class="DiffAdd"> </span><span class="Type DiffAdd">struct</span><span class="DiffAdd"> stmmac_safety_feature_cfg all_safety_feats = { </span>
<span class="DiffAdd"> .tsoee = </span><span class="Constant DiffAdd">1</span><span class="DiffAdd">, </span>
<span class="DiffAdd"> .mrxpee = </span><span class="Constant DiffAdd">1</span><span class="DiffAdd">, </span>
<span class="DiffAdd"> .mestee = </span><span class="Constant DiffAdd">1</span><span class="DiffAdd">, </span>
<span class="DiffAdd"> .mrxee = </span><span class="Constant DiffAdd">1</span><span class="DiffAdd">, </span>
<span class="DiffAdd"> .mtxee = </span><span class="Constant DiffAdd">1</span><span class="DiffAdd">, </span>
<span class="DiffAdd"> .epsi = </span><span class="Constant DiffAdd">1</span><span class="DiffAdd">, </span>
<span class="DiffAdd"> .edpp = </span><span class="Constant DiffAdd">1</span><span class="DiffAdd">, </span>
<span class="DiffAdd"> .prtyen = </span><span class="Constant DiffAdd">1</span><span class="DiffAdd">, </span>
<span class="DiffAdd"> .tmouten = </span><span class="Constant DiffAdd">1</span><span class="DiffAdd">, </span>
<span class="DiffAdd"> };</span><span class="DiffAdd"> </span>
u32 value;
<span class="Statement">if</span> (!asp)
<span class="Statement">return</span> -<span class="Constant">EINVAL</span>;
<span class="DiffAdd"> </span><span class="Statement DiffAdd">if</span><span class="DiffAdd"> (!safety_feat_cfg) </span>
<span class="DiffAdd"> safety_feat_cfg = &all_safety_feats;</span><span class="DiffAdd"> </span>
<span class="DiffAdd"> </span><span class="DiffAdd"> </span>
<span class="Comment">/*</span><span class="Comment"> 1. Enable Safety Features </span><span class="Comment">*/</span>
<span class="DiffChange"> </span><span class="DiffText">value = readl(ioaddr + </span><span class="DiffChange">MTL_ECC_CONTROL); </span>
<span class="DiffAdd"> value |= MEEAO; </span><span class="Comment DiffAdd">/*</span><span class="Comment DiffAdd"> MTL ECC Error Addr Status Override </span><span class="Comment DiffAdd">*/</span><span class="DiffAdd"> </span>
<span class="DiffAdd"> </span><span class="Statement DiffAdd">if</span><span class="DiffAdd"> (safety_feat_cfg->tsoee) </span>
<span class="DiffAdd"> value |= TSOEE; </span><span class="Comment DiffAdd">/*</span><span class="Comment DiffAdd"> TSO ECC </span><span class="Comment DiffAdd">*/</span><span class="DiffAdd"> </span>
<span class="DiffAdd"> </span><span class="Statement DiffAdd">if</span><span class="DiffAdd"> (safety_feat_cfg->mrxpee) </span>
<span class="DiffAdd"> value |= MRXPEE; </span><span class="Comment DiffAdd">/*</span><span class="Comment DiffAdd"> MTL RX Parser ECC </span><span class="Comment DiffAdd">*/</span><span class="DiffAdd"> </span>
<span class="DiffAdd"> </span><span class="Statement DiffAdd">if</span><span class="DiffAdd"> (safety_feat_cfg->mestee) </span>
<span class="DiffAdd"> value |= MESTEE; </span><span class="Comment DiffAdd">/*</span><span class="Comment DiffAdd"> MTL EST ECC </span><span class="Comment DiffAdd">*/</span><span class="DiffAdd"> </span>
<span class="DiffAdd"> </span><span class="Statement DiffAdd">if</span><span class="DiffAdd"> (safety_feat_cfg->mrxee) </span>
<span class="DiffAdd"> value |= MRXEE; </span><span class="Comment DiffAdd">/*</span><span class="Comment DiffAdd"> MTL RX FIFO ECC </span><span class="Comment DiffAdd">*/</span><span class="DiffAdd"> </span>
<span class="DiffAdd"> </span><span class="Statement DiffAdd">if</span><span class="DiffAdd"> (safety_feat_cfg->mtxee) </span>
<span class="DiffAdd"> value |= MTXEE; </span><span class="Comment DiffAdd">/*</span><span class="Comment DiffAdd"> MTL TX FIFO ECC </span><span class="Comment DiffAdd">*/</span><span class="DiffAdd"> </span>
<span class="DiffAdd"> writel(value, ioaddr + MTL_ECC_CONTROL);</span><span class="DiffAdd"> </span>
<span class="Comment">/*</span><span class="Comment"> 2. Enable MTL Safety Interrupts </span><span class="Comment">*/</span>
<span class="DiffChange"> value = readl(ioaddr + MTL_ECC_INT_ENABLE);</span><span class="DiffChange"> </span>
<span class="DiffChange"> value |= RPCEIE; </span><span class="Comment DiffChange">/*</span><span class="Comment DiffChange"> RX Parser Memory Correctable Error </span><span class="Comment DiffChange">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> value |= ECEIE; </span><span class="Comment DiffChange">/*</span><span class="Comment DiffChange"> EST Memory Correctable Error </span><span class="Comment DiffChange">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> value |= RXCEIE; </span><span class="Comment DiffChange">/*</span><span class="Comment DiffChange"> RX Memory Correctable Error </span><span class="Comment DiffChange">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> value |= TXCEIE; </span><span class="Comment DiffChange">/*</span><span class="Comment DiffChange"> TX Memory Correctable Error </span><span class="Comment DiffChange">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> writel(value, ioaddr + MTL_ECC_INT_ENABLE);</span><span class="DiffChange"> </span>
<span class="Comment">/*</span><span class="Comment"> 3. Enable DMA Safety Interrupts </span><span class="Comment">*/</span>
<span class="DiffChange"> value = readl(ioaddr + DMA_ECC_INT_ENABLE);</span><span class="DiffChange"> </span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffChange"> value |= TCEIE; </span><span class="Comment DiffChange">/*</span><span class="Comment DiffChange"> TSO Memory Correctable Error </span><span class="Comment DiffChange">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> writel(value, ioaddr + DMA_ECC_INT_ENABLE);</span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="Comment DiffChange">/*</span><span class="Comment DiffChange"> </span><span class="Comment DiffText">Only ECC Protection for External Memory feature is selected</span><span class="DiffChange"> </span>
<span class="Comment DiffChange"> *</span><span class="DiffChange"> </span>
<span class="Comment"> </span><span class="Comment">*/</span>
<span class="DiffChange"> </span><span class="Statement DiffChange">if</span><span class="DiffChange"> (asp </span><span class="DiffText"><= </span><span class="Constant DiffText">0x1</span><span class="DiffChange">) </span>
<span class="Statement">return</span> <span class="Constant">0</span>;
<span class="DiffChange"> </span><span class="Comment DiffChange">/*</span><span class="Comment DiffChange"> </span><span class="Comment DiffText">5</span><span class="Comment DiffChange">. Enable Parity and Timeout for FSM </span><span class="Comment DiffChange">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> value = readl(ioaddr + MAC_FSM_CONTROL);</span><span class="DiffChange"> </span>
<span class="DiffText"> </span><span class="Statement DiffText">if</span><span class="DiffText"> (safety_feat_cfg->prtyen)</span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffText"> value |= </span><span class="DiffChange">PRTYEN; </span><span class="Comment DiffChange">/*</span><span class="Comment DiffChange"> FSM Parity Feature </span><span class="Comment DiffChange">*/</span><span class="DiffChange"> </span>
<span class="DiffText"> </span><span class="Statement DiffText">if</span><span class="DiffText"> (safety_feat_cfg->tmouten)</span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffText"> value |= </span><span class="DiffChange">TMOUTEN; </span><span class="Comment DiffChange">/*</span><span class="Comment DiffChange"> FSM Timeout Feature </span><span class="Comment DiffChange">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> writel(value, ioaddr + MAC_FSM_CONTROL);</span><span class="DiffChange"> </span>
<span class="DiffAdd"> </span><span class="DiffAdd"> </span>
<span class="DiffAdd"> </span><span class="Comment DiffAdd">/*</span><span class="Comment DiffAdd"> 4. Enable Data Parity Protection </span><span class="Comment DiffAdd">*/</span><span class="DiffAdd"> </span>
<span class="DiffAdd"> value = readl(ioaddr + MTL_DPP_CONTROL);</span><span class="DiffAdd"> </span>
<span class="DiffAdd"> </span><span class="Statement DiffAdd">if</span><span class="DiffAdd"> (safety_feat_cfg->edpp) </span>
<span class="DiffAdd"> value |= EDPP;</span><span class="DiffAdd"> </span>
<span class="DiffAdd"> writel(value, ioaddr + MTL_DPP_CONTROL);</span><span class="DiffAdd"> </span>
<span class="DiffAdd"> </span><span class="DiffAdd"> </span>
<span class="DiffAdd"> </span><span class="Comment DiffAdd">/*</span><span class="DiffAdd"> </span>
<span class="Comment DiffAdd"> * All the Automotive Safety features are selected without the "Parity</span><span class="DiffAdd"> </span>
<span class="Comment DiffAdd"> * Port Enable for external interface" feature.</span><span class="DiffAdd"> </span>
<span class="Comment DiffAdd"> </span><span class="Comment DiffAdd">*/</span><span class="DiffAdd"> </span>
<span class="DiffAdd"> </span><span class="Statement DiffAdd">if</span><span class="DiffAdd"> (asp <= </span><span class="Constant DiffAdd">0x2</span><span class="DiffAdd">) </span>
<span class="DiffAdd"> </span><span class="Statement DiffAdd">return</span><span class="DiffAdd"> </span><span class="Constant DiffAdd">0</span><span class="DiffAdd">; </span>
<span class="DiffAdd"> </span><span class="Statement DiffAdd">if</span><span class="DiffAdd"> (safety_feat_cfg->epsi) </span>
<span class="DiffAdd"> value |= EPSI;</span><span class="DiffAdd"> </span>
<span class="DiffAdd"> writel(value, ioaddr + MTL_DPP_CONTROL);</span><span class="DiffAdd"> </span>
<span class="Statement">return</span> <span class="Constant">0</span>;
}
</pre>
</div></td>
<td><div>
<pre>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_MAC_DPP_FSM_INT_STATUS </span><span class="Constant DiffText">0x0000015</span><span class="Constant DiffChange">0</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_MAC_FSM_CONTROL </span><span class="Constant DiffText">0x0000015</span><span class="Constant DiffChange">8</span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_MTL_ECC_CONTROL </span><span class="Constant DiffText">0x000010</span><span class="Constant DiffChange">c0</span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_MTL_SAFETY_INT_STATUS </span><span class="Constant DiffText">0x000010</span><span class="Constant DiffChange">c4</span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_MEUIS</span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">1</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_MECIS</span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">0</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_MTL_ECC_INT_ENABLE </span><span class="Constant DiffText">0x000010</span><span class="Constant DiffChange">c8</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_RPCEIE</span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">12</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_ECEIE</span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">8</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_RXCEIE</span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">4</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_TXCEIE</span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">0</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_MTL_ECC_INT_STATUS </span><span class="Constant DiffText">0x000010</span><span class="Constant DiffChange">cc</span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_DMA_SAFETY_INT_STATUS </span><span class="Constant DiffText">0x00003064</span><span class="DiffChange"> </span>
<span class="PreProc DiffText">#define XGMAC_MCSIS BIT(</span><span class="Constant DiffText">31</span><span class="PreProc DiffText">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_MSUIS</span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">29</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_MSCIS</span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">28</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_DEUIS</span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">1</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_DECIS</span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">0</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_DMA_ECC_INT_ENABLE </span><span class="Constant DiffText">0x00003068</span><span class="DiffChange"> </span>
<span class="PreProc DiffText">#define XGMAC_DCEIE BIT(</span><span class="Constant DiffText">1</span><span class="PreProc DiffText">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_TCEIE</span><span class="PreProc DiffChange"> BIT(</span><span class="Constant DiffChange">0</span><span class="PreProc DiffChange">)</span><span class="DiffChange"> </span>
<span class="PreProc DiffChange">#define </span><span class="PreProc DiffText">XGMAC_DMA_ECC_INT_STATUS </span><span class="Constant DiffText">0x0000306c</span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="Type DiffChange">struct</span><span class="DiffChange"> dw</span><span class="DiffText">xgmac3</span><span class="DiffChange">_error_desc { </span>
<span class="Type">bool</span> valid;
<span class="Type">const</span> <span class="Type">char</span> *desc;
<span class="Type">const</span> <span class="Type">char</span> *detailed_desc;
};
<span class="PreProc">#define STAT_OFF(field) offsetof(</span><span class="Type">struct</span><span class="PreProc"> stmmac_safety_stats, field)</span>
<span class="Type DiffChange">static</span><span class="DiffChange"> </span><span class="Type DiffChange">void</span><span class="DiffChange"> dw</span><span class="DiffText">xgmac3</span><span class="DiffChange">_log_error(</span><span class="Type DiffChange">struct</span><span class="DiffChange"> net_device *ndev, u32 value, </span><span class="Type DiffChange">bool</span><span class="DiffChange"> corr, </span>
<span class="Type">const</span> <span class="Type">char</span> *module_name,
<span class="DiffChange"> </span><span class="Type DiffChange">const</span><span class="DiffChange"> </span><span class="Type DiffChange">struct</span><span class="DiffChange"> dw</span><span class="DiffText">xgmac3</span><span class="DiffChange">_error_desc *desc, </span>
<span class="Type">unsigned</span> <span class="Type">long</span> field_offset,
<span class="Type">struct</span> stmmac_safety_stats *stats)
{
<span class="Type">unsigned</span> <span class="Type">long</span> loc, mask;
u8 *bptr = (u8 *)stats;
<span class="Type">unsigned</span> <span class="Type">long</span> *ptr;
<span class="Folded">+-- 8 lines: ptr = (unsigned long *)(bptr + field_offset);----------------------------------------------------------------------------------------------------------------</span>
<span class="Comment">/*</span><span class="Comment"> Update counters </span><span class="Comment">*/</span>
ptr[loc]++;
}
}
<span class="Type DiffChange">static</span><span class="DiffChange"> </span><span class="Type DiffChange">const</span><span class="DiffChange"> </span><span class="Type DiffChange">struct</span><span class="DiffChange"> dw</span><span class="DiffText">xgmac3_error_desc dwxgmac3</span><span class="DiffChange">_mac_errors[</span><span class="Constant DiffChange">32</span><span class="DiffChange">]= { </span>
{ <span class="Constant">true</span>, <span class="Constant">"ATPES"</span>, <span class="Constant">"Application Transmit Interface Parity Check Error"</span> },
<span class="DiffAdd"> { </span><span class="Constant DiffAdd">true</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"DPES"</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"Descriptor Cache Data Path Parity Check Error"</span><span class="DiffAdd"> }, </span>
{ <span class="Constant">true</span>, <span class="Constant">"TPES"</span>, <span class="Constant">"TSO Data Path Parity Check Error"</span> },
<span class="DiffChange"> { </span><span class="Constant DiffChange">true</span><span class="DiffChange">, </span><span class="Constant DiffChange">"</span><span class="Constant DiffText">TSOPES"</span><span class="DiffText">, </span><span class="Constant DiffText">"TSO Header Data Path</span><span class="Constant DiffChange"> Parity Check Error"</span><span class="DiffChange"> }, </span>
<span class="DiffChange"> { </span><span class="Constant DiffChange">true</span><span class="DiffChange">, </span><span class="Constant DiffChange">"M</span><span class="Constant DiffText">T</span><span class="Constant DiffChange">PES"</span><span class="DiffChange">, </span><span class="Constant DiffChange">"MTL Data Path Parity Check Error"</span><span class="DiffChange"> }, </span>
{ <span class="Constant">true</span>, <span class="Constant">"MTSPES"</span>, <span class="Constant">"MTL TX Status Data Path Parity Check Error"</span> },
<span class="DiffAdd"> { </span><span class="Constant DiffAdd">true</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"MTBUPES"</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"MAC TBU Data Path Parity Check Error"</span><span class="DiffAdd"> }, </span>
<span class="DiffAdd"> { </span><span class="Constant DiffAdd">true</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"MTFCPES"</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"MAC TFC Data Path Parity Check Error"</span><span class="DiffAdd"> }, </span>
{ <span class="Constant">true</span>, <span class="Constant">"ARPES"</span>, <span class="Constant">"Application Receive Interface Data Path Parity Check Error"</span> },
<span class="DiffAdd"> { </span><span class="Constant DiffAdd">true</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"MRWCPES"</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"MTL RWC Data Path Parity Check Error"</span><span class="DiffAdd"> }, </span>
<span class="DiffAdd"> { </span><span class="Constant DiffAdd">true</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"MRRCPES"</span><span class="DiffAdd">, </span><span class="Constant DiffAdd">"MTL RCC Data Path Parity Check Error"</span><span class="DiffAdd"> }, </span>
{ <span class="Constant">true</span>, <span class="Constant">"CWPES"</span>, <span class="Constant">"CSR Write Data Path Parity Check Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"ASRPES"</span>, <span class="Constant">"AXI Slave Read Data Path Parity Check Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"TTES"</span>, <span class="Constant">"TX FSM Timeout Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"RTES"</span>, <span class="Constant">"RX FSM Timeout Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"CTES"</span>, <span class="Constant">"CSR FSM Timeout Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"ATES"</span>, <span class="Constant">"APP FSM Timeout Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"PTES"</span>, <span class="Constant">"PTP FSM Timeout Error"</span> },
<span class="DiffChange"> { </span><span class="Constant DiffText">false</span><span class="DiffText">, </span><span class="Constant DiffText">"UNKNOWN"</span><span class="DiffText">, </span><span class="Constant DiffText">"Unknown Error"</span><span class="DiffText"> }, </span><span class="Comment DiffText">/*</span><span class="Comment DiffText"> 18 </span><span class="Comment DiffText">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> { </span><span class="Constant DiffText">false</span><span class="DiffText">, </span><span class="Constant DiffText">"UNKNOWN"</span><span class="DiffText">, </span><span class="Constant DiffText">"Unknown Error"</span><span class="DiffText"> }, </span><span class="Comment DiffText">/*</span><span class="Comment DiffText"> 19 </span><span class="Comment DiffText">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> { </span><span class="Constant DiffText">false</span><span class="DiffText">, </span><span class="Constant DiffText">"UNKNOWN"</span><span class="DiffText">, </span><span class="Constant DiffText">"Unknown Error"</span><span class="DiffText"> }, </span><span class="Comment DiffText">/*</span><span class="Comment DiffText"> 20 </span><span class="Comment DiffText">*/</span><span class="DiffChange"> </span>
{ <span class="Constant">true</span>, <span class="Constant">"MSTTES"</span>, <span class="Constant">"Master Read/Write Timeout Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"SLVTES"</span>, <span class="Constant">"Slave Read/Write Timeout Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"ATITES"</span>, <span class="Constant">"Application Timeout on ATI Interface Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"ARITES"</span>, <span class="Constant">"Application Timeout on ARI Interface Error"</span> },
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
{ <span class="Constant">true</span>, <span class="Constant">"FSMPES"</span>, <span class="Constant">"FSM State Parity Error"</span> },
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 26 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 27 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 28 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 29 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 30 </span><span class="Comment">*/</span>
<span class="DiffChange"> { </span><span class="Constant DiffText">true</span><span class="DiffText">, </span><span class="Constant DiffText">"CPI"</span><span class="DiffText">, </span><span class="Constant DiffText">"Control Register Parity Check Error"</span><span class="DiffText"> },</span><span class="DiffChange"> </span>
};
<span class="Type DiffChange">static</span><span class="DiffChange"> </span><span class="Type DiffChange">void</span><span class="DiffChange"> dw</span><span class="DiffText">xgmac3</span><span class="DiffChange">_handle_mac_err(</span><span class="Type DiffChange">struct</span><span class="DiffChange"> net_device *ndev, </span>
<span class="Type">void</span> __iomem *ioaddr, <span class="Type">bool</span> correctable,
<span class="Type">struct</span> stmmac_safety_stats *stats)
{
u32 value;
<span class="DiffChange"> value = readl(ioaddr + </span><span class="DiffText">XGMAC_</span><span class="DiffChange">MAC_DPP_FSM_INT_STATUS); </span>
<span class="DiffChange"> writel(value, ioaddr + </span><span class="DiffText">XGMAC_</span><span class="DiffChange">MAC_DPP_FSM_INT_STATUS); </span>
<span class="DiffChange"> dw</span><span class="DiffText">xgmac3_log_error(ndev, value, correctable, </span><span class="Constant DiffText">"MAC"</span><span class="DiffText">, dwxgmac3</span><span class="DiffChange">_mac_errors, </span>
<span class="DiffChange"> </span><span class="DiffText"> </span><span class="DiffChange">STAT_OFF(mac_errors), stats); </span>
}
<span class="Type DiffChange">static</span><span class="DiffChange"> </span><span class="Type DiffChange">const</span><span class="DiffChange"> </span><span class="Type DiffChange">struct</span><span class="DiffChange"> dw</span><span class="DiffText">xgmac3_error_desc dwxgmac3</span><span class="DiffChange">_mtl_errors[</span><span class="Constant DiffChange">32</span><span class="DiffChange">]= { </span>
{ <span class="Constant">true</span>, <span class="Constant">"TXCES"</span>, <span class="Constant">"MTL TX Memory Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"TXAMS"</span>, <span class="Constant">"MTL TX Memory Address Mismatch Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"TXUES"</span>, <span class="Constant">"MTL TX Memory Error"</span> },
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 3 </span><span class="Comment">*/</span>
{ <span class="Constant">true</span>, <span class="Constant">"RXCES"</span>, <span class="Constant">"MTL RX Memory Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"RXAMS"</span>, <span class="Constant">"MTL RX Memory Address Mismatch Error"</span> },
<span class="Folded">+-- 22 lines: { true, "RXUES", "MTL RX Memory Error" },--------------------------------------------------------------------------------------------------------------------</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 28 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 29 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 30 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 31 </span><span class="Comment">*/</span>
};
<span class="Type DiffChange">static</span><span class="DiffChange"> </span><span class="Type DiffChange">void</span><span class="DiffChange"> dw</span><span class="DiffText">xgmac3</span><span class="DiffChange">_handle_mtl_err(</span><span class="Type DiffChange">struct</span><span class="DiffChange"> net_device *ndev, </span>
<span class="Type">void</span> __iomem *ioaddr, <span class="Type">bool</span> correctable,
<span class="Type">struct</span> stmmac_safety_stats *stats)
{
u32 value;
<span class="DiffChange"> value = readl(ioaddr + </span><span class="DiffText">XGMAC_</span><span class="DiffChange">MTL_ECC_INT_STATUS); </span>
<span class="DiffChange"> writel(value, ioaddr + </span><span class="DiffText">XGMAC_</span><span class="DiffChange">MTL_ECC_INT_STATUS); </span>
<span class="DiffChange"> dw</span><span class="DiffText">xgmac3_log_error(ndev, value, correctable, </span><span class="Constant DiffText">"MTL"</span><span class="DiffChange">, </span>
<span class="DiffChange"> </span><span class="DiffText"> dwxgmac3_mtl_errors, </span><span class="DiffChange">STAT_OFF(mtl_errors), stats); </span>
}
<span class="Type DiffChange">static</span><span class="DiffChange"> </span><span class="Type DiffChange">const</span><span class="DiffChange"> </span><span class="Type DiffChange">struct</span><span class="DiffChange"> dw</span><span class="DiffText">xgmac3_error_desc dwxgmac3</span><span class="DiffChange">_dma_errors[</span><span class="Constant DiffChange">32</span><span class="DiffChange">]= { </span>
{ <span class="Constant">true</span>, <span class="Constant">"TCES"</span>, <span class="Constant">"DMA TSO Memory Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"TAMS"</span>, <span class="Constant">"DMA TSO Memory Address Mismatch Error"</span> },
{ <span class="Constant">true</span>, <span class="Constant">"TUES"</span>, <span class="Constant">"DMA TSO Memory Error"</span> },
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 3 </span><span class="Comment">*/</span>
<span class="DiffChange"> { </span><span class="Constant DiffText">true</span><span class="DiffText">, </span><span class="Constant DiffText">"DCES"</span><span class="DiffText">, </span><span class="Constant DiffText">"DMA DCACHE Memory Error"</span><span class="DiffText"> },</span><span class="DiffChange"> </span>
<span class="DiffChange"> { </span><span class="Constant DiffText">true</span><span class="DiffText">, </span><span class="Constant DiffText">"DAMS"</span><span class="DiffText">, </span><span class="Constant DiffText">"DMA DCACHE Address Mismatch Error"</span><span class="DiffText"> },</span><span class="DiffChange"> </span>
<span class="DiffChange"> { </span><span class="Constant DiffText">true</span><span class="DiffText">, </span><span class="Constant DiffText">"DUES"</span><span class="DiffText">, </span><span class="Constant DiffText">"DMA DCACHE Memory Error"</span><span class="DiffText"> },</span><span class="DiffChange"> </span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 7 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 8 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 9 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 10 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 11 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 12 </span><span class="Comment">*/</span>
<span class="Folded">+-- 15 lines: { false, "UNKNOWN", "Unknown Error" }, 13 -------------------------------------------------------------------------------------------------------------------</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 28 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 29 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 30 </span><span class="Comment">*/</span>
{ <span class="Constant">false</span>, <span class="Constant">"UNKNOWN"</span>, <span class="Constant">"Unknown Error"</span> }, <span class="Comment">/*</span><span class="Comment"> 31 </span><span class="Comment">*/</span>
};
<span class="Type DiffChange">static</span><span class="DiffChange"> </span><span class="Type DiffChange">void</span><span class="DiffChange"> dw</span><span class="DiffText">xgmac3</span><span class="DiffChange">_handle_dma_err(</span><span class="Type DiffChange">struct</span><span class="DiffChange"> net_device *ndev, </span>
<span class="DiffChange"> </span><span class="DiffText"> </span><span class="Type DiffChange">void</span><span class="DiffChange"> __iomem *ioaddr, </span><span class="Type DiffChange">bool</span><span class="DiffChange"> correctable, </span>
<span class="DiffChange"> </span><span class="DiffText"> </span><span class="Type DiffChange">struct</span><span class="DiffChange"> stmmac_safety_stats *stats) </span>
{
u32 value;
<span class="DiffChange"> value = readl(ioaddr + </span><span class="DiffText">XGMAC_</span><span class="DiffChange">DMA_ECC_INT_STATUS); </span>
<span class="DiffChange"> writel(value, ioaddr + </span><span class="DiffText">XGMAC_</span><span class="DiffChange">DMA_ECC_INT_STATUS); </span>
<span class="DiffChange"> dw</span><span class="DiffText">xgmac3_log_error(ndev, value, correctable, </span><span class="Constant DiffText">"DMA"</span><span class="DiffText">, dwxgmac3</span><span class="DiffChange">_dma_errors, </span>
<span class="DiffChange"> </span><span class="DiffText"> </span><span class="DiffChange">STAT_OFF(dma_errors), stats); </span>
}
<span class="Type DiffText">static</span><span class="DiffText"> </span><span class="Type DiffText">int</span><span class="DiffText"> dwxgmac3</span><span class="DiffChange">_safety_feat_irq_status(</span><span class="Type DiffChange">struct</span><span class="DiffChange"> net_device *ndev, </span>
<span class="DiffChange"> </span><span class="DiffText"> </span><span class="DiffChange"> </span><span class="Type DiffChange">void</span><span class="DiffChange"> __iomem *ioaddr, </span>
<span class="DiffChange"> </span><span class="DiffText"> </span><span class="DiffChange"> </span><span class="Type DiffChange">unsigned</span><span class="DiffChange"> </span><span class="Type DiffChange">int</span><span class="DiffChange"> asp, </span>
<span class="DiffChange"> </span><span class="DiffText"> </span><span class="DiffChange"> </span><span class="Type DiffChange">struct</span><span class="DiffChange"> stmmac_safety_stats *stats) </span>
{
<span class="Type">bool</span> err, corr;
u32 mtl, dma;
<span class="Type">int</span> ret = <span class="Constant">0</span>;
<span class="Statement">if</span> (!asp)
<span class="Statement">return</span> -<span class="Constant">EINVAL</span>;
<span class="DiffChange"> mtl = readl(ioaddr + </span><span class="DiffText">XGMAC_</span><span class="DiffChange">MTL_SAFETY_INT_STATUS); </span>
<span class="DiffChange"> dma = readl(ioaddr + </span><span class="DiffText">XGMAC_</span><span class="DiffChange">DMA_SAFETY_INT_STATUS); </span>
<span class="DiffChange"> err = (mtl & </span><span class="DiffText">XGMAC_MCSIS) || (dma & XGMAC_</span><span class="DiffChange">MCSIS); </span>
corr = <span class="Constant">false</span>;
<span class="Statement">if</span> (err) {
<span class="DiffChange"> dw</span><span class="DiffText">xgmac3</span><span class="DiffChange">_handle_mac_err(ndev, ioaddr, corr, stats); </span>
ret |= !corr;
}
<span class="DiffChange"> err = (mtl & (</span><span class="DiffText">XGMAC_MEUIS | XGMAC_MECIS)) || (dma & (XGMAC_MSUIS | XGMAC_</span><span class="DiffChange">MSCIS)); </span>
<span class="DiffChange"> corr = (mtl & </span><span class="DiffText">XGMAC_MECIS) || (dma & XGMAC_</span><span class="DiffChange">MSCIS); </span>
<span class="Statement">if</span> (err) {
<span class="DiffChange"> dw</span><span class="DiffText">xgmac3</span><span class="DiffChange">_handle_mtl_err(ndev, ioaddr, corr, stats); </span>
ret |= !corr;
}
<span class="DiffChange"> err = dma & (</span><span class="DiffText">XGMAC_DEUIS | XGMAC_</span><span class="DiffChange">DECIS); </span>
<span class="DiffChange"> corr = dma & </span><span class="DiffText">XGMAC_</span><span class="DiffChange">DECIS; </span>
<span class="Statement">if</span> (err) {
<span class="DiffChange"> dw</span><span class="DiffText">xgmac3</span><span class="DiffChange">_handle_dma_err(ndev, ioaddr, corr, stats); </span>
ret |= !corr;
}
<span class="Statement">return</span> ret;
}
<span class="Type DiffChange">static</span><span class="DiffChange"> </span><span class="Type DiffChange">const</span><span class="DiffChange"> </span><span class="Type DiffChange">struct</span><span class="DiffChange"> dw</span><span class="DiffText">xgmac3</span><span class="DiffChange">_error { </span>
<span class="DiffChange"> </span><span class="Type DiffChange">const</span><span class="DiffChange"> </span><span class="Type DiffChange">struct</span><span class="DiffChange"> dw</span><span class="DiffText">xgmac3</span><span class="DiffChange">_error_desc *desc; </span>
<span class="DiffChange">} dw</span><span class="DiffText">xgmac3</span><span class="DiffChange">_all_errors[] = { </span>
<span class="DiffChange"> { dw</span><span class="DiffText">xgmac3</span><span class="DiffChange">_mac_errors }, </span>
<span class="DiffChange"> { dw</span><span class="DiffText">xgmac3</span><span class="DiffChange">_mtl_errors }, </span>
<span class="DiffChange"> { dw</span><span class="DiffText">xgmac3</span><span class="DiffChange">_dma_errors }, </span>
};
<span class="Type DiffText">static</span><span class="DiffText"> </span><span class="Type DiffText">int</span><span class="DiffText"> dwxgmac3</span><span class="DiffChange">_safety_feat_dump(</span><span class="Type DiffChange">struct</span><span class="DiffChange"> stmmac_safety_stats *stats, </span>
<span class="DiffChange"> </span><span class="DiffText"> </span><span class="DiffChange"> </span><span class="Type DiffChange">int</span><span class="DiffChange"> index, </span><span class="Type DiffChange">unsigned</span><span class="DiffChange"> </span><span class="Type DiffChange">long</span><span class="DiffChange"> *count, </span>
<span class="DiffChange"> </span><span class="DiffText"> </span><span class="DiffChange"> </span><span class="Type DiffChange">const</span><span class="DiffChange"> </span><span class="Type DiffChange">char</span><span class="DiffChange"> **desc) </span>
{
<span class="Type">int</span> module = index / <span class="Constant">32</span>, offset = index % <span class="Constant">32</span>;
<span class="Type">unsigned</span> <span class="Type">long</span> *ptr = (<span class="Type">unsigned</span> <span class="Type">long</span> *)stats;
<span class="DiffChange"> </span><span class="Statement DiffChange">if</span><span class="DiffChange"> (module >= ARRAY_SIZE(dw</span><span class="DiffText">xgmac3</span><span class="DiffChange">_all_errors)) </span>
<span class="Statement">return</span> -<span class="Constant">EINVAL</span>;
<span class="DiffChange"> </span><span class="Statement DiffChange">if</span><span class="DiffChange"> (!dw</span><span class="DiffText">xgmac3</span><span class="DiffChange">_all_errors[module].desc[offset].valid) </span>
<span class="Statement">return</span> -<span class="Constant">EINVAL</span>;
<span class="Statement">if</span> (count)
*count = *(ptr + index);
<span class="Statement">if</span> (desc)
<span class="DiffChange"> *desc = dw</span><span class="DiffText">xgmac3</span><span class="DiffChange">_all_errors[module].desc[offset].desc; </span>
<span class="Statement">return</span> <span class="Constant">0</span>;
}
<span class="Type DiffText">static</span><span class="DiffText"> </span><span class="Type DiffText">int</span><span class="DiffText"> dwxgmac3</span><span class="DiffChange">_safety_feat_config(</span><span class="Type DiffChange">void</span><span class="DiffChange"> __iomem *ioaddr, </span><span class="Type DiffChange">unsigned</span><span class="DiffChange"> </span><span class="Type DiffChange">int</span><span class="DiffChange"> asp, </span>
<span class="DiffChange"> </span><span class="DiffText"> </span><span class="Type DiffText">struct</span><span class="DiffText"> stmmac_safety_feature_cfg *safety</span><span class="DiffChange">_cfg) </span>
{
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
u32 value;
<span class="Statement">if</span> (!asp)
<span class="Statement">return</span> -<span class="Constant">EINVAL</span>;
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="Comment">/*</span><span class="Comment"> 1. Enable Safety Features </span><span class="Comment">*/</span>
<span class="DiffChange"> </span><span class="DiffText">writel(</span><span class="Constant DiffText">0x0</span><span class="DiffText">, ioaddr + XGMAC_</span><span class="DiffChange">MTL_ECC_CONTROL); </span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="Comment">/*</span><span class="Comment"> 2. Enable MTL Safety Interrupts </span><span class="Comment">*/</span>
<span class="DiffChange"> value = readl(ioaddr + </span><span class="DiffText">XGMAC_</span><span class="DiffChange">MTL_ECC_INT_ENABLE); </span>
<span class="DiffChange"> value |= </span><span class="DiffText">XGMAC_</span><span class="DiffChange">RPCEIE; </span><span class="Comment DiffChange">/*</span><span class="Comment DiffChange"> RX Parser Memory Correctable Error </span><span class="Comment DiffChange">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> value |= </span><span class="DiffText">XGMAC_</span><span class="DiffChange">ECEIE; </span><span class="Comment DiffChange">/*</span><span class="Comment DiffChange"> EST Memory Correctable Error </span><span class="Comment DiffChange">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> value |= </span><span class="DiffText">XGMAC_</span><span class="DiffChange">RXCEIE; </span><span class="Comment DiffChange">/*</span><span class="Comment DiffChange"> RX Memory Correctable Error </span><span class="Comment DiffChange">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> value |= </span><span class="DiffText">XGMAC_</span><span class="DiffChange">TXCEIE; </span><span class="Comment DiffChange">/*</span><span class="Comment DiffChange"> TX Memory Correctable Error </span><span class="Comment DiffChange">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> writel(value, ioaddr + </span><span class="DiffText">XGMAC_</span><span class="DiffChange">MTL_ECC_INT_ENABLE); </span>
<span class="Comment">/*</span><span class="Comment"> 3. Enable DMA Safety Interrupts </span><span class="Comment">*/</span>
<span class="DiffChange"> value = readl(ioaddr + </span><span class="DiffText">XGMAC_</span><span class="DiffChange">DMA_ECC_INT_ENABLE); </span>
<span class="DiffAdd"> value |= XGMAC_DCEIE; </span><span class="Comment DiffAdd">/*</span><span class="Comment DiffAdd"> Descriptor Cache Memory Correctable Error </span><span class="Comment DiffAdd">*/</span><span class="DiffAdd"> </span>
<span class="DiffChange"> value |= </span><span class="DiffText">XGMAC_</span><span class="DiffChange">TCEIE; </span><span class="Comment DiffChange">/*</span><span class="Comment DiffChange"> TSO Memory Correctable Error </span><span class="Comment DiffChange">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> writel(value, ioaddr + </span><span class="DiffText">XGMAC_</span><span class="DiffChange">DMA_ECC_INT_ENABLE); </span>
<span class="DiffChange"> </span><span class="Comment DiffChange">/*</span><span class="Comment DiffChange"> </span><span class="Comment DiffText">0x2: Without ECC or Parity Ports on External Application Interface</span><span class="DiffChange"> </span>
<span class="Comment DiffChange"> *</span><span class="Comment DiffText"> 0x4: Only ECC Protection for External Memory feature is selected</span><span class="DiffChange"> </span>
<span class="Comment"> </span><span class="Comment">*/</span>
<span class="DiffChange"> </span><span class="Statement DiffChange">if</span><span class="DiffChange"> (asp </span><span class="DiffText">== </span><span class="Constant DiffText">0x2</span><span class="DiffText"> || asp == </span><span class="Constant DiffText">0x4</span><span class="DiffChange">) </span>
<span class="Statement">return</span> <span class="Constant">0</span>;
<span class="DiffChange"> </span><span class="Comment DiffChange">/*</span><span class="Comment DiffChange"> </span><span class="Comment DiffText">4</span><span class="Comment DiffChange">. Enable Parity and Timeout for FSM </span><span class="Comment DiffChange">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> value = readl(ioaddr + </span><span class="DiffText">XGMAC_</span><span class="DiffChange">MAC_FSM_CONTROL); </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffText">value |= XGMAC_</span><span class="DiffChange">PRTYEN; </span><span class="Comment DiffChange">/*</span><span class="Comment DiffChange"> FSM Parity Feature </span><span class="Comment DiffChange">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffChange"> </span>
<span class="DiffChange"> </span><span class="DiffText">value |= XGMAC_</span><span class="DiffChange">TMOUTEN; </span><span class="Comment DiffChange">/*</span><span class="Comment DiffChange"> FSM Timeout Feature </span><span class="Comment DiffChange">*/</span><span class="DiffChange"> </span>
<span class="DiffChange"> writel(value, ioaddr + </span><span class="DiffText">XGMAC_</span><span class="DiffChange">MAC_FSM_CONTROL); </span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="DiffDelete">---------------------------------------------------------------------------------------------------------------------------------------------------------------------------</span>
<span class="Statement">return</span> <span class="Constant">0</span>;
}
</pre>
</div></td>
</tr>
</table>
</body>
</html>
<!-- vim: set foldmethod=manual : -->