/*
 * Copyright 2017 NXP
 *
 * This program is free software; you can redistribute  it and/or modify it
 * under  the terms of  the GNU General  Public License as published by the
 * Free Software Foundation;  either version 2 of the  License, or (at your
 * option) any later version.
 *
 */

#ifndef _NXP_PHY_H
#define _NXP_PHY_H

 /* PHY IDs */
#define NXP_PHY_ID_TJA1100        (0x0180DC40U)
#define NXP_PHY_ID_TJA1101        (0x0180DD00U)
#define NXP_PHY_ID_TJA1102P0      (0x0180DC80U)
#define NXP_PHY_ID_TJA1102P1      (0x00000000U)
#define NXP_PHY_ID_TJA1102S       (0x0180DC90U) /* only P0 is available */

/* masks out the revision number */
#define NXP_PHY_ID_MASK           (0xFFFFFFF0U)

#endif /* _NXP_PHY_H */

/* NXP specific registers */

/* extended_control register (TJA1100 and TJA1102) */
#define MII_ECTRL                 (0x11U)
/* configuration_1 register (TJA1100 and TJA1102) */
#define MII_CFG1                  (0x12U)
/* configuration_2 register (TJA1100 and TJA1102) */
#define MII_CFG2                  (0x13U)
/* symbol_error_counter register (TJA1100 and TJA1102) */
#define MII_SYMERRCNT             (0x14U)
/* interrupt_source_flag register (TJA1100 and TJA1102) */
#define MII_INTSRC                (0x15U)
/* interrupt_mask register (TJA1100 and TJA1102) */
#define MII_INTMASK               (0x16U)
/* communication_status register (TJA1100 and TJA1102) */
#define MII_COMMSTAT              (0x17U)
/* general_status register (TJA1100 and TJA1102) */
#define MII_GENSTAT               (0x18U)
/* external_status register (TJA1100 and TJA1102) */
#define MII_EXTERNAL_STATUS       (0x19U)
/* link_fail_counter register (TJA1100 and TJA1102) */
#define MII_LINK_FAIL_COUNTER     (0x1AU)
/* common_configuration register (only TJA1102) */
#define MII_COMMCFG               (0x1BU)
/* configuration_3 register (only TJA1102) */
#define MII_CONFIGURATION_3       (0x1CU)

/* extended_control register */
#define ECTRL_LINK_CONTROL        BIT(15)
#define ECTRL_POWER_MODE          (0x00007800U)
#define ECTRL_SLAVE_JITTER_TEST   BIT(10)
#define ECTRL_TRAINING_RESTART    BIT(9)
#define ECTRL_TEST_MODE           (0x000001C0U)
#define ECTRL_CABLE_TEST          BIT(5)
#define ECTRL_LOOPBACK_MODE       (0x00000018U)
#define ECTRL_CONFIG_EN           BIT(2)
#define ECTRL_WAKE_REQUEST        BIT(0)
#define CABLE_TEST_TIMEOUT        1U /* cable test takes <= 1*100us */

/* register values of the different power modes */
#define POWER_MODE_NOCHANGE       (0x00000000U)
#define POWER_MODE_NORMAL         (0x00001800U)
#define POWER_MODE_SLEEPREQUEST   (0x00005800U)
#define POWER_MODE_STANDBY        (0x00006000U)
#define POWER_MODE_SILENT         (0x00004800U)
#define POWER_MODE_SLEEP          (0x00005000U)

/* timeouts for different power mode transitions */
#define POWER_MODE_TIMEOUT        200U
#define SLEEP_REQUEST_TO          160U /* 16ms = 160*100us */

/* duration necessary for a reliable wake up of the link partner (in us) */
#define TJA100_WAKE_REQUEST_TIMEOUT_US     5000U
#define TJA102_WAKE_REQUEST_TIMEOUT_US     1300U

/* configuration_1 register */
#define CFG1_MASTER_SLAVE         BIT(15)
#define TJA1100_CFG1_AUTO_OP      BIT(14)
#define TJA1102_CFG1_FWDPHYLOC    BIT(14)
#define CFG1_LINK_LENGTH          (0x00003000U)
#define CFG1_REMWUPHY             BIT(11)
#define CFG1_LOCWUPHY             BIT(10)
#define CFG1_MII_MODE             (0x00000300U)
#define TJA1100_CFG1_MII_MODE_REFCLK_IN	0x100
#define CFG1_MII_DRIVER           BIT(7)
#define CFG1_SLEEP_CONFIRM        BIT(6)
#define TJA1100_CFG1_LED_MODE     (0x00000030U)
#define TJA1100_CFG1_LED_EN       BIT(3)
#define CFG1_FWDPHYREM            BIT(2)
#define CFG1_AUTO_PWD             BIT(1)
#define CFG1_LPS_ACTIVE           BIT(0)

/* configuration_2 register */
#define CFG2_PHYAD                (0x0000F800U)
#define CFG2_SNR_AVERAGING        (0x00000600U)
#define CFG2_SNR_WLIMIT           (0x000001C0U)
#define CFG2_SNR_FAILLIMIT        (0x00000038U)
#define CFG2_JUMBO_ENABLE         BIT(2)
#define CFG2_SLEEP_REQUEST_TO     (0x00000003U)

#define SLEEP_REQUEST_TO_16MS     (0x00000003U)

/* symbol_error_counter register */
#define SYMERRCNT_SYM_ERR_CNT     (0xFFFFFFFFU)

/* interrupt_source_flag register */
#define INTERRUPT_PWON                    BIT(15)
#define INTERRUPT_WAKEUP                  BIT(14)
#define INTERRUPT_WUR_RECEIVED            BIT(13)
#define INTERRUPT_LPS_RECEIVED            BIT(12)
#define INTERRUPT_PHY_INIT_FAIL           BIT(11)
#define INTERRUPT_LINK_STATUS_FAIL        BIT(10)
#define INTERRUPT_LINK_STATUS_UP          BIT(9)
#define INTERRUPT_SYM_ERR                 BIT(8)
#define INTERRUPT_TRAINING_FAILED         BIT(7)
#define INTERRUPT_SNR_WARNING             BIT(6)
#define INTERRUPT_CONTROL_ERROR           BIT(5)
#define INTERRUPT_TXEN_CLAMPED            BIT(4)
#define INTERRUPT_UV_ERR                  BIT(3)
#define INTERRUPT_UV_RECOVERY             BIT(2)
#define INTERRUPT_TEMP_ERROR              BIT(1)
#define INTERRUPT_SLEEP_ABORT             BIT(0)
#define INTERRUPT_NONE                    (0x00000000U)
#define INTERRUPT_ALL                     (0x0000FFFFU)

/* communication_status register */
#define COMMSTAT_LINK_UP                BIT(15)
#define COMMSTAT_TX_MODE                (0x00006000U)
#define COMMSTAT_LOC_RCVR_STATUS        BIT(12)
#define COMMSTAT_REM_RCVR_STATUS        BIT(11)
#define COMMSTAT_SCR_LOCKED             BIT(10)
#define COMMSTAT_SSD_ERROR              BIT(9)
#define COMMSTAT_ESD_ERROR              BIT(8)
#define COMMSTAT_SNR                    (0x000000E0U)
#define COMMSTAT_RECEIVE_ERROR          BIT(4)
#define COMMSTAT_TRANSMIT_ERROR         BIT(3)
#define COMMSTAT_PHY_STATE              (0x00000007U)

/* register category general_status */
#define GENSTAT_INT_STATUS        BIT(15)
#define GENSTAT_PLL_LOCKED        BIT(14)
#define GENSTAT_LOCAL_WU          BIT(13)
#define GENSTAT_REMOTE_WU         BIT(12)
#define GENSTAT_DATA_DET_WU       BIT(11)
#define GENSTAT_EN_STATUS         BIT(10)
#define GENSTAT_RESET_STATUS      BIT(9)
#define GENSTAT_LINKFAIL_CNT      (0x000000F8U)

/* common_configuration register */
#define COMMCFG_AUTO_OP           BIT(15)

/* External status register */
#define EXTSTAT_OPEN_DETECT       BIT(7)
#define EXTSTAT_SHORT_DETECT      BIT(8)

/*
 * Indicator for BRR support in ESTATUS register
 * and in phydev->supported member.
 * Not yet present in include/uapi/linux/mii.h and
 * include/uapi/linux/ethtool.h
 */
#define ESTATUS_100T1_FULL        BIT(7)
#define SUPPORTED_100BASET1_FULL  BIT(27)
#define ADVERTISED_100BASET1_FULL BIT(27)

/* length of delay during one loop iteration in
 * wait_on_condition (in us)
 */
#define DELAY_LENGTH              100U

/* length of delay during two pollings (in ms) */
#define POLL_PAUSE              50U

/* possible test modes of the PHY */
enum test_mode {
	NO_TMODE = 1,
	TMODE1,
	TMODE2,
	TMODE3,
	TMODE4,
	TMODE5,
	TMODE6
};

 /* register values of the different test modes */
 #define ECTRL_NO_TMODE          (0x000000U) /* no test mode */
 #define ECTRL_TMODE1            (0x000040U)
 #define ECTRL_TMODE2            (0x000080U)
 #define ECTRL_TMODE3            (0x0000C0U)
 #define ECTRL_TMODE4            (0x000100U)
 #define ECTRL_TMODE5            (0x000140U)
 /* scrambler, descrambler bypassed */
 #define ECTRL_TMODE6            (0x000180U)

/* possible loopback modes of the PHY */
enum loopback_mode {
	NO_LMODE = 1,
	INTERNAL_LMODE,
	EXTERNAL_LMODE,
	REMOTE_LMODE
};

/* register values of the different loopback modes */
#define ECTRL_INTERNAL_LMODE    (0x000000U)
#define ECTRL_EXTERNAL_LMODE    (0x000008U)
#define ECTRL_REMOTE_LMODE      (0x000018U)

/* possible led modes of the PHY */
enum led_mode {
	NO_LED_MODE = 1,
	LINKUP_LED_MODE,
	FRAMEREC_LED_MODE,
	SYMERR_LED_MODE,
	CRSSIG_LED_MODE
};

/* register values of the different led modes */
#define CFG1_LED_LINKUP    (0x00000000U)
#define CFG1_LED_FRAMEREC  (0x00000010U)
#define CFG1_LED_SYMERR    (0x00000020U)
#define CFG1_LED_CRSSIG    (0x00000030U)

/* values written to sysfs nodes */
#define SYSFS_FWDPHYLOC    BIT(0)
#define SYSFS_REMWUPHY     BIT(1)
#define SYSFS_LOCWUPHY     BIT(2)
#define SYSFS_FWDPHYREM    BIT(3)

/* nxp specific data */
struct nxp_specific_data {
	int is_master;
	int is_poll_setup;
	int is_polling;

	u32 quirks;
};

/* register values of the different led modes */
#define SNR_CLASS_NONE	(0x00000000U)
#define SNR_CLASS_A	(0x00000040U)
#define SNR_CLASS_B	(0x00000080U)
#define SNR_CLASS_C	(0x000000C0U)
#define SNR_CLASS_D	(0x00000100U)
#define SNR_CLASS_E	(0x00000140U)
#define SNR_CLASS_F	(0x00000180U)
#define SNR_CLASS_G	(0x000001C0U)

/* Helper Function prototypes */
static int set_master_cfg(struct phy_device *phydev, int setMaster);
static int get_master_cfg(struct phy_device *phydev);
static int wait_on_condition(struct phy_device *phydev, int reg_addr,
			     int reg_mask, int cond, int timeout);
static void set_link_control(struct phy_device *phydev,
			     int enable_link_control);
static inline int phy_configure_bit(struct phy_device *phydev,
				    int reg_name, int bit_mask,
				    int bit_value);
static inline int phy_configure_bits(struct phy_device *phydev,
				     int reg_name, int bit_mask,
				     int bit_value);
static int nxp_resume(struct phy_device *phydev);
static int nxp_ack_interrupt(struct phy_device *phydev);
static void poll(struct work_struct *work);
static void setup_polling(struct phy_device *phydev);
static void start_polling(struct phy_device *phydev);
static void stop_polling(struct phy_device *phydev);

static struct attribute *nxp_sysfs_entries[];
static struct attribute_group nxp_attribute_group;
