move to kernel 3.16-lts (powerpc platform)

This commit is contained in:
Zi Zhou
2017-02-16 08:38:37 +00:00
parent 4c2a53dd85
commit 6e29938485
10 changed files with 3239 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
kernel-3.16*
linux-*

View File

@@ -0,0 +1,39 @@
############################################################
# <bsn.cl fy=2015 v=onl>
#
# Copyright 2015 Big Switch Networks, Inc.
#
# Licensed under the Eclipse Public License, Version 1.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.eclipse.org/legal/epl-v10.html
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the
# License.
#
# </bsn.cl>
############################################################
THIS_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))
include $(ONL)/make/config.mk
ifndef K_TARGET_DIR
K_TARGET_DIR := $(THIS_DIR)
endif
include ../../kconfig.mk
K_CONFIG := powerpc-e500v-all.config
K_BUILD_TARGET := uImage
K_COPY_SRC := vmlinux.bin.gz
ifndef K_COPY_DST
K_COPY_DST := kernel-3.16-lts-powerpc-e500v-all.bin.gz
endif
export ARCH=powerpc
include $(ONL)/make/kbuild.mk

View File

@@ -0,0 +1,41 @@
Changes to arch/powerpc/platforms/85xx/Makefile and Kconfig.
Keep these separate from the individual platform patches because all
platforms need to touch these two files. By keeping these changes in
a separate patch allows the platform specific patchsets to sink/float
without conflicts in these two files.
diff --git a/arch/powerpc/platforms/85xx/Kconfig b/arch/powerpc/platforms/85xx/Kconfig
index b9a2559..2c1aa86 100644
--- a/arch/powerpc/platforms/85xx/Kconfig
+++ b/arch/powerpc/platforms/85xx/Kconfig
@@ -278,6 +278,19 @@ config CORENET_GENERIC
The following boards are supported for both 32bit and 64bit kernel:
P5020 DS, P5040 DS and T104xQDS
+config QUANTA_LB
+ bool "Quanta LBx"
+ select DEFAULT_UIMAGE
+ select HAS_RAPIDIO
+ help
+ This option enables support for the Quanta LBx board
+
+config DELTA_7448
+ bool "Delta ET-7448BF"
+ select DEFAULT_UIMAGE
+ help
+ This option enables support for the Delta ET-7448BF board
+
endif # FSL_SOC_BOOKE
config TQM85xx
diff --git a/arch/powerpc/platforms/85xx/Makefile b/arch/powerpc/platforms/85xx/Makefile
index bc5acb9..d04e66c 100644
--- a/arch/powerpc/platforms/85xx/Makefile
+++ b/arch/powerpc/platforms/85xx/Makefile
@@ -30,3 +30,5 @@ obj-$(CONFIG_XES_MPC85xx) += xes_mpc85xx.o
obj-$(CONFIG_GE_IMP3A) += ge_imp3a.o
obj-$(CONFIG_PPC_QEMU_E500) += qemu_e500.o
obj-$(CONFIG_SGY_CTS1000) += sgy_cts1000.o
+obj-$(CONFIG_DELTA_7448) += delta_7448.o
+obj-$(CONFIG_QUANTA_LB) += quanta_lb.o

View File

@@ -0,0 +1,83 @@
diff --git a/arch/powerpc/platforms/85xx/delta_7448.c b/arch/powerpc/platforms/85xx/delta_7448.c
new file mode 100644
index 0000000..4618bef
--- /dev/null
+++ b/arch/powerpc/platforms/85xx/delta_7448.c
@@ -0,0 +1,77 @@
+/*
+ * Delta ET-7448BF platform setup
+ *
+ * Copyright 2013 Big Switch Networks, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ */
+
+#include <linux/pci.h>
+#include <asm/udbg.h>
+#include <asm/mpic.h>
+#include <sysdev/fsl_soc.h>
+#include <sysdev/fsl_pci.h>
+
+#include "mpc85xx.h"
+#include "smp.h"
+
+static void delta_7448_restart(char *cmd)
+{
+ struct device_node *cpld;
+
+ cpld = of_find_compatible_node(NULL, NULL, "delta-7448-cpld");
+ if (cpld) {
+ uint8_t __iomem *cpld_regs = of_iomap(cpld, 0);
+ of_node_put(cpld);
+ if (cpld_regs) {
+ writeb(0, cpld_regs + 0x20);
+ }
+ }
+
+ fsl_rstcr_restart(NULL);
+}
+
+static void __init delta_7448_pic_init(void)
+{
+ struct mpic *mpic = mpic_alloc(NULL, 0, MPIC_BIG_ENDIAN, 0, 256,
+ " OpenPIC ");
+ BUG_ON(!mpic);
+ mpic_init(mpic);
+}
+
+static void __init delta_7448_setup_arch(void)
+{
+ if (ppc_md.progress)
+ ppc_md.progress("delta_7448_setup_arch()", 0);
+ fsl_pci_assign_primary();
+ mpc85xx_smp_init();
+}
+
+static void delta_7448_show_cpuinfo(struct seq_file *m)
+{
+ seq_printf(m, "PVR\t\t: 0x%lx\n", mfspr(SPRN_PVR));
+ seq_printf(m, "SVR\t\t: 0x%lx\n", mfspr(SPRN_SVR));
+ seq_printf(m, "PLL\t\t: 0x%lx\n", (mfspr(SPRN_HID1) >> 24) & 0x3f);
+}
+
+static int __init delta_7448_probe(void)
+{
+ return of_flat_dt_is_compatible(of_get_flat_dt_root(), "delta-7448");
+}
+
+machine_arch_initcall(delta_7448, mpc85xx_common_publish_devices);
+
+define_machine(delta_7448) {
+ .name = "Delta ET-7448BF",
+ .probe = delta_7448_probe,
+ .setup_arch = delta_7448_setup_arch,
+ .init_IRQ = delta_7448_pic_init,
+ .show_cpuinfo = delta_7448_show_cpuinfo,
+ .get_irq = mpic_get_irq,
+ .restart = delta_7448_restart,
+ .calibrate_decr = generic_calibrate_decr,
+ .progress = udbg_progress,
+};

View File

@@ -0,0 +1,287 @@
diff --git a/arch/powerpc/platforms/85xx/quanta_lb.c b/arch/powerpc/platforms/85xx/quanta_lb.c
new file mode 100644
index 0000000..9660990
--- /dev/null
+++ b/arch/powerpc/platforms/85xx/quanta_lb.c
@@ -0,0 +1,70 @@
+/*
+ * Quanta LBx platform setup
+ *
+ * Copyright 2013 Big Switch Networks, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ */
+
+#include <linux/pci.h>
+#include <asm/udbg.h>
+#include <asm/mpic.h>
+#include <sysdev/fsl_soc.h>
+#include <sysdev/fsl_pci.h>
+
+#include "mpc85xx.h"
+
+static void quanta_lb_restart(char *cmd)
+{
+ void __iomem *immap = ioremap(get_immrbase(), 0x1000000);
+ if (immap) {
+ unsigned long pdata = in_be32(immap + 0x90d10);
+ pdata &= ~(1 << 7);
+ out_be32(immap + 0x90d10, pdata);
+ }
+ fsl_rstcr_restart(NULL);
+}
+
+static void __init quanta_lb_pic_init(void)
+{
+ struct mpic *mpic = mpic_alloc(NULL, 0, MPIC_BIG_ENDIAN, 0, 256,
+ " OpenPIC ");
+ BUG_ON(!mpic);
+ mpic_init(mpic);
+}
+
+static void __init quanta_lb_setup_arch(void)
+{
+ if (ppc_md.progress)
+ ppc_md.progress("quanta_lb_setup_arch()", 0);
+ fsl_pci_assign_primary();
+}
+
+static void quanta_lb_show_cpuinfo(struct seq_file *m)
+{
+ seq_printf(m, "PVR\t\t: 0x%lx\n", mfspr(SPRN_PVR));
+ seq_printf(m, "SVR\t\t: 0x%lx\n", mfspr(SPRN_SVR));
+ seq_printf(m, "PLL\t\t: 0x%lx\n", (mfspr(SPRN_HID1) >> 24) & 0x3f);
+}
+
+static int __init quanta_lb_probe(void)
+{
+ return of_flat_dt_is_compatible(of_get_flat_dt_root(), "quanta-lb");
+}
+
+machine_arch_initcall(quanta_lb, mpc85xx_common_publish_devices);
+
+define_machine(quanta_lb) {
+ .name = "Quanta LBx",
+ .probe = quanta_lb_probe,
+ .setup_arch = quanta_lb_setup_arch,
+ .init_IRQ = quanta_lb_pic_init,
+ .show_cpuinfo = quanta_lb_show_cpuinfo,
+ .get_irq = mpic_get_irq,
+ .restart = quanta_lb_restart,
+ .calibrate_decr = generic_calibrate_decr,
+ .progress = udbg_progress,
+};
diff -rupN a/drivers/ata/Kconfig b/drivers/ata/Kconfig
--- a/drivers/ata/Kconfig 2014-12-14 08:24:02.000000000 -0800
+++ b/drivers/ata/Kconfig 2015-05-20 17:39:45.202136101 -0700
@@ -964,6 +964,13 @@ config PATA_WINBOND_VLB
Support for the Winbond W83759A controller on Vesa Local Bus
systems.
+config PATA_QUANTA_LB
+ bool "Quanta LB platform ATA support"
+ depends on PATA_PLATFORM && OF
+ help
+ This driver adds support for IDE/ATA drives on the Quanta LB
+ platform.
+
comment "Generic fallback / legacy drivers"
config PATA_ACPI
diff -rupN a/drivers/ata/Makefile b/drivers/ata/Makefile
--- a/drivers/ata/Makefile 2014-12-14 08:24:02.000000000 -0800
+++ b/drivers/ata/Makefile 2015-05-20 17:39:13.602132473 -0700
@@ -100,6 +100,7 @@ obj-$(CONFIG_PATA_OF_PLATFORM) += pata_o
obj-$(CONFIG_PATA_RB532) += pata_rb532_cf.o
obj-$(CONFIG_PATA_RZ1000) += pata_rz1000.o
obj-$(CONFIG_PATA_SAMSUNG_CF) += pata_samsung_cf.o
+obj-$(CONFIG_PATA_QUANTA_LB) += pata_quanta_lb.o
obj-$(CONFIG_PATA_PXA) += pata_pxa.o
diff -rupN a/drivers/ata/pata_quanta_lb.c b/drivers/ata/pata_quanta_lb.c
--- a/drivers/ata/pata_quanta_lb.c 1969-12-31 16:00:00.000000000 -0800
+++ b/drivers/ata/pata_quanta_lb.c 2015-05-20 17:40:21.562121047 -0700
@@ -0,0 +1,178 @@
+/*
+ * <bsn.cl fy=2013 v=gpl>
+ *
+ * Copyright 2013, 2014 BigSwitch Networks, Inc.
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms ofthe GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the License,
+ * or (at your option) any later version.
+ *
+ *
+ * </bsn.cl>
+ *
+ *
+ * Quanta LBx platform PATA driver
+ */
+#include <linux/module.h>
+#include <linux/libata.h>
+#include <linux/of_platform.h>
+#include <linux/of_address.h>
+
+#define DRV_NAME "quanta-lb-ata"
+
+static unsigned int
+quanta_lb_ata_data_xfer(struct ata_device *dev, unsigned char *buf,
+ unsigned int buflen, int rw)
+{
+ unsigned long irq_flags;
+ void __iomem *data_addr = dev->link->ap->ioaddr.data_addr;
+ unsigned short *ptr = (unsigned short *) buf;
+ unsigned int count = (buflen + 1) / 2;
+
+ local_irq_save(irq_flags);
+
+ if (rw == READ) {
+ while (count--) {
+ *ptr++ = cpu_to_le16(__raw_readw(data_addr));
+ }
+ }
+ else {
+ while (count--) {
+ __raw_writew(le16_to_cpu(*ptr), data_addr);
+ ptr++;
+ }
+ }
+
+ local_irq_restore(irq_flags);
+
+ return buflen;
+}
+
+static int
+quanta_lb_ata_set_mode(struct ata_link *link, struct ata_device **unused)
+{
+ struct ata_device *dev;
+
+ ata_for_each_dev(dev, link, ENABLED) {
+ /* We don't really care */
+ dev->pio_mode = dev->xfer_mode = XFER_PIO_0;
+ dev->xfer_shift = ATA_SHIFT_PIO;
+ dev->flags |= ATA_DFLAG_PIO;
+ ata_dev_info(dev, "configured for PIO\n");
+ }
+ return 0;
+}
+
+static struct scsi_host_template quanta_lb_ata_sht = {
+ ATA_PIO_SHT(DRV_NAME),
+};
+
+static struct ata_port_operations quanta_lb_ata_port_ops = {
+ .inherits = &ata_sff_port_ops,
+ .sff_data_xfer = quanta_lb_ata_data_xfer,
+ .cable_detect = ata_cable_unknown,
+ .set_mode = quanta_lb_ata_set_mode,
+};
+
+static int
+quanta_lb_ata_probe(struct platform_device *op)
+{
+ int rv;
+ struct resource io_res, ctl_res, *irq_res;
+ int irq = 0;
+ void __iomem *io_mem, *ctl_mem;
+ struct ata_host *host;
+ struct ata_port *ap;
+
+ rv = of_address_to_resource(op->dev.of_node, 0, &io_res);
+ if (rv) {
+ dev_err(&op->dev, "could not determine io base\n");
+ return rv;
+ }
+ io_mem = devm_ioremap(&op->dev, io_res.start, resource_size(&io_res));
+ if (!io_mem) {
+ dev_err(&op->dev, "could not map io base\n");
+ return -ENOMEM;
+ }
+
+ rv = of_address_to_resource(op->dev.of_node, 1, &ctl_res);
+ if (rv) {
+ dev_err(&op->dev, "could not determine ctl base\n");
+ return rv;
+ }
+ ctl_mem = devm_ioremap(&op->dev, ctl_res.start, resource_size(&ctl_res));
+ if (!ctl_mem) {
+ dev_err(&op->dev, "could not map ctl base\n");
+ return -ENOMEM;
+ }
+
+ irq_res = platform_get_resource(op, IORESOURCE_IRQ, 0);
+ if (irq_res)
+ irq = irq_res->start;
+
+ host = ata_host_alloc(&op->dev, 1);
+ if (!host)
+ return -ENOMEM;
+ ap = host->ports[0];
+
+ ap->ops = &quanta_lb_ata_port_ops;
+ ap->pio_mask = ATA_PIO6;
+ ap->flags |= ATA_FLAG_SLAVE_POSS;
+
+ if (!irq) {
+ ap->flags |= ATA_FLAG_PIO_POLLING;
+ ata_port_desc(ap, "no IRQ, using PIO polling");
+ }
+
+ ap->ioaddr.cmd_addr = io_mem;
+ ap->ioaddr.data_addr = io_mem + 0x02;
+ ap->ioaddr.error_addr = io_mem + 0x07;
+ ap->ioaddr.feature_addr = io_mem + 0x07;
+ ap->ioaddr.nsect_addr = io_mem + 0x0b;
+ ap->ioaddr.lbal_addr = io_mem + 0x0f;
+ ap->ioaddr.lbam_addr = io_mem + 0x13;
+ ap->ioaddr.lbah_addr = io_mem + 0x17;
+ ap->ioaddr.device_addr = io_mem + 0x1b;
+ ap->ioaddr.status_addr = io_mem + 0x1f;
+ ap->ioaddr.command_addr = io_mem + 0x1f;
+ ap->ioaddr.altstatus_addr = ctl_mem + 0x1b;
+ ap->ioaddr.ctl_addr = ctl_mem + 0x1b;
+
+ ata_port_desc(ap, "mmio cmd 0x%llx ctl 0x%llx",
+ (unsigned long long) io_res.start,
+ (unsigned long long) ctl_res.start);
+
+ return ata_host_activate(host, irq, irq ? ata_sff_interrupt : NULL,
+ 0, &quanta_lb_ata_sht);
+}
+
+static int __exit
+quanta_lb_ata_remove(struct platform_device *op)
+{
+ struct ata_host *host = dev_get_drvdata(&op->dev);
+ ata_host_detach(host);
+ return 0;
+}
+
+static struct of_device_id quanta_lb_ata_of_match[] = {
+ { .compatible = "quanta-lb-ata", },
+ {},
+};
+
+static struct platform_driver quanta_lb_ata_of_platform_driver = {
+ .probe = quanta_lb_ata_probe,
+ .remove = __exit_p(quanta_lb_ata_remove),
+ .driver = {
+ .name = DRV_NAME,
+ .owner = THIS_MODULE,
+ .of_match_table = quanta_lb_ata_of_match,
+ },
+};
+
+module_platform_driver(quanta_lb_ata_of_platform_driver);
+
+MODULE_AUTHOR("Big Switch Networks <support@bigswitch.com>");
+MODULE_DESCRIPTION("Quanta LBx platform PATA driver");
+MODULE_LICENSE("GPL");
+MODULE_DEVICE_TABLE(of, quanta_lb_ata_of_match);

View File

@@ -21,3 +21,6 @@ driver-esdhc-p2020-broken-timeout.patch
drivers-gpio-config-arch-nr-gpios.patch
driver-hwmon-emerson-update-pmbus-core.patch
drivers-net-ethernet-broadcom-tg3-preamble-reset.patch
platform-powerpc-85xx-Makefile.patch
platform-powerpc-dni-7448-r0.patch
platform-powerpc-quanta-lb9-r0.patch

View File

@@ -0,0 +1 @@
include $(ONL)/make/pkg.mk

View File

@@ -0,0 +1,30 @@
variables:
basename: onl-kernel-3.16-lts-powerpc-e500v-all
common:
arch: powerpc
version: 1.0.0
copyright: Copyright 2013, 2014, 2015 Big Switch Networks
maintainer: support@bigswitch.com
support: opennetworklinux@googlegroups.com
packages:
- name: $basename
version: 1.0.0
summary: Open Network Linux Kernel 3.16-lts for PowerPC e500v platforms.
files:
builds/kernel-3.16* : $$PKG_INSTALL/
builds/linux-*mbuild : $$PKG_INSTALL/mbuilds
changelog: Change changes changes.,
- name: $basename-modules
version: 1.0.0
summary: Open Network Linux 3.16 LTS Kernel Modules for PowerPC e500v Platforms
files:
changelog: Change changes changes.,

View File

@@ -0,0 +1,19 @@
# -*- Makefile -*-
############################################################
# <bsn.cl fy=2013 v=none>
#
# Copyright 2013, 2014 BigSwitch Networks, Inc.
#
#
#
# </bsn.cl>
############################################################
THIS_DIR := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))
include $(ONL)/make/config.mk
kernel:
$(MAKE) -C $(ONL)/packages/base/any/kernels/3.16-lts/configs/powerpc-e500v-all K_TARGET_DIR=$(THIS_DIR) K_COPY_DST=kernel-3.16-lts-powerpc-e500v-all.bin.gz $(ONL_MAKE_PARALLEL)
clean:
rm -rf linux-3.16.39 linux-3.16.39-mbuild