ar71xx: fix DDR write buffer flushing issues with 4.4
Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
e30608b736
commit
5b34dffcbd
13 changed files with 1388 additions and 99 deletions
1315
target/linux/ar71xx/files-4.1/arch/mips/ath79/dev-eth.c
Normal file
1315
target/linux/ar71xx/files-4.1/arch/mips/ath79/dev-eth.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -407,48 +407,14 @@ static void ath79_set_speed_dummy(int speed)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ath79_ddr_no_flush(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ath79_ddr_flush_ge0(void)
|
static void ath79_ddr_flush_ge0(void)
|
||||||
{
|
{
|
||||||
ath79_ddr_wb_flush(AR71XX_DDR_REG_FLUSH_GE0);
|
ath79_ddr_wb_flush(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ath79_ddr_flush_ge1(void)
|
static void ath79_ddr_flush_ge1(void)
|
||||||
{
|
{
|
||||||
ath79_ddr_wb_flush(AR71XX_DDR_REG_FLUSH_GE1);
|
ath79_ddr_wb_flush(1);
|
||||||
}
|
|
||||||
|
|
||||||
static void ar724x_ddr_flush_ge0(void)
|
|
||||||
{
|
|
||||||
ath79_ddr_wb_flush(AR724X_DDR_REG_FLUSH_GE0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ar724x_ddr_flush_ge1(void)
|
|
||||||
{
|
|
||||||
ath79_ddr_wb_flush(AR724X_DDR_REG_FLUSH_GE1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ar91xx_ddr_flush_ge0(void)
|
|
||||||
{
|
|
||||||
ath79_ddr_wb_flush(AR913X_DDR_REG_FLUSH_GE0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ar91xx_ddr_flush_ge1(void)
|
|
||||||
{
|
|
||||||
ath79_ddr_wb_flush(AR913X_DDR_REG_FLUSH_GE1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ar933x_ddr_flush_ge0(void)
|
|
||||||
{
|
|
||||||
ath79_ddr_wb_flush(AR933X_DDR_REG_FLUSH_GE0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ar933x_ddr_flush_ge1(void)
|
|
||||||
{
|
|
||||||
ath79_ddr_wb_flush(AR933X_DDR_REG_FLUSH_GE1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct resource ath79_eth0_resources[] = {
|
static struct resource ath79_eth0_resources[] = {
|
||||||
|
@ -879,26 +845,25 @@ void __init ath79_register_eth(unsigned int id)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (id == 0)
|
||||||
|
pdata->ddr_flush = ath79_ddr_flush_ge0;
|
||||||
|
else
|
||||||
|
pdata->ddr_flush = ath79_ddr_flush_ge1;
|
||||||
|
|
||||||
switch (ath79_soc) {
|
switch (ath79_soc) {
|
||||||
case ATH79_SOC_AR7130:
|
case ATH79_SOC_AR7130:
|
||||||
if (id == 0) {
|
if (id == 0)
|
||||||
pdata->ddr_flush = ath79_ddr_flush_ge0;
|
|
||||||
pdata->set_speed = ath79_set_speed_ge0;
|
pdata->set_speed = ath79_set_speed_ge0;
|
||||||
} else {
|
else
|
||||||
pdata->ddr_flush = ath79_ddr_flush_ge1;
|
|
||||||
pdata->set_speed = ath79_set_speed_ge1;
|
pdata->set_speed = ath79_set_speed_ge1;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ATH79_SOC_AR7141:
|
case ATH79_SOC_AR7141:
|
||||||
case ATH79_SOC_AR7161:
|
case ATH79_SOC_AR7161:
|
||||||
if (id == 0) {
|
if (id == 0)
|
||||||
pdata->ddr_flush = ath79_ddr_flush_ge0;
|
|
||||||
pdata->set_speed = ath79_set_speed_ge0;
|
pdata->set_speed = ath79_set_speed_ge0;
|
||||||
} else {
|
else
|
||||||
pdata->ddr_flush = ath79_ddr_flush_ge1;
|
|
||||||
pdata->set_speed = ath79_set_speed_ge1;
|
pdata->set_speed = ath79_set_speed_ge1;
|
||||||
}
|
|
||||||
pdata->has_gbit = 1;
|
pdata->has_gbit = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -906,12 +871,10 @@ void __init ath79_register_eth(unsigned int id)
|
||||||
if (id == 0) {
|
if (id == 0) {
|
||||||
pdata->reset_bit |= AR724X_RESET_GE0_MDIO |
|
pdata->reset_bit |= AR724X_RESET_GE0_MDIO |
|
||||||
AR71XX_RESET_GE0_PHY;
|
AR71XX_RESET_GE0_PHY;
|
||||||
pdata->ddr_flush = ar724x_ddr_flush_ge0;
|
|
||||||
pdata->set_speed = ar7242_set_speed_ge0;
|
pdata->set_speed = ar7242_set_speed_ge0;
|
||||||
} else {
|
} else {
|
||||||
pdata->reset_bit |= AR724X_RESET_GE1_MDIO |
|
pdata->reset_bit |= AR724X_RESET_GE1_MDIO |
|
||||||
AR71XX_RESET_GE1_PHY;
|
AR71XX_RESET_GE1_PHY;
|
||||||
pdata->ddr_flush = ar724x_ddr_flush_ge1;
|
|
||||||
pdata->set_speed = ath79_set_speed_dummy;
|
pdata->set_speed = ath79_set_speed_dummy;
|
||||||
}
|
}
|
||||||
pdata->has_gbit = 1;
|
pdata->has_gbit = 1;
|
||||||
|
@ -934,13 +897,11 @@ void __init ath79_register_eth(unsigned int id)
|
||||||
case ATH79_SOC_AR7240:
|
case ATH79_SOC_AR7240:
|
||||||
if (id == 0) {
|
if (id == 0) {
|
||||||
pdata->reset_bit |= AR71XX_RESET_GE0_PHY;
|
pdata->reset_bit |= AR71XX_RESET_GE0_PHY;
|
||||||
pdata->ddr_flush = ar724x_ddr_flush_ge0;
|
|
||||||
pdata->set_speed = ath79_set_speed_dummy;
|
pdata->set_speed = ath79_set_speed_dummy;
|
||||||
|
|
||||||
pdata->phy_mask = BIT(4);
|
pdata->phy_mask = BIT(4);
|
||||||
} else {
|
} else {
|
||||||
pdata->reset_bit |= AR71XX_RESET_GE1_PHY;
|
pdata->reset_bit |= AR71XX_RESET_GE1_PHY;
|
||||||
pdata->ddr_flush = ar724x_ddr_flush_ge1;
|
|
||||||
pdata->set_speed = ath79_set_speed_dummy;
|
pdata->set_speed = ath79_set_speed_dummy;
|
||||||
|
|
||||||
pdata->speed = SPEED_1000;
|
pdata->speed = SPEED_1000;
|
||||||
|
@ -962,27 +923,15 @@ void __init ath79_register_eth(unsigned int id)
|
||||||
pdata->fifo_cfg3 = 0x01f00140;
|
pdata->fifo_cfg3 = 0x01f00140;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ATH79_SOC_AR9130:
|
|
||||||
if (id == 0) {
|
|
||||||
pdata->ddr_flush = ar91xx_ddr_flush_ge0;
|
|
||||||
pdata->set_speed = ar91xx_set_speed_ge0;
|
|
||||||
} else {
|
|
||||||
pdata->ddr_flush = ar91xx_ddr_flush_ge1;
|
|
||||||
pdata->set_speed = ar91xx_set_speed_ge1;
|
|
||||||
}
|
|
||||||
pdata->is_ar91xx = 1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ATH79_SOC_AR9132:
|
case ATH79_SOC_AR9132:
|
||||||
if (id == 0) {
|
|
||||||
pdata->ddr_flush = ar91xx_ddr_flush_ge0;
|
|
||||||
pdata->set_speed = ar91xx_set_speed_ge0;
|
|
||||||
} else {
|
|
||||||
pdata->ddr_flush = ar91xx_ddr_flush_ge1;
|
|
||||||
pdata->set_speed = ar91xx_set_speed_ge1;
|
|
||||||
}
|
|
||||||
pdata->is_ar91xx = 1;
|
|
||||||
pdata->has_gbit = 1;
|
pdata->has_gbit = 1;
|
||||||
|
/* fall through */
|
||||||
|
case ATH79_SOC_AR9130:
|
||||||
|
if (id == 0)
|
||||||
|
pdata->set_speed = ar91xx_set_speed_ge0;
|
||||||
|
else
|
||||||
|
pdata->set_speed = ar91xx_set_speed_ge1;
|
||||||
|
pdata->is_ar91xx = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ATH79_SOC_AR9330:
|
case ATH79_SOC_AR9330:
|
||||||
|
@ -990,14 +939,12 @@ void __init ath79_register_eth(unsigned int id)
|
||||||
if (id == 0) {
|
if (id == 0) {
|
||||||
pdata->reset_bit = AR933X_RESET_GE0_MAC |
|
pdata->reset_bit = AR933X_RESET_GE0_MAC |
|
||||||
AR933X_RESET_GE0_MDIO;
|
AR933X_RESET_GE0_MDIO;
|
||||||
pdata->ddr_flush = ar933x_ddr_flush_ge0;
|
|
||||||
pdata->set_speed = ath79_set_speed_dummy;
|
pdata->set_speed = ath79_set_speed_dummy;
|
||||||
|
|
||||||
pdata->phy_mask = BIT(4);
|
pdata->phy_mask = BIT(4);
|
||||||
} else {
|
} else {
|
||||||
pdata->reset_bit = AR933X_RESET_GE1_MAC |
|
pdata->reset_bit = AR933X_RESET_GE1_MAC |
|
||||||
AR933X_RESET_GE1_MDIO;
|
AR933X_RESET_GE1_MDIO;
|
||||||
pdata->ddr_flush = ar933x_ddr_flush_ge1;
|
|
||||||
pdata->set_speed = ath79_set_speed_dummy;
|
pdata->set_speed = ath79_set_speed_dummy;
|
||||||
|
|
||||||
pdata->speed = SPEED_1000;
|
pdata->speed = SPEED_1000;
|
||||||
|
@ -1038,7 +985,6 @@ void __init ath79_register_eth(unsigned int id)
|
||||||
ath79_device_reset_clear(AR934X_RESET_ETH_SWITCH);
|
ath79_device_reset_clear(AR934X_RESET_ETH_SWITCH);
|
||||||
}
|
}
|
||||||
|
|
||||||
pdata->ddr_flush = ath79_ddr_no_flush;
|
|
||||||
pdata->has_gbit = 1;
|
pdata->has_gbit = 1;
|
||||||
pdata->is_ar724x = 1;
|
pdata->is_ar724x = 1;
|
||||||
|
|
||||||
|
@ -1073,7 +1019,6 @@ void __init ath79_register_eth(unsigned int id)
|
||||||
ath79_switch_data.phy_poll_mask |= BIT(4);
|
ath79_switch_data.phy_poll_mask |= BIT(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
pdata->ddr_flush = ath79_ddr_no_flush;
|
|
||||||
pdata->has_gbit = 1;
|
pdata->has_gbit = 1;
|
||||||
pdata->is_ar724x = 1;
|
pdata->is_ar724x = 1;
|
||||||
|
|
||||||
|
@ -1097,7 +1042,6 @@ void __init ath79_register_eth(unsigned int id)
|
||||||
pdata->set_speed = qca955x_set_speed_sgmii;
|
pdata->set_speed = qca955x_set_speed_sgmii;
|
||||||
}
|
}
|
||||||
|
|
||||||
pdata->ddr_flush = ath79_ddr_no_flush;
|
|
||||||
pdata->has_gbit = 1;
|
pdata->has_gbit = 1;
|
||||||
pdata->is_ar724x = 1;
|
pdata->is_ar724x = 1;
|
||||||
|
|
||||||
|
@ -1145,7 +1089,6 @@ void __init ath79_register_eth(unsigned int id)
|
||||||
ath79_device_reset_clear(AR934X_RESET_ETH_SWITCH);
|
ath79_device_reset_clear(AR934X_RESET_ETH_SWITCH);
|
||||||
}
|
}
|
||||||
|
|
||||||
pdata->ddr_flush = ath79_ddr_no_flush;
|
|
||||||
pdata->has_gbit = 1;
|
pdata->has_gbit = 1;
|
||||||
pdata->is_ar724x = 1;
|
pdata->is_ar724x = 1;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
From: Felix Fietkau <nbd@nbd.name>
|
||||||
|
Date: Sat, 14 May 2016 20:20:04 +0200
|
||||||
|
Subject: [PATCH] MIPS: ath79: make ath79_ddr_ctrl_init() compatible for newer
|
||||||
|
SoCs
|
||||||
|
|
||||||
|
AR913x, AR724x and AR933x are the only SoCs where the
|
||||||
|
ath79_ddr_wb_flush_base starts at 0x7c, all newer SoCs use 0x9c
|
||||||
|
Invert the logic to make the code compatible with AR95xx
|
||||||
|
|
||||||
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
---
|
||||||
|
|
||||||
|
--- a/arch/mips/ath79/common.c
|
||||||
|
+++ b/arch/mips/ath79/common.c
|
||||||
|
@@ -46,12 +46,12 @@ void ath79_ddr_ctrl_init(void)
|
||||||
|
{
|
||||||
|
ath79_ddr_base = ioremap_nocache(AR71XX_DDR_CTRL_BASE,
|
||||||
|
AR71XX_DDR_CTRL_SIZE);
|
||||||
|
- if (soc_is_ar71xx() || soc_is_ar934x()) {
|
||||||
|
- ath79_ddr_wb_flush_base = ath79_ddr_base + 0x9c;
|
||||||
|
- ath79_ddr_pci_win_base = ath79_ddr_base + 0x7c;
|
||||||
|
- } else {
|
||||||
|
+ if (soc_is_ar913x() || soc_is_ar724x() || soc_is_ar933x()) {
|
||||||
|
ath79_ddr_wb_flush_base = ath79_ddr_base + 0x7c;
|
||||||
|
ath79_ddr_pci_win_base = 0;
|
||||||
|
+ } else {
|
||||||
|
+ ath79_ddr_wb_flush_base = ath79_ddr_base + 0x9c;
|
||||||
|
+ ath79_ddr_pci_win_base = ath79_ddr_base + 0x7c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(ath79_ddr_ctrl_init);
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/mtd/devices/m25p80.c
|
--- a/drivers/mtd/devices/m25p80.c
|
||||||
+++ b/drivers/mtd/devices/m25p80.c
|
+++ b/drivers/mtd/devices/m25p80.c
|
||||||
@@ -229,7 +229,9 @@ static int m25p_probe(struct spi_device
|
@@ -251,7 +251,9 @@ static int m25p_probe(struct spi_device
|
||||||
|
|
||||||
ppdata.of_node = spi->dev.of_node;
|
ppdata.of_node = spi->dev.of_node;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/mtd/devices/m25p80.c
|
--- a/drivers/mtd/devices/m25p80.c
|
||||||
+++ b/drivers/mtd/devices/m25p80.c
|
+++ b/drivers/mtd/devices/m25p80.c
|
||||||
@@ -227,6 +227,7 @@ static int m25p_probe(struct spi_device
|
@@ -249,6 +249,7 @@ static int m25p_probe(struct spi_device
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/include/linux/spi/spi.h
|
--- a/include/linux/spi/spi.h
|
||||||
+++ b/include/linux/spi/spi.h
|
+++ b/include/linux/spi/spi.h
|
||||||
@@ -690,6 +690,8 @@ struct spi_transfer {
|
@@ -695,6 +695,8 @@ struct spi_transfer {
|
||||||
unsigned cs_change:1;
|
unsigned cs_change:1;
|
||||||
unsigned tx_nbits:3;
|
unsigned tx_nbits:3;
|
||||||
unsigned rx_nbits:3;
|
unsigned rx_nbits:3;
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
#define SPI_NBITS_SINGLE 0x01 /* 1bit transfer */
|
#define SPI_NBITS_SINGLE 0x01 /* 1bit transfer */
|
||||||
#define SPI_NBITS_DUAL 0x02 /* 2bits transfer */
|
#define SPI_NBITS_DUAL 0x02 /* 2bits transfer */
|
||||||
#define SPI_NBITS_QUAD 0x04 /* 4bits transfer */
|
#define SPI_NBITS_QUAD 0x04 /* 4bits transfer */
|
||||||
@@ -735,6 +737,7 @@ struct spi_message {
|
@@ -740,6 +742,7 @@ struct spi_message {
|
||||||
struct spi_device *spi;
|
struct spi_device *spi;
|
||||||
|
|
||||||
unsigned is_dma_mapped:1;
|
unsigned is_dma_mapped:1;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/include/linux/spi/spi.h
|
--- a/include/linux/spi/spi.h
|
||||||
+++ b/include/linux/spi/spi.h
|
+++ b/include/linux/spi/spi.h
|
||||||
@@ -578,6 +578,12 @@ extern struct spi_master *spi_busnum_to_
|
@@ -583,6 +583,12 @@ extern struct spi_master *spi_busnum_to_
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
/*
|
/*
|
||||||
* I/O INTERFACE between SPI controller and protocol drivers
|
* I/O INTERFACE between SPI controller and protocol drivers
|
||||||
*
|
*
|
||||||
@@ -698,6 +704,7 @@ struct spi_transfer {
|
@@ -703,6 +709,7 @@ struct spi_transfer {
|
||||||
u8 bits_per_word;
|
u8 bits_per_word;
|
||||||
u16 delay_usecs;
|
u16 delay_usecs;
|
||||||
u32 speed_hz;
|
u32 speed_hz;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/mtd/devices/m25p80.c
|
--- a/drivers/mtd/devices/m25p80.c
|
||||||
+++ b/drivers/mtd/devices/m25p80.c
|
+++ b/drivers/mtd/devices/m25p80.c
|
||||||
@@ -137,10 +137,12 @@ static int m25p80_read(struct spi_nor *n
|
@@ -159,10 +159,12 @@ static int m25p80_read(struct spi_nor *n
|
||||||
flash->command[0] = nor->read_opcode;
|
flash->command[0] = nor->read_opcode;
|
||||||
m25p_addr2cmd(nor, from, flash->command);
|
m25p_addr2cmd(nor, from, flash->command);
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/drivers/mtd/devices/m25p80.c
|
--- a/drivers/mtd/devices/m25p80.c
|
||||||
+++ b/drivers/mtd/devices/m25p80.c
|
+++ b/drivers/mtd/devices/m25p80.c
|
||||||
@@ -137,6 +137,9 @@ static int m25p80_read(struct spi_nor *n
|
@@ -159,6 +159,9 @@ static int m25p80_read(struct spi_nor *n
|
||||||
flash->command[0] = nor->read_opcode;
|
flash->command[0] = nor->read_opcode;
|
||||||
m25p_addr2cmd(nor, from, flash->command);
|
m25p_addr2cmd(nor, from, flash->command);
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
while (len--) {
|
while (len--) {
|
||||||
--- a/include/linux/spi/spi.h
|
--- a/include/linux/spi/spi.h
|
||||||
+++ b/include/linux/spi/spi.h
|
+++ b/include/linux/spi/spi.h
|
||||||
@@ -705,6 +705,7 @@ struct spi_transfer {
|
@@ -710,6 +710,7 @@ struct spi_transfer {
|
||||||
u16 delay_usecs;
|
u16 delay_usecs;
|
||||||
u32 speed_hz;
|
u32 speed_hz;
|
||||||
enum spi_transfer_type type;
|
enum spi_transfer_type type;
|
||||||
|
|
|
@ -29,7 +29,9 @@
|
||||||
- u32 bootstrap;
|
- u32 bootstrap;
|
||||||
+ void __iomem *phy_reg;
|
+ void __iomem *phy_reg;
|
||||||
+ u32 t;
|
+ u32 t;
|
||||||
+
|
|
||||||
|
- bootstrap = ath79_reset_rr(AR934X_RESET_REG_BOOTSTRAP);
|
||||||
|
- if (bootstrap & AR934X_BOOTSTRAP_USB_MODE_DEVICE)
|
||||||
+ phy_reg = ioremap(base, 4);
|
+ phy_reg = ioremap(base, 4);
|
||||||
+ if (!phy_reg)
|
+ if (!phy_reg)
|
||||||
+ return;
|
+ return;
|
||||||
|
@ -41,9 +43,7 @@
|
||||||
+
|
+
|
||||||
+ iounmap(phy_reg);
|
+ iounmap(phy_reg);
|
||||||
+}
|
+}
|
||||||
|
+
|
||||||
- bootstrap = ath79_reset_rr(AR934X_RESET_REG_BOOTSTRAP);
|
|
||||||
- if (bootstrap & AR934X_BOOTSTRAP_USB_MODE_DEVICE)
|
|
||||||
+static void ar934x_usb_reset_notifier(struct platform_device *pdev)
|
+static void ar934x_usb_reset_notifier(struct platform_device *pdev)
|
||||||
+{
|
+{
|
||||||
+ if (pdev->id != -1)
|
+ if (pdev->id != -1)
|
||||||
|
|
|
@ -155,7 +155,7 @@
|
||||||
+#define AR934X_RESET_LUT BIT(2)
|
+#define AR934X_RESET_LUT BIT(2)
|
||||||
+#define AR934X_RESET_MBOX BIT(1)
|
+#define AR934X_RESET_MBOX BIT(1)
|
||||||
+#define AR934X_RESET_I2S BIT(0)
|
+#define AR934X_RESET_I2S BIT(0)
|
||||||
+
|
|
||||||
+#define QCA955X_RESET_HOST BIT(31)
|
+#define QCA955X_RESET_HOST BIT(31)
|
||||||
+#define QCA955X_RESET_SLIC BIT(30)
|
+#define QCA955X_RESET_SLIC BIT(30)
|
||||||
+#define QCA955X_RESET_HDMA BIT(29)
|
+#define QCA955X_RESET_HDMA BIT(29)
|
||||||
|
@ -188,7 +188,7 @@
|
||||||
+#define QCA955X_RESET_LUT BIT(2)
|
+#define QCA955X_RESET_LUT BIT(2)
|
||||||
+#define QCA955X_RESET_MBOX BIT(1)
|
+#define QCA955X_RESET_MBOX BIT(1)
|
||||||
+#define QCA955X_RESET_I2S BIT(0)
|
+#define QCA955X_RESET_I2S BIT(0)
|
||||||
|
+
|
||||||
+#define AR933X_BOOTSTRAP_MDIO_GPIO_EN BIT(18)
|
+#define AR933X_BOOTSTRAP_MDIO_GPIO_EN BIT(18)
|
||||||
+#define AR933X_BOOTSTRAP_EEPBUSY BIT(4)
|
+#define AR933X_BOOTSTRAP_EEPBUSY BIT(4)
|
||||||
#define AR933X_BOOTSTRAP_REF_CLK_40 BIT(0)
|
#define AR933X_BOOTSTRAP_REF_CLK_40 BIT(0)
|
||||||
|
|
|
@ -135,7 +135,8 @@
|
||||||
+static void __init ap136_common_setup(void)
|
+static void __init ap136_common_setup(void)
|
||||||
+{
|
+{
|
||||||
+ u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
|
+ u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
|
||||||
+
|
|
||||||
|
-static int ap136_pci_plat_dev_init(struct pci_dev *dev)
|
||||||
+ ath79_register_m25p80(NULL);
|
+ ath79_register_m25p80(NULL);
|
||||||
+
|
+
|
||||||
+ ath79_register_leds_gpio(-1, ARRAY_SIZE(ap136_leds_gpio),
|
+ ath79_register_leds_gpio(-1, ARRAY_SIZE(ap136_leds_gpio),
|
||||||
|
@ -150,8 +151,7 @@
|
||||||
+ ath79_register_wmac(art + AP136_WMAC_CALDATA_OFFSET, NULL);
|
+ ath79_register_wmac(art + AP136_WMAC_CALDATA_OFFSET, NULL);
|
||||||
+
|
+
|
||||||
+ ath79_setup_qca955x_eth_cfg(QCA955X_ETH_CFG_RGMII_EN);
|
+ ath79_setup_qca955x_eth_cfg(QCA955X_ETH_CFG_RGMII_EN);
|
||||||
|
+
|
||||||
-static int ap136_pci_plat_dev_init(struct pci_dev *dev)
|
|
||||||
+ ath79_register_mdio(0, 0x0);
|
+ ath79_register_mdio(0, 0x0);
|
||||||
+ ath79_init_mac(ath79_eth0_data.mac_addr, art + AP136_MAC0_OFFSET, 0);
|
+ ath79_init_mac(ath79_eth0_data.mac_addr, art + AP136_MAC0_OFFSET, 0);
|
||||||
+
|
+
|
||||||
|
@ -211,16 +211,16 @@
|
||||||
+ /* GMAC0 of the AR8327 switch is connected to GMAC1 via SGMII */
|
+ /* GMAC0 of the AR8327 switch is connected to GMAC1 via SGMII */
|
||||||
+ ap136_ar8327_pad0_cfg.mode = AR8327_PAD_MAC_SGMII;
|
+ ap136_ar8327_pad0_cfg.mode = AR8327_PAD_MAC_SGMII;
|
||||||
+ ap136_ar8327_pad0_cfg.sgmii_delay_en = true;
|
+ ap136_ar8327_pad0_cfg.sgmii_delay_en = true;
|
||||||
+
|
|
||||||
|
- ath79_pci_set_plat_dev_init(ap136_pci_plat_dev_init);
|
||||||
|
- ath79_register_pci();
|
||||||
+ /* GMAC6 of the AR8327 switch is connected to GMAC0 via RGMII */
|
+ /* GMAC6 of the AR8327 switch is connected to GMAC0 via RGMII */
|
||||||
+ ap136_ar8327_pad6_cfg.mode = AR8327_PAD_MAC_RGMII;
|
+ ap136_ar8327_pad6_cfg.mode = AR8327_PAD_MAC_RGMII;
|
||||||
+ ap136_ar8327_pad6_cfg.txclk_delay_en = true;
|
+ ap136_ar8327_pad6_cfg.txclk_delay_en = true;
|
||||||
+ ap136_ar8327_pad6_cfg.rxclk_delay_en = true;
|
+ ap136_ar8327_pad6_cfg.rxclk_delay_en = true;
|
||||||
+ ap136_ar8327_pad6_cfg.txclk_delay_sel = AR8327_CLK_DELAY_SEL1;
|
+ ap136_ar8327_pad6_cfg.txclk_delay_sel = AR8327_CLK_DELAY_SEL1;
|
||||||
+ ap136_ar8327_pad6_cfg.rxclk_delay_sel = AR8327_CLK_DELAY_SEL2;
|
+ ap136_ar8327_pad6_cfg.rxclk_delay_sel = AR8327_CLK_DELAY_SEL2;
|
||||||
|
+
|
||||||
- ath79_pci_set_plat_dev_init(ap136_pci_plat_dev_init);
|
|
||||||
- ath79_register_pci();
|
|
||||||
+ ath79_eth0_pll_data.pll_1000 = 0x56000000;
|
+ ath79_eth0_pll_data.pll_1000 = 0x56000000;
|
||||||
+ ath79_eth1_pll_data.pll_1000 = 0x03000101;
|
+ ath79_eth1_pll_data.pll_1000 = 0x03000101;
|
||||||
+
|
+
|
||||||
|
|
|
@ -335,10 +335,10 @@ meaning of the bits CPUCLK_FROM_CPUPLL and DDRCLK_FROM_DDRPLL is reversed.
|
||||||
+ status = ath79_reset_rr(QCA953X_RESET_REG_PCIE_WMAC_INT_STATUS);
|
+ status = ath79_reset_rr(QCA953X_RESET_REG_PCIE_WMAC_INT_STATUS);
|
||||||
+
|
+
|
||||||
+ if (status & QCA953X_PCIE_WMAC_INT_PCIE_ALL) {
|
+ if (status & QCA953X_PCIE_WMAC_INT_PCIE_ALL) {
|
||||||
+ ath79_ddr_wb_flush(QCA953X_DDR_REG_FLUSH_PCIE);
|
+ ath79_ddr_wb_flush(3);
|
||||||
+ generic_handle_irq(ATH79_IP2_IRQ(0));
|
+ generic_handle_irq(ATH79_IP2_IRQ(0));
|
||||||
+ } else if (status & QCA953X_PCIE_WMAC_INT_WMAC_ALL) {
|
+ } else if (status & QCA953X_PCIE_WMAC_INT_WMAC_ALL) {
|
||||||
+ ath79_ddr_wb_flush(QCA953X_DDR_REG_FLUSH_WMAC);
|
+ ath79_ddr_wb_flush(4);
|
||||||
+ generic_handle_irq(ATH79_IP2_IRQ(1));
|
+ generic_handle_irq(ATH79_IP2_IRQ(1));
|
||||||
+ } else {
|
+ } else {
|
||||||
+ spurious_interrupt();
|
+ spurious_interrupt();
|
||||||
|
|
Loading…
Reference in a new issue