summaryrefslogtreecommitdiffstats
path: root/libs/MII
diff options
context:
space:
mode:
authorEvan Lojewski <github@meklort.com>2019-02-16 19:59:01 -0700
committerEvan Lojewski <github@meklort.com>2019-02-16 19:59:01 -0700
commit1d6fd33f16032140ab2c1a106d84cbe227decf89 (patch)
tree8334e151a98a9363467a2dab96f7382b7d3837d3 /libs/MII
parent313a92850de3f5eabda1a8c0fe753a667fcfc8dc (diff)
downloadbcm5719-ortega-1d6fd33f16032140ab2c1a106d84cbe227decf89.tar.gz
bcm5719-ortega-1d6fd33f16032140ab2c1a106d84cbe227decf89.zip
Fix MII register addresses and impliment accessing paged blocks.
Diffstat (limited to 'libs/MII')
-rw-r--r--libs/MII/include/MII.h5
-rw-r--r--libs/MII/include/bcm5719_MII.h50
-rw-r--r--libs/MII/mii.c6
3 files changed, 41 insertions, 20 deletions
diff --git a/libs/MII/include/MII.h b/libs/MII/include/MII.h
index 37599cb..dcdaf37 100644
--- a/libs/MII/include/MII.h
+++ b/libs/MII/include/MII.h
@@ -67,4 +67,9 @@ uint16_t MII_readRegister(uint8_t phy, mii_reg_t reg);
*/
void MII_writeRegister(uint8_t phy, mii_reg_t reg, uint16_t data);
+/**
+ * @fn void MII_writeRegister(uint8_t PHY, uint8_t reg, uint16_t data);
+ */
+void MII_selectBlock(uint8_t phy, uint16_t block);
+
#endif /* MII_H */
diff --git a/libs/MII/include/bcm5719_MII.h b/libs/MII/include/bcm5719_MII.h
index fd4b5f5..3c38672 100644
--- a/libs/MII/include/bcm5719_MII.h
+++ b/libs/MII/include/bcm5719_MII.h
@@ -186,7 +186,7 @@ typedef register_container RegMIIControl_t {
#endif /* CXX_SIMULATOR */
} RegMIIControl_t;
-#define REG_MII_STATUS ((volatile BCM5719_MII_H_uint16_t*)0x2) /* */
+#define REG_MII_STATUS ((volatile BCM5719_MII_H_uint16_t*)0x1) /* */
#define MII_STATUS_EXTENDED_CAPABILITIES_SUPPORTED_SHIFT 0u
#define MII_STATUS_EXTENDED_CAPABILITIES_SUPPORTED_MASK 0x1u
#define GET_MII_STATUS_EXTENDED_CAPABILITIES_SUPPORTED(__reg__) (((__reg__) & 0x1) >> 0u)
@@ -320,7 +320,7 @@ typedef register_container RegMIIStatus_t {
#endif /* CXX_SIMULATOR */
} RegMIIStatus_t;
-#define REG_MII_PHY_ID_HIGH ((volatile BCM5719_MII_H_uint16_t*)0x4) /* */
+#define REG_MII_PHY_ID_HIGH ((volatile BCM5719_MII_H_uint16_t*)0x2) /* */
#define MII_PHY_ID_HIGH_OUI_HIGH_SHIFT 0u
#define MII_PHY_ID_HIGH_OUI_HIGH_MASK 0xffffu
#define GET_MII_PHY_ID_HIGH_OUI_HIGH(__reg__) (((__reg__) & 0xffff) >> 0u)
@@ -349,7 +349,7 @@ typedef register_container RegMIIPhyIdHigh_t {
#endif /* CXX_SIMULATOR */
} RegMIIPhyIdHigh_t;
-#define REG_MII_PHY_ID_LOW ((volatile BCM5719_MII_H_uint16_t*)0x6) /* */
+#define REG_MII_PHY_ID_LOW ((volatile BCM5719_MII_H_uint16_t*)0x3) /* */
#define MII_PHY_ID_LOW_REVISION_SHIFT 0u
#define MII_PHY_ID_LOW_REVISION_MASK 0xfu
#define GET_MII_PHY_ID_LOW_REVISION(__reg__) (((__reg__) & 0xf) >> 0u)
@@ -392,7 +392,7 @@ typedef register_container RegMIIPhyIdLow_t {
#endif /* CXX_SIMULATOR */
} RegMIIPhyIdLow_t;
-#define REG_MII_AUTONEGOTIATION_ADVERTISEMENT ((volatile BCM5719_MII_H_uint16_t*)0x8) /* Bits in this register indicate what capability bits are advertised to the link partner. */
+#define REG_MII_AUTONEGOTIATION_ADVERTISEMENT ((volatile BCM5719_MII_H_uint16_t*)0x4) /* Bits in this register indicate what capability bits are advertised to the link partner. */
#define MII_AUTONEGOTIATION_ADVERTISEMENT_PROTOCOL_SELECT_SHIFT 0u
#define MII_AUTONEGOTIATION_ADVERTISEMENT_PROTOCOL_SELECT_MASK 0x1fu
#define GET_MII_AUTONEGOTIATION_ADVERTISEMENT_PROTOCOL_SELECT(__reg__) (((__reg__) & 0x1f) >> 0u)
@@ -490,7 +490,7 @@ typedef register_container RegMIIAutonegotiationAdvertisement_t {
#endif /* CXX_SIMULATOR */
} RegMIIAutonegotiationAdvertisement_t;
-#define REG_MII_AUTONEGOTIATION_LINK_PARTNER_ABILITY_BASE_PAGE ((volatile BCM5719_MII_H_uint16_t*)0xa) /* Bits in this register indicate the capabilities of the link partner. */
+#define REG_MII_AUTONEGOTIATION_LINK_PARTNER_ABILITY_BASE_PAGE ((volatile BCM5719_MII_H_uint16_t*)0x5) /* Bits in this register indicate the capabilities of the link partner. */
#define MII_AUTONEGOTIATION_LINK_PARTNER_ABILITY_BASE_PAGE_PROTOCOL_SELECTOR_SHIFT 0u
#define MII_AUTONEGOTIATION_LINK_PARTNER_ABILITY_BASE_PAGE_PROTOCOL_SELECTOR_MASK 0x1fu
#define GET_MII_AUTONEGOTIATION_LINK_PARTNER_ABILITY_BASE_PAGE_PROTOCOL_SELECTOR(__reg__) (((__reg__) & 0x1f) >> 0u)
@@ -591,7 +591,7 @@ typedef register_container RegMIIAutonegotiationLinkPartnerAbilityBasePage_t {
#endif /* CXX_SIMULATOR */
} RegMIIAutonegotiationLinkPartnerAbilityBasePage_t;
-#define REG_MII_AUTONEGOTIATION_EXPANSION ((volatile BCM5719_MII_H_uint16_t*)0xc) /* */
+#define REG_MII_AUTONEGOTIATION_EXPANSION ((volatile BCM5719_MII_H_uint16_t*)0x6) /* */
#define MII_AUTONEGOTIATION_EXPANSION_LINK_PARTNER_AUTONEGOTIATION_CAPABLE_SHIFT 0u
#define MII_AUTONEGOTIATION_EXPANSION_LINK_PARTNER_AUTONEGOTIATION_CAPABLE_MASK 0x1u
#define GET_MII_AUTONEGOTIATION_EXPANSION_LINK_PARTNER_AUTONEGOTIATION_CAPABLE(__reg__) (((__reg__) & 0x1) >> 0u)
@@ -665,7 +665,7 @@ typedef register_container RegMIIAutonegotiationExpansion_t {
#endif /* CXX_SIMULATOR */
} RegMIIAutonegotiationExpansion_t;
-#define REG_MII_AUTONEGOTIATION_NEXT_PAGE_TRANSMIT ((volatile BCM5719_MII_H_uint16_t*)0xe) /* */
+#define REG_MII_AUTONEGOTIATION_NEXT_PAGE_TRANSMIT ((volatile BCM5719_MII_H_uint16_t*)0x7) /* */
#define MII_AUTONEGOTIATION_NEXT_PAGE_TRANSMIT_CODE_FIELD_SHIFT 0u
#define MII_AUTONEGOTIATION_NEXT_PAGE_TRANSMIT_CODE_FIELD_MASK 0x7ffu
#define GET_MII_AUTONEGOTIATION_NEXT_PAGE_TRANSMIT_CODE_FIELD(__reg__) (((__reg__) & 0x7ff) >> 0u)
@@ -724,7 +724,7 @@ typedef register_container RegMIIAutonegotiationNextPageTransmit_t {
#endif /* CXX_SIMULATOR */
} RegMIIAutonegotiationNextPageTransmit_t;
-#define REG_MII_AUTONEGOTIATION_LINK_PARTNER_ABILITY_NEXT_PAGE ((volatile BCM5719_MII_H_uint16_t*)0x10) /* */
+#define REG_MII_AUTONEGOTIATION_LINK_PARTNER_ABILITY_NEXT_PAGE ((volatile BCM5719_MII_H_uint16_t*)0x8) /* */
#define MII_AUTONEGOTIATION_LINK_PARTNER_ABILITY_NEXT_PAGE_CODE_FIELD_SHIFT 0u
#define MII_AUTONEGOTIATION_LINK_PARTNER_ABILITY_NEXT_PAGE_CODE_FIELD_MASK 0x7ffu
#define GET_MII_AUTONEGOTIATION_LINK_PARTNER_ABILITY_NEXT_PAGE_CODE_FIELD(__reg__) (((__reg__) & 0x7ff) >> 0u)
@@ -788,7 +788,7 @@ typedef register_container RegMIIAutonegotiationLinkPartnerAbilityNextPage_t {
#endif /* CXX_SIMULATOR */
} RegMIIAutonegotiationLinkPartnerAbilityNextPage_t;
-#define REG_MII_1000BASE_T_CONTROL ((volatile BCM5719_MII_H_uint16_t*)0x12) /* */
+#define REG_MII_1000BASE_T_CONTROL ((volatile BCM5719_MII_H_uint16_t*)0x9) /* */
#define MII_1000BASE_T_CONTROL_ADVERTISE_1000BASE_T_HALF_DUPLEX_SHIFT 8u
#define MII_1000BASE_T_CONTROL_ADVERTISE_1000BASE_T_HALF_DUPLEX_MASK 0x100u
#define GET_MII_1000BASE_T_CONTROL_ADVERTISE_1000BASE_T_HALF_DUPLEX(__reg__) (((__reg__) & 0x100) >> 8u)
@@ -854,7 +854,7 @@ typedef register_container RegMII1000baseTControl_t {
#endif /* CXX_SIMULATOR */
} RegMII1000baseTControl_t;
-#define REG_MII_1000BASE_T_STATUS ((volatile BCM5719_MII_H_uint16_t*)0x14) /* */
+#define REG_MII_1000BASE_T_STATUS ((volatile BCM5719_MII_H_uint16_t*)0xa) /* */
#define MII_1000BASE_T_STATUS_IDLE_ERROR_COUNT_SHIFT 0u
#define MII_1000BASE_T_STATUS_IDLE_ERROR_COUNT_MASK 0xffu
#define GET_MII_1000BASE_T_STATUS_IDLE_ERROR_COUNT(__reg__) (((__reg__) & 0xff) >> 0u)
@@ -927,7 +927,7 @@ typedef register_container RegMII1000baseTStatus_t {
#endif /* CXX_SIMULATOR */
} RegMII1000baseTStatus_t;
-#define REG_MII_BROADREACH_LRE_ACCESS ((volatile BCM5719_MII_H_uint16_t*)0x1c) /* WTH is this. */
+#define REG_MII_BROADREACH_LRE_ACCESS ((volatile BCM5719_MII_H_uint16_t*)0xe) /* WTH is this. */
#define MII_BROADREACH_LRE_ACCESS_LRE_REGISTER_ACCESS_STATUS_SHIFT 0u
#define MII_BROADREACH_LRE_ACCESS_LRE_REGISTER_ACCESS_STATUS_MASK 0x1u
#define GET_MII_BROADREACH_LRE_ACCESS_LRE_REGISTER_ACCESS_STATUS(__reg__) (((__reg__) & 0x1) >> 0u)
@@ -970,7 +970,7 @@ typedef register_container RegMIIBroadreachLreAccess_t {
#endif /* CXX_SIMULATOR */
} RegMIIBroadreachLreAccess_t;
-#define REG_MII_IEEE_EXTENDED_STATUS ((volatile BCM5719_MII_H_uint16_t*)0x1e) /* */
+#define REG_MII_IEEE_EXTENDED_STATUS ((volatile BCM5719_MII_H_uint16_t*)0xf) /* */
#define MII_IEEE_EXTENDED_STATUS_1000BASE_T_HALF_DUPLEX_CAPABLE_SHIFT 12u
#define MII_IEEE_EXTENDED_STATUS_1000BASE_T_HALF_DUPLEX_CAPABLE_MASK 0x1000u
#define GET_MII_IEEE_EXTENDED_STATUS_1000BASE_T_HALF_DUPLEX_CAPABLE(__reg__) (((__reg__) & 0x1000) >> 12u)
@@ -1017,7 +1017,7 @@ typedef register_container RegMIIIeeeExtendedStatus_t {
#endif /* CXX_SIMULATOR */
} RegMIIIeeeExtendedStatus_t;
-#define REG_MII_PHY_EXTENDED_STATUS ((volatile BCM5719_MII_H_uint16_t*)0x22) /* */
+#define REG_MII_PHY_EXTENDED_STATUS ((volatile BCM5719_MII_H_uint16_t*)0x11) /* */
#define MII_PHY_EXTENDED_STATUS_MLT3_CODE_ERROR_DETECTED_SHIFT 0u
#define MII_PHY_EXTENDED_STATUS_MLT3_CODE_ERROR_DETECTED_MASK 0x1u
#define GET_MII_PHY_EXTENDED_STATUS_MLT3_CODE_ERROR_DETECTED(__reg__) (((__reg__) & 0x1) >> 0u)
@@ -1151,7 +1151,7 @@ typedef register_container RegMIIPhyExtendedStatus_t {
#endif /* CXX_SIMULATOR */
} RegMIIPhyExtendedStatus_t;
-#define REG_MII_RECEIVE_ERROR_COUNTER ((volatile BCM5719_MII_H_uint16_t*)0x24) /* */
+#define REG_MII_RECEIVE_ERROR_COUNTER ((volatile BCM5719_MII_H_uint16_t*)0x12) /* */
#define MII_RECEIVE_ERROR_COUNTER_RECEIVE_ERROR_COUNTER_SHIFT 0u
#define MII_RECEIVE_ERROR_COUNTER_RECEIVE_ERROR_COUNTER_MASK 0xffffu
#define GET_MII_RECEIVE_ERROR_COUNTER_RECEIVE_ERROR_COUNTER(__reg__) (((__reg__) & 0xffff) >> 0u)
@@ -1180,7 +1180,7 @@ typedef register_container RegMIIReceiveErrorCounter_t {
#endif /* CXX_SIMULATOR */
} RegMIIReceiveErrorCounter_t;
-#define REG_MII_FALSE_CARRIER_SENSE_COUNTER ((volatile BCM5719_MII_H_uint16_t*)0x26) /* */
+#define REG_MII_FALSE_CARRIER_SENSE_COUNTER ((volatile BCM5719_MII_H_uint16_t*)0x13) /* */
#define MII_FALSE_CARRIER_SENSE_COUNTER_FALSE_CARRIER_SENSE_COUNTER_SHIFT 0u
#define MII_FALSE_CARRIER_SENSE_COUNTER_FALSE_CARRIER_SENSE_COUNTER_MASK 0xffu
#define GET_MII_FALSE_CARRIER_SENSE_COUNTER_FALSE_CARRIER_SENSE_COUNTER(__reg__) (((__reg__) & 0xff) >> 0u)
@@ -1216,7 +1216,7 @@ typedef register_container RegMIIFalseCarrierSenseCounter_t {
#endif /* CXX_SIMULATOR */
} RegMIIFalseCarrierSenseCounter_t;
-#define REG_MII_LOCAL_REMOTE_RECEIVER_NOT_OK_COUNTER ((volatile BCM5719_MII_H_uint16_t*)0x28) /* */
+#define REG_MII_LOCAL_REMOTE_RECEIVER_NOT_OK_COUNTER ((volatile BCM5719_MII_H_uint16_t*)0x14) /* */
#define MII_LOCAL_REMOTE_RECEIVER_NOT_OK_COUNTER_REMOTE_RECEIVER_NOT_OK_COUNTER_SHIFT 0u
#define MII_LOCAL_REMOTE_RECEIVER_NOT_OK_COUNTER_REMOTE_RECEIVER_NOT_OK_COUNTER_MASK 0xffu
#define GET_MII_LOCAL_REMOTE_RECEIVER_NOT_OK_COUNTER_REMOTE_RECEIVER_NOT_OK_COUNTER(__reg__) (((__reg__) & 0xff) >> 0u)
@@ -1252,7 +1252,7 @@ typedef register_container RegMIILocalRemoteReceiverNotOkCounter_t {
#endif /* CXX_SIMULATOR */
} RegMIILocalRemoteReceiverNotOkCounter_t;
-#define REG_MII_AUXILLARY_STATUS_SUMMARY ((volatile BCM5719_MII_H_uint16_t*)0x32) /* */
+#define REG_MII_AUXILLARY_STATUS_SUMMARY ((volatile BCM5719_MII_H_uint16_t*)0x19) /* */
#define MII_AUXILLARY_STATUS_SUMMARY_PAUSE_RESOLUTION___TRANSMIT_DIRECTION_SHIFT 0u
#define MII_AUXILLARY_STATUS_SUMMARY_PAUSE_RESOLUTION___TRANSMIT_DIRECTION_MASK 0x1u
#define GET_MII_AUXILLARY_STATUS_SUMMARY_PAUSE_RESOLUTION___TRANSMIT_DIRECTION(__reg__) (((__reg__) & 0x1) >> 0u)
@@ -1372,7 +1372,7 @@ typedef register_container RegMIIAuxillaryStatusSummary_t {
#endif /* CXX_SIMULATOR */
} RegMIIAuxillaryStatusSummary_t;
-#define REG_MII_INTERRUPT_STATUS ((volatile BCM5719_MII_H_uint16_t*)0x34) /* */
+#define REG_MII_INTERRUPT_STATUS ((volatile BCM5719_MII_H_uint16_t*)0x1a) /* */
#define MII_INTERRUPT_STATUS_CRC_ERROR_SHIFT 0u
#define MII_INTERRUPT_STATUS_CRC_ERROR_MASK 0x1u
#define GET_MII_INTERRUPT_STATUS_CRC_ERROR(__reg__) (((__reg__) & 0x1) >> 0u)
@@ -1501,7 +1501,7 @@ typedef register_container RegMIIInterruptStatus_t {
#endif /* CXX_SIMULATOR */
} RegMIIInterruptStatus_t;
-#define REG_MII_INTERRUPT_MASK ((volatile BCM5719_MII_H_uint16_t*)0x36) /* */
+#define REG_MII_INTERRUPT_MASK ((volatile BCM5719_MII_H_uint16_t*)0x1b) /* */
#define MII_INTERRUPT_MASK_INTERRUPT_MASK_VECTOR_SHIFT 0u
#define MII_INTERRUPT_MASK_INTERRUPT_MASK_VECTOR_MASK 0xffffu
#define GET_MII_INTERRUPT_MASK_INTERRUPT_MASK_VECTOR(__reg__) (((__reg__) & 0xffff) >> 0u)
@@ -1530,7 +1530,7 @@ typedef register_container RegMIIInterruptMask_t {
#endif /* CXX_SIMULATOR */
} RegMIIInterruptMask_t;
-#define REG_MII_TEST_1 ((volatile BCM5719_MII_H_uint16_t*)0x3c) /* */
+#define REG_MII_TEST_1 ((volatile BCM5719_MII_H_uint16_t*)0x1e) /* */
#define MII_TEST_1_MAIN_DAC_TRIM_SHIFT 0u
#define MII_TEST_1_MAIN_DAC_TRIM_MASK 0xfu
#define GET_MII_TEST_1_MAIN_DAC_TRIM(__reg__) (((__reg__) & 0xf) >> 0u)
@@ -1643,6 +1643,13 @@ typedef register_container RegMIITest1_t {
#endif /* CXX_SIMULATOR */
} RegMIITest1_t;
+#define REG_MII_BLOCK_SELECT ((volatile BCM5719_MII_H_uint16_t*)0x1f) /* Pages in the specified register block. */
+/** @brief Register definition for @ref MII_t.BlockSelect. */
+typedef register_container RegMIIBlockSelect_t {
+ /** @brief 16bit direct register access. */
+ BCM5719_MII_H_uint16_t r16;
+} RegMIIBlockSelect_t;
+
/** @brief Component definition for @ref MII. */
typedef struct {
/** @brief */
@@ -1720,6 +1727,9 @@ typedef struct {
/** @brief */
RegMIITest1_t Test1;
+ /** @brief Pages in the specified register block. */
+ RegMIIBlockSelect_t BlockSelect;
+
} MII_t;
/** @brief MII Registers */
diff --git a/libs/MII/mii.c b/libs/MII/mii.c
index a1f752b..c2d4ba2 100644
--- a/libs/MII/mii.c
+++ b/libs/MII/mii.c
@@ -119,3 +119,9 @@ void MII_writeRegister(uint8_t phy, mii_reg_t reg, uint16_t data)
// Wait for transaction to complete (not strictly required for writes).
MII_wait();
}
+
+void MII_selectBlock(uint8_t phy, uint16_t block)
+{
+ // Write register 0x1f with the block.
+ MII_writeRegister(phy, REG_MII_BLOCK_SELECT, block);
+}
OpenPOWER on IntegriCloud