Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <hexo/iospace.h>
#include <mutek/startup.h>
#include <mutek/thread.h>
#include <mutek/printk.h>
#include <drivers/net/dwc10100/dwc10100_mac.h>
#include <arch/stm32/mmap.h>
static uint16_t smi_read(uint_fast8_t phy,
uint_fast8_t reg)
{
uint16_t val;
cpu_mem_write_32(STM32_ETHERNET_MAC_ADDR + DWC_MAC_MIIAR_ADDR, 0
| DWC_MAC_MIIAR_PA(phy)
| DWC_MAC_MIIAR_MR(reg)
| DWC_MAC_MIIAR_MB);
while (cpu_mem_read_32(STM32_ETHERNET_MAC_ADDR + DWC_MAC_MIIAR_ADDR) & DWC_MAC_MIIAR_MB)
;
val = cpu_mem_read_32(STM32_ETHERNET_MAC_ADDR + DWC_MAC_MIIDR_ADDR);
return val;
}
static void smi_write(uint_fast8_t phy,
uint_fast8_t reg,
uint16_t value)
{
cpu_mem_write_32(STM32_ETHERNET_MAC_ADDR + DWC_MAC_MIIDR_ADDR, value);
cpu_mem_write_32(STM32_ETHERNET_MAC_ADDR + DWC_MAC_MIIAR_ADDR, 0
| DWC_MAC_MIIAR_PA(phy)
| DWC_MAC_MIIAR_MR(reg)
| DWC_MAC_MIIAR_MW
| DWC_MAC_MIIAR_MB);
while (cpu_mem_read_32(STM32_ETHERNET_MAC_ADDR + DWC_MAC_MIIAR_ADDR) & DWC_MAC_MIIAR_MB)
;
}
static CONTEXT_ENTRY(main)
{
for (uint32_t phy = 0; phy < 32; ++phy) {
for (uint32_t reg = 0; reg < 8; ++reg) {
printk(" %d: %04x", reg, smi_read(phy, reg));
}
printk("\n");
}
}
void app_start(void)
{
struct thread_attr_s attr = {
.stack_size = 2048,
};
thread_create(main, 0, &attr);
}