Skip to content

Commit

Permalink
Merge pull request #223 from han1raaijmakers/KinetisTJA110X
Browse files Browse the repository at this point in the history
Kinetis renamed TJA1100 to TJA110X registers
  • Loading branch information
davids5 committed Feb 7, 2020
2 parents 486a05e + 513475c commit cabd692
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 50 deletions.
82 changes: 44 additions & 38 deletions arch/arm/src/kinetis/kinetis_enet.c
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@
# define BOARD_PHY_NAME "TJA1100"
# define BOARD_PHYID1 MII_PHYID1_TJA1100
# define BOARD_PHYID2 MII_PHYID2_TJA1100
# define BOARD_PHY_STATUS MII_TJA1100_BSR
# define BOARD_PHY_STATUS MII_TJA110X_BSR
# define BOARD_PHY_10BASET(s) 0 /* PHY only supports 100BASE-T1 */
# define BOARD_PHY_100BASET(s) 1 /* PHY only supports 100BASE-T1 */
# define BOARD_PHY_ISDUPLEX(s) 1 /* PHY only supports fullduplex */
Expand Down Expand Up @@ -223,8 +223,9 @@
/****************************************************************************
* Private Types
****************************************************************************/
/* The kinetis_driver_s encapsulates all state information for a single hardware
* interface

/* The kinetis_driver_s encapsulates all state information for a single
* hardware interface.
*/

struct kinetis_driver_s
Expand Down Expand Up @@ -600,8 +601,8 @@ static int kinetis_txpoll(struct net_driver_s *dev)
}
}

/* If zero is returned, the polling will continue until all connections have
* been examined.
/* If zero is returned, the polling will continue until all connections
* have been examined.
*/

return 0;
Expand Down Expand Up @@ -664,7 +665,7 @@ static void kinetis_receive(FAR struct kinetis_driver_s *priv)
ipv4_input(&priv->dev);

/* If the above function invocation resulted in data that should be
* sent out on the network, the field d_len will set to a value > 0.
* sent out on the network, the field d_len will set to a value > 0
*/

if (priv->dev.d_len > 0)
Expand Down Expand Up @@ -702,7 +703,7 @@ static void kinetis_receive(FAR struct kinetis_driver_s *priv)
ipv6_input(&priv->dev);

/* If the above function invocation resulted in data that should be
* sent out on the network, the field d_len will set to a value > 0.
* sent out on the network, the field d_len will set to a value > 0
*/

if (priv->dev.d_len > 0)
Expand Down Expand Up @@ -736,7 +737,7 @@ static void kinetis_receive(FAR struct kinetis_driver_s *priv)
arp_arpin(&priv->dev);

/* If the above function invocation resulted in data that should
* be sent out on the network, the field d_len will set to a
* be sent out on the network, the field d_len will set to a
* value > 0.
*/

Expand All @@ -751,10 +752,11 @@ static void kinetis_receive(FAR struct kinetis_driver_s *priv)
NETDEV_RXDROPPED(&priv->dev);
}

/* Point the packet buffer back to the next TX buffer, which will be used
* during the next write. If the write queue is full, then this will
* point at an active buffer, which must not be written to. This is OK
* because devif_poll won't be called unless the queue is not full.
/* Point the packet buffer back to the next TX buffer, which will be
* used during the next write. If the write queue is full, then this
* will point at an active buffer, which must not be written to.
* This is OK because devif_poll won't be called unless the queue is
* not full.
*/

priv->dev.d_buf =
Expand Down Expand Up @@ -1071,16 +1073,17 @@ static void kinetis_poll_work(FAR void *arg)
{
FAR struct kinetis_driver_s *priv = (FAR struct kinetis_driver_s *)arg;

/* Check if there is there is a transmission in progress. We cannot perform
* the TX poll if he are unable to accept another packet for transmission.
/* Check if there is there is a transmission in progress. We cannot
* perform the TX poll if he are unable to accept another packet for
* transmission.
*/

net_lock();
if (!kinetis_txringfull(priv))
{
/* If so, update TCP timing states and poll the network for new XMIT
* data. Hmmm..might be bug here. Does this mean if there is a transmit
* in progress, we will missing TCP time state updates?
* data. Hmmm..might be bug here. Does this mean if there is a
* transmit in progress, we will missing TCP time state updates?
*/

devif_timer(&priv->dev, KINETIS_WDDELAY, kinetis_txpoll);
Expand Down Expand Up @@ -1343,8 +1346,8 @@ static void kinetis_txavail_work(FAR void *arg)

if (!kinetis_txringfull(priv))
{
/* No, there is space for another transfer. Poll the network for new
* XMIT data.
/* No, there is space for another transfer. Poll the network for
* new XMIT data.
*/

devif_poll(&priv->dev, kinetis_txpoll);
Expand Down Expand Up @@ -1473,7 +1476,8 @@ static int kinetis_rmmac(struct net_driver_s *dev, FAR const uint8_t *mac)
****************************************************************************/

#ifdef CONFIG_NETDEV_IOCTL
static int kinetis_ioctl(struct net_driver_s *dev, int cmd, unsigned long arg)
static int kinetis_ioctl(struct net_driver_s *dev, int cmd,
unsigned long arg)
{
#ifdef CONFIG_NETDEV_PHY_IOCTL
FAR struct kinetis_driver_s *priv =
Expand All @@ -1497,15 +1501,17 @@ static int kinetis_ioctl(struct net_driver_s *dev, int cmd, unsigned long arg)
{
struct mii_ioctl_data_s *req =
(struct mii_ioctl_data_s *)((uintptr_t)arg);
ret = kinetis_readmii(priv, req->phy_id, req->reg_num, &req->val_out);
ret = kinetis_readmii(priv, req->phy_id, req->reg_num,
&req->val_out);
}
break;

case SIOCSMIIREG: /* Set register in MII PHY */
{
struct mii_ioctl_data_s *req =
(struct mii_ioctl_data_s *)((uintptr_t)arg);
ret = kinetis_writemii(priv, req->phy_id, req->reg_num, req->val_in);
ret = kinetis_writemii(priv, req->phy_id, req->reg_num,
req->val_in);
}
break;
#endif /* ifdef CONFIG_NETDEV_PHY_IOCTL */
Expand Down Expand Up @@ -1882,40 +1888,40 @@ static inline int kinetis_initphy(struct kinetis_driver_s *priv)
}

#if defined(CONFIG_ETH0_PHY_TJA1100)
/* The NXP TJA1100 PHY is an automotive 100BASE-T1 PHY
/* The NXP TJA110X PHY is an automotive 100BASE-T1 PHY
* Which requires additional initialization
*/

/* select mode TJA1100 */
/* select mode TJA110X */

kinetis_writemii(priv, phyaddr, MII_TJA1100_EXT_CNTRL,
kinetis_writemii(priv, phyaddr, MII_TJA110X_EXT_CNTRL,
(MII_EXT_CNTRL_NORMAL | MII_EXT_CNTRL_CONFIG_EN |
MII_EXT_CNTRL_CONFIG_INH));

# if defined(CONFIG_PHY_100BASE_T1_MASTER)
/* Set TJA1100 in master mode */
/* Set TJA110X in master mode */

kinetis_writemii(priv, phyaddr, MII_TJA1100_CONFIG1,
kinetis_writemii(priv, phyaddr, MII_TJA110X_CONFIG1,
(MII_CONFIG1_MASTER | MII_CONFIG1_TX_1250MV |
MII_CONFIG1_RMII_25MHZ | MII_CONFIG1_LED_EN));
# else
/* Set TJA1100 in slave mode */
/* Set TJA110X in slave mode */

kinetis_writemii(priv, phyaddr, MII_TJA1100_CONFIG1,
kinetis_writemii(priv, phyaddr, MII_TJA110X_CONFIG1,
(MII_CONFIG1_TX_1250MV | MII_CONFIG1_RMII_25MHZ |
MII_CONFIG1_LED_EN));
# endif

kinetis_writemii(priv, phyaddr, MII_TJA1100_CONFIG2,
kinetis_writemii(priv, phyaddr, MII_TJA110X_CONFIG2,
(MII_CONFIG2_SNR_AV64 | MII_CONFIG2_WLIM_D |
MII_CONFIG2_SNR_F_NL | MII_CONFIG2_SLP_T_1));

/* Select normal mode TJA1100 */
/* Select normal mode TJA110X */

kinetis_writemii(priv, phyaddr, MII_TJA1100_EXT_CNTRL,
kinetis_writemii(priv, phyaddr, MII_TJA110X_EXT_CNTRL,
(MII_EXT_CNTRL_NORMAL | MII_EXT_CNTRL_CONFIG_INH));

kinetis_writemii(priv, phyaddr, MII_TJA1100_EXT_CNTRL,
kinetis_writemii(priv, phyaddr, MII_TJA110X_EXT_CNTRL,
(MII_EXT_CNTRL_LINK_CNTRL | MII_EXT_CNTRL_NORMAL |
MII_EXT_CNTRL_CONFIG_INH));
#endif
Expand Down Expand Up @@ -2217,8 +2223,8 @@ int kinetis_netinitialize(int intf)
#ifdef CONFIG_NET_ETHERNET
/* Determine a semi-unique MAC address from MCU UID
* We use UID Low and Mid Low registers to get 64 bits, from which we keep
* 48 bits. We then force unicast and locally administered bits (b0 and b1,
* 1st octet)
* 48 bits. We then force unicast and locally administered bits (b0 and
* b1, 1st octet)
*/

uidl = getreg32(KINETIS_SIM_UIDL);
Expand All @@ -2230,10 +2236,10 @@ int kinetis_netinitialize(int intf)

mac[0] = (uidml & 0x0000ff00) >> 8;
mac[1] = (uidml & 0x000000ff);
mac[2] = (uidl & 0xff000000) >> 24;
mac[3] = (uidl & 0x00ff0000) >> 16;
mac[4] = (uidl & 0x0000ff00) >> 8;
mac[5] = (uidl & 0x000000ff);
mac[2] = (uidl & 0xff000000) >> 24;
mac[3] = (uidl & 0x00ff0000) >> 16;
mac[4] = (uidl & 0x0000ff00) >> 8;
mac[5] = (uidl & 0x000000ff);
#endif

/* Put the interface in the down state. This usually amounts to resetting
Expand Down
16 changes: 15 additions & 1 deletion drivers/net/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,11 @@ config ETH0_PHY_DP83848C

config ETH0_PHY_TJA1100
bool "NXP TJA1100 PHY"
select ARCH_PHY_100BASE_T1

config ETH0_PHY_TJA1101
bool "NXP TJA1101 PHY"
select ARCH_PHY_100BASE_T1

config ETH0_PHY_LAN8720
bool "SMSC LAN8720 PHY"
Expand Down Expand Up @@ -428,6 +433,11 @@ config ETH1_PHY_DP83848C

config ETH1_PHY_TJA1100
bool "NXP TJA1100 PHY"
select ARCH_PHY_100BASE_T1

config ETH1_PHY_TJA1101
bool "NXP TJA1101 PHY"
select ARCH_PHY_100BASE_T1

config ETH1_PHY_LAN8720
bool "SMSC LAN8720 PHY"
Expand All @@ -437,7 +447,11 @@ config ETH1_PHY_DM9161

endchoice

if (ETH0_PHY_TJA1100 || ETH1_PHY_TJA1100)
config ARCH_PHY_100BASE_T1
bool
default n

if (ARCH_PHY_100BASE_T1)

choice
prompt "Automotive Ethernet 100BASE-T1 master/slave mode"
Expand Down
25 changes: 14 additions & 11 deletions include/nuttx/net/mii.h
Original file line number Diff line number Diff line change
Expand Up @@ -634,20 +634,23 @@
# define MII_PHYCTRL1_MODE_10FDX (5 << MII_PHYCTRL1_MODE_SHIFT) /* 10Base-T full-duplex */
# define MII_PHYCTRL1_MODE_100FDX (6 << MII_PHYCTRL1_MODE_SHIFT) /* 100Base-T full-duplex */

/* TJA1100 register bit settings *************************************************************/
/* TJA110X register bit settings ********************************************/

/* TJA1100 MII ID1/2 register bits */
/* TJA110X MII ID1/2 register bits */

#define MII_PHYID1_TJA1100 0x0180 /* ID1 value for NXP TJA1100 */
#define MII_PHYID2_TJA1100 0xdc40 /* ID2 value for NXP TJA1100 */

#define MII_TJA1100_BCR 0x0 /* Basic Control register */
#define MII_TJA1100_BSR 0x1 /* Basic Status register */
#define MII_TJA1100_EXT_CNTRL 0x11 /* Extra control register */
#define MII_TJA1100_CONFIG1 0x12 /* CONFIG 1 register */
#define MII_TJA1100_CONFIG2 0x13 /* CONFIG 2 register */
#define MII_PHYID1_TJA1101 0x0180 /* ID1 value for NXP TJA1101 */
#define MII_PHYID2_TJA1101 0xdd00 /* ID2 value for NXP TJA1101 */

/* MII_TJA1100_EXT_CNTRL */
#define MII_TJA110X_BCR 0x0 /* Basic Control register */
#define MII_TJA110X_BSR 0x1 /* Basic Status register */
#define MII_TJA110X_EXT_CNTRL 0x11 /* Extra control register */
#define MII_TJA110X_CONFIG1 0x12 /* CONFIG 1 register */
#define MII_TJA110X_CONFIG2 0x13 /* CONFIG 2 register */

/* MII_TJA110X_EXT_CNTRL */

#define MII_EXT_CNTRL_LINK_CNTRL (1 << 15)
#define MII_EXT_CNTRL_POWER_MODE_SHIFT (11)
Expand Down Expand Up @@ -680,7 +683,7 @@
#define MII_EXT_CNTRL_CONFIG_INH (1 << 1)
#define MII_EXT_CNTRL_WAKE_REQ (1 << 0) /* transmit idle symbols as bus wake-up request */

/* MII_TJA1100_CONFIG1 */
/* MII_TJA110X_CONFIG1 */

#define MII_CONFIG1_MASTER (1 << 15)
#define MII_CONFIG1_AUTO_OP (1 << 14)
Expand Down Expand Up @@ -708,7 +711,7 @@
#define MII_CONFIG1_CNFG_WAKE (1 << 2) /* ratiometric input threshold, absolute if zero */
#define MII_CONFIG1_AUTO_PWD (1 << 1) /* autonomous power-down enabled */

/* MII_TJA1100_CONFIG2 */
/* MII_TJA110X_CONFIG2 */

#define MII_CONFIG2_PHYAD_SHIFT (11) /* readback of scrambler key */
#define MII_CONFIG2_PHYAD_MASK (0x1f << MII_CONFIG2_PHYAD_SHIFT)
Expand All @@ -729,7 +732,7 @@
# define MII_CONFIG2_WLIM_F (6 << MII_CONFIG2_WLIM_SHIFT) /* Class F SNR warning limit */
# define MII_CONFIG2_WLIM_G (7 << MII_CONFIG2_WLIM_SHIFT) /* Class G SNR warning limit */
#define MII_CONFIG2_SNR_F_SHIFT (3) /* signal to noise ratio fail limit */
#define MII_CONFIG2_SNR_F_MASK (7 << MII_CONFIG2_SNR_F_SHIFT))
#define MII_CONFIG2_SNR_F_MASK (7 << MII_CONFIG2_SNR_F_SHIFT)
# define MII_CONFIG2_SNR_F_NL (0 << MII_CONFIG2_SNR_F_SHIFT) /* no limit */
# define MII_CONFIG2_SNR_F_CLA (1 << MII_CONFIG2_SNR_F_SHIFT) /* Class A */
# define MII_CONFIG2_SNR_F_CLB (2 << MII_CONFIG2_SNR_F_SHIFT) /* Class B */
Expand Down

0 comments on commit cabd692

Please sign in to comment.