diff options
author | Waldemar Brodkorb <wbx@openadk.org> | 2014-12-28 22:25:29 -0600 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2014-12-28 22:27:34 -0600 |
commit | 0e3585dae500fb0a976888f5dbdf3a37769680ec (patch) | |
tree | 89f0f3768794a9daf3253c8a2e832c3ebb3a582a /target/m68k | |
parent | 6488ae4a7b82ac7c95adc34281459c373fba6be3 (diff) |
bring coldfire support in shape
Binutils 2.24 is required to get a working kernel.
Ethernet in Qemu is still broken.
Qemu Patch is still rquired in 2.2.0.
Only kernel+initramfs is working.
It seems the signal handler problem is gone with
sash and simpleinit.
Diffstat (limited to 'target/m68k')
5 files changed, 274 insertions, 5 deletions
diff --git a/target/m68k/kernel/qemu-m68k b/target/m68k/kernel/qemu-m68k index 681785452..3caa5323b 100644 --- a/target/m68k/kernel/qemu-m68k +++ b/target/m68k/kernel/qemu-m68k @@ -1,16 +1,16 @@ CONFIG_M68K=y CONFIG_COLDFIRE=y CONFIG_M520x=y -# CONFIG_MMU is not set CONFIG_CLOCK_SET=y CONFIG_CLOCK_FREQ=66666666 CONFIG_CLOCK_DIV=1 CONFIG_M5208EVB=y CONFIG_FREESCALE=y CONFIG_RAMBASE=0x40000000 -CONFIG_RAMSIZE=0x2000000 +CONFIG_RAMSIZE=0x0 CONFIG_VECTORBASE=0x40000000 CONFIG_KERNELBASE=0x40020000 +CONFIG_4KSTACKS=y CONFIG_RAMKERNEL=y CONFIG_BINFMT_FLAT=y CONFIG_SERIAL_MCF=y diff --git a/target/m68k/qemu-m68k/patches/3.14.26/m68k-coldfire-fec.patch b/target/m68k/qemu-m68k/patches/3.14.26/m68k-coldfire-fec.patch new file mode 100644 index 000000000..be0b18ad7 --- /dev/null +++ b/target/m68k/qemu-m68k/patches/3.14.26/m68k-coldfire-fec.patch @@ -0,0 +1,127 @@ +diff -Nur linux-3.14.26.orig/drivers/net/ethernet/freescale/fec_main.c linux-3.14.26/drivers/net/ethernet/freescale/fec_main.c +--- linux-3.14.26.orig/drivers/net/ethernet/freescale/fec_main.c 2014-12-06 17:56:06.000000000 -0600 ++++ linux-3.14.26/drivers/net/ethernet/freescale/fec_main.c 2014-12-28 22:15:41.533921249 -0600 +@@ -152,7 +152,7 @@ + module_param_array(macaddr, byte, NULL, 0); + MODULE_PARM_DESC(macaddr, "FEC Ethernet MAC address"); + +-#if defined(CONFIG_M5272) ++#if defined(CONFIG_COLDFIRE) + /* + * Some hardware gets it MAC address out of local flash memory. + * if this is non-zero then assume it is the address to get MAC from. +@@ -170,7 +170,7 @@ + #else + #define FEC_FLASHMAC 0 + #endif +-#endif /* CONFIG_M5272 */ ++#endif /* CONFIG_COLDFIRE */ + + #if (((RX_RING_SIZE + TX_RING_SIZE) * 32) > PAGE_SIZE) + #error "FEC: descriptor ring size constants too large" +@@ -565,7 +565,7 @@ + /* Set MII speed */ + writel(fep->phy_speed, fep->hwp + FEC_MII_SPEED); + +-#if !defined(CONFIG_M5272) ++#if !defined(CONFIG_COLDFIRE) + /* set RX checksum */ + val = readl(fep->hwp + FEC_RACC); + if (fep->csum_flags & FLAG_RX_CSUM_ENABLED) +@@ -626,7 +626,7 @@ + #endif + } + +-#if !defined(CONFIG_M5272) ++#if !defined(CONFIG_COLDFIRE) + /* enable pause frame*/ + if ((fep->pause_flag & FEC_PAUSE_FLAG_ENABLE) || + ((fep->pause_flag & FEC_PAUSE_FLAG_AUTONEG) && +@@ -644,13 +644,13 @@ + } else { + rcntl &= ~FEC_ENET_FCE; + } +-#endif /* !defined(CONFIG_M5272) */ ++#endif /* !defined(CONFIG_COLDFIRE) */ + + writel(rcntl, fep->hwp + FEC_R_CNTRL); + + /* Setup multicast filter. */ + set_multicast_list(ndev); +-#ifndef CONFIG_M5272 ++#ifndef CONFIG_COLDFIRE + writel(0, fep->hwp + FEC_HASH_TABLE_HIGH); + writel(0, fep->hwp + FEC_HASH_TABLE_LOW); + #endif +@@ -665,7 +665,7 @@ + if (fep->bufdesc_ex) + ecntl |= (1 << 4); + +-#ifndef CONFIG_M5272 ++#ifndef CONFIG_COLDFIRE + /* Enable the MIB statistic event counters */ + writel(0 << 31, fep->hwp + FEC_MIB_CTRLSTAT); + #endif +@@ -1117,7 +1117,7 @@ + * 3) from flash or fuse (via platform data) + */ + if (!is_valid_ether_addr(iap)) { +-#ifdef CONFIG_M5272 ++#ifdef CONFIG_COLDFIRE + if (FEC_FLASHMAC) + iap = (unsigned char *)FEC_FLASHMAC; + #else +@@ -1304,7 +1304,7 @@ + /* mask with MAC supported features */ + if (id_entry->driver_data & FEC_QUIRK_HAS_GBIT) { + phy_dev->supported &= PHY_GBIT_FEATURES; +-#if !defined(CONFIG_M5272) ++#if !defined(CONFIG_COLDFIRE) + phy_dev->supported |= SUPPORTED_Pause; + #endif + } +@@ -1491,7 +1491,7 @@ + } + } + +-#if !defined(CONFIG_M5272) ++#if !defined(CONFIG_COLDFIRE) + + static void fec_enet_get_pauseparam(struct net_device *ndev, + struct ethtool_pauseparam *pause) +@@ -1637,7 +1637,7 @@ + return -EOPNOTSUPP; + } + } +-#endif /* !defined(CONFIG_M5272) */ ++#endif /* !defined(CONFIG_COLDFIRE) */ + + static int fec_enet_nway_reset(struct net_device *dev) + { +@@ -1651,7 +1651,7 @@ + } + + static const struct ethtool_ops fec_enet_ethtool_ops = { +-#if !defined(CONFIG_M5272) ++#if !defined(CONFIG_COLDFIRE) + .get_pauseparam = fec_enet_get_pauseparam, + .set_pauseparam = fec_enet_set_pauseparam, + #endif +@@ -1661,7 +1661,7 @@ + .get_link = ethtool_op_get_link, + .get_ts_info = fec_enet_get_ts_info, + .nway_reset = fec_enet_nway_reset, +-#ifndef CONFIG_M5272 ++#ifndef CONFIG_COLDFIRE + .get_ethtool_stats = fec_enet_get_ethtool_stats, + .get_strings = fec_enet_get_strings, + .get_sset_count = fec_enet_get_sset_count, +@@ -2110,7 +2110,7 @@ + /* setup board info structure */ + fep = netdev_priv(ndev); + +-#if !defined(CONFIG_M5272) ++#if !defined(CONFIG_COLDFIRE) + /* default enable pause frame auto negotiation */ + if (pdev->id_entry && + (pdev->id_entry->driver_data & FEC_QUIRK_HAS_GBIT)) diff --git a/target/m68k/qemu-m68k/patches/3.14.26/qemu-coldfire.patch b/target/m68k/qemu-m68k/patches/3.14.26/qemu-coldfire.patch new file mode 100644 index 000000000..5bbda8c4d --- /dev/null +++ b/target/m68k/qemu-m68k/patches/3.14.26/qemu-coldfire.patch @@ -0,0 +1,24 @@ +m68k: enabled software emulation of separate supervisor/user stack + +Recent Coldfires have separate supervisor and user stack pointers, but +since older Coldfires didn't have that, the Linux kernel has a kind of +emulation mechanism for those pointers. + +Apparently, according to the Kconfig.cpu file, the 5208 is supposed to +support such separate pointers, but Qemu doesn't implement it. So we +cheat a bit here and force the usage of emulated separate stack +pointers. + +Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com> + +diff -Nur linux-3.14.26.orig/arch/m68k/Kconfig.cpu linux-3.14.26/arch/m68k/Kconfig.cpu +--- linux-3.14.26.orig/arch/m68k/Kconfig.cpu 2014-12-06 17:56:06.000000000 -0600 ++++ linux-3.14.26/arch/m68k/Kconfig.cpu 2014-12-28 03:00:39.279037664 -0600 +@@ -146,6 +146,7 @@ + depends on !MMU + select GENERIC_CLOCKEVENTS + select HAVE_CACHE_SPLIT ++ select COLDFIRE_SW_A7 + help + Freescale Coldfire 5207/5208 processor support. + diff --git a/target/m68k/qemu-m68k/patches/3.17.7/m68k-coldfire-fec.patch b/target/m68k/qemu-m68k/patches/3.17.7/m68k-coldfire-fec.patch new file mode 100644 index 000000000..63c99e3bd --- /dev/null +++ b/target/m68k/qemu-m68k/patches/3.17.7/m68k-coldfire-fec.patch @@ -0,0 +1,118 @@ +diff -Nur linux-3.17.7.orig/drivers/net/ethernet/freescale/fec_main.c linux-3.17.7/drivers/net/ethernet/freescale/fec_main.c +--- linux-3.17.7.orig/drivers/net/ethernet/freescale/fec_main.c 2014-12-16 11:37:26.000000000 -0600 ++++ linux-3.17.7/drivers/net/ethernet/freescale/fec_main.c 2014-12-28 21:27:24.773847877 -0600 +@@ -155,7 +155,7 @@ + module_param_array(macaddr, byte, NULL, 0); + MODULE_PARM_DESC(macaddr, "FEC Ethernet MAC address"); + +-#if defined(CONFIG_M5272) ++#if defined(CONFIG_COLDFIRE) + /* + * Some hardware gets it MAC address out of local flash memory. + * if this is non-zero then assume it is the address to get MAC from. +@@ -173,7 +173,7 @@ + #else + #define FEC_FLASHMAC 0 + #endif +-#endif /* CONFIG_M5272 */ ++#endif /* CONFIG_COLDFIRE */ + + /* Interrupt events/masks. */ + #define FEC_ENET_HBERR ((uint)0x80000000) /* Heartbeat error */ +@@ -889,7 +889,7 @@ + /* Set MII speed */ + writel(fep->phy_speed, fep->hwp + FEC_MII_SPEED); + +-#if !defined(CONFIG_M5272) ++#if !defined(CONFIG_COLDFIRE) + /* set RX checksum */ + val = readl(fep->hwp + FEC_RACC); + if (fep->csum_flags & FLAG_RX_CSUM_ENABLED) +@@ -950,7 +950,7 @@ + #endif + } + +-#if !defined(CONFIG_M5272) ++#if !defined(CONFIG_COLDFIRE) + /* enable pause frame*/ + if ((fep->pause_flag & FEC_PAUSE_FLAG_ENABLE) || + ((fep->pause_flag & FEC_PAUSE_FLAG_AUTONEG) && +@@ -968,13 +968,13 @@ + } else { + rcntl &= ~FEC_ENET_FCE; + } +-#endif /* !defined(CONFIG_M5272) */ ++#endif /* !defined(CONFIG_COLDFIRE) */ + + writel(rcntl, fep->hwp + FEC_R_CNTRL); + + /* Setup multicast filter. */ + set_multicast_list(ndev); +-#ifndef CONFIG_M5272 ++#ifndef CONFIG_COLDFIRE + writel(0, fep->hwp + FEC_HASH_TABLE_HIGH); + writel(0, fep->hwp + FEC_HASH_TABLE_LOW); + #endif +@@ -989,7 +989,7 @@ + if (fep->bufdesc_ex) + ecntl |= (1 << 4); + +-#ifndef CONFIG_M5272 ++#ifndef CONFIG_COLDFIRE + /* Enable the MIB statistic event counters */ + writel(0 << 31, fep->hwp + FEC_MIB_CTRLSTAT); + #endif +@@ -1436,7 +1436,7 @@ + * 3) from flash or fuse (via platform data) + */ + if (!is_valid_ether_addr(iap)) { +-#ifdef CONFIG_M5272 ++#ifdef CONFIG_COLDFIRE + if (FEC_FLASHMAC) + iap = (unsigned char *)FEC_FLASHMAC; + #else +@@ -1699,7 +1699,7 @@ + if (id_entry->driver_data & FEC_QUIRK_HAS_GBIT) { + phy_dev->supported &= PHY_GBIT_FEATURES; + phy_dev->supported &= ~SUPPORTED_1000baseT_Half; +-#if !defined(CONFIG_M5272) ++#if !defined(CONFIG_COLDFIRE) + phy_dev->supported |= SUPPORTED_Pause; + #endif + } +@@ -1894,7 +1894,7 @@ + } + } + +-#if !defined(CONFIG_M5272) ++#if !defined(CONFIG_COLDFIRE) + + static void fec_enet_get_pauseparam(struct net_device *ndev, + struct ethtool_pauseparam *pause) +@@ -2049,7 +2049,7 @@ + return -EOPNOTSUPP; + } + } +-#endif /* !defined(CONFIG_M5272) */ ++#endif /* !defined(CONFIG_COLDFIRE) */ + + static int fec_enet_nway_reset(struct net_device *dev) + { +@@ -2068,7 +2068,7 @@ + .get_drvinfo = fec_enet_get_drvinfo, + .nway_reset = fec_enet_nway_reset, + .get_link = ethtool_op_get_link, +-#ifndef CONFIG_M5272 ++#ifndef CONFIG_COLDFIRE + .get_pauseparam = fec_enet_get_pauseparam, + .set_pauseparam = fec_enet_set_pauseparam, + .get_strings = fec_enet_get_strings, +@@ -2571,7 +2571,7 @@ + /* setup board info structure */ + fep = netdev_priv(ndev); + +-#if !defined(CONFIG_M5272) ++#if !defined(CONFIG_COLDFIRE) + /* default enable pause frame auto negotiation */ + if (pdev->id_entry && + (pdev->id_entry->driver_data & FEC_QUIRK_HAS_GBIT)) diff --git a/target/m68k/qemu-m68k/patches/3.17.7/qemu-coldfire.patch b/target/m68k/qemu-m68k/patches/3.17.7/qemu-coldfire.patch index 503fe8ef3..14d2f610b 100644 --- a/target/m68k/qemu-m68k/patches/3.17.7/qemu-coldfire.patch +++ b/target/m68k/qemu-m68k/patches/3.17.7/qemu-coldfire.patch @@ -11,9 +11,9 @@ pointers. Signed-off-by: Thomas Petazzoni <thomas.petazzoni at free-electrons.com> -diff -Nur linux-3.16.orig/arch/m68k/Kconfig.cpu linux-3.16/arch/m68k/Kconfig.cpu ---- linux-3.16.orig/arch/m68k/Kconfig.cpu 2014-08-04 00:25:02.000000000 +0200 -+++ linux-3.16/arch/m68k/Kconfig.cpu 2014-08-13 16:58:59.568332805 +0200 +diff -Nur linux-3.17.7.orig/arch/m68k/Kconfig.cpu linux-3.17.7/arch/m68k/Kconfig.cpu +--- linux-3.17.7.orig/arch/m68k/Kconfig.cpu 2014-12-16 11:37:26.000000000 -0600 ++++ linux-3.17.7/arch/m68k/Kconfig.cpu 2014-12-27 14:12:19.291459730 -0600 @@ -146,6 +146,7 @@ depends on !MMU select GENERIC_CLOCKEVENTS |