Skip to content

Commit a9e3e12

Browse files
committed
Merge tag 'soc-fsl-next-v5.6' of git://git.kernel.org/pub/scm/linux/kernel/git/leo/linux into arm/drivers
NXP/FSL SoC driver updates for v5.6 QUICC Engine drivers - Improve the QE drivers to be compatible with ARM/ARM64/PPC64 architectures - Various cleanups to the QE drivers * tag 'soc-fsl-next-v5.6' of git://git.kernel.org/pub/scm/linux/kernel/git/leo/linux: (49 commits) soc: fsl: qe: remove set but not used variable 'mm_gc' soc: fsl: qe: remove PPC32 dependency from CONFIG_QUICC_ENGINE soc: fsl: qe: remove unused #include of asm/irq.h from ucc.c net: ethernet: freescale: make UCC_GETH explicitly depend on PPC32 net/wan/fsl_ucc_hdlc: reject muram offsets above 64K net/wan/fsl_ucc_hdlc: fix reading of __be16 registers net/wan/fsl_ucc_hdlc: avoid use of IS_ERR_VALUE() soc: fsl: qe: avoid IS_ERR_VALUE in ucc_fast.c soc: fsl: qe: drop pointless check in qe_sdma_init() soc: fsl: qe: drop use of IS_ERR_VALUE in qe_sdma_init() soc: fsl: qe: avoid IS_ERR_VALUE in ucc_slow.c soc: fsl: qe: refactor cpm_muram_alloc_common to prevent BUG on error path soc: fsl: qe: drop broken lazy call of cpm_muram_init() soc: fsl: qe: make cpm_muram_free() ignore a negative offset soc: fsl: qe: make cpm_muram_free() return void soc: fsl: qe: change return type of cpm_muram_alloc() to s32 serial: ucc_uart: access __be32 field using be32_to_cpu serial: ucc_uart: limit brg-frequency workaround to PPC32 serial: ucc_uart: use of_property_read_u32() in ucc_uart_probe() serial: ucc_uart: stub out soft_uart_init for !CONFIG_PPC32 ... Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Olof Johansson <[email protected]>
2 parents 0f82727 + 6e62bd3 commit a9e3e12

File tree

33 files changed

+775
-1128
lines changed

33 files changed

+775
-1128
lines changed

arch/powerpc/include/asm/cpm.h

Lines changed: 1 addition & 171 deletions
Original file line numberDiff line numberDiff line change
@@ -1,171 +1 @@
1-
/* SPDX-License-Identifier: GPL-2.0 */
2-
#ifndef __CPM_H
3-
#define __CPM_H
4-
5-
#include <linux/compiler.h>
6-
#include <linux/types.h>
7-
#include <linux/errno.h>
8-
#include <linux/of.h>
9-
#include <soc/fsl/qe/qe.h>
10-
11-
/*
12-
* SPI Parameter RAM common to QE and CPM.
13-
*/
14-
struct spi_pram {
15-
__be16 rbase; /* Rx Buffer descriptor base address */
16-
__be16 tbase; /* Tx Buffer descriptor base address */
17-
u8 rfcr; /* Rx function code */
18-
u8 tfcr; /* Tx function code */
19-
__be16 mrblr; /* Max receive buffer length */
20-
__be32 rstate; /* Internal */
21-
__be32 rdp; /* Internal */
22-
__be16 rbptr; /* Internal */
23-
__be16 rbc; /* Internal */
24-
__be32 rxtmp; /* Internal */
25-
__be32 tstate; /* Internal */
26-
__be32 tdp; /* Internal */
27-
__be16 tbptr; /* Internal */
28-
__be16 tbc; /* Internal */
29-
__be32 txtmp; /* Internal */
30-
__be32 res; /* Tx temp. */
31-
__be16 rpbase; /* Relocation pointer (CPM1 only) */
32-
__be16 res1; /* Reserved */
33-
};
34-
35-
/*
36-
* USB Controller pram common to QE and CPM.
37-
*/
38-
struct usb_ctlr {
39-
u8 usb_usmod;
40-
u8 usb_usadr;
41-
u8 usb_uscom;
42-
u8 res1[1];
43-
__be16 usb_usep[4];
44-
u8 res2[4];
45-
__be16 usb_usber;
46-
u8 res3[2];
47-
__be16 usb_usbmr;
48-
u8 res4[1];
49-
u8 usb_usbs;
50-
/* Fields down below are QE-only */
51-
__be16 usb_ussft;
52-
u8 res5[2];
53-
__be16 usb_usfrn;
54-
u8 res6[0x22];
55-
} __attribute__ ((packed));
56-
57-
/*
58-
* Function code bits, usually generic to devices.
59-
*/
60-
#ifdef CONFIG_CPM1
61-
#define CPMFCR_GBL ((u_char)0x00) /* Flag doesn't exist in CPM1 */
62-
#define CPMFCR_TC2 ((u_char)0x00) /* Flag doesn't exist in CPM1 */
63-
#define CPMFCR_DTB ((u_char)0x00) /* Flag doesn't exist in CPM1 */
64-
#define CPMFCR_BDB ((u_char)0x00) /* Flag doesn't exist in CPM1 */
65-
#else
66-
#define CPMFCR_GBL ((u_char)0x20) /* Set memory snooping */
67-
#define CPMFCR_TC2 ((u_char)0x04) /* Transfer code 2 value */
68-
#define CPMFCR_DTB ((u_char)0x02) /* Use local bus for data when set */
69-
#define CPMFCR_BDB ((u_char)0x01) /* Use local bus for BD when set */
70-
#endif
71-
#define CPMFCR_EB ((u_char)0x10) /* Set big endian byte order */
72-
73-
/* Opcodes common to CPM1 and CPM2
74-
*/
75-
#define CPM_CR_INIT_TRX ((ushort)0x0000)
76-
#define CPM_CR_INIT_RX ((ushort)0x0001)
77-
#define CPM_CR_INIT_TX ((ushort)0x0002)
78-
#define CPM_CR_HUNT_MODE ((ushort)0x0003)
79-
#define CPM_CR_STOP_TX ((ushort)0x0004)
80-
#define CPM_CR_GRA_STOP_TX ((ushort)0x0005)
81-
#define CPM_CR_RESTART_TX ((ushort)0x0006)
82-
#define CPM_CR_CLOSE_RX_BD ((ushort)0x0007)
83-
#define CPM_CR_SET_GADDR ((ushort)0x0008)
84-
#define CPM_CR_SET_TIMER ((ushort)0x0008)
85-
#define CPM_CR_STOP_IDMA ((ushort)0x000b)
86-
87-
/* Buffer descriptors used by many of the CPM protocols. */
88-
typedef struct cpm_buf_desc {
89-
ushort cbd_sc; /* Status and Control */
90-
ushort cbd_datlen; /* Data length in buffer */
91-
uint cbd_bufaddr; /* Buffer address in host memory */
92-
} cbd_t;
93-
94-
/* Buffer descriptor control/status used by serial
95-
*/
96-
97-
#define BD_SC_EMPTY (0x8000) /* Receive is empty */
98-
#define BD_SC_READY (0x8000) /* Transmit is ready */
99-
#define BD_SC_WRAP (0x2000) /* Last buffer descriptor */
100-
#define BD_SC_INTRPT (0x1000) /* Interrupt on change */
101-
#define BD_SC_LAST (0x0800) /* Last buffer in frame */
102-
#define BD_SC_TC (0x0400) /* Transmit CRC */
103-
#define BD_SC_CM (0x0200) /* Continuous mode */
104-
#define BD_SC_ID (0x0100) /* Rec'd too many idles */
105-
#define BD_SC_P (0x0100) /* xmt preamble */
106-
#define BD_SC_BR (0x0020) /* Break received */
107-
#define BD_SC_FR (0x0010) /* Framing error */
108-
#define BD_SC_PR (0x0008) /* Parity error */
109-
#define BD_SC_NAK (0x0004) /* NAK - did not respond */
110-
#define BD_SC_OV (0x0002) /* Overrun */
111-
#define BD_SC_UN (0x0002) /* Underrun */
112-
#define BD_SC_CD (0x0001) /* */
113-
#define BD_SC_CL (0x0001) /* Collision */
114-
115-
/* Buffer descriptor control/status used by Ethernet receive.
116-
* Common to SCC and FCC.
117-
*/
118-
#define BD_ENET_RX_EMPTY (0x8000)
119-
#define BD_ENET_RX_WRAP (0x2000)
120-
#define BD_ENET_RX_INTR (0x1000)
121-
#define BD_ENET_RX_LAST (0x0800)
122-
#define BD_ENET_RX_FIRST (0x0400)
123-
#define BD_ENET_RX_MISS (0x0100)
124-
#define BD_ENET_RX_BC (0x0080) /* FCC Only */
125-
#define BD_ENET_RX_MC (0x0040) /* FCC Only */
126-
#define BD_ENET_RX_LG (0x0020)
127-
#define BD_ENET_RX_NO (0x0010)
128-
#define BD_ENET_RX_SH (0x0008)
129-
#define BD_ENET_RX_CR (0x0004)
130-
#define BD_ENET_RX_OV (0x0002)
131-
#define BD_ENET_RX_CL (0x0001)
132-
#define BD_ENET_RX_STATS (0x01ff) /* All status bits */
133-
134-
/* Buffer descriptor control/status used by Ethernet transmit.
135-
* Common to SCC and FCC.
136-
*/
137-
#define BD_ENET_TX_READY (0x8000)
138-
#define BD_ENET_TX_PAD (0x4000)
139-
#define BD_ENET_TX_WRAP (0x2000)
140-
#define BD_ENET_TX_INTR (0x1000)
141-
#define BD_ENET_TX_LAST (0x0800)
142-
#define BD_ENET_TX_TC (0x0400)
143-
#define BD_ENET_TX_DEF (0x0200)
144-
#define BD_ENET_TX_HB (0x0100)
145-
#define BD_ENET_TX_LC (0x0080)
146-
#define BD_ENET_TX_RL (0x0040)
147-
#define BD_ENET_TX_RCMASK (0x003c)
148-
#define BD_ENET_TX_UN (0x0002)
149-
#define BD_ENET_TX_CSL (0x0001)
150-
#define BD_ENET_TX_STATS (0x03ff) /* All status bits */
151-
152-
/* Buffer descriptor control/status used by Transparent mode SCC.
153-
*/
154-
#define BD_SCC_TX_LAST (0x0800)
155-
156-
/* Buffer descriptor control/status used by I2C.
157-
*/
158-
#define BD_I2C_START (0x0400)
159-
160-
#ifdef CONFIG_CPM
161-
int cpm_command(u32 command, u8 opcode);
162-
#else
163-
static inline int cpm_command(u32 command, u8 opcode)
164-
{
165-
return -ENOSYS;
166-
}
167-
#endif /* CONFIG_CPM */
168-
169-
int cpm2_gpiochip_add32(struct device *dev);
170-
171-
#endif
1+
#include <soc/fsl/cpm.h>

arch/powerpc/platforms/83xx/km83xx.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
#include <sysdev/fsl_soc.h>
3535
#include <sysdev/fsl_pci.h>
3636
#include <soc/fsl/qe/qe.h>
37-
#include <soc/fsl/qe/qe_ic.h>
3837

3938
#include "mpc83xx.h"
4039

@@ -178,7 +177,7 @@ define_machine(mpc83xx_km) {
178177
.name = "mpc83xx-km-platform",
179178
.probe = mpc83xx_km_probe,
180179
.setup_arch = mpc83xx_km_setup_arch,
181-
.init_IRQ = mpc83xx_ipic_and_qe_init_IRQ,
180+
.init_IRQ = mpc83xx_ipic_init_IRQ,
182181
.get_irq = ipic_get_irq,
183182
.restart = mpc83xx_restart,
184183
.time_init = mpc83xx_time_init,

arch/powerpc/platforms/83xx/misc.c

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
#include <asm/io.h>
1515
#include <asm/hw_irq.h>
1616
#include <asm/ipic.h>
17-
#include <soc/fsl/qe/qe_ic.h>
1817
#include <sysdev/fsl_soc.h>
1918
#include <sysdev/fsl_pci.h>
2019

@@ -91,28 +90,6 @@ void __init mpc83xx_ipic_init_IRQ(void)
9190
ipic_set_default_priority();
9291
}
9392

94-
#ifdef CONFIG_QUICC_ENGINE
95-
void __init mpc83xx_qe_init_IRQ(void)
96-
{
97-
struct device_node *np;
98-
99-
np = of_find_compatible_node(NULL, NULL, "fsl,qe-ic");
100-
if (!np) {
101-
np = of_find_node_by_type(NULL, "qeic");
102-
if (!np)
103-
return;
104-
}
105-
qe_ic_init(np, 0, qe_ic_cascade_low_ipic, qe_ic_cascade_high_ipic);
106-
of_node_put(np);
107-
}
108-
109-
void __init mpc83xx_ipic_and_qe_init_IRQ(void)
110-
{
111-
mpc83xx_ipic_init_IRQ();
112-
mpc83xx_qe_init_IRQ();
113-
}
114-
#endif /* CONFIG_QUICC_ENGINE */
115-
11693
static const struct of_device_id of_bus_ids[] __initconst = {
11794
{ .type = "soc", },
11895
{ .compatible = "soc", },

arch/powerpc/platforms/83xx/mpc832x_mds.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
#include <sysdev/fsl_soc.h>
3434
#include <sysdev/fsl_pci.h>
3535
#include <soc/fsl/qe/qe.h>
36-
#include <soc/fsl/qe/qe_ic.h>
3736

3837
#include "mpc83xx.h"
3938

@@ -102,7 +101,7 @@ define_machine(mpc832x_mds) {
102101
.name = "MPC832x MDS",
103102
.probe = mpc832x_sys_probe,
104103
.setup_arch = mpc832x_sys_setup_arch,
105-
.init_IRQ = mpc83xx_ipic_and_qe_init_IRQ,
104+
.init_IRQ = mpc83xx_ipic_init_IRQ,
106105
.get_irq = ipic_get_irq,
107106
.restart = mpc83xx_restart,
108107
.time_init = mpc83xx_time_init,

arch/powerpc/platforms/83xx/mpc832x_rdb.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
#include <asm/ipic.h>
2323
#include <asm/udbg.h>
2424
#include <soc/fsl/qe/qe.h>
25-
#include <soc/fsl/qe/qe_ic.h>
2625
#include <sysdev/fsl_soc.h>
2726
#include <sysdev/fsl_pci.h>
2827

@@ -220,7 +219,7 @@ define_machine(mpc832x_rdb) {
220219
.name = "MPC832x RDB",
221220
.probe = mpc832x_rdb_probe,
222221
.setup_arch = mpc832x_rdb_setup_arch,
223-
.init_IRQ = mpc83xx_ipic_and_qe_init_IRQ,
222+
.init_IRQ = mpc83xx_ipic_init_IRQ,
224223
.get_irq = ipic_get_irq,
225224
.restart = mpc83xx_restart,
226225
.time_init = mpc83xx_time_init,

arch/powerpc/platforms/83xx/mpc836x_mds.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
#include <sysdev/fsl_soc.h>
4141
#include <sysdev/fsl_pci.h>
4242
#include <soc/fsl/qe/qe.h>
43-
#include <soc/fsl/qe/qe_ic.h>
4443

4544
#include "mpc83xx.h"
4645

@@ -202,7 +201,7 @@ define_machine(mpc836x_mds) {
202201
.name = "MPC836x MDS",
203202
.probe = mpc836x_mds_probe,
204203
.setup_arch = mpc836x_mds_setup_arch,
205-
.init_IRQ = mpc83xx_ipic_and_qe_init_IRQ,
204+
.init_IRQ = mpc83xx_ipic_init_IRQ,
206205
.get_irq = ipic_get_irq,
207206
.restart = mpc83xx_restart,
208207
.time_init = mpc83xx_time_init,

arch/powerpc/platforms/83xx/mpc836x_rdk.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
#include <asm/ipic.h>
1818
#include <asm/udbg.h>
1919
#include <soc/fsl/qe/qe.h>
20-
#include <soc/fsl/qe/qe_ic.h>
2120
#include <sysdev/fsl_soc.h>
2221
#include <sysdev/fsl_pci.h>
2322

@@ -42,7 +41,7 @@ define_machine(mpc836x_rdk) {
4241
.name = "MPC836x RDK",
4342
.probe = mpc836x_rdk_probe,
4443
.setup_arch = mpc836x_rdk_setup_arch,
45-
.init_IRQ = mpc83xx_ipic_and_qe_init_IRQ,
44+
.init_IRQ = mpc83xx_ipic_init_IRQ,
4645
.get_irq = ipic_get_irq,
4746
.restart = mpc83xx_restart,
4847
.time_init = mpc83xx_time_init,

arch/powerpc/platforms/83xx/mpc83xx.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,6 @@ extern int mpc837x_usb_cfg(void);
7272
extern int mpc834x_usb_cfg(void);
7373
extern int mpc831x_usb_cfg(void);
7474
extern void mpc83xx_ipic_init_IRQ(void);
75-
#ifdef CONFIG_QUICC_ENGINE
76-
extern void mpc83xx_qe_init_IRQ(void);
77-
extern void mpc83xx_ipic_and_qe_init_IRQ(void);
78-
#else
79-
static inline void __init mpc83xx_qe_init_IRQ(void) {}
80-
#define mpc83xx_ipic_and_qe_init_IRQ mpc83xx_ipic_init_IRQ
81-
#endif /* CONFIG_QUICC_ENGINE */
8275

8376
#ifdef CONFIG_PCI
8477
extern void mpc83xx_setup_pci(void);

arch/powerpc/platforms/85xx/corenet_generic.c

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
#include <asm/mpic.h>
2525
#include <asm/ehv_pic.h>
2626
#include <asm/swiotlb.h>
27-
#include <soc/fsl/qe/qe_ic.h>
2827

2928
#include <linux/of_platform.h>
3029
#include <sysdev/fsl_soc.h>
@@ -38,22 +37,13 @@ void __init corenet_gen_pic_init(void)
3837
unsigned int flags = MPIC_BIG_ENDIAN | MPIC_SINGLE_DEST_CPU |
3938
MPIC_NO_RESET;
4039

41-
struct device_node *np;
42-
4340
if (ppc_md.get_irq == mpic_get_coreint_irq)
4441
flags |= MPIC_ENABLE_COREINT;
4542

4643
mpic = mpic_alloc(NULL, 0, flags, 0, 512, " OpenPIC ");
4744
BUG_ON(mpic == NULL);
4845

4946
mpic_init(mpic);
50-
51-
np = of_find_compatible_node(NULL, NULL, "fsl,qe-ic");
52-
if (np) {
53-
qe_ic_init(np, 0, qe_ic_cascade_low_mpic,
54-
qe_ic_cascade_high_mpic);
55-
of_node_put(np);
56-
}
5747
}
5848

5949
/*

arch/powerpc/platforms/85xx/mpc85xx_mds.c

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
#include <sysdev/fsl_soc.h>
4545
#include <sysdev/fsl_pci.h>
4646
#include <soc/fsl/qe/qe.h>
47-
#include <soc/fsl/qe/qe_ic.h>
4847
#include <asm/mpic.h>
4948
#include <asm/swiotlb.h>
5049
#include "smp.h"
@@ -268,33 +267,8 @@ static void __init mpc85xx_mds_qe_init(void)
268267
}
269268
}
270269

271-
static void __init mpc85xx_mds_qeic_init(void)
272-
{
273-
struct device_node *np;
274-
275-
np = of_find_compatible_node(NULL, NULL, "fsl,qe");
276-
if (!of_device_is_available(np)) {
277-
of_node_put(np);
278-
return;
279-
}
280-
281-
np = of_find_compatible_node(NULL, NULL, "fsl,qe-ic");
282-
if (!np) {
283-
np = of_find_node_by_type(NULL, "qeic");
284-
if (!np)
285-
return;
286-
}
287-
288-
if (machine_is(p1021_mds))
289-
qe_ic_init(np, 0, qe_ic_cascade_low_mpic,
290-
qe_ic_cascade_high_mpic);
291-
else
292-
qe_ic_init(np, 0, qe_ic_cascade_muxed_mpic, NULL);
293-
of_node_put(np);
294-
}
295270
#else
296271
static void __init mpc85xx_mds_qe_init(void) { }
297-
static void __init mpc85xx_mds_qeic_init(void) { }
298272
#endif /* CONFIG_QUICC_ENGINE */
299273

300274
static void __init mpc85xx_mds_setup_arch(void)
@@ -364,7 +338,6 @@ static void __init mpc85xx_mds_pic_init(void)
364338
BUG_ON(mpic == NULL);
365339

366340
mpic_init(mpic);
367-
mpc85xx_mds_qeic_init();
368341
}
369342

370343
static int __init mpc85xx_mds_probe(void)

0 commit comments

Comments
 (0)