1327b6808SNabih Estefan Diaz /* 2327b6808SNabih Estefan Diaz * QTests for Nuvoton NPCM7xx/8xx GMAC Modules. 3327b6808SNabih Estefan Diaz * 4327b6808SNabih Estefan Diaz * Copyright 2024 Google LLC 5327b6808SNabih Estefan Diaz * Authors: 6327b6808SNabih Estefan Diaz * Hao Wu <wuhaotsh@google.com> 7327b6808SNabih Estefan Diaz * Nabih Estefan <nabihestefan@google.com> 8327b6808SNabih Estefan Diaz * 9327b6808SNabih Estefan Diaz * This program is free software; you can redistribute it and/or modify it 10327b6808SNabih Estefan Diaz * under the terms of the GNU General Public License as published by the 11327b6808SNabih Estefan Diaz * Free Software Foundation; either version 2 of the License, or 12327b6808SNabih Estefan Diaz * (at your option) any later version. 13327b6808SNabih Estefan Diaz * 14327b6808SNabih Estefan Diaz * This program is distributed in the hope that it will be useful, but WITHOUT 15327b6808SNabih Estefan Diaz * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 16327b6808SNabih Estefan Diaz * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 17327b6808SNabih Estefan Diaz * for more details. 18327b6808SNabih Estefan Diaz */ 19327b6808SNabih Estefan Diaz 20327b6808SNabih Estefan Diaz #include "qemu/osdep.h" 21327b6808SNabih Estefan Diaz #include "libqos/libqos.h" 22327b6808SNabih Estefan Diaz 23327b6808SNabih Estefan Diaz /* Name of the GMAC Device */ 24327b6808SNabih Estefan Diaz #define TYPE_NPCM_GMAC "npcm-gmac" 25327b6808SNabih Estefan Diaz 26*d710b337SNabih Estefan Diaz /* Address of the PCS Module */ 27*d710b337SNabih Estefan Diaz #define PCS_BASE_ADDRESS 0xf0780000 28*d710b337SNabih Estefan Diaz #define NPCM_PCS_IND_AC_BA 0x1fe 29*d710b337SNabih Estefan Diaz 30327b6808SNabih Estefan Diaz typedef struct GMACModule { 31327b6808SNabih Estefan Diaz int irq; 32327b6808SNabih Estefan Diaz uint64_t base_addr; 33327b6808SNabih Estefan Diaz } GMACModule; 34327b6808SNabih Estefan Diaz 35327b6808SNabih Estefan Diaz typedef struct TestData { 36327b6808SNabih Estefan Diaz const GMACModule *module; 37327b6808SNabih Estefan Diaz } TestData; 38327b6808SNabih Estefan Diaz 39327b6808SNabih Estefan Diaz /* Values extracted from hw/arm/npcm8xx.c */ 40327b6808SNabih Estefan Diaz static const GMACModule gmac_module_list[] = { 41327b6808SNabih Estefan Diaz { 42327b6808SNabih Estefan Diaz .irq = 14, 43327b6808SNabih Estefan Diaz .base_addr = 0xf0802000 44327b6808SNabih Estefan Diaz }, 45327b6808SNabih Estefan Diaz { 46327b6808SNabih Estefan Diaz .irq = 15, 47327b6808SNabih Estefan Diaz .base_addr = 0xf0804000 48327b6808SNabih Estefan Diaz }, 49327b6808SNabih Estefan Diaz { 50327b6808SNabih Estefan Diaz .irq = 16, 51327b6808SNabih Estefan Diaz .base_addr = 0xf0806000 52327b6808SNabih Estefan Diaz }, 53327b6808SNabih Estefan Diaz { 54327b6808SNabih Estefan Diaz .irq = 17, 55327b6808SNabih Estefan Diaz .base_addr = 0xf0808000 56327b6808SNabih Estefan Diaz } 57327b6808SNabih Estefan Diaz }; 58327b6808SNabih Estefan Diaz 59327b6808SNabih Estefan Diaz /* Returns the index of the GMAC module. */ 60327b6808SNabih Estefan Diaz static int gmac_module_index(const GMACModule *mod) 61327b6808SNabih Estefan Diaz { 62327b6808SNabih Estefan Diaz ptrdiff_t diff = mod - gmac_module_list; 63327b6808SNabih Estefan Diaz 64327b6808SNabih Estefan Diaz g_assert_true(diff >= 0 && diff < ARRAY_SIZE(gmac_module_list)); 65327b6808SNabih Estefan Diaz 66327b6808SNabih Estefan Diaz return diff; 67327b6808SNabih Estefan Diaz } 68327b6808SNabih Estefan Diaz 69327b6808SNabih Estefan Diaz /* 32-bit register indices. Taken from npcm_gmac.c */ 70327b6808SNabih Estefan Diaz typedef enum NPCMRegister { 71327b6808SNabih Estefan Diaz /* DMA Registers */ 72327b6808SNabih Estefan Diaz NPCM_DMA_BUS_MODE = 0x1000, 73327b6808SNabih Estefan Diaz NPCM_DMA_XMT_POLL_DEMAND = 0x1004, 74327b6808SNabih Estefan Diaz NPCM_DMA_RCV_POLL_DEMAND = 0x1008, 75327b6808SNabih Estefan Diaz NPCM_DMA_RCV_BASE_ADDR = 0x100c, 76327b6808SNabih Estefan Diaz NPCM_DMA_TX_BASE_ADDR = 0x1010, 77327b6808SNabih Estefan Diaz NPCM_DMA_STATUS = 0x1014, 78327b6808SNabih Estefan Diaz NPCM_DMA_CONTROL = 0x1018, 79327b6808SNabih Estefan Diaz NPCM_DMA_INTR_ENA = 0x101c, 80327b6808SNabih Estefan Diaz NPCM_DMA_MISSED_FRAME_CTR = 0x1020, 81327b6808SNabih Estefan Diaz NPCM_DMA_HOST_TX_DESC = 0x1048, 82327b6808SNabih Estefan Diaz NPCM_DMA_HOST_RX_DESC = 0x104c, 83327b6808SNabih Estefan Diaz NPCM_DMA_CUR_TX_BUF_ADDR = 0x1050, 84327b6808SNabih Estefan Diaz NPCM_DMA_CUR_RX_BUF_ADDR = 0x1054, 85327b6808SNabih Estefan Diaz NPCM_DMA_HW_FEATURE = 0x1058, 86327b6808SNabih Estefan Diaz 87327b6808SNabih Estefan Diaz /* GMAC Registers */ 88327b6808SNabih Estefan Diaz NPCM_GMAC_MAC_CONFIG = 0x0, 89327b6808SNabih Estefan Diaz NPCM_GMAC_FRAME_FILTER = 0x4, 90327b6808SNabih Estefan Diaz NPCM_GMAC_HASH_HIGH = 0x8, 91327b6808SNabih Estefan Diaz NPCM_GMAC_HASH_LOW = 0xc, 92327b6808SNabih Estefan Diaz NPCM_GMAC_MII_ADDR = 0x10, 93327b6808SNabih Estefan Diaz NPCM_GMAC_MII_DATA = 0x14, 94327b6808SNabih Estefan Diaz NPCM_GMAC_FLOW_CTRL = 0x18, 95327b6808SNabih Estefan Diaz NPCM_GMAC_VLAN_FLAG = 0x1c, 96327b6808SNabih Estefan Diaz NPCM_GMAC_VERSION = 0x20, 97327b6808SNabih Estefan Diaz NPCM_GMAC_WAKEUP_FILTER = 0x28, 98327b6808SNabih Estefan Diaz NPCM_GMAC_PMT = 0x2c, 99327b6808SNabih Estefan Diaz NPCM_GMAC_LPI_CTRL = 0x30, 100327b6808SNabih Estefan Diaz NPCM_GMAC_TIMER_CTRL = 0x34, 101327b6808SNabih Estefan Diaz NPCM_GMAC_INT_STATUS = 0x38, 102327b6808SNabih Estefan Diaz NPCM_GMAC_INT_MASK = 0x3c, 103327b6808SNabih Estefan Diaz NPCM_GMAC_MAC0_ADDR_HI = 0x40, 104327b6808SNabih Estefan Diaz NPCM_GMAC_MAC0_ADDR_LO = 0x44, 105327b6808SNabih Estefan Diaz NPCM_GMAC_MAC1_ADDR_HI = 0x48, 106327b6808SNabih Estefan Diaz NPCM_GMAC_MAC1_ADDR_LO = 0x4c, 107327b6808SNabih Estefan Diaz NPCM_GMAC_MAC2_ADDR_HI = 0x50, 108327b6808SNabih Estefan Diaz NPCM_GMAC_MAC2_ADDR_LO = 0x54, 109327b6808SNabih Estefan Diaz NPCM_GMAC_MAC3_ADDR_HI = 0x58, 110327b6808SNabih Estefan Diaz NPCM_GMAC_MAC3_ADDR_LO = 0x5c, 111327b6808SNabih Estefan Diaz NPCM_GMAC_RGMII_STATUS = 0xd8, 112327b6808SNabih Estefan Diaz NPCM_GMAC_WATCHDOG = 0xdc, 113327b6808SNabih Estefan Diaz NPCM_GMAC_PTP_TCR = 0x700, 114327b6808SNabih Estefan Diaz NPCM_GMAC_PTP_SSIR = 0x704, 115327b6808SNabih Estefan Diaz NPCM_GMAC_PTP_STSR = 0x708, 116327b6808SNabih Estefan Diaz NPCM_GMAC_PTP_STNSR = 0x70c, 117327b6808SNabih Estefan Diaz NPCM_GMAC_PTP_STSUR = 0x710, 118327b6808SNabih Estefan Diaz NPCM_GMAC_PTP_STNSUR = 0x714, 119327b6808SNabih Estefan Diaz NPCM_GMAC_PTP_TAR = 0x718, 120327b6808SNabih Estefan Diaz NPCM_GMAC_PTP_TTSR = 0x71c, 121*d710b337SNabih Estefan Diaz 122*d710b337SNabih Estefan Diaz /* PCS Registers */ 123*d710b337SNabih Estefan Diaz NPCM_PCS_SR_CTL_ID1 = 0x3c0008, 124*d710b337SNabih Estefan Diaz NPCM_PCS_SR_CTL_ID2 = 0x3c000a, 125*d710b337SNabih Estefan Diaz NPCM_PCS_SR_CTL_STS = 0x3c0010, 126*d710b337SNabih Estefan Diaz 127*d710b337SNabih Estefan Diaz NPCM_PCS_SR_MII_CTRL = 0x3e0000, 128*d710b337SNabih Estefan Diaz NPCM_PCS_SR_MII_STS = 0x3e0002, 129*d710b337SNabih Estefan Diaz NPCM_PCS_SR_MII_DEV_ID1 = 0x3e0004, 130*d710b337SNabih Estefan Diaz NPCM_PCS_SR_MII_DEV_ID2 = 0x3e0006, 131*d710b337SNabih Estefan Diaz NPCM_PCS_SR_MII_AN_ADV = 0x3e0008, 132*d710b337SNabih Estefan Diaz NPCM_PCS_SR_MII_LP_BABL = 0x3e000a, 133*d710b337SNabih Estefan Diaz NPCM_PCS_SR_MII_AN_EXPN = 0x3e000c, 134*d710b337SNabih Estefan Diaz NPCM_PCS_SR_MII_EXT_STS = 0x3e001e, 135*d710b337SNabih Estefan Diaz 136*d710b337SNabih Estefan Diaz NPCM_PCS_SR_TIM_SYNC_ABL = 0x3e0e10, 137*d710b337SNabih Estefan Diaz NPCM_PCS_SR_TIM_SYNC_TX_MAX_DLY_LWR = 0x3e0e12, 138*d710b337SNabih Estefan Diaz NPCM_PCS_SR_TIM_SYNC_TX_MAX_DLY_UPR = 0x3e0e14, 139*d710b337SNabih Estefan Diaz NPCM_PCS_SR_TIM_SYNC_TX_MIN_DLY_LWR = 0x3e0e16, 140*d710b337SNabih Estefan Diaz NPCM_PCS_SR_TIM_SYNC_TX_MIN_DLY_UPR = 0x3e0e18, 141*d710b337SNabih Estefan Diaz NPCM_PCS_SR_TIM_SYNC_RX_MAX_DLY_LWR = 0x3e0e1a, 142*d710b337SNabih Estefan Diaz NPCM_PCS_SR_TIM_SYNC_RX_MAX_DLY_UPR = 0x3e0e1c, 143*d710b337SNabih Estefan Diaz NPCM_PCS_SR_TIM_SYNC_RX_MIN_DLY_LWR = 0x3e0e1e, 144*d710b337SNabih Estefan Diaz NPCM_PCS_SR_TIM_SYNC_RX_MIN_DLY_UPR = 0x3e0e20, 145*d710b337SNabih Estefan Diaz 146*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_MMD_DIG_CTRL1 = 0x3f0000, 147*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_AN_CTRL = 0x3f0002, 148*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_AN_INTR_STS = 0x3f0004, 149*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_TC = 0x3f0006, 150*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_DBG_CTRL = 0x3f000a, 151*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_EEE_MCTRL0 = 0x3f000c, 152*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_EEE_TXTIMER = 0x3f0010, 153*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_EEE_RXTIMER = 0x3f0012, 154*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_LINK_TIMER_CTRL = 0x3f0014, 155*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_EEE_MCTRL1 = 0x3f0016, 156*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_DIG_STS = 0x3f0020, 157*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_ICG_ERRCNT1 = 0x3f0022, 158*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_MISC_STS = 0x3f0030, 159*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_RX_LSTS = 0x3f0040, 160*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_MP_TX_BSTCTRL0 = 0x3f0070, 161*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_MP_TX_LVLCTRL0 = 0x3f0074, 162*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_MP_TX_GENCTRL0 = 0x3f007a, 163*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_MP_TX_GENCTRL1 = 0x3f007c, 164*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_MP_TX_STS = 0x3f0090, 165*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_MP_RX_GENCTRL0 = 0x3f00b0, 166*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_MP_RX_GENCTRL1 = 0x3f00b2, 167*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_MP_RX_LOS_CTRL0 = 0x3f00ba, 168*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_MP_MPLL_CTRL0 = 0x3f00f0, 169*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_MP_MPLL_CTRL1 = 0x3f00f2, 170*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_MP_MPLL_STS = 0x3f0110, 171*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_MP_MISC_CTRL2 = 0x3f0126, 172*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_MP_LVL_CTRL = 0x3f0130, 173*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_MP_MISC_CTRL0 = 0x3f0132, 174*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_MP_MISC_CTRL1 = 0x3f0134, 175*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_DIG_CTRL2 = 0x3f01c2, 176*d710b337SNabih Estefan Diaz NPCM_PCS_VR_MII_DIG_ERRCNT_SEL = 0x3f01c4, 177327b6808SNabih Estefan Diaz } NPCMRegister; 178327b6808SNabih Estefan Diaz 179327b6808SNabih Estefan Diaz static uint32_t gmac_read(QTestState *qts, const GMACModule *mod, 180327b6808SNabih Estefan Diaz NPCMRegister regno) 181327b6808SNabih Estefan Diaz { 182327b6808SNabih Estefan Diaz return qtest_readl(qts, mod->base_addr + regno); 183327b6808SNabih Estefan Diaz } 184327b6808SNabih Estefan Diaz 185*d710b337SNabih Estefan Diaz static uint16_t pcs_read(QTestState *qts, const GMACModule *mod, 186*d710b337SNabih Estefan Diaz NPCMRegister regno) 187*d710b337SNabih Estefan Diaz { 188*d710b337SNabih Estefan Diaz uint32_t write_value = (regno & 0x3ffe00) >> 9; 189*d710b337SNabih Estefan Diaz qtest_writel(qts, PCS_BASE_ADDRESS + NPCM_PCS_IND_AC_BA, write_value); 190*d710b337SNabih Estefan Diaz uint32_t read_offset = regno & 0x1ff; 191*d710b337SNabih Estefan Diaz return qtest_readl(qts, PCS_BASE_ADDRESS + read_offset); 192*d710b337SNabih Estefan Diaz } 193*d710b337SNabih Estefan Diaz 194327b6808SNabih Estefan Diaz /* Check that GMAC registers are reset to default value */ 195327b6808SNabih Estefan Diaz static void test_init(gconstpointer test_data) 196327b6808SNabih Estefan Diaz { 197327b6808SNabih Estefan Diaz const TestData *td = test_data; 198327b6808SNabih Estefan Diaz const GMACModule *mod = td->module; 199327b6808SNabih Estefan Diaz QTestState *qts = qtest_init("-machine npcm845-evb"); 200327b6808SNabih Estefan Diaz 201327b6808SNabih Estefan Diaz #define CHECK_REG32(regno, value) \ 202327b6808SNabih Estefan Diaz do { \ 203327b6808SNabih Estefan Diaz g_assert_cmphex(gmac_read(qts, mod, (regno)), ==, (value)); \ 204327b6808SNabih Estefan Diaz } while (0) 205327b6808SNabih Estefan Diaz 206*d710b337SNabih Estefan Diaz #define CHECK_REG_PCS(regno, value) \ 207*d710b337SNabih Estefan Diaz do { \ 208*d710b337SNabih Estefan Diaz g_assert_cmphex(pcs_read(qts, mod, (regno)), ==, (value)); \ 209*d710b337SNabih Estefan Diaz } while (0) 210*d710b337SNabih Estefan Diaz 211327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_DMA_BUS_MODE, 0x00020100); 212327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_DMA_XMT_POLL_DEMAND, 0); 213327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_DMA_RCV_POLL_DEMAND, 0); 214327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_DMA_RCV_BASE_ADDR, 0); 215327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_DMA_TX_BASE_ADDR, 0); 216327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_DMA_STATUS, 0); 217327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_DMA_CONTROL, 0); 218327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_DMA_INTR_ENA, 0); 219327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_DMA_MISSED_FRAME_CTR, 0); 220327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_DMA_HOST_TX_DESC, 0); 221327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_DMA_HOST_RX_DESC, 0); 222327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_DMA_CUR_TX_BUF_ADDR, 0); 223327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_DMA_CUR_RX_BUF_ADDR, 0); 224327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_DMA_HW_FEATURE, 0x100d4f37); 225327b6808SNabih Estefan Diaz 226327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_MAC_CONFIG, 0); 227327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_FRAME_FILTER, 0); 228327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_HASH_HIGH, 0); 229327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_HASH_LOW, 0); 230327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_MII_ADDR, 0); 231327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_MII_DATA, 0); 232327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_FLOW_CTRL, 0); 233327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_VLAN_FLAG, 0); 234327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_VERSION, 0x00001032); 235327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_WAKEUP_FILTER, 0); 236327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_PMT, 0); 237327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_LPI_CTRL, 0); 238327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_TIMER_CTRL, 0x03e80000); 239327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_INT_STATUS, 0); 240327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_INT_MASK, 0); 241327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_MAC0_ADDR_HI, 0x8000ffff); 242327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_MAC0_ADDR_LO, 0xffffffff); 243327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_MAC1_ADDR_HI, 0x0000ffff); 244327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_MAC1_ADDR_LO, 0xffffffff); 245327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_MAC2_ADDR_HI, 0x0000ffff); 246327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_MAC2_ADDR_LO, 0xffffffff); 247327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_MAC3_ADDR_HI, 0x0000ffff); 248327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_MAC3_ADDR_LO, 0xffffffff); 249327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_RGMII_STATUS, 0); 250327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_WATCHDOG, 0); 251327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_PTP_TCR, 0x00002000); 252327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_PTP_SSIR, 0); 253327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_PTP_STSR, 0); 254327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_PTP_STNSR, 0); 255327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_PTP_STSUR, 0); 256327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_PTP_STNSUR, 0); 257327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_PTP_TAR, 0); 258327b6808SNabih Estefan Diaz CHECK_REG32(NPCM_GMAC_PTP_TTSR, 0); 259327b6808SNabih Estefan Diaz 260*d710b337SNabih Estefan Diaz /* TODO Add registers PCS */ 261*d710b337SNabih Estefan Diaz if (mod->base_addr == 0xf0802000) { 262*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_CTL_ID1, 0x699e); 263*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_CTL_ID2, 0); 264*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_CTL_STS, 0x8000); 265*d710b337SNabih Estefan Diaz 266*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_MII_CTRL, 0x1140); 267*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_MII_STS, 0x0109); 268*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_MII_DEV_ID1, 0x699e); 269*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_MII_DEV_ID2, 0x0ced0); 270*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_MII_AN_ADV, 0x0020); 271*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_MII_LP_BABL, 0); 272*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_MII_AN_EXPN, 0); 273*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_MII_EXT_STS, 0xc000); 274*d710b337SNabih Estefan Diaz 275*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_TIM_SYNC_ABL, 0x0003); 276*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_TIM_SYNC_TX_MAX_DLY_LWR, 0x0038); 277*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_TIM_SYNC_TX_MAX_DLY_UPR, 0); 278*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_TIM_SYNC_TX_MIN_DLY_LWR, 0x0038); 279*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_TIM_SYNC_TX_MIN_DLY_UPR, 0); 280*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_TIM_SYNC_RX_MAX_DLY_LWR, 0x0058); 281*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_TIM_SYNC_RX_MAX_DLY_UPR, 0); 282*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_TIM_SYNC_RX_MIN_DLY_LWR, 0x0048); 283*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_SR_TIM_SYNC_RX_MIN_DLY_UPR, 0); 284*d710b337SNabih Estefan Diaz 285*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_MMD_DIG_CTRL1, 0x2400); 286*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_AN_CTRL, 0); 287*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_AN_INTR_STS, 0x000a); 288*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_TC, 0); 289*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_DBG_CTRL, 0); 290*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_EEE_MCTRL0, 0x899c); 291*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_EEE_TXTIMER, 0); 292*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_EEE_RXTIMER, 0); 293*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_LINK_TIMER_CTRL, 0); 294*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_EEE_MCTRL1, 0); 295*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_DIG_STS, 0x0010); 296*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_ICG_ERRCNT1, 0); 297*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_MISC_STS, 0); 298*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_RX_LSTS, 0); 299*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_MP_TX_BSTCTRL0, 0x00a); 300*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_MP_TX_LVLCTRL0, 0x007f); 301*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_MP_TX_GENCTRL0, 0x0001); 302*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_MP_TX_GENCTRL1, 0); 303*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_MP_TX_STS, 0); 304*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_MP_RX_GENCTRL0, 0x0100); 305*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_MP_RX_GENCTRL1, 0x1100); 306*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_MP_RX_LOS_CTRL0, 0x000e); 307*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_MP_MPLL_CTRL0, 0x0100); 308*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_MP_MPLL_CTRL1, 0x0032); 309*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_MP_MPLL_STS, 0x0001); 310*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_MP_MISC_CTRL2, 0); 311*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_MP_LVL_CTRL, 0x0019); 312*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_MP_MISC_CTRL0, 0); 313*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_MP_MISC_CTRL1, 0); 314*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_DIG_CTRL2, 0); 315*d710b337SNabih Estefan Diaz CHECK_REG_PCS(NPCM_PCS_VR_MII_DIG_ERRCNT_SEL, 0); 316*d710b337SNabih Estefan Diaz } 317*d710b337SNabih Estefan Diaz 318327b6808SNabih Estefan Diaz qtest_quit(qts); 319327b6808SNabih Estefan Diaz } 320327b6808SNabih Estefan Diaz 321327b6808SNabih Estefan Diaz static void gmac_add_test(const char *name, const TestData* td, 322327b6808SNabih Estefan Diaz GTestDataFunc fn) 323327b6808SNabih Estefan Diaz { 324327b6808SNabih Estefan Diaz g_autofree char *full_name = g_strdup_printf( 325327b6808SNabih Estefan Diaz "npcm7xx_gmac/gmac[%d]/%s", gmac_module_index(td->module), name); 326327b6808SNabih Estefan Diaz qtest_add_data_func(full_name, td, fn); 327327b6808SNabih Estefan Diaz } 328327b6808SNabih Estefan Diaz 329327b6808SNabih Estefan Diaz int main(int argc, char **argv) 330327b6808SNabih Estefan Diaz { 331327b6808SNabih Estefan Diaz TestData test_data_list[ARRAY_SIZE(gmac_module_list)]; 332327b6808SNabih Estefan Diaz 333327b6808SNabih Estefan Diaz g_test_init(&argc, &argv, NULL); 334327b6808SNabih Estefan Diaz 335327b6808SNabih Estefan Diaz for (int i = 0; i < ARRAY_SIZE(gmac_module_list); ++i) { 336327b6808SNabih Estefan Diaz TestData *td = &test_data_list[i]; 337327b6808SNabih Estefan Diaz 338327b6808SNabih Estefan Diaz td->module = &gmac_module_list[i]; 339327b6808SNabih Estefan Diaz 340327b6808SNabih Estefan Diaz gmac_add_test("init", td, test_init); 341327b6808SNabih Estefan Diaz } 342327b6808SNabih Estefan Diaz 343327b6808SNabih Estefan Diaz return g_test_run(); 344327b6808SNabih Estefan Diaz } 345