提交 0b0fa57a 编写于 作者: L Linus Torvalds

Merge tag 'mips_5.18_1' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux

Pull MIPS fixes from Thomas Bogendoerfer:

 - build fix for gpio

 - fix crc32 build problems

 - check for failed memory allocations

* tag 'mips_5.18_1' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux:
  MIPS: crypto: Fix CRC32 code
  MIPS: rb532: move GPIOD definition into C-files
  MIPS: lantiq: check the return value of kzalloc()
  mips: sgi-ip22: add a check for the return of kzalloc()
...@@ -28,7 +28,7 @@ enum crc_type { ...@@ -28,7 +28,7 @@ enum crc_type {
}; };
#ifndef TOOLCHAIN_SUPPORTS_CRC #ifndef TOOLCHAIN_SUPPORTS_CRC
#define _ASM_MACRO_CRC32(OP, SZ, TYPE) \ #define _ASM_SET_CRC(OP, SZ, TYPE) \
_ASM_MACRO_3R(OP, rt, rs, rt2, \ _ASM_MACRO_3R(OP, rt, rs, rt2, \
".ifnc \\rt, \\rt2\n\t" \ ".ifnc \\rt, \\rt2\n\t" \
".error \"invalid operands \\\"" #OP " \\rt,\\rs,\\rt2\\\"\"\n\t" \ ".error \"invalid operands \\\"" #OP " \\rt,\\rs,\\rt2\\\"\"\n\t" \
...@@ -37,30 +37,36 @@ _ASM_MACRO_3R(OP, rt, rs, rt2, \ ...@@ -37,30 +37,36 @@ _ASM_MACRO_3R(OP, rt, rs, rt2, \
((SZ) << 6) | ((TYPE) << 8)) \ ((SZ) << 6) | ((TYPE) << 8)) \
_ASM_INSN32_IF_MM(0x00000030 | (__rs << 16) | (__rt << 21) | \ _ASM_INSN32_IF_MM(0x00000030 | (__rs << 16) | (__rt << 21) | \
((SZ) << 14) | ((TYPE) << 3))) ((SZ) << 14) | ((TYPE) << 3)))
_ASM_MACRO_CRC32(crc32b, 0, 0); #define _ASM_UNSET_CRC(op, SZ, TYPE) ".purgem " #op "\n\t"
_ASM_MACRO_CRC32(crc32h, 1, 0);
_ASM_MACRO_CRC32(crc32w, 2, 0);
_ASM_MACRO_CRC32(crc32d, 3, 0);
_ASM_MACRO_CRC32(crc32cb, 0, 1);
_ASM_MACRO_CRC32(crc32ch, 1, 1);
_ASM_MACRO_CRC32(crc32cw, 2, 1);
_ASM_MACRO_CRC32(crc32cd, 3, 1);
#define _ASM_SET_CRC ""
#else /* !TOOLCHAIN_SUPPORTS_CRC */ #else /* !TOOLCHAIN_SUPPORTS_CRC */
#define _ASM_SET_CRC ".set\tcrc\n\t" #define _ASM_SET_CRC(op, SZ, TYPE) ".set\tcrc\n\t"
#define _ASM_UNSET_CRC(op, SZ, TYPE)
#endif #endif
#define _CRC32(crc, value, size, type) \ #define __CRC32(crc, value, op, SZ, TYPE) \
do { \ do { \
__asm__ __volatile__( \ __asm__ __volatile__( \
".set push\n\t" \ ".set push\n\t" \
_ASM_SET_CRC \ _ASM_SET_CRC(op, SZ, TYPE) \
#type #size " %0, %1, %0\n\t" \ #op " %0, %1, %0\n\t" \
".set pop" \ _ASM_UNSET_CRC(op, SZ, TYPE) \
: "+r" (crc) \ ".set pop" \
: "r" (value)); \ : "+r" (crc) \
: "r" (value)); \
} while (0) } while (0)
#define _CRC32_crc32b(crc, value) __CRC32(crc, value, crc32b, 0, 0)
#define _CRC32_crc32h(crc, value) __CRC32(crc, value, crc32h, 1, 0)
#define _CRC32_crc32w(crc, value) __CRC32(crc, value, crc32w, 2, 0)
#define _CRC32_crc32d(crc, value) __CRC32(crc, value, crc32d, 3, 0)
#define _CRC32_crc32cb(crc, value) __CRC32(crc, value, crc32cb, 0, 1)
#define _CRC32_crc32ch(crc, value) __CRC32(crc, value, crc32ch, 1, 1)
#define _CRC32_crc32cw(crc, value) __CRC32(crc, value, crc32cw, 2, 1)
#define _CRC32_crc32cd(crc, value) __CRC32(crc, value, crc32cd, 3, 1)
#define _CRC32(crc, value, size, op) \
_CRC32_##op##size(crc, value)
#define CRC32(crc, value, size) \ #define CRC32(crc, value, size) \
_CRC32(crc, value, size, crc32) _CRC32(crc, value, size, crc32)
......
...@@ -29,15 +29,6 @@ ...@@ -29,15 +29,6 @@
#define DEV3TC 0x01003C #define DEV3TC 0x01003C
#define BTCS 0x010040 #define BTCS 0x010040
#define BTCOMPARE 0x010044 #define BTCOMPARE 0x010044
#define GPIOBASE 0x050000
/* Offsets relative to GPIOBASE */
#define GPIOFUNC 0x00
#define GPIOCFG 0x04
#define GPIOD 0x08
#define GPIOILEVEL 0x0C
#define GPIOISTAT 0x10
#define GPIONMIEN 0x14
#define IMASK6 0x38
#define LO_WPX (1 << 0) #define LO_WPX (1 << 0)
#define LO_ALE (1 << 1) #define LO_ALE (1 << 1)
#define LO_CLE (1 << 2) #define LO_CLE (1 << 2)
......
...@@ -167,6 +167,8 @@ static inline void clkdev_add_sys(const char *dev, unsigned int module, ...@@ -167,6 +167,8 @@ static inline void clkdev_add_sys(const char *dev, unsigned int module,
{ {
struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL); struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL);
if (!clk)
return;
clk->cl.dev_id = dev; clk->cl.dev_id = dev;
clk->cl.con_id = NULL; clk->cl.con_id = NULL;
clk->cl.clk = clk; clk->cl.clk = clk;
......
...@@ -122,6 +122,8 @@ static inline void clkdev_add_gptu(struct device *dev, const char *con, ...@@ -122,6 +122,8 @@ static inline void clkdev_add_gptu(struct device *dev, const char *con,
{ {
struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL); struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL);
if (!clk)
return;
clk->cl.dev_id = dev_name(dev); clk->cl.dev_id = dev_name(dev);
clk->cl.con_id = con; clk->cl.con_id = con;
clk->cl.clk = clk; clk->cl.clk = clk;
......
...@@ -315,6 +315,8 @@ static void clkdev_add_pmu(const char *dev, const char *con, bool deactivate, ...@@ -315,6 +315,8 @@ static void clkdev_add_pmu(const char *dev, const char *con, bool deactivate,
{ {
struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL); struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL);
if (!clk)
return;
clk->cl.dev_id = dev; clk->cl.dev_id = dev;
clk->cl.con_id = con; clk->cl.con_id = con;
clk->cl.clk = clk; clk->cl.clk = clk;
...@@ -338,6 +340,8 @@ static void clkdev_add_cgu(const char *dev, const char *con, ...@@ -338,6 +340,8 @@ static void clkdev_add_cgu(const char *dev, const char *con,
{ {
struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL); struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL);
if (!clk)
return;
clk->cl.dev_id = dev; clk->cl.dev_id = dev;
clk->cl.con_id = con; clk->cl.con_id = con;
clk->cl.clk = clk; clk->cl.clk = clk;
...@@ -356,24 +360,28 @@ static void clkdev_add_pci(void) ...@@ -356,24 +360,28 @@ static void clkdev_add_pci(void)
struct clk *clk_ext = kzalloc(sizeof(struct clk), GFP_KERNEL); struct clk *clk_ext = kzalloc(sizeof(struct clk), GFP_KERNEL);
/* main pci clock */ /* main pci clock */
clk->cl.dev_id = "17000000.pci"; if (clk) {
clk->cl.con_id = NULL; clk->cl.dev_id = "17000000.pci";
clk->cl.clk = clk; clk->cl.con_id = NULL;
clk->rate = CLOCK_33M; clk->cl.clk = clk;
clk->rates = valid_pci_rates; clk->rate = CLOCK_33M;
clk->enable = pci_enable; clk->rates = valid_pci_rates;
clk->disable = pmu_disable; clk->enable = pci_enable;
clk->module = 0; clk->disable = pmu_disable;
clk->bits = PMU_PCI; clk->module = 0;
clkdev_add(&clk->cl); clk->bits = PMU_PCI;
clkdev_add(&clk->cl);
}
/* use internal/external bus clock */ /* use internal/external bus clock */
clk_ext->cl.dev_id = "17000000.pci"; if (clk_ext) {
clk_ext->cl.con_id = "external"; clk_ext->cl.dev_id = "17000000.pci";
clk_ext->cl.clk = clk_ext; clk_ext->cl.con_id = "external";
clk_ext->enable = pci_ext_enable; clk_ext->cl.clk = clk_ext;
clk_ext->disable = pci_ext_disable; clk_ext->enable = pci_ext_enable;
clkdev_add(&clk_ext->cl); clk_ext->disable = pci_ext_disable;
clkdev_add(&clk_ext->cl);
}
} }
/* xway socs can generate clocks on gpio pins */ /* xway socs can generate clocks on gpio pins */
...@@ -393,9 +401,15 @@ static void clkdev_add_clkout(void) ...@@ -393,9 +401,15 @@ static void clkdev_add_clkout(void)
char *name; char *name;
name = kzalloc(sizeof("clkout0"), GFP_KERNEL); name = kzalloc(sizeof("clkout0"), GFP_KERNEL);
if (!name)
continue;
sprintf(name, "clkout%d", i); sprintf(name, "clkout%d", i);
clk = kzalloc(sizeof(struct clk), GFP_KERNEL); clk = kzalloc(sizeof(struct clk), GFP_KERNEL);
if (!clk) {
kfree(name);
continue;
}
clk->cl.dev_id = "1f103000.cgu"; clk->cl.dev_id = "1f103000.cgu";
clk->cl.con_id = name; clk->cl.con_id = name;
clk->cl.clk = clk; clk->cl.clk = clk;
......
...@@ -37,6 +37,16 @@ ...@@ -37,6 +37,16 @@
#include <asm/mach-rc32434/rb.h> #include <asm/mach-rc32434/rb.h>
#include <asm/mach-rc32434/gpio.h> #include <asm/mach-rc32434/gpio.h>
#define GPIOBASE 0x050000
/* Offsets relative to GPIOBASE */
#define GPIOFUNC 0x00
#define GPIOCFG 0x04
#define GPIOD 0x08
#define GPIOILEVEL 0x0C
#define GPIOISTAT 0x10
#define GPIONMIEN 0x14
#define IMASK6 0x38
struct rb532_gpio_chip { struct rb532_gpio_chip {
struct gpio_chip chip; struct gpio_chip chip;
void __iomem *regbase; void __iomem *regbase;
......
...@@ -363,6 +363,8 @@ static void ip22_check_gio(int slotno, unsigned long addr, int irq) ...@@ -363,6 +363,8 @@ static void ip22_check_gio(int slotno, unsigned long addr, int irq)
printk(KERN_INFO "GIO: slot %d : %s (id %x)\n", printk(KERN_INFO "GIO: slot %d : %s (id %x)\n",
slotno, name, id); slotno, name, id);
gio_dev = kzalloc(sizeof *gio_dev, GFP_KERNEL); gio_dev = kzalloc(sizeof *gio_dev, GFP_KERNEL);
if (!gio_dev)
return;
gio_dev->name = name; gio_dev->name = name;
gio_dev->slotno = slotno; gio_dev->slotno = slotno;
gio_dev->id.id = id; gio_dev->id.id = id;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册