Commit 47622aa8 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'loongarch-fixes-6.19-2' of...

Merge tag 'loongarch-fixes-6.19-2' of git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson

Pull LoongArch fixes from Huacai Chen:
 "Remove redundant code in head.S, fix PMU counter allocation for mixed-
  type event groups, fix a lot of dts build warnings, and fix kvm_device
  memory leaks"

* tag 'loongarch-fixes-6.19-2' of git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson:
  LoongArch: KVM: Fix kvm_device leak in kvm_pch_pic_destroy()
  LoongArch: KVM: Fix kvm_device leak in kvm_eiointc_destroy()
  LoongArch: KVM: Fix kvm_device leak in kvm_ipi_destroy()
  LoongArch: dts: loongson-2k1000: Fix i2c-gpio node names
  LoongArch: dts: loongson-2k2000: Add default interrupt controller address cells
  LoongArch: dts: loongson-2k1000: Add default interrupt controller address cells
  LoongArch: dts: loongson-2k0500: Add default interrupt controller address cells
  LoongArch: dts: Describe PCI sideband IRQ through interrupt-extended
  LoongArch: Fix PMU counter allocation for mixed-type event groups
  LoongArch: Remove redundant code in head.S
parents d12453c7 1cf342a7
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -131,6 +131,7 @@ liointc0: interrupt-controller@1fe11400 {
			reg-names = "main", "isr0";

			interrupt-controller;
			#address-cells = <0>;
			#interrupt-cells = <2>;
			interrupt-parent = <&cpuintc>;
			interrupts = <2>;
@@ -149,6 +150,7 @@ liointc1: interrupt-controller@1fe11440 {
			reg-names = "main", "isr0";

			interrupt-controller;
			#address-cells = <0>;
			#interrupt-cells = <2>;
			interrupt-parent = <&cpuintc>;
			interrupts = <4>;
@@ -164,6 +166,7 @@ eiointc: interrupt-controller@1fe11600 {
			compatible = "loongson,ls2k0500-eiointc";
			reg = <0x0 0x1fe11600 0x0 0xea00>;
			interrupt-controller;
			#address-cells = <0>;
			#interrupt-cells = <1>;
			interrupt-parent = <&cpuintc>;
			interrupts = <3>;
+13 −18
Original line number Diff line number Diff line
@@ -46,7 +46,7 @@ cpuintc: interrupt-controller {
	};

	/* i2c of the dvi eeprom edid */
	i2c-gpio-0 {
	i2c-0 {
		compatible = "i2c-gpio";
		scl-gpios = <&gpio0 0 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
		sda-gpios = <&gpio0 1 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
@@ -57,7 +57,7 @@ i2c-gpio-0 {
	};

	/* i2c of the eeprom edid */
	i2c-gpio-1 {
	i2c-1 {
		compatible = "i2c-gpio";
		scl-gpios = <&gpio0 33 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
		sda-gpios = <&gpio0 32 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
@@ -114,6 +114,7 @@ liointc0: interrupt-controller@1fe01400 {
			      <0x0 0x1fe01140 0x0 0x8>;
			reg-names = "main", "isr0", "isr1";
			interrupt-controller;
			#address-cells = <0>;
			#interrupt-cells = <2>;
			interrupt-parent = <&cpuintc>;
			interrupts = <2>;
@@ -131,6 +132,7 @@ liointc1: interrupt-controller@1fe01440 {
			      <0x0 0x1fe01148 0x0 0x8>;
			reg-names = "main", "isr0", "isr1";
			interrupt-controller;
			#address-cells = <0>;
			#interrupt-cells = <2>;
			interrupt-parent = <&cpuintc>;
			interrupts = <3>;
@@ -437,54 +439,47 @@ pcie@1a000000 {

			gmac0: ethernet@3,0 {
				reg = <0x1800 0x0 0x0 0x0 0x0>;
				interrupt-parent = <&liointc0>;
				interrupts = <12 IRQ_TYPE_LEVEL_HIGH>,
					     <13 IRQ_TYPE_LEVEL_HIGH>;
				interrupts-extended = <&liointc0 12 IRQ_TYPE_LEVEL_HIGH>,
						      <&liointc0 13 IRQ_TYPE_LEVEL_HIGH>;
				interrupt-names = "macirq", "eth_lpi";
				status = "disabled";
			};

			gmac1: ethernet@3,1 {
				reg = <0x1900 0x0 0x0 0x0 0x0>;
				interrupt-parent = <&liointc0>;
				interrupts = <14 IRQ_TYPE_LEVEL_HIGH>,
					     <15 IRQ_TYPE_LEVEL_HIGH>;
				interrupts-extended = <&liointc0 14 IRQ_TYPE_LEVEL_HIGH>,
						      <&liointc0 15 IRQ_TYPE_LEVEL_HIGH>;
				interrupt-names = "macirq", "eth_lpi";
				status = "disabled";
			};

			ehci0: usb@4,1 {
				reg = <0x2100 0x0 0x0 0x0 0x0>;
				interrupt-parent = <&liointc1>;
				interrupts = <18 IRQ_TYPE_LEVEL_HIGH>;
				interrupts-extended = <&liointc1 18 IRQ_TYPE_LEVEL_HIGH>;
				status = "disabled";
			};

			ohci0: usb@4,2 {
				reg = <0x2200 0x0 0x0 0x0 0x0>;
				interrupt-parent = <&liointc1>;
				interrupts = <19 IRQ_TYPE_LEVEL_HIGH>;
				interrupts-extended = <&liointc1 19 IRQ_TYPE_LEVEL_HIGH>;
				status = "disabled";
			};

			display@6,0 {
				reg = <0x3000 0x0 0x0 0x0 0x0>;
				interrupt-parent = <&liointc0>;
				interrupts = <28 IRQ_TYPE_LEVEL_HIGH>;
				interrupts-extended = <&liointc0 28 IRQ_TYPE_LEVEL_HIGH>;
				status = "disabled";
			};

			hda@7,0 {
				reg = <0x3800 0x0 0x0 0x0 0x0>;
				interrupt-parent = <&liointc0>;
				interrupts = <4 IRQ_TYPE_LEVEL_HIGH>;
				interrupts-extended = <&liointc0 4 IRQ_TYPE_LEVEL_HIGH>;
				status = "disabled";
			};

			sata: sata@8,0 {
				reg = <0x4000 0x0 0x0 0x0 0x0>;
				interrupt-parent = <&liointc0>;
				interrupts = <19 IRQ_TYPE_LEVEL_HIGH>;
				interrupts-extended = <&liointc0 19 IRQ_TYPE_LEVEL_HIGH>;
				status = "disabled";
			};

+15 −20
Original line number Diff line number Diff line
@@ -126,6 +126,7 @@ liointc: interrupt-controller@1fe01400 {
			reg = <0x0 0x1fe01400 0x0 0x64>;

			interrupt-controller;
			#address-cells = <0>;
			#interrupt-cells = <2>;
			interrupt-parent = <&cpuintc>;
			interrupts = <2>;
@@ -140,6 +141,7 @@ eiointc: interrupt-controller@1fe01600 {
			compatible = "loongson,ls2k2000-eiointc";
			reg = <0x0 0x1fe01600 0x0 0xea00>;
			interrupt-controller;
			#address-cells = <0>;
			#interrupt-cells = <1>;
			interrupt-parent = <&cpuintc>;
			interrupts = <3>;
@@ -149,6 +151,7 @@ pic: interrupt-controller@10000000 {
			compatible = "loongson,pch-pic-1.0";
			reg = <0x0 0x10000000 0x0 0x400>;
			interrupt-controller;
			#address-cells = <0>;
			#interrupt-cells = <2>;
			loongson,pic-base-vec = <0>;
			interrupt-parent = <&eiointc>;
@@ -291,65 +294,57 @@ pcie@1a000000 {

			gmac0: ethernet@3,0 {
				reg = <0x1800 0x0 0x0 0x0 0x0>;
				interrupts = <12 IRQ_TYPE_LEVEL_HIGH>,
					     <13 IRQ_TYPE_LEVEL_HIGH>;
				interrupts-extended = <&pic 12 IRQ_TYPE_LEVEL_HIGH>,
						      <&pic 13 IRQ_TYPE_LEVEL_HIGH>;
				interrupt-names = "macirq", "eth_lpi";
				interrupt-parent = <&pic>;
				status = "disabled";
			};

			gmac1: ethernet@3,1 {
				reg = <0x1900 0x0 0x0 0x0 0x0>;
				interrupts = <14 IRQ_TYPE_LEVEL_HIGH>,
					     <15 IRQ_TYPE_LEVEL_HIGH>;
				interrupts-extended = <&pic 14 IRQ_TYPE_LEVEL_HIGH>,
						      <&pic 15 IRQ_TYPE_LEVEL_HIGH>;
				interrupt-names = "macirq", "eth_lpi";
				interrupt-parent = <&pic>;
				status = "disabled";
			};

			gmac2: ethernet@3,2 {
				reg = <0x1a00 0x0 0x0 0x0 0x0>;
				interrupts = <17 IRQ_TYPE_LEVEL_HIGH>,
					     <18 IRQ_TYPE_LEVEL_HIGH>;
				interrupts-extended = <&pic 17 IRQ_TYPE_LEVEL_HIGH>,
						      <&pic 18 IRQ_TYPE_LEVEL_HIGH>;
				interrupt-names = "macirq", "eth_lpi";
				interrupt-parent = <&pic>;
				status = "disabled";
			};

			xhci0: usb@4,0 {
				reg = <0x2000 0x0 0x0 0x0 0x0>;
				interrupts = <48 IRQ_TYPE_LEVEL_HIGH>;
				interrupt-parent = <&pic>;
				interrupts-extended = <&pic 48 IRQ_TYPE_LEVEL_HIGH>;
				status = "disabled";
			};

			xhci1: usb@19,0 {
				reg = <0xc800 0x0 0x0 0x0 0x0>;
				interrupts = <22 IRQ_TYPE_LEVEL_HIGH>;
				interrupt-parent = <&pic>;
				interrupts-extended = <&pic 22 IRQ_TYPE_LEVEL_HIGH>;
				status = "disabled";
			};

			display@6,1 {
				reg = <0x3100 0x0 0x0 0x0 0x0>;
				interrupts = <28 IRQ_TYPE_LEVEL_HIGH>;
				interrupt-parent = <&pic>;
				interrupts-extended = <&pic 28 IRQ_TYPE_LEVEL_HIGH>;
				status = "disabled";
			};

			i2s@7,0 {
				reg = <0x3800 0x0 0x0 0x0 0x0>;
				interrupts = <78 IRQ_TYPE_LEVEL_HIGH>,
					     <79 IRQ_TYPE_LEVEL_HIGH>;
				interrupts-extended = <&pic 78 IRQ_TYPE_LEVEL_HIGH>,
						      <&pic 79 IRQ_TYPE_LEVEL_HIGH>;
				interrupt-names = "tx", "rx";
				interrupt-parent = <&pic>;
				status = "disabled";
			};

			sata: sata@8,0 {
				reg = <0x4000 0x0 0x0 0x0 0x0>;
				interrupts = <16 IRQ_TYPE_LEVEL_HIGH>;
				interrupt-parent = <&pic>;
				interrupts-extended = <&pic 16 IRQ_TYPE_LEVEL_HIGH>;
				status = "disabled";
			};

+0 −8
Original line number Diff line number Diff line
@@ -126,14 +126,6 @@ SYM_CODE_START(smpboot_entry)
	LONG_LI		t1, CSR_STFILL
	csrxchg		t0, t1, LOONGARCH_CSR_IMPCTL1
#endif
	/* Enable PG */
	li.w		t0, 0xb0		# PLV=0, IE=0, PG=1
	csrwr		t0, LOONGARCH_CSR_CRMD
	li.w		t0, 0x04		# PLV=0, PIE=1, PWE=0
	csrwr		t0, LOONGARCH_CSR_PRMD
	li.w		t0, 0x00		# FPE=0, SXE=0, ASXE=0, BTE=0
	csrwr		t0, LOONGARCH_CSR_EUEN

	la.pcrel	t0, cpuboot_data
	ld.d		sp, t0, CPU_BOOT_STACK
	ld.d		tp, t0, CPU_BOOT_TINFO
+18 −3
Original line number Diff line number Diff line
@@ -626,6 +626,18 @@ static const struct loongarch_perf_event *loongarch_pmu_map_cache_event(u64 conf
	return pev;
}

static inline bool loongarch_pmu_event_requires_counter(const struct perf_event *event)
{
	switch (event->attr.type) {
	case PERF_TYPE_HARDWARE:
	case PERF_TYPE_HW_CACHE:
	case PERF_TYPE_RAW:
		return true;
	default:
		return false;
	}
}

static int validate_group(struct perf_event *event)
{
	struct cpu_hw_events fake_cpuc;
@@ -633,15 +645,18 @@ static int validate_group(struct perf_event *event)

	memset(&fake_cpuc, 0, sizeof(fake_cpuc));

	if (loongarch_pmu_alloc_counter(&fake_cpuc, &leader->hw) < 0)
	if (loongarch_pmu_event_requires_counter(leader) &&
	    loongarch_pmu_alloc_counter(&fake_cpuc, &leader->hw) < 0)
		return -EINVAL;

	for_each_sibling_event(sibling, leader) {
		if (loongarch_pmu_alloc_counter(&fake_cpuc, &sibling->hw) < 0)
		if (loongarch_pmu_event_requires_counter(sibling) &&
		    loongarch_pmu_alloc_counter(&fake_cpuc, &sibling->hw) < 0)
			return -EINVAL;
	}

	if (loongarch_pmu_alloc_counter(&fake_cpuc, &event->hw) < 0)
	if (loongarch_pmu_event_requires_counter(event) &&
	    loongarch_pmu_alloc_counter(&fake_cpuc, &event->hw) < 0)
		return -EINVAL;

	return 0;
Loading