Skip to content
Snippets Groups Projects
Commit 1cd46ed2 authored by Soren Brinkmann's avatar Soren Brinkmann Committed by Michal Simek
Browse files

net: zynq_gem: Move RCLK details out of driver


The GEM driver should not need to know about Zynq specific details of
RCLK related registers and bitfields in the SLCR. Move those details to
the slcr driver.

Signed-off-by: default avatarSoren Brinkmann <soren.brinkmann@xilinx.com>
Signed-off-by: default avatarMichal Simek <michal.simek@xilinx.com>
parent 2826fd32
No related branches found
No related tags found
No related merge requests found
...@@ -50,7 +50,7 @@ void zynq_slcr_cpu_reset(void) ...@@ -50,7 +50,7 @@ void zynq_slcr_cpu_reset(void)
} }
/* Setup clk for network */ /* Setup clk for network */
void zynq_slcr_gem_clk_setup(u32 gem_id, u32 rclk, u32 clk) void zynq_slcr_gem_clk_setup(u32 gem_id, u32 clk)
{ {
zynq_slcr_unlock(); zynq_slcr_unlock();
...@@ -63,12 +63,12 @@ void zynq_slcr_gem_clk_setup(u32 gem_id, u32 rclk, u32 clk) ...@@ -63,12 +63,12 @@ void zynq_slcr_gem_clk_setup(u32 gem_id, u32 rclk, u32 clk)
/* Set divisors for appropriate frequency in GEM_CLK_CTRL */ /* Set divisors for appropriate frequency in GEM_CLK_CTRL */
writel(clk, &slcr_base->gem1_clk_ctrl); writel(clk, &slcr_base->gem1_clk_ctrl);
/* Configure GEM_RCLK_CTRL */ /* Configure GEM_RCLK_CTRL */
writel(rclk, &slcr_base->gem1_rclk_ctrl); writel(1, &slcr_base->gem1_rclk_ctrl);
} else { } else {
/* Set divisors for appropriate frequency in GEM_CLK_CTRL */ /* Set divisors for appropriate frequency in GEM_CLK_CTRL */
writel(clk, &slcr_base->gem0_clk_ctrl); writel(clk, &slcr_base->gem0_clk_ctrl);
/* Configure GEM_RCLK_CTRL */ /* Configure GEM_RCLK_CTRL */
writel(rclk, &slcr_base->gem0_rclk_ctrl); writel(1, &slcr_base->gem0_rclk_ctrl);
} }
udelay(100000); udelay(100000);
out: out:
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
extern void zynq_slcr_lock(void); extern void zynq_slcr_lock(void);
extern void zynq_slcr_unlock(void); extern void zynq_slcr_unlock(void);
extern void zynq_slcr_cpu_reset(void); extern void zynq_slcr_cpu_reset(void);
extern void zynq_slcr_gem_clk_setup(u32 gem_id, u32 rclk, u32 clk); extern void zynq_slcr_gem_clk_setup(u32 gem_id, u32 clk);
extern void zynq_slcr_devcfg_disable(void); extern void zynq_slcr_devcfg_disable(void);
extern void zynq_slcr_devcfg_enable(void); extern void zynq_slcr_devcfg_enable(void);
extern u32 zynq_slcr_get_boot_mode(void); extern u32 zynq_slcr_get_boot_mode(void);
......
...@@ -270,7 +270,7 @@ static int zynq_gem_setup_mac(struct eth_device *dev) ...@@ -270,7 +270,7 @@ static int zynq_gem_setup_mac(struct eth_device *dev)
static int zynq_gem_init(struct eth_device *dev, bd_t * bis) static int zynq_gem_init(struct eth_device *dev, bd_t * bis)
{ {
u32 i, rclk, clk = 0; u32 i, clk = 0;
struct phy_device *phydev; struct phy_device *phydev;
const u32 stat_size = (sizeof(struct zynq_gem_regs) - const u32 stat_size = (sizeof(struct zynq_gem_regs) -
offsetof(struct zynq_gem_regs, stat)) / 4; offsetof(struct zynq_gem_regs, stat)) / 4;
...@@ -348,17 +348,14 @@ static int zynq_gem_init(struct eth_device *dev, bd_t * bis) ...@@ -348,17 +348,14 @@ static int zynq_gem_init(struct eth_device *dev, bd_t * bis)
case SPEED_1000: case SPEED_1000:
writel(ZYNQ_GEM_NWCFG_INIT | ZYNQ_GEM_NWCFG_SPEED1000, writel(ZYNQ_GEM_NWCFG_INIT | ZYNQ_GEM_NWCFG_SPEED1000,
&regs->nwcfg); &regs->nwcfg);
rclk = (0 << 4) | (1 << 0);
clk = (1 << 20) | (8 << 8) | (0 << 4) | (1 << 0); clk = (1 << 20) | (8 << 8) | (0 << 4) | (1 << 0);
break; break;
case SPEED_100: case SPEED_100:
clrsetbits_le32(&regs->nwcfg, ZYNQ_GEM_NWCFG_SPEED1000, clrsetbits_le32(&regs->nwcfg, ZYNQ_GEM_NWCFG_SPEED1000,
ZYNQ_GEM_NWCFG_INIT | ZYNQ_GEM_NWCFG_SPEED100); ZYNQ_GEM_NWCFG_INIT | ZYNQ_GEM_NWCFG_SPEED100);
rclk = 1 << 0;
clk = (5 << 20) | (8 << 8) | (0 << 4) | (1 << 0); clk = (5 << 20) | (8 << 8) | (0 << 4) | (1 << 0);
break; break;
case SPEED_10: case SPEED_10:
rclk = 1 << 0;
/* FIXME untested */ /* FIXME untested */
clk = (5 << 20) | (8 << 8) | (0 << 4) | (1 << 0); clk = (5 << 20) | (8 << 8) | (0 << 4) | (1 << 0);
break; break;
...@@ -367,7 +364,7 @@ static int zynq_gem_init(struct eth_device *dev, bd_t * bis) ...@@ -367,7 +364,7 @@ static int zynq_gem_init(struct eth_device *dev, bd_t * bis)
/* Change the rclk and clk only not using EMIO interface */ /* Change the rclk and clk only not using EMIO interface */
if (!priv->emio) if (!priv->emio)
zynq_slcr_gem_clk_setup(dev->iobase != zynq_slcr_gem_clk_setup(dev->iobase !=
ZYNQ_GEM_BASEADDR0, rclk, clk); ZYNQ_GEM_BASEADDR0, clk);
setbits_le32(&regs->nwctrl, ZYNQ_GEM_NWCTRL_RXEN_MASK | setbits_le32(&regs->nwctrl, ZYNQ_GEM_NWCTRL_RXEN_MASK |
ZYNQ_GEM_NWCTRL_TXEN_MASK); ZYNQ_GEM_NWCTRL_TXEN_MASK);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment