diff --git a/arch/arm/cpu/armv7/qca/common/timer.c b/arch/arm/cpu/armv7/qca/common/timer.c index 004f9cc4b1..5e0ad07204 100644 --- a/arch/arm/cpu/armv7/qca/common/timer.c +++ b/arch/arm/cpu/armv7/qca/common/timer.c @@ -153,7 +153,7 @@ void __udelay(unsigned long usec) if (usec == 0) return; - val = (usec * GPT_FREQ_KHZ) / 1000; + val = ((unsigned long long)usec * GPT_FREQ_KHZ) / 1000; if (val == 0 ) val = 1; /* Wait for atleast 1 tick */ diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index e43c63c14b..5d7b1128df 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -100,6 +100,7 @@ dtb-$(CONFIG_ARCH_IPQ5332) += ipq5332-emulation.dtb \ ipq5332-mi01.6.dtb \ ipq5332-mi01.9.dtb \ ipq5332-mi01.12.dtb \ + ipq5332-mi01.13.dtb \ ipq5332-mi03.1.dtb \ ipq5332-mi04.1.dtb \ ipq5332-mi04.3.dtb \ diff --git a/arch/arm/dts/ipq5332-mi01.13.dts b/arch/arm/dts/ipq5332-mi01.13.dts new file mode 100644 index 0000000000..cb54e704ae --- /dev/null +++ b/arch/arm/dts/ipq5332-mi01.13.dts @@ -0,0 +1,298 @@ +/* + * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. + * + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +/dts-v1/; +#include "ipq5332-soc.dtsi" +/ { + machid = <0x8060402>; + config_name = "config@mi01.13", "config@rdp480", "config-rdp480"; + + aliases { + console = "/serial@78AF000"; + nand = "/nand-controller@79B0000"; + mmc = "/sdhci@7804000"; + usb0 = "/xhci@8a00000"; + i2c0 = "/i2c@78B6000"; + pci0 = "/pci@20000000"; + pci1 = "/pci@18000000"; + pci2 = "/pci@10000000"; + }; + + serial@78AF000 { + status = "ok"; + serial_gpio { + blsp0_uart_rx { + gpio = <18>; + func = <1>; + pull = ; + drvstr = ; + }; + blsp0_uart_tx { + gpio = <19>; + func = <1>; + pull = ; + drvstr = ; + }; + }; + }; + + spi { + spi_gpio { + blsp0_spi_clk { + gpio = <14>; + func = <1>; + pull = ; + oe = ; + drvstr = ; + }; + blsp0_spi_mosi { + gpio = <15>; + func = <1>; + pull = ; + oe = ; + drvstr = ; + }; + blsp0_spi_miso { + gpio = <16>; + func = <1>; + pull = ; + drvstr = ; + }; + blsp0_spi_cs { + gpio = <17>; + func = <1>; + pull = ; + oe = ; + drvstr = ; + }; + }; + }; + + i2c@78B6000 { + i2c_gpio { + gpio1 { + gpio = <29>; + func = <3>; + pull = ; + drvstr = ; + oe = ; + }; + + gpio2 { + gpio = <30>; + func = <3>; + pull = ; + drvstr = ; + oe = ; + }; + }; + }; + + nand: nand-controller@79B0000 { + nand_gpio { + qspi_dat3 { + gpio = <8>; + func = <2>; + pull = ; + drvstr = ; + }; + qspi_dat2 { + gpio = <9>; + func = <2>; + pull = ; + drvstr = ; + }; + qspi_dat1 { + gpio = <10>; + func = <2>; + pull = ; + drvstr = ; + }; + qspi_dat0 { + gpio = <11>; + func = <2>; + pull = ; + drvstr = ; + }; + qspi_cs_n { + gpio = <12>; + func = <2>; + pull = ; + drvstr = ; + }; + qspi_clk { + gpio = <13>; + func = <2>; + pull = ; + drvstr = ; + }; + }; + }; + + mmc: sdhci@7804000 { + mmc_gpio { + emmc_dat3 { + gpio = <8>; + func = <1>; + pull = ; + drvstr = ; + }; + emmc_dat2 { + gpio = <9>; + func = <1>; + pull = ; + drvstr = ; + }; + emmc_dat1 { + gpio = <10>; + func = <1>; + pull = ; + drvstr = ; + }; + emmc_dat0 { + gpio = <11>; + func = <1>; + pull = ; + drvstr = ; + }; + emmc_cmd{ + gpio = <12>; + func = <1>; + pull = ; + drvstr = ; + }; + emmc_clk{ + gpio = <13>; + func = <1>; + pull = ; + drvstr = ; + }; + }; + }; + + pci0: pci@20000000 { + status = "ok"; + perst_gpio = <38>; + lane = <1>; + pci_gpio { + pci_rst { + gpio = <38>; + pull = ; + oe = ; + drvstr = ; + }; + }; + }; + + pci1: pci@18000000 { + status = "ok"; + perst_gpio = <47>; + lane = <1>; + pci_gpio { + pci_rst { + gpio = <47>; + pull = ; + oe = ; + drvstr = ; + }; + }; + }; + + pci2: pci@10000000 { + status = "ok"; + perst_gpio = <44>; + lane = <1>; + pci_gpio { + pci_rst { + gpio = <44>; + pull = ; + oe = ; + }; + }; + }; + + ess-switch { + switch_mac_mode0 = ; + switch_mac_mode1 = ; + qca808x_gpio = <51>; + qca808x_gpio_cnt = <1>; + qca8084_switch_enable = <1>; + sfp_gpio = <24>; + sfp_gpio_cnt = <1>; + + mdio_gpio { + mdc1 { + gpio = <27>; + func = <1>; + pull = ; + drvstr = ; + }; + mdio { + gpio = <28>; + func = <1>; + pull = ; + drvstr = ; + }; + }; + + port_phyinfo { + port@0 { + phy_address = <1>; + uniphy_id = <0>; + phy_type = ; + uniphy_mode = ; + }; + port@1 { + phy_type = ; + uniphy_id = <1>; + uniphy_mode = ; + }; + }; + + qca8084_swt_info { + switch_mac_mode0 = ; + switch_mac_mode1 = ; + + port@0 { + phy_address = <0xff>; + phy_type = ; + forced-speed = <2500>; + forced-duplex = <1>; + }; + port@1 { + phy_address = <1>; + phy_type = ; + }; + port@2 { + phy_address = <2>; + phy_type = ; + }; + port@3 { + phy_address = <3>; + phy_type = ; + }; + port@4 { + phy_address = <0x4>; + phy_type = ; + }; + port@5 { + phy_address = <0xff>; + phy_type = ; + forced-speed = <2500>; + forced-duplex = <1>; + }; + }; + }; +}; diff --git a/arch/arm/dts/ipq5332-mi01.2.dts b/arch/arm/dts/ipq5332-mi01.2.dts index 4b63285f19..f892e009d0 100644 --- a/arch/arm/dts/ipq5332-mi01.2.dts +++ b/arch/arm/dts/ipq5332-mi01.2.dts @@ -47,6 +47,38 @@ }; }; + spi { + spi_gpio { + blsp0_spi_clk { + gpio = <14>; + func = <1>; + pull = ; + oe = ; + drvstr = ; + }; + blsp0_spi_mosi { + gpio = <15>; + func = <1>; + pull = ; + oe = ; + drvstr = ; + }; + blsp0_spi_miso { + gpio = <16>; + func = <1>; + pull = ; + drvstr = ; + }; + blsp0_spi_cs { + gpio = <17>; + func = <1>; + pull = ; + oe = ; + drvstr = ; + }; + }; + }; + i2c@78B6000 { i2c_gpio { gpio1 { diff --git a/arch/arm/include/asm/mach-types.h b/arch/arm/include/asm/mach-types.h index 4005df05d4..c00a313fa9 100644 --- a/arch/arm/include/asm/mach-types.h +++ b/arch/arm/include/asm/mach-types.h @@ -1184,6 +1184,7 @@ extern unsigned int __machine_arch_type; #define MACH_TYPE_IPQ5332_AP_MI04_1_C2 0x8060007 #define MACH_TYPE_IPQ5332_AP_MI04_3 0x8060107 #define MACH_TYPE_IPQ5332_AP_MI01_12 0x8060202 +#define MACH_TYPE_IPQ5332_AP_MI01_13 0x8060402 #define MACH_TYPE_IPQ5332_AP_MI01_14 0x8060302 #ifdef CONFIG_ARCH_EBSA110 diff --git a/board/qca/arm/ipq5332/ipq5332.c b/board/qca/arm/ipq5332/ipq5332.c index cfcc75f6d7..bac41b31d4 100644 --- a/board/qca/arm/ipq5332/ipq5332.c +++ b/board/qca/arm/ipq5332/ipq5332.c @@ -851,8 +851,9 @@ unsigned int get_dts_machid(unsigned int machid) case MACH_TYPE_IPQ5332_AP_MI01_2_C2: return MACH_TYPE_IPQ5332_AP_MI01_2; case MACH_TYPE_IPQ5332_AP_MI01_3_C2: - case MACH_TYPE_IPQ5332_AP_MI01_7: return MACH_TYPE_IPQ5332_AP_MI01_3; + case MACH_TYPE_IPQ5332_AP_MI01_7: + return MACH_TYPE_IPQ5332_AP_MI01_13; case MACH_TYPE_IPQ5332_AP_MI01_14: return MACH_TYPE_IPQ5332_AP_MI01_12; case MACH_TYPE_IPQ5332_AP_MI04_1_C2: diff --git a/drivers/pci/pci_ipq.c b/drivers/pci/pci_ipq.c index 949211e6f5..806651e63e 100644 --- a/drivers/pci/pci_ipq.c +++ b/drivers/pci/pci_ipq.c @@ -409,6 +409,7 @@ DECLARE_GLOBAL_DATA_PTR; #define QCN_VENDOR_ID 0x17CB #define QCN9224_DEVICE_ID 0x1109 #define QCN9000_DEVICE_ID 0x1104 +#define QCN6432_DEVICE_ID 0x110c #define MAX_UNWINDOWED_ADDRESS 0x80000 #define WINDOW_ENABLE_BIT 0x40000000 #define WINDOW_SHIFT 19 @@ -1996,7 +1997,7 @@ pci_dev_t pci_find_ipq_devices(struct pci_device_id *ids, int device_id) hose = hose->next; device_id--; } - for (;hose; hose = hose->next) { + if (hose) { for (bus = hose->first_busno; bus <= hose->last_busno; bus++) { bdf = pci_hose_find_devices(hose, bus, ids, &index); if (bdf != -1) @@ -2195,6 +2196,7 @@ U_BOOT_CMD(fuse_qcn9224, 2, 1, do_fuse_qcn9224, static struct pci_device_id pci_device[] = { {QCN_VENDOR_ID, QCN9224_DEVICE_ID}, {QCN_VENDOR_ID, QCN9000_DEVICE_ID}, + {QCN_VENDOR_ID, QCN6432_DEVICE_ID}, {} };