Commit d22960c8 authored by Cyril Chemparathy's avatar Cyril Chemparathy Committed by Kevin Hilman

davinci: add mdio platform devices

This patch adds mdio platform devices on SoCs that have the necessary
hardware.  Clock lookup entries (aliases) have also been added, so that the
MDIO and EMAC drivers can independently enable/disable a shared underlying
clock.  Further, the EMAC MMR region has been split down into separate MDIO
and EMAC regions.
Signed-off-by: default avatarCyril Chemparathy <cyril@ti.com>
Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
Tested-by: default avatarMichael Williamson <michael.williamson@criticallink.com>
Tested-by: default avatarCaglar Akyuz <caglarakyuz@gmail.com>
Signed-off-by: default avatarKevin Hilman <khilman@deeprootsystems.com>
parent f20136eb
...@@ -352,7 +352,7 @@ int __init da8xx_register_watchdog(void) ...@@ -352,7 +352,7 @@ int __init da8xx_register_watchdog(void)
static struct resource da8xx_emac_resources[] = { static struct resource da8xx_emac_resources[] = {
{ {
.start = DA8XX_EMAC_CPPI_PORT_BASE, .start = DA8XX_EMAC_CPPI_PORT_BASE,
.end = DA8XX_EMAC_CPPI_PORT_BASE + 0x5000 - 1, .end = DA8XX_EMAC_CPPI_PORT_BASE + SZ_16K - 1,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, },
{ {
...@@ -396,9 +396,34 @@ static struct platform_device da8xx_emac_device = { ...@@ -396,9 +396,34 @@ static struct platform_device da8xx_emac_device = {
.resource = da8xx_emac_resources, .resource = da8xx_emac_resources,
}; };
static struct resource da8xx_mdio_resources[] = {
{
.start = DA8XX_EMAC_MDIO_BASE,
.end = DA8XX_EMAC_MDIO_BASE + SZ_4K - 1,
.flags = IORESOURCE_MEM,
},
};
static struct platform_device da8xx_mdio_device = {
.name = "davinci_mdio",
.id = 0,
.num_resources = ARRAY_SIZE(da8xx_mdio_resources),
.resource = da8xx_mdio_resources,
};
int __init da8xx_register_emac(void) int __init da8xx_register_emac(void)
{ {
return platform_device_register(&da8xx_emac_device); int ret;
ret = platform_device_register(&da8xx_mdio_device);
if (ret < 0)
return ret;
ret = platform_device_register(&da8xx_emac_device);
if (ret < 0)
return ret;
ret = clk_add_alias(NULL, dev_name(&da8xx_mdio_device.dev),
NULL, &da8xx_emac_device.dev);
return ret;
} }
static struct resource da830_mcasp1_resources[] = { static struct resource da830_mcasp1_resources[] = {
......
...@@ -699,7 +699,7 @@ static struct emac_platform_data dm365_emac_pdata = { ...@@ -699,7 +699,7 @@ static struct emac_platform_data dm365_emac_pdata = {
static struct resource dm365_emac_resources[] = { static struct resource dm365_emac_resources[] = {
{ {
.start = DM365_EMAC_BASE, .start = DM365_EMAC_BASE,
.end = DM365_EMAC_BASE + 0x47ff, .end = DM365_EMAC_BASE + SZ_16K - 1,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, },
{ {
...@@ -734,6 +734,21 @@ static struct platform_device dm365_emac_device = { ...@@ -734,6 +734,21 @@ static struct platform_device dm365_emac_device = {
.resource = dm365_emac_resources, .resource = dm365_emac_resources,
}; };
static struct resource dm365_mdio_resources[] = {
{
.start = DM365_EMAC_MDIO_BASE,
.end = DM365_EMAC_MDIO_BASE + SZ_4K - 1,
.flags = IORESOURCE_MEM,
},
};
static struct platform_device dm365_mdio_device = {
.name = "davinci_mdio",
.id = 0,
.num_resources = ARRAY_SIZE(dm365_mdio_resources),
.resource = dm365_mdio_resources,
};
static u8 dm365_default_priorities[DAVINCI_N_AINTC_IRQ] = { static u8 dm365_default_priorities[DAVINCI_N_AINTC_IRQ] = {
[IRQ_VDINT0] = 2, [IRQ_VDINT0] = 2,
[IRQ_VDINT1] = 6, [IRQ_VDINT1] = 6,
...@@ -1220,7 +1235,12 @@ static int __init dm365_init_devices(void) ...@@ -1220,7 +1235,12 @@ static int __init dm365_init_devices(void)
davinci_cfg_reg(DM365_INT_EDMA_CC); davinci_cfg_reg(DM365_INT_EDMA_CC);
platform_device_register(&dm365_edma_device); platform_device_register(&dm365_edma_device);
platform_device_register(&dm365_mdio_device);
platform_device_register(&dm365_emac_device); platform_device_register(&dm365_emac_device);
clk_add_alias(NULL, dev_name(&dm365_mdio_device.dev),
NULL, &dm365_emac_device.dev);
/* Add isif clock alias */ /* Add isif clock alias */
clk_add_alias("master", dm365_isif_dev.name, "vpss_master", NULL); clk_add_alias("master", dm365_isif_dev.name, "vpss_master", NULL);
platform_device_register(&dm365_vpss_device); platform_device_register(&dm365_vpss_device);
......
...@@ -330,7 +330,7 @@ static struct emac_platform_data dm644x_emac_pdata = { ...@@ -330,7 +330,7 @@ static struct emac_platform_data dm644x_emac_pdata = {
static struct resource dm644x_emac_resources[] = { static struct resource dm644x_emac_resources[] = {
{ {
.start = DM644X_EMAC_BASE, .start = DM644X_EMAC_BASE,
.end = DM644X_EMAC_BASE + 0x47ff, .end = DM644X_EMAC_BASE + SZ_16K - 1,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, },
{ {
...@@ -350,6 +350,21 @@ static struct platform_device dm644x_emac_device = { ...@@ -350,6 +350,21 @@ static struct platform_device dm644x_emac_device = {
.resource = dm644x_emac_resources, .resource = dm644x_emac_resources,
}; };
static struct resource dm644x_mdio_resources[] = {
{
.start = DM644X_EMAC_MDIO_BASE,
.end = DM644X_EMAC_MDIO_BASE + SZ_4K - 1,
.flags = IORESOURCE_MEM,
},
};
static struct platform_device dm644x_mdio_device = {
.name = "davinci_mdio",
.id = 0,
.num_resources = ARRAY_SIZE(dm644x_mdio_resources),
.resource = dm644x_mdio_resources,
};
/* /*
* Device specific mux setup * Device specific mux setup
* *
...@@ -777,7 +792,12 @@ static int __init dm644x_init_devices(void) ...@@ -777,7 +792,12 @@ static int __init dm644x_init_devices(void)
clk_add_alias("master", dm644x_ccdc_dev.name, "vpss_master", NULL); clk_add_alias("master", dm644x_ccdc_dev.name, "vpss_master", NULL);
clk_add_alias("slave", dm644x_ccdc_dev.name, "vpss_slave", NULL); clk_add_alias("slave", dm644x_ccdc_dev.name, "vpss_slave", NULL);
platform_device_register(&dm644x_edma_device); platform_device_register(&dm644x_edma_device);
platform_device_register(&dm644x_mdio_device);
platform_device_register(&dm644x_emac_device); platform_device_register(&dm644x_emac_device);
clk_add_alias(NULL, dev_name(&dm644x_mdio_device.dev),
NULL, &dm644x_emac_device.dev);
platform_device_register(&dm644x_vpss_device); platform_device_register(&dm644x_vpss_device);
platform_device_register(&dm644x_ccdc_dev); platform_device_register(&dm644x_ccdc_dev);
platform_device_register(&vpfe_capture_dev); platform_device_register(&vpfe_capture_dev);
......
...@@ -366,7 +366,7 @@ static struct emac_platform_data dm646x_emac_pdata = { ...@@ -366,7 +366,7 @@ static struct emac_platform_data dm646x_emac_pdata = {
static struct resource dm646x_emac_resources[] = { static struct resource dm646x_emac_resources[] = {
{ {
.start = DM646X_EMAC_BASE, .start = DM646X_EMAC_BASE,
.end = DM646X_EMAC_BASE + 0x47ff, .end = DM646X_EMAC_BASE + SZ_16K - 1,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, },
{ {
...@@ -401,6 +401,21 @@ static struct platform_device dm646x_emac_device = { ...@@ -401,6 +401,21 @@ static struct platform_device dm646x_emac_device = {
.resource = dm646x_emac_resources, .resource = dm646x_emac_resources,
}; };
static struct resource dm646x_mdio_resources[] = {
{
.start = DM646X_EMAC_MDIO_BASE,
.end = DM646X_EMAC_MDIO_BASE + SZ_4K - 1,
.flags = IORESOURCE_MEM,
},
};
static struct platform_device dm646x_mdio_device = {
.name = "davinci_mdio",
.id = 0,
.num_resources = ARRAY_SIZE(dm646x_mdio_resources),
.resource = dm646x_mdio_resources,
};
/* /*
* Device specific mux setup * Device specific mux setup
* *
...@@ -897,7 +912,11 @@ static int __init dm646x_init_devices(void) ...@@ -897,7 +912,11 @@ static int __init dm646x_init_devices(void)
if (!cpu_is_davinci_dm646x()) if (!cpu_is_davinci_dm646x())
return 0; return 0;
platform_device_register(&dm646x_mdio_device);
platform_device_register(&dm646x_emac_device); platform_device_register(&dm646x_emac_device);
clk_add_alias(NULL, dev_name(&dm646x_mdio_device.dev),
NULL, &dm646x_emac_device.dev);
return 0; return 0;
} }
postcore_initcall(dm646x_init_devices); postcore_initcall(dm646x_init_devices);
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <media/davinci/vpfe_capture.h> #include <media/davinci/vpfe_capture.h>
#define DM365_EMAC_BASE (0x01D07000) #define DM365_EMAC_BASE (0x01D07000)
#define DM365_EMAC_MDIO_BASE (DM365_EMAC_BASE + 0x4000)
#define DM365_EMAC_CNTRL_OFFSET (0x0000) #define DM365_EMAC_CNTRL_OFFSET (0x0000)
#define DM365_EMAC_CNTRL_MOD_OFFSET (0x3000) #define DM365_EMAC_CNTRL_MOD_OFFSET (0x3000)
#define DM365_EMAC_CNTRL_RAM_OFFSET (0x1000) #define DM365_EMAC_CNTRL_RAM_OFFSET (0x1000)
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <media/davinci/vpfe_capture.h> #include <media/davinci/vpfe_capture.h>
#define DM644X_EMAC_BASE (0x01C80000) #define DM644X_EMAC_BASE (0x01C80000)
#define DM644X_EMAC_MDIO_BASE (DM644X_EMAC_BASE + 0x4000)
#define DM644X_EMAC_CNTRL_OFFSET (0x0000) #define DM644X_EMAC_CNTRL_OFFSET (0x0000)
#define DM644X_EMAC_CNTRL_MOD_OFFSET (0x1000) #define DM644X_EMAC_CNTRL_MOD_OFFSET (0x1000)
#define DM644X_EMAC_CNTRL_RAM_OFFSET (0x2000) #define DM644X_EMAC_CNTRL_RAM_OFFSET (0x2000)
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <linux/davinci_emac.h> #include <linux/davinci_emac.h>
#define DM646X_EMAC_BASE (0x01C80000) #define DM646X_EMAC_BASE (0x01C80000)
#define DM646X_EMAC_MDIO_BASE (DM646X_EMAC_BASE + 0x4000)
#define DM646X_EMAC_CNTRL_OFFSET (0x0000) #define DM646X_EMAC_CNTRL_OFFSET (0x0000)
#define DM646X_EMAC_CNTRL_MOD_OFFSET (0x1000) #define DM646X_EMAC_CNTRL_MOD_OFFSET (0x1000)
#define DM646X_EMAC_CNTRL_RAM_OFFSET (0x2000) #define DM646X_EMAC_CNTRL_RAM_OFFSET (0x2000)
......
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