linux-rtc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).