1/*
2 * Qualcomm reference boards support: REH132 DB120 APH126 APH128 APH131
3 *
4 * Copyright (c) 2013 The Linux Foundation. All rights reserved.
5 *
6 * Permission to use, copy, modify, and/or distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 *
18 */
19
20#include <linux/pci.h>
21#include <linux/phy.h>
22#include <linux/platform_device.h>
23#include <linux/ath9k_platform.h>
24#include <linux/ar8216_platform.h>
25#include <linux/of_platform.h>
26
27#include <asm/mach-ath79/ar71xx_regs.h>
28#include <asm/mach-ath79/ath79.h>
29
30#include "common.h"
31#include "dev-ap9x-pci.h"
32#include "dev-eth.h"
33#include "dev-gpio-buttons.h"
34#include "dev-leds-gpio.h"
35#include "dev-m25p80.h"
36#include "dev-spi.h"
37#include "dev-usb.h"
38#include "dev-wmac.h"
39#include "dev-nfc.h"
40#include "machtypes.h"
41
42#define DT_MAC0_OFFSET		0
43#define DT_MAC1_OFFSET		6
44#define DT_WMAC_CALDATA_OFFSET	0x1000
45#define DT_PCIE_CALDATA_OFFSET	0x5000
46
47static struct ath9k_platform_data generic_ath_pci_data;
48
49static struct of_device_id __initdata generic_common_ids[] = {
50	{ .compatible = "simple-bus", },
51	{},
52};
53
54struct of_dev_auxdata generic_auxdata_lookup[] __initdata = {
55	OF_DEV_AUXDATA("qcom,ag71xx-wmac", AR934X_WMAC_BASE, 	"ar934x_wmac", 		&ath79_wmac_data),
56	OF_DEV_AUXDATA("qcom,ag71xx-spi",  AR71XX_SPI_BASE,  	"ath79-spi",   		&ath79_spi_data),
57	OF_DEV_AUXDATA("qcom,ag71xx-mdio", AR71XX_GE0_BASE,  	"ag71xx-mdio.0", 	&ath79_mdio0_data),
58	OF_DEV_AUXDATA("qcom,ag71xx-mdio", AR71XX_GE1_BASE,  	"ag71xx-mdio.1", 	&ath79_mdio1_data),
59	OF_DEV_AUXDATA("qcom,ag71xx-eth",  AR71XX_GE0_BASE,  	"ag71xx.0",    		&ath79_eth0_data),
60	OF_DEV_AUXDATA("qcom,ag71xx-eth",  AR71XX_GE1_BASE,  	"ag71xx.1",    		&ath79_eth1_data),
61	OF_DEV_AUXDATA("qcom,ag71xx-ehci", AR71XX_EHCI_BASE, 	"ehci-platform",  	&ath79_ehci0_pdata_v2),
62	OF_DEV_AUXDATA("qcom,ag71xx-pci",  AR724X_PCI_MEM_BASE, "ath_pci",  		&generic_ath_pci_data),
63#ifdef CONFIG_ATH79_DEV_NFC
64	OF_DEV_AUXDATA("qcom,ag71xx-nfc",  AR934X_NFC_BASE, 	"ar934x-nfc",  		&ath79_nfc_data),
65#endif
66	{}
67};
68
69static void __init generic_init(void)
70{
71	u8 *art = (u8 *) KSEG1ADDR(0x1fff0000);
72
73	ath79_init_usb_pdata();
74
75	ath79_init_m25p80_pdata(NULL);
76
77	ath79_init_mdio_pdata(0, 0);
78	ath79_init_mdio_pdata(1, 0);
79
80	ath79_init_wmac_pdata(art + DT_WMAC_CALDATA_OFFSET, NULL);
81	ath79_wmac_dt_fixup(&generic_auxdata_lookup[0]);
82
83	memcpy(generic_ath_pci_data.eeprom_data, art + DT_PCIE_CALDATA_OFFSET,
84			sizeof(generic_ath_pci_data.eeprom_data));
85
86	ath79_init_mac(ath79_eth0_data.mac_addr, art + DT_MAC0_OFFSET, 0);
87	ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
88	ath79_init_eth_pdata(0);
89	ath79_eth0_data.mii_bus_dev = NULL;
90
91	ath79_init_mac(ath79_eth1_data.mac_addr, art + DT_MAC1_OFFSET, 0);
92	ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII;
93	ath79_init_eth_pdata(1);
94	ath79_eth1_data.mii_bus_dev = NULL;
95
96	ath79_init_nfc_pdata();
97}
98
99static void __init generic_setup(void)
100{
101	generic_init();
102	of_platform_populate(NULL, generic_common_ids, generic_auxdata_lookup, NULL);
103}
104
105MIPS_MACHINE(ATH79_MACH_GENERIC_DT, "GENERIC-DT", "Qualcomm GENERIC-DT reference board", generic_setup);
106