* [PATCH v12 0/3] Use MFD framework for SGI IOC3 drivers
@ 2020-01-09 10:34 Thomas Bogendoerfer
2020-01-09 10:34 ` [PATCH v12 2/3] MIPS: SGI-IP27: fix readb/writeb addressing Thomas Bogendoerfer
2020-01-10 19:25 ` [PATCH v12 0/3] Use MFD framework for SGI IOC3 drivers Paul Burton
0 siblings, 2 replies; 3+ messages in thread
From: Thomas Bogendoerfer @ 2020-01-09 10:34 UTC (permalink / raw)
To: Paul Burton
Cc: Ralf Baechle, James Hogan, Lee Jones, David S. Miller,
Alessandro Zummo, Alexandre Belloni, Greg Kroah-Hartman,
Jiri Slaby, linux-mips, linux-kernel, netdev, linux-rtc,
linux-serial
SGI IOC3 ASIC includes support for ethernet, PS2 keyboard/mouse,
NIC (number in a can), GPIO and a byte bus. By attaching a
SuperIO chip to it, it also supports serial lines and a parallel
port. The chip is used on a variety of SGI systems with different
configurations. This patchset moves code out of the network driver,
which doesn't belong there, into its new place a MFD driver and
specific platform drivers for the different subfunctions.
Changes in v12:
- added support for mapping all PCI interrupts as ioc3 uses INTB,
if both ethernet and superio is used
Changes in v11:
- dropped accepted patches out of the series
- moved byte swapping patch first in series
- added ip30 system board support
Changes in v10:
- generation of fake subdevice ID had vendor and device ID swapped
Changes in v9:
- remove generated MFD devices, when driver is removed or in case
of a mfd device setup error
- remove irq domain, if setup of mfd devices failed
- pci_iounmap on exit/error cases
- added irq domain unmap function
Changes in v8:
- Re-worked comments in drivers/mfd/ioc3.c
- Added select CRC16 to ioc3-eth.c
- Patches 1 and 2 are already taken to mips-next, but
for completeness of the series they are still included.
What's missing to get the remaining 3 patches via the MIPS
tree is an ack from a network maintainer
Changes in v7:
- added patch to enable ethernet phy for Origin 200 systems
- depend on 64bit for ioc3 mfd driver
Changes in v6:
- dropped patches accepted for v5.4-rc1
- moved serio patch to ip30 patch series
- adapted nvmem patch
Changes in v5:
- requested by Jakub I've splited ioc3 ethernet driver changes into
more steps to make the transition more visible; on the way there
I've "checkpatched" the driver and reduced code reorderings
- dropped all uint16_t and uint32_t
- added nvmem API extension to the documenation file
- changed to use request_irq/free_irq in serio driver
- removed wrong kfree() in serio error path
Changes in v4:
- added w1 drivers to the series after merge in 5.3 failed because
of no response from maintainer and other parts of this series
won't work without that drivers
- moved ip30 systemboard support to the ip30 series, which will
deal with rtc oddity Lee found
- converted to use devm_platform_ioremap_resource
- use PLATFORM_DEVID_AUTO for serial, ethernet and serio in mfd driver
- fixed reverse christmas order in ioc3-eth.c
- formating issue found by Lee
- re-worked irq request/free in serio driver to avoid crashes during
probe/remove
Changes in v3:
- use 1-wire subsystem for handling proms
- pci-xtalk driver uses prom information to create PCI subsystem
ids for use in MFD driver
- changed MFD driver to only use static declared mfd_cells
- added IP30 system board setup to MFD driver
- mac address is now read from ioc3-eth driver with nvmem framework
Changes in v2:
- fixed issue in ioc3kbd.c reported by Dmitry Torokhov
- merged IP27 RTC removal and 8250 serial driver addition into
main MFD patch to keep patches bisectable
Thomas Bogendoerfer (3):
MIPS: PCI: Support mapping of INTB/C/D for pci-xtalk-bridge
MIPS: SGI-IP27: fix readb/writeb addressing
mfd: ioc3: Add driver for SGI IOC3 chip
arch/mips/include/asm/mach-ip27/mangle-port.h | 4 +-
arch/mips/include/asm/pci/bridge.h | 3 +-
arch/mips/include/asm/sn/ioc3.h | 38 +-
arch/mips/pci/pci-xtalk-bridge.c | 28 +-
arch/mips/sgi-ip27/ip27-timer.c | 20 -
drivers/mfd/Kconfig | 13 +
drivers/mfd/Makefile | 1 +
drivers/mfd/ioc3.c | 669 ++++++++++++++++++
drivers/net/ethernet/sgi/Kconfig | 5 +-
drivers/net/ethernet/sgi/ioc3-eth.c | 544 +++-----------
drivers/rtc/rtc-m48t35.c | 11 +
drivers/tty/serial/8250/8250_ioc3.c | 98 +++
drivers/tty/serial/8250/Kconfig | 11 +
drivers/tty/serial/8250/Makefile | 1 +
14 files changed, 951 insertions(+), 495 deletions(-)
create mode 100644 drivers/mfd/ioc3.c
create mode 100644 drivers/tty/serial/8250/8250_ioc3.c
--
2.24.1
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v12 2/3] MIPS: SGI-IP27: fix readb/writeb addressing
2020-01-09 10:34 [PATCH v12 0/3] Use MFD framework for SGI IOC3 drivers Thomas Bogendoerfer
@ 2020-01-09 10:34 ` Thomas Bogendoerfer
2020-01-10 19:25 ` [PATCH v12 0/3] Use MFD framework for SGI IOC3 drivers Paul Burton
1 sibling, 0 replies; 3+ messages in thread
From: Thomas Bogendoerfer @ 2020-01-09 10:34 UTC (permalink / raw)
To: Paul Burton
Cc: Alexandre Belloni, Ralf Baechle, James Hogan, David S. Miller,
Alessandro Zummo, linux-mips, linux-kernel, netdev, linux-rtc
Our chosen byte swapping, which is what firmware already uses, is to
do readl/writel by normal lw/sw intructions (data invariance). This
also means we need to mangle addresses for u8 and u16 accesses. The
mangling for 16bit has been done aready, but 8bit one was missing.
Correcting this causes different addresses for accesses to the
SuperIO and local bus of the IOC3 chip. This is fixed by changing
byte order in ioc3 and m48rtc_rtc structs.
Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
---
arch/mips/include/asm/mach-ip27/mangle-port.h | 4 +-
arch/mips/include/asm/sn/ioc3.h | 38 +++++++++----------
drivers/net/ethernet/sgi/ioc3-eth.c | 12 ++++++
drivers/rtc/rtc-m48t35.c | 11 ++++++
4 files changed, 44 insertions(+), 21 deletions(-)
diff --git a/arch/mips/include/asm/mach-ip27/mangle-port.h b/arch/mips/include/asm/mach-ip27/mangle-port.h
index f6e4912ea062..27c56efa519f 100644
--- a/arch/mips/include/asm/mach-ip27/mangle-port.h
+++ b/arch/mips/include/asm/mach-ip27/mangle-port.h
@@ -8,7 +8,7 @@
#ifndef __ASM_MACH_IP27_MANGLE_PORT_H
#define __ASM_MACH_IP27_MANGLE_PORT_H
-#define __swizzle_addr_b(port) (port)
+#define __swizzle_addr_b(port) ((port) ^ 3)
#define __swizzle_addr_w(port) ((port) ^ 2)
#define __swizzle_addr_l(port) (port)
#define __swizzle_addr_q(port) (port)
@@ -20,6 +20,6 @@
# define ioswabl(a, x) (x)
# define __mem_ioswabl(a, x) cpu_to_le32(x)
# define ioswabq(a, x) (x)
-# define __mem_ioswabq(a, x) cpu_to_le32(x)
+# define __mem_ioswabq(a, x) cpu_to_le64(x)
#endif /* __ASM_MACH_IP27_MANGLE_PORT_H */
diff --git a/arch/mips/include/asm/sn/ioc3.h b/arch/mips/include/asm/sn/ioc3.h
index 78ef760ddde4..3865d3225780 100644
--- a/arch/mips/include/asm/sn/ioc3.h
+++ b/arch/mips/include/asm/sn/ioc3.h
@@ -21,50 +21,50 @@ struct ioc3_serialregs {
/* SUPERIO uart register map */
struct ioc3_uartregs {
+ u8 iu_lcr;
union {
- u8 iu_rbr; /* read only, DLAB == 0 */
- u8 iu_thr; /* write only, DLAB == 0 */
- u8 iu_dll; /* DLAB == 1 */
+ u8 iu_iir; /* read only */
+ u8 iu_fcr; /* write only */
};
union {
u8 iu_ier; /* DLAB == 0 */
u8 iu_dlm; /* DLAB == 1 */
};
union {
- u8 iu_iir; /* read only */
- u8 iu_fcr; /* write only */
+ u8 iu_rbr; /* read only, DLAB == 0 */
+ u8 iu_thr; /* write only, DLAB == 0 */
+ u8 iu_dll; /* DLAB == 1 */
};
- u8 iu_lcr;
- u8 iu_mcr;
- u8 iu_lsr;
- u8 iu_msr;
u8 iu_scr;
+ u8 iu_msr;
+ u8 iu_lsr;
+ u8 iu_mcr;
};
struct ioc3_sioregs {
u8 fill[0x141]; /* starts at 0x141 */
- u8 uartc;
u8 kbdcg;
+ u8 uartc;
- u8 fill0[0x150 - 0x142 - 1];
+ u8 fill0[0x151 - 0x142 - 1];
- u8 pp_data;
- u8 pp_dsr;
u8 pp_dcr;
+ u8 pp_dsr;
+ u8 pp_data;
- u8 fill1[0x158 - 0x152 - 1];
+ u8 fill1[0x159 - 0x153 - 1];
- u8 pp_fifa;
- u8 pp_cfgb;
u8 pp_ecr;
+ u8 pp_cfgb;
+ u8 pp_fifa;
- u8 fill2[0x168 - 0x15a - 1];
+ u8 fill2[0x16a - 0x15b - 1];
- u8 rtcad;
u8 rtcdat;
+ u8 rtcad;
- u8 fill3[0x170 - 0x169 - 1];
+ u8 fill3[0x170 - 0x16b - 1];
struct ioc3_uartregs uartb; /* 0x20170 */
struct ioc3_uartregs uarta; /* 0x20178 */
diff --git a/drivers/net/ethernet/sgi/ioc3-eth.c b/drivers/net/ethernet/sgi/ioc3-eth.c
index d242906ae233..4ebb58b8572e 100644
--- a/drivers/net/ethernet/sgi/ioc3-eth.c
+++ b/drivers/net/ethernet/sgi/ioc3-eth.c
@@ -1079,6 +1079,16 @@ static int ioc3_is_menet(struct pci_dev *pdev)
* Can't use UPF_IOREMAP as the whole of IOC3 resources have already been
* registered.
*/
+static unsigned int ioc3_serial_in(struct uart_port *p, int offset)
+{
+ return readb(p->membase + (offset ^ 3));
+}
+
+static void ioc3_serial_out(struct uart_port *p, int offset, int value)
+{
+ writeb(value, p->membase + (offset ^ 3));
+}
+
static void ioc3_8250_register(struct ioc3_uartregs __iomem *uart)
{
#define COSMISC_CONSTANT 6
@@ -1093,6 +1103,8 @@ static void ioc3_8250_register(struct ioc3_uartregs __iomem *uart)
.membase = (unsigned char __iomem *)uart,
.mapbase = (unsigned long)uart,
+ .serial_in = ioc3_serial_in,
+ .serial_out = ioc3_serial_out,
}
};
unsigned char lcr;
diff --git a/drivers/rtc/rtc-m48t35.c b/drivers/rtc/rtc-m48t35.c
index d3a75d447fce..e8194f1f01a8 100644
--- a/drivers/rtc/rtc-m48t35.c
+++ b/drivers/rtc/rtc-m48t35.c
@@ -20,6 +20,16 @@
struct m48t35_rtc {
u8 pad[0x7ff8]; /* starts at 0x7ff8 */
+#ifdef CONFIG_SGI_IP27
+ u8 hour;
+ u8 min;
+ u8 sec;
+ u8 control;
+ u8 year;
+ u8 month;
+ u8 date;
+ u8 day;
+#else
u8 control;
u8 sec;
u8 min;
@@ -28,6 +38,7 @@ struct m48t35_rtc {
u8 date;
u8 month;
u8 year;
+#endif
};
#define M48T35_RTC_SET 0x80
--
2.24.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v12 0/3] Use MFD framework for SGI IOC3 drivers
2020-01-09 10:34 [PATCH v12 0/3] Use MFD framework for SGI IOC3 drivers Thomas Bogendoerfer
2020-01-09 10:34 ` [PATCH v12 2/3] MIPS: SGI-IP27: fix readb/writeb addressing Thomas Bogendoerfer
@ 2020-01-10 19:25 ` Paul Burton
1 sibling, 0 replies; 3+ messages in thread
From: Paul Burton @ 2020-01-10 19:25 UTC (permalink / raw)
To: Thomas Bogendoerfer
Cc: Paul Burton, Ralf Baechle, James Hogan, Lee Jones,
David S. Miller, Alessandro Zummo, Alexandre Belloni,
Greg Kroah-Hartman, Jiri Slaby, linux-mips, linux-kernel, netdev,
linux-rtc, linux-serial, linux-mips
Hello,
Thomas Bogendoerfer wrote:
> SGI IOC3 ASIC includes support for ethernet, PS2 keyboard/mouse,
> NIC (number in a can), GPIO and a byte bus. By attaching a
> SuperIO chip to it, it also supports serial lines and a parallel
> port. The chip is used on a variety of SGI systems with different
> configurations. This patchset moves code out of the network driver,
> which doesn't belong there, into its new place a MFD driver and
> specific platform drivers for the different subfunctions.
>
> Changes in v12:
> - added support for mapping all PCI interrupts as ioc3 uses INTB,
> if both ethernet and superio is used
>
> Changes in v11:
> - dropped accepted patches out of the series
> - moved byte swapping patch first in series
> - added ip30 system board support
>
> Changes in v10:
> - generation of fake subdevice ID had vendor and device ID swapped
>
> Changes in v9:
> - remove generated MFD devices, when driver is removed or in case
> of a mfd device setup error
> - remove irq domain, if setup of mfd devices failed
> - pci_iounmap on exit/error cases
> - added irq domain unmap function
>
> Changes in v8:
> - Re-worked comments in drivers/mfd/ioc3.c
> - Added select CRC16 to ioc3-eth.c
> - Patches 1 and 2 are already taken to mips-next, but
> for completeness of the series they are still included.
> What's missing to get the remaining 3 patches via the MIPS
> tree is an ack from a network maintainer
>
> Changes in v7:
> - added patch to enable ethernet phy for Origin 200 systems
> - depend on 64bit for ioc3 mfd driver
>
> Changes in v6:
> - dropped patches accepted for v5.4-rc1
> - moved serio patch to ip30 patch series
> - adapted nvmem patch
>
> Changes in v5:
> - requested by Jakub I've splited ioc3 ethernet driver changes into
> more steps to make the transition more visible; on the way there
> I've "checkpatched" the driver and reduced code reorderings
> - dropped all uint16_t and uint32_t
> - added nvmem API extension to the documenation file
> - changed to use request_irq/free_irq in serio driver
> - removed wrong kfree() in serio error path
>
> Changes in v4:
> - added w1 drivers to the series after merge in 5.3 failed because
> of no response from maintainer and other parts of this series
> won't work without that drivers
> - moved ip30 systemboard support to the ip30 series, which will
> deal with rtc oddity Lee found
> - converted to use devm_platform_ioremap_resource
> - use PLATFORM_DEVID_AUTO for serial, ethernet and serio in mfd driver
> - fixed reverse christmas order in ioc3-eth.c
> - formating issue found by Lee
> - re-worked irq request/free in serio driver to avoid crashes during
> probe/remove
>
> Changes in v3:
> - use 1-wire subsystem for handling proms
> - pci-xtalk driver uses prom information to create PCI subsystem
> ids for use in MFD driver
> - changed MFD driver to only use static declared mfd_cells
> - added IP30 system board setup to MFD driver
> - mac address is now read from ioc3-eth driver with nvmem framework
>
> Changes in v2:
> - fixed issue in ioc3kbd.c reported by Dmitry Torokhov
> - merged IP27 RTC removal and 8250 serial driver addition into
> main MFD patch to keep patches bisectable
>
> Thomas Bogendoerfer (3):
> MIPS: PCI: Support mapping of INTB/C/D for pci-xtalk-bridge
> MIPS: SGI-IP27: fix readb/writeb addressing
> mfd: ioc3: Add driver for SGI IOC3 chip
>
> arch/mips/include/asm/mach-ip27/mangle-port.h | 4 +-
> arch/mips/include/asm/pci/bridge.h | 3 +-
> arch/mips/include/asm/sn/ioc3.h | 38 +-
> arch/mips/pci/pci-xtalk-bridge.c | 28 +-
> arch/mips/sgi-ip27/ip27-timer.c | 20 -
> drivers/mfd/Kconfig | 13 +
> drivers/mfd/Makefile | 1 +
> drivers/mfd/ioc3.c | 669 ++++++++++++++++++
> drivers/net/ethernet/sgi/Kconfig | 5 +-
Series applied to mips-next.
> MIPS: PCI: Support mapping of INTB/C/D for pci-xtalk-bridge
> commit 2634e5a651e7
> https://git.kernel.org/mips/c/2634e5a651e7
>
> Signed-off-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
> Signed-off-by: Paul Burton <paulburton@kernel.org>
>
> MIPS: SGI-IP27: fix readb/writeb addressing
> commit 10cf8300ecad
> https://git.kernel.org/mips/c/10cf8300ecad
>
> Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
> Signed-off-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
> Signed-off-by: Paul Burton <paulburton@kernel.org>
>
> mfd: ioc3: Add driver for SGI IOC3 chip
> commit 0ce5ebd24d25
> https://git.kernel.org/mips/c/0ce5ebd24d25
>
> Signed-off-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
> Signed-off-by: Paul Burton <paulburton@kernel.org>
Thanks,
Paul
[ This message was auto-generated; if you believe anything is incorrect
then please email paulburton@kernel.org to report it. ]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-01-10 19:25 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-09 10:34 [PATCH v12 0/3] Use MFD framework for SGI IOC3 drivers Thomas Bogendoerfer
2020-01-09 10:34 ` [PATCH v12 2/3] MIPS: SGI-IP27: fix readb/writeb addressing Thomas Bogendoerfer
2020-01-10 19:25 ` [PATCH v12 0/3] Use MFD framework for SGI IOC3 drivers Paul Burton
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).