Commit ec8ca8a3 authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt Committed by Felipe Balbi

usb: gadget: net2280: Move all "ll" registers in one structure

The split into multiple structures of the "ll" register bank is
impractical. It makes it hard to add ll_lfps_timers_2 which is
at offset 0x794, which is outside of the existing "lfps" structure
and would require us to add yet another one.

Instead, move all the "ll" registers into a single usb338x_ll_regs
structure, and add ll_lfps_timers_2 while at it. It will be used
in a subsequent patch.
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent 17b63704
...@@ -2244,30 +2244,30 @@ static void usb_reinit_338x(struct net2280 *dev) ...@@ -2244,30 +2244,30 @@ static void usb_reinit_338x(struct net2280 *dev)
} }
/* Hardware Defect and Workaround */ /* Hardware Defect and Workaround */
val = readl(&dev->ll_lfps_regs->ll_lfps_5); val = readl(&dev->llregs->ll_lfps_5);
val &= ~(0xf << TIMER_LFPS_6US); val &= ~(0xf << TIMER_LFPS_6US);
val |= 0x5 << TIMER_LFPS_6US; val |= 0x5 << TIMER_LFPS_6US;
writel(val, &dev->ll_lfps_regs->ll_lfps_5); writel(val, &dev->llregs->ll_lfps_5);
val = readl(&dev->ll_lfps_regs->ll_lfps_6); val = readl(&dev->llregs->ll_lfps_6);
val &= ~(0xffff << TIMER_LFPS_80US); val &= ~(0xffff << TIMER_LFPS_80US);
val |= 0x0100 << TIMER_LFPS_80US; val |= 0x0100 << TIMER_LFPS_80US;
writel(val, &dev->ll_lfps_regs->ll_lfps_6); writel(val, &dev->llregs->ll_lfps_6);
/* /*
* AA_AB Errata. Issue 4. Workaround for SuperSpeed USB * AA_AB Errata. Issue 4. Workaround for SuperSpeed USB
* Hot Reset Exit Handshake may Fail in Specific Case using * Hot Reset Exit Handshake may Fail in Specific Case using
* Default Register Settings. Workaround for Enumeration test. * Default Register Settings. Workaround for Enumeration test.
*/ */
val = readl(&dev->ll_tsn_regs->ll_tsn_counters_2); val = readl(&dev->llregs->ll_tsn_counters_2);
val &= ~(0x1f << HOT_TX_NORESET_TS2); val &= ~(0x1f << HOT_TX_NORESET_TS2);
val |= 0x10 << HOT_TX_NORESET_TS2; val |= 0x10 << HOT_TX_NORESET_TS2;
writel(val, &dev->ll_tsn_regs->ll_tsn_counters_2); writel(val, &dev->llregs->ll_tsn_counters_2);
val = readl(&dev->ll_tsn_regs->ll_tsn_counters_3); val = readl(&dev->llregs->ll_tsn_counters_3);
val &= ~(0x1f << HOT_RX_RESET_TS2); val &= ~(0x1f << HOT_RX_RESET_TS2);
val |= 0x3 << HOT_RX_RESET_TS2; val |= 0x3 << HOT_RX_RESET_TS2;
writel(val, &dev->ll_tsn_regs->ll_tsn_counters_3); writel(val, &dev->llregs->ll_tsn_counters_3);
/* /*
* Set Recovery Idle to Recover bit: * Set Recovery Idle to Recover bit:
...@@ -2277,9 +2277,9 @@ static void usb_reinit_338x(struct net2280 *dev) ...@@ -2277,9 +2277,9 @@ static void usb_reinit_338x(struct net2280 *dev)
* - R-M-W to leave other bits undisturbed. * - R-M-W to leave other bits undisturbed.
* - Reference PLX TT-7372 * - Reference PLX TT-7372
*/ */
val = readl(&dev->ll_chicken_reg->ll_tsn_chicken_bit); val = readl(&dev->llregs->ll_tsn_chicken_bit);
val |= BIT(RECOVERY_IDLE_TO_RECOVER_FMW); val |= BIT(RECOVERY_IDLE_TO_RECOVER_FMW);
writel(val, &dev->ll_chicken_reg->ll_tsn_chicken_bit); writel(val, &dev->llregs->ll_tsn_chicken_bit);
INIT_LIST_HEAD(&dev->gadget.ep0->ep_list); INIT_LIST_HEAD(&dev->gadget.ep0->ep_list);
...@@ -3669,12 +3669,6 @@ static int net2280_probe(struct pci_dev *pdev, const struct pci_device_id *id) ...@@ -3669,12 +3669,6 @@ static int net2280_probe(struct pci_dev *pdev, const struct pci_device_id *id)
(base + 0x00b4); (base + 0x00b4);
dev->llregs = (struct usb338x_ll_regs __iomem *) dev->llregs = (struct usb338x_ll_regs __iomem *)
(base + 0x0700); (base + 0x0700);
dev->ll_lfps_regs = (struct usb338x_ll_lfps_regs __iomem *)
(base + 0x0748);
dev->ll_tsn_regs = (struct usb338x_ll_tsn_regs __iomem *)
(base + 0x077c);
dev->ll_chicken_reg = (struct usb338x_ll_chi_regs __iomem *)
(base + 0x079c);
dev->plregs = (struct usb338x_pl_regs __iomem *) dev->plregs = (struct usb338x_pl_regs __iomem *)
(base + 0x0800); (base + 0x0800);
usbstat = readl(&dev->usb->usbstat); usbstat = readl(&dev->usb->usbstat);
......
...@@ -178,9 +178,6 @@ struct net2280 { ...@@ -178,9 +178,6 @@ struct net2280 {
struct net2280_dep_regs __iomem *dep; struct net2280_dep_regs __iomem *dep;
struct net2280_ep_regs __iomem *epregs; struct net2280_ep_regs __iomem *epregs;
struct usb338x_ll_regs __iomem *llregs; struct usb338x_ll_regs __iomem *llregs;
struct usb338x_ll_lfps_regs __iomem *ll_lfps_regs;
struct usb338x_ll_tsn_regs __iomem *ll_tsn_regs;
struct usb338x_ll_chi_regs __iomem *ll_chicken_reg;
struct usb338x_pl_regs __iomem *plregs; struct usb338x_pl_regs __iomem *plregs;
struct dma_pool *requests; struct dma_pool *requests;
......
...@@ -113,7 +113,10 @@ struct usb338x_ll_regs { ...@@ -113,7 +113,10 @@ struct usb338x_ll_regs {
u32 ll_ltssm_ctrl1; u32 ll_ltssm_ctrl1;
u32 ll_ltssm_ctrl2; u32 ll_ltssm_ctrl2;
u32 ll_ltssm_ctrl3; u32 ll_ltssm_ctrl3;
u32 unused[2]; u32 unused1;
/* 0x710 */
u32 unused2;
u32 ll_general_ctrl0; u32 ll_general_ctrl0;
u32 ll_general_ctrl1; u32 ll_general_ctrl1;
#define PM_U3_AUTO_EXIT 29 #define PM_U3_AUTO_EXIT 29
...@@ -136,29 +139,41 @@ struct usb338x_ll_regs { ...@@ -136,29 +139,41 @@ struct usb338x_ll_regs {
u32 ll_general_ctrl2; u32 ll_general_ctrl2;
#define SELECT_INVERT_LANE_POLARITY 7 #define SELECT_INVERT_LANE_POLARITY 7
#define FORCE_INVERT_LANE_POLARITY 6 #define FORCE_INVERT_LANE_POLARITY 6
/* 0x720 */
u32 ll_general_ctrl3; u32 ll_general_ctrl3;
u32 ll_general_ctrl4; u32 ll_general_ctrl4;
u32 ll_error_gen; u32 ll_error_gen;
} __packed; u32 unused3;
/* 0x730 */
u32 unused4[4];
struct usb338x_ll_lfps_regs { /* 0x740 */
/* offset 0x748 */ u32 unused5[2];
u32 ll_lfps_5; u32 ll_lfps_5;
#define TIMER_LFPS_6US 16 #define TIMER_LFPS_6US 16
u32 ll_lfps_6; u32 ll_lfps_6;
#define TIMER_LFPS_80US 0 #define TIMER_LFPS_80US 0
} __packed;
struct usb338x_ll_tsn_regs { /* 0x750 */
/* offset 0x77C */ u32 unused6[8];
/* 0x770 */
u32 unused7[3];
u32 ll_tsn_counters_2; u32 ll_tsn_counters_2;
#define HOT_TX_NORESET_TS2 24 #define HOT_TX_NORESET_TS2 24
/* 0x780 */
u32 ll_tsn_counters_3; u32 ll_tsn_counters_3;
#define HOT_RX_RESET_TS2 0 #define HOT_RX_RESET_TS2 0
} __packed; u32 unused8[3];
struct usb338x_ll_chi_regs { /* 0x790 */
/* offset 0x79C */ u32 unused9;
u32 ll_lfps_timers_2;
#define LFPS_TIMERS_2_WORKAROUND_VALUE 0x084d
u32 unused10;
u32 ll_tsn_chicken_bit; u32 ll_tsn_chicken_bit;
#define RECOVERY_IDLE_TO_RECOVER_FMW 3 #define RECOVERY_IDLE_TO_RECOVER_FMW 3
} __packed; } __packed;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment